summaryrefslogtreecommitdiff
path: root/src/analysis/disass/rank.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-04-04 17:35:53 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-04-04 17:35:53 (GMT)
commitc9391d0a1d42a05c72fd1c909a00774561ac9f81 (patch)
treeac19dc8ff1b7ca2aadd3a3af804e72897738806f /src/analysis/disass/rank.c
parent46e46c2894ea92502734c7bbd1cbcc6cb2e46d17 (diff)
Detected loops in disassembled instructions once again.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@502 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/disass/rank.c')
-rw-r--r--src/analysis/disass/rank.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/analysis/disass/rank.c b/src/analysis/disass/rank.c
index 94494d5..758e15d 100644
--- a/src/analysis/disass/rank.c
+++ b/src/analysis/disass/rank.c
@@ -202,6 +202,69 @@ void rank_routines_blocks(GBinRoutine **routines, size_t count, GtkExtStatusBar
g_instr_block_visit(main_block, (instr_block_visitor_cb)rank_flow_block, main_block);
+
+
+ printf("===== BLOCK(S) xXXx ======\n");
+
+
+ bool visit_ranked_block(GInstrBlock *blk, BlockVisitOrder order, int *indent)
+ {
+ int i;
+
+ switch (order)
+ {
+ case BVO_IN:
+ case BVO_PENDING:
+
+ for (i = 0; i < *indent; i++)
+ printf(" ");
+
+ printf("%p '%s'", blk, G_OBJECT_TYPE_NAME(blk));
+
+ if (G_IS_FLOW_BLOCK(blk))
+ {
+ vmpa2t start;
+ vmpa2t end;
+
+ g_flow_block_get_boundary_addresses(G_FLOW_BLOCK(blk), &start, &end);
+
+ printf(" 0x%08x -> 0x%08x (rank = %u)",
+ (unsigned int)start.virtual,
+ (unsigned int)end.virtual,
+ g_flow_block_get_rank(G_FLOW_BLOCK(blk)));
+
+ }
+
+ printf("\n");
+
+ if (order == BVO_IN) (*indent)++;
+ break;
+
+ case BVO_OUT:
+ (*indent)--;
+ break;
+
+ }
+
+ return true;
+
+ }
+
+ g_instr_block_visit(main_block, (instr_block_visitor_cb)visit_ranked_block, (int []){ 0 });
+
+ printf("\n");
+
+
+
+
+
+
+
+
+
+
+
+
}
}