* dumper.cc: New file. * dumper.h: New file. * module_info.cc: New file. * parse_pe.cc: New file.
		
			
				
	
	
		
			132 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* dumper.h
 | |
| 
 | |
|    Copyright 1999 Cygnus Solutions.
 | |
| 
 | |
|    Written by Egor Duda <deo@logos-m.ru>
 | |
| 
 | |
| This file is part of Cygwin.
 | |
| 
 | |
| This software is a copyrighted work licensed under the terms of the
 | |
| Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | |
| details. */
 | |
| 
 | |
| #ifndef _DUMPER_H_
 | |
| #define _DUMPER_H_
 | |
| 
 | |
| #include <windows.h>
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   LPBYTE base;
 | |
|   DWORD size;
 | |
| } process_mem_region;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   DWORD tid;
 | |
|   HANDLE hThread;
 | |
|   CONTEXT context;
 | |
| } process_thread;
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|   LPVOID base_address;
 | |
|   char* name;
 | |
| } process_module;
 | |
| 
 | |
| enum process_entity_type
 | |
| {
 | |
|   pr_ent_memory,
 | |
|   pr_ent_thread,
 | |
|   pr_ent_module
 | |
| };
 | |
| 
 | |
| typedef struct _process_entity
 | |
| {
 | |
|   process_entity_type type;
 | |
|   union
 | |
|     {
 | |
|       process_thread thread;
 | |
|       process_mem_region memory;
 | |
|       process_module module;
 | |
|     } u;
 | |
|   asection* section;
 | |
|   struct _process_entity* next;
 | |
| } process_entity;
 | |
| 
 | |
| class exclusion
 | |
| {
 | |
| public:
 | |
|   int last;
 | |
|   int size;
 | |
|   int step;
 | |
|   process_mem_region* region;
 | |
| 
 | |
|   exclusion ( int step ) { last = size = 0;
 | |
| 			   this->step = step;
 | |
| 			   region = NULL; }
 | |
|   ~exclusion () { free ( region ); }
 | |
|   int add ( LPBYTE mem_base, DWORD mem_size );
 | |
|   int sort_and_check ();
 | |
| };
 | |
| 
 | |
| #define PAGE_BUFFER_SIZE 4096
 | |
| 
 | |
| class dumper
 | |
| {
 | |
|   DWORD pid;
 | |
|   DWORD tid; /* thread id of active thread */
 | |
|   HANDLE hProcess;
 | |
|   process_entity* list;
 | |
|   process_entity* last;
 | |
|   exclusion* excl_list;
 | |
| 
 | |
|   char* file_name;
 | |
|   bfd* core_bfd;
 | |
| 
 | |
|   asection* status_section;
 | |
| 
 | |
|   int memory_num;
 | |
|   int module_num;
 | |
|   int thread_num;
 | |
| 
 | |
|   void close ();
 | |
|   void dumper_abort ();
 | |
| 
 | |
|   process_entity* add_process_entity_to_list ( process_entity_type type );
 | |
|   int add_thread ( DWORD tid, HANDLE hThread );
 | |
|   int add_mem_region ( LPBYTE base, DWORD size );
 | |
| 
 | |
|   /* break mem_region by excl_list and add add all subregions */
 | |
|   int split_add_mem_region ( LPBYTE base, DWORD size );
 | |
| 
 | |
|   int add_module ( LPVOID base_address );
 | |
| 
 | |
|   int collect_memory_sections ();
 | |
|   int dump_memory_region ( asection* to, process_mem_region* memory );
 | |
|   int dump_thread ( asection* to, process_thread* thread );
 | |
|   int dump_module ( asection* to, process_module* module );
 | |
| 
 | |
| public:
 | |
|   int sane ();
 | |
| 
 | |
|   int collect_process_information ();
 | |
| 
 | |
|   dumper ( DWORD pid, DWORD tid, const char* name );
 | |
|   ~dumper ();
 | |
| 
 | |
|   int init_core_dump ();
 | |
|   int prepare_core_dump ();
 | |
|   int write_core_dump ();
 | |
| };
 | |
| 
 | |
| extern int deb_printf ( const char* format, ... );
 | |
| 
 | |
| extern char* psapi_get_module_name ( HANDLE hProcess, DWORD BaseAddress );
 | |
| 
 | |
| extern int parse_pe ( const char* file_name, exclusion* excl_list );
 | |
| 
 | |
| extern BOOL verbose;
 | |
| 
 | |
| #endif
 |