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

UptoLike

Hdr->OptHdr.NumberOfDataDirectories = 16;
// TEXT section
Hdr->TEXT_SECTION.PointerToRelocations = 0;
Hdr->TEXT_SECTION.PointerToLinenumbers = 0;
Hdr->TEXT_SECTION.NumberOfRelocations = 0;
Hdr->TEXT_SECTION.NumberOfLinenumbers = 0;
Hdr->TEXT_SECTION.Characteristics = 0x60000020;
// CLI section
Hdr->CLI_SECTION.PointerToRelocations = 0;
Hdr->CLI_SECTION.PointerToLinenumbers = 0;
Hdr->CLI_SECTION.NumberOfRelocations = 0;
Hdr->CLI_SECTION.NumberOfLinenumbers = 0;
Hdr->CLI_SECTION.Characteristics = 0x60000020;
// .RELOC section
Hdr->RELOC_SECTION.PointerToRelocations = 0;
Hdr->RELOC_SECTION.PointerToLinenumbers = 0;
Hdr->RELOC_SECTION.NumberOfRelocations = 0;
Hdr->RELOC_SECTION.NumberOfLinenumbers = 0;
Hdr->RELOC_SECTION.Characteristics = 0x42000040;
// initialize to 0
memset(&Hdr->STUB1.RVA, 0, SIZEOF_DATA_DIRECTORY);
memset(Hdr->STUB2, 0, 3 * SIZEOF_DATA_DIRECTORY);
memset(Hdr->STUB3, 0, 6 * SIZEOF_DATA_DIRECTORY);
memset(&Hdr->STUB4.RVA, 0, SIZEOF_DATA_DIRECTORY);
memset(&Hdr->STUB5.RVA, 0, SIZEOF_DATA_DIRECTORY);
};
// initialize HEADERS structure
void make_headers(FILE* file ,PINPUT_PARAMETERS inP){
struct HEADERS Hdr;
char * image;
make_headers_const(&Hdr);
Hdr.PeHdr.NumberOfSections = 3;
Hdr.PeHdr.TimeDateStamp = (long)time(NULL);
Исходный код программы pegen
283
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x0E, 0x1F, 0xBA, 0x0E, 0x00, 0xB4, 0x09, 0xCD,
0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x21, 0x54, 0x68,
0x69, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72,
0x61, 0x6D, 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F,
0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x75, 0x6E,
0x20, 0x69, 0x6E, 0x20, 0x44, 0x4F, 0x53, 0x20,
0x6D, 0x6F, 0x64, 0x65, 0x2E, 0x0D, 0x0D, 0x0A,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// initialize constant fields in HEADERS structure
void make_headers_const(PHEADERS Hdr){
memcpy(Hdr->ms_dos_header, msdos_header, 128);
Hdr->signature = 0x00004550;
Hdr->PeHdr.Machine = IMAGE_FILE_MACHINE_I386;
Hdr->PeHdr.PointerToSymbolTable = 0;
Hdr->PeHdr.NumberOfSymbols = 0;
Hdr->PeHdr.OptionalHeaderSize = 0xe0;
// Optional Header
Hdr->OptHdr.Magic = 0x010B;
Hdr->OptHdr.LMajor = 6;
Hdr->OptHdr.LMinor = 0;
Hdr->OptHdr.SizeOfUninitializedData = 0;
Hdr->OptHdr.SectionAlignment = SECTION_ALIGNMENT;
Hdr->OptHdr.OSMajor = 4;
Hdr->OptHdr.OSMinor = 0;
Hdr->OptHdr.UserMajor = 0;
Hdr->OptHdr.UserMinor = 0;
Hdr->OptHdr.SubsysMajor = 4;
Hdr->OptHdr.SubsysMinor = 0;
Hdr->OptHdr.Reserved = 0;
Hdr->OptHdr.FileCheckSum = 0;
Hdr->OptHdr.DllFlags = 0x400;
Hdr->OptHdr.StackReserveSize = 0x100000;
Hdr->OptHdr.StackCommitSize = 0x1000;
Hdr->OptHdr.HeapReserveSize = 0x100000;
Hdr->OptHdr.HeapCommitSize = 0x1000;
Hdr->OptHdr.LoaderFlags = 0;
282
CIL и системное программирование в Microsoft .NET
282                                  CIL и системное программирование в Microsoft .NET   Исходный код программы pegen                                      283


           0x00,   0x00,   0x00,   0x00,   0x80,   0x00,   0x00,   0x00,                           Hdr->OptHdr.NumberOfDataDirectories = 16;
           0x0E,   0x1F,   0xBA,   0x0E,   0x00,   0xB4,   0x09,   0xCD,
           0x21,   0xB8,   0x01,   0x4C,   0xCD,   0x21,   0x54,   0x68,                           // TEXT section
           0x69,   0x73,   0x20,   0x70,   0x72,   0x6F,   0x67,   0x72,                           Hdr->TEXT_SECTION.PointerToRelocations    = 0;
           0x61,   0x6D,   0x20,   0x63,   0x61,   0x6E,   0x6E,   0x6F,                           Hdr->TEXT_SECTION.PointerToLinenumbers    = 0;
           0x74,   0x20,   0x62,   0x65,   0x20,   0x72,   0x75,   0x6E,                           Hdr->TEXT_SECTION.NumberOfRelocations     = 0;
           0x20,   0x69,   0x6E,   0x20,   0x44,   0x4F,   0x53,   0x20,                           Hdr->TEXT_SECTION.NumberOfLinenumbers     = 0;
           0x6D,   0x6F,   0x64,   0x65,   0x2E,   0x0D,   0x0D,   0x0A,                           Hdr->TEXT_SECTION.Characteristics     =   0x60000020;
           0x24,   0x00,   0x00,   0x00,   0x00,   0x00,   0x00,   0x00
      };                                                                                           // CLI section
                                                                                                   Hdr->CLI_SECTION.PointerToRelocations     = 0;
      // initialize constant fields in HEADERS structure                                           Hdr->CLI_SECTION.PointerToLinenumbers     = 0;
      void make_headers_const(PHEADERS Hdr){                                                       Hdr->CLI_SECTION.NumberOfRelocations     = 0;
        memcpy(Hdr->ms_dos_header, msdos_header, 128);                                             Hdr->CLI_SECTION.NumberOfLinenumbers     = 0;
                                                                                                   Hdr->CLI_SECTION.Characteristics     =   0x60000020;
           Hdr->signature = 0x00004550;
                                                                                                   // .RELOC section
           Hdr->PeHdr.Machine = IMAGE_FILE_MACHINE_I386;                                           Hdr->RELOC_SECTION.PointerToRelocations = 0;
           Hdr->PeHdr.PointerToSymbolTable = 0;                                                    Hdr->RELOC_SECTION.PointerToLinenumbers = 0;
           Hdr->PeHdr.NumberOfSymbols = 0;                                                         Hdr->RELOC_SECTION.NumberOfRelocations = 0;
           Hdr->PeHdr.OptionalHeaderSize = 0xe0;                                                   Hdr->RELOC_SECTION.NumberOfLinenumbers = 0;
                                                                                                   Hdr->RELOC_SECTION.Characteristics   = 0x42000040;
           // Optional Header
           Hdr->OptHdr.Magic = 0x010B;                                                             // initialize to 0
           Hdr->OptHdr.LMajor = 6;                                                                 memset(&Hdr->STUB1.RVA,   0, SIZEOF_DATA_DIRECTORY);
           Hdr->OptHdr.LMinor = 0;                                                                 memset(Hdr->STUB2, 0, 3   * SIZEOF_DATA_DIRECTORY);
           Hdr->OptHdr.SizeOfUninitializedData    = 0;                                             memset(Hdr->STUB3, 0, 6   * SIZEOF_DATA_DIRECTORY);
           Hdr->OptHdr.SectionAlignment       = SECTION_ALIGNMENT;                                 memset(&Hdr->STUB4.RVA,   0, SIZEOF_DATA_DIRECTORY);
           Hdr->OptHdr.OSMajor = 4;                                                                memset(&Hdr->STUB5.RVA,   0, SIZEOF_DATA_DIRECTORY);
           Hdr->OptHdr.OSMinor = 0;
           Hdr->OptHdr.UserMajor = 0;                                                         };
           Hdr->OptHdr.UserMinor = 0;
           Hdr->OptHdr.SubsysMajor = 4;                                                       // initialize HEADERS structure
           Hdr->OptHdr.SubsysMinor = 0;                                                       void make_headers(FILE* file ,PINPUT_PARAMETERS inP){
           Hdr->OptHdr.Reserved = 0;
           Hdr->OptHdr.FileCheckSum = 0;                                                           struct HEADERS Hdr;
           Hdr->OptHdr.DllFlags = 0x400;                                                           char * image;
           Hdr->OptHdr.StackReserveSize = 0x100000;
           Hdr->OptHdr.StackCommitSize = 0x1000;                                                   make_headers_const(&Hdr);
           Hdr->OptHdr.HeapReserveSize = 0x100000;                                                 Hdr.PeHdr.NumberOfSections = 3;
           Hdr->OptHdr.HeapCommitSize = 0x1000;                                                    Hdr.PeHdr.TimeDateStamp = (long)time(NULL);
           Hdr->OptHdr.LoaderFlags = 0;