gpt4 book ai didi

c - 如何区分16位MZ和32位MZ

转载 作者:可可西里 更新时间:2023-11-01 10:55:55 25 4
gpt4 key购买 nike

我需要区分 32 位 PE 和 16 位 DOS MZ。正确的做法是什么?我可以使用启发式方法,例如查找 PE header ,但我觉得它不一定是确定性的

最佳答案

所有 DOS 风格的可执行文件都有一个“MZ”作为前两个字节。
要识别 MSDOS 可执行文件与众多其他变体,最好的办法似乎是读取文件中偏移量 0x0018 处重定位表的位置,如果它大于 0x0040(进入文件),则它不仅仅是普通的 DOS .

为了明确地将可执行文件标识为“PE”可执行文件,在文件中的偏移量 0x003C 处有一个指针。这是文件中的偏移量,将包含字节“PE”和两个空值。其他 MSDOS 的“MZ”变体将使用相同的位置来放置其他代码,例如:“NE”、“W3”、“LE”等。

“PE”样式的可执行文件也有多种形式,我希望您至少会对 32 位与 64 位感兴趣。

可能对这类事情的最终权威是 Unix 的"file"命令,它旨在通过调查其内容来可靠地识别任何文件类型。 MSDOS 部分已列出 here .微软在这方面不是可靠的权威,因为他们忽略了非微软信息。

关于c - 如何区分16位MZ和32位MZ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28804432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com