首页 > 学院 > 开发设计 > 正文

读PE文件的3大结构体_PE文件加载器

2019-11-11 07:32:56
字体:
来源:转载
供稿:网友
#include"stdio.h"#include"stdlib.h"#include"windows.h"int main(){	IMAGE_DOS_HEADER imafe_dos_header;//dos头	IMAGE_NT_HEADERS image_nt_headers;//pe头	IMAGE_SECTION_HEADER *image_section_header;//区块	HANDLE jubing1;	DWord shijichicuen=0;//实际读取大小	BOOL zhenjia;	LARGE_INTEGER pianyi;	LARGE_INTEGER pianyi_xin;//文件指针的新值 	int j = 0;//区块的大小	jubing1 =CreateFile(L"C://Users//lisaisai//Desktop//第15课第01节加工资加账号系统完善.exe", FILE_ALL_access, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //FILE_ATTRIBUTE_NORMAL 普通文件	zhenjia=ReadFile(jubing1, &imafe_dos_header, sizeof(IMAGE_DOS_HEADER), &shijichicuen, NULL);	PRintf("是否读取成功真假%d/n", zhenjia);	printf("开头%s/n", (char*)&imafe_dos_header.e_magic);	printf("PE头开始位置(指出PE头文件的偏移位置)%x/n", imafe_dos_header.e_lfanew);	pianyi.QuadPart = imafe_dos_header.e_lfanew;	SetFilePointerEx(jubing1,pianyi,&pianyi_xin, FILE_BEGIN);//移动指针位置 128个	//printf("文件指针的新值%x/n",pianyi_xin);	zhenjia = ReadFile(jubing1, &image_nt_headers, sizeof(IMAGE_NT_HEADERS), &shijichicuen, NULL);	printf("开头%s",(char*) &image_nt_headers.Signature);	j = image_nt_headers.FileHeader.NumberOfSections;	printf("区块的数量%d/n", image_nt_headers.FileHeader.NumberOfSections);	printf("PE头里的 第3个结构体的大小%x/n", image_nt_headers.FileHeader.SizeOfOptionalHeader);	pianyi.QuadPart += sizeof(IMAGE_NT_HEADERS);	SetFilePointerEx(jubing1, pianyi, &pianyi_xin, FILE_BEGIN);//IMAGE_NT_HEADERS的大小是固定的 一般情况这样写 精准要0x18+e0    	image_section_header = malloc(sizeof(IMAGE_SECTION_HEADER)*j); //IMAGE_SECTION_HEADER 大小不固定	zhenjia = ReadFile(jubing1, image_section_header, sizeof(IMAGE_SECTION_HEADER)*j, &shijichicuen, NULL);	for (int i=0;i<j;i++)	{		printf("区块的名字%s/n", &image_section_header[i].Name);	}	CloseHandle(jubing1);	free(image_section_header);	system("pause");	return 1;}
上一篇:1062. 最简分数(20)

下一篇:上楼梯问题

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表