在OS X下调试dyld

时间:2015-03-24 15:19:09

标签: macos debugging dyld

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

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

如何设置调试会话并逐步浏览dyld的源代码以了解该程序出了什么问题?是否可以使用不同的手工制作的dyld启动应用程序?

2 个答案:

答案 0 :(得分:1)

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

请注意,无论如何都可以直接通过dyld - 使用lldb并执行启动-s,然后你也可以单步直接通过dyld,尽管是在装配中。

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

答案 1 :(得分:1)

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

因此,Symbol是“ dyldbootstrap :: start”,而模块是“ dyld”。

实际上,我们可以设置dyld`_dyld_start的符号断点,并且可以在进程启动后看到它已启用,但不会被击中。