세그먼트는 본질적으로 가상 메모리 구조입니다. 일반적으로 세그먼트는 페이지 경계에 정렬되므로 응용 프로그램의 코드보다 조금 더 많아 질 수 있습니다. __TEXT
세그먼트는 일반적으로 Mach-O 파일의 시작 부분에서 시작되며, 일반적으로 Mach-O 헤더도 포함됩니다.
OS X 10.3 및 이전 버전에서는 제본하면 __TEXT
세그먼트 (자세한 내용은 here)에 영향을 줄 수 있습니다. 최신 버전에서 코드 서명은 __TEXT
세그먼트를 수정할 수도 있습니다.
OS X의 내장 코드 서명 메커니즘 (문제의 원인 및 해결책)을 사용하여 조사하고 싶을 수 있습니다. 일부 권장 참조 :
. (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
를 사용할 수 있지만 출력은 지저분한 및 구문 분석하기 어렵다.
감사합니다. Nicholas, 정말 문서화 된 답변입니다! 내가 일하러 돌아올 때마다이 모든 것을 조사하겠습니다. –
그래, 코드 서명, 기본적으로 당신이 응용 프로그램을 다운로드 하고이 "를 실행 여부를 묻는 팝업에서"인증 "을 클릭 할 때마다 발생하는 __TEXT의 변화하는 일반적인 원인입니다. –