3

我希望能够静态链接到带有调试符号的 libc 构建,然后通过 lldb 运行我的程序。

otool -L <my binary>

使它看起来像唯一的动态链接库(dll)是:

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

我猜是 libc dll 是(虽然nm没有列出我在 libc 中所期望的所有内容)。也许只是某种存根加载程序。

/usr/lib/苹果似乎没有提供 libSystem 的调试版本。

你如何在 OSX (10.11.3) 上调试 libc?

可能的副本: 在 Mac OS X 上,如何获得 System/LibC 的调试版本以进行源代码级调试?

4

1 回答 1

2

我很难回答你的问题,但我认为有几点可以涵盖你的问题:

otool -L 将显示您链接的所有 dylib。

/usr/lib/libSystem.B.dylib 是一个伞库,可以重新导出多个 dylib,包括 libc (/usr/lib/system/libsystem_c.dylib)。如果您想查看系统 C 运行时包含哪些符号,您需要在该 dylib 上使用 nm,而不是 libSystem。

如果您在自己的 libc 中进行静态链接,那么它不会出现在“otool -L”中,因为它是一个静态库,因此是您可执行文件的一部分。

如果您将自己的 libc 静态链接到可执行文件中,那么在二进制文件上使用 nm 可能不会显示您期望的所有符号,因为链接器将优化掉可执行文件不需要的死代码。您可以通过对 ld 使用 -force_load 选项来确保添加所有内容。查看 ld 手册页以获取更多详细信息。

于 2016-02-29T07:12:22.430 回答