나는 dyld가 수행하는 작업의 일부분을 구현하려고하는데 스텁 트램폴린에 조금 붙어 있습니다. 링크 (하위 프로 시저 호출)와가져온 기호를 dyld로 해결하는 방법은 무엇입니까?
BL 0x2fec
이 가지 0x2fec하기 :
는 다음과 ARM 명령어를 생각해 보자. 0x2fd8에서 시작하는 __TEXT 세그먼트에 __symbolstub1 섹션이 있으므로 __symbolstub1 내부의 20 바이트로 점프한다는 사실을 알고 있습니다.지금, 상징 나는 LC_SYMTAB로드 명령을 통해 해결 한
(undefined) external _objc_autoreleasePoolPush (from libobjc)
있다. 제공되는 알려진 주소가 없습니다. 사실, 0x2fec 주소는 _objc_autoreleasePoolPush에 대한 트램 폴린이지만 어떤 방법으로도 증명할 수는 없습니다.
나는 LC_DYLD_INFO_ONLY 명령을 확인했습니다, 그리고 내가 거기에 약간의 힌트를 가지고는 lazy_bind 기호에 내가 발견했습니다
{:offset=>20, :segment=>2, :library=>6, :flags=>[], :name=>"_objc_autoreleasePoolPush"}
이름과 오프셋 내가 정확히 무엇을 일치, 어디서 라이브러리 # 6은 "/usr/lib/libobjc.A.dylib"이며 이는 또한 완벽합니다. 이제 문제는 세그먼트 # 2는 __TEXT이지만 __TEXT는 0x1000에서 시작하고 __symbolstub1은 0x2fd8에서 끝나는 것입니다. 따라서 섹션에 대한 참조가 누락되었습니다.
내가 _objc_autoreleasePoolPush하는 0x2fec 가상 주소를 매핑 할 수 있겠 방법에 대한 아이디어? 조금 더 파고 나는
내가 (어쨌든 인텔 아키텍처를 설명하지만) 당신이이 글을 읽기위한 흥미로운 일이 될 수도 있겠죠 : http://www.codeproject.com/Articles/187181/Dynamic-Linking-of-Imported -Functions-in-Mach-O http://www.codeproject.com/Articles/187192/Redirection-of-Imported-Functions-in-Mach-O 또는 러시아어로 : http://habrahabr.ru/게시물/115558 – shoumikhin