summaryrefslogtreecommitdiff
path: root/src/analysis/scan/patterns
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2023-07-07 06:32:43 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2023-07-07 06:32:43 (GMT)
commit4c10dfa2a95cea6fc704d68066d0c284cfd79342 (patch)
tree5827bbc411459800747e21929daecdf99fde7dfd /src/analysis/scan/patterns
parent3f996be1e5858b54740bf92515795982a16b169a (diff)
Rewrite core parts of the ROST API.
Diffstat (limited to 'src/analysis/scan/patterns')
-rw-r--r--src/analysis/scan/patterns/backend-int.h2
-rw-r--r--src/analysis/scan/patterns/backend.c5
-rw-r--r--src/analysis/scan/patterns/backend.h2
-rw-r--r--src/analysis/scan/patterns/backends/acism.c10
-rw-r--r--src/analysis/scan/patterns/backends/bitap.c50
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);