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