diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-07-07 06:32:43 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-07-07 06:32:43 (GMT) |
commit | 4c10dfa2a95cea6fc704d68066d0c284cfd79342 (patch) | |
tree | 5827bbc411459800747e21929daecdf99fde7dfd /src/analysis/scan/patterns | |
parent | 3f996be1e5858b54740bf92515795982a16b169a (diff) |
Rewrite core parts of the ROST API.
Diffstat (limited to 'src/analysis/scan/patterns')
-rw-r--r-- | src/analysis/scan/patterns/backend-int.h | 2 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backend.c | 5 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backend.h | 2 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backends/acism.c | 10 | ||||
-rw-r--r-- | src/analysis/scan/patterns/backends/bitap.c | 50 |
5 files changed, 35 insertions, 34 deletions
diff --git a/src/analysis/scan/patterns/backend-int.h b/src/analysis/scan/patterns/backend-int.h index 698ba5f..b2587df 100644 --- a/src/analysis/scan/patterns/backend-int.h +++ b/src/analysis/scan/patterns/backend-int.h @@ -39,7 +39,7 @@ typedef patid_t (* enroll_plain_into_backend_fc) (GEngineBackend *, GScanContext typedef void (* warm_up_backend_fc) (GEngineBackend *); /* Parcours un contenu binaire à la recherche de motifs. */ -typedef void (* run_backend_scan_fc) (const GEngineBackend *, GScanContext *, GBinContent *); +typedef void (* run_backend_scan_fc) (const GEngineBackend *, GScanContext *); /* Imprime quelques faits quant aux éléments mis en place. */ typedef void (* output_backend_stats_fc) (const GEngineBackend *); diff --git a/src/analysis/scan/patterns/backend.c b/src/analysis/scan/patterns/backend.c index 800d0aa..0ecc7fe 100644 --- a/src/analysis/scan/patterns/backend.c +++ b/src/analysis/scan/patterns/backend.c @@ -209,7 +209,6 @@ void g_engine_backend_warm_up(GEngineBackend *backend) * * * Paramètres : backend = moteur de recherche à manipuler. * * context = lieu d'enregistrement des résultats. * -* content = données binaires à analyser. * * * * Description : Parcours un contenu binaire à la recherche de motifs. * * * @@ -219,13 +218,13 @@ void g_engine_backend_warm_up(GEngineBackend *backend) * * ******************************************************************************/ -void g_engine_backend_run_scan(const GEngineBackend *backend, GScanContext *context, GBinContent *content) +void g_engine_backend_run_scan(const GEngineBackend *backend, GScanContext *context) { GEngineBackendClass *class; /* Classe à activer */ class = G_ENGINE_BACKEND_GET_CLASS(backend); - class->run_scan(backend, context, content); + class->run_scan(backend, context); } diff --git a/src/analysis/scan/patterns/backend.h b/src/analysis/scan/patterns/backend.h index 700366e..8f6b929 100644 --- a/src/analysis/scan/patterns/backend.h +++ b/src/analysis/scan/patterns/backend.h @@ -63,7 +63,7 @@ patid_t g_engine_backend_enroll_plain_pattern(GEngineBackend *, GScanContext *, void g_engine_backend_warm_up(GEngineBackend *); /* Parcours un contenu binaire à la recherche de motifs. */ -void g_engine_backend_run_scan(const GEngineBackend *, GScanContext *, GBinContent *); +void g_engine_backend_run_scan(const GEngineBackend *, GScanContext *); /* Imprime quelques faits quant aux éléments mis en place. */ void g_engine_backend_output_stats(const GEngineBackend *); diff --git a/src/analysis/scan/patterns/backends/acism.c b/src/analysis/scan/patterns/backends/acism.c index 12339f2..eef681a 100644 --- a/src/analysis/scan/patterns/backends/acism.c +++ b/src/analysis/scan/patterns/backends/acism.c @@ -96,7 +96,7 @@ static void g_acism_backend_build_interleave_array(GAcismBackend *); static void g_acism_backend_warm_up(GAcismBackend *); /* Parcours un contenu binaire à la recherche de motifs. */ -static void g_acism_backend_run_scan(const GAcismBackend *, GScanContext *, GBinContent *); +static void g_acism_backend_run_scan(const GAcismBackend *, GScanContext *); /* Affiche les caractéristques d'un noeud et de ses enfants. */ static void visit_and_output_node(const acism_trie_node_t *, unsigned int); @@ -1125,7 +1125,6 @@ static void g_acism_backend_warm_up(GAcismBackend *backend) * * * Paramètres : backend = moteur de recherche à manipuler. * * context = lieu d'enregistrement des résultats. * -* content = données binaires à analyser. * * * * Description : Parcours un contenu binaire à la recherche de motifs. * * * @@ -1135,8 +1134,9 @@ static void g_acism_backend_warm_up(GAcismBackend *backend) * * ******************************************************************************/ -static void g_acism_backend_run_scan(const GAcismBackend *backend, GScanContext *context, GBinContent *content) +static void g_acism_backend_run_scan(const GAcismBackend *backend, GScanContext *context) { + GBinContent *content; /* Contenu binaire manipulé */ phys_t dlen; /* Quantité de données */ vmpa2t pos; /* Point de départ ciblé */ const bin_t *data; /* Données à analyser */ @@ -1151,6 +1151,8 @@ static void g_acism_backend_run_scan(const GAcismBackend *backend, GScanContext acism_state_t *iter; /* Boucle de parcours #2 */ acism_state_t *test; /* Test de validité alternative*/ + content = g_scan_context_get_content(context); + dlen = g_binary_content_compute_size(content); g_binary_content_compute_start_pos(content, &pos); @@ -1238,6 +1240,8 @@ static void g_acism_backend_run_scan(const GAcismBackend *backend, GScanContext } + g_object_unref(G_OBJECT(content)); + } diff --git a/src/analysis/scan/patterns/backends/bitap.c b/src/analysis/scan/patterns/backends/bitap.c index bd80fb0..adf66d6 100644 --- a/src/analysis/scan/patterns/backends/bitap.c +++ b/src/analysis/scan/patterns/backends/bitap.c @@ -63,7 +63,7 @@ size_t g_bitap_backend_get_atom_max_size(const GBitapBackend *); static patid_t g_bitap_backend_enroll_plain_pattern(GBitapBackend *, GScanContext *, const uint8_t *, size_t); /* Parcours un contenu binaire à la recherche de motifs. */ -static void g_bitap_backend_run_scan(const GBitapBackend *, GScanContext *, GBinContent *); +static void g_bitap_backend_run_scan(const GBitapBackend *, GScanContext *); /* Imprime quelques faits quant aux éléments mis en place. */ static void g_bitap_backend_output_stats(const GBitapBackend *); @@ -80,7 +80,7 @@ static void extend_grouped_strings_avx2(grouped_strings_avx2_t ***, size_t *); static patid_t enroll_plain_pattern_avx2(GBitapBackend *, GScanContext *, const bin_t *, size_t); /* Parcours un contenu binaire à la recherche de motifs. */ -static void run_scan_avx2(const GBitapBackend *, GScanContext *, GBinContent *); +static void run_scan_avx2(const GBitapBackend *, GScanContext *, const bin_t *, phys_t); @@ -96,7 +96,7 @@ static void extend_grouped_strings_avx512(grouped_strings_avx512_t ***, size_t * static patid_t enroll_plain_pattern_avx512(GBitapBackend *, GScanContext *, const bin_t *, size_t); /* Parcours un contenu binaire à la recherche de motifs. */ -static void run_scan_avx512(const GBitapBackend *, GScanContext *, GBinContent *); +static void run_scan_avx512(const GBitapBackend *, GScanContext *, const bin_t *, phys_t); @@ -295,7 +295,6 @@ static patid_t g_bitap_backend_enroll_plain_pattern(GBitapBackend *backend, GSca * * * Paramètres : backend = moteur de recherche à manipuler. * * context = lieu d'enregistrement des résultats. * -* content = données binaires à analyser. * * * * Description : Parcours un contenu binaire à la recherche de motifs. * * * @@ -305,12 +304,16 @@ static patid_t g_bitap_backend_enroll_plain_pattern(GBitapBackend *backend, GSca * * ******************************************************************************/ -static void g_bitap_backend_run_scan(const GBitapBackend *backend, GScanContext *context, GBinContent *content) +static void g_bitap_backend_run_scan(const GBitapBackend *backend, GScanContext *context) { cpu_set_t old_mask; /* Cartographie des CPU #1 */ int ret; /* Bilan d'un appel */ unsigned int cpu; /* Processeur courant */ cpu_set_t new_mask; /* Cartographie des CPU #2 */ + GBinContent *content; /* Contenu binaire manipulé */ + phys_t dlen; /* Quantité de données */ + vmpa2t pos; /* Point de départ ciblé */ + const bin_t *data; /* Données à analyser */ ret = sched_getaffinity(0, sizeof(cpu_set_t), &old_mask); @@ -339,16 +342,24 @@ static void g_bitap_backend_run_scan(const GBitapBackend *backend, GScanContext goto exit; } + content = g_scan_context_get_content(context); + + dlen = g_binary_content_compute_size(content); + + g_binary_content_compute_start_pos(content, &pos); + data = g_binary_content_get_raw_access(content, &pos, dlen); + assert(data != NULL); if (0) - run_scan_avx2(backend, context, content); + run_scan_avx2(backend, context, data, dlen); else - run_scan_avx512(backend, context, content); + run_scan_avx512(backend, context, data, dlen); + g_object_unref(G_OBJECT(content)); exit: @@ -515,7 +526,8 @@ static patid_t enroll_plain_pattern_avx2(GBitapBackend *backend, GScanContext *c * * * Paramètres : backend = moteur de recherche à manipuler. * * context = lieu d'enregistrement des résultats. * -* content = données binaires à analyser. * +* data = données à analyser. * +* dlen = quantité de ces données. * * * * Description : Parcours un contenu binaire à la recherche de motifs. * * * @@ -525,12 +537,9 @@ static patid_t enroll_plain_pattern_avx2(GBitapBackend *backend, GScanContext *c * * ******************************************************************************/ -static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, GBinContent *content) +static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, const bin_t *data, phys_t dlen) { const group_manager_avx2_t *manager; /* Accès simplifié */ - phys_t dlen; /* Quantité de données */ - vmpa2t pos; /* Point de départ ciblé */ - const bin_t *data; /* Données à analyser */ register __m256i zero asm("ymm11"); /* Constante 0 sur 256 bits */ size_t k; /* Boucle de parcours #1 */ @@ -570,11 +579,6 @@ static void run_scan_avx2(const GBitapBackend *backend, GScanContext *context, G manager = &backend->manager_avx2; - dlen = g_binary_content_compute_size(content); - - g_binary_content_compute_start_pos(content, &pos); - data = g_binary_content_get_raw_access(content, &pos, dlen); - zero = _mm256_set1_epi16(0); asm volatile ("nop;nop;nop;nop;nop;nop;nop;nop;nop;"); @@ -1622,7 +1626,8 @@ static patid_t enroll_plain_pattern_avx512(GBitapBackend *backend, GScanContext * * * Paramètres : backend = moteur de recherche à manipuler. * * context = lieu d'enregistrement des résultats. * -* content = données binaires à analyser. * +* data = données à analyser. * +* dlen = quantité de ces données. * * * * Description : Parcours un contenu binaire à la recherche de motifs. * * * @@ -1632,12 +1637,9 @@ static patid_t enroll_plain_pattern_avx512(GBitapBackend *backend, GScanContext * * ******************************************************************************/ -static void run_scan_avx512(const GBitapBackend *backend, GScanContext *context, GBinContent *content) +static void run_scan_avx512(const GBitapBackend *backend, GScanContext *context, const bin_t *data, phys_t dlen) { const group_manager_avx512_t *manager; /* Accès simplifié */ - phys_t dlen; /* Quantité de données */ - vmpa2t pos; /* Point de départ ciblé */ - const bin_t *data; /* Données à analyser */ //register __m512i zero asm("zmm19"); /* Constante 0 sur 512 bits */ @@ -1674,10 +1676,6 @@ static void run_scan_avx512(const GBitapBackend *backend, GScanContext *context, manager = &backend->manager_avx512; - dlen = g_binary_content_compute_size(content); - - g_binary_content_compute_start_pos(content, &pos); - data = g_binary_content_get_raw_access(content, &pos, dlen); |