Stack trace with double linking to get symbol names
This commit is contained in:
33
symbols.py
Normal file
33
symbols.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# Make assembly file from ELF symbols map
|
||||
# Then link it to kernel so it's aware of symbol names
|
||||
# then we can use that for the stack trace.
|
||||
|
||||
print("Extracting symbols from map file to assembly...")
|
||||
|
||||
with open("symbols.map", "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
symbols = []
|
||||
for line in lines:
|
||||
parts = line.split()
|
||||
# output is formed like "address name"
|
||||
symbols.append((parts[0], parts[1]))
|
||||
|
||||
with open("symbols.S", "w") as f:
|
||||
f.write("section .rodata\n")
|
||||
f.write("global symbol_table\n")
|
||||
f.write("global symbol_count\n")
|
||||
f.write("symbol_table:\n")
|
||||
|
||||
for i, (addr, name) in enumerate(symbols):
|
||||
f.write(f" dq 0x{addr}\n")
|
||||
f.write(f" dq sym_name_{i}\n")
|
||||
|
||||
f.write("\nsymbol_count: dq " + str(len(symbols)) + "\n\n")
|
||||
|
||||
for i, (addr, name) in enumerate(symbols):
|
||||
# escaping quotes
|
||||
safe_name = name.replace('"', '\\"')
|
||||
f.write(f'sym_name_{i}: db "{safe_name}", 0\n')
|
||||
|
||||
print("Done!")
|
||||
Reference in New Issue
Block a user