summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-10-13 23:30:30 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-10-13 23:30:30 (GMT)
commit18beadb4192144b00c06769645befb17ae1ce98e (patch)
tree9d29be95f3343bf8126ca99c42907242ceb57714 /src/analysis
parent7800159c1dd6538f0ee9d026cf3f121a488dd647 (diff)
Kept all information about real addresses for routine symbols (ARM vs Thumb).
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@593 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/disass/fetch.c40
1 files changed, 4 insertions, 36 deletions
diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c
index 9ebe231..67a6f3b 100644
--- a/src/analysis/disass/fetch.c
+++ b/src/analysis/disass/fetch.c
@@ -35,7 +35,7 @@
/* Suit un flot d'exécution pour désassembler du code. */
-static void follow_execution_flow(const GLoadedBinary *, GProcContext *, mem_area **, size_t *, status_blob_info *, virt_t);
+static void follow_execution_flow(const GLoadedBinary *, GProcContext *, mem_area **, size_t *, status_blob_info *);
/* S'assure que l'ensemble des aires est entièrement décodé. */
static void ensure_all_mem_areas_are_filled(mem_area **, size_t *, const GLoadedBinary *, GProcContext *, status_blob_info *);
@@ -50,7 +50,6 @@ static void ensure_all_mem_areas_are_filled(mem_area **, size_t *, const GLoaded
* areas = liste de zones contenant des données à traiter. *
* count = nombre de ces aires à disposition. *
* info = informations liées à l'affichage de la progression. *
-* virt = adresse d'un point de départ d'un traitement. *
* *
* Description : Suit un flot d'exécution pour désassembler du code. *
* *
@@ -60,17 +59,13 @@ static void ensure_all_mem_areas_are_filled(mem_area **, size_t *, const GLoaded
* *
******************************************************************************/
-static void follow_execution_flow(const GLoadedBinary *binary, GProcContext *ctx, mem_area **areas, size_t *count, status_blob_info *info, virt_t virt)
+static void follow_execution_flow(const GLoadedBinary *binary, GProcContext *ctx, mem_area **areas, size_t *count, status_blob_info *info)
{
+ virt_t virt; /* Adresse de départ dépilée */
vmpa2t addr; /* Conversion en pleine adresse*/
GExeFormat *format; /* Format du fichier binaire */
size_t index; /* Zone trouvée à traiter */
- printf("-- follow 0x%08x\n", (unsigned int)virt);
-
- if (virt == VMPA_NO_VIRTUAL)
- g_proc_context_push_drop_point(ctx, virt);
-
while (g_proc_context_has_drop_points(ctx))
{
virt = g_proc_context_pop_drop_point(ctx);
@@ -153,12 +148,6 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt
mem_area *areas; /* Zone de productions */
size_t count; /* Nombre de ces zones */
status_blob_info *info; /* Informations de progression */
- virt_t virt; /* Point d'accroche virtuelle */
- GBinSymbol **symbols; /* Symboles à représenter */
- size_t sym_count; /* Qté de symboles présents */
- size_t i; /* Boucle de parcours */
- const mrange_t *range; /* Couverture d'un symbole */
- const vmpa2t *addr; /* Point de départ du symbole */
double done; /* Portion de travail accompli */
format = G_BIN_FORMAT(g_loaded_binary_get_format(binary));
@@ -182,28 +171,7 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt
_("Disassembling following the execution flow..."),
0, length);
- /* Insertion des points de départ */
-
- follow_execution_flow(binary, ctx, &areas, &count, info, VMPA_NO_VIRTUAL);
-
- /* Symboles exécutables présents et passés à travers les mailles */
-
- symbols = g_binary_format_get_symbols(format, &sym_count);
-
- for (i = 0; i < sym_count; i++)
- {
- if (g_binary_symbol_get_target_type(symbols[i]) != STP_FUNCTION)
- continue;
-
- range = g_binary_symbol_get_range(symbols[i]);
- addr = get_mrange_addr(range);
- virt = get_virt_addr(addr);
-
- follow_execution_flow(binary, ctx, &areas, &count, info, virt);
-
- }
-
- printf(" ------------------------------------------- follow done\n");
+ follow_execution_flow(binary, ctx, &areas, &count, info);
done = get_current_progessive_status(info);