Составители:
Рубрика:
Hdr.TEXT_SECTION.SizeOfRawData = SIZEOF_TEXT(inP);
Hdr.TEXT_SECTION.PointerToRawData = SIZEOF_HEADERS(inP);
//END of initializing TEXT section
//.cli section
memset(Hdr.CLI_SECTION.Name, 0, sizeof(Hdr.CLI_SECTION.Name));
strcpy((char*)Hdr.CLI_SECTION.Name, “.cli”);
Hdr.CLI_SECTION.VirtualSize = SIZEOF_CLI_NOTALIGNED;
Hdr.CLI_SECTION.VirtualAddress = SIZEOF_HEADERS_M(inP) +
SIZEOF_TEXT_M(inP);
Hdr.CLI_SECTION.SizeOfRawData = SIZEOF_CLI(inP);
Hdr.CLI_SECTION.PointerToRawData = SIZEOF_HEADERS(inP) +
SIZEOF_TEXT(inP);
//END of initializing CLI section
//.RELOC section
memset(Hdr.RELOC_SECTION.Name, 0, sizeof(Hdr.RELOC_SECTION.Name));
strcpy((char*)Hdr.RELOC_SECTION.Name, “.reloc”);
Hdr.RELOC_SECTION.VirtualSize = SIZEOF_RELOC_NOTALIGNED;
Hdr.RELOC_SECTION.VirtualAddress = RVA_OF_RELOC(inP);
Hdr.RELOC_SECTION.SizeOfRawData = SIZEOF_RELOC(inP);
Hdr.RELOC_SECTION.PointerToRawData = SIZEOF_HEADERS(inP) +
SIZEOF_TEXT(inP) + SIZEOF_CLI(inP);
//END of initializing .RELOC section
image = malloc(SIZEOF_HEADERS(inP));
memset(image,0,SIZEOF_HEADERS(inP));
memcpy(image,(char *)&Hdr, SIZEOF_HEADERS_NOTALIGNED);
fwrite(image,1,SIZEOF_HEADERS(inP),file);
free(image);
};
// initialize .TEXT section
void make_text_section(FILE * file, PINPUT_PARAMETERS inP) {
char * image;
image = malloc(SIZEOF_TEXT(inP));
memset(image, 0, SIZEOF_TEXT(inP));
memcpy(image, inP->metadata, inP->SizeOfMetadata);
Исходный код программы pegen
285
if(inP->Type == EXE_TYPE)
Hdr.PeHdr.Characteristics = 0x010E;
else
Hdr.PeHdr.Characteristics = 0x210E;
Hdr.OptHdr.CodeSize = SIZEOF_TEXT_M(inP);
Hdr.OptHdr.SizeOfInitializedData = SIZEOF_TEXT_M(inP);
Hdr.OptHdr.EntryPointRVA = RVA_OF_CLI(inP);
Hdr.OptHdr.BaseOfCode = RVA_OF_TEXT;
Hdr.OptHdr.BaseOfData = 0;
Hdr.OptHdr.ImageBase = inP->ImageBase;
Hdr.OptHdr.FileAlignment = inP->FileAlignment;
Hdr.OptHdr.ImageSize = RVA_OF_RELOC(inP) + SIZEOF_RELOC_M;
Hdr.OptHdr.HeaderSize = SIZEOF_HEADERS(inP);
Hdr.OptHdr.Subsystem = inP->Subsystem;
// Import Directory
Hdr.IMPORT_DIRECTORY.RVA = RVA_OF_CLI(inP) +
OFFSETOF(struct CLI_SECTION_IMAGE,
IMPORT_TABLE.ImportLookupTableRVA);
Hdr.IMPORT_DIRECTORY.Size = 0x53;
// Import Address Directory
Hdr.IAT_DIRECTORY.RVA = RVA_OF_CLI(inP) +
OFFSETOF(struct CLI_SECTION_IMAGE,
IMPORT_TABLE.HintNameTableRVA2);
Hdr.IAT_DIRECTORY.Size = 0x08;
// Base Reloc Directory
Hdr.BASE_RELOC_DIRECTORY.RVA = RVA_OF_RELOC(inP);
Hdr.BASE_RELOC_DIRECTORY.Size = 0x0C;
// CLI Directory
Hdr.CLI_DIRECTORY.RVA = RVA_OF_CLI(inP) + SIZEOF_JMP_STUB;
Hdr.CLI_DIRECTORY.Size = SIZEOF_CLI_HEADER;
//TEXT section
memset(Hdr.TEXT_SECTION.Name, 0, sizeof(Hdr.TEXT_SECTION.Name));
strcpy((char*)Hdr.TEXT_SECTION.Name, “.text”);
Hdr.TEXT_SECTION.VirtualSize = SIZEOF_TEXT_NOTALIGNED(inP);
Hdr.TEXT_SECTION.VirtualAddress = SIZEOF_HEADERS_M(inP);
284
CIL и системное программирование в Microsoft .NET
284 CIL и системное программирование в Microsoft .NET Исходный код программы pegen 285 if(inP->Type == EXE_TYPE) Hdr.TEXT_SECTION.SizeOfRawData = SIZEOF_TEXT(inP); Hdr.PeHdr.Characteristics = 0x010E; Hdr.TEXT_SECTION.PointerToRawData = SIZEOF_HEADERS(inP); else //END of initializing TEXT section Hdr.PeHdr.Characteristics = 0x210E; //.cli section Hdr.OptHdr.CodeSize = SIZEOF_TEXT_M(inP); memset(Hdr.CLI_SECTION.Name, 0, sizeof(Hdr.CLI_SECTION.Name)); Hdr.OptHdr.SizeOfInitializedData = SIZEOF_TEXT_M(inP); strcpy((char*)Hdr.CLI_SECTION.Name, “.cli”); Hdr.OptHdr.EntryPointRVA = RVA_OF_CLI(inP); Hdr.OptHdr.BaseOfCode = RVA_OF_TEXT; Hdr.CLI_SECTION.VirtualSize = SIZEOF_CLI_NOTALIGNED; Hdr.OptHdr.BaseOfData = 0; Hdr.CLI_SECTION.VirtualAddress = SIZEOF_HEADERS_M(inP) + Hdr.OptHdr.ImageBase = inP->ImageBase; SIZEOF_TEXT_M(inP); Hdr.OptHdr.FileAlignment = inP->FileAlignment; Hdr.CLI_SECTION.SizeOfRawData = SIZEOF_CLI(inP); Hdr.OptHdr.ImageSize = RVA_OF_RELOC(inP) + SIZEOF_RELOC_M; Hdr.CLI_SECTION.PointerToRawData = SIZEOF_HEADERS(inP) + Hdr.OptHdr.HeaderSize = SIZEOF_HEADERS(inP); SIZEOF_TEXT(inP); Hdr.OptHdr.Subsystem = inP->Subsystem; //END of initializing CLI section // Import Directory //.RELOC section Hdr.IMPORT_DIRECTORY.RVA = RVA_OF_CLI(inP) + memset(Hdr.RELOC_SECTION.Name, 0, sizeof(Hdr.RELOC_SECTION.Name)); OFFSETOF(struct CLI_SECTION_IMAGE, strcpy((char*)Hdr.RELOC_SECTION.Name, “.reloc”); IMPORT_TABLE.ImportLookupTableRVA); Hdr.IMPORT_DIRECTORY.Size = 0x53; Hdr.RELOC_SECTION.VirtualSize = SIZEOF_RELOC_NOTALIGNED; Hdr.RELOC_SECTION.VirtualAddress = RVA_OF_RELOC(inP); // Import Address Directory Hdr.RELOC_SECTION.SizeOfRawData = SIZEOF_RELOC(inP); Hdr.IAT_DIRECTORY.RVA = RVA_OF_CLI(inP) + Hdr.RELOC_SECTION.PointerToRawData = SIZEOF_HEADERS(inP) + OFFSETOF(struct CLI_SECTION_IMAGE, SIZEOF_TEXT(inP) + SIZEOF_CLI(inP); IMPORT_TABLE.HintNameTableRVA2); //END of initializing .RELOC section Hdr.IAT_DIRECTORY.Size = 0x08; image = malloc(SIZEOF_HEADERS(inP)); // Base Reloc Directory Hdr.BASE_RELOC_DIRECTORY.RVA = RVA_OF_RELOC(inP); memset(image,0,SIZEOF_HEADERS(inP)); Hdr.BASE_RELOC_DIRECTORY.Size = 0x0C; memcpy(image,(char *)&Hdr, SIZEOF_HEADERS_NOTALIGNED); fwrite(image,1,SIZEOF_HEADERS(inP),file); // CLI Directory free(image); Hdr.CLI_DIRECTORY.RVA = RVA_OF_CLI(inP) + SIZEOF_JMP_STUB; }; Hdr.CLI_DIRECTORY.Size = SIZEOF_CLI_HEADER; // initialize .TEXT section //TEXT section void make_text_section(FILE * file, PINPUT_PARAMETERS inP) { memset(Hdr.TEXT_SECTION.Name, 0, sizeof(Hdr.TEXT_SECTION.Name)); char * image; strcpy((char*)Hdr.TEXT_SECTION.Name, “.text”); image = malloc(SIZEOF_TEXT(inP)); Hdr.TEXT_SECTION.VirtualSize = SIZEOF_TEXT_NOTALIGNED(inP); memset(image, 0, SIZEOF_TEXT(inP)); Hdr.TEXT_SECTION.VirtualAddress = SIZEOF_HEADERS_M(inP); memcpy(image, inP->metadata, inP->SizeOfMetadata);
Страницы
- « первая
- ‹ предыдущая
- …
- 147
- 148
- 149
- 150
- 151
- …
- следующая ›
- последняя »