为什么 __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)
正在解析内存中的 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)