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

UptoLike

#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
// Aligned to FileAlignment boundary
#define SIZEOF_HEADERS(params) \
align(sizeof(struct HEADERS), params->FileAlignment)
#define SIZEOF_TEXT(params) \
align(params->SizeOfMetadata + params->SizeOfCilCode, \
params->FileAlignment)
#define SIZEOF_CLI(params) \
align(sizeof(struct CLI_SECTION_IMAGE), params->FileAlignment)
#define SIZEOF_RELOC(params) \
align(sizeof(struct RELOC_SECTION), params->FileAlignment)
// Aligned to SectionAlignment boundary
#define SIZEOF_HEADERS_M(params) \
align(sizeof(struct HEADERS), SECTION_ALIGNMENT)
#define SIZEOF_TEXT_M(params) \
align(params->SizeOfMetadata + params->SizeOfCilCode, \
SECTION_ALIGNMENT)
#define SIZEOF_CLI_M \
align(sizeof(struct CLI_SECTION_IMAGE), SECTION_ALIGNMENT)
#define SIZEOF_RELOC_M \
align(sizeof(struct RELOC_SECTION), SECTION_ALIGNMENT)
#define SIZEOF_METHODS(params) \
align(params->SizeOfCilCode, SECTION_ALIGNMENT)
// Not aligned
#define SIZEOF_HEADERS_NOTALIGNED \
sizeof(struct HEADERS)
#define SIZEOF_CLI_NOTALIGNED \
sizeof(struct CLI_SECTION_IMAGE)
#define SIZEOF_TEXT_NOTALIGNED(params) \
Исходный код программы pegen
275
Приложение A.
Исходный код программы pegen
Исходный код программы pegen, выполняющей генерацию сборки
.NET, размещен в четырех файлах:
macros.h
Содержит макроопределения, которые используются в осталь-
ных файлах.
pe.h
Интерфейс модуля генерации PE-файла.
pe.c
Реализация модуля генерации PE-файла.
main.c
Главный модуль, использующий модуль генерации для создания
простейшей сборки .NET.
A.1. macros.h
#ifndef MACROS_H
#define MACROS_H
#define SECTION_ALIGNMENT 0x2000
#define EXE_TYPE 0x1
#define DLL_TYPE 0x0
#define SIZEOF_JMP_STUB 6
#define SIZEOF_IMPORT_TABLE 82
#define CNT_CODE 0x00000020
#define CNT_INITIALIZED_DATA 0x00000040
#define CNT_UNINITIALIZED_DATA 0x00000080
#define MEM_DISCARDABLE 0x02000000
#define MEM_EXECUTE 0x20000000
#define MEM_READ 0x40000000
#define MEM_WRITE 0x80000000
#define IMAGE_FILE_MACHINE_I386 0x014c
#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
274
CIL и системное программирование в Microsoft .NET
274                           CIL и системное программирование в Microsoft .NET   Исходный код программы pegen                                          275


                                                                                       #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
Приложение A.                                                                          #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9

Исходный код программы pegen                                                           // Aligned to FileAlignment boundary
                                                                                       #define SIZEOF_HEADERS(params) \
    Исходный код программы pegen, выполняющей генерацию сборки                             align(sizeof(struct HEADERS), params->FileAlignment)
.NET, размещен в четырех файлах:
       • macros.h                                                                      #define SIZEOF_TEXT(params) \
         Содержит макроопределения, которые используются в осталь-                         align(params->SizeOfMetadata + params->SizeOfCilCode, \
         ных файлах.                                                                       params->FileAlignment)
       • pe.h
         Интерфейс модуля генерации PE-файла.                                          #define SIZEOF_CLI(params) \
       • pe.c                                                                              align(sizeof(struct CLI_SECTION_IMAGE), params->FileAlignment)
         Реализация модуля генерации PE-файла.
       • main.c                                                                        #define SIZEOF_RELOC(params) \
         Главный модуль, использующий модуль генерации для создания                        align(sizeof(struct RELOC_SECTION), params->FileAlignment)
         простейшей сборки .NET.
                                                                                       // Aligned to SectionAlignment boundary
                                                                                       #define SIZEOF_HEADERS_M(params) \
A.1. macros.h                                                                              align(sizeof(struct HEADERS), SECTION_ALIGNMENT)

                                                                                       #define SIZEOF_TEXT_M(params) \
      #ifndef MACROS_H                                                                     align(params->SizeOfMetadata + params->SizeOfCilCode, \
      #define MACROS_H                                                                     SECTION_ALIGNMENT)

      #define   SECTION_ALIGNMENT        0x2000                                        #define SIZEOF_CLI_M \
      #define   EXE_TYPE                 0x1                                               align(sizeof(struct CLI_SECTION_IMAGE), SECTION_ALIGNMENT)
      #define   DLL_TYPE                 0x0
      #define   SIZEOF_JMP_STUB          6                                             #define SIZEOF_RELOC_M \
      #define   SIZEOF_IMPORT_TABLE      82                                                align(sizeof(struct RELOC_SECTION), SECTION_ALIGNMENT)

      #define   CNT_CODE                 0x00000020                                    #define SIZEOF_METHODS(params) \
      #define   CNT_INITIALIZED_DATA     0x00000040                                        align(params->SizeOfCilCode, SECTION_ALIGNMENT)
      #define   CNT_UNINITIALIZED_DATA   0x00000080
      #define   MEM_DISCARDABLE          0x02000000                                    // Not aligned
      #define   MEM_EXECUTE              0x20000000                                    #define SIZEOF_HEADERS_NOTALIGNED \
      #define   MEM_READ                 0x40000000                                        sizeof(struct HEADERS)
      #define   MEM_WRITE                0x80000000
                                                                                       #define SIZEOF_CLI_NOTALIGNED \
      #define IMAGE_FILE_MACHINE_I386 0x014c                                               sizeof(struct CLI_SECTION_IMAGE)

      #define IMAGE_SUBSYSTEM_WINDOWS_GUI     2                                        #define SIZEOF_TEXT_NOTALIGNED(params) \