MS-DOS头部
来源:互联网 发布:阿里云系统最新版本 编辑:程序博客网 时间:2024/04/27 17:36
每个PE文件是以一个DOS程序开始的,有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随MZ header之后的DOS stub(DOS块)。DOS stub实际上是一个有效的EXE,在不支持PE文件格式的操作系统中,他将简单显示一个错误提示,类似于字符串“This program cannot be run in MS-DOS mode”。程序员也可以根据自己的意图实现完整的DOS代码。
PE文件头的第一个字节起始于一个传统的MS-DOS头部,被称作IMAGE_DOS_HEADER,大小为64B。
在IMAGE_DOS_HEADER和IMAGE_NT_HEADERS之间一个DOS Stub,这段程序用于在DOS环境中显示一个字符串,“This program cannot be run in DOS mode”,现在DOS早已灭绝,这段数据由编译器生成,可以用0填充或者删除(删除的话要移动很多数据)。
IMAGE_DOS_HEADER结构如下所示:
(注:左边的数字是到文件头的偏移量)
IMAGE_DOS_HEADER STRUCT
{
+00h WORD e_magic // Magic DOS signature MZ(4Dh 5Ah) DOS可执行文件标记+02h WORD e_cblp // Bytes on last page of file+04h WORD e_cp // Pages in file+06h WORD e_crlc // Relocations+08h WORD e_cparhdr // Size of header in paragraphs+0ah WORD e_minalloc // Minimun extra paragraphs needs+0ch WORD e_maxalloc // Maximun extra paragraphs needs+0eh WORD e_ss // intial(relative)SS value DOS代码的初始化堆栈SS+10h WORD e_sp // intial SP value DOS代码的初始化堆栈指针SP+12h WORD e_csum // Checksum+14h WORD e_ip // intial IP value DOS代码的初始化指令入口[指针IP]+16h WORD e_cs // intial(relative)CS value DOS代码的初始堆栈入口+18h WORD e_lfarlc // File Address of relocation table+1ah WORD e_ovno // Overlay number+1ch WORD e_res[4] // Reserved words+24h WORD e_oemid // OEM identifier(for e_oeminfo)+26h WORD e_oeminfo // OEM information;e_oemid specific+29h WORD e_res2[10] // Reserved words+3ch LONG e_lfanew // Offset to start of PE header 指向PE文件头
} IMAGE_DOS_HEADER ENDS
这里面有两个重要的数据成员。
- e_magic,这个必须为MZ,即0x5A4D(大小:2个字节)
- e_lfanew,这个成员的值为IMAGE_NT_HEADERS的偏移(大小:4个字节)
- MS-DOS头部
- MS-DOS头部
- MS-DOS
- MS-DOS
- DOS头部IMAGE_DOS_HEADER
- DOS头部IMAGE_DOS_HEADER
- DOS头部IMAGE_DOS_HEADER
- MS-DOS简单命令
- MS-DOS 学习总结
- MS-DOS Programming 总结
- MS-DOS批处理文件!!!
- MS DOS 命令大全
- MS-DOS 关闭计算机
- MS DOS 命令大全
- MS DOS 命令大全
- MS-DOS中的批处理
- MS DOS 命令大全
- MS-DOS 命令例子
- block学习一:使用block代替回调
- html文本框不可编辑,禁止用户修改的几种方法
- 获得当前项目exe\dll所在系统位置
- vc编程技巧(转)
- 修改MFC Edit Control背景色
- MS-DOS头部
- Android NDK&&JNI 编译环境的搭建
- MVC3及MVC4下载网址
- java serializable深入了解
- 4行代码简单实现js树形菜单
- 工厂模式的模板实现
- VC6.0的一个小问题:please enter the path for DBGHEAP.C
- vc office 屏蔽掉“服务器正在运行中”“切换到”提示框
- hdu1272-小希的迷宫