From 95ad48cdb371aeef15892767f4962ab1712db86f Mon Sep 17 00:00:00 2001 From: emteere <47253321+emteere@users.noreply.github.com> Date: Tue, 28 Oct 2025 17:22:13 +0000 Subject: [PATCH] GP-4711 Fix for import of 32-bit x86 Unix/Windows Rust binaries --- .../core/analysis/rust/RustUtilities.java | 9 +++-- Ghidra/Processors/x86/certification.manifest | 15 +++++--- .../x86/data/extensions/rust/unix32/cc.xml | 34 +++++++++++++++++++ .../rust/{unix => unix32}/probe_fixup.xml | 0 .../data/extensions/rust/unix32/try_fixup.xml | 8 +++++ .../extensions/rust/{unix => unix64}/cc.xml | 0 .../rust/{windows => unix64}/probe_fixup.xml | 0 .../rust/{unix => unix64}/try_fixup.xml | 0 .../extensions/rust/windows32/probe_fixup.xml | 8 +++++ .../extensions/rust/windows32/try_fixup.xml | 8 +++++ .../extensions/rust/windows64/probe_fixup.xml | 8 +++++ .../rust/{windows => windows64}/try_fixup.xml | 0 12 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 Ghidra/Processors/x86/data/extensions/rust/unix32/cc.xml rename Ghidra/Processors/x86/data/extensions/rust/{unix => unix32}/probe_fixup.xml (100%) create mode 100644 Ghidra/Processors/x86/data/extensions/rust/unix32/try_fixup.xml rename Ghidra/Processors/x86/data/extensions/rust/{unix => unix64}/cc.xml (100%) rename Ghidra/Processors/x86/data/extensions/rust/{windows => unix64}/probe_fixup.xml (100%) rename Ghidra/Processors/x86/data/extensions/rust/{unix => unix64}/try_fixup.xml (100%) create mode 100644 Ghidra/Processors/x86/data/extensions/rust/windows32/probe_fixup.xml create mode 100644 Ghidra/Processors/x86/data/extensions/rust/windows32/try_fixup.xml create mode 100644 Ghidra/Processors/x86/data/extensions/rust/windows64/probe_fixup.xml rename Ghidra/Processors/x86/data/extensions/rust/{windows => windows64}/try_fixup.xml (100%) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/rust/RustUtilities.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/rust/RustUtilities.java index 8b6234c1d3..e11f652a3d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/rust/RustUtilities.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/rust/RustUtilities.java @@ -28,6 +28,7 @@ import ghidra.framework.store.LockException; import ghidra.program.database.SpecExtension; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSet; +import ghidra.program.model.lang.Language; import ghidra.program.model.lang.Processor; import ghidra.program.model.listing.Program; import ghidra.program.model.mem.MemoryBlock; @@ -97,9 +98,11 @@ public class RustUtilities { public static int addExtensions(Program program, TaskMonitor monitor, String subPath) throws IOException { - Processor processor = program.getLanguageCompilerSpecPair().getLanguage().getProcessor(); - ResourceFile module = Application.getModuleDataSubDirectory(processor.toString(), - RustConstants.RUST_EXTENSIONS_PATH + subPath); + Language language = program.getLanguageCompilerSpecPair().getLanguage(); + Processor processor = language.getProcessor(); + int bitSize = language.getLanguageDescription().getSize(); + String spath = RustConstants.RUST_EXTENSIONS_PATH + subPath+bitSize; + ResourceFile module = Application.getModuleDataSubDirectory(processor.toString(),spath); int extensionCount = 0; diff --git a/Ghidra/Processors/x86/certification.manifest b/Ghidra/Processors/x86/certification.manifest index 1b6dd3dfb3..71dfe24947 100644 --- a/Ghidra/Processors/x86/certification.manifest +++ b/Ghidra/Processors/x86/certification.manifest @@ -1,11 +1,16 @@ ##VERSION: 2.0 Module.manifest||GHIDRA||||END| README.md||GHIDRA||||END| -data/extensions/rust/unix/cc.xml||GHIDRA||||END| -data/extensions/rust/unix/probe_fixup.xml||GHIDRA||||END| -data/extensions/rust/unix/try_fixup.xml||GHIDRA||||END| -data/extensions/rust/windows/probe_fixup.xml||GHIDRA||||END| -data/extensions/rust/windows/try_fixup.xml||GHIDRA||||END| +data/extensions/rust/unix32/cc.xml||GHIDRA||||END| +data/extensions/rust/unix32/probe_fixup.xml||GHIDRA||||END| +data/extensions/rust/unix32/try_fixup.xml||GHIDRA||||END| +data/extensions/rust/unix64/cc.xml||GHIDRA||||END| +data/extensions/rust/unix64/probe_fixup.xml||GHIDRA||||END| +data/extensions/rust/unix64/try_fixup.xml||GHIDRA||||END| +data/extensions/rust/windows32/probe_fixup.xml||GHIDRA||||END| +data/extensions/rust/windows32/try_fixup.xml||GHIDRA||||END| +data/extensions/rust/windows64/probe_fixup.xml||GHIDRA||||END| +data/extensions/rust/windows64/try_fixup.xml||GHIDRA||||END| data/languages/adx.sinc||GHIDRA||||END| data/languages/avx.sinc||GHIDRA||||END| data/languages/avx2.sinc||GHIDRA||||END| diff --git a/Ghidra/Processors/x86/data/extensions/rust/unix32/cc.xml b/Ghidra/Processors/x86/data/extensions/rust/unix32/cc.xml new file mode 100644 index 0000000000..4a7b38b0bb --- /dev/null +++ b/Ghidra/Processors/x86/data/extensions/rust/unix32/cc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ghidra/Processors/x86/data/extensions/rust/unix/probe_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/unix32/probe_fixup.xml similarity index 100% rename from Ghidra/Processors/x86/data/extensions/rust/unix/probe_fixup.xml rename to Ghidra/Processors/x86/data/extensions/rust/unix32/probe_fixup.xml diff --git a/Ghidra/Processors/x86/data/extensions/rust/unix32/try_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/unix32/try_fixup.xml new file mode 100644 index 0000000000..1d7cbcca59 --- /dev/null +++ b/Ghidra/Processors/x86/data/extensions/rust/unix32/try_fixup.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/Ghidra/Processors/x86/data/extensions/rust/unix/cc.xml b/Ghidra/Processors/x86/data/extensions/rust/unix64/cc.xml similarity index 100% rename from Ghidra/Processors/x86/data/extensions/rust/unix/cc.xml rename to Ghidra/Processors/x86/data/extensions/rust/unix64/cc.xml diff --git a/Ghidra/Processors/x86/data/extensions/rust/windows/probe_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/unix64/probe_fixup.xml similarity index 100% rename from Ghidra/Processors/x86/data/extensions/rust/windows/probe_fixup.xml rename to Ghidra/Processors/x86/data/extensions/rust/unix64/probe_fixup.xml diff --git a/Ghidra/Processors/x86/data/extensions/rust/unix/try_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/unix64/try_fixup.xml similarity index 100% rename from Ghidra/Processors/x86/data/extensions/rust/unix/try_fixup.xml rename to Ghidra/Processors/x86/data/extensions/rust/unix64/try_fixup.xml diff --git a/Ghidra/Processors/x86/data/extensions/rust/windows32/probe_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/windows32/probe_fixup.xml new file mode 100644 index 0000000000..9bb5fd098a --- /dev/null +++ b/Ghidra/Processors/x86/data/extensions/rust/windows32/probe_fixup.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/Ghidra/Processors/x86/data/extensions/rust/windows32/try_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/windows32/try_fixup.xml new file mode 100644 index 0000000000..ecb17a9fb5 --- /dev/null +++ b/Ghidra/Processors/x86/data/extensions/rust/windows32/try_fixup.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/Ghidra/Processors/x86/data/extensions/rust/windows64/probe_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/windows64/probe_fixup.xml new file mode 100644 index 0000000000..9bb5fd098a --- /dev/null +++ b/Ghidra/Processors/x86/data/extensions/rust/windows64/probe_fixup.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/Ghidra/Processors/x86/data/extensions/rust/windows/try_fixup.xml b/Ghidra/Processors/x86/data/extensions/rust/windows64/try_fixup.xml similarity index 100% rename from Ghidra/Processors/x86/data/extensions/rust/windows/try_fixup.xml rename to Ghidra/Processors/x86/data/extensions/rust/windows64/try_fixup.xml