/* ************************************************************************ */
/* ** utils.h ** */
/* ** Nifty little routines used all over the debugger nub ** */
/* ** ------------------------------------------------------------------ ** */
/* ** Author: Paul Howard Copyright: (c) 1996 Functional Objects, Inc. ** */
/* ** All Rights Reserved ** */
/* ************************************************************************ */
void register_index_from_codeview_enumerate
(WORD cvr, NUB_INDEX *hireg, NUB_INDEX *loreg);
void dispose_thread_stack_trace (LPDBGPROCESS process, LPDBGTHREAD thread);
NUBTHREAD thread_descriptor_from_index
(NUB nub,
NUB_INDEX thread);
NUBTHREAD thread_descriptor_from_thread_handle
(NUB nub,
NUBHANDLE handle);
NUBTHREAD thread_descriptor_from_thread_ID
(NUB nub,
DWORD id);
NUBHANDLE thread_handle_from_thread_descriptor
(NUB nub,
NUBTHREAD thread);
LPDBGLIBRARY library_descriptor_from_base_address
(LPDBGPROCESS process,
DWORD base);
LPDBGLIBRARY library_descriptor_from_address
(LPDBGPROCESS process,
DWORD address);
// Given an address in the process space of the application, this function
// attempts to find which DLL this address corresponds to. Note: debug
// information must currently be mapped for this function to work properly,
// but a better implementation may be possible.
LPDBGLIBRARY library_descriptor_from_index
(LPDBGPROCESS process,
int index);
// Returns the library descriptor for the given library index.
NUB_INDEX library_index_from_descriptor
(LPDBGPROCESS process,
LPDBGLIBRARY desc);
// Opposite mapping to the above.
NUBINT set_application_state
(LPDBGPROCESS process,
int state);
int get_application_state
(LPDBGPROCESS process);
void nub_error
(int code);
void add_thread_descriptor
(LPDBGPROCESS process,
HANDLE thread_handle,
DWORD thread_id,
LPTHREAD_START_ROUTINE start_routine,
LPVOID tls);
void add_library_descriptor
(LPDBGPROCESS process,
LOAD_DLL_DEBUG_INFO info);
void housekeep_for_stop_reason
(LPDBGPROCESS process,
LPDEBUG_EVENT event);
int lift_breakpoint
(LPDBGPROCESS process,
LPDEBUG_POINT breakpoint);
// Performs the work of writing the original bytes back into the process
// and deleting the breakpoint instruction.
int drop_breakpoint
(LPDBGPROCESS process,
LPDEBUG_POINT breakpoint);
// Performs the work of actually writing in the breakpoint instruction
// and pulling out the original bytes.
int handle_breakpoint_hit
(LPDBGPROCESS process,
LPDBGTHREAD thread,
TARGET_ADDRESS address);
// The nub callback for all encountered breakpoints. This function does
// nothing if the encountered breakpoint is not a breakpoint that was
// set by the nub in the first place.
void recover_from_breakpoint
(LPDBGPROCESS process, LPDBGTHREAD thread, BOOL resume);
// Assuming that the thread performed a single instruction after stopping
// at a breakpoint, this re-writes the breakpoint.
void suspend_all
(LPDBGPROCESS process);
// Suspends all threads in the process.
void suspend_all_except
(LPDBGPROCESS process,
LPDBGTHREAD thread);
// Suspends all threads in the process except for the one given as a
// parameter.
void resume_all_except
(LPDBGPROCESS process,
LPDBGTHREAD thread);
// Resumes all threads in the process except for the one given as a
// parameter.
void resume_all
(LPDBGPROCESS process);
// resumes all threads in the process.
void apply_appropriate_continuation_to_thread
(LPDBGPROCESS process,
LPDBGTHREAD thread,
int handling);
void wait_for_stop_reason_internal
(LPDBGPROCESS process, BOOL timeout, int timeout_value,
NUBINT *code, int mode);
void initialize_get_os_thread_cpu_time(void);
void initialize_get_os_process_page_fault_count(void);
// Address of the function to be called for getting a thread's cpu time.
extern int (*get_os_thread_cpu_time)(LPDBGPROCESS, LPDBGTHREAD);
// A counter used to estimate CPU times for threads
extern int os_time_estimate_counter;
// A function to combine strings. Given an array of n nul-terminated
// strings, dynamically allocate a single string that contains the
// concatenation of the array of strings (in order), separated by the
// character c.
char *construct_separated_string_list
(char **strings, int n, char c);
// A function to override the extension on a filename with a supplied
// extension. The filename can contain any amount of pathname information.
void override_file_extension
(char *original, char *new_extension, char *output, char *old_ext);
// This does the same thing for the path. It also records the path that
// was swapped out.
void override_file_path
(char *original, char *new_path, char *output, char *old_path);
void extend_path_in_place
(char *path, char *extension);
// The function called when debug information is needed for a DLL. This
// function will load whatever debug formats are available.
void ensure_debug_information_for_library
(LPDBGPROCESS process, LPDBGLIBRARY module);
syntax highlighted by Code2HTML, v. 0.9.1