Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)
2023-09-11 14:14:00 时间
获取pE头相关的内容,就是类似如下内容
原理:比较简单,直接读取PE到内存,然后直接强转就行了。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#pragma warning(disable:4996)
void viewImageFileCharacteristics(WORD);
int _tmain(int argc, TCHAR *argv[])
{
PIMAGE_DOS_HEADER pImageDosHeader;
PIMAGE_NT_HEADERS pImageNtHeaders;
PIMAGE_FILE_HEADER pImageFileHeader;
HANDLE hFile;
HANDLE hMapObject;
PUCHAR uFileMap;
//if(argc<2)
//return -1;
if(!(hFile=CreateFile(/*argv[1]*/L"c:\\hello.exe",GENERIC_READ,0,NULL,OPEN_EXISTING,0,0)))
return -1;
if (!(hMapObject=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL)))
return -1;
if(!(uFileMap=(PUCHAR)MapViewOfFile(hMapObject,FILE_MAP_READ,0,0,0)))
return -1;
pImageDosHeader=(PIMAGE_DOS_HEADER)uFileMap;
if (pImageDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
return -1;
pImageNtHeaders=(PIMAGE_NT_HEADERS)((PUCHAR)uFileMap+pImageDosHeader->e_lfanew);
if (pImageNtHeaders->Signature!=IMAGE_NT_SIGNATURE)
return -1;
pImageFileHeader=(PIMAGE_FILE_HEADER) &(pImageNtHeaders->FileHeader);
printf("Machine: 0x%04X",pImageFileHeader->Machine);
((pImageFileHeader->Machine == IMAGE_FILE_MACHINE_I386)
?printf("(I386) \n")
:printf(" (?) \n"));
printf("NumberOfSections: 0x%04X\n",pImageFileHeader->NumberOfSections);
printf("TimeDateStamp: 0x%08X\n",pImageFileHeader->TimeDateStamp);
printf("PointerToSymbolTable: 0x08X\n",pImageFileHeader->PointerToSymbolTable);
printf("NumberOfSymbols: 0x%08X\n",pImageFileHeader->NumberOfSymbols);
printf("SizeOfOptionalHeader: 0x%04X\n",pImageFileHeader->SizeOfOptionalHeader);
printf("Characteristics: 0x%04X\n",pImageFileHeader->Characteristics);
viewImageFileCharacteristics(pImageFileHeader->Characteristics);
UnmapViewOfFile(uFileMap);
CloseHandle(hMapObject);
CloseHandle(hFile);
return 0;
}
void viewImageFileCharacteristics(WORD wCharacteristics)
{
char szCharacteristics[100];
memset(szCharacteristics,0,100);
szCharacteristics[0]='(';
if (wCharacteristics & 0x0001)
strcat(szCharacteristics,"RELOCS_STRIPPED|");
if (wCharacteristics & 0x0002)
strcat(szCharacteristics,"EXECUTABLE_IMAGE|");
if (wCharacteristics & 0x0004)
strcat(szCharacteristics,"LINE_NUMS_STRIPPED|");
if (wCharacteristics & 0x0100)
strcat(szCharacteristics,"32BIT_MACHINE|");
if (wCharacteristics & 0x0200)
strcat(szCharacteristics,"DEBUG_STRIPPED|");
if (wCharacteristics & 0x1000)
strcat(szCharacteristics,"FILE_SYSTEM|");
if (wCharacteristics & 0x2000)
strcat(szCharacteristics,"FILE_DLL|");
szCharacteristics[strlen(szCharacteristics)-1]=')';
szCharacteristics[strlen(szCharacteristics)]='\0';
printf(" %s\n",szCharacteristics);
}
执行结果:
相关文章
- Windows核心编程 第二十章 DLL的高级操作技术
- Windowsw核心编程 第13章 Windows内存结构
- Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)
- Windows核心编程 第五章 作业(下)
- Windows核心编程 第五章 作业(上)
- Windows核心编程 第十一章 线程池的使用
- Windows核心编程 第九章 线程与内核对象的同步(上)
- Windows核心编程 第四章 进程(中)
- 内核模式下的线程同步的分析(Windows核心编程)
- Windows核心编程笔记之内核对象
- 基于C++简单Windows API的socket编程(阻塞模式)
- C++windows内核编程笔记day11 win32静态库和动态库的使用
- 【免费内网穿透】Windows远程桌面连接树莓派
- 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式
- Windows编译OpenSSL
- 揭露让 Linux 与 Windows 隔阂消失的奥秘
- 虚拟机Vmware安装Windows服务器Windows Sever 2012
- 【Windows】+ windows下在某一文件夹下按“shift+鼠标右键”打开CMD窗口
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- windows 下mysql 重设root密码方法
- windows设备驱动安装接口(自己仿写)
- Windows下Python中pip安装Pillow报错总结(转载)
- windows连接远程打印机
- 代码显示Android未来可能“Windows化”
- 玩转Windows,超简单一个命令进行windows系统升级,在需要的时间点,随时进行系统升级,体验最新的系统和特性
- windows下怎么给ubantu虚拟机全屏的处理