fix (stack-tracing): fixed symbol name resolve bug when function is extern / assembly

This commit is contained in:
antifallobst 2023-03-09 00:43:15 +01:00
parent 9b50ca77da
commit 6d60157da0
4 changed files with 5 additions and 6 deletions

View File

@ -39,6 +39,6 @@ typedef struct {
} symbol_T; } symbol_T;
symbol_T* symbol_resolve_from_name (symbol_T* symbols, uint64_t num_symbols, string_t name); symbol_T* symbol_resolve_from_name (symbol_T* symbols, uint64_t num_symbols, string_t name);
symbol_T* symbol_resolve_function_from_rip (symbol_T* symbols, uint64_t num_symbols, uint64_t rip); symbol_T* symbol_resolve_from_rip (symbol_T* symbols, uint64_t num_symbols, uint64_t rip);
#endif //NOX_SYMBOLS_H #endif //NOX_SYMBOLS_H

View File

@ -36,7 +36,7 @@ void stack_trace_call_stack(uint64_t rbp) {
log(LOG_NONE, " 0x%x -> <failed to resolve symbol> (process NULL reference)", rip); log(LOG_NONE, " 0x%x -> <failed to resolve symbol> (process NULL reference)", rip);
return; return;
} }
symbol_T* symbol = symbol_resolve_function_from_rip(process->executable->symbols, process->executable->num_symbols, rip); symbol_T* symbol = symbol_resolve_from_rip(process->executable->symbols, process->executable->num_symbols, rip);
if (symbol == NULL) { if (symbol == NULL) {
log(LOG_NONE, " 0x%x -> <failed to resolve symbol> (symbol NULL reference)", rip); log(LOG_NONE, " 0x%x -> <failed to resolve symbol> (symbol NULL reference)", rip);

View File

@ -89,7 +89,7 @@ void panic_log_call_stack(cpu_state_T* state) {
log(LOG_NONE, "Call Stack:"); log(LOG_NONE, "Call Stack:");
stack_trace_call_stack(state->rbp); stack_trace_call_stack(state->rbp);
symbol_T* symbol = symbol_resolve_function_from_rip(process->executable->symbols, process->executable->num_symbols, state->rip); symbol_T* symbol = symbol_resolve_from_rip(process->executable->symbols, process->executable->num_symbols,state->rip);
if (symbol == NULL) { if (symbol == NULL) {
log(LOG_NONE, " 0x%x -> <failed to resolve symbol> (symbol NULL reference)", state->rip); log(LOG_NONE, " 0x%x -> <failed to resolve symbol> (symbol NULL reference)", state->rip);
return; return;

View File

@ -33,13 +33,12 @@ symbol_T* symbol_resolve_from_name(symbol_T* symbols, uint64_t num_symbols, stri
return NULL; return NULL;
} }
symbol_T* symbol_resolve_function_from_rip(symbol_T* symbols, uint64_t num_symbols, uint64_t rip) { symbol_T* symbol_resolve_from_rip(symbol_T* symbols, uint64_t num_symbols, uint64_t rip) {
symbol_T* symbol = NULL; symbol_T* symbol = NULL;
for (uint64_t i = 0; i < num_symbols; i++) { for (uint64_t i = 0; i < num_symbols; i++) {
if (symbols[i].address <= rip && if (symbols[i].address <= rip &&
(symbol == NULL || symbols[i].address > symbol->address) && (symbol == NULL || symbols[i].address > symbol->address))
symbols[i].type == SYMBOL_FUNCTION)
{ {
symbol = &symbols[i]; symbol = &symbols[i];
} }