diff options
Diffstat (limited to 'src/analysis/block-int.h')
-rw-r--r-- | src/analysis/block-int.h | 49 |
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 *); |