【问题标题】:LLDB python debugger register readLLDB python调试器寄存器读取
【发布时间】:2014-06-17 11:36:30
【问题描述】:

我需要跟踪程序执行,所以我决定做一个无限循环,并读取pc寄存器和make step。

平台:IOS

这样我想跟踪程序的执行流程。

问题是 - 我应该如何通过 LLDB python API 获得 $pc 注册?

【问题讨论】:

    标签: python ios debugging trace lldb


    【解决方案1】:

    您的程序可能有多个线程,并且每个线程都有不同的 PC。因此,您将从您的 SBProcess 对象开始,然后它具有用于迭代线程的“线程”属性 - 由 SBThread 对象表示。 SBThread 有一个“frames”属性,它是所有“SBFrames”的数组,frames[0] 是最底部的帧。 SBFrame 具有“pc”属性,即 pc。这张 Python SB API 表可能会对您有所帮助:

    LLDB Python APIs

    但是,您尝试执行的操作在 Xcode 下不起作用 - 这通常是在 iOS 上进行调试的唯一方法。 Xcode 和 Python 目前在争夺谁来控制进程执行,并且在某些时候错误的参与者获胜并且执行停止。

    您可以使用独立的 Python 驱动程序执行此类操作,示例如下:

    Process Events Example

    但由于您无法真正从独立的 lldb 附加到 iOS 进程,因此很难将其用于 iOS 开发。

    顺便说一句,我偶尔会在 Mac OS X 上完成您所描述的操作,而且速度也非常慢。当你绝望时,你只会想要这样做。

    您有时可以通过在每个函数入口点上放置断点来获得相同的效果,您可以在 lldb 命令行中使用:

    (lldb) break set -r .
    

    如果您只关心通过某些给定模块进行跟踪,您可以将 --shlib 选项添加一次或多次到“break set”行以将断点限制在这些库中。然后编写一个断点命令(可以在 Python 中执行)来收集必要的信息。这仍然会很慢,但更接近可用。

    【讨论】:

    • 非常感谢你,吉姆!真正有用的信息。我不是在开发,我正在探索一些恶意软件二进制文件,所以我想跟踪它的活动,然后将提取的信息映射到 IDA 以更深入。如果您有更多建议,请分享 :D 再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2012-12-15
    • 2012-11-22
    • 2015-03-13
    • 2012-08-11
    相关资源
    最近更新 更多