阿西吧 发表于 2017-8-25 17:23:29

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

屁哥 发表于 2017-8-25 18:46:56

。。。。。。没看懂
页: [1]
查看完整版本: PE-DOS头