13.3 DOS头

13.3.1 dos 头

记忆结构体

typedef struct _IMAGE_DOS_HEADER{

WORD e_magic; //DOS signature : 4D5A("MZ")

WORD e_cblp;

WORD e_cp;

WORD e_crlc;

WORD e_cparhdr;

WORD e_minalloc;

WORD e_maxalloc;

WORD e_ss;

WORD e_sp;

WORD  e_csum;

WORD e_ip;

WORD e_cs;

WORD e_lfarlc;

WORD e_ovno;

WORD e_res[4];

WROD e_oemid;

WORD e_oeminfo;

WORD e_res2[10];

LONG e_lfanew;  //offset to NT header

}IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

dos头是为了让pe文件兼容dos

18个WORD 1个LONG ,共40个字节

必须掌握的是 e_magic :dos签名 

e_lfanew:指示NT头的偏移(根据不同文件拥有可变值)


13.3.2DOS存根

dos存根(stub)在dos头下方,是个可选项,且大小不固定(即使没有dos存根,文件也可以正常运行)。dos存根有代码和数据混合而成。


40~4D是16位的汇编指令,32位不会运行,在dos环境中运行,或者使用dos调试器(debug.exe)运行它,可使其执行该代码,

具体做法是 在windows xp环境下打开命令行窗口,输入如下命令debug C:\Windows\notepad.exe

出现的光标位置输入“u”指令(反汇编),就会出现16位的汇编指令



代码很简单,输出字符串“This program cannot be run in DOS mode”后退出,这样可以在exe文件中创建出另一个文件,在dos与Windows中都能运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值