about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-05-04 21:33:40 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-05-04 21:33:40 +0200
commit987ff861fdf865dda513ebbc12b8089262b99f85 (patch)
tree0fa243c66c21eeeea46da21dd5631dbf2b59bc65 /src
parentf3f36e323bd10e66ec6ef72beb47cca296502307 (diff)
downloadbox64-987ff861fdf865dda513ebbc12b8089262b99f85.tar.gz
box64-987ff861fdf865dda513ebbc12b8089262b99f85.zip
Added some Hack for Windows int 2d call ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_00.c17
-rwxr-xr-xsrc/emu/x64run.c14
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;