LLDB Python API,如何找到模块的加载地址?

问题描述 投票:0回答:1

我正在尝试为lldb编写一个Python插件,该插件将基于给定的模块名称和该模块开头的偏移量来创建断点。 Currenlty我正在使用以下命令手动执行此操作:

(lldb) image list my_module
[  0] XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX 0x00000000deadbeef /path/to/my_module
(lldb) breakpoint set -a 0x00000000deadbeef + 0x1234

而且我想使它自动化。为此,我需要获取my_module的加载地址。类似于使用lldb的image list命令并读取结果地址。

[我找到了方法SBModule.ResolveFileAddress(),该方法进行反向转换-它获取绝对地址并将其转换为相对于模块的绝对地址。

是否有一个接受SBModule对象或模块名称的函数,并返回该模块的负载?

python debugging lldb
1个回答
1
投票

模块本身实际上并没有加载地址。在许多系统上,模块的不同部分可以独立地重定位,因此每个部分可以具有不同的加载地址。这甚至可能在mach-o的共享缓存中发生,尽管通常mach-o将二进制文件作为一个单元加载。

“图像列表”显示二进制文件的TEXT部分的加载地址。如果您知道要查找的符号在TEXT部分中,则可以从SBModule获得SBSections(它具有可迭代的“ sections”属性),找到TEXT部分并获取其加载地址。

© www.soinside.com 2019 - 2024. All rights reserved.