PE-DOS头
本帖最后由 阿西吧 于 2017-8-25 17:29 编辑借用了鱼老师的东西
IMAGE_DOS_HEADER STRUCT
{
+0hWORDe_magic// Magic DOS signature MZ(4Dh 5Ah) DOS可执行文件标记
+2hWORDe_cblp //Bytes on last page of file
+4hWORDe_cp//Pages in file
+6hWORDe_crlc//Relocations
+8hWORDe_cparhdr //Size of header in paragraphs
+0ahWORD e_minalloc//Minimun extra paragraphs needs
+0chWORD e_maxalloc//Maximun extra paragraphs needs
+0ehWORD e_ss //
intial(relative)SS value DOS代码的初始化堆栈SS
+10hWORD e_sp // intial SP value DOS代码的初始化堆栈指针SP
+12hWORD e_csum // Checksum
+14hWORD e_ip // intial IP value DOS代码的初始化指令入口[指针IP]
+16hWORD e_cs // intial(relative)CS value DOS代码的初始堆栈入口
+18hWORD e_lfarlc // File Address of relocation table
+1ahWORD e_ovno // Overlay number
+1chWORD e_res // Reserved words
+24hWORD e_oemid // OEM identifier(for e_oeminfo)
+26hWORD e_oeminfo // OEM information;e_oemid specific
+29hWORD e_res2 // Reserved words
+3chDWORD e_lfanew //Offset to start of PE header 指向PE文件头
} IMAGE_DOS_HEADER ENDS
在DOS头中重要的只有第一个和最后一个,第一个e_magic的是MZ,最后一个e_lfanew是指向NT头在磁盘中的位置
除了第一个和最后一个部分,其他位置都可以被利用,如UPack就利用了这部分来存放NT头等
在DOS头之下就是DOS存根,没有DOS存根,程序一样可以运行,
在Debug运行之下,这段DOS存根代码就是汇编指令,输出This program cannot be run in DOS mode
。。。。。。没看懂
页:
[1]