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

UptoLike

struct IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
struct IMAGE_DATA_DIRECTORY ManagedNativeHeader;
};
#endif
A.3. pe.c
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include “pe.h”
#include “macros.h”
void make_headers (FILE* file, PINPUT_PARAMETERS inP);
void make_text_section (FILE* file, PINPUT_PARAMETERS inP);
void make_cli_section (FILE* file, PINPUT_PARAMETERS inP);
void make_reloc_section (FILE* file, PINPUT_PARAMETERS inP);
unsigned long align(unsigned long x, unsigned long alignment)
{
div_t t = div(x,alignment);
return t.rem == 0 ? x : (t.quot+1)*alignment;
};
void make_file (FILE* file, PINPUT_PARAMETERS inP)
{
make_headers(file, inP); // Stage 1
make_text_section(file, inP); // Stage 2
make_cli_section(file, inP); // Stage 3
make_reloc_section(file, inP); // Stage 4
}
unsigned char msdos_header[128] = {
0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Исходный код программы pegen
281
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;
280
CIL и системное программирование в Microsoft .NET
280                            CIL и системное программирование в Microsoft .NET   Исходный код программы pegen                                            281


             unsigned   long     ImportLookupTableRVA;                                       struct IMAGE_DATA_DIRECTORY   ExportAddressTableJumps;
             unsigned   long     TimeDateStamp;                                              struct IMAGE_DATA_DIRECTORY   ManagedNativeHeader;
             unsigned   long     ForwarderChain;                                        };
             unsigned   long     NameRVA;
             unsigned   long     ImportAddressTableRVA;                                 #endif
             unsigned   char     zero[20];

             /* Import Lookup Table */                                             A.3. pe.c
             unsigned long      HintNameTableRVA1;
             unsigned long      zero1;                                                  #include   
                                                                                        #include   
             /* Hint/Name Table */                                                      #include   
             unsigned short      Hint;                                                  #include   “pe.h”
             char           Name[12];                                                   #include   “macros.h”

             /* Dll name (“mscoree.dll”) */                                             void     make_headers    (FILE* file, PINPUT_PARAMETERS inP);
             char           DllName[12];                                                void     make_text_section (FILE* file, PINPUT_PARAMETERS inP);
           }IMPORT_TABLE;                                                               void     make_cli_section (FILE* file, PINPUT_PARAMETERS inP);
                                                                                        void     make_reloc_section (FILE* file, PINPUT_PARAMETERS inP);
      };
                                                                                        unsigned long align(unsigned long x, unsigned long alignment)
      //.reloc Section                                                                  {
      struct RELOC_SECTION                                                                 div_t t = div(x,alignment);
      {                                                                                    return t.rem == 0 ? x : (t.quot+1)*alignment;
         unsigned long          PageRVA;                                                };
         unsigned long          BlockSize;
         unsigned short         TypeOffset;                                             void make_file (FILE* file, PINPUT_PARAMETERS inP)
         unsigned short         Padding;                                                {
      };                                                                                  make_headers(file, inP);       // Stage 1
                                                                                          make_text_section(file, inP); // Stage 2
      struct IMAGE_COR20_HEADER                                                           make_cli_section(file, inP); // Stage 3
      {                                                                                   make_reloc_section(file, inP); // Stage 4
        unsigned long       cb;                                                         }
        unsigned short      MajorRuntimeVersion;
        unsigned short      MinorRuntimeVersion;                                        unsigned char   msdos_header[128]   = {
        struct IMAGE_DATA_DIRECTORY MetaData;                                             0x4D, 0x5A,   0x90, 0x00, 0x03,   0x00,   0x00,   0x00,
        unsigned long       Flags;                                                        0x04, 0x00,   0x00, 0x00, 0xFF,   0xFF,   0x00,   0x00,
        unsigned long       EntryPointToken;                                              0xB8, 0x00,   0x00, 0x00, 0x00,   0x00,   0x00,   0x00,
        struct IMAGE_DATA_DIRECTORY Resources;                                            0x40, 0x00,   0x00, 0x00, 0x00,   0x00,   0x00,   0x00,
        struct IMAGE_DATA_DIRECTORY StrongNameSignature;                                  0x00, 0x00,   0x00, 0x00, 0x00,   0x00,   0x00,   0x00,
        struct IMAGE_DATA_DIRECTORY CodeManagerTable;                                     0x00, 0x00,   0x00, 0x00, 0x00,   0x00,   0x00,   0x00,
        struct IMAGE_DATA_DIRECTORY VTableFixups;                                         0x00, 0x00,   0x00, 0x00, 0x00,   0x00,   0x00,   0x00,