From ad0f0231d69b727ffdd7966164b551cc0c47760b Mon Sep 17 00:00:00 2001 From: Ryan Kurtz Date: Tue, 15 Sep 2026 12:40:37 -0400 Subject: [PATCH 1/2] GP-0: More WhatsNew --- .../Public_Release/src/global/docs/WhatsNew.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md b/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md index 6cd8d4773f..115c033e61 100644 --- a/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md +++ b/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md @@ -29,11 +29,6 @@ Ghidra 12.2 is fully backward compatible with project data from previous release and data type archives which are created or modified in 12.2 may not be usable by an earlier Ghidra version. -**IMPORTANT:** Jython support is not supported by default but is included with the release as an -extension. An extra step is required to install it. If you have Ghidra Jython scripts, you must -either install the Jython Extension, convert your scripts to Python and run with PyGhidra, or -convert your scripts to JAVA. - **IMPORTANT:** Ghidra 12.2 requires, at minimum, JDK 25 to run. **IMPORTANT:** To use the Debugger or do a full source distribution build, you will need Python3 @@ -196,6 +191,12 @@ Support has been added for integer datatypes in the C99 standard: `int8_t`, `uin now leverage these new BuiltIn datatypes as well as related typedefs for improved portability across target architectures. +Additionally, a new interactive Structure/Union/Enum merger has been created. Previously, when users +discovered that two partially recovered structures/unions/enums actually represented the same +datatype, their only option was to pick one or the other and manually edit it to include information +from the other datatype. Now, users can see them side by side and pick and choose each element in +either datatype to include in the resulting combined datatype. + ## Beta support for "Timeless Debugging" We've completed several enhancements to the Debugger to better support "timeless" or "time-travel" debugging. This includes a native tool, based on Intel PIN, to capture execution traces in a format From 0da3f75f668d7413993695b4123084b797e3e252 Mon Sep 17 00:00:00 2001 From: Henri Chain Date: Wed, 16 Sep 2026 15:43:44 +0200 Subject: [PATCH 2/2] Place a.out symbols at their image address loadSymbols adds n_value to the start of the block the symbol belongs to, but n_value is an address (see https://man.freebsd.org/cgi/man.cgi?a.out(5) ), not an offset into its segment, so we need to subtract the segment's base. In most cases `determineTextAddr` is 0, so they are the same for the .text segment, which is why function symbols still loaded fine. But for the .data and .bss segments they don't, so their symbol locations ended up shifted. --- .../app/util/opinion/UnixAoutProgramLoader.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/UnixAoutProgramLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/UnixAoutProgramLoader.java index fc7fc65c00..987b83d8db 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/UnixAoutProgramLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/UnixAoutProgramLoader.java @@ -252,19 +252,20 @@ public class UnixAoutProgramLoader { for (UnixAoutSymbol symbol : symtab) { Address address = null; + long blockOffset = 0; MemoryBlock block = null; switch (symbol.type) { case N_TEXT: - address = textBlock != null ? textBlock.getStart().add(symbol.value) : null; + blockOffset = symbol.value - header.getTextAddr(); block = textBlock; break; case N_DATA: - address = dataBlock != null ? dataBlock.getStart().add(symbol.value) : null; + blockOffset = symbol.value - header.getDataAddr(); block = dataBlock; break; case N_BSS: - address = bssBlock != null ? bssBlock.getStart().add(symbol.value) : null; + blockOffset = symbol.value - header.getBssAddr(); block = bssBlock; break; case N_UNDF: @@ -290,10 +291,14 @@ public class UnixAoutProgramLoader { break; } - if (address == null || block == null) { + if (block == null) { continue; } + if (address == null) { + address = block.getStart().add(blockOffset); + } + switch (symbol.kind) { case AUX_FUNC: try {