Macos 为什么LINKEDIT有时会关闭0x1000?

Macos 为什么LINKEDIT有时会关闭0x1000?,macos,binary,dyld,mach-o,Macos,Binary,Dyld,Mach O,正在分析内存中已加载的Mach-O二进制文件 有时字符串表、符号表等是它们应该在的位置,有时它们是0x1000 例如,我可能运行我的程序并且baseOffset+cmd->symoff是准确的。然后我将进行单元测试,baseOffset+cmd->symoff+0x1000是准确的baseOffset始终有效,并指向有效的马赫头。我通过查看dyld源代码找到了它。。。 不保证关闭0x1000,但链接编辑偏移量为: baseImageOffset+linkedit.vmaddr-linkedit.

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

有时字符串表、符号表等是它们应该在的位置,有时它们是0x1000


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

我通过查看dyld源代码找到了它。。。 不保证关闭0x1000,但链接编辑偏移量为:
baseImageOffset+linkedit.vmaddr-linkedit.fileoff
。大多数情况下,这个差值是0,但有时不是


这会影响
LC\u功能\u启动
(cmd->dataoff)和
LC\u SYMTAB
(cmd->stroff和cmd->symoff)

,因为您需要包括幻灯片。使用正确的参数调用
\u dyld\u get\u image\u vmaddr\u slide
(如果是self,
0
),您将获得要应用的偏移量。作为参考,它可能大于0x1000。原因很简单:
.bss
在运行时展开,通常在标头和symtab/strab之间。我相信,确切的数量是扩展的
.bss
的大小,四舍五入到一个页面的倍数。