Mercurial > hg > xemacs-beta
comparison src/unexnt.c @ 400:a86b2b5e0111 r21-2-30
Import from CVS: tag r21-2-30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:14:34 +0200 |
parents | 74fd4e045ea6 |
children | 501cfd01ee6d |
comparison
equal
deleted
inserted
replaced
399:376370fb5946 | 400:a86b2b5e0111 |
---|---|
61 #include <fcntl.h> | 61 #include <fcntl.h> |
62 #include <windows.h> | 62 #include <windows.h> |
63 | 63 |
64 /* From IMAGEHLP.H which is not installed by default by MSVC < 5 */ | 64 /* From IMAGEHLP.H which is not installed by default by MSVC < 5 */ |
65 /* The IMAGEHLP.DLL library is not distributed by default with Windows95 */ | 65 /* The IMAGEHLP.DLL library is not distributed by default with Windows95 */ |
66 PIMAGE_NT_HEADERS | 66 typedef PIMAGE_NT_HEADERS |
67 (__stdcall * pfnCheckSumMappedFile) (LPVOID BaseAddress, DWORD FileLength, | 67 (__stdcall * pfnCheckSumMappedFile_t) (LPVOID BaseAddress, DWORD FileLength, |
68 LPDWORD HeaderSum, LPDWORD CheckSum); | 68 LPDWORD HeaderSum, LPDWORD CheckSum); |
69 | |
69 | 70 |
70 #if 0 | 71 #if 0 |
71 extern BOOL ctrl_c_handler (unsigned long type); | 72 extern BOOL ctrl_c_handler (unsigned long type); |
72 #endif | 73 #endif |
73 | 74 |
188 { | 189 { |
189 file_data in_file, out_file; | 190 file_data in_file, out_file; |
190 char out_filename[MAX_PATH], in_filename[MAX_PATH]; | 191 char out_filename[MAX_PATH], in_filename[MAX_PATH]; |
191 unsigned long size; | 192 unsigned long size; |
192 char *ptr; | 193 char *ptr; |
193 HANDLE hImagehelp; | 194 HINSTANCE hImagehelp; |
194 | 195 |
195 /* Make sure that the input and output filenames have the | 196 /* Make sure that the input and output filenames have the |
196 ".exe" extension...patch them up if they don't. */ | 197 ".exe" extension...patch them up if they don't. */ |
197 strcpy (in_filename, old_name); | 198 strcpy (in_filename, old_name); |
198 ptr = in_filename + strlen (in_filename) - 4; | 199 ptr = in_filename + strlen (in_filename) - 4; |
243 hImagehelp = LoadLibrary ("imagehlp.dll"); | 244 hImagehelp = LoadLibrary ("imagehlp.dll"); |
244 if (hImagehelp) | 245 if (hImagehelp) |
245 { | 246 { |
246 PIMAGE_DOS_HEADER dos_header; | 247 PIMAGE_DOS_HEADER dos_header; |
247 PIMAGE_NT_HEADERS nt_header; | 248 PIMAGE_NT_HEADERS nt_header; |
249 | |
248 DWORD headersum; | 250 DWORD headersum; |
249 DWORD checksum; | 251 DWORD checksum; |
252 pfnCheckSumMappedFile_t pfnCheckSumMappedFile; | |
250 | 253 |
251 dos_header = (PIMAGE_DOS_HEADER) out_file.file_base; | 254 dos_header = (PIMAGE_DOS_HEADER) out_file.file_base; |
252 nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew); | 255 nt_header = (PIMAGE_NT_HEADERS) ((char *) dos_header + dos_header->e_lfanew); |
253 | 256 |
254 nt_header->OptionalHeader.CheckSum = 0; | 257 nt_header->OptionalHeader.CheckSum = 0; |
255 // nt_header->FileHeader.TimeDateStamp = time (NULL); | 258 #if 0 |
256 // dos_header->e_cp = size / 512; | 259 nt_header->FileHeader.TimeDateStamp = time (NULL); |
257 // nt_header->OptionalHeader.SizeOfImage = size; | 260 dos_header->e_cp = size / 512; |
258 | 261 nt_header->OptionalHeader.SizeOfImage = size; |
259 pfnCheckSumMappedFile = (void *) GetProcAddress (hImagehelp, "CheckSumMappedFile"); | 262 #endif |
263 | |
264 pfnCheckSumMappedFile = | |
265 (pfnCheckSumMappedFile_t) GetProcAddress (hImagehelp, | |
266 "CheckSumMappedFile"); | |
260 if (pfnCheckSumMappedFile) | 267 if (pfnCheckSumMappedFile) |
261 { | 268 { |
262 // nt_header->FileHeader.TimeDateStamp = time (NULL); | 269 #if 0 |
270 nt_header->FileHeader.TimeDateStamp = time (NULL); | |
271 #endif | |
263 pfnCheckSumMappedFile (out_file.file_base, | 272 pfnCheckSumMappedFile (out_file.file_base, |
264 out_file.size, | 273 out_file.size, |
265 &headersum, | 274 &headersum, |
266 &checksum); | 275 &checksum); |
267 nt_header->OptionalHeader.CheckSum = checksum; | 276 nt_header->OptionalHeader.CheckSum = checksum; |
293 0, size, NULL); | 302 0, size, NULL); |
294 if (!file_mapping) | 303 if (!file_mapping) |
295 return FALSE; | 304 return FALSE; |
296 | 305 |
297 file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); | 306 file_base = MapViewOfFile (file_mapping, FILE_MAP_WRITE, 0, 0, size); |
298 if (file_base == 0) | 307 if (file_base == NULL) |
299 return FALSE; | 308 return FALSE; |
300 | 309 |
301 p_file->name = filename; | 310 p_file->name = filename; |
302 p_file->size = size; | 311 p_file->size = size; |
303 p_file->file = file; | 312 p_file->file = file; |
304 p_file->file_mapping = file_mapping; | 313 p_file->file_mapping = file_mapping; |
305 p_file->file_base = file_base; | 314 p_file->file_base = (char*) file_base; |
306 | 315 |
307 return TRUE; | 316 return TRUE; |
308 } | 317 } |
309 | 318 |
310 /* Routines to manipulate NT executable file sections. */ | 319 /* Routines to manipulate NT executable file sections. */ |
484 | 493 |
485 size = data_size; | 494 size = data_size; |
486 DUMP_MSG (("Dumping data section...\n")); | 495 DUMP_MSG (("Dumping data section...\n")); |
487 DUMP_MSG (("\t0x%08x Address in process.\n", data_va)); | 496 DUMP_MSG (("\t0x%08x Address in process.\n", data_va)); |
488 DUMP_MSG (("\t0x%08x Offset in output file.\n", | 497 DUMP_MSG (("\t0x%08x Offset in output file.\n", |
489 data_file - p_outfile->file_base)); | 498 (char*)data_file - p_outfile->file_base)); |
490 DUMP_MSG (("\t0x%08x Size in bytes.\n", size)); | 499 DUMP_MSG (("\t0x%08x Size in bytes.\n", size)); |
491 memcpy (data_file, data_va, size); | 500 memcpy (data_file, data_va, size); |
492 | 501 |
493 index = (DWORD) data_file + size - (DWORD) p_outfile->file_base; | 502 index = (DWORD) data_file + size - (DWORD) p_outfile->file_base; |
494 size = p_infile->size - index; | 503 size = p_infile->size - index; |