最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

LLDB Python scripting - how to add module or load symbol file at particular address? - Stack Overflow

programmeradmin2浏览0评论

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.

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.

Share Improve this question asked Nov 18, 2024 at 11:35 KotosifKotosif 3531 gold badge3 silver badges13 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 0

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>")

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/llvm/llvm-project/blob/main/lldb/examples/python/symbolication.py

发布评论

评论列表(0)

  1. 暂无评论