2012-03-07 87 views
4

有誰知道Mach-O LC_FUNCTION_STARTS命令指向的數據格式是什麼?Mach-O文件LC_FUNCTION_STARTS加載命令

我能找到的大部分信息是在loader.h頭文件:

#define LC_FUNCTION_STARTS 0x26 /* compressed table of function start addresses */ 

我看到dyldinfo工具具有分析這個數據的-function_starts選項和工具是開源的,但最新的該工具的發行版本不包含支持:

http://opensource.apple.com/source/ld64/ld64-97.2/src/other/dyldinfo.cpp

有誰知道我在哪裏可以得到源dyldinfo的最新版本,或在那裏我能得到這個負載命令的詳細信息?

謝謝!

+0

更新:我找到了一個更新版本的dyldinfo的鏈接:http://opensource.apple.com/source/ld64/ld64-127.2/src/other/dyldinfo.cpp。當我在這裏發佈他們的時候(: – Locksleyu 2012-03-07 13:38:24

+1

一個更重要的問題 - loader是否真的使用這個命令,如果有的話,爲什麼呢?)它沒有足夠的信息來說明從哪裏開始( )位置基於輸出? – Locksleyu 2012-03-07 13:41:00

回答

7

它被那些需要用符號表示崩潰日誌,樣本,spindumps等地址的工具使用,以確定給定的地址是否落入函數中。調試器對於幫助他們更快速地找到給定地址所在的函數的範圍也是有用的。

本節內的數據格式爲DWARF-style ULEB128值的零終止序列。第一個值是從__TEXT段開始到第一個函數開始的偏移量。其餘值是下一個函數開始的偏移量。

+2

它對於需要對已剝離的可執行文件進行操作的工具最爲有用,例如,想要執行堆棧遍歷的調試器需要知道'__TEXT'中的所有函數的起始位置,以便它可以查看序言指令並查看堆棧如何修改以及寄存器的保存位置,但是在剝離的可執行文件中,大多數函數的符號都丟失了,LC_FUNCTION_STARTS給調試器提供了這些信息。 – 2013-03-14 07:47:24