diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-05-04 21:33:40 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-05-04 21:33:40 +0200 |
| commit | 987ff861fdf865dda513ebbc12b8089262b99f85 (patch) | |
| tree | 0fa243c66c21eeeea46da21dd5631dbf2b59bc65 | |
| parent | f3f36e323bd10e66ec6ef72beb47cca296502307 (diff) | |
| download | box64-987ff861fdf865dda513ebbc12b8089262b99f85.tar.gz box64-987ff861fdf865dda513ebbc12b8089262b99f85.zip | |
Added some Hack for Windows int 2d call ([ARM64_DYNAREC] too)
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_00.c | 17 | ||||
| -rwxr-xr-x | src/emu/x64run.c | 14 |
2 files changed, 27 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 7696a6ec..d52f4eae 100755 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -1808,6 +1808,23 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin #endif } break; + case 0xCD: + INST_NAME("INT n"); + u8 = F8; + if(box64_wine && u8==0x2D) { + // lets do nothing + MESSAGE(LOG_INFO, "INT 2D Windows anti-debug hack\n"); + } else { + SETFLAGS(X_ALL, SF_SET); // Hack to set flags in "don't care" state + GETIP(ip); + STORE_XEMU_CALL(xRIP); + CALL(native_priv, -1); + LOAD_XEMU_CALL(xRIP); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + } + break; case 0xCF: INST_NAME("IRET"); diff --git a/src/emu/x64run.c b/src/emu/x64run.c index a97d164c..20b70945 100755 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -1143,11 +1143,17 @@ x64emurun: #endif break; case 0xCD: /* INT n */ + tmp8u = F8; // this is a privilege opcode... - #ifndef TEST_INTERPRETER - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); - STEP; - #endif + if(box64_wine && tmp8u==0x2D) { + // lets ignore the INT 2D + printf_log(LOG_DEBUG, "INT 2D called\n"); + } else { + #ifndef TEST_INTERPRETER + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + STEP; + #endif + } break; |