Merge pull request #116 from JonathonReinhart/use-void-ptrs

change mem read/write APIs to use void*
This commit is contained in:
Nguyen Anh Quynh 2015-09-08 01:52:27 +08:00
commit 39f4ee88ce
14 changed files with 54 additions and 50 deletions

View file

@ -313,7 +313,7 @@ uc_err uc_reg_read(uc_engine *uc, int regid, void *value);
for detailed error). for detailed error).
*/ */
UNICORN_EXPORT UNICORN_EXPORT
uc_err uc_mem_write(uc_engine *uc, uint64_t address, const uint8_t *bytes, size_t size); uc_err uc_mem_write(uc_engine *uc, uint64_t address, const void *bytes, size_t size);
/* /*
Read a range of bytes in memory. Read a range of bytes in memory.
@ -329,7 +329,7 @@ uc_err uc_mem_write(uc_engine *uc, uint64_t address, const uint8_t *bytes, size_
for detailed error). for detailed error).
*/ */
UNICORN_EXPORT UNICORN_EXPORT
uc_err uc_mem_read(uc_engine *uc, uint64_t address, uint8_t *bytes, size_t size); uc_err uc_mem_read(uc_engine *uc, uint64_t address, void *bytes, size_t size);
/* /*
Emulate machine code in a specific duration of time. Emulate machine code in a specific duration of time.

View file

@ -183,14 +183,14 @@ int main(int argc, char **argv, char **envp)
} }
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_write(uc, 0x1ff000, (uint8_t*)buf1, 4096)) { if (uc_mem_write(uc, 0x1ff000, buf1, sizeof(buf1))) {
printf("not ok %d - Failed to write random buffer 1 to memory, quit!\n", log_num++); printf("not ok %d - Failed to write random buffer 1 to memory, quit!\n", log_num++);
return 3; return 3;
} else { } else {
printf("ok %d - Random buffer 1 written to memory\n", log_num++); printf("ok %d - Random buffer 1 written to memory\n", log_num++);
} }
if (uc_mem_write(uc, 0x301000, (uint8_t*)buf2, 4096)) { if (uc_mem_write(uc, 0x301000, buf2, sizeof(buf2))) {
printf("not ok %d - Failed to write random buffer 2 to memory, quit!\n", log_num++); printf("not ok %d - Failed to write random buffer 2 to memory, quit!\n", log_num++);
return 4; return 4;
} else { } else {
@ -248,7 +248,7 @@ int main(int argc, char **argv, char **envp)
//make sure that random blocks didn't get nuked //make sure that random blocks didn't get nuked
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_read(uc, 0x1ff000, (uint8_t*)readbuf, 4096)) { if (uc_mem_read(uc, 0x1ff000, readbuf, sizeof(readbuf))) {
printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++);
} else { } else {
printf("ok %d - Random buffer 1 read from memory\n", log_num++); printf("ok %d - Random buffer 1 read from memory\n", log_num++);
@ -259,7 +259,7 @@ int main(int argc, char **argv, char **envp)
} }
} }
if (uc_mem_read(uc, 0x301000, (uint8_t*)readbuf, 4096)) { if (uc_mem_read(uc, 0x301000, readbuf, sizeof(readbuf))) {
printf("not ok %d - Failed to read random buffer 2 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 2 from memory\n", log_num++);
} else { } else {
printf("ok %d - Random buffer 2 read from memory\n", log_num++); printf("ok %d - Random buffer 2 read from memory\n", log_num++);

View file

@ -88,7 +88,7 @@ static void hook_code(uc_engine *uc, uint64_t addr, uint32_t size, void *user_da
switch (opcode) { switch (opcode) {
case 0x90: //nop case 0x90: //nop
printf("# Handling NOP\n"); printf("# Handling NOP\n");
if (uc_mem_read(uc, 0x200000 + test_num * 0x100000, (uint8_t*)&testval, sizeof(testval)) != UC_ERR_OK) { if (uc_mem_read(uc, 0x200000 + test_num * 0x100000, &testval, sizeof(testval)) != UC_ERR_OK) {
printf("not ok %d - uc_mem_read fail for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000); printf("not ok %d - uc_mem_read fail for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000);
} else { } else {
printf("ok %d - good uc_mem_read for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000); printf("ok %d - good uc_mem_read for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000);
@ -143,7 +143,7 @@ static bool hook_mem_invalid(uc_engine *uc, uc_mem_type type,
case UC_MEM_WRITE_PROT: case UC_MEM_WRITE_PROT:
printf("# write to non-writeable memory at 0x%"PRIx64 ", data size = %u, data value = 0x%"PRIx64 "\n", addr, size, value); printf("# write to non-writeable memory at 0x%"PRIx64 ", data size = %u, data value = 0x%"PRIx64 "\n", addr, size, value);
if (uc_mem_read(uc, addr, (uint8_t*)&testval, sizeof(testval)) != UC_ERR_OK) { if (uc_mem_read(uc, addr, &testval, sizeof(testval)) != UC_ERR_OK) {
printf("not ok %d - uc_mem_read fail for address: 0x%" PRIx64 "\n", log_num++, addr); printf("not ok %d - uc_mem_read fail for address: 0x%" PRIx64 "\n", log_num++, addr);
} else { } else {
printf("ok %d - uc_mem_read success after mem_protect at test %d\n", log_num++, test_num - 1); printf("ok %d - uc_mem_read success after mem_protect at test %d\n", log_num++, test_num - 1);
@ -191,14 +191,14 @@ int main(int argc, char **argv, char **envp)
uc_mem_map(uc, 0x3ff000, 0x3000, UC_PROT_READ | UC_PROT_WRITE); uc_mem_map(uc, 0x3ff000, 0x3000, UC_PROT_READ | UC_PROT_WRITE);
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_write(uc, 0x3ff000, (uint8_t*)buf1, 4096)) { if (uc_mem_write(uc, 0x3ff000, buf1, sizeof(buf1))) {
printf("not ok %d - Failed to write random buffer 1 to memory, quit!\n", log_num++); printf("not ok %d - Failed to write random buffer 1 to memory, quit!\n", log_num++);
return 2; return 2;
} else { } else {
printf("ok %d - Random buffer 1 written to memory\n", log_num++); printf("ok %d - Random buffer 1 written to memory\n", log_num++);
} }
if (uc_mem_write(uc, 0x401000, (uint8_t*)buf2, 4096)) { if (uc_mem_write(uc, 0x401000, buf2, sizeof(buf2))) {
printf("not ok %d - Failed to write random buffer 2 to memory, quit!\n", log_num++); printf("not ok %d - Failed to write random buffer 2 to memory, quit!\n", log_num++);
return 3; return 3;
} else { } else {
@ -251,7 +251,7 @@ int main(int argc, char **argv, char **envp)
testval = 0x42424242; testval = 0x42424242;
for (addr = 0x200000; addr <= 0x400000; addr += 0x100000) { for (addr = 0x200000; addr <= 0x400000; addr += 0x100000) {
uint32_t val; uint32_t val;
if (uc_mem_read(uc, addr, (uint8_t*)&val, sizeof(val)) != UC_ERR_OK) { if (uc_mem_read(uc, addr, &val, sizeof(val)) != UC_ERR_OK) {
printf("not ok %d - Failed uc_mem_read for address 0x%x\n", log_num++, addr); printf("not ok %d - Failed uc_mem_read for address 0x%x\n", log_num++, addr);
} else { } else {
printf("ok %d - Good uc_mem_read from 0x%x\n", log_num++, addr); printf("ok %d - Good uc_mem_read from 0x%x\n", log_num++, addr);
@ -270,7 +270,7 @@ int main(int argc, char **argv, char **envp)
//make sure that random blocks didn't get nuked //make sure that random blocks didn't get nuked
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_read(uc, 0x3ff000, (uint8_t*)readbuf, 4096)) { if (uc_mem_read(uc, 0x3ff000, readbuf, sizeof(readbuf))) {
printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++);
} else { } else {
printf("ok %d - Random buffer 1 read from memory\n", log_num++); printf("ok %d - Random buffer 1 read from memory\n", log_num++);
@ -281,7 +281,7 @@ int main(int argc, char **argv, char **envp)
} }
} }
if (uc_mem_read(uc, 0x401000, (uint8_t*)readbuf, 4096)) { if (uc_mem_read(uc, 0x401000, readbuf, sizeof(readbuf))) {
printf("not ok %d - Failed to read random buffer 2 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 2 from memory\n", log_num++);
} else { } else {
printf("ok %d - Random buffer 2 read from memory\n", log_num++); printf("ok %d - Random buffer 2 read from memory\n", log_num++);

View file

@ -83,7 +83,7 @@ static void hook_code(uc_engine *uc, uint64_t addr, uint32_t size, void *user_da
switch (opcode) { switch (opcode) {
case 0x90: //nop case 0x90: //nop
printf("# Handling NOP\n"); printf("# Handling NOP\n");
if (uc_mem_read(uc, 0x200000 + test_num * 0x100000, (uint8_t*)&testval, sizeof(testval)) != UC_ERR_OK) { if (uc_mem_read(uc, 0x200000 + test_num * 0x100000, &testval, sizeof(testval)) != UC_ERR_OK) {
printf("not ok %d - uc_mem_read fail for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000); printf("not ok %d - uc_mem_read fail for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000);
} else { } else {
printf("ok %d - good uc_mem_read for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000); printf("ok %d - good uc_mem_read for address: 0x%x\n", log_num++, 0x200000 + test_num * 0x100000);
@ -138,7 +138,7 @@ static bool hook_mem_invalid(uc_engine *uc, uc_mem_type type,
case UC_MEM_WRITE: case UC_MEM_WRITE:
printf("# write to invalid memory at 0x%"PRIx64 ", data size = %u, data value = 0x%"PRIx64 "\n", addr, size, value); printf("# write to invalid memory at 0x%"PRIx64 ", data size = %u, data value = 0x%"PRIx64 "\n", addr, size, value);
if (uc_mem_read(uc, addr, (uint8_t*)&testval, sizeof(testval)) != UC_ERR_OK) { if (uc_mem_read(uc, addr, &testval, sizeof(testval)) != UC_ERR_OK) {
printf("ok %d - uc_mem_read fail for address: 0x%" PRIx64 "\n", log_num++, addr); printf("ok %d - uc_mem_read fail for address: 0x%" PRIx64 "\n", log_num++, addr);
} else { } else {
printf("not ok %d - uc_mem_read success after unmap at test %d\n", log_num++, test_num - 1); printf("not ok %d - uc_mem_read success after unmap at test %d\n", log_num++, test_num - 1);
@ -186,14 +186,14 @@ int main(int argc, char **argv, char **envp)
uc_mem_map(uc, 0x3ff000, 0x3000, UC_PROT_READ | UC_PROT_WRITE); uc_mem_map(uc, 0x3ff000, 0x3000, UC_PROT_READ | UC_PROT_WRITE);
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_write(uc, 0x3ff000, (uint8_t*)buf1, 4096)) { if (uc_mem_write(uc, 0x3ff000, buf1, sizeof(buf1))) {
printf("not ok %d - Failed to write random buffer 1 to memory, quit!\n", log_num++); printf("not ok %d - Failed to write random buffer 1 to memory, quit!\n", log_num++);
return 2; return 2;
} else { } else {
printf("ok %d - Random buffer 1 written to memory\n", log_num++); printf("ok %d - Random buffer 1 written to memory\n", log_num++);
} }
if (uc_mem_write(uc, 0x401000, (uint8_t*)buf2, 4096)) { if (uc_mem_write(uc, 0x401000, buf2, sizeof(buf1))) {
printf("not ok %d - Failed to write random buffer 2 to memory, quit!\n", log_num++); printf("not ok %d - Failed to write random buffer 2 to memory, quit!\n", log_num++);
return 3; return 3;
} else { } else {
@ -246,7 +246,7 @@ int main(int argc, char **argv, char **envp)
testval = 0x42424242; testval = 0x42424242;
for (addr = 0x200000; addr <= 0x400000; addr += 0x100000) { for (addr = 0x200000; addr <= 0x400000; addr += 0x100000) {
uint32_t val; uint32_t val;
if (uc_mem_read(uc, addr, (uint8_t*)&val, sizeof(val)) != UC_ERR_OK) { if (uc_mem_read(uc, addr, &val, sizeof(val)) != UC_ERR_OK) {
printf("not ok %d - Failed uc_mem_read for address 0x%x\n", log_num++, addr); printf("not ok %d - Failed uc_mem_read for address 0x%x\n", log_num++, addr);
} else { } else {
printf("ok %d - Good uc_mem_read from 0x%x\n", log_num++, addr); printf("ok %d - Good uc_mem_read from 0x%x\n", log_num++, addr);
@ -261,7 +261,7 @@ int main(int argc, char **argv, char **envp)
//make sure that random blocks didn't get nuked //make sure that random blocks didn't get nuked
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_read(uc, 0x3ff000, (uint8_t*)readbuf, 4096)) { if (uc_mem_read(uc, 0x3ff000, readbuf, sizeof(readbuf))) {
printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++);
} else { } else {
printf("ok %d - Random buffer 1 read from memory\n", log_num++); printf("ok %d - Random buffer 1 read from memory\n", log_num++);
@ -272,7 +272,7 @@ int main(int argc, char **argv, char **envp)
} }
} }
if (uc_mem_read(uc, 0x401000, (uint8_t*)readbuf, 4096)) { if (uc_mem_read(uc, 0x401000, readbuf, sizeof(readbuf))) {
printf("not ok %d - Failed to read random buffer 2 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 2 from memory\n", log_num++);
} else { } else {
printf("ok %d - Random buffer 2 read from memory\n", log_num++); printf("ok %d - Random buffer 2 read from memory\n", log_num++);

View file

@ -112,7 +112,7 @@ int main(int argc, char **argv, char **envp)
uc_mem_map(uc, 0x200000, 0x2000, UC_PROT_READ | UC_PROT_WRITE); uc_mem_map(uc, 0x200000, 0x2000, UC_PROT_READ | UC_PROT_WRITE);
// fill in the data that we want to copy // fill in the data that we want to copy
if (uc_mem_write(uc, 0x200000, (uint8_t*)buf1, 20)) { if (uc_mem_write(uc, 0x200000, buf1, 20)) {
printf("not ok %d - Failed to write read buffer to memory, quit!\n", log_num++); printf("not ok %d - Failed to write read buffer to memory, quit!\n", log_num++);
return 2; return 2;
} }
@ -160,7 +160,7 @@ int main(int argc, char **argv, char **envp)
//make sure that data got copied //make sure that data got copied
// fill in sections that shouldn't get touched // fill in sections that shouldn't get touched
if (uc_mem_read(uc, 0x201000, (uint8_t*)readbuf, 20)) { if (uc_mem_read(uc, 0x201000, readbuf, 20)) {
printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++); printf("not ok %d - Failed to read random buffer 1 from memory\n", log_num++);
} }
else { else {

View file

@ -59,7 +59,7 @@ static void test_arm(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)ARM_CODE, sizeof(ARM_CODE) - 1); uc_mem_write(uc, ADDRESS, ARM_CODE, sizeof(ARM_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_ARM_REG_R0, &r0); uc_reg_write(uc, UC_ARM_REG_R0, &r0);
@ -112,7 +112,7 @@ static void test_thumb(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)THUMB_CODE, sizeof(THUMB_CODE) - 1); uc_mem_write(uc, ADDRESS, THUMB_CODE, sizeof(THUMB_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_ARM_REG_SP, &sp); uc_reg_write(uc, UC_ARM_REG_SP, &sp);

View file

@ -50,7 +50,7 @@ static void test_arm(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)ARM_CODE, sizeof(ARM_CODE) - 1); uc_mem_write(uc, ADDRESS, ARM_CODE, sizeof(ARM_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_ARM_REG_R0, &r0); uc_reg_write(uc, UC_ARM_REG_R0, &r0);
@ -103,7 +103,7 @@ static void test_thumb(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)THUMB_CODE, sizeof(THUMB_CODE) - 1); uc_mem_write(uc, ADDRESS, THUMB_CODE, sizeof(THUMB_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_ARM_REG_SP, &sp); uc_reg_write(uc, UC_ARM_REG_SP, &sp);

View file

@ -48,7 +48,7 @@ static void test_arm64(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)ARM_CODE, sizeof(ARM_CODE) - 1); uc_mem_write(uc, ADDRESS, ARM_CODE, sizeof(ARM_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_ARM64_REG_X11, &x11); uc_reg_write(uc, UC_ARM64_REG_X11, &x11);

View file

@ -63,7 +63,7 @@ static void test_m68k(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)M68K_CODE, sizeof(M68K_CODE) - 1); uc_mem_write(uc, ADDRESS, M68K_CODE, sizeof(M68K_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_M68K_REG_D0, &d0); uc_reg_write(uc, UC_M68K_REG_D0, &d0);

View file

@ -47,7 +47,7 @@ static void test_mips_eb(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)MIPS_CODE_EB, sizeof(MIPS_CODE_EB) - 1); uc_mem_write(uc, ADDRESS, MIPS_CODE_EB, sizeof(MIPS_CODE_EB) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_MIPS_REG_1, &r1); uc_reg_write(uc, UC_MIPS_REG_1, &r1);
@ -97,7 +97,7 @@ static void test_mips_el(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)MIPS_CODE_EL, sizeof(MIPS_CODE_EL) - 1); uc_mem_write(uc, ADDRESS, MIPS_CODE_EL, sizeof(MIPS_CODE_EL) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_MIPS_REG_1, &r1); uc_reg_write(uc, UC_MIPS_REG_1, &r1);

View file

@ -49,7 +49,7 @@ static void test_sparc(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
uc_mem_write(uc, ADDRESS, (uint8_t *)SPARC_CODE, sizeof(SPARC_CODE) - 1); uc_mem_write(uc, ADDRESS, SPARC_CODE, sizeof(SPARC_CODE) - 1);
// initialize machine registers // initialize machine registers
uc_reg_write(uc, UC_SPARC_REG_G1, &g1); uc_reg_write(uc, UC_SPARC_REG_G1, &g1);

View file

@ -189,7 +189,7 @@ static void test_i386(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32, sizeof(X86_CODE32) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -220,7 +220,7 @@ static void test_i386(void)
printf(">>> EDX = 0x%x\n", r_edx); printf(">>> EDX = 0x%x\n", r_edx);
// read from memory // read from memory
if (!uc_mem_read(uc, ADDRESS, (uint8_t *)&tmp, 4)) if (!uc_mem_read(uc, ADDRESS, &tmp, sizeof(tmp)))
printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", ADDRESS, tmp); printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", ADDRESS, tmp);
else else
printf(">>> Failed to read 4 bytes from [0x%x]\n", ADDRESS); printf(">>> Failed to read 4 bytes from [0x%x]\n", ADDRESS);
@ -248,7 +248,7 @@ static void test_i386_jump(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_JUMP, if (uc_mem_write(uc, ADDRESS, X86_CODE32_JUMP,
sizeof(X86_CODE32_JUMP) - 1)) { sizeof(X86_CODE32_JUMP) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
@ -295,7 +295,7 @@ static void test_i386_loop(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_LOOP, sizeof(X86_CODE32_LOOP) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32_LOOP, sizeof(X86_CODE32_LOOP) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -347,7 +347,7 @@ static void test_i386_invalid_mem_read(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_MEM_READ, sizeof(X86_CODE32_MEM_READ) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32_MEM_READ, sizeof(X86_CODE32_MEM_READ) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -405,7 +405,7 @@ static void test_i386_invalid_mem_write(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_MEM_WRITE, sizeof(X86_CODE32_MEM_WRITE) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32_MEM_WRITE, sizeof(X86_CODE32_MEM_WRITE) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -439,12 +439,12 @@ static void test_i386_invalid_mem_write(void)
printf(">>> EDX = 0x%x\n", r_edx); printf(">>> EDX = 0x%x\n", r_edx);
// read from memory // read from memory
if (!uc_mem_read(uc, 0xaaaaaaaa, (uint8_t *)&tmp, 4)) if (!uc_mem_read(uc, 0xaaaaaaaa, &tmp, sizeof(tmp)))
printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xaaaaaaaa, tmp); printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xaaaaaaaa, tmp);
else else
printf(">>> Failed to read 4 bytes from [0x%x]\n", 0xffffffaa); printf(">>> Failed to read 4 bytes from [0x%x]\n", 0xffffffaa);
if (!uc_mem_read(uc, 0xffffffaa, (uint8_t *)&tmp, 4)) if (!uc_mem_read(uc, 0xffffffaa, &tmp, sizeof(tmp)))
printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xffffffaa, tmp); printf(">>> Read 4 bytes from [0x%x] = 0x%x\n", 0xffffffaa, tmp);
else else
printf(">>> Failed to read 4 bytes from [0x%x]\n", 0xffffffaa); printf(">>> Failed to read 4 bytes from [0x%x]\n", 0xffffffaa);
@ -476,7 +476,7 @@ static void test_i386_jump_invalid(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_JMP_INVALID, sizeof(X86_CODE32_JMP_INVALID) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32_JMP_INVALID, sizeof(X86_CODE32_JMP_INVALID) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -532,7 +532,7 @@ static void test_i386_inout(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_INOUT, sizeof(X86_CODE32_INOUT) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32_INOUT, sizeof(X86_CODE32_INOUT) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -607,7 +607,7 @@ static void test_x86_64(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE64, sizeof(X86_CODE64) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE64, sizeof(X86_CODE64) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -708,7 +708,7 @@ static void test_x86_64_syscall(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE64_SYSCALL, sizeof(X86_CODE64_SYSCALL) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE64_SYSCALL, sizeof(X86_CODE64_SYSCALL) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }
@ -760,7 +760,7 @@ static void test_x86_16(void)
uc_mem_map(uc, 0, 8 * 1024, UC_PROT_ALL); uc_mem_map(uc, 0, 8 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, 0, (uint8_t *)X86_CODE16, sizeof(X86_CODE64) - 1)) { if (uc_mem_write(uc, 0, X86_CODE16, sizeof(X86_CODE64) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }

View file

@ -23,7 +23,7 @@
static void hook_code(uc_engine *uc, uint64_t address, uint32_t size, void *user_data) static void hook_code(uc_engine *uc, uint64_t address, uint32_t size, void *user_data)
{ {
int r_eip; int r_eip;
char tmp[16]; uint8_t tmp[16];
printf("Tracing instruction at 0x%"PRIx64 ", instruction size = 0x%x\n", address, size); printf("Tracing instruction at 0x%"PRIx64 ", instruction size = 0x%x\n", address, size);
@ -31,10 +31,10 @@ static void hook_code(uc_engine *uc, uint64_t address, uint32_t size, void *user
printf("*** EIP = %x ***: ", r_eip); printf("*** EIP = %x ***: ", r_eip);
size = MIN(sizeof(tmp), size); size = MIN(sizeof(tmp), size);
if (!uc_mem_read(uc, address, (uint8_t *)tmp, size)) { if (!uc_mem_read(uc, address, tmp, size)) {
int i; int i;
for (i=0; i<size; i++) { for (i=0; i<size; i++) {
printf("%x ", ((uint8_t*)tmp)[i]); printf("%x ", tmp[i]);
} }
printf("\n"); printf("\n");
} }
@ -106,7 +106,7 @@ static void test_i386(void)
uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL);
// write machine code to be emulated to memory // write machine code to be emulated to memory
if (uc_mem_write(uc, ADDRESS, (uint8_t *)X86_CODE32_SELF, sizeof(X86_CODE32_SELF) - 1)) { if (uc_mem_write(uc, ADDRESS, X86_CODE32_SELF, sizeof(X86_CODE32_SELF) - 1)) {
printf("Failed to write emulation code to memory, quit!\n"); printf("Failed to write emulation code to memory, quit!\n");
return; return;
} }

8
uc.c
View file

@ -331,8 +331,10 @@ static bool check_mem_area(uc_engine *uc, uint64_t address, size_t size)
UNICORN_EXPORT UNICORN_EXPORT
uc_err uc_mem_read(uc_engine *uc, uint64_t address, uint8_t *bytes, size_t size) uc_err uc_mem_read(uc_engine *uc, uint64_t address, void *_bytes, size_t size)
{ {
uint8_t *bytes = _bytes;
if (!check_mem_area(uc, address, size)) if (!check_mem_area(uc, address, size))
return UC_ERR_MEM_READ; return UC_ERR_MEM_READ;
@ -359,8 +361,10 @@ uc_err uc_mem_read(uc_engine *uc, uint64_t address, uint8_t *bytes, size_t size)
} }
UNICORN_EXPORT UNICORN_EXPORT
uc_err uc_mem_write(uc_engine *uc, uint64_t address, const uint8_t *bytes, size_t size) uc_err uc_mem_write(uc_engine *uc, uint64_t address, const void *_bytes, size_t size)
{ {
const uint8_t *bytes = _bytes;
if (!check_mem_area(uc, address, size)) if (!check_mem_area(uc, address, size))
return UC_ERR_MEM_WRITE; return UC_ERR_MEM_WRITE;