Windows 有没有安全的方法来识别MS-DOS可执行文件?
我正在尝试从我拥有的可执行文件中识别并过滤掉所有MS-DOS可执行文件 据我所知,PE与MS-DOS的不同之处在于,他拥有MS-DOS所没有的标题,但由于某种原因,我拥有的一些示例被TrID识别为MS-DOS,即使它们是PE 我找不到关于这个主题的任何文档,我搜索了很多Windows 有没有安全的方法来识别MS-DOS可执行文件?,windows,dos,portable-executable,Windows,Dos,Portable Executable,我正在尝试从我拥有的可执行文件中识别并过滤掉所有MS-DOS可执行文件 据我所知,PE与MS-DOS的不同之处在于,他拥有MS-DOS所没有的标题,但由于某种原因,我拥有的一些示例被TrID识别为MS-DOS,即使它们是PE 我找不到关于这个主题的任何文档,我搜索了很多 谢谢 识别MS-DOS可执行文件的问题在于,从技术上讲,Windows PECOFF可执行文件也是有效的MS-DOS可执行文件。PECOFF可执行文件的前缀为“MS-DOS存根”,这是一个完整的MS-DOS程序,在大多数可执行文
谢谢 识别MS-DOS可执行文件的问题在于,从技术上讲,Windows PECOFF可执行文件也是有效的MS-DOS可执行文件。PECOFF可执行文件的前缀为“MS-DOS存根”,这是一个完整的MS-DOS程序,在大多数可执行文件中,它会打印一条消息,如“此程序无法在DOS模式下运行” 因此,首先要做的是查看MS-DOS可执行文件头,看看它是否有效。看起来是这样的(来自拉尔夫·布朗的中断列表): 要检查的关键值位于偏移量00h和18h处。文件开头的两个字节(签名)必须是“MZ”或54ADh。虽然“ZM”也适用于MS-DOS程序,但Windows要求PECOFF可执行文件使用更常见的“MZ”签名。接下来要检查的是偏移18h处的16位值。它需要大于或等于40h,才能成为PECOFF可执行文件 如果偏移量00h和18h处的值签出,则下一步要做的是读取偏移量3Ch处的32位值。它包含实际PECOFF标头的偏移量。然后需要检查带有签名“PE\0\0”的标题星,即两个字符“P”和“E”,后跟两个0字节 请注意,在偏移量3Ch处给出的位置可以找到其他字母,如“NE”、“LE”、“LX”,它们分别用于16位Windows可执行文件、VXD和32位OS/2可执行文件。这些其他可执行格式也有MS-DOS存根,并以相同的方式定位其真正的头文件
00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
(see also #01593)
02h WORD number of bytes in last 512-byte page of executable
04h WORD total number of 512-byte pages in executable (includes any
partial last page)
06h WORD number of relocation entries
08h WORD header size in paragraphs
0Ah WORD minimum paragraphs of memory required to allocate in addition
to executable's size
0Ch WORD maximum paragraphs to allocate in addition to executable's size
0Eh WORD initial SS relative to start of executable
10h WORD initial SP
12h WORD checksum (one's complement of sum of all words in executable)
14h DWORD initial CS:IP relative to start of executable
18h WORD offset within header of relocation table
40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
1Ah WORD overlay number (normally 0000h = main program)