/* Chrysalide - Outil d'analyse de fichiers binaires * debugger.h - prototypes pour la gestion des différents débogueurs * * Copyright (C) 2010-2012 Cyrille Bagard * * This file is part of Chrysalide. * * OpenIDA is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * OpenIDA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . */ #ifndef _DEBUG_DEBUGGER_H #define _DEBUG_DEBUGGER_H #include #include #include #include "../analysis/binary.h" #include "../arch/archbase.h" /* Liste de tous les débogueurs */ typedef enum _DebuggerType { DGT_JDWP, /* Utilisation du JDWP */ DGT_REMOTE_GDB, /* Utilisation de GDB */ DGT_PTRACE, /* Utilisation de ptrace() */ DGT_COUNT2/* FIXME */ } DebuggerType; /* Définition d'une frame */ typedef struct _dbg_frame_t { vmpa_t addr; /* Position dans le code */ } dbg_frame_t; /* Transmission des valeurs des registres */ typedef struct _register_value { const char *name; /* Nom à ne pas libérer */ uint64_t value; /* Valeur (taille maximale) */ } register_value; #define G_TYPE_BINARY_DEBUGGER g_binary_debugger_get_type() #define G_BINARY_DEBUGGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_binary_debugger_get_type(), GBinaryDebugger)) #define G_IS_BINARY_DEBUGGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_binary_debugger_get_type())) #define G_BINARY_DEBUGGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_BINARY_DEBUGGER, GGBinaryDebuggerClass)) #define G_IS_BINARY_DEBUGGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_BINARY_DEBUGGER)) #define G_BINARY_DEBUGGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_BINARY_DEBUGGER, GGBinaryDebuggerClass)) /* Définition des fonctionnalités d'un débogueur (instance) */ typedef struct _GBinaryDebugger GBinaryDebugger; /* Définition des fonctionnalités d'un débogueur (classe) */ typedef struct _GBinaryDebuggerClass GBinaryDebuggerClass; /* Indique le type définit par la GLib pour le débogueur ptrace(). */ GType g_binary_debugger_get_type(void); /* Crée un nouveau débogueur. */ GBinaryDebugger *g_new_binary_debugger(DebuggerType, GLoadedBinary *); /* Démarre une procédure de débogage. */ bool g_binary_debugger_attach(GBinaryDebugger *); /* Démarre une procédure de débogage. */ void g_binary_debugger_run(GBinaryDebugger *); /* Reprend une procédure de débogage. */ void g_binary_debugger_resume(GBinaryDebugger *); /* Tue une procédure de débogage. */ void g_binary_debugger_kill(GBinaryDebugger *); /* Fournit les identifiants de tous les threads actifs. */ pid_t *g_binary_debugger_list_all_threads(GBinaryDebugger *, char ***, size_t *); /* Fournit la liste des frames courantes d'un thread donné. */ dbg_frame_t *g_binary_debugger_get_frames_stack(GBinaryDebugger *, pid_t, size_t *); /* Fournit la valeur des registres de l'architecture. */ register_value *g_binary_debugger_get_registers(GBinaryDebugger *, size_t *); #endif /* _DEBUG_DEBUGGER_H */