summaryrefslogtreecommitdiff
path: root/src/analysis/blocks
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-04-04 13:31:33 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-04-04 13:31:33 (GMT)
commit46e46c2894ea92502734c7bbd1cbcc6cb2e46d17 (patch)
tree9b338348d6bd78e71746bfb25fa8c864dfe44d1e /src/analysis/blocks
parentd65fbe084a91d180d17767314f4e34b7456e8436 (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.c42
-rw-r--r--src/analysis/blocks/flow.h6
-rw-r--r--src/analysis/blocks/virtual.c7
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);
}
}