#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;}
新闻热点
疑难解答