From 417b784e27964cea6f5e8420d04e06cd437b9f06 Mon Sep 17 00:00:00 2001 From: Xiaoyin Liu Date: Sun, 7 Aug 2022 07:12:34 +0400 Subject: [PATCH 1/3] Correct wrong GCC/VS compiler detection The GCC's offset to code may not necessarily be 0x1000. --- .../src/main/java/ghidra/app/util/opinion/PeLoader.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) 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 bd92a7c0d4..02b1b747e4 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 @@ -1054,14 +1054,7 @@ public class PeLoader extends AbstractPeDebugLoader { // return compilerType; // } - // Now look for offset to code (0x1000 for gcc) and PointerToSymbols - // (0 for VS, non-zero for gcc) - int addrCode = br.readInt(dh.e_lfanew() + 40); - if (addrCode != 0x1000) { - compilerType = CompilerEnum.VisualStudio; - return compilerType; - } - + // Now look for PointerToSymbols (0 for VS, non-zero for gcc) int ptrSymTable = br.readInt(dh.e_lfanew() + 12); if (ptrSymTable != 0) { compilerType = CompilerEnum.GCC; From 2151197aacd2832863506e264d71c1b77c28a771 Mon Sep 17 00:00:00 2001 From: ghidra007 Date: Mon, 30 Jan 2023 20:50:30 +0000 Subject: [PATCH 2/3] GP-1851 PeLoader PR to handle mingw. GnuDemangler updates to work on windows gcc. --- .../java/ghidra/app/util/demangler/gnu/GnuDemangler.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java b/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java index 3b1735927a..d1d8304a5d 100644 --- a/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java +++ b/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java @@ -23,6 +23,7 @@ import ghidra.app.util.demangler.*; import ghidra.app.util.opinion.ElfLoader; import ghidra.app.util.opinion.MachoLoader; import ghidra.framework.Application; +import ghidra.framework.options.Options; import ghidra.program.model.lang.CompilerSpec; import ghidra.program.model.listing.Program; @@ -50,6 +51,12 @@ public class GnuDemangler implements Demangler { if (isELF(executableFormat) || isMacho(executableFormat)) { return true; } + + Options options = program.getOptions("Program Information"); + String compiler = options.getString("Compiler", null); + if(compiler != null && compiler.contains("gcc")) { + return true; + } CompilerSpec spec = program.getCompilerSpec(); String specId = spec.getCompilerSpecID().getIdAsString(); From f92c30df388a801f7fb93c891f048d89bcd728b1 Mon Sep 17 00:00:00 2001 From: ghidra007 Date: Wed, 22 Feb 2023 19:56:05 +0000 Subject: [PATCH 3/3] GP-1851 Cleaner way of checking program's compiler option. --- .../ghidra/app/util/demangler/gnu/GnuDemangler.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java b/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java index d1d8304a5d..e6516ef974 100644 --- a/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java +++ b/Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemangler.java @@ -19,11 +19,15 @@ import java.io.File; import java.io.IOException; import generic.jar.ResourceFile; -import ghidra.app.util.demangler.*; +import ghidra.app.util.demangler.DemangledAddressTable; +import ghidra.app.util.demangler.DemangledException; +import ghidra.app.util.demangler.DemangledFunction; +import ghidra.app.util.demangler.DemangledObject; +import ghidra.app.util.demangler.Demangler; +import ghidra.app.util.demangler.DemanglerOptions; import ghidra.app.util.opinion.ElfLoader; import ghidra.app.util.opinion.MachoLoader; import ghidra.framework.Application; -import ghidra.framework.options.Options; import ghidra.program.model.lang.CompilerSpec; import ghidra.program.model.listing.Program; @@ -52,8 +56,7 @@ public class GnuDemangler implements Demangler { return true; } - Options options = program.getOptions("Program Information"); - String compiler = options.getString("Compiler", null); + String compiler = program.getCompiler(); if(compiler != null && compiler.contains("gcc")) { return true; }