diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-11-28 18:30:12 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-11-28 18:30:12 (GMT) |
commit | 4da58817622d6c4c35e4cd4e6a99111065a87f54 (patch) | |
tree | 4af154a7c68a4f9034700a945df692ccf1313650 /plugins/ropgadgets/helper_arm.c | |
parent | 43c13d32ebaec164879dfadcdf2e341fbce26887 (diff) |
Adapted ROP finding to architectures in a better way.
Diffstat (limited to 'plugins/ropgadgets/helper_arm.c')
-rw-r--r-- | plugins/ropgadgets/helper_arm.c | 87 |
1 files changed, 69 insertions, 18 deletions
diff --git a/plugins/ropgadgets/helper_arm.c b/plugins/ropgadgets/helper_arm.c index 2361f06..ae6edf3 100644 --- a/plugins/ropgadgets/helper_arm.c +++ b/plugins/ropgadgets/helper_arm.c @@ -24,6 +24,7 @@ #include "helper_arm.h" +#include <assert.h> #include <malloc.h> @@ -33,43 +34,93 @@ /****************************************************************************** * * -* Paramètres : proc = processeur lié à l'architecture visée. * -* names = noms attribués aux différents contextes. * -* count = nombre de gadgets trouvés. [OUT] * +* Paramètres : names = noms attribués aux différents contextes. [OUT] * * * * Description : Etablit une liste des contextes utiles à la recherche. * * * -* Retour : Liste de contextes mis en place. * +* Retour : Nombre de contextes gérés pour cette architecture. * * * -* Remarques : Toues les tableaux créés sont à libérer après usage. * +* Remarques : Tous les tableaux créés sont à libérer après usage. * * * ******************************************************************************/ -GProcContext **get_rop_contexts_for_arm(const GArchProcessor *proc, char ***names, size_t *count) +size_t list_rop_contexts_for_arm(char ***names) { - GProcContext **result; /* Contextes à retourner */ + size_t result; /* Quantité à renvoyer */ - result = (GProcContext **)calloc(2, sizeof(GProcContext *)); + result = 2; - (*names) = (char **)calloc(2, sizeof(char *)); + (*names) = malloc(result * sizeof(char *)); - *count = 2; + (*names)[0] = "Thumb"; + (*names)[1] = "ARM"; - /* Thumb */ + return result; - result[0] = g_arch_processor_get_context(proc); +} - g_armv7_context_define_encoding(G_ARMV7_CONTEXT(result[0]), 0, AV7IS_THUMB); - (*names)[0] = "Thumb"; +/****************************************************************************** +* * +* Paramètres : proc = processeur lié à l'architecture visée. * +* index = indice du type de contexte désiré. * +* * +* Description : Etablit un contexte utile et adapté à une recherche. * +* * +* Retour : Contexte mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ - /* ARMM */ +GProcContext *get_rop_contexts_for_arm(const GArchProcessor *proc, size_t index) +{ + GProcContext *result; /* Contexte à retourner */ - result[1] = g_arch_processor_get_context(proc); + result = g_arch_processor_get_context(proc); - g_armv7_context_define_encoding(G_ARMV7_CONTEXT(result[1]), 0, AV7IS_ARM); + switch (index) + { + /* Thumb */ + case 0: + g_armv7_context_define_encoding(G_ARMV7_CONTEXT(result), 0, AV7IS_THUMB); + break; - (*names)[1] = "ARM"; + /* ARM */ + case 1: + g_armv7_context_define_encoding(G_ARMV7_CONTEXT(result), 0, AV7IS_ARM); + break; + + default: + assert(false); + break; + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : count = nombre d'éléments du tableau retourné. [OUT] * +* * +* Description : Définit les tailles possibles d'une instruction recherchée. * +* * +* Retour : Liste de tailles plausibles. * +* * +* Remarques : - * +* * +******************************************************************************/ + +const phys_t *setup_instruction_sizes_for_arm(size_t *count) +{ + const phys_t *result; /* Liste de taille à renvoyer */ + + result = (phys_t []){ 2, 4 }; + + *count = 2; return result; |