Windows的可执行文件格式PE源于COFF,最主要的变化包括两点: 1、文件开头不再是COFF文件头,而是DOS MZ可执行文件格式的文件头和DOS桩代码——这点完全是为了当初与DOS下可执行文件的MZ格式兼容。
虽然Windows下和DOS下的可执行文件都是exe后缀,但是二者其实完全不同,在纯DOS下是不能运行PE文件的,如果在纯DOS环境下运行PE格
式的exe文件,DOS操作系统在识别了PE格式的DOS MZ文件头之后,会跳转到DOS桩代码,执行结果为“This program cannot
be run in DOS”后退出。 反之,在Windows下则可以执行DOS下的exe文件,这是通过判断IMAGE_DOS_HEADER结构体中的 e_lfanew 域实现的。e_lfanew 域指出了PE文件真正的头在文件中的偏移量,对于纯DOS MZ可执行文件,该域永远为0,Windows可以调用DOS子系统来执行该程序。