From c7fdb730eee696eba11182bdd456184d372959df Mon Sep 17 00:00:00 2001 From: Dima Turchenkov Date: Thu, 10 Dec 2015 17:46:10 +0300 Subject: [PATCH] bbs_alignment --- libr/anal/fcn.c | 2 +- libr/core/config.c | 8 ++++++++ libr/include/r_anal.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libr/anal/fcn.c b/libr/anal/fcn.c index 66e9002420..ffde0c40fc 100644 --- a/libr/anal/fcn.c +++ b/libr/anal/fcn.c @@ -786,7 +786,7 @@ R_API int r_anal_fcn(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut8 *buf, ut64 // set function size as length of continuous sequence of bbs r_list_sort (fcn->bbs, &cmpaddr); r_list_foreach (fcn->bbs, iter, bb) { - if (endaddr != bb->addr) break; + if (endaddr < bb->addr - anal->opt.bbs_alignment) break; endaddr += bb->size; } r_anal_fcn_resize(fcn, endaddr - fcn->addr); diff --git a/libr/core/config.c b/libr/core/config.c index 6d9bdd9f49..e701495a37 100644 --- a/libr/core/config.c +++ b/libr/core/config.c @@ -1290,6 +1290,13 @@ static int cb_anal_followbrokenfcnsrefs(void *user, void *data) { return true; } +static int cb_anal_bbs_alignment(void *user, void *data) { + RCore *core = (RCore*) user; + RConfigNode *node = (RConfigNode*) data; + core->anal->opt.bbs_alignment = node->i_value; + return true; +} + #define SLURP_LIMIT (10*1024*1024) R_API int r_core_config_init(RCore *core) { int i; @@ -1339,6 +1346,7 @@ R_API int r_core_config_init(RCore *core) { SETCB("anal.followbrokenfcnsrefs", "false", &cb_anal_followbrokenfcnsrefs, "Follow function references as well if function analysis was failed"); SETCB("anal.searchstringrefs", "false", &cb_anal_searchstringrefs, "Search string references in data references"); + SETCB("anal.bbs_alignment", "0x10", &cb_anal_bbs_alignment, "Possible space between basic blocks"); SETPREF("esil.prestep", "true", "Step before esil evaluation in `de` commands"); SETCB("esil.debug", "false", &cb_esildebug, "Show ESIL debug info"); diff --git a/libr/include/r_anal.h b/libr/include/r_anal.h index a01529f2a1..bc49be1716 100644 --- a/libr/include/r_anal.h +++ b/libr/include/r_anal.h @@ -572,6 +572,7 @@ typedef struct r_anal_options_t { int followdatarefs; int searchstringrefs; int followbrokenfcnsrefs; + int bbs_alignment; int afterjmp; // continue analysis after jmp eax or forward jmp // option int recont; // continue on recurse analysis mode int eobjmp; // option