summaryrefslogtreecommitdiff
path: root/src/analysis/block-int.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/block-int.h')
-rw-r--r--src/analysis/block-int.h49
1 files changed, 27 insertions, 22 deletions
diff --git a/src/analysis/block-int.h b/src/analysis/block-int.h
index fdf6549..b9b90f0 100644
--- a/src/analysis/block-int.h
+++ b/src/analysis/block-int.h
@@ -1,6 +1,6 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
- * block-int.h - prototypes pour la définition interne des blocs d'instructions
+ * block-int.h - prototypes pour la définition interne des blocs de code
*
* Copyright (C) 2012-2017 Cyrille Bagard
*
@@ -28,49 +28,54 @@
#include "block.h"
+#include "../common/array.h"
-/* Recherche le bloc contenant une adresse donnée. */
-typedef GInstrBlock * (* find_by_addr_fc) (const GInstrBlock *, const vmpa2t *, bool);
-/* Parcourt tous les blocs d'instructions dans un ordre donné. */
-typedef bool (* visit_all_blocks_fc) (GInstrBlock *, instr_block_visitor_cb, void *);
-/* Etablit la liste de tous les blocs présents. */
-typedef void (* list_all_blocks_fc) (const GInstrBlock *, GInstrBlock ***, size_t *);
+/* ----------------------------- BLOC DE CODE GENERIQUE ----------------------------- */
-/* Etablit la liste de tous les blocs terminaux. */
-typedef void (* list_leafs_blocks_fc) (const GInstrBlock *, GInstrBlock ***, size_t *);
+/* Détermine si un bloc de code débute à une adresse donnée. */
+typedef bool (* block_is_starting_fc) (const GCodeBlock *, const vmpa2t *);
-/* Fournit les différents accès aux registres. */
-//typedef const reg_access * (* list_regs_accesses_fc) (const GInstrBlock *, size_t *);
+/* Etablit les liens entre un bloc de code et ses voisins. */
+typedef void (* block_resolve_links_fc) (GCodeBlock *, const GBlockList *);
+/* Fournit la représentation graphique d'un bloc de code. */
+typedef GBufferView * (* block_build_view_fc) (const GCodeBlock *, segcnt_list *);
-/* Description d'un bloc d'instructions (instance) */
-struct _GInstrBlock
+/* Description d'un bloc de code (instance) */
+struct _GCodeBlock
{
GObject parent; /* A laisser en premier */
- GInstrBlock *links_block; /* Lieu des blocs attachés */
+ bitfield_t *domination; /* Blocs dominés de l'ensemble */
+
+ size_t index; /* Indice dans une liste */
+ size_t rank; /* Rang dans l'exécution */
+
+ flat_array_t *from; /* Origines des références */
+ flat_array_t *to; /* Instructions visées */
+
+ GBufferView *view; /* Représentation construite */
};
-/* Description d'un bloc d'instructions (classe) */
-struct _GInstrBlockClass
+/* Description d'un bloc de code (classe) */
+struct _GCodeBlockClass
{
GObjectClass parent; /* A laisser en premier */
- find_by_addr_fc find_by_addr; /* Recherche par adresse */
- visit_all_blocks_fc visit_blocks; /* Visite des différents blocs */
- list_all_blocks_fc list_blocks; /* Liste de tous les blocs */
- list_leafs_blocks_fc list_leafs; /* Liste des blocs terminaux */
- //list_regs_accesses_fc list_regs; /* Liste des accès registres */
+ block_is_starting_fc is_starting; /* Analyse d'adresse initiale */
+ block_resolve_links_fc link; /* Etablissement des liens */
+ block_build_view_fc build; /* Construction d'une vue */
};
-
+/* Détermine si un bloc de code débute à une adresse donnée. */
+bool g_code_block_is_starting_with(const GCodeBlock *, const vmpa2t *);