diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-04-04 13:31:33 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-04-04 13:31:33 (GMT) |
commit | 46e46c2894ea92502734c7bbd1cbcc6cb2e46d17 (patch) | |
tree | 9b338348d6bd78e71746bfb25fa8c864dfe44d1e /src/analysis/blocks | |
parent | d65fbe084a91d180d17767314f4e34b7456e8436 (diff) |
Updated the disassembling process order and defined ranks for basic routines.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@501 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/blocks')
-rw-r--r-- | src/analysis/blocks/flow.c | 42 | ||||
-rw-r--r-- | src/analysis/blocks/flow.h | 6 | ||||
-rw-r--r-- | src/analysis/blocks/virtual.c | 7 |
3 files changed, 5 insertions, 50 deletions
diff --git a/src/analysis/blocks/flow.c b/src/analysis/blocks/flow.c index 7777623..305dad0 100644 --- a/src/analysis/blocks/flow.c +++ b/src/analysis/blocks/flow.c @@ -266,47 +266,7 @@ unsigned int g_flow_block_get_rank(const GFlowBlock *block) void g_flow_block_set_rank(GFlowBlock *block, unsigned int rank) { - block->rank = MAX(block->rank, rank); - g_flow_block_set_next_rank(block, block->rank + 1); - -} - - -/****************************************************************************** -* * -* Paramètres : block = bloc d'instruction à consulter. * -* * -* Description : Fournit le rang minimal du bloc suivant pour l'exécution. * -* * -* Retour : Indice supérieur à zéro. * -* * -* Remarques : - * -* * -******************************************************************************/ - -unsigned int g_flow_block_get_next_rank(const GFlowBlock *block) -{ - return block->next_rank; - -} - - -/****************************************************************************** -* * -* Paramètres : block = bloc d'instruction à consulter. * -* rank = Indice supérieur à zéro à prendre en compte. * -* * -* Description : Définit le rang minimal du bloc suivant pour l'exécution. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_flow_block_set_next_rank(GFlowBlock *block, unsigned int rank) -{ - block->next_rank = MAX(block->next_rank, rank); + block->rank = rank; } diff --git a/src/analysis/blocks/flow.h b/src/analysis/blocks/flow.h index cc32834..cf8797b 100644 --- a/src/analysis/blocks/flow.h +++ b/src/analysis/blocks/flow.h @@ -76,12 +76,6 @@ unsigned int g_flow_block_get_rank(const GFlowBlock *); /* Définit le rang du bloc dans le flot d'exécution. */ void g_flow_block_set_rank(GFlowBlock *, unsigned int); -/* Fournit le rang minimal du bloc suivant pour l'exécution. */ -unsigned int g_flow_block_get_next_rank(const GFlowBlock *); - -/* Définit le rang minimal du bloc suivant pour l'exécution. */ -void g_flow_block_set_next_rank(GFlowBlock *, unsigned int); - /* Fournit la liste d'appartenance des instructions du bloc. */ GArchInstruction *g_flow_block_get_all_instructions_list(const GFlowBlock *); diff --git a/src/analysis/blocks/virtual.c b/src/analysis/blocks/virtual.c index 946445c..a3e1695 100644 --- a/src/analysis/blocks/virtual.c +++ b/src/analysis/blocks/virtual.c @@ -27,6 +27,7 @@ #include <malloc.h> +#include "flow.h" #include "../block-int.h" @@ -71,7 +72,7 @@ static void g_virtual_block_dispose(GVirtualBlock *); static void g_virtual_block_finalize(GVirtualBlock *); /* Recherche le bloc contenant une adresse donnée. */ -static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *, vmpa_t, bool); +static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *, const vmpa2t *, bool); /* Parcourt le bloc d'instructions dans un ordre donné. */ static bool g_virtual_block_visit(GVirtualBlock *, instr_block_visitor_cb, void *); @@ -225,7 +226,7 @@ GInstrBlock *g_virtual_block_new(void) * * ******************************************************************************/ -static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *block, vmpa_t addr, bool final) +static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *block, const vmpa2t *addr, bool final) { GInstrBlock *result; /* Resultat à retourner */ size_t i; /* Boucle de parcours */ @@ -240,7 +241,7 @@ static GInstrBlock *g_virtual_block_find_by_addr(const GVirtualBlock *block, vmp if (ret != NULL) { if (final) result = ret; - else result = block->children[i]; + else result = (G_IS_FLOW_BLOCK(ret) ? G_INSTR_BLOCK(block) : ret); } } |