美文网首页
lldb 脚本 - 断点写出(breakpoint write)

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

作者: wizdzz | 来源:发表于2019-09-19 16:50 被阅读0次

    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" 命令写出断点文件,如果只提供文件名而没有路径,则会写出到控制台的当前路径。

    相关文章

      网友评论

          本文标题:lldb 脚本 - 断点写出(breakpoint write)

          本文链接:https://www.haomeiwen.com/subject/gnqbyctx.html