diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-04-04 17:35:53 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-04-04 17:35:53 (GMT) |
commit | c9391d0a1d42a05c72fd1c909a00774561ac9f81 (patch) | |
tree | ac19dc8ff1b7ca2aadd3a3af804e72897738806f /src/analysis/disass/rank.c | |
parent | 46e46c2894ea92502734c7bbd1cbcc6cb2e46d17 (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.c | 63 |
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"); + + + + + + + + + + + + } } |