#if !defined(__PEFILEEX_H__) #define __PEFILEEX_H__ #include "PEFile.h" #if defined(__cplusplus) extern "C" { #endif #define C_NEW_SECTION ".udata" #define C_SUPPRESS_SECTION ".sdata" #define C_DATA_SECTION ".data" #define C_TEXT_SECTION ".text" #define C_RELOC_SECTION ".reloc" #define C_RESSOURCE_SECTION ".rsrc" #define C_TEXT_SECTION_WATCOM "AUTO" #define C_DATA_SECTION_WATCOM "DGROUP" #define C_INVALID_SECTION -1 typedef struct tagPEDOSHEADER { unsigned long ulSize; unsigned char *lpBuffer; PIMAGE_DOS_HEADER lpDosHeader; } PEDOSHEADER,*LPPEDOSHEADER; typedef struct tagPEFILEHEADER { unsigned long ulSize; unsigned char *lpBuffer; PIMAGE_FILE_HEADER lpPEHeader; PIMAGE_OPTIONAL_HEADER lpPEOptionalHeader; PIMAGE_SECTION_HEADER lpSectionHeader; } PEFILEHEADER,*LPPEFILEHEADER; typedef struct tagPESECTION { unsigned long ulSize; unsigned char *lpBuffer; PIMAGE_SECTION_HEADER lpSectionHeader; struct tagPESECTION *lpPreviousSection; struct tagPESECTION *lpNextSection; } PESECTION,*LPPESECTION; typedef struct tagPEDEBUG { unsigned long ulSize; unsigned char *lpBuffer; } PEDEBUG,*LPPEDEBUG; typedef struct tagPEFILE { PEDOSHEADER PEDosHeader; PEFILEHEADER PEFileHeader; LPPESECTION lpPESectionList; PEDEBUG PEDebug; } PEFILE,*LPPEFILE; // basic function BOOL bInitPEStructure(char *filename,unsigned char *lpBuffer,unsigned long ulSize,LPPEFILE *lpPEFile); void vDonePEStructure(LPPEFILE *lpPEFile); BOOL bLoadPEFile(char *filename,LPPEFILE *lpPEFile); BOOL bLoadPEFileWithBlankFill(char *filename,LPPEFILE *lpPEFile); BOOL bSavePEFile(char *filename,LPPEFILE *lpPEFile); // EXE in another file BOOL bLoadPEFileFromFile(char *filename,unsigned long ulSize,unsigned long ulOffset,LPPEFILE *lpPEFile); // other functions LPPESECTION lpFindSectionWithIndex(LPPEFILE *lpPEFile,int lSectionIndex); LPPESECTION lpFindSectionWithName(LPPEFILE *lpPEFile,char *szName); LPPESECTION lpFindSectionWithRVA(LPPEFILE *lpPEFile,DWORD RVA); LPPESECTION lpFindSectionWithOffset(LPPEFILE *lpPEFile,unsigned long ulOffset); LPPESECTION lpFindSectionWithPointer(LPPEFILE *lpPEFile,unsigned char *ucPtr); unsigned long ulAlignOnSection(LPPEFILE *lpPEFile,unsigned long ulValue); unsigned long ulAlignOnFile(LPPEFILE *lpPEFile,unsigned long ulValue); BOOL bChangeSectionSize(LPPEFILE *lpPEFile,int lSectionIndex, unsigned long ulNewSize); BOOL bChangeSizeOfPEHeader(LPPEFILE *lpPEFile,unsigned long ulSizeToAdd); BOOL bAddSection(LPPEFILE *lpPEFile,char *szSectionName,unsigned long ulSize); #if defined(__cplusplus) } #endif #endif // __PEFILEEX_H__