From af48d4fe388922fe81176de8b2579e8e569d11af Mon Sep 17 00:00:00 2001 From: James <49045138+ghidracadabra@users.noreply.github.com> Date: Mon, 4 Nov 2024 20:50:05 +0000 Subject: [PATCH] GP-5054 account for endianness in VariableStorage.checkVarnodes --- .../program/model/listing/VariableStorage.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java index a6f4c3dbf2..ce15603c0b 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -243,9 +243,17 @@ public class VariableStorage implements Comparable { stackOffset + ", size=" + varnode.getSize()); } } - if (i < (varnodes.length - 1) && !isRegister) { - throw new InvalidInputException( - "Compound storage must use registers except for last varnode"); + if (programArch.getLanguage().isBigEndian()) { + if (i < (varnodes.length - 1) && !isRegister) { + throw new InvalidInputException( + "Compound storage must use registers except for least significant varnode"); + } + } + else { + if (i > 0 && !isRegister) { + throw new InvalidInputException( + "Compound storage must use registers except for most significant varnode"); + } } size += varnode.getSize(); }