【问题标题】:Is the pointer to the PE-header at offset 0x3c in the PE-file always set to 0x80?指向 PE 文件中偏移 0x3c 处的 PE 头的指针是否始终设置为 0x80?
【发布时间】:2016-08-01 09:47:34
【问题描述】:

指向PE文件中偏移0x3c处的PE头的指针是否总是设置为0x80?

我想知道为什么这个指针会改变。我猜 DOS 标头和存根并没有改变,因为它们是第一次编写的。

PE-header 直接在这些 DOS 工件之后开始,所以 PE-pointer 是否总是设置为 0x80?如果不是,为什么?

【问题讨论】:

    标签: windows assembly portable-executable


    【解决方案1】:

    许多程序都有一个Rich signature,它附加在 DOS 存根之后,将 NT 标头向下推一个可变数量。

    也完全可以使用不同的 DOS 存根,或者根本不使用。不一定要打印“这个程序不能在DOS模式下运行”,你可以放一个DOS小游戏,一个硬盘刷,打印完全不同的东西,随便你。

    如果您小心的话,您甚至可以使用overlap the NT header with the DOS header,因此可以使用

    【讨论】:

    • 谢谢,我的 PE 图表都没有显示 Rich 签名。另外,DOS 存根不是 PE 标准的一部分(我的意思是它的内容)?
    • @NicolasLykkeIversen 我 100% 确定您可以放入任何您想要的 DOS 存根(只要它是正确的 DOS 可执行文件,它就会正确运行)。一些简单的应用程序甚至使用它来提供多平台可执行文件,因此它可以在 DOS 和 Windows 中运行。
    【解决方案2】:

    不,偏移量 0x3c 处的 PE 标头 - 这是 IMAGE_DOS_HEADER.e_lfanew,可以是任何值 >= 0x40

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2015-11-28
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多