PE DOS头

DOS头,PE文件的开始

DOS由DOS MZ头和 DOS Stub(即指令字节码)组成。
注:由于DOS Stub大小不固定,所以DOS头大小也不固定

DOS头是用来兼容MS-DOS操作系统的,目的是当这个文件在MS-DOS上运行时提示一段文字,大部分情况下是:This program cannot be run in DOS mode.还有一个目的,就是指明NT头在文件中的位置。NT头包含windows PE文件的主要信息,其中包括一个‘PE’字样的签名,PE文件头(IMAGE_FILE_HEADER)和PE可选头(IMAGE_OPTIONAL_HEADER32),头部的详细结构以及其具体意义在PE文件头文章中详细描述。
#include<Windows.h>
#include<stdio.h>

int main()
{
	HMODULE hModule = GetModuleHandleA(0);
	DWORD dwhModule = (DWORD)hModule;
	PIMAGE_DOS_HEADER pDosHeaders = (PIMAGE_DOS_HEADER)dwhModule;
	printf("e_magic  = %#x\t", pDosHeaders->e_magic);
	printf("%c%c\n", pDosHeaders->e_magic, pDosHeaders->e_magic >> 8);
	printf("e_cb1p = %#x\n", pDosHeaders->e_cblp);
	printf("e_cp = %#x\n", pDosHeaders->e_cp);
	printf("e_crlc = %#x\n", pDosHeaders->e_crlc);
	printf("e_cparhdr = %#x\n", pDosHeaders->e_cparhdr);
	printf("e_minalloc = %#x\n", pDosHeaders->e_minalloc);
	printf("e_maxalloc = %#x\n", pDosHeaders->e_maxalloc);
	printf("e_ss = %#x\n", pDosHeaders->e_ss);
	printf("e_sp = %#x\n", pDosHeaders->e_sp);
	printf("e_csum = %#x\n", pDosHeaders->e_csum);
	printf("e_ip = %#x\n", pDosHeaders->e_ip);
	printf("e_cs = %#x\n", pDosHeaders->e_cs);
	printf("e_lfarlc = %#x\n", pDosHeaders->e_lfarlc);
	printf("e_ovno = %#x\n", pDosHeaders->e_ovno);
	printf("e_res = %#x\n", pDosHeaders->e_res);
	printf("e_oemid = %#x\n", pDosHeaders->e_oemid);
	printf("e_oeminfo = %#x\n", pDosHeaders->e_oeminfo);
	printf("e_res2 = %#x\n", pDosHeaders->e_res2);
	printf("e_lfanew = %#x\n", pDosHeaders->e_lfanew);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值