Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 146 стр.

UptoLike

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 */
Исходный код программы pegen
279
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;
278
CIL и системное программирование в Microsoft .NET
278                          CIL и системное программирование в Microsoft .NET   Исходный код программы pegen                                             279


        unsigned   short   Machine;                                                   struct   IMAGE_DATA_DIRECTORY   STUB1;
        unsigned   short   NumberOfSections;                                          struct   IMAGE_DATA_DIRECTORY   IMPORT_DIRECTORY; // import directory
        unsigned   long    TimeDateStamp;                                             struct   IMAGE_DATA_DIRECTORY   STUB2[3];
        unsigned   long    PointerToSymbolTable;                                      struct   IMAGE_DATA_DIRECTORY   BASE_RELOC_DIRECTORY;
        unsigned   long    NumberOfSymbols;                                           struct   IMAGE_DATA_DIRECTORY   STUB3[6];
        unsigned   short   OptionalHeaderSize;                                        struct   IMAGE_DATA_DIRECTORY   IAT_DIRECTORY;    // IAT directory
        unsigned   short   Characteristics;                                           struct   IMAGE_DATA_DIRECTORY   STUB4;
      }PeHdr;                                                                         struct   IMAGE_DATA_DIRECTORY   CLI_DIRECTORY;    // CLI directory
                                                                                      struct   IMAGE_DATA_DIRECTORY   STUB5;
      struct _IMAGE_OPTIONAL_HEADER {      // optional PE header
        unsigned short Magic;                                                         struct IMAGE_SECTION_HEADER TEXT_SECTION; // .text section header
        unsigned char   LMajor;                                                       struct IMAGE_SECTION_HEADER CLI_SECTION; // .cli section header
        unsigned char   LMinor;                                                       struct IMAGE_SECTION_HEADER RELOC_SECTION; // .reloc section header
        unsigned long   CodeSize;
        unsigned long   SizeOfInitializedData;                                        };
        unsigned long   SizeOfUninitializedData;
        unsigned long   EntryPointRVA;                                                typedef struct HEADERS *PHEADERS;
        unsigned long   BaseOfCode;
        unsigned long   BaseOfData;                                                   // .CLI Section
        unsigned long   ImageBase;                                                    struct CLI_SECTION_IMAGE {
        unsigned long   SectionAlignment;
        unsigned long   FileAlignment;                                                     struct _JMP_STUB {                // entry point
        unsigned short OSMajor;                                                              unsigned short     JmpInstruction;
        unsigned short OSMinor;                                                              unsigned long      JmpAddress;
        unsigned short UserMajor;                                                          }JMP_STUB;
        unsigned short UserMinor;
        unsigned short SubsysMajor;                                                        struct _CLI_HEADER {                // CLI header
        unsigned short SubsysMinor;                                                          unsigned long       cb;
        unsigned long   Reserved;                                                            unsigned short     MajorRuntimeVersion;
        unsigned long   ImageSize;                                                           unsigned short     MinorRuntimeVersion;
        unsigned long   HeaderSize;                                                          struct IMAGE_DATA_DIRECTORY MetaData;
        unsigned long   FileCheckSum;                                                        unsigned long       Flags;
        unsigned short Subsystem;                                                            unsigned long       EntryPointToken;
        unsigned short DllFlags;                                                             struct IMAGE_DATA_DIRECTORY NotUsed[6];
        unsigned long   StackReserveSize;                                                  }CLI_HEADER;
        unsigned long   StackCommitSize;
        unsigned long   HeapReserveSize;                                                   struct _IMPORT_TABLE {                // Import table
        unsigned long   HeapCommitSize;
        unsigned long   LoaderFlags;                                                         /* Import Address Table */
        unsigned long   NumberOfDataDirectories;                                             unsigned long      HintNameTableRVA2;
      }OptHdr;                                                                               unsigned long      zero2;
                                                                                             /* Import Directory Entry */