mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 06:15:26 +00:00
[OBJ2BIN]
- Add new tool obj2bin, that converts a coff object file into a raw binary file - Move pe/coff types into a common header file pecoff.h svn path=/trunk/; revision=52133
This commit is contained in:
parent
0705ceae3e
commit
fcff3cbf18
5 changed files with 322 additions and 203 deletions
|
@ -6,6 +6,7 @@ add_subdirectory(cdmake)
|
|||
add_subdirectory(gendib)
|
||||
add_subdirectory(geninc)
|
||||
add_subdirectory(mkhive)
|
||||
add_subdirectory(obj2bin)
|
||||
add_subdirectory(spec2def)
|
||||
add_subdirectory(unicode)
|
||||
|
||||
|
|
1
reactos/tools/obj2bin/CMakeLists.txt
Normal file
1
reactos/tools/obj2bin/CMakeLists.txt
Normal file
|
@ -0,0 +1 @@
|
|||
add_executable(obj2bin obj2bin.c)
|
112
reactos/tools/obj2bin/obj2bin.c
Normal file
112
reactos/tools/obj2bin/obj2bin.c
Normal file
|
@ -0,0 +1,112 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "../pecoff.h"
|
||||
|
||||
static
|
||||
void
|
||||
Usage(void)
|
||||
{
|
||||
printf("Converts a coff object file into a raw binary file.\n"
|
||||
"Syntax: obj2bin <source file> <dest file>\n");
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char *pszSourceFile;
|
||||
char *pszDestFile;
|
||||
FILE *pSourceFile, *pDestFile;
|
||||
IMAGE_FILE_HEADER FileHeader;
|
||||
IMAGE_SECTION_HEADER SectionHeader;
|
||||
unsigned int i, nSize;
|
||||
void *pData;
|
||||
|
||||
if ((argc != 3) || (strcmp(argv[1], "--help") == 0)) Usage();
|
||||
|
||||
pszSourceFile = argv[1];
|
||||
pszDestFile = argv[2];
|
||||
|
||||
pSourceFile = fopen(pszSourceFile, "rb");
|
||||
if (!pSourceFile)
|
||||
{
|
||||
fprintf(stderr, "Couldn't open source file '%s'\n", pszSourceFile);
|
||||
return -1;
|
||||
}
|
||||
|
||||
pDestFile = fopen(pszDestFile, "wb");
|
||||
if (!pszDestFile)
|
||||
{
|
||||
fprintf(stderr, "Couldn't open dest file '%s'\n", pszDestFile);
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* Load the coff header */
|
||||
nSize = fread(&FileHeader, 1, sizeof(FileHeader), pSourceFile);
|
||||
if (nSize != sizeof(FileHeader))
|
||||
{
|
||||
fprintf(stderr, "Failed to read source file\n");
|
||||
return -3;
|
||||
}
|
||||
|
||||
/* Jump to section headers (skip optional header) */
|
||||
if (fseek(pSourceFile, FileHeader.SizeOfOptionalHeader, SEEK_CUR))
|
||||
{
|
||||
fprintf(stderr, "Failed to set file pointer\n");
|
||||
return -4;
|
||||
}
|
||||
|
||||
/* Loop all sections */
|
||||
for (i = 0; i < FileHeader.NumberOfSections; i++)
|
||||
{
|
||||
/* Read section header */
|
||||
nSize = fread(&SectionHeader, 1, sizeof(SectionHeader), pSourceFile);
|
||||
if (nSize != sizeof(SectionHeader))
|
||||
{
|
||||
fprintf(stderr, "Failed to read section %ld file\n", i);
|
||||
return -5;
|
||||
}
|
||||
|
||||
/* Check if this is '.text' section */
|
||||
if (strcmp(SectionHeader.Name, ".text") == 0) break;
|
||||
}
|
||||
|
||||
if (i == FileHeader.NumberOfSections)
|
||||
{
|
||||
fprintf(stderr, "No .text section found\n");
|
||||
return -6;
|
||||
}
|
||||
|
||||
/* Move file pointer to the start of the section*/
|
||||
if (fseek(pSourceFile, SectionHeader.PointerToRawData, SEEK_SET))
|
||||
{
|
||||
fprintf(stderr, "Failed to set file pointer\n");
|
||||
return -7;
|
||||
}
|
||||
|
||||
/* Allocate memory for the section */
|
||||
pData = malloc(SectionHeader.SizeOfRawData);
|
||||
if (!pData)
|
||||
{
|
||||
fprintf(stderr, "Failed to allocate %ld bytes\n", SectionHeader.SizeOfRawData);
|
||||
return -8;
|
||||
}
|
||||
|
||||
/* Read section data */
|
||||
if (!fread(pData, SectionHeader.SizeOfRawData, 1, pSourceFile))
|
||||
{
|
||||
fprintf(stderr, "Failed to read section %ld file\n", i);
|
||||
return -5;
|
||||
}
|
||||
|
||||
/* Write the section to the destination file */
|
||||
if (!fwrite(pData, SectionHeader.SizeOfRawData, 1, pDestFile))
|
||||
{
|
||||
fprintf(stderr, "Failed to write data\n");
|
||||
return -9;
|
||||
}
|
||||
|
||||
fclose(pDestFile);
|
||||
fclose(pSourceFile);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
207
reactos/tools/pecoff.h
Normal file
207
reactos/tools/pecoff.h
Normal file
|
@ -0,0 +1,207 @@
|
|||
#pragma once
|
||||
|
||||
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b
|
||||
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b
|
||||
|
||||
#define IMAGE_DOS_MAGIC 0x5a4d
|
||||
#define IMAGE_PE_MAGIC 0x00004550
|
||||
#define IMAGE_SIZEOF_SHORT_NAME 8
|
||||
|
||||
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
|
||||
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
|
||||
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
|
||||
|
||||
#define IMAGE_FILE_MACHINE_I386 0x14c
|
||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
||||
#define IMAGE_FILE_MACHINE_IA64 0x0200
|
||||
|
||||
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
|
||||
|
||||
#define IMAGE_SCN_TYPE_NOLOAD 0x00000002
|
||||
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008
|
||||
#define IMAGE_SCN_CNT_CODE 0x00000020
|
||||
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
|
||||
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
|
||||
#define IMAGE_SCN_LNK_OTHER 0x00000100
|
||||
#define IMAGE_SCN_LNK_INFO 0x00000200
|
||||
#define IMAGE_SCN_LNK_REMOVE 0x00000800
|
||||
#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
|
||||
#define IMAGE_SCN_GPREL 0x00008000
|
||||
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
|
||||
#define IMAGE_SCN_MEM_LOCKED 0x00040000
|
||||
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
|
||||
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
|
||||
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
|
||||
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
|
||||
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
|
||||
#define IMAGE_SCN_MEM_SHARED 0x10000000
|
||||
#define IMAGE_SCN_MEM_EXECUTE 0x20000000
|
||||
#define IMAGE_SCN_MEM_READ 0x40000000
|
||||
#define IMAGE_SCN_MEM_WRITE 0x80000000
|
||||
|
||||
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
|
||||
|
||||
typedef unsigned char BYTE;
|
||||
typedef unsigned char UCHAR;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned short USHORT;
|
||||
typedef unsigned long long ULONGLONG;
|
||||
#if defined(__x86_64__) && !defined(_WIN64)
|
||||
typedef signed int LONG;
|
||||
typedef unsigned int ULONG;
|
||||
typedef unsigned int DWORD;
|
||||
#else
|
||||
typedef signed long LONG;
|
||||
typedef unsigned long ULONG;
|
||||
typedef unsigned long DWORD;
|
||||
#endif
|
||||
#if defined(_WIN64)
|
||||
typedef unsigned __int64 ULONG_PTR;
|
||||
#else
|
||||
#if defined(__x86_64__) && !defined(_WIN64)
|
||||
typedef unsigned int ULONG_PTR;
|
||||
#else
|
||||
typedef unsigned long ULONG_PTR;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#pragma pack(push,2)
|
||||
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;
|
||||
#pragma pack(pop)
|
||||
|
||||
#pragma pack(push,4)
|
||||
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;
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef struct _IMAGE_DATA_DIRECTORY {
|
||||
DWORD VirtualAddress;
|
||||
DWORD Size;
|
||||
} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER32 {
|
||||
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_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER64 {
|
||||
WORD Magic;
|
||||
BYTE MajorLinkerVersion;
|
||||
BYTE MinorLinkerVersion;
|
||||
DWORD SizeOfCode;
|
||||
DWORD SizeOfInitializedData;
|
||||
DWORD SizeOfUninitializedData;
|
||||
DWORD AddressOfEntryPoint;
|
||||
DWORD BaseOfCode;
|
||||
ULONGLONG 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;
|
||||
ULONGLONG SizeOfStackReserve;
|
||||
ULONGLONG SizeOfStackCommit;
|
||||
ULONGLONG SizeOfHeapReserve;
|
||||
ULONGLONG SizeOfHeapCommit;
|
||||
DWORD LoaderFlags;
|
||||
DWORD NumberOfRvaAndSizes;
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
} IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
|
||||
|
||||
#ifdef _TARGET_PE64
|
||||
typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
|
||||
typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
|
||||
#else
|
||||
typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
|
||||
typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
|
||||
#endif
|
||||
|
||||
typedef struct _IMAGE_SECTION_HEADER {
|
||||
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
|
||||
union {
|
||||
DWORD PhysicalAddress;
|
||||
DWORD VirtualSize;
|
||||
} Misc;
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfRawData;
|
||||
DWORD PointerToRawData;
|
||||
DWORD PointerToRelocations;
|
||||
DWORD PointerToLinenumbers;
|
||||
WORD NumberOfRelocations;
|
||||
WORD NumberOfLinenumbers;
|
||||
DWORD Characteristics;
|
||||
} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
|
||||
|
||||
#pragma pack(push,4)
|
||||
typedef struct _IMAGE_BASE_RELOCATION {
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfBlock;
|
||||
WORD TypeOffset[1];
|
||||
} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
|
||||
#pragma pack(pop)
|
||||
|
|
@ -1,209 +1,7 @@
|
|||
/* rsym.h */
|
||||
|
||||
#pragma once
|
||||
|
||||
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x010b
|
||||
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x020b
|
||||
|
||||
#define IMAGE_DOS_MAGIC 0x5a4d
|
||||
#define IMAGE_PE_MAGIC 0x00004550
|
||||
#define IMAGE_SIZEOF_SHORT_NAME 8
|
||||
|
||||
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
|
||||
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
|
||||
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
|
||||
|
||||
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
|
||||
|
||||
#define IMAGE_SCN_TYPE_NOLOAD 0x00000002
|
||||
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008
|
||||
#define IMAGE_SCN_CNT_CODE 0x00000020
|
||||
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
|
||||
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
|
||||
#define IMAGE_SCN_LNK_OTHER 0x00000100
|
||||
#define IMAGE_SCN_LNK_INFO 0x00000200
|
||||
#define IMAGE_SCN_LNK_REMOVE 0x00000800
|
||||
#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
|
||||
#define IMAGE_SCN_GPREL 0x00008000
|
||||
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
|
||||
#define IMAGE_SCN_MEM_LOCKED 0x00040000
|
||||
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
|
||||
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
|
||||
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
|
||||
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
|
||||
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
|
||||
#define IMAGE_SCN_MEM_SHARED 0x10000000
|
||||
#define IMAGE_SCN_MEM_EXECUTE 0x20000000
|
||||
#define IMAGE_SCN_MEM_READ 0x40000000
|
||||
#define IMAGE_SCN_MEM_WRITE 0x80000000
|
||||
|
||||
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
|
||||
|
||||
typedef unsigned char BYTE;
|
||||
typedef unsigned char UCHAR;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned short USHORT;
|
||||
typedef unsigned long long ULONGLONG;
|
||||
#if defined(__x86_64__) && !defined(_WIN64)
|
||||
typedef signed int LONG;
|
||||
typedef unsigned int ULONG;
|
||||
typedef unsigned int DWORD;
|
||||
#else
|
||||
typedef signed long LONG;
|
||||
typedef unsigned long ULONG;
|
||||
typedef unsigned long DWORD;
|
||||
#endif
|
||||
#if defined(_WIN64)
|
||||
typedef unsigned __int64 ULONG_PTR;
|
||||
#else
|
||||
#if defined(__x86_64__) && !defined(_WIN64)
|
||||
typedef unsigned int ULONG_PTR;
|
||||
#else
|
||||
typedef unsigned long ULONG_PTR;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#pragma pack(push,2)
|
||||
|
||||
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;
|
||||
#pragma pack(pop)
|
||||
|
||||
#pragma pack(push,4)
|
||||
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;
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef struct _IMAGE_DATA_DIRECTORY {
|
||||
DWORD VirtualAddress;
|
||||
DWORD Size;
|
||||
} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER32 {
|
||||
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_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
|
||||
|
||||
typedef struct _IMAGE_OPTIONAL_HEADER64 {
|
||||
WORD Magic;
|
||||
BYTE MajorLinkerVersion;
|
||||
BYTE MinorLinkerVersion;
|
||||
DWORD SizeOfCode;
|
||||
DWORD SizeOfInitializedData;
|
||||
DWORD SizeOfUninitializedData;
|
||||
DWORD AddressOfEntryPoint;
|
||||
DWORD BaseOfCode;
|
||||
ULONGLONG 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;
|
||||
ULONGLONG SizeOfStackReserve;
|
||||
ULONGLONG SizeOfStackCommit;
|
||||
ULONGLONG SizeOfHeapReserve;
|
||||
ULONGLONG SizeOfHeapCommit;
|
||||
DWORD LoaderFlags;
|
||||
DWORD NumberOfRvaAndSizes;
|
||||
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
|
||||
} IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
|
||||
|
||||
|
||||
#ifdef _TARGET_PE64
|
||||
typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
|
||||
typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
|
||||
#else
|
||||
typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
|
||||
typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
|
||||
#endif
|
||||
|
||||
typedef struct _IMAGE_SECTION_HEADER {
|
||||
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
|
||||
union {
|
||||
DWORD PhysicalAddress;
|
||||
DWORD VirtualSize;
|
||||
} Misc;
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfRawData;
|
||||
DWORD PointerToRawData;
|
||||
DWORD PointerToRelocations;
|
||||
DWORD PointerToLinenumbers;
|
||||
WORD NumberOfRelocations;
|
||||
WORD NumberOfLinenumbers;
|
||||
DWORD Characteristics;
|
||||
} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
|
||||
|
||||
#pragma pack(push,4)
|
||||
typedef struct _IMAGE_BASE_RELOCATION {
|
||||
DWORD VirtualAddress;
|
||||
DWORD SizeOfBlock;
|
||||
WORD TypeOffset[1];
|
||||
} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
|
||||
#pragma pack(pop)
|
||||
#include "../pecoff.h"
|
||||
|
||||
typedef struct {
|
||||
USHORT f_magic; /* magic number */
|
||||
|
|
Loading…
Reference in a new issue