diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-05-17 21:23:14 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-05-17 21:23:14 +0200 |
| commit | 61725c8b498c6a3bed508440a31c0f3ed83d54b9 (patch) | |
| tree | d412f8a5f5295539d9c2d6cc75102ef18f46e812 /src | |
| parent | 727178df574fab93a029c608e022fbbd5fc5a4a3 (diff) | |
| download | box64-61725c8b498c6a3bed508440a31c0f3ed83d54b9.tar.gz box64-61725c8b498c6a3bed508440a31c0f3ed83d54b9.zip | |
Small fixes to my_backtrace function
Diffstat (limited to 'src')
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 27f0ed47..ced6a6cc 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -2221,21 +2221,21 @@ EXPORT int my_semctl(x64emu_t* emu, int semid, int semnum, int cmd, union semun EXPORT int my_backtrace(x64emu_t* emu, void** buffer, int size) { // Get current Framepointer - uintptr_t **fp = (uintptr_t**)R_RBP; - uintptr_t **stack_end = (uintptr_t**)(emu->init_stack + emu->size_stack); - uintptr_t **stack_start = (uintptr_t**)(emu->init_stack); + uintptr_t *fp = (uintptr_t*)R_RBP; + uintptr_t *stack_end = (uintptr_t*)(emu->init_stack + emu->size_stack); + uintptr_t *stack_start = (uintptr_t*)(emu->init_stack); // check if fp is on another stack (in case of beeing call from a signal with altstack) x64emu_t *thread_emu = thread_get_emu(); - if(emu!=thread_emu && ((fp>(uintptr_t**)(thread_emu->init_stack)) && (fp<(uintptr_t**)(thread_emu->init_stack + thread_emu->size_stack)))) { - stack_end = (uintptr_t**)(thread_emu->init_stack + thread_emu->size_stack); - stack_start = (uintptr_t**)(thread_emu->init_stack); + if(emu!=thread_emu && ((fp>(uintptr_t*)(thread_emu->init_stack)) && (fp<(uintptr_t*)(thread_emu->init_stack + thread_emu->size_stack)))) { + stack_end = (uintptr_t*)(thread_emu->init_stack + thread_emu->size_stack); + stack_start = (uintptr_t*)(thread_emu->init_stack); } int idx=0; while(idx<size) { - if(!fp || (fp>stack_end) || (fp<stack_start)) - break; - buffer[idx] = fp[1]; - fp = (uintptr_t**)fp[0]; + if(!fp || (fp>=stack_end) || (fp<=stack_start)) + return idx; + buffer[idx] = (void*)fp[1]; + fp = (uintptr_t*)fp[0]; ++idx; } return idx; |