summaryrefslogtreecommitdiff
path: root/src/analysis/scan/rule.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/rule.c')
-rw-r--r--src/analysis/scan/rule.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/analysis/scan/rule.c b/src/analysis/scan/rule.c
index 14a6d38..05fc657 100644
--- a/src/analysis/scan/rule.c
+++ b/src/analysis/scan/rule.c
@@ -613,17 +613,34 @@ bool g_scan_rule_define_pattern_ids(GScanRule *rule, GEngineBackend *backend)
void g_scan_rule_check(GScanRule *rule, GEngineBackend *backend, GScanContext *context)
{
+ scan_node_check_params_t params; /* Rassemblement de paramètres */
+ vmpa2t start; /* Point de début du contenu */
+ vmpa2t end; /* Point de fin du contenu */
size_t i; /* Boucle de parcours */
GSearchPattern *pattern; /* Motif à intégrer */
- GScanBytesMatches *matches; /* Correspondances établies */
+ GScanMatches *matches; /* Correspondances établies */
+
+ /* Définition d'un contexte */
+
+ params.context = context;
+ params.content = g_scan_context_get_content(context);
+ params.allocator = g_umem_slice_new(sizeof(match_area_t));
+
+ g_binary_content_compute_start_pos(params.content, &start);
+ g_binary_content_compute_end_pos(params.content, &end);
+
+ params.content_start = start.physical;
+ params.content_end = end.physical;
+
+ /* Vérifications */
for (i = 0; i < rule->bytes_used; i++)
{
pattern = rule->bytes_locals[i];
- matches = g_scan_bytes_matches_new(pattern, context);
+ matches = g_scan_bytes_matches_new();
- g_bytes_token_check(G_BYTES_TOKEN(pattern), matches);
+ g_bytes_token_check(G_BYTES_TOKEN(pattern), G_SCAN_BYTES_MATCHES(matches), &params);
g_scan_context_register_full_matches(context, pattern, matches);
@@ -631,6 +648,9 @@ void g_scan_rule_check(GScanRule *rule, GEngineBackend *backend, GScanContext *c
}
+ g_object_unref(G_OBJECT(params.content));
+ //g_object_unref(G_OBJECT(params.allocator));
+
}