mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 07:24:37 +00:00
Add ExGetKSymbolByAddress function to retrieve kernel symbols by address
This commit is contained in:
parent
23865ffc4f
commit
e69ace7fdc
@ -108,21 +108,48 @@ static const char *x86PageFaultDescriptions[9] = {
|
|||||||
|
|
||||||
int ActiveScreen = 0;
|
int ActiveScreen = 0;
|
||||||
|
|
||||||
|
char __modSym[20];
|
||||||
|
nsa const char *ExGetKSymbolByAddress(uintptr_t Address)
|
||||||
|
{
|
||||||
|
if (Address < (uintptr_t)&_kernel_start &&
|
||||||
|
Address > (uintptr_t)&_kernel_end)
|
||||||
|
return "<OUTSIDE KERNEL>";
|
||||||
|
|
||||||
|
if (!KernelSymbolTable)
|
||||||
|
return "<UNKNOWN>";
|
||||||
|
|
||||||
|
const char *sym = KernelSymbolTable->GetSymbol(Address);
|
||||||
|
|
||||||
|
size_t symLen = strlen(sym);
|
||||||
|
|
||||||
|
if (symLen > 16)
|
||||||
|
{
|
||||||
|
strncpy(__modSym, sym, 16);
|
||||||
|
__modSym[16] = '.';
|
||||||
|
__modSym[17] = '.';
|
||||||
|
__modSym[18] = '.';
|
||||||
|
__modSym[19] = '\0';
|
||||||
|
sym = __modSym;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unlikely(symLen > 128))
|
||||||
|
warn("Symbol \"%s\" is too long! Memory corrupted?", sym);
|
||||||
|
return sym;
|
||||||
|
}
|
||||||
|
|
||||||
nsa const char *ExGetKSymbol(CPU::ExceptionFrame *Frame)
|
nsa const char *ExGetKSymbol(CPU::ExceptionFrame *Frame)
|
||||||
{
|
{
|
||||||
if (Frame->rip < (uintptr_t)&_kernel_start &&
|
if (Frame->rip < (uintptr_t)&_kernel_start &&
|
||||||
Frame->rip > (uintptr_t)&_kernel_end)
|
Frame->rip > (uintptr_t)&_kernel_end)
|
||||||
return "<OUTSIDE KERNEL>";
|
return "<OUTSIDE KERNEL>";
|
||||||
|
|
||||||
if (KernelSymbolTable)
|
|
||||||
#if defined(a64)
|
#if defined(a64)
|
||||||
return KernelSymbolTable->GetSymbol(Frame->rip);
|
return ExGetKSymbolByAddress(Frame->rip);
|
||||||
#elif defined(a32)
|
#elif defined(a32)
|
||||||
return KernelSymbolTable->GetSymbol(Frame->eip);
|
return ExGetKSymbolByAddress(Frame->eip);
|
||||||
#elif defined(aa64)
|
#elif defined(aa64)
|
||||||
return KernelSymbolTable->GetSymbol(Frame->pc);
|
return ExGetKSymbolByAddress(Frame->pc);
|
||||||
#endif
|
#endif
|
||||||
return "<UNKNOWN>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsa char *TrimWhiteSpace(char *str)
|
nsa char *TrimWhiteSpace(char *str)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user