summaryrefslogtreecommitdiff
path: root/src/analysis/scan/patterns/modifiers/xor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/patterns/modifiers/xor.c')
-rw-r--r--src/analysis/scan/patterns/modifiers/xor.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/analysis/scan/patterns/modifiers/xor.c b/src/analysis/scan/patterns/modifiers/xor.c
index 53d75a5..d932c82 100644
--- a/src/analysis/scan/patterns/modifiers/xor.c
+++ b/src/analysis/scan/patterns/modifiers/xor.c
@@ -27,6 +27,7 @@
#include <assert.h>
#include <malloc.h>
#include <stdint.h>
+#include <stdio.h>
#include <string.h>
@@ -66,6 +67,9 @@ static bool g_scan_xor_modifier_can_handle_arg(const GScanXorModifier *, const m
/* Transforme une séquence d'octets pour motif de recherche. */
static bool g_scan_xor_modifier_transform_with_arg(const GScanXorModifier *, const sized_binary_t *, size_t, const modifier_arg_t *, sized_binary_t **, size_t *);
+/* Retrouve l'origine d'une correspondance à partir d'un indice. */
+static char *g_scan_xor_modifier_get_path(const GScanXorModifier *, size_t *);
+
/* ---------------------------------------------------------------------------------- */
@@ -106,6 +110,7 @@ static void g_scan_xor_modifier_class_init(GScanXorModifierClass *klass)
modifier->transform = (transform_scan_token_fc)g_scan_xor_modifier_transform;
modifier->can_handle = (can_token_modifier_handle_arg)g_scan_xor_modifier_can_handle_arg;
modifier->transform_with = (transform_scan_token_with_fc)g_scan_xor_modifier_transform_with_arg;
+ modifier->get_path = (get_modifier_path)g_scan_xor_modifier_get_path;
}
@@ -393,3 +398,41 @@ static bool g_scan_xor_modifier_transform_with_arg(const GScanXorModifier *modif
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : modifier = modificateur à consulter. *
+* index = indice de la combinaison ciblée. [OUT] *
+* *
+* Description : Retrouve l'origine d'une correspondance à partir d'un indice.*
+* *
+* Retour : Version humainement lisible de la combinaison. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *g_scan_xor_modifier_get_path(const GScanXorModifier *modifier, size_t *index)
+{
+ char *result; /* Combinaison à retourner */
+ int ret; /* Bilan intermédiaire */
+
+ if (*index > 255)
+ {
+ result = NULL;
+ (*index) -= 256;
+ }
+
+ else
+ {
+ ret = asprintf(&result, "xor(0x%02hhx)", (unsigned char)*index);
+
+ if (ret == -1)
+ result = strdup("xor(0x?)");
+
+ }
+
+ return result;
+
+}