diff options
Diffstat (limited to 'src/debug/debugger-int.h')
-rw-r--r-- | src/debug/debugger-int.h | 128 |
1 files changed, 118 insertions, 10 deletions
diff --git a/src/debug/debugger-int.h b/src/debug/debugger-int.h index 06aa5d3..58153b8 100644 --- a/src/debug/debugger-int.h +++ b/src/debug/debugger-int.h @@ -28,7 +28,15 @@ #include "debugger.h" -#include <gtk/gtk.h> +#include "break.h" + + + +//#include <gtk/gtk.h>//////////////////////////////////////////// + + + + @@ -39,16 +47,71 @@ typedef bool (* attach_debugger_fc) (GBinaryDebugger *); typedef bool (* basic_debugger_fc) (GBinaryDebugger *); /* Reprend une procédure de débogage. */ -typedef bool (* resume_debugger_fc) (GBinaryDebugger *); +//typedef bool (* resume_debugger_fc) (GBinaryDebugger *); /* Fournit les identifiants de tous les threads actifs. */ -typedef pid_t * (* dbg_list_all_threads_fc) (GBinaryDebugger *, char ***, size_t *); +//typedef pid_t * (* dbg_list_all_threads_fc) (GBinaryDebugger *, char ***, size_t *); /* Fournit la liste des frames courantes d'un thread donné. */ -typedef dbg_frame_t * (* dbg_get_frames_stack_fc) (GBinaryDebugger *, pid_t, size_t *); +//typedef dbg_frame_t * (* dbg_get_frames_stack_fc) (GBinaryDebugger *, pid_t, size_t *); /* Fournit la valeur des registres de l'architecture. */ -typedef register_value * (* get_register_values_fc) (GBinaryDebugger *, size_t *); +//typedef register_value * (* get_register_values_fc) (GBinaryDebugger *, size_t *); + + + + + + +/* Fournit les identifiants de tous les threads actifs. */ +typedef dbg_thread_desc * (* list_all_threads_fc) (GBinaryDebugger *, size_t *); + + + + +/* Lit une valeur quelconque à une adresse arbitraire. */ +typedef bool (* read_mem_any_fc) (GBinaryDebugger *, virt_t, size_t, ...); + +/* Ecrit une valeur quelconque à une adresse arbitraire. */ +typedef bool (* write_mem_any_fc) (GBinaryDebugger *, virt_t, size_t, ...); + +/* Liste l'ensemble des registres appartenant à un groupe. */ +typedef char ** (* get_reg_names_fc) (const GBinaryDebugger *, const char *, size_t *); + +/* Indique la taille associée à un registre donné. */ +typedef unsigned int (* get_reg_size_fc) (const GBinaryDebugger *, const char *); + +/* Lit une valeur quelconque à partir d'un registre. */ +typedef bool (* read_write_reg_any_fc) (GBinaryDebugger *, const char *, size_t, ...); + + + +/* Détermine le point d'exécution courant. */ +typedef bool (* get_current_pc_fc) (GBinaryDebugger *, virt_t *); + +/* Remonte la pile d'appels jusqu'au point courant. */ +typedef bool (* get_call_stack_fc) (GBinaryDebugger *, virt_t **, size_t *); + + + +/* Ajoute un point d'arrêt basique en mémoire. */ +typedef raw_breakpoint * (* enable_mem_bp_fc) (GBinaryDebugger *, virt_t); + +/* Retire un point d'arrêt basique en mémoire. */ +typedef bool (* disable_mem_bp_fc) (GBinaryDebugger *, raw_breakpoint *); + +/* Redémarre le processus de débogage lié à un serveur GDB. */ +typedef bool (* restart_debugger_fc) (GBinaryDebugger *); + +/* Remet en marche le débogueur courant. */ +typedef bool (* resume_debugger_fc) (GBinaryDebugger *); + + + + + + + /* Définition des fonctionnalités d'un débogueur (instance) */ @@ -62,13 +125,13 @@ struct _GBinaryDebugger basic_debugger_fc run; /* Démarre le débogueur */ basic_debugger_fc pause; /* Met en pause le débogueur */ - resume_debugger_fc resume; /* Relance le débogueur */ basic_debugger_fc kill; /* Tue le débogueur */ - dbg_list_all_threads_fc all_threads; /* Liste des threads actifs */ - dbg_get_frames_stack_fc frames_stack; /* Pile des frames courantes */ - get_register_values_fc get_reg_values; /* Obtient les valeurs de reg. */ + + raw_breakpoint **bpoints; /* Points d'arrêt posés */ + size_t bp_count; /* Quantité de ces points posés*/ + GRWLock bp_lock; /* Verrou d'accès à la liste */ }; @@ -78,13 +141,58 @@ struct _GBinaryDebuggerClass { GObjectClass parent; /* A laisser en premier */ + list_all_threads_fc all_threads; /* Liste des threads actifs */ + + read_mem_any_fc read_mem; /* Lecture d'une valeur XX bits*/ + read_mem_any_fc write_mem; /* Ecriture d'une valeur X bits*/ + get_reg_names_fc get_reg_names; /* Liste des registres */ + get_reg_size_fc get_reg_size; /* Taille d'un registre donné */ + read_write_reg_any_fc read_reg; /* Lecture de registre XX bits */ + read_write_reg_any_fc write_reg; /* Ecriture de registre XX bits*/ + + get_current_pc_fc get_current_pc; /* Obtention du point d'exéc. */ + get_call_stack_fc get_call_stack; /* Obtention de pile d'appels */ + + enable_mem_bp_fc enable_bp; /* Mise en place d'un arrêt */ + disable_mem_bp_fc disable_bp; /* Retrait d'un point d'arrêt */ + + restart_debugger_fc restart; /* Redémarre le débogueur */ + resume_debugger_fc resume; /* Relance le débogueur */ + /* Signaux */ - void (* debugger_stopped) (GBinaryDebugger *, uint64_t, uint64_t); + void (* signaled) (GBinaryDebugger *, int); + void (* exited) (GBinaryDebugger *, int, pid_t); + void (* terminated) (GBinaryDebugger *, int, pid_t); + + void (* stopped) (GBinaryDebugger *, virt_t); + + + + + /* Signaux */ void (* debugger_halted) (GBinaryDebugger *, int, vmpa_t, pid_t); + + + + + void (* mem_bp_handled) (GBinaryDebugger *, bool, virt_t); + }; + +/* ------------------------- MANIPULATION DE L'ETAT COURANT ------------------------- */ + + +/* Réagit à un arrêt du flot d'exécution. */ +void on_binary_debugger_stopped(GBinaryDebugger *, virt_t); + +/* Réagit à la fin de l'opération de débogage. */ +void on_binary_debugger_finished(GBinaryDebugger *, pid_t); + + + #endif /* _DEBUG_DEBUGGER_INT_H */ |