int
-open_input_file (file_data *p_file, char *filename)
-{
- HANDLE file;
- HANDLE file_mapping;
- void *file_base;
- unsigned long size, upper_size;
-
- file = CreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- if (file == INVALID_HANDLE_VALUE)
- return FALSE;
-
- size = GetFileSize (file, &upper_size);
- file_mapping = CreateFileMapping (file, NULL, PAGE_READONLY,
- 0, size, NULL);
- if (!file_mapping)
- return FALSE;
-
- file_base = MapViewOfFile (file_mapping, FILE_MAP_READ, 0, 0, size);
- if (file_base == 0)
- return FALSE;
-
- p_file->name = filename;
- p_file->size = size;
- p_file->file = file;
- p_file->file_mapping = file_mapping;
- p_file->file_base = file_base;
-
- return TRUE;
-}
-
-int
-open_output_file (file_data *p_file, char *filename, unsigned long size)
+open_output_file (file_data *p_file, CONST char *filename, unsigned long size)
{
HANDLE file;
HANDLE file_mapping;
return TRUE;
}
-/* Close the system structures associated with the given file. */
-void
-close_file_data (file_data *p_file)
-{
- UnmapViewOfFile (p_file->file_base);
- CloseHandle (p_file->file_mapping);
- CloseHandle (p_file->file);
-}
-
-
/* Routines to manipulate NT executable file sections. */
#ifndef DUMP_SEPARATE_SECTION
}
#endif
-/* Return pointer to section header for section containing the given
- relative virtual address. */
-IMAGE_SECTION_HEADER *
-rva_to_section (DWORD rva, IMAGE_NT_HEADERS * nt_header)
-{
- PIMAGE_SECTION_HEADER section;
- int i;
-
- section = IMAGE_FIRST_SECTION (nt_header);
-
- for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
- {
- if (rva >= section->VirtualAddress
- && rva < section->VirtualAddress + section->SizeOfRawData)
- return section;
- section++;
- }
- return NULL;
-}
-
-
/* Flip through the executable and cache the info necessary for dumping. */
static void
get_section_info (file_data *p_infile)
static void
dump_bss_and_heap (file_data *p_infile, file_data *p_outfile)
{
- unsigned char *heap_data, *bss_data;
+ unsigned char *heap_data;
unsigned long size, index;
DUMP_MSG (("Dumping heap onto end of executable...\n"));
memcpy ((PUCHAR) p_outfile->file_base + index, heap_data, size);
#ifndef DUMP_SEPARATE_SECTION
- printf ("Dumping bss onto end of executable...\n");
+ DUMP_MSG (("Dumping bss onto end of executable...\n"));
index += size;
size = bss_size;
- bss_data = bss_start;
- DUMP_MSG (("\t0x%08x BSS start in process.\n", bss_data));
+ DUMP_MSG (("\t0x%08x BSS start in process.\n", bss_start));
DUMP_MSG (("\t0x%08x BSS offset in executable.\n", index));
DUMP_MSG (("\t0x%08x BSS size in bytes.\n", size));
- memcpy ((char *) p_outfile->file_base + index, bss_data, size);
+ memcpy ((char *) p_outfile->file_base + index, bss_start, size);
#endif
}