段本質上是一個虛擬內存構造:它們通常在頁面邊界上對齊,所以它們最終可能包含比應用程序代碼更多的內容。鑑於__TEXT
段通常從Mach-O文件的開頭開始,它通常也包括Mach-O頭文件。
在OS X 10.3及更早版本中,預先綁定可能會影響__TEXT
段(詳細描述在here中)。在更高版本中,代碼簽名還可以修改__TEXT
段。
您可能想要調查使用OS X的內置代碼簽名機制(問題的原因和解決方案?)。有的建議參考:
您可能會發現macholib有益探索。 (它包含在最新的OS X版本中以支持py2app。)下面是我用來提取__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
,但輸出是有點亂,難以解析。
謝謝尼古拉斯,這是一個真實記錄的答案!我一回去工作就會調查所有這一切。 –
是的,原來代碼簽名,基本上每次下載應用程序時都會發生,並在彈出窗口上單擊「授權」,詢問您是否運行此安全,是__TEXT更改的常見原因。 –