summaryrefslogtreecommitdiff
path: root/src/analysis/disass/fetch.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-01-24 11:19:32 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-01-24 11:19:32 (GMT)
commit141d2f0fbb2ce3b4ddf85383c55b891fd59dc598 (patch)
tree085fa1a20d77f86825e1a6f4215b1ffd8fd961e8 /src/analysis/disass/fetch.c
parent3df9f6dc8548b0562312036abfbfcf9850a81041 (diff)
Introduced conditional calls in instruction definition rules.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@459 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/disass/fetch.c')
-rw-r--r--src/analysis/disass/fetch.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c
index 2e9eb81..ffc653a 100644
--- a/src/analysis/disass/fetch.c
+++ b/src/analysis/disass/fetch.c
@@ -58,6 +58,8 @@ static void follow_execution_flow(const GLoadedBinary *binary, GProcContext *ctx
vmpa2t addr; /* Conversion en pleine adresse*/
mem_area *area; /* Zone de désassemblage */
+ printf("-- follow 0x%08x\n", (unsigned int)virt);
+
g_proc_context_push_drop_point(ctx, virt);
while (g_proc_context_has_drop_points(ctx))
@@ -65,10 +67,20 @@ static void follow_execution_flow(const GLoadedBinary *binary, GProcContext *ctx
virt = g_proc_context_pop_drop_point(ctx);
init_vmpa(&addr, VMPA_NO_PHYSICAL, virt);
+
+
+ printf(" ++ point 0x%08x\n", (unsigned int)virt);
+
+
area = find_memory_area_by_addr(areas, count, &addr);
load_code_from_mem_area(area, areas, count, binary, ctx, &addr, info);
+
+
+ printf(" ++\n");
+
+
}
}
@@ -128,6 +140,9 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt
virt = g_binary_format_get_entry_point(format);
+ follow_execution_flow(binary, ctx, areas, count, info, 0x84c5);
+ follow_execution_flow(binary, ctx, areas, count, info, 0x8a65);
+
follow_execution_flow(binary, ctx, areas, count, info, virt);
/* Symboles exécutables présents et passés à travers les mailles */
@@ -147,6 +162,8 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt
}
+ printf(" ------------------------------------------- follow done\n");
+
done = get_current_progessive_status(info);
fini_progessive_status(info);