首页
社区
课程
招聘
[旧帖] [求助]我有一个关于读PE头文件的问题想问一下 0.00雪花
发表于: 2010-5-16 22:47 1162

[旧帖] [求助]我有一个关于读PE头文件的问题想问一下 0.00雪花

2010-5-16 22:47
1162
这是我编的一个读PE头的程序,但是有点问题,
void main()
{
IMAGE_DOS_HEADER Dh;
FILE *fq;
IMAGE_NT_HEADERS Nth;
PIMAGE_SECTION_HEADER pSh=NULL;
fq=openfile("C:\\123.exe");
GetDosHead(fq,&Dh);
if(!IsDOSfile(&Dh))
printf("this is not a dos file");
GetNtfile(fq,&Nth,Dh.e_lfanew);
if(!IsPEfile(&Nth))
printf("this is not a pe file");
IMAGE_FILE_HEADER pFh=Nth.FileHeader;
IMAGE_OPTIONAL_HEADER pOh=Nth.OptionalHeader;
printf("section number: \t%04X\n",pFh.NumberOfSections);
printf("Machine:\t%04X\n",pFh.Machine);
printf("size of option head:\t%04X\n",pFh.SizeOfOptionalHeader );
printf("address of entry:\t%04X\n",pOh.AddressOfEntryPoint );
printf("ImageBase:\t%04X\n",pOh.ImageBase);

pSh= (PIMAGE_SECTION_HEADER)malloc(sizeof(IMAGE_SECTION_HEADER)*(pFh.NumberOfSections));
GetSectionTable(fq,Dh.e_lfanew+sizeof(IMAGE_NT_HEADERS),pSh,pFh.NumberOfSections);
for(int i=0;i<pFh.NumberOfSections;i++)
printf("%s\n",pSh[i].Name);
}

这是主函数 ,可是最后读Section时,只能读出三个来,一共有5啊,后两个都变成了乱码了,
怎么回事啊,前面几个都 是正确的啊

void GetSectionTable(FILE *fd,DWORD start,PIMAGE_SECTION_HEADER pSh,int number)
{
fseek(fd,start,SEEK_SET);
fread(pSh,sizeof(IMAGE_SECTION_HEADER),number,fd);
}
这个是取SectionTable的函数

还有我想请问一下关于PE 头文件里TLS表的作用和用法,能给些资料吗,网上实在不好搜,详细一点好

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强悍.....
2010-5-17 12:35
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大家也都不会吗?
第三个段名读出来了,但是其它几个数据都不对,后面几个段也就都 不对了
2010-5-17 20:09
0
游客
登录 | 注册 方可回帖
返回
//