lldb 脚本 - 断点写出(breakpoint write) 修复

lldb 有断点序列化的功能,即写出到文件和从文件读取:


然而默认的写出存在 bug(我是在安卓 arm/thumb 环境下发现和处理这些问题的,对于存在多个 location 的断点,可能会出错,不过此情况较少,暂时未去处理)。

1.缺失模块名称

lldb 永远不会写入 so 的名称。

2.缺失 section 偏移

断点写出时无法保存正确的断点偏移值,默认在 “AddressOffset” 字段会写入 section 偏移,然而却没有字段保存 section 相对于库的偏移。


下断并写出

写出的断点文件,无法正常使用

可以看到 84125(0x1489D) 并不是相对于 libc.so 的偏移且无其他任何偏移值可计算该断点位置,也未见写入 libc.so 的名称;

读断点出错
插件修复的断点文件

插件将 AddressOffset 直接修改为相对于 so 的偏移,且增加了 so 的名称;


保存并读取

插件使用方法

  1. 下载插件: https://github.com/wizdzz/lldb_script/blob/master/breakpoint_write/breakpoint_write.py
  2. 在 lldb 中执行 command script import "path to breakpoint_write.py"
    或者 将该命令添加到 ~/.lldbinit 中(windows 下是 "C:\Users\Administrator.lldbinit",如果不存在,请自己创建它)。
  3. 执行 "bpw path_to_file" 命令写出断点文件,如果只提供文件名而没有路径,则会写出到控制台的当前路径。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容