From 9507180dc90705454e03e21ddebaf79b85031e5a Mon Sep 17 00:00:00 2001 From: EDiasAlberto Date: Thu, 13 Jun 2024 20:43:57 +0100 Subject: [PATCH] fix str/ldr classification logic to avoid incorrect array indexing --- src/parser.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/parser.c b/src/parser.c index 5f9f652..92afb0a 100644 --- a/src/parser.c +++ b/src/parser.c @@ -199,11 +199,13 @@ void calculateAddressFormat(a64inst_instruction *instr, char *tokens[], int tok instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_PRE_INDEXED; instr->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset = getOperandNumber(operands[1]); - } else if( (isOperandRegister(*operands[0]) == 1) - && (isOperandRegister(*operands[1]) == 1)){ - //register - instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_REGISTER_OFFSET; - instr->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.offsetReg = getOperandNumber(operands[1]); + } else if(operandCount==2) { + if((isOperandRegister(*operands[0]) == 1) + && (isOperandRegister(*operands[1]) == 1)){ + //register + instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_REGISTER_OFFSET; + instr->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.offsetReg = getOperandNumber(operands[1]); + } } else if(unsplitString[strlen(unsplitString)-1] == ']') { // POST_INDEXED instr->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode = a64inst_POST_INDEXED;