summaryrefslogtreecommitdiff
path: root/src/analysis/scan/patterns/backends/bitap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/patterns/backends/bitap.c')
-rw-r--r--src/analysis/scan/patterns/backends/bitap.c50
1 files changed, 24 insertions, 26 deletions
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);