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

Why is __LINKEDIT sometimes 0x1000 off?

正在解析内存中的 already-loaded Mach-O 二进制文件...

有时字符串 table、符号 table 等在它们应该在的位置,有时它们会偏移 0x1000。

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

我通过查看 dyld 源代码弄明白了... 不能保证关闭 0x1000,但是,link 编辑偏移量是: baseImageOffset + linkedit.vmaddr - linkedit.fileoff。大多数时候这个差异是0,但有时不是。

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