mirror of
https://github.com/radareorg/radare2.git
synced 2025-01-24 06:48:46 +00:00
Skip more types of call instructions on linear emulation ##analysis
This commit is contained in:
parent
708e59b8a1
commit
7821ddb04b
@ -6536,9 +6536,17 @@ static void cmd_aespc(RCore *core, ut64 addr, ut64 until_addr, int ninstr) {
|
||||
break;
|
||||
}
|
||||
// skip calls and such
|
||||
if (aop.type == R_ANAL_OP_TYPE_CALL) {
|
||||
// nothing
|
||||
} else {
|
||||
switch (aop.type) {
|
||||
case R_ANAL_OP_TYPE_CALL:
|
||||
case R_ANAL_OP_TYPE_UCALL:
|
||||
case R_ANAL_OP_TYPE_RCALL:
|
||||
case R_ANAL_OP_TYPE_ICALL:
|
||||
case R_ANAL_OP_TYPE_IRCALL:
|
||||
case R_ANAL_OP_TYPE_CCALL:
|
||||
case R_ANAL_OP_TYPE_UCCALL:
|
||||
// skip
|
||||
break;
|
||||
default:
|
||||
r_reg_setv (core->anal->reg, "PC", aop.addr + aop.size);
|
||||
r_reg_setv (core->dbg->reg, "PC", aop.addr + aop.size);
|
||||
const char *e = R_STRBUF_SAFEGET (&aop.esil);
|
||||
@ -6546,6 +6554,7 @@ static void cmd_aespc(RCore *core, ut64 addr, ut64 until_addr, int ninstr) {
|
||||
// eprintf (" 0x%08llx %d %s\n", aop.addr, ret, aop.mnemonic);
|
||||
(void)r_anal_esil_parse (esil, e);
|
||||
}
|
||||
break;
|
||||
}
|
||||
int inc = (core->search->align > 0)? core->search->align - 1: ret - 1;
|
||||
if (inc < 0) {
|
||||
|
@ -416,21 +416,21 @@ typedef enum {
|
||||
R_ANAL_OP_TYPE_NULL = 0,
|
||||
R_ANAL_OP_TYPE_JMP = 1, /* mandatory jump */
|
||||
R_ANAL_OP_TYPE_UJMP = 2, /* unknown jump (register or so) */
|
||||
R_ANAL_OP_TYPE_RJMP = R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_UJMP,
|
||||
R_ANAL_OP_TYPE_IJMP = R_ANAL_OP_TYPE_IND | R_ANAL_OP_TYPE_UJMP,
|
||||
R_ANAL_OP_TYPE_IRJMP = R_ANAL_OP_TYPE_IND | R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_UJMP,
|
||||
R_ANAL_OP_TYPE_CJMP = R_ANAL_OP_TYPE_COND | R_ANAL_OP_TYPE_JMP, /* conditional jump */
|
||||
R_ANAL_OP_TYPE_RCJMP = R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_CJMP, /* conditional jump register */
|
||||
R_ANAL_OP_TYPE_MJMP = R_ANAL_OP_TYPE_MEM | R_ANAL_OP_TYPE_JMP, /* memory jump */
|
||||
R_ANAL_OP_TYPE_MCJMP = R_ANAL_OP_TYPE_MEM | R_ANAL_OP_TYPE_CJMP, /* memory conditional jump */
|
||||
R_ANAL_OP_TYPE_UCJMP = R_ANAL_OP_TYPE_COND | R_ANAL_OP_TYPE_UJMP, /* conditional unknown jump */
|
||||
R_ANAL_OP_TYPE_RJMP = R_ANAL_OP_TYPE_UJMP| R_ANAL_OP_TYPE_REG,
|
||||
R_ANAL_OP_TYPE_UCJMP = R_ANAL_OP_TYPE_UJMP | R_ANAL_OP_TYPE_COND, /* conditional unknown jump */
|
||||
R_ANAL_OP_TYPE_IJMP = R_ANAL_OP_TYPE_UJMP | R_ANAL_OP_TYPE_IND,
|
||||
R_ANAL_OP_TYPE_IRJMP = R_ANAL_OP_TYPE_UJMP | R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_IND,
|
||||
R_ANAL_OP_TYPE_CJMP = R_ANAL_OP_TYPE_JMP | R_ANAL_OP_TYPE_COND, /* conditional jump */
|
||||
R_ANAL_OP_TYPE_MJMP = R_ANAL_OP_TYPE_JMP | R_ANAL_OP_TYPE_MEM, /* memory jump */
|
||||
R_ANAL_OP_TYPE_RCJMP = R_ANAL_OP_TYPE_CJMP | R_ANAL_OP_TYPE_REG, /* conditional jump register */
|
||||
R_ANAL_OP_TYPE_MCJMP = R_ANAL_OP_TYPE_CJMP | R_ANAL_OP_TYPE_MEM, /* memory conditional jump */
|
||||
R_ANAL_OP_TYPE_CALL = 3, /* call to subroutine (branch+link) */
|
||||
R_ANAL_OP_TYPE_UCALL = 4, /* unknown call (register or so) */
|
||||
R_ANAL_OP_TYPE_RCALL = R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_UCALL,
|
||||
R_ANAL_OP_TYPE_ICALL = R_ANAL_OP_TYPE_IND | R_ANAL_OP_TYPE_UCALL,
|
||||
R_ANAL_OP_TYPE_IRCALL= R_ANAL_OP_TYPE_IND | R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_UCALL,
|
||||
R_ANAL_OP_TYPE_CCALL = R_ANAL_OP_TYPE_COND | R_ANAL_OP_TYPE_CALL, /* conditional call to subroutine */
|
||||
R_ANAL_OP_TYPE_UCCALL= R_ANAL_OP_TYPE_COND | R_ANAL_OP_TYPE_UCALL, /* conditional unknown call */
|
||||
R_ANAL_OP_TYPE_RCALL = R_ANAL_OP_TYPE_UCALL | R_ANAL_OP_TYPE_REG,
|
||||
R_ANAL_OP_TYPE_ICALL = R_ANAL_OP_TYPE_UCALL | R_ANAL_OP_TYPE_IND,
|
||||
R_ANAL_OP_TYPE_IRCALL= R_ANAL_OP_TYPE_UCALL | R_ANAL_OP_TYPE_REG | R_ANAL_OP_TYPE_IND,
|
||||
R_ANAL_OP_TYPE_CCALL = R_ANAL_OP_TYPE_CALL | R_ANAL_OP_TYPE_COND, /* conditional call to subroutine */
|
||||
R_ANAL_OP_TYPE_UCCALL= R_ANAL_OP_TYPE_UCALL | R_ANAL_OP_TYPE_COND, /* conditional unknown call */
|
||||
R_ANAL_OP_TYPE_RET = 5, /* returns from subroutine */
|
||||
R_ANAL_OP_TYPE_CRET = R_ANAL_OP_TYPE_COND | R_ANAL_OP_TYPE_RET, /* conditional return from subroutine */
|
||||
R_ANAL_OP_TYPE_ILL = 6, /* illegal instruction // trap */
|
||||
|
Loading…
x
Reference in New Issue
Block a user