【问题标题】:LLDB Python API, how do I find load address of a module?LLDB Python API,如何找到模块的加载地址?
【发布时间】:2020-01-08 14:03:10
【问题描述】:

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

(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】:

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

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

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 2016-10-25
    • 2021-08-17
    • 2011-12-12
    • 1970-01-01
    • 2013-08-09
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多