2012-03-07 5 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 옵션이보고 도구는 최신 오픈 소스이지만, 내가 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 값의 0으로 종료되는 시퀀스로 포맷됩니다. 첫 번째 값은 __TEXT 세그먼트 시작부터 첫 번째 함수 시작까지의 오프셋입니다. 나머지 값은 다음 함수 시작 오프셋입니다.

+2

스트립 된 실행 파일을 처리해야하는 도구에 유용합니다 (예 : 스택 워크를 수행하려는 디버거는 모든 함수가 '__TEXT'에서 시작하는 위치를 알아야합니다. 프롤로그 지침을보고 스택이 수정 된 방법과 레지스터가 저장된 위치를 확인하십시오. 그러나 제거 된 실행 파일에서 대부분의 함수에 대한 기호가 누락되었습니다 .LC_FUNCTION_STARTS는 디버거에 해당 정보를 제공합니다. –