mirror of
https://github.com/radareorg/radare2.git
synced 2025-01-17 11:22:22 +00:00
Fix arm.cs plugin
This commit is contained in:
parent
14eb6e7d8d
commit
b622845324
@ -763,13 +763,6 @@ static int analop(RAnal *a, RAnalOp *op, ut64 addr, const ut8 *buf, int len) {
|
||||
omode = mode;
|
||||
obits = a->bits;
|
||||
}
|
||||
if (handle == 0) {
|
||||
ret = (a->bits==64)?
|
||||
cs_open (CS_ARCH_ARM64, mode, &handle):
|
||||
cs_open (CS_ARCH_ARM, mode, &handle);
|
||||
cs_option (handle, CS_OPT_DETAIL, CS_OPT_ON);
|
||||
}
|
||||
|
||||
op->type = R_ANAL_OP_TYPE_NULL;
|
||||
op->size = (a->bits==16)? 2: 4;
|
||||
op->stackop = R_ANAL_STACK_NULL;
|
||||
@ -779,27 +772,35 @@ static int analop(RAnal *a, RAnalOp *op, ut64 addr, const ut8 *buf, int len) {
|
||||
op->ptr = op->val = -1;
|
||||
op->refptr = 0;
|
||||
r_strbuf_init (&op->esil);
|
||||
if (ret == CS_ERR_OK) {
|
||||
n = cs_disasm (handle, (ut8*)buf, len, addr, 1, &insn);
|
||||
if (n<1) {
|
||||
op->type = R_ANAL_OP_TYPE_ILL;
|
||||
} else {
|
||||
op->size = insn->size;
|
||||
if (a->bits == 64) {
|
||||
anop64 (op, insn);
|
||||
if (a->decode) {
|
||||
analop64_esil (a, op, addr, buf, len, &handle, insn);
|
||||
}
|
||||
} else {
|
||||
anop32 (op, insn);
|
||||
if (a->decode) {
|
||||
analop_esil (a, op, addr, buf, len, &handle, insn);
|
||||
}
|
||||
}
|
||||
cs_free (insn, n);
|
||||
if (handle == 0) {
|
||||
ret = (a->bits==64)?
|
||||
cs_open (CS_ARCH_ARM64, mode, &handle):
|
||||
cs_open (CS_ARCH_ARM, mode, &handle);
|
||||
cs_option (handle, CS_OPT_DETAIL, CS_OPT_ON);
|
||||
if (ret != CS_ERR_OK) {
|
||||
return -1;
|
||||
}
|
||||
// cs_close (&handle);
|
||||
}
|
||||
|
||||
n = cs_disasm (handle, (ut8*)buf, len, addr, 1, &insn);
|
||||
if (n<1) {
|
||||
op->type = R_ANAL_OP_TYPE_ILL;
|
||||
} else {
|
||||
op->size = insn->size;
|
||||
if (a->bits == 64) {
|
||||
anop64 (op, insn);
|
||||
if (a->decode) {
|
||||
analop64_esil (a, op, addr, buf, len, &handle, insn);
|
||||
}
|
||||
} else {
|
||||
anop32 (op, insn);
|
||||
if (a->decode) {
|
||||
analop_esil (a, op, addr, buf, len, &handle, insn);
|
||||
}
|
||||
}
|
||||
cs_free (insn, n);
|
||||
}
|
||||
// cs_close (&handle);
|
||||
return op->size;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user