首页
社区
课程
招聘
[求助]取文件头地址,第二种写法为什么不对呢?想不明白
发表于: 2014-10-1 18:45 4598

[求助]取文件头地址,第二种写法为什么不对呢?想不明白

2014-10-1 18:45
4598
第一种:
	//1.获得文件的开始地址(获得DOS头地址)。为了Dos下操作,每个PE文件的开头就是 DOS头
 	BYTE * pDosHead;
	pDosHead=(BYTE*)GetModuleHandle(NULL);
	
	//2.获得PE文件头地址
	IMAGE_NT_HEADERS* pFileHead;
	pFileHead=(IMAGE_NT_HEADERS*)(pDosHead+((IMAGE_DOS_HEADER*)pDosHead)->e_lfanew);
       

第二种:

       
//1.获得文件的开始地址(获得DOS头地址)。为了Dos下操作,每个PE文件的开头就是 DOS头
	IMAGE_DOS_HEADER * pDosHead;
	pDosHead=(IMAGE_DOS_HEADER*)GetModuleHandle(NULL);
	
	//2.获得PE文件头地址
	IMAGE_NT_HEADERS* pFileHead;
	pFileHead=(IMAGE_NT_HEADERS*)(pDosHead+(pDosHead->e_lfanew));


第二种获得PE文件头地址 方法不对,看了好久不知道为什么呢?


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
byte* 这个的原因。第一个是一字节的指针。第二个是dosheader的指针。基础看样子不牢啊。
2014-10-1 19:00
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
pFileHead=(IMAGE_NT_HEADERS*)((BYTE*)pDosHead+(pDosHead->e_lfanew));
2014-10-1 19:07
0
雪    币: 180
活跃值: (80)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
第一种只是单纯的取地址。第二种除了取地址还包括了其他信息
2014-10-1 20:07
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
IMAGE_DOS_HEADER * pDosHead;

这个指针类型的加减的偏移为sizeof(IMAGE_DOS_HEADER)

所以,++pDosHead 等于 ( IMAGE_DOS_HEADER *)( (UINT)pDosHead + sizeof(IMAGE_DOS_HEADER) )

实在看不懂,看反汇编代码偏移了多少
2014-10-1 21:28
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
原来如此,我终于明白了感谢感谢...
2014-10-2 07:45
0
雪    币: 5
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mark
2014-10-2 08:13
0
游客
登录 | 注册 方可回帖
返回
//