Linker 如何解析dyld导入的符号?
我正试图实现dyld所做的部分工作,但我有点被存根蹦床卡住了 考虑以下ARM说明:Linker 如何解析dyld导入的符号?,linker,objective-c-runtime,mach-o,dyld,otool,Linker,Objective C Runtime,Mach O,Dyld,Otool,我正试图实现dyld所做的部分工作,但我有点被存根蹦床卡住了 考虑以下ARM说明: BL 0x2fec 它通过链接(子过程调用)分支到0x2fec。我知道事实上,uuu文本段中有一个从0x2fd8开始的部分uu symbolstub1,因此它是在u symbolstub1中跳转到20字节 现在,有一个符号 (undefined) external _objc_autoreleasePoolPush (from libobjc) 我已经通过LC_SYMTAB load命令解决了这个问题。没有
BL 0x2fec
它通过链接(子过程调用)分支到0x2fec。我知道事实上,uuu文本段中有一个从0x2fd8开始的部分uu symbolstub1,因此它是在u symbolstub1中跳转到20字节
现在,有一个符号
(undefined) external _objc_autoreleasePoolPush (from libobjc)
我已经通过LC_SYMTAB load命令解决了这个问题。没有提供已知地址。我知道,作为一个事实,0x2fec地址是自动释放池推送的蹦床,但我无法通过任何方式证明它
我已经检查了LC_DYLD_INFO_ONLY命令,在我找到的lazy_绑定符号中有一点提示:
{:offset=>20, :segment=>2, :library=>6, :flags=>[], :name=>"_objc_autoreleasePoolPush"}
其中名称和偏移量与我的完全匹配,并且库#6是“/usr/lib/libobjc.A.dylib”,这也很完美。现在的问题是,段2是文本,但是文本从0x1000开始,而符号tub1在0x2fd8处。所以我遗漏了一些关于第节的参考资料
有没有关于如何将0x2fec虚拟地址映射到_objc_autoreleasepoolphush的想法?嘿,再深入一点,我在LC_DYSYMTAB的间接符号中找到了它 现在,答案很长
我想你可能会感兴趣地阅读这些帖子(描述英特尔架构,但无论如何):或者用俄语: