在内存中解析已加载的Mach-O二进制文件...
有时字符串表,符号表等就是它们应该存在的位置,有时它们会被关闭0x1000。
例如,我可能会运行我的程序,而baseOffset + cmd->symoff
是准确的。然后我进行单元测试,baseOffset + cmd->symoff + 0x1000
是准确的。 baseOffset
始终有效并指向有效的Mach头。
答案 0 :(得分:3)
通过查看dyld源代码我想通了......
关闭0x1000并不保证,但链接编辑偏移量为:
baseImageOffset + linkedit.vmaddr - linkedit.fileoff
。大部分时间这个差异是0,但有时不是。
这会影响LC_FUNCTION_STARTS
(cmd-> dataoff)和LC_SYMTAB
(cmd-> stroff和cmd-> symoff)