2012-03-07 3 views
4

Mach-O LC_FUNCTION_STARTSコマンドが指すデータの形式は誰にも分かりますか?Mach-OファイルLC_FUNCTION_STARTS loadコマンド

私は見つけることができるほとんどの情報はloader.hヘッダーファイルである:

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

私はdyldinfoツールは、このデータを分析し、ツールはオープンソースである-function_startsオプションを持って見たが、最新のツールのバージョンをリリースすることはサポートが含まれていません:私はdyldinfoの最新バージョンのソースを取得することができ、またはどこ私はこのロードコマンドの詳細情報を得ることができる場所

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

誰でも知っていますか?

ありがとうございます!

+0

アップデート:dyldinfoの新しいバージョンへのリンクが見つかりました:http://opensource.apple.com/source/ld64/ld64-127.2/src/other/dyldinfo.cpp私はいつも私がここに投稿するとすぐに私自身の質問に対する回答を見つけるように思えます(: – Locksleyu

+1

もっと重要な質問 - ローダーは実際にこのコマンドを使用しますか?そうであればなぜですか? )場所はエクスポートに基づいていますか? – Locksleyu

答えて

-1

私は数日で追加の回答やコメントを得ていないので、自分自身もこれに答えるかもしれないと思いました。

dyldinfoの最新バージョンは次の場所にあります。:解決策は、私は上記のコメントに入れたものを基本的に

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

しかし、私はまだ機能が起動する場合に使用されている正確に何を考え出したことはありません誰もが私はまだそれを感謝するという情報を持っています。

7

クラッシュログ、サンプル、スピンドンプルなどのアドレスを記号で表し、特定のアドレスが関数内にあるかどうかを判断するツールで使用されます。デバッガを使用すると、特定のアドレスが含まれている関数の範囲をより迅速に見つけるのに役立ちます。

このセクション内のデータは、ゼロ終了シーケンスDWARF-style ULEB128の値としてフォーマットされています。最初の値は、__TEXTセグメントの先頭から最初の関数の開始までのオフセットです。残りの値は、次の関数の開始位置へのオフセットです。

+2

例えば、スタックウォークを実行するデバッガは、すべての関数が '__TEXT'でどこから始まるかを知る必要があります。プロローグの命令を見て、スタックがどのように変更され、レジスタが保存されたかを見てください。 –