Fixed buffer overflow
This commit is contained in:
parent
6f225f14b3
commit
25aedbde21
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/*
|
||||||
* exefixup.c v0.02.1 Andrew Kieschnick <andrewk@mail.utexas.edu>
|
* exefixup.c v0.02.1 Andrew Kieschnick <andrewk@mail.utexas.edu>
|
||||||
* (v0.02.1): Giuseppe Gatta <tails92@gmail.com>
|
* (v0.02.1): Giuseppe Gatta <tails92@gmail.com>
|
||||||
*
|
*
|
||||||
|
@ -57,7 +57,7 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
FILE *exe;
|
FILE *exe;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
unsigned char data[8];
|
unsigned char data[9];
|
||||||
char filename[256];
|
char filename[256];
|
||||||
int i;
|
int i;
|
||||||
unsigned int header_data[12];
|
unsigned int header_data[12];
|
||||||
|
@ -91,7 +91,7 @@ int main(int argc, char *argv[])
|
||||||
printf("ERROR: Not a PS-X EXE file\n");
|
printf("ERROR: Not a PS-X EXE file\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i=0;i<12;i++)
|
for(i=0;i<12;i++)
|
||||||
{
|
{
|
||||||
fscanf(exe, "%c", &data[0]);
|
fscanf(exe, "%c", &data[0]);
|
||||||
|
@ -116,7 +116,7 @@ int main(int argc, char *argv[])
|
||||||
printf("s_size\t0x%.8x\n\n", header_data[11]);
|
printf("s_size\t0x%.8x\n\n", header_data[11]);
|
||||||
|
|
||||||
fseek(exe, 0, SEEK_END);
|
fseek(exe, 0, SEEK_END);
|
||||||
|
|
||||||
size=ftell(exe)-2048;
|
size=ftell(exe)-2048;
|
||||||
|
|
||||||
padsize=2048-(size%2048);
|
padsize=2048-(size%2048);
|
||||||
|
@ -133,7 +133,7 @@ int main(int argc, char *argv[])
|
||||||
if (yesno=='Y')
|
if (yesno=='Y')
|
||||||
{
|
{
|
||||||
out = fopen(filename, "w");
|
out = fopen(filename, "w");
|
||||||
|
|
||||||
header_data[5]=size+padsize;
|
header_data[5]=size+padsize;
|
||||||
|
|
||||||
fprintf(out, "PS-X EXE");
|
fprintf(out, "PS-X EXE");
|
||||||
|
@ -142,7 +142,7 @@ int main(int argc, char *argv[])
|
||||||
int2char(header_data[i], data);
|
int2char(header_data[i], data);
|
||||||
fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]);
|
fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(exe, 56, SEEK_SET);
|
fseek(exe, 56, SEEK_SET);
|
||||||
|
|
||||||
for(i=0;i<size+1992;i++)
|
for(i=0;i<size+1992;i++)
|
||||||
|
@ -152,14 +152,14 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
for(i=0;i<padsize;i++)
|
for(i=0;i<padsize;i++)
|
||||||
fprintf(out, "%c", 0);
|
fprintf(out, "%c", 0);
|
||||||
|
|
||||||
size=header_data[5];
|
size=header_data[5];
|
||||||
fclose(out);
|
fclose(out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
yesno='Z';
|
yesno='Z';
|
||||||
|
|
||||||
if (size!=header_data[5])
|
if (size!=header_data[5])
|
||||||
{
|
{
|
||||||
printf("WARNING: EXE header t_size does not match filesize-2048\n");
|
printf("WARNING: EXE header t_size does not match filesize-2048\n");
|
||||||
|
@ -174,7 +174,7 @@ int main(int argc, char *argv[])
|
||||||
if (yesno=='Y')
|
if (yesno=='Y')
|
||||||
{
|
{
|
||||||
out = fopen(filename, "w");
|
out = fopen(filename, "w");
|
||||||
|
|
||||||
fprintf(out, "PS-X EXE");
|
fprintf(out, "PS-X EXE");
|
||||||
for(i=0;i<5;i++)
|
for(i=0;i<5;i++)
|
||||||
{
|
{
|
||||||
|
@ -188,7 +188,7 @@ int main(int argc, char *argv[])
|
||||||
int2char(header_data[i], data);
|
int2char(header_data[i], data);
|
||||||
fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]);
|
fprintf(out, "%c%c%c%c", data[0], data[1], data[2], data[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(exe, 56, SEEK_SET);
|
fseek(exe, 56, SEEK_SET);
|
||||||
|
|
||||||
for(i=0;i<size+1992;i++)
|
for(i=0;i<size+1992;i++)
|
||||||
|
|
Loading…
Reference in New Issue