python - LLDB Python API,如何找到模块的加载地址?
问题描述
我正在尝试为 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
对象或一个模块名称,并返回该模块的负载?
解决方案
模块本身并没有真正的加载地址。在许多系统上,模块的不同部分可以独立重定位,因此每个部分可以有不同的加载地址。这甚至可能发生在 mach-o 上的共享缓存中,尽管通常 mach-o 将二进制文件作为一个单元加载。
“图像列表”显示二进制文本部分的加载地址。如果您知道要查找的符号在 TEXT 部分中,那么您可以从 SBModule 中获取 SBSections(它具有可迭代的“sections”属性)找到 TEXT 部分并获取其加载地址。
推荐阅读
- firebase - 如何在 Firebase Firestore 中限制集合中的文档
- c++ - 有没有办法在 C++ 中处理一串位
- c++ - 如何在 SFML、c++ 上使用 sf::viewport 测试不同的分辨率
- c - ../sysdeps/i386/i686/multiarch/strcpy.c:没有这样的文件或目录
- java - 如何加入休眠?
- ios - UIActivityViewController 排除的ActivityTypes 不起作用
- android - SipManager 未注册到 SipRegistrationListener
- c++ - 在参数包中获取函数指针的返回类型并将其保存为与其他参数的连接元组
- angular - 在 Angular CLI 项目中使用 Jasmine 自定义匹配器
- android - 意识 API。在某些手机上获取 location.failure