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..d28b38c40e 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; @@ -68,11 +69,11 @@ public class RustUtilities { // can later query and use as a return value for this method. GenericMatchAction action = new GenericMatchAction(new AtomicBoolean()) { - @Override - public void apply(Program prog, Address addr, Match match) { - getMatchValue().set(true); - } - }; + @Override + public void apply(Program prog, Address addr, Match match) { + getMatchValue().set(true); + } + }; MemoryBytePatternSearcher searcher = new MemoryBytePatternSearcher("Rust signatures"); for (byte[] sig : RustConstants.RUST_SIGNATURES) { searcher.addPattern(new GenericByteSequencePattern(sig, action)); @@ -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