为什么__LINKEDIT有时会关闭0x1000?

时间:2015-12-13 16:27:18

标签: macos binary dyld mach-o

在内存中解析已加载的Mach-O二进制文件...

有时字符串表,符号表等就是它们应该存在的位置,有时它们会被关闭0x1000。

例如,我可能会运行我的程序,而baseOffset + cmd->symoff是准确的。然后我进行单元测试,baseOffset + cmd->symoff + 0x1000是准确的。 baseOffset始终有效并指向有效的Mach头。

1 个答案:

答案 0 :(得分:3)

通过查看dyld源代码我想通了...... 关闭0x1000并不保证,但链接编辑偏移量为: baseImageOffset + linkedit.vmaddr - linkedit.fileoff。大部分时间这个差异是0,但有时不是。

这会影响LC_FUNCTION_STARTS(cmd-> dataoff)和LC_SYMTAB(cmd-> stroff和cmd-> symoff)