Fixed Bug: Struct Undefined Behaviour Due to Unguarded Access
This commit is contained in:
parent
4689aba219
commit
b16fe2bee3
@ -389,11 +389,19 @@ void execute_SDT(Machine *state, a64inst_instruction *inst) {
|
|||||||
} else {
|
} else {
|
||||||
state->registers[inst->data.SingleTransferData.target] = readDoubleWord(state->memory, address);
|
state->registers[inst->data.SingleTransferData.target] = readDoubleWord(state->memory, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update base register if post indexed
|
||||||
|
bool isSDT = inst->data.SingleTransferData.SingleTransferOpType == a64inst_SINGLE_TRANSFER_SINGLE_DATA_TRANSFER;
|
||||||
|
if (isSDT && inst->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode == a64inst_POST_INDEXED) {
|
||||||
|
dword result = address + signExtend(inst->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset, 9);
|
||||||
|
writeRegister(state, inst->data.SingleTransferData.processOpData.singleDataTransferData.base, inst->data.SingleTransferData.regType, result);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
*(word *)(state->memory + address) = state->registers[inst->data.SingleTransferData.target];
|
*(word *)(state->memory + address) = state->registers[inst->data.SingleTransferData.target];
|
||||||
|
|
||||||
// Update base register if post indexed
|
// Update base register if post indexed
|
||||||
if (inst->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode == a64inst_POST_INDEXED) {
|
bool isSDT = inst->data.SingleTransferData.SingleTransferOpType == a64inst_SINGLE_TRANSFER_SINGLE_DATA_TRANSFER;
|
||||||
|
if (isSDT && inst->data.SingleTransferData.processOpData.singleDataTransferData.addressingMode == a64inst_POST_INDEXED) {
|
||||||
dword result = address + signExtend(inst->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset, 9);
|
dword result = address + signExtend(inst->data.SingleTransferData.processOpData.singleDataTransferData.a64inst_addressingModeData.indexedOffset, 9);
|
||||||
writeRegister(state, inst->data.SingleTransferData.processOpData.singleDataTransferData.base, inst->data.SingleTransferData.regType, result);
|
writeRegister(state, inst->data.SingleTransferData.processOpData.singleDataTransferData.base, inst->data.SingleTransferData.regType, result);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user