From bb48b7433fca669151efac14bd25aed5bd122d5b Mon Sep 17 00:00:00 2001 From: ghizard <50744617+ghizard@users.noreply.github.com> Date: Thu, 3 Sep 2020 11:11:40 -0400 Subject: [PATCH] GP-43 Clang review fixes/changes --- .../ghidra/app/util/opinion/PeLoader.java | 3 +- .../app/cmd/data/rtti/RttiModelTest.java | 33 ------------ .../PEUtilTest.java | 53 +++++++++++++++++++ 3 files changed, 54 insertions(+), 35 deletions(-) create mode 100644 Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/plugin/prototype/MicrosoftCodeAnalyzerPlugin/PEUtilTest.java diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java index f21dfb6d15..27cef08f4b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java @@ -901,7 +901,6 @@ public class PeLoader extends AbstractPeDebugLoader { offsetChoice = CompilerEnum.Clang; } else if (dh.e_lfanew() < 0x80) { - // 0x78 checked for Clang above, but 0x7c fits here too offsetChoice = CompilerEnum.Unknown; } else { @@ -985,7 +984,7 @@ public class PeLoader extends AbstractPeDebugLoader { } // Check for AddressOfStart and PointerToSymbol - if (errStringChoice == CompilerEnum.GCC_VS && asmChoice == CompilerEnum.GCC_VS && + if (errStringChoice == CompilerEnum.GCC_VS && asmChoice == CompilerEnum.GCC_VS_Clang && dh.e_lfanew() == 0x80) { // Trying to determine if we have gcc or old VS diff --git a/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/cmd/data/rtti/RttiModelTest.java b/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/cmd/data/rtti/RttiModelTest.java index 40f61410f6..988e88f43a 100644 --- a/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/cmd/data/rtti/RttiModelTest.java +++ b/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/cmd/data/rtti/RttiModelTest.java @@ -511,39 +511,6 @@ public class RttiModelTest extends AbstractRttiTest { } - @Test - public void testInvalidRtti4_64NotVSOrClang() throws Exception { - ProgramBuilder builder = build64BitX86NonVS(); - ProgramDB program = builder.getProgram(); - setupRtti4_32(builder, 0x101001340L, 0, 0, 0, "0x00005364", "0x0000137c"); - Address address = builder.addr(0x101001340L); - Rtti4Model model = new Rtti4Model(program, address, defaultValidationOptions); - try { - model.validate(); - } - catch (InvalidDataTypeException e) { - assertEquals( - "RTTICompleteObjectLocator data type model is only valid for Visual Studio windows PE.", - e.getMessage()); - } - } - - @Test - public void testInvalidRtti4_64Clang() throws Exception { - ProgramBuilder builder = build64BitX86Clang(); - ProgramDB program = builder.getProgram(); - setupRtti4_32(builder, 0x101001340L, 0, 0, 0, "0x00005364", "0x0000137c"); - Address address = builder.addr(0x101001340L); - Rtti4Model model = new Rtti4Model(program, address, defaultValidationOptions); - try { - model.validate(); - } - catch (InvalidDataTypeException e) { - assertEquals("TypeDescriptor data type is not properly aligned at 101005364.", - e.getMessage()); - } - } - @Test public void testValidRtti4Model_64NoFollowFlow() throws Exception { diff --git a/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/plugin/prototype/MicrosoftCodeAnalyzerPlugin/PEUtilTest.java b/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/plugin/prototype/MicrosoftCodeAnalyzerPlugin/PEUtilTest.java new file mode 100644 index 0000000000..825adea2bb --- /dev/null +++ b/Ghidra/Features/MicrosoftCodeAnalyzer/src/test/java/ghidra/app/plugin/prototype/MicrosoftCodeAnalyzerPlugin/PEUtilTest.java @@ -0,0 +1,53 @@ +/* ### + * IP: GHIDRA + * + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.app.plugin.prototype.MicrosoftCodeAnalyzerPlugin; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import ghidra.app.cmd.data.AbstractCreateDataTypeModelTest; +import ghidra.program.database.ProgramBuilder; +import ghidra.program.database.ProgramDB; + +public class PEUtilTest extends AbstractCreateDataTypeModelTest { + + @Test + public void testIsVisualStudioOrClangPeGivenVisualStudioPe() throws Exception { + ProgramBuilder builder = build64BitX86(); + ProgramDB program = builder.getProgram(); + boolean result = PEUtil.isVisualStudioOrClangPe(program); + assertTrue(result); + } + + @Test + public void testIsVisualStudioOrClangPeGivenClangPe() throws Exception { + ProgramBuilder builder = build64BitX86Clang(); + ProgramDB program = builder.getProgram(); + boolean result = PEUtil.isVisualStudioOrClangPe(program); + assertTrue(result); + } + + @Test + public void testIsVisualStudioOrClangPeGivenNotVisualStudioOrClangPe() throws Exception { + ProgramBuilder builder = build64BitX86NonVS(); + ProgramDB program = builder.getProgram(); + boolean result = PEUtil.isVisualStudioOrClangPe(program); + assertFalse(result); + } + +}