PE文件中偏移量为0x3c的PE头的指针总是设置为0x80吗?
我想知道为什么这个指针会改变。我猜DOS标题和存根没有改变,因为它们是第一次写的。
PE-header直接在这些DOS工件之后启动,PE指针总是设置为0x80?如果没有,为什么?
答案 0 :(得分:8)
许多程序都有一个Rich signature,它附加在DOS存根之后,将NT标题按下可变数量。
它也完全可以使用不同的DOS存根,或者根本不存在。它不需要打印"这个程序不能在DOS模式下运行"你可以在那里放一个小DOS游戏,一个硬盘刮水器,打印完全不同的东西,无论你想要什么。
如果你小心,overlap the NT header with the DOS header,你甚至可以使用偏移量< 0x40的。这甚至都不太难,因为DOS标题中唯一重要的部分是e_lfanew和" MZ",其他一切都可以是使NT标头工作的必要条件。您只需将e_lfanew与可以安全拥有该值的NT标头的一部分对齐。
答案 1 :(得分:2)
不,偏移量为0x3c的PE头 - 这是IMAGE_DOS_HEADER.e_lfanew,可以是任何值> = 0x40