about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-01-02 18:38:02 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-01-02 18:38:02 +0100
commita9837a3aaf83ecddb3d4dff788b2ba48c94e7e82 (patch)
tree5838501888b8e64c74fb86e5f68106b08627fbf5
parent499492e10ad36fb1780b438ecfabe409b57ae1c5 (diff)
downloadbox64-a9837a3aaf83ecddb3d4dff788b2ba48c94e7e82.tar.gz
box64-a9837a3aaf83ecddb3d4dff788b2ba48c94e7e82.zip
[TRACE] Better trace for read wrapped function
-rw-r--r--src/emu/x64int3.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c
index 3d2d55f4..c78cdd0a 100644
--- a/src/emu/x64int3.c
+++ b/src/emu/x64int3.c
@@ -122,6 +122,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr)
                 int perr = 0;
                 uint64_t *pu64 = NULL;
                 uint32_t *pu32 = NULL;
+                uint8_t *pu8 = NULL;
                 const char *s = bridge->name;
                 if(!s)
                     s = GetNativeName((void*)a);
@@ -171,10 +172,12 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr)
                     perr = 2;
                 } else if (!strcmp(s, "read") || !strcmp(s, "my_read")) {
                     snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p, %zu)", tid, *(void**)(R_RSP), s, R_EDI, (void*)R_RSI, R_RDX);
+                    pu8 = (uint8_t*)R_RSI;
+                    post = 8;
                     perr = 1;
                 } else if (!strcmp(s, "write") || !strcmp(s, "my_write")) {
                     if(R_EDI==2 || R_EDI==3)
-                        snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p\"%s\", %zu)", tid, *(void**)(R_RSP), s, R_EDI, (void*)R_RSI, (char*)R_RSI, R_RDX);
+                        snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p\"%.*s\", %zu)", tid, *(void**)(R_RSP), s, R_EDI, (void*)R_RSI, R_EDX, (char*)R_RSI, R_RDX);
                     else
                         snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p, %zu)", tid, *(void**)(R_RSP), s, R_EDI, (void*)R_RSI, R_RDX);
                     perr = 1;
@@ -323,6 +326,17 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr)
                         break;
                     case 7: if(pu32) snprintf(buff2, 64, " [%d, %d] ", pu32[0], pu32[1]);
                         break;
+                    case 8: if(pu8 && S_RAX!=-1) {
+                        char buff5[64] = "";
+                        char buff6[10];
+                        int n = S_EAX; if(n>64/(3*2)) n=64/(3*2);
+                        for(int i=0; i<n; ++i) {
+                            snprintf(buff6, sizeof(buff6), "%02X ", pu8[i]);
+                            strcat(buff5, buff6);
+                        }
+                        snprintf(buff2, 64, "[%s%s] ", buff5, (n==S_EAX)?"":"...");
+                    }
+                    break;
                 }
                 if(perr==1 && ((int)R_EAX)<0)
                     snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno));