Reputation: 355
In LLDB you can do the following during a debugging session to add missing symbols at particular addresses:
target modules load --file <symbol file> .text 0x<address>
How can you do that in with the LLDB Python scripting module? I searched through the API but I couldn't find a corresponding method.
Upvotes: 0
Views: 53
Reputation: 27110
The SBTarget manages the list of modules. So you would add a module to the target (but not give it load addresses) using SBTarget::AddModule
. Then to give load addresses to the module, you can either use SBTarget::SetModuleLoadAddress
- if the whole module loads rigidly like on Darwin, or go through the sections of the module using SBTarget::SetSectionLoadAddress
if the sections load at different offsets as happens on ELF systems.
You might take a look at the symbolication.py module - particularly add_module
and load_module
. It's a pretty fully worked out version of how to recreate the symbol world of a binary from a list of modules and load addresses, then looking up addresses in that context. That's at:
https://github.com/llvm/llvm-project/blob/main/lldb/examples/python/symbolication.py
Upvotes: 0
Reputation: 355
I figured it out. You can make use of the debugger.HandleCommand
to run arbitrary LLDB command. The general way I resolved this was to define and register a function that can be called during a LLDB debugging session.
For example:
def load_libraries(debugger, command, result, internal_dict):
print(f"image add some_library.so", flush=True)
debugger.HandleCommand(f"image add some_library.so")
print(f"target modules load --file some_library.so .text 0x<some address>", flush=True)
debugger.HandleCommand(f"target modules load --file some_library.so .text 0x<some address>")
Upvotes: 0