diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-07-01 13:41:35 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-07-01 13:41:35 +0200 |
| commit | 569b7471f96ab17d04d548de4ca56d389a365148 (patch) | |
| tree | d728961e556b646ee251098b3412d2bfcc4722c9 /src | |
| parent | 74710cbf6abd3327c046a9cd9c8f60519a569116 (diff) | |
| download | box64-569b7471f96ab17d04d548de4ca56d389a365148.tar.gz box64-569b7471f96ab17d04d548de4ca56d389a365148.zip | |
Simplified a bit ROLLING_LOG buffer handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/box64context.c | 12 | ||||
| -rw-r--r-- | src/emu/x64int3.c | 10 | ||||
| -rw-r--r-- | src/emu/x64syscall.c | 4 | ||||
| -rwxr-xr-x | src/emu/x86int3.c | 8 | ||||
| -rw-r--r-- | src/include/box64context.h | 4 |
5 files changed, 15 insertions, 23 deletions
diff --git a/src/box64context.c b/src/box64context.c index 970ea9ad..444a76a8 100644 --- a/src/box64context.c +++ b/src/box64context.c @@ -149,10 +149,6 @@ static void atfork_child_box64context(void) void freeCycleLog(box64context_t* ctx) { if(BOX64ENV(rolling_log)) { - for(int i=0; i<BOX64ENV(rolling_log); ++i) { - box_free(ctx->log_call[i]); - box_free(ctx->log_ret[i]); - } box_free(ctx->log_call); box_free(ctx->log_ret); ctx->log_call = NULL; @@ -162,12 +158,8 @@ void freeCycleLog(box64context_t* ctx) void initCycleLog(box64context_t* context) { if(context && BOX64ENV(rolling_log)) { - context->log_call = (char**)box_calloc(BOX64ENV(rolling_log), sizeof(char*)); - context->log_ret = (char**)box_calloc(BOX64ENV(rolling_log), sizeof(char*)); - for(int i=0; i<BOX64ENV(rolling_log); ++i) { - context->log_call[i] = (char*)box_calloc(256, 1); - context->log_ret[i] = (char*)box_calloc(128, 1); - } + context->log_call = (char*)box_calloc(BOX64ENV(rolling_log), 256*sizeof(char)); + context->log_ret = (char*)box_calloc(BOX64ENV(rolling_log), 128*sizeof(char)); } } diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c index 0aa3ba45..1e9d2376 100644 --- a/src/emu/x64int3.c +++ b/src/emu/x64int3.c @@ -121,8 +121,8 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) if(BOX64ENV(rolling_log)) { my_context->current_line = (my_context->current_line+1)%BOX64ENV(rolling_log); } - char* buff = BOX64ENV(rolling_log)?my_context->log_call[cycle_line]:t_buff; - char* buffret = BOX64ENV(rolling_log)?my_context->log_ret[cycle_line]:NULL; + char* buff = BOX64ENV(rolling_log)?(my_context->log_call+256*cycle_line):t_buff; + char* buffret = BOX64ENV(rolling_log)?(my_context->log_ret+128*cycle_line):NULL; if(buffret) buffret[0] = '\0'; char *tmp; int post = 0; @@ -379,7 +379,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); if(BOX64ENV(rolling_log)) - snprintf(buffret, 128, "0x%lX%s%s", R_RAX, buff2, buff3); + snprintf(buffret, 127, "0x%lX%s%s", R_RAX, buff2, buff3); else { mutex_lock(&emu->context->mutex_trace); printf_log_prefix(0, LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3); @@ -411,8 +411,8 @@ void print_rolling_log(int loglevel) { int j = (my_context->current_line+1)%BOX64ENV(rolling_log); for (int i=0; i<BOX64ENV(rolling_log); ++i) { int k = (i+j)%BOX64ENV(rolling_log); - if(my_context->log_call[k][0]) { - printf_log(loglevel, "%s => return %s\n", my_context->log_call[k], my_context->log_ret[k]); + if(my_context->log_call[256*k+0]) { + printf_log(loglevel, "%s => return %s\n", my_context->log_call+256*k, my_context->log_ret+128*k); } } } diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c index 93c94267..3392cdcc 100644 --- a/src/emu/x64syscall.c +++ b/src/emu/x64syscall.c @@ -461,8 +461,8 @@ void EXPORT x64Syscall(x64emu_t *emu) char* buffret = NULL; if(BOX64ENV(log) >= LOG_DEBUG || BOX64ENV(rolling_log)) { log = 1; - buff = BOX64ENV(rolling_log)?my_context->log_call[my_context->current_line]:t_buff; - buffret = BOX64ENV(rolling_log)?my_context->log_ret[my_context->current_line]:t_buffret; + buff = BOX64ENV(rolling_log)?(my_context->log_call+256*my_context->current_line):t_buff; + buffret = BOX64ENV(rolling_log)?(my_context->log_ret+128*my_context->current_line):t_buffret; if(BOX64ENV(rolling_log)) my_context->current_line = (my_context->current_line+1)%BOX64ENV(rolling_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); diff --git a/src/emu/x86int3.c b/src/emu/x86int3.c index 0b4bfdcc..72d218bb 100755 --- a/src/emu/x86int3.c +++ b/src/emu/x86int3.c @@ -73,8 +73,8 @@ void x86Int3(x64emu_t* emu, uintptr_t* addr) if(BOX64ENV(rolling_log)) { my_context->current_line = (my_context->current_line+1)%BOX64ENV(rolling_log); } - char* buff = BOX64ENV(rolling_log)?my_context->log_call[cycle_line]:t_buff; - char* buffret = BOX64ENV(rolling_log)?my_context->log_ret[cycle_line]:NULL; + char* buff = BOX64ENV(rolling_log)?(my_context->log_call+256*cycle_line):t_buff; + char* buffret = BOX64ENV(rolling_log)?(my_context->log_ret+128*cycle_line):NULL; if(buffret) buffret[0] = '\0'; char *tmp; int post = 0; @@ -468,9 +468,9 @@ void x86Int3(x64emu_t* emu, uintptr_t* addr) snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); if(BOX64ENV(rolling_log)) { if(ret_fmt==1) - snprintf(buffret, 128, "%d%s%s", S_EAX, buff2, buff3); + snprintf(buffret, 127, "%d%s%s", S_EAX, buff2, buff3); else - snprintf(buffret, 128, "0x%X%s%s", R_EAX, buff2, buff3); + snprintf(buffret, 127, "0x%X%s%s", R_EAX, buff2, buff3); } else { mutex_lock(&emu->context->mutex_trace); if(ret_fmt==1) diff --git a/src/include/box64context.h b/src/include/box64context.h index e7c7b0cc..910b0e8a 100644 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -235,8 +235,8 @@ typedef struct box64context_s { int stack_clone_used; // rolling logs - char* *log_call; - char* *log_ret; + char* log_call; // is a large string composed of slices of 256 chars + char* log_ret; // is a large string composed of sloces of 128 chars int current_line; } box64context_t; |