[QUOTE=dncwbc;871338]MS-DOS 实模式残余程序:实际上是个有效的EXE,在不支持PE文件格式的操作系统中,它将简单显示一个错误提示,大多数情况下它是由汇编编译器自动生成。通常,它简单调用中断21h,服务9来显示字符串"This program cannot run in DOS mode"。(在我们写的程序中,他不是必须的,可以不予以实现,但是要保留其大小,大小为112byte,为了简洁,可以使用00来填充。)[/QUOTE]
后面的176或者112实际上DOS实模式残余程序,它主要是在32位EXE程序在DOS系统下运行后给一个提示而已。最常见的就是提示这句话:"This program cannot run in DOS mode"。所以通常是112字节。但是如果你想让你的PE程序在DOS运行时执行其他功能的话,那么需要的代码也就会完全不同,大小也就会不一样了。所以这里的112也好,176也好并不固定。
还有一个错误,节头的成员6、7、8、9的定义是
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
而LZ下边在给出值时说成员6、7、8、9都是4个字节