reman3/Rayman_X/cpa/tempgrp/PTC/PE/PEFileEx.h

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__