如何在OSX中调试libc?

时间:2016-02-29 03:59:38

标签: macos reverse-engineering lldb libc otool

我希望能够通过调试符号静态链接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/中,Apple似乎没有提供libSystem的调试版本。

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

可能重复: On Mac OS X, how can you get a debug build of System/LibC for source level debugging?

1 个答案:

答案 0 :(得分:2)

我很难跟踪你的问题,但我认为有一些问题可以涵盖你所提出的问题:

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

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

如果您在自己的libc中静态链接,那么它就不会出现在&tutool -L&#39;因为它是一个静态库,因此是你可执行文件的一部分。

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