diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-12-07 22:13:33 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-12-07 22:13:33 +0100 |
| commit | aed66d81b38981f7ea9ee92ebe7d803a10df113f (patch) | |
| tree | 15a5490eb4ddcaa5ce711a9c3d73e9c4874120c5 /src | |
| parent | e355280232dd602db6662c81b559f53786b42850 (diff) | |
| download | box64-aed66d81b38981f7ea9ee92ebe7d803a10df113f.tar.gz box64-aed66d81b38981f7ea9ee92ebe7d803a10df113f.zip | |
[TRACE] Better trace for some specific jump
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run_private.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index fa61d2c1..9d8beaae 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -1254,7 +1254,8 @@ int printFunctionAddr(uintptr_t nextaddr, const char* text) #ifdef HAVE_TRACE extern uint64_t start_cnt; -#define PK(a) (*(uint8_t*)(ip+a)) +#define PK(a) (*(uint8_t*)(ip+a)) +#define PKS(a) (*(int8_t*)(ip+a)) #define PK32(a) (*(int32_t*)((uint8_t*)(ip+a))) #define PK64(a) (*(int64_t*)((uint8_t*)(ip+a))) @@ -1333,6 +1334,10 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec) uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(2)):(*(uintptr_t*)(ip + 6 + PK32(2))); if(!printFunctionAddr(nextaddr, "=> ")) printf_log(LOG_NONE, " => %p", (void*)nextaddr); + } else if(PK(1)==0x60) { + uintptr_t nextaddr = *(uintptr_t*)(R_RAX+PK(2)); + if(!printFunctionAddr(nextaddr, "=> ")) + printf_log(LOG_NONE, " => %p", (void*)nextaddr); } else if((PK(1)==0x14) && (PK(2)==0x25)) { uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(3)):(*(uintptr_t*)(uintptr_t)PK32(3)); printf_log(LOG_NONE, " => %p", (void*)nextaddr); @@ -1341,7 +1346,6 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec) uintptr_t nextaddr = *(uintptr_t*)(R_R10 + R_RAX*8); printf_log(LOG_NONE, " => %p", (void*)nextaddr); printFunctionAddr(nextaddr, "=> "); - } } |