diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-03-19 13:02:54 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-03-19 13:02:54 (GMT) |
commit | 94fd405bb0c2e6dfa43324b04a336ffb611c58ce (patch) | |
tree | f3170587b4006fa358665a6bbfa301731503d3b3 /src/debug/gdbrsp/helpers_arm64.c | |
parent | 499f00977cd7f50ce0c4cf24dd59b1e920e5b180 (diff) |
Provided initial features for debugging using GDB.
Diffstat (limited to 'src/debug/gdbrsp/helpers_arm64.c')
-rw-r--r-- | src/debug/gdbrsp/helpers_arm64.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/debug/gdbrsp/helpers_arm64.c b/src/debug/gdbrsp/helpers_arm64.c new file mode 100644 index 0000000..6807662 --- /dev/null +++ b/src/debug/gdbrsp/helpers_arm64.c @@ -0,0 +1,97 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * helpers_arm64.c - compléments utiles à GDB pour l'architecture AArch64 + * + * Copyright (C) 2016 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide 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. + * + * Chrysalide 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 <http://www.gnu.org/licenses/>. + */ + + +#include "helpers_arm64.h" + + +#include <malloc.h> + + +#include "gdb-int.h" + + + +/****************************************************************************** +* * +* Paramètres : debugger = débogueur à consulter. * +* callstack = pile d'appels reconstituée. [OUT] * +* size = taille de cette pile. [OUT] * +* * +* Description : Remonte la pile d'appels jusqu'au point courant. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool compute_call_stack_for_arm64(GGdbDebugger *debugger, virt_t **callstack, size_t *size) +{ + bool result; /* Bilan global à retourner */ + GBinaryDebugger *base; /* Version basique d'instance */ + uint64_t fp; /* Pointeur de cadre à suivre */ + uint64_t previous; /* Appel de fonction précédent */ + + base = G_BINARY_DEBUGGER(debugger); + + result = g_binary_debugger_read_register_u64(base, "x29", &fp); + + while (result && fp != 0) + { + result = g_binary_debugger_read_memory_u64(base, fp + sizeof(uint64_t), &previous); + if (!result) break; + + *callstack = (virt_t *)realloc(*callstack, ++(*size) * sizeof(virt_t)); + + (*callstack)[*size - 1] = previous; + + result = g_binary_debugger_read_memory_u64(base, fp, &fp); + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : debugger = débogueur à manipuler ici. * +* addr = emplacement du point mémoire à traiter. * +* cmd = commande en cours de constitution. [OUT] * +* * +* Description : Complète la commande manipulant des points d'arrêt. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool fill_memory_breakpoint_cmd_for_arm64(GGdbDebugger *debugger, virt_t addr, char *cmd) +{ + strcat(cmd, ",4"); + + return true; + +} |