91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

PE是Portable Executable File Format(可移植的執(zhí)行體)簡寫,它是目前Windows平臺上的主流可執(zhí)行文件格式。 PE文件中包含的內(nèi)容很多,具體我就不在這解釋了,有興趣的可以參看之后列出的參考資料及其他相關(guān)內(nèi)容。 最近我也在學(xué)習(xí)PE文件格式,參考了許多資料,用C++封裝了一個高效方便的PE文件格式解析的類。 該類對想學(xué)PE文件結(jié)構(gòu)的朋友可算一份可貴的資料,代碼均很易懂,考慮較全面,具有一定的通用性。 同時該類也可以讓想創(chuàng)建自己的PE文件解析軟件的朋可以輕松在此基礎(chǔ)上實現(xiàn)。 最后,錯誤在所難免,如果大家發(fā)現(xiàn)有錯誤,歡迎大家指正。 具體參看:http://blog.csdn.net/paschen/article/details/50640421

資源截圖

代碼片段和文件信息

#include?“stdafx.h“
#include?“CPeFile.h“
#include?
#include?


//讀取標志m_dwReadFlag取值(僅在類中使用)
#define?PE_READ_FLAG_EXPORT 0x00000001UL
#define?PE_READ_FLAG_IMPORT 0x00000002UL
#define?PE_READ_FLAG_RESOURCE 0x00000004UL
#define?PE_READ_FLAG_EXCEPTION 0x00000008UL
#define?PE_READ_FLAG_SECURITY 0x00000010UL
#define?PE_READ_FLAG_baseRELOCATION 0x00000020UL
#define?PE_READ_FLAG_DEBUG 0x00000040UL
#define?PE_READ_FLAG_TLS 0x00000080UL
#define?PE_READ_FLAG_LOADCONFIG 0x00000100UL
#define?PE_READ_FLAG_BOUNDIMPORT 0x00000200UL
#define?PE_READ_FLAG_DELAYIMPORT 0x00000400UL
#define?PE_READ_FLAG_ALL (PE_READ_FLAG_EXPORT?|?PE_READ_FLAG_IMPORT?|?PE_READ_FLAG_RESOURCE?|?PE_READ_FLAG_EXCEPTION?|?\
PE_READ_FLAG_SECURITY?|?PE_READ_FLAG_baseRELOCATION?|?PE_READ_FLAG_DEBUG?|?PE_READ_FLAG_TLS?|?\
PE_READ_FLAG_LOADCONFIG?|?PE_READ_FLAG_BOUNDIMPORT?|?PE_READ_FLAG_DELAYIMPORT)


CPeFile::CPeFile()
:?m_dwType(0UL)
?m_dwReadFlag(0UL)
?m_lpExportManager(NULL)
?m_lpImportManager(NULL)
?m_lpResourceManager(NULL)
?m_lpExceptionManager(NULL)
?m_lpSecurityManager(NULL)
?m_lpbaseRelocationManager(NULL)
?m_lpDebugManager(NULL)
?m_lpTLSManager(NULL)
?m_lpLoadConfigManager(NULL)
?m_lpBoundImportManager(NULL)
?m_lpDelayImportManager(NULL)
{
}

CPeFile::~CPeFile()
{
Detach();
}

DWORD?CPeFile::Attach(LPCTSTR?lpszFilePath)
{
assert(!m_dwType);
assert(lpszFilePath);

int?ret?=?OpenPeFile(lpszFilePath);
if?(ret?==?-1)
return?0UL;
else?if?(ret?==?0)
return?1UL;
__try
{
m_dwType?=?CheckHeaders();
}
__except?(EXCEPTION_EXECUTE_HANDLER)
{
CloseFile();
return?2UL;
}
if?(!m_dwType)
CloseFile();
return?m_dwType;
}

void?CPeFile::Detach()
{
if?(m_dwType?==?IMAGE_NT_SIGNATURE)
ClearAll();
if?(m_dwType)
{
CloseFile();
m_dwType?=?0UL;
}
}

DWORD?CPeFile::GetAttachInfo()?const
{
return?m_dwType;
}

HANDLE?CPeFile::GetFileHandle()?const
{
assert(m_dwType);
return?m_hFile;
}

DWORD_PTR?CPeFile::GetMappedFileStart()?const
{
assert(m_dwType);
return?(DWORD_PTR)m_lpMemory;
}

DWORD_PTR?CPeFile::GetMappedFileOffset(DWORD?dwFoa)?const
{
assert(m_dwType);
return?MakePtr(DWORD_PTR?m_lpMemory?dwFoa);
}

const?IMAGE_DOS_HEADER*?CPeFile::GetDosHeader()?const
{
assert(m_dwType);
return?m_lpDosHeader;
}

DWORD?CPeFile::GetDosEntryPoint()?const
{
assert(m_dwType);
return?((DWORD)m_lpDosHeader->e_cs?+?(DWORD)m_lpDosHeader->e_cparhdr)?*?0x10UL?+?(DWORD)m_lpDosHeader->e_ip;
}

const?IMAGE_NT_HEADERS32*?CPeFile::GetNtHeader()?const
{
assert(m_dwType?==?IMAGE_NT_SIGNATURE?||?m_dwType?==?IMAGE_OS2_SIGNATURE?||?m_dwType?==?IMAGE_OS2_SIGNATURE_LE);
return?m_lpNtHeader;
}

BOOL?CPeFile::Is64Bit()?const
{
assert(m_dwType?==?IMAGE_NT_SIGNATURE);
return?m_b64Bit;
}

ULONGLONG?CPeFile::GetImagebase()?const
{
assert(m_dwType?==?IMAGE_NT_SIGNATURE);
if?(m_b64Bit)

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????14555??2016-02-06?16:15??PE文件解析類\CPeFile.h

?????文件??????41111??2016-02-06?16:43??PE文件解析類\CPeFile.cpp

?????文件??????15530??2016-02-06?17:34??PE文件解析類\Demo.rar

?????文件?????215059??2016-02-06?17:56??PE文件解析類\ReadPeFile?v1.0.rar

?????目錄??????????0??2016-02-06?17:57??PE文件解析類

-----------?---------??----------?-----??----

???????????????286255????????????????????5


評論

共有 條評論