summaryrefslogtreecommitdiff
path: root/plugins/ropgadgets/helper_arm.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-11-28 18:30:12 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-11-28 18:30:12 (GMT)
commit4da58817622d6c4c35e4cd4e6a99111065a87f54 (patch)
tree4af154a7c68a4f9034700a945df692ccf1313650 /plugins/ropgadgets/helper_arm.c
parent43c13d32ebaec164879dfadcdf2e341fbce26887 (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.c87
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;