#if !defined(__PEFILE_H__) #define __PEFILE_H__ /* this file define all structures used in PE file */ /* found on Microsoft site */ #include #if defined(__cplusplus) extern "C" { #endif #define IDS_ERRBADFILENAME 1000 #define IDR_CURSOR 1 #define IDR_BITMAP 2 #define IDR_ICON 3 #define IDR_MENU 4 #define IDR_DIALOG 5 #define IDR_STRING 6 #define IDR_FONTDIR 7 #define IDR_FONT 8 #define IDR_ACCELERATOR 9 #define IDR_RCDATA 10 #define IDR_MESSAGETABLE 11 #define SIZE_OF_NT_SIGNATURE sizeof (DWORD) #define MAXRESOURCENAME 13 /* global macros to define header offsets into file */ /* offset to PE file signature */ #define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + \ ((PIMAGE_DOS_HEADER)a)->e_lfanew)) /* DOS header identifies the NT PEFile signature dword the PEFILE header exists just after that dword */ #define PEFHDROFFSET(a) ((LPVOID)((BYTE *)a + \ ((PIMAGE_DOS_HEADER)a)->e_lfanew + \ SIZE_OF_NT_SIGNATURE)) /* PE optional header is immediately after PEFile header */ #define OPTHDROFFSET(a) ((LPVOID)((BYTE *)a + \ ((PIMAGE_DOS_HEADER)a)->e_lfanew + \ SIZE_OF_NT_SIGNATURE + \ sizeof (IMAGE_FILE_HEADER))) /* section headers are immediately after PE optional header */ #define SECHDROFFSET(a) ((LPVOID)((BYTE *)a + \ ((PIMAGE_DOS_HEADER)a)->e_lfanew + \ SIZE_OF_NT_SIGNATURE + \ sizeof (IMAGE_FILE_HEADER) + \ sizeof (IMAGE_OPTIONAL_HEADER))) typedef struct tagImportDirectory { DWORD dwRVAFunctionNameList; DWORD dwUseless1; DWORD dwUseless2; DWORD dwRVAModuleName; DWORD dwRVAFunctionAddressList; }IMAGE_IMPORT_MODULE_DIRECTORY, * PIMAGE_IMPORT_MODULE_DIRECTORY; /* global prototypes for functions in pefile.c */ /* PE file header info */ BOOL WINAPI GetDosHeader (LPVOID, PIMAGE_DOS_HEADER); DWORD WINAPI ImageFileType (LPVOID); BOOL WINAPI GetPEFileHeader (LPVOID, PIMAGE_FILE_HEADER); /* PE optional header info */ BOOL WINAPI GetPEOptionalHeader (LPVOID, PIMAGE_OPTIONAL_HEADER); LPVOID WINAPI GetModuleEntryPoint (LPVOID); int WINAPI NumOfSections (LPVOID); LPVOID WINAPI GetImageBase (LPVOID); LPVOID WINAPI ImageDirectoryOffset (LPVOID, DWORD); /* PE section header info */ int WINAPI GetSectionNames (LPVOID, HANDLE, char **); BOOL WINAPI GetSectionHdrByName (LPVOID, PIMAGE_SECTION_HEADER, char *); /* import section info */ int WINAPI GetImportModuleNames (LPVOID, HANDLE, char **); int WINAPI GetImportFunctionNamesByModule (LPVOID, HANDLE, char *, char **); /* export section info */ int WINAPI GetExportFunctionNames (LPVOID, HANDLE, char **); int WINAPI GetNumberOfExportedFunctions (LPVOID); LPVOID WINAPI GetExportFunctionEntryPoints (LPVOID); LPVOID WINAPI GetExportFunctionOrdinals (LPVOID); /* resource section info */ int WINAPI GetNumberOfResources (LPVOID); int WINAPI GetListOfResourceTypes (LPVOID, HANDLE, char **); /* debug section info */ BOOL WINAPI IsDebugInfoStripped (LPVOID); int WINAPI RetrieveModuleName (LPVOID, HANDLE, char **); BOOL WINAPI IsDebugFile (LPVOID); BOOL WINAPI GetSeparateDebugHeader (LPVOID, PIMAGE_SEPARATE_DEBUG_HEADER); DWORD dwGetCodeRVA(DWORD dwImageBase); DWORD dwGetCodeSize(DWORD dwImageBase); #if defined(__cplusplus) } #endif #endif // __PEFILE_H__