| Рабочим названием платформы .NET было |
Опубликован: 28.06.2006 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный технический университет им. Н.Э. Баумана
Дополнительный материал 1:
Приложение A
A.2. pe.h
#ifndef PE_H
#include <stdio.h>
// Block of input parameters
struct INPUT_PARAMETERS {
unsigned long Type;
unsigned char *metadata;
unsigned char *cilcode;
unsigned long SizeOfMetadata;
unsigned long SizeOfCilCode;
unsigned long ImageBase;
unsigned long FileAlignment;
unsigned long EntryPointToken;
unsigned short Subsystem;
};
typedef struct INPUT_PARAMETERS *PINPUT_PARAMETERS;
void make_file (FILE *file, PINPUT_PARAMETERS inP);
// Struct IMAGE_DATA_DIRECTORY
struct IMAGE_DATA_DIRECTORY {
unsigned long RVA;
unsigned long Size;
};
typedef struct IMAGE_DATA_DIRECTORY *PIMAGE_DATA_DIRECTORY;
struct IMAGE_SECTION_HEADER {
unsigned char Name[8];
unsigned long VirtualSize;
unsigned long VirtualAddress;
unsigned long SizeOfRawData;
unsigned long PointerToRawData;
unsigned long PointerToRelocations;
unsigned long PointerToLinenumbers;
unsigned short NumberOfRelocations;
unsigned short NumberOfLinenumbers;
unsigned long Characteristics;
};
struct HEADERS {
char ms_dos_header[128]; // MS-DOS header
unsigned long signature; // PE signature
struct _IMAGE_FILE_HEADER { // PE header
unsigned short Machine;
unsigned short NumberOfSections;
unsigned long TimeDateStamp;
unsigned long PointerToSymbolTable;
unsigned long NumberOfSymbols;
unsigned short OptionalHeaderSize;
unsigned short Characteristics;
}PeHdr;
struct _IMAGE_OPTIONAL_HEADER { // optional PE header
unsigned short Magic;
unsigned char LMajor;
unsigned char LMinor;
unsigned long CodeSize;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long EntryPointRVA;
unsigned long BaseOfCode;
unsigned long BaseOfData;
unsigned long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short OSMajor;
unsigned short OSMinor;
unsigned short UserMajor;
unsigned short UserMinor;
unsigned short SubsysMajor;
unsigned short SubsysMinor;
unsigned long Reserved;
unsigned long ImageSize;
unsigned long HeaderSize;
unsigned long FileCheckSum;
unsigned short Subsystem;
unsigned short DllFlags;
unsigned long StackReserveSize;
unsigned long StackCommitSize;
unsigned long HeapReserveSize;
unsigned long HeapCommitSize;
unsigned long LoaderFlags;
unsigned long NumberOfDataDirectories;
}OptHdr;
struct IMAGE_DATA_DIRECTORY STUB1;
struct IMAGE_DATA_DIRECTORY IMPORT_DIRECTORY; // import directory
struct IMAGE_DATA_DIRECTORY STUB2[3];
struct IMAGE_DATA_DIRECTORY BASE_RELOC_DIRECTORY;
struct IMAGE_DATA_DIRECTORY STUB3[6];
struct IMAGE_DATA_DIRECTORY IAT_DIRECTORY; // IAT directory
struct IMAGE_DATA_DIRECTORY STUB4;
struct IMAGE_DATA_DIRECTORY CLI_DIRECTORY; // CLI directory
struct IMAGE_DATA_DIRECTORY STUB5;
struct IMAGE_SECTION_HEADER TEXT_SECTION; // .text section header
struct IMAGE_SECTION_HEADER CLI_SECTION; // .cli section header
struct IMAGE_SECTION_HEADER RELOC_SECTION; // .reloc section header
};
typedef struct HEADERS *PHEADERS;
// .CLI Section
struct CLI_SECTION_IMAGE {
struct _JMP_STUB { // entry point
unsigned short JmpInstruction;
unsigned long JmpAddress;
}JMP_STUB;
struct _CLI_HEADER { // CLI header
unsigned long cb;
unsigned short MajorRuntimeVersion;
unsigned short MinorRuntimeVersion;
struct IMAGE_DATA_DIRECTORY MetaData;
unsigned long Flags;
unsigned long EntryPointToken;
struct IMAGE_DATA_DIRECTORY NotUsed[6];
}CLI_HEADER;
struct _IMPORT_TABLE { // Import table
/* Import Address Table */
unsigned long HintNameTableRVA2;
unsigned long zero2;
/* Import Directory Entry */
unsigned long ImportLookupTableRVA;
unsigned long TimeDateStamp;
unsigned long ForwarderChain;
unsigned long NameRVA;
unsigned long ImportAddressTableRVA;
unsigned char zero[20];
/* Import Lookup Table */
unsigned long HintNameTableRVA1;
unsigned long zero1;
/* Hint/Name Table */
unsigned short Hint;
char Name[12];
/* Dll name ("mscoree.dll") */
char DllName[12];
}IMPORT_TABLE;
};
//.reloc Section
struct RELOC_SECTION
{
unsigned long PageRVA;
unsigned long BlockSize;
unsigned short TypeOffset;
unsigned short Padding;
};
struct IMAGE_COR20_HEADER
{
unsigned long cb;
unsigned short MajorRuntimeVersion;
unsigned short MinorRuntimeVersion;
struct IMAGE_DATA_DIRECTORY MetaData;
unsigned long Flags;
unsigned long EntryPointToken;
struct IMAGE_DATA_DIRECTORY Resources;
struct IMAGE_DATA_DIRECTORY StrongNameSignature;
struct IMAGE_DATA_DIRECTORY CodeManagerTable;
struct IMAGE_DATA_DIRECTORY VTableFixups;
struct IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
struct IMAGE_DATA_DIRECTORY ManagedNativeHeader;
};
#endif