【问题标题】:lldb skip objc_msgSendlldb 跳过 objc_msgSend
【发布时间】:2016-01-15 09:49:39
【问题描述】:

我正在尝试确定 Apple 在 NSWorkspace 上公开的方法在内部是如何工作的,以便尝试解决该方法的不幸副作用(每次调用它都会写入磁盘)。我可以将 lldb 附加到我的可执行文件并在调用该方法时设置断点,然后使用si 进入objc_msgSend 并继续,但我更愿意直接跳过,直到我到达方法主体,是否存在有什么方法可以为方法体的开头设置断点,或者在跳转到方法体之前的objc_msgSend中的指令?

【问题讨论】:

    标签: objective-c macos reverse-engineering lldb


    【解决方案1】:

    您可以通过类似这样的方式为实际方法体本身设置断点

    br s -n "-[NSWorkspace openURL:]"
    

    【讨论】:

      【解决方案2】:

      lldb 的源代码级step 命令将始终为您传递 objc_msgSend 蹦床代码,在目标实现中停止,无论实现位于何处。

      不过,lldb 默认情况下也会自动退出没有调试信息的方法。这在很大程度上是人们想要的行为,但在这种情况下不是你想要的。幸运的是,您可以在给定的步骤中关闭后一种行为:

      (lldb) step -a 0
      

      或者通常通过设置控制它的全局默认值:

      (lldb) set set target.process.thread.step-in-avoid-nodebug 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-07
        • 2013-02-24
        • 1970-01-01
        • 2015-08-08
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2012-07-17
        相关资源
        最近更新 更多