From 90445f7f1d868e737e22a4cb77e17de95563cd36 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 11 Dec 2022 22:33:24 +0100 Subject: [DYNAREC] Small fix on unwinding of the x64 address when a signal occurs just after a NOP opcode --- src/libtools/signals.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/libtools') diff --git a/src/libtools/signals.c b/src/libtools/signals.c index b7594d24..0b4c98c5 100755 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -425,12 +425,14 @@ uintptr_t getX64Address(dynablock_t* db, uintptr_t arm_addr) armsz+=db->instsize[i].nat*4; ++i; } while((db->instsize[i-1].x64==15) || (db->instsize[i-1].nat==15)); - if(arm_addr>=armaddr && arm_addr<(armaddr+armsz)) - return x64addr; - armaddr+=armsz; - x64addr+=x64sz; - if(arm_addr==armaddr) - return x64addr; + // if the opcode is a NOP on ARM side (so armsz==0), it cannot be an address to find + if(armsz) { + if((arm_addr>=armaddr) && (arm_addr<(armaddr+armsz))) + return x64addr; + armaddr+=armsz; + x64addr+=x64sz; + } else + x64addr+=x64sz; } while(db->instsize[i].x64 || db->instsize[i].nat); return x64addr; } -- cgit 1.4.1