2016-02-29 68 views
1

我希望能夠通過調試符號靜態鏈接到libc版本,然後通過lldb運行我的程序。如何在OSX中調試libc?

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(10.11.3)上調試libc?的

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

回答

1

我有一個很難跟隨你的問題,但也有,我認爲將覆蓋你問某些點進行:

otool - L會顯示你連接的所有dylib。

/usr/lib/libSystem.B.dylib是重新導出多個dylib的傘形庫,包括libc(/usr/lib/system/libsystem_c.dylib)。如果你想看看哪些符號是系統C運行時的一部分,那麼你需要在該dylib上使用nm,而不是libSystem。

如果您在自己的libc中靜態鏈接,那麼它將不會顯示在'otool -L'中,因爲它是一個靜態庫,因此是您的可執行文件的一部分。

如果staticy將自己的libc鏈接到您的可執行文件中,那麼在您的二進制文件中使用nm可能不會顯示您期望的所有符號,因爲鏈接程序將優化掉可執行文件不需要的死代碼。您可以確保通過對ld使用-force_load選項來添加所有內容。查看ld手冊頁以獲取更多細節。

+0

感謝您對奇數libSystem.B.dylib的信息。我更加好奇的是,調試libc的唯一方法是從蘋果開源代碼下載(這是一個版本後面,下載+編譯+靜態鏈接到它),所以你可能無法獲得源當前版本的OSX)。 –

+0

你需要在Libc內部進行調試嗎?理想情況下,您應該能夠將其作爲一個「正常工作」的黑盒子來執行......如果您認爲Libc中存在錯誤,請在http://bugreport.apple.com上提供雷達 –

+0

我正在嘗試通過逆向工程來教自己裝配libc正在做什麼。 –