about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/emu/x64syscall.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c
index e73b37ce..90ea820c 100755
--- a/src/emu/x64syscall.c
+++ b/src/emu/x64syscall.c
@@ -307,7 +307,22 @@ void EXPORT x64Syscall(x64emu_t *emu)
 {
     RESET_FLAGS(emu);
     uint32_t s = R_EAX; // EAX? (syscalls only go up to 547 anyways)
-    printf_log(LOG_DEBUG, "%p: Calling syscall 0x%02X (%d) %p %p %p %p %p %p", (void*)R_RIP, s, s, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_R10, (void*)R_R8, (void*)R_R9); 
+    int log = 0;
+    char t_buff[256] = "\0";
+    char t_buffret[128] = "\0";
+    char buff2[64] = "\0";
+    char* buff = NULL;
+    char* buffret = NULL;
+    if(box64_log>=LOG_DEBUG || cycle_log) {
+        log = 1;
+        buff = cycle_log?my_context->log_call[my_context->current_line]:t_buff;
+        buffret = cycle_log?my_context->log_ret[my_context->current_line]:t_buffret;
+        if(cycle_log)
+            my_context->current_line = (my_context->current_line+1)%cycle_log;
+        snprintf(buff, 255, "%04d|%p: Calling syscall 0x%02X (%d) %p %p %p %p %p %p", GetTID(), (void*)R_RIP, s, s, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_R10, (void*)R_R8, (void*)R_R9); 
+        if(!cycle_log)
+            printf_log(LOG_NONE, "%s", buff);
+    }
     // check wrapper first
     int cnt = sizeof(syscallwrap) / sizeof(scwrap_t);
     for (int i=0; i<cnt; i++) {
@@ -316,7 +331,7 @@ void EXPORT x64Syscall(x64emu_t *emu)
             switch(syscallwrap[i].nbpars) {
                 case 0: *(int64_t*)&R_RAX = syscall(sc); break;
                 case 1: *(int64_t*)&R_RAX = syscall(sc, R_RDI); break;
-                case 2: if(s==33) {printf_dump(LOG_DEBUG, " => sys_access(\"%s\", %ld)\n", (char*)R_RDI, R_RSI);}; *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI); break;
+                case 2: if(s==33) {if(log) snprintf(buff2, 63, " [sys_access(\"%s\", %ld)]", (char*)R_RDI, R_RSI);}; *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI); break;
                 case 3: *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI, R_RDX); break;
                 case 4: *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10); break;
                 case 5: *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10, R_R8); break;
@@ -326,7 +341,8 @@ void EXPORT x64Syscall(x64emu_t *emu)
                    emu->quit = 1;
                    return;
             }
-            printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX);
+            if(log) snprintf(buffret, 127, "0x%x%s", R_EAX, buff2);
+            if(log && !cycle_log) printf_log(LOG_NONE, "=> %s\n", buffret);
             return;
         }
     }
@@ -338,7 +354,7 @@ void EXPORT x64Syscall(x64emu_t *emu)
             *(int64_t*)&R_RAX = write((int)R_EDI, (void*)R_RSI, (size_t)R_RDX);
             break;
         case 2: // sys_open
-            if(s==5) {printf_log(LOG_DEBUG, " => sys_open(\"%s\", %d, %d)", (char*)R_RDI, of_convert(R_ESI), R_EDX);}; 
+            if(s==5) {if (log) snprintf(buff2, 63, " [sys_open(\"%s\", %d, %d)]", (char*)R_RDI, of_convert(R_ESI), R_EDX);}; 
             //*(int64_t*)&R_RAX = open((void*)R_EDI, of_convert(R_ESI), R_EDX);
             *(int64_t*)&R_RAX = my_open(emu, (void*)R_RDI, of_convert(R_ESI), R_EDX);
             break;
@@ -542,7 +558,8 @@ void EXPORT x64Syscall(x64emu_t *emu)
             emu->error |= ERR_UNIMPL;
             return;
     }
-    printf_log(LOG_DEBUG, " => 0x%lx\n", R_RAX);
+    if(log) snprintf(buffret, 127, "0x%lx%s", R_RAX, buff2);
+    if(log && !cycle_log) printf_log(LOG_NONE, "=> %s\n", buffret);
 }
 
 #define stack(n) (R_RSP+8+n)