【问题标题】:Why is __LINKEDIT sometimes 0x1000 off?为什么 __LINKEDIT 有时会关闭 0x1000?
【发布时间】:2015-12-13 16:27:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos binary dyld mach-o


    【解决方案1】:

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

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

    【讨论】:

    • 因为您需要包含幻灯片。使用正确的参数调用_dyld_get_image_vmaddr_slide(如果是self,0),您将获得要应用的偏移量。作为参考,它可能超过 0x1000。原因很简单:.bss 在运行时被扩展,并且通常在你的 header 和你的 symtab / strtab 之间。我相信,确切的数量是展开后的.bss 的大小四舍五入到一页的倍数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2012-03-25
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多