Skip to content

Commit

Permalink
Rename try_walkthrough_jmptbl -> r_anal_jmptbl_walk ##refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
jukuisma authored Jan 21, 2025
1 parent 134c90c commit a14cb18
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 16 deletions.
22 changes: 11 additions & 11 deletions libr/anal/fcn.c
Original file line number Diff line number Diff line change
Expand Up @@ -1103,7 +1103,7 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
// TODO: -1-
if (ready) {
ret = casetbl_addr == op->ptr
? try_walkthrough_jmptbl (anal, fcn, bb, depth, addr, case_shift, jmptbl_addr, op->ptr, 4, table_size, default_case, 4)
? r_anal_jmptbl_walk (anal, fcn, bb, depth, addr, case_shift, jmptbl_addr, op->ptr, 4, table_size, default_case, 4)
: try_walkthrough_casetbl (anal, fcn, bb, depth, addr, case_shift, jmptbl_addr, casetbl_addr, op->ptr, 4, table_size, default_case, 4);
if (ret) {
anal->lea_jmptbl_ip = addr;
Expand Down Expand Up @@ -1333,7 +1333,7 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
if (anal->cmpval != UT64_MAX && default_case != UT64_MAX && (op->reg || op->ireg)) {
// TODO -1
if (op->ireg) {
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op->addr, 0, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth, op->addr, 0, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
} else { // op->reg
ret = walkthrough_arm_jmptbl_style (anal, fcn, bb, depth, op->addr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
}
Expand Down Expand Up @@ -1427,12 +1427,12 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
tablesize *= 4;
ut64 tblloc = jmptbl_ptr_addr;
int sz = 4;
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op->addr, 0,
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth, op->addr, 0,
tblloc, jmptbl_ptr_addr, sz, tablesize, default_case, ret);
} else if (is_v850 && anal->opt.jmptbl) {
int ptsz = (anal->cmpval && anal->cmpval != UT64_MAX)? anal->cmpval + 1: 4;
if ((int)anal->cmpval > 0) {
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op->addr,
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth, op->addr,
0, op->addr + 2, op->addr + 2, 2, ptsz, 0, ret);
}
gotoBeach (R_ANAL_RET_END);
Expand Down Expand Up @@ -1474,14 +1474,14 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
}
r_anal_op_free (prev_op);
if (!case_table) {
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth, op->addr, case_shift, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth, op->addr, case_shift, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
}
}
} else if (op->ptr != UT64_MAX && op->reg) { // direct jump
ut64 table_size, default_case;
st64 case_shift = 0;
if (try_get_jmptbl_info (anal, fcn, op->addr, bb, &table_size, &default_case, &case_shift)) {
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth - 1, op->addr, case_shift, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth - 1, op->addr, case_shift, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
}
} else if (movdisp != UT64_MAX) {
st64 case_shift = 0;
Expand All @@ -1506,15 +1506,15 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
table_size = anal->cmpval + 1;
default_case = -1;
}
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth - 1, op->addr, case_shift, jmptbl_base + movdisp, jmptbl_base, movscale, table_size, default_case, ret);
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth - 1, op->addr, case_shift, jmptbl_base + movdisp, jmptbl_base, movscale, table_size, default_case, ret);
anal->cmpval = UT64_MAX;
#if 0
} else if (movdisp != UT64_MAX) {
ut64 table_size, default_case;
st64 case_shift;
if (try_get_jmptbl_info (anal, fcn, op->addr, bb, &table_size, &default_case, &case_shift)) {
op->ptr = movdisp;
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth - 1, op->addr, case_shift, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth - 1, op->addr, case_shift, op->ptr, op->ptr, anal->config->bits >> 3, table_size, default_case, ret);
}
movdisp = UT64_MAX;
#endif
Expand Down Expand Up @@ -1560,7 +1560,7 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
count++;
}
// table_addr = 0x100004114;
ret = try_walkthrough_jmptbl (anal,
ret = r_anal_jmptbl_walk (anal,
fcn, bb, depth - 1,
op->addr - 12, 0,
table_addr,
Expand All @@ -1577,7 +1577,7 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
} else {
table_size += anal->cmpval;
}
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth - 1, op->addr, 0, op->addr + op->size,
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth - 1, op->addr, 0, op->addr + op->size,
op->addr + 4, 1, table_size, UT64_MAX, ret);
// skip inlined jumptable
idx += table_size;
Expand All @@ -1589,7 +1589,7 @@ static int fcn_recurse(RAnal *anal, RAnalFunction *fcn, ut64 addr, ut64 len, int
} else {
tablesize += anal->cmpval;
}
ret = try_walkthrough_jmptbl (anal, fcn, bb, depth - 1, op->addr, 0, op->addr + op->size,
ret = r_anal_jmptbl_walk (anal, fcn, bb, depth - 1, op->addr, 0, op->addr + op->size,
op->addr + 4, 2, tablesize, UT64_MAX, ret);
// skip inlined jumptable
idx += (tablesize * 2);
Expand Down
5 changes: 2 additions & 3 deletions libr/anal/jmptbl.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ static void apply_switch(RAnal *anal, ut64 switch_addr, ut64 jmptbl_addr, ut64 c
// analyze a jmptablle inside a function // maybe rename to r_anal_function_jmptbl() ?
R_API bool r_anal_jmptbl(RAnal *anal, RAnalFunction *fcn, RAnalBlock *block, ut64 jmpaddr, ut64 table, ut64 tablesize, ut64 default_addr) {
const int depth = 50;
return try_walkthrough_jmptbl (anal, fcn, block, depth, jmpaddr, 0, table, table, tablesize, tablesize, default_addr, false);
return r_anal_jmptbl_walk (anal, fcn, block, depth, jmpaddr, 0, table, table, tablesize, tablesize, default_addr, false);
}

static inline void analyze_new_case(RAnal *anal, RAnalFunction *fcn, RAnalBlock *block, ut64 ip, ut64 jmpptr, int depth) {
Expand Down Expand Up @@ -166,8 +166,7 @@ R_API bool try_walkthrough_casetbl(RAnal *anal, RAnalFunction *fcn, RAnalBlock *
return ret;
}

// TODO R2_600 - this api name must start with `r_anal_jmptbl`
R_API bool try_walkthrough_jmptbl(RAnal *anal, RAnalFunction *fcn, RAnalBlock *block, int depth, ut64 ip, st64 start_casenum_shift, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0) {
R_API bool r_anal_jmptbl_walk(RAnal *anal, RAnalFunction *fcn, RAnalBlock *block, int depth, ut64 ip, st64 start_casenum_shift, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0) {
bool ret = ret0;
// jmptbl_size can not always be determined
if (jmptbl_size == 0) {
Expand Down
2 changes: 1 addition & 1 deletion libr/core/cmd_anal.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -5259,7 +5259,7 @@ static int cmd_af(RCore *core, const char *input) {
ut64 elements = r_num_math (core->num, r_list_get_n (argv, 3));
ut64 seg = r_num_math (core->num, r_list_get_n (argv, 4));
int depth = 50;
try_walkthrough_jmptbl (core->anal, r_list_first (block->fcns), block,
r_anal_jmptbl_walk (core->anal, r_list_first (block->fcns), block,
depth, core->offset, 0, table, seg, sz, elements, 0, false);
free (args);
} else {
Expand Down
2 changes: 1 addition & 1 deletion libr/include/r_anal.h
Original file line number Diff line number Diff line change
Expand Up @@ -1225,7 +1225,7 @@ R_API bool r_anal_jmptbl(RAnal *anal, RAnalFunction *fcn, RAnalBlock *block, ut6

// TODO: should be renamed
R_API bool try_get_delta_jmptbl_info(RAnal *a, RAnalFunction *fcn, ut64 jmp_addr, ut64 lea_addr, ut64 *table_size, ut64 *default_case, st64 *start_casenum_shift);
R_API bool try_walkthrough_jmptbl(RAnal *analysis, RAnalFunction *fcn, RAnalBlock *block, int depth, ut64 ip, st64 start_casenum_shift, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0);
R_API bool r_anal_jmptbl_walk(RAnal *analysis, RAnalFunction *fcn, RAnalBlock *block, int depth, ut64 ip, st64 start_casenum_shift, ut64 jmptbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0);
R_API bool try_walkthrough_casetbl(RAnal *analysis, RAnalFunction *fcn, RAnalBlock *block, int depth, ut64 ip, st64 start_casenum_shift, ut64 jmptbl_loc, ut64 casetbl_loc, ut64 jmptbl_off, ut64 sz, ut64 jmptbl_size, ut64 default_case, bool ret0);
R_API bool try_get_jmptbl_info(RAnal *analysis, RAnalFunction *fcn, ut64 addr, RAnalBlock *my_bb, ut64 *table_size, ut64 *default_case, st64 *start_casenum_shift);
R_API int walkthrough_arm_jmptbl_style(RAnal *anal, RAnalFunction *fcn, RAnalBlock *block, int depth, ut64 ip, ut64 jmptbl_loc, ut64 sz, ut64 jmptbl_size, ut64 default_case, int ret0);
Expand Down

0 comments on commit a14cb18

Please sign in to comment.