是否出于某种原因某个程序(甚至操作系统本身)更改了可执行文件的__TEXT段的内容?

  • 注意:在这里,我指的是“__TEXT”段,而不是“__text”段。

  • 换句话说:我可以依靠可执行文件的__TEXT段中的字节来检测我的可执行文件是否已损坏(例如通过对该段进行校验和计算),或者由于该段可能被修改,我是否有可能得到误报在用户计算机上安装程序之后?

    谢谢!

    最佳答案

    段本质上是一种虚拟内存构造:它们通常在页面边界上对齐,因此它们最终可能包含比应用程序代码更多的内容。鉴于__TEXT段通常从Mach-O文件的开头开始,因此通常也包括Mach-O header 。

    在OS X 10.3和更早版本中,预绑定(bind)可能会影响__TEXT段(将在here中进行详细介绍)。在更高版本中,代码签名也可以修改__TEXT段。

    您可能想使用OS X的内置代码签名机制进行调查(问题的原因和解决方案?)。一些推荐的参考:

  • Technical Note TN2206: Mac OS X Code Signing In Depth
  • Code Signing and You(忽略iPhone位)
  • Development Phase Code Signing

  • 您可能会发现macholib在探索中很有用。 (最新的OS X版本包含它以支持py2app。)这是我用来提取__TEXT段的简单脚本。
    from macholib.MachO import MachO
    
    m = MachO('foo')
    __TEXT = (cmd for load_cmd, cmd, data in m.headers[0].commands
              if getattr(cmd, 'segname', '').rstrip('\0') == '__TEXT').next()
    print '__TEXT segment: offset %x size %x' % (__TEXT.fileoff, __TEXT.filesize)
    f = open('foo', 'rb')
    f.seek(__TEXT.fileoff)
    
    open('foo__TEXT', 'wb').write(f.read(__TEXT.filesize))
    

    当然,您也可以使用otool -lv,但是输出有点混乱且难以解析。

    关于macos - OS X:__TEXT段中的节是否被其他程序修改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1688831/

    10-11 18:05