mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
Remove the PESUM tool, the PEFIXUP tool can be used instead.
svn path=/trunk/; revision=16961
This commit is contained in:
parent
28aff5352b
commit
aad6d78c8c
1 changed files with 0 additions and 130 deletions
|
@ -1,130 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
FILE *fp;
|
||||
int len;
|
||||
long offset;
|
||||
unsigned long OldCheckSum, CheckSum;
|
||||
int i;
|
||||
|
||||
unsigned char *buffer;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("PESum In [Out]\n");
|
||||
printf(" If [out] is given, adding attribute IMAGE_SCN_MEM_NOT_PAGED to '.text', '.data', '.idata' and '.bss' sections.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
fp = fopen(argv[1], "rb");
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
printf("Unable to open input file '%s'\n", argv[1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
fseek(fp, 0, SEEK_END);
|
||||
len = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
buffer=(unsigned char*) malloc(((len+1)/2)*2);
|
||||
if (buffer == NULL)
|
||||
{
|
||||
fclose(fp);
|
||||
printf("Not enough memory available.\n");
|
||||
return 3;
|
||||
}
|
||||
|
||||
memset(buffer, 0x00, ((len+1)/2)*2);
|
||||
fread(buffer, len, 1, fp);
|
||||
fclose(fp);
|
||||
|
||||
offset = ((PIMAGE_DOS_HEADER)buffer)->e_lfanew;
|
||||
|
||||
if (offset + sizeof(IMAGE_NT_HEADERS) >= len || ((PIMAGE_NT_HEADERS)&buffer[offset])->Signature != IMAGE_NT_SIGNATURE)
|
||||
{
|
||||
printf("'%s' isn't a PE image\n", argv[1]);
|
||||
printf("%d %d\n", offset + sizeof(IMAGE_NT_HEADERS), len);
|
||||
free(buffer);
|
||||
return 4;
|
||||
}
|
||||
|
||||
OldCheckSum = ((PIMAGE_NT_HEADERS)&buffer[offset])->OptionalHeader.CheckSum;
|
||||
((PIMAGE_NT_HEADERS)&buffer[offset])->OptionalHeader.CheckSum = 0;
|
||||
|
||||
for(i=0; i<((PIMAGE_NT_HEADERS)&buffer[offset])->OptionalHeader.NumberOfRvaAndSizes; i++)
|
||||
{
|
||||
if (!((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].VirtualAddress)
|
||||
break;
|
||||
#if 1
|
||||
printf("%-8.8s %08x %08x %08x ",
|
||||
((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Name,
|
||||
((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].VirtualAddress,
|
||||
((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].SizeOfRawData,
|
||||
((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics);
|
||||
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_CNT_CODE)
|
||||
printf("C");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA)
|
||||
printf("I");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA)
|
||||
printf("U");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_MEM_READ)
|
||||
printf("R");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_MEM_WRITE)
|
||||
printf("W");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_MEM_EXECUTE)
|
||||
printf("X");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_MEM_NOT_PAGED)
|
||||
printf("nP");
|
||||
if (((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics & IMAGE_SCN_MEM_DISCARDABLE)
|
||||
printf("D");
|
||||
#endif
|
||||
if (argc>2)
|
||||
{
|
||||
char name[9];
|
||||
strncpy(name, ((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Name, 8);
|
||||
name[8]=0;
|
||||
if(!strcmp(name, ".text") || !strcmp(name, ".data") || !strcmp(name, ".bss") || !strcmp(name, ".idata"))
|
||||
{
|
||||
((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics |= IMAGE_SCN_MEM_NOT_PAGED;
|
||||
((PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION((PIMAGE_NT_HEADERS)&buffer[offset]))[i].Characteristics &= ~IMAGE_SCN_MEM_DISCARDABLE;
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
}
|
||||
printf("\n");
|
||||
CheckSum = 0;
|
||||
for(i = 0; i < len; i += 2)
|
||||
{
|
||||
CheckSum += *(unsigned short*)&buffer[i];
|
||||
CheckSum = 0xffff & (CheckSum + (CheckSum >> 16));
|
||||
}
|
||||
|
||||
CheckSum+=len;
|
||||
|
||||
if (argc > 2)
|
||||
{
|
||||
fp = fopen(argv[2], "wb+");
|
||||
if (fp == NULL)
|
||||
{
|
||||
printf("Unable to open output file '%s'\n", argv[2]);
|
||||
free(buffer);
|
||||
return 5;
|
||||
}
|
||||
((PIMAGE_NT_HEADERS)&buffer[offset])->OptionalHeader.CheckSum = CheckSum;
|
||||
fwrite(buffer, len, 1, fp);
|
||||
fclose(fp);
|
||||
printf("Creating '%s' from '%s' with PE checksum %08x\n", argv[2], argv[1], CheckSum);
|
||||
|
||||
}
|
||||
else
|
||||
printf("PE-checksum for '%s' is %08x (old %08x)\n", argv[1], CheckSum, OldCheckSum);
|
||||
|
||||
free(buffer);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue