DOS头部分分为两个部分:
1、DOS MZ头 2、DOS块
1、DOS MZ头是一个
IMAGE_DOS_HEADER
结构体,其大小占64个字节
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // 指向PE文件头的位置为中的PE文件头标志的地址
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
该结构体是给16位的程序看的,现在的程序都是运行在x32 x64系统上!
但是有两个例外e_magic
和 e_lfanew
,这两个成员必须存在 并且不可以改
e_magic
:WORD类型,操作利用利用这个来进行识别
e_lfanew
:LONG类型,指向PE文件头的位置为中的PE文件头标志的地址
在DOS MZ头之中,前两个字节 和 后四个字节不能修改(不是一定不能,如果有能力可以改,而PE结构中都需要进行修改,牵一发动全身),其他都可以任意的修改!
2、DOS块:是链接器来进行填写的,所以没有作用,可以进行任意的修改并且不会影响程序运行!
原文地址:https://www.cnblogs.com/zpchcbd/p/12311191.html
时间: 2024-10-11 03:11:59