diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-05-28 14:39:56 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-05-28 14:42:41 (GMT) |
commit | 3154db88ce14aa681cc553a8910edba1e69d8c2b (patch) | |
tree | c54fa0190da66831c19c83ae57dba117e56387e7 /src/analysis/disass/dragon.c | |
parent | ed70a0bacfdca738ba29d50e9f1b02290f28b9b8 (diff) |
Built the basic blocks list simply at loading.
Diffstat (limited to 'src/analysis/disass/dragon.c')
-rw-r--r-- | src/analysis/disass/dragon.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/analysis/disass/dragon.c b/src/analysis/disass/dragon.c index 75b8bb7..98b1cd6 100644 --- a/src/analysis/disass/dragon.c +++ b/src/analysis/disass/dragon.c @@ -735,3 +735,47 @@ dragon_node *find_knight_node_for_instruction(const dragon_knight *knight, bool return result; } + + +/****************************************************************************** +* * +* Paramètres : knight = rassemblement des complexités de code. * +* * +* Description : Traduit une complexité de noeuds en liste de blocs basiques. * +* * +* Retour : Liste de blocs basiques créés. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GBlockList *translate_dragon_knight(const dragon_knight *knight) +{ + GBlockList *result; /* Liste à retourner */ + dragon_node *nodes; /* Liste des noeuds détectés */ + size_t count; /* Taille de cette liste */ + size_t i; /* Boucle de parcours */ + dragon_node *node; /* Noeud à traiter */ + GArchInstruction *first; /* Première instruction */ + GArchInstruction *last; /* Dernière instruction */ + GBasicBlock *block; /* Nouveau bloc basique */ + + get_dragon_knight_content(knight, &nodes, &count); + + result = g_block_list_new(count); + + for (i = 0; i < count; i++) + { + node = get_dragon_node(nodes, i); + + get_dragon_node_bounding_instructions(node, &first, &last); + + block = g_basic_block_new(first, last); + + g_block_list_add_block(result, block, i); + + } + + return result; + +} |