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

UptoLike

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
Исходный код программы pegen
277
params->SizeOfMetadata + params->SizeOfCilCode
#define SIZEOF_CLI_HEADER \
sizeof(struct IMAGE_COR20_HEADER)
#define SIZEOF_RELOC_NOTALIGNED \
sizeof(struct RELOC_SECTION)
#define SIZEOF_DATA_DIRECTORY \
sizeof(struct IMAGE_DATA_DIRECTORY)
// RVA of section
#define RVA_OF_TEXT \
align(sizeof(struct HEADERS), SECTION_ALIGNMENT)
#define RVA_OF_CLI(params) \
RVA_OF_TEXT + \
align(params->SizeOfMetadata + params->SizeOfCilCode,
SECTION_ALIGNMENT)
#define RVA_OF_RELOC(params) \
RVA_OF_CLI(params) + SIZEOF_CLI_M
#define TYPE_OFFSET(a,b) \
(a*0x1000 | b)
#define OFFSETOF(s,m) \
(size_t)&(((s *)0)->m)
#endif
A.2. pe.h
#ifndef PE_H
#include <stdio.h>
// Block of input parameters
struct INPUT_PARAMETERS {
unsigned long Type;
276
CIL и системное программирование в Microsoft .NET
276                         CIL и системное программирование в Microsoft .NET   Исходный код программы pegen                                          277


          params->SizeOfMetadata + params->SizeOfCilCode                               unsigned char           *metadata;
                                                                                       unsigned char           *cilcode;
      #define SIZEOF_CLI_HEADER \
          sizeof(struct IMAGE_COR20_HEADER)                                            unsigned long           SizeOfMetadata;
                                                                                       unsigned long           SizeOfCilCode;
      #define SIZEOF_RELOC_NOTALIGNED \
          sizeof(struct RELOC_SECTION)                                                 unsigned   long         ImageBase;
                                                                                       unsigned   long         FileAlignment;
      #define SIZEOF_DATA_DIRECTORY \                                                  unsigned   long         EntryPointToken;
          sizeof(struct IMAGE_DATA_DIRECTORY)                                          unsigned   short        Subsystem;
                                                                                     };
      // RVA of section                                                              typedef struct INPUT_PARAMETERS *PINPUT_PARAMETERS;
      #define RVA_OF_TEXT   \
          align(sizeof(struct HEADERS), SECTION_ALIGNMENT)                           void   make_file          (FILE *file, PINPUT_PARAMETERS inP);

      #define RVA_OF_CLI(params) \                                                   // Struct IMAGE_DATA_DIRECTORY
          RVA_OF_TEXT +      \                                                       struct IMAGE_DATA_DIRECTORY {
          align(params->SizeOfMetadata + params->SizeOfCilCode,                         unsigned long  RVA;
             SECTION_ALIGNMENT)                                                         unsigned long  Size;
                                                                                     };
      #define RVA_OF_RELOC(params) \
          RVA_OF_CLI(params) + SIZEOF_CLI_M                                          typedef struct IMAGE_DATA_DIRECTORY *PIMAGE_DATA_DIRECTORY;

      #define TYPE_OFFSET(a,b) \                                                     struct IMAGE_SECTION_HEADER {
          (a*0x1000 | b)                                                                unsigned char Name[8];
                                                                                        unsigned long VirtualSize;
      #define OFFSETOF(s,m) \                                                           unsigned long VirtualAddress;
          (size_t)&(((s *)0)->m)                                                        unsigned long SizeOfRawData;
                                                                                        unsigned long PointerToRawData;
      #endif                                                                            unsigned long PointerToRelocations;
                                                                                        unsigned long PointerToLinenumbers;
                                                                                        unsigned short NumberOfRelocations;
A.2. pe.h                                                                               unsigned short NumberOfLinenumbers;
                                                                                        unsigned long Characteristics;
                                                                                     };
      #ifndef PE_H
                                                                                     struct HEADERS {
      #include 
                                                                                       char ms_dos_header[128];                  // MS-DOS header
      // Block of input parameters                                                     unsigned long signature;                  // PE signature
      struct INPUT_PARAMETERS {
        unsigned long       Type;                                                      struct _IMAGE_FILE_HEADER {               // PE header