#ifndef DIS_ASM_H #define DIS_ASM_H #ifndef __cplusplus #error C++ compiler required ! #endif /* __cplusplus */ #ifndef _WIN32 #error Only for Win32 / Win64 systems ! #endif /* _WIN32 */ /* includes */ #include #include #include #include #include #include using namespace std ; #define PE_HDR_ALN 30 #define PE_OPT_ALN 50 #define PE_SEC_ALN 55 /* NOTE : These structs are defined in WinNT.h. Do "NOT" rely on the msdn documentation. Always lookup WinNT.h first. When in doubt, lookup the PE/COFF documentation, http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx ///////////////////////////////////// // The Dos Header a.k.a Image Base // ///////////////////////////////////// typedef struct _IMAGE_DOS_HEADER { WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp; WORD e_csum; WORD e_ip; WORD e_cs; WORD e_lfarlc; WORD e_ovno; WORD e_res[4]; WORD e_oemid; WORD e_oeminfo; WORD e_res2[10]; LONG e_lfanew; } IMAGE_DOS_HEADER, * PIMAGE_DOS_HEADER; //////////////// // NT Headers // //////////////// typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, * PIMAGE_NT_HEADERS32; //////////////////////// // Optional PE Header // //////////////////////// typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER, * PIMAGE_OPTIONAL_HEADER; //////////////////// // PE File Header // //////////////////// typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, * PIMAGE_FILE_HEADER; */ #endif /* DIS_ASM_H */