【问题标题】:Debugging dyld under OS XOS X下调试dyld
【发布时间】:2015-03-24 15:19:09
【问题描述】:

我在 OS X 程序中遇到了一些关于动态加载库的加载和卸载以及符号绑定的模糊错误。首次尝试使用 DYLD_PRINT_* 环境变量分析问题失败。

我通过安装带有调试符号的 glibc 和相应的源解决了 GNU/Linux 下的类似问题。由于 dyld 的源代码也可用,因此在 OS X 下一定可以实现类似的东西。

我必须如何进行才能设置调试会话并单步调试 dyld 的源代码以了解程序出了什么问题?是否可以使用不同的手工 dyld 启动应用程序?

【问题讨论】:

标签: macos debugging dyld


【解决方案1】:

你可以设置dyld`dyldbootstrap::start的符号断点。

所以,Symbol 是“dyldbootstrap::start”,Module 是“dyld”。

其实我们可以给dyld`_dyld_start设置一个符号断点,在进程启动后我们可以看到它启用了,但是不会被命中。

【讨论】:

    【解决方案2】:

    是的,它实际上就是这样设计的。您可以将自定义 dyld 放到文件系统中,确保其 LC_ID_DYLINKER 命令设置正确。然后,要使用它,请编辑您正在加载的 Mach-O,使其 LC_LOAD_DYLINKER 指向它。

    请注意,无论如何都可以单步执行 dyld,而无需执行所有这些操作 - 使用 lldb 并执行 process launch -s ,然后您也可以单步执行 dyld,尽管是在汇编中。

    警告:不要在过程中触摸或移动 /usr/lib/dyld - 而是将自定义 dyld 并排放置到它上面。由于几乎所有东西都需要 dyld,因此移动它可能很难撤消(并且需要使用 ramdisk 引导并将根文件系统作为辅助文件安装,以便发出更正的 mv..)

    【讨论】:

    • 对不起,我比较喜欢Linux,请问如何安装dyld的调试信息呢?当然,我可以单步进入dyld,但是没有这些调试信息我只能看到汇编指令。
    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多