67 |
|
|
68 |
file = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL, |
file = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL, |
69 |
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); |
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); |
70 |
if (file == INVALID_HANDLE_VALUE) |
if (file == INVALID_HANDLE_VALUE) |
71 |
return FALSE; |
return FALSE; |
72 |
|
|
73 |
size = GetFileSize (file, &upper_size); |
size = GetFileSize (file, &upper_size); |
74 |
file_mapping = CreateFileMapping (file, NULL, PAGE_READONLY, |
file_mapping = CreateFileMapping (file, NULL, PAGE_READONLY, |
75 |
0, size, NULL); |
0, size, NULL); |
76 |
if (!file_mapping) |
if (!file_mapping) |
77 |
return FALSE; |
return FALSE; |
78 |
|
|
79 |
file_base = MapViewOfFile (file_mapping, FILE_MAP_READ, 0, 0, size); |
file_base = MapViewOfFile (file_mapping, FILE_MAP_READ, 0, 0, size); |
80 |
if (file_base == 0) |
if (file_base == 0) |
81 |
return FALSE; |
return FALSE; |
82 |
|
|
83 |
p_file->name = filename; |
p_file->name = filename; |
98 |
|
|
99 |
file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, |
file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, |
100 |
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); |
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); |
101 |
if (file == INVALID_HANDLE_VALUE) |
if (file == INVALID_HANDLE_VALUE) |
102 |
return FALSE; |
return FALSE; |
103 |
|
|
104 |
file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, |
file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, |
105 |
0, size, NULL); |
0, size, NULL); |
106 |
if (!file_mapping) |
if (!file_mapping) |
107 |
return FALSE; |
return FALSE; |
108 |
|
|
109 |
file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); |
file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); |
110 |
if (file_base == 0) |
if (file_base == 0) |
111 |
return FALSE; |
return FALSE; |
112 |
|
|
113 |
p_file->name = filename; |
p_file->name = filename; |
114 |
p_file->size = size; |
p_file->size = size; |
115 |
p_file->file = file; |
p_file->file = file; |
129 |
|
|
130 |
file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, |
file = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, 0, NULL, |
131 |
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); |
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); |
132 |
if (file == INVALID_HANDLE_VALUE) |
if (file == INVALID_HANDLE_VALUE) |
133 |
return FALSE; |
return FALSE; |
134 |
|
|
135 |
size = GetFileSize (file, &upper_size); |
size = GetFileSize (file, &upper_size); |
136 |
file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, |
file_mapping = CreateFileMapping (file, NULL, PAGE_READWRITE, |
137 |
0, size, NULL); |
0, size, NULL); |
138 |
if (!file_mapping) |
if (!file_mapping) |
139 |
return FALSE; |
return FALSE; |
140 |
|
|
141 |
file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); |
file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); |
142 |
if (file_base == 0) |
if (file_base == 0) |
143 |
return FALSE; |
return FALSE; |
144 |
|
|
145 |
p_file->name = filename; |
p_file->name = filename; |
341 |
easy to parse. */ |
easy to parse. */ |
342 |
|
|
343 |
static void |
static void |
344 |
copy_executable_and_move_sections (file_data *p_infile, |
copy_executable_and_move_sections (file_data *p_infile, |
345 |
file_data *p_outfile) |
file_data *p_outfile) |
346 |
{ |
{ |
347 |
unsigned char *dst; |
unsigned char *dst; |
389 |
Note that dst is updated implicitly by each COPY_CHUNK. */ |
Note that dst is updated implicitly by each COPY_CHUNK. */ |
390 |
|
|
391 |
dos_header = (PIMAGE_DOS_HEADER) p_infile->file_base; |
dos_header = (PIMAGE_DOS_HEADER) p_infile->file_base; |
392 |
nt_header = (PIMAGE_NT_HEADERS) (((unsigned long) dos_header) + |
nt_header = (PIMAGE_NT_HEADERS) (((unsigned long) dos_header) + |
393 |
dos_header->e_lfanew); |
dos_header->e_lfanew); |
394 |
section = IMAGE_FIRST_SECTION (nt_header); |
section = IMAGE_FIRST_SECTION (nt_header); |
395 |
|
|
396 |
import_dir = &nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; |
import_dir = &nt_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; |
397 |
import_section = rva_to_section (import_dir->VirtualAddress, nt_header); |
import_section = rva_to_section (import_dir->VirtualAddress, nt_header); |
398 |
|
|
776 |
/* Open the original (dumped) executable file for reference. */ |
/* Open the original (dumped) executable file for reference. */ |
777 |
if (!open_input_file (&in_file, in_filename)) |
if (!open_input_file (&in_file, in_filename)) |
778 |
{ |
{ |
779 |
printf ("Failed to open %s (%d)...bailing.\n", |
printf ("Failed to open %s (%d)...bailing.\n", |
780 |
in_filename, GetLastError ()); |
in_filename, GetLastError ()); |
781 |
exit (1); |
exit (1); |
782 |
} |
} |
786 |
which should fit in the alignment slop. */ |
which should fit in the alignment slop. */ |
787 |
if (!open_output_file (&out_file, out_filename, in_file.size)) |
if (!open_output_file (&out_file, out_filename, in_file.size)) |
788 |
{ |
{ |
789 |
printf ("Failed to open %s (%d)...bailing.\n", |
printf ("Failed to open %s (%d)...bailing.\n", |
790 |
out_filename, GetLastError ()); |
out_filename, GetLastError ()); |
791 |
exit (1); |
exit (1); |
792 |
} |
} |