LLDB Python API,如何找到模块的加载地址?
LLDB Python API, how do I find load address of a module?
我正在尝试为 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
对象或模块名称,以及 returns 该模块的负载?
模块本身并没有真正的加载地址。在许多系统上,模块的不同部分可以独立重定位,因此每个部分可以有不同的加载地址。这甚至可能发生在 mach-o 上的共享缓存中,尽管通常 mach-o 将二进制文件作为一个单元加载。
"image list"显示二进制文件TEXT部分的加载地址。如果您知道要查找的符号在 TEXT 部分中,那么您可以从 SBModule 中获取 SBSections(它有一个可迭代的 "sections" 属性)找到 TEXT 部分并加载它地址。
我正在尝试为 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
对象或模块名称,以及 returns 该模块的负载?
模块本身并没有真正的加载地址。在许多系统上,模块的不同部分可以独立重定位,因此每个部分可以有不同的加载地址。这甚至可能发生在 mach-o 上的共享缓存中,尽管通常 mach-o 将二进制文件作为一个单元加载。
"image list"显示二进制文件TEXT部分的加载地址。如果您知道要查找的符号在 TEXT 部分中,那么您可以从 SBModule 中获取 SBSections(它有一个可迭代的 "sections" 属性)找到 TEXT 部分并加载它地址。