PE信息获取 记录

#pragma once
#include <DbgHelp.h>  //ImageRvaToVa使用到

#pragma comment(lib,"Dbghelp")
#define _in
#define _out

typedef struct MAP_FILE_STRUCT
{
	HANDLE hFile;			 //文件句柄
	HANDLE hMap;			 //映射句柄
	LPVOID ImageBase;		 //文件基地址
	DWORD dwSize;			 //文件大小 
	char FileName[MAX_PATH]; //文件名
}MAP_FILE_STRUCT,*PMAP_FILE_STRUCT;

enum{
	LFILE_FROM_NOMAL=0,       //文件打开时的处理方式
	LFILE_FROM_FILE,          //从文件打开
	LFILE_FROM_MEMORY         //从内存打开
};




class LPEFile
{
public:
	LPEFile(void);
	~LPEFile(void);
private:
	BYTE m_IsOpen;                    //文件打开状态
	MAP_FILE_STRUCT* m_pstMapFile;    //文件及PE信息结构体
public:
	//获得文件名称
	void GetFileName(char* FileName);  
	BOOL LoadPeFile(char* lpFile,DWORD dwGeneric);
	BOOL Free();
	MAP_FILE_STRUCT* GetInfo();    //返回文件及PE信息对应的结构体
	void SetInfo(MAP_FILE_STRUCT* pstMapFile);
	void operator=(LPEFile& lPeFile);
	BYTE* GetImage(void);
	DWORD GetImageSize(void);
	获得Dos头
	PIMAGE_DOS_HEADER GetDosHeader(void);
	获得NT头
	PIMAGE_NT_HEADERS GetNtHeader(void);
	PIMAGE_FILE_HEADER GetFileHeader(void);
	PIMAGE_OPTIONAL_HEADER GetOptionalHeader(void);
	PIMAGE_DATA_DIRECTORY GetDataDirectory(void);
	PIMAGE_DATA_DIRECTORY GetDataDirectory(int nIndex);
	PIMAGE_SECTION_HEADER GetFirstSection(void);
	BOOL GetFileIsPE(void);
	bool GetMachineString(WORD nValue,char* wchBuf);
	void GetSubSystemString(WORD nValue,char* wchBuf);
	PIMAGE_SECTION_HEADER GetSection(int nIndex);
	int GetSectionCount(void);
	LPVOID RvaToPtr(DWORD dwRVA);
	LPVOID GetDataDirectoryEntryToData(USHORT DirectoryEntry);
	HANDLE GetFileHandle();
	//int StrMtoW(char* chBuf, wchar_t* wchBuf);
	//int StrWtoM(wchar_t* wchBuf, char* chBuf);
};


下面是具体实现部分

#include &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值