diff options
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"); + + + + + + + + + + + + } } |