セグメントは基本的に仮想メモリ構造です。通常、セグメントはページ境界に配置されるため、アプリケーションのコードよりも少し多く含まれることになります。セグメント__TEXT
は通常、Mach-O ファイルの先頭から始まるため、通常、これには Mach-O ヘッダーも含まれます。
OS X 10.3 以前では、事前バインドがセグメントに影響を与える可能性がありました (詳細はこちら__TEXT
で説明されています)。それ以降のバージョンでは、コード署名でもセグメントを変更できます。__TEXT
OS X に組み込まれているコード署名メカニズムを使用して調査することをお勧めします (問題の原因と解決策は?)。いくつかの推奨される参照:
macholibは探索に役立つ場合があります。(py2app をサポートするために最近の OS X バージョンに含まれています。)__TEXT
セグメントを抽出するために使用した簡単なスクリプトを次に示します。
from macholib.MachO import MachO
m = MachO('foo')
__TEXT = (cmd for load_cmd, cmd, data in m.headers[0].commands
if getattr(cmd, 'segname', '').rstrip('\0') == '__TEXT').next()
print '__TEXT segment: offset %x size %x' % (__TEXT.fileoff, __TEXT.filesize)
f = open('foo', 'rb')
f.seek(__TEXT.fileoff)
open('foo__TEXT', 'wb').write(f.read(__TEXT.filesize))
もちろん、 も使用できますotool -lv
が、出力は少し乱雑で解析が困難です。