From ecb6c9a93cb0851675f9cd1f93b53ba284360ccb Mon Sep 17 00:00:00 2001 From: Rot127 Date: Sat, 22 Jul 2023 10:00:34 -0500 Subject: [PATCH 1/4] Remove leftover code. --- arch/ARM/ARMInstPrinter.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/arch/ARM/ARMInstPrinter.c b/arch/ARM/ARMInstPrinter.c index ef08a33455..0f9a741802 100644 --- a/arch/ARM/ARMInstPrinter.c +++ b/arch/ARM/ARMInstPrinter.c @@ -268,17 +268,9 @@ static void printInst(MCInst *MI, SStream *O, void *info) printOperand(MI, 0, O); if (Writeback) { SStream_concat0(O, "!"); - // TODO: Do this in a static function called by ARMMapping.c::ARM_printer(). - if (MI->flat_insn->detail) { - ARM_get_detail_op(MI, -1)->access |= - CS_AC_WRITE; - MI->flat_insn->detail->writeback = true; - } } SStream_concat0(O, ", "); printRegisterList(MI, 3, O); - // TODO: Do this in a static function called by ARMMapping.c::ARM_printer(). - MI->flat_insn->id = ARM_INS_VPOP; return; } From 6cd586b7f8a3a060bf0dae7466428094a5eab938 Mon Sep 17 00:00:00 2001 From: Rot127 Date: Sat, 22 Jul 2023 10:18:57 -0500 Subject: [PATCH 2/4] Remove leading space --- arch/ARM/ARMInstPrinter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/ARM/ARMInstPrinter.c b/arch/ARM/ARMInstPrinter.c index 0f9a741802..ed4f4cd1fc 100644 --- a/arch/ARM/ARMInstPrinter.c +++ b/arch/ARM/ARMInstPrinter.c @@ -260,7 +260,7 @@ static void printInst(MCInst *MI, SStream *O, void *info) Writeback = false; } - SStream_concat0(O, " ldm"); + SStream_concat0(O, "ldm"); printPredicateOperand(MI, 1, O); SStream_concat0(O, " "); From 03bf3f537355b0947d8ac2a811c0a47534c90d2f Mon Sep 17 00:00:00 2001 From: Rot127 Date: Sat, 22 Jul 2023 10:40:23 -0500 Subject: [PATCH 3/4] Fix detail of T2AddrModeSoReg operands. The (incorrect) Shift amount was set to the incorrect operand (an operand which doesn't exists). --- arch/ARM/ARMMapping.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/ARM/ARMMapping.c b/arch/ARM/ARMMapping.c index 7dc546c8ad..f71d8c5e35 100644 --- a/arch/ARM/ARMMapping.c +++ b/arch/ARM/ARMMapping.c @@ -1322,10 +1322,10 @@ static void add_cs_detail_general(MCInst *MI, arm_op_group op_group, MCInst_getOpVal(MI, OpNum)); ARM_set_detail_op_mem(MI, OpNum + 1, true, 0, 0, MCInst_getOpVal(MI, OpNum + 1)); - unsigned ShAmt = MCInst_getOpVal(MI, OpNum); + unsigned ShAmt = MCInst_getOpVal(MI, OpNum + 2); if (ShAmt) { - ARM_get_detail_op(MI, 2)->shift.type = ARM_SFT_LSL; - ARM_get_detail_op(MI, 2)->shift.value = ShAmt; + ARM_get_detail_op(MI, 0)->shift.type = ARM_SFT_LSL; + ARM_get_detail_op(MI, 0)->shift.value = ShAmt; } ARM_set_mem_access(MI, false); break; From 95909787e286f52f254bf7e15821313c756fda17 Mon Sep 17 00:00:00 2001 From: Rot127 Date: Sat, 22 Jul 2023 12:51:33 -0500 Subject: [PATCH 4/4] Fix AddrMode3Operand_1 The immediate was not processed through ARM_AM_getAM3Offset before adding it to detail. --- arch/ARM/ARMMapping.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/ARM/ARMMapping.c b/arch/ARM/ARMMapping.c index f71d8c5e35..e0d9a8daae 100644 --- a/arch/ARM/ARMMapping.c +++ b/arch/ARM/ARMMapping.c @@ -1536,12 +1536,12 @@ static void add_cs_detail_template_1(MCInst *MI, arm_op_group op_group, ARM_set_mem_access(MI, false); break; } - unsigned ImmOffs = ARM_AM_getAM3Offset( - MCOperand_getImm(MCInst_getOperand(MI, OpNum + 2))); + unsigned ImmOffs = + ARM_AM_getAM3Offset(MCInst_getOpVal(MI, OpNum + 2)); if (AlwaysPrintImm0 || ImmOffs || Sign == ARM_AM_sub) { ARM_set_detail_op_mem(MI, OpNum + 2, false, 0, 0, - MCInst_getOpVal(MI, OpNum + 2)); + ImmOffs); ARM_get_detail_op(MI, 0)->subtracted = Sign == ARM_AM_sub; }