93 lines
2.6 KiB
C
93 lines
2.6 KiB
C
#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__
|
|
|
|
|