From b52ebcc62f03e412332d0735b30cc1f792f0a1fa Mon Sep 17 00:00:00 2001 From: wargio Date: Sat, 10 Jun 2023 00:16:53 +0800 Subject: [PATCH] Fix mnemonic mask for bf --- librz/analysis/p/analysis_bf.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/librz/analysis/p/analysis_bf.c b/librz/analysis/p/analysis_bf.c index a88c2f153d..986ed45b0c 100644 --- a/librz/analysis/p/analysis_bf.c +++ b/librz/analysis/p/analysis_bf.c @@ -186,6 +186,9 @@ static int bf_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *b if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_llimit(analysis, addr, op->jump); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("while [ptr]"); + } op->type = RZ_ANALYSIS_OP_TYPE_CJMP; op->fail = addr + 1; break; @@ -195,6 +198,9 @@ static int bf_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *b if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_rlimit(analysis, addr, op->jump); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("loop"); + } op->type = RZ_ANALYSIS_OP_TYPE_UJMP; break; case '>': @@ -202,46 +208,70 @@ static int bf_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *b if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_right_arrow(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("inc ptr"); + } break; case '<': op->type = RZ_ANALYSIS_OP_TYPE_SUB; if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_left_arrow(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("dec ptr"); + } break; case '+': op->type = RZ_ANALYSIS_OP_TYPE_ADD; if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_inc(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("inc [ptr]"); + } break; case '-': op->type = RZ_ANALYSIS_OP_TYPE_SUB; if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_dec(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("dec [ptr]"); + } break; case '.': if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_out(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("out [ptr]"); + } op->type = RZ_ANALYSIS_OP_TYPE_STORE; break; case ',': if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = bf_in(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("in [ptr]"); + } op->type = RZ_ANALYSIS_OP_TYPE_LOAD; break; case 0x00: case 0xff: op->type = RZ_ANALYSIS_OP_TYPE_TRAP; + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("trap"); + } break; default: op->type = RZ_ANALYSIS_OP_TYPE_NOP; if (mask & RZ_ANALYSIS_OP_MASK_IL) { op->il_op = rz_il_op_new_nop(); } + if (mask & RZ_ANALYSIS_OP_MASK_DISASM) { + op->mnemonic = strdup("nop"); + } break; } return op->size;