在OS X下调试dyld

问题描述 投票:1回答:2

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

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

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

macos debugging dyld
2个回答
1
投票

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

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

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


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.