mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +02:00
Merge remote-tracking branch 'origin/Ghidra_12.0'
This commit is contained in:
commit
f59313131d
8 changed files with 59 additions and 19 deletions
|
@ -5,7 +5,7 @@ to analyze compiled code on a variety of platforms including Windows, MacOS, and
|
||||||
include disassembly, assembly, decompilation, debugging, emulation, graphing, and scripting, along
|
include disassembly, assembly, decompilation, debugging, emulation, graphing, and scripting, along
|
||||||
with hundreds of other features. Ghidra supports a wide variety of processor instruction sets and
|
with hundreds of other features. Ghidra supports a wide variety of processor instruction sets and
|
||||||
executable formats and can be run in both user-interactive and automated modes. Users may also
|
executable formats and can be run in both user-interactive and automated modes. Users may also
|
||||||
develop their own Ghidra plug-in components and/or scripts using the exposed API. In addition there
|
develop their own Ghidra plug-in components and/or scripts using the exposed API. In addition, there
|
||||||
are numerous ways to extend Ghidra such as new processors, loaders/exporters, automated analyzers,
|
are numerous ways to extend Ghidra such as new processors, loaders/exporters, automated analyzers,
|
||||||
and new visualizations.
|
and new visualizations.
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ Ghidra 12.0 is fully backward compatible with project data from previous release
|
||||||
and data type archives which are created or modified in 12.0 will not be usable by an earlier Ghidra
|
and data type archives which are created or modified in 12.0 will not be usable by an earlier Ghidra
|
||||||
version.
|
version.
|
||||||
|
|
||||||
**IMPORTANT:** Ghidra 12.0 requires at minimum JDK 21 to run.
|
**IMPORTANT:** Ghidra 12.0 requires, at minimum, JDK 21 to run.
|
||||||
|
|
||||||
**IMPORTANT:** To use the Debugger or do a full source distribution build, you will need Python3
|
**IMPORTANT:** To use the Debugger or do a full source distribution build, you will need Python3
|
||||||
(3.9 to 3.13 supported) installed on your system.
|
(3.9 to 3.13 supported) installed on your system.
|
||||||
|
@ -35,7 +35,7 @@ for `CVE-2024-31083` in X.org software in April 2024 introduced a regression, wh
|
||||||
in xwayland 23.2.6 and xorg-server 21.1.13. If you experience any crashing of Ghidra, most likely
|
in xwayland 23.2.6 and xorg-server 21.1.13. If you experience any crashing of Ghidra, most likely
|
||||||
causing a full logout, check if your xorg-server has been updated to at least the noted version.
|
causing a full logout, check if your xorg-server has been updated to at least the noted version.
|
||||||
|
|
||||||
**NOTE:** Each build distribution will include native components (e.g., decompiler) for at least one
|
**NOTE:** Each build distribution will include native components (e.g., Decompiler) for at least one
|
||||||
platform (e.g., Windows x86-64). If you have another platform that is not included in the build
|
platform (e.g., Windows x86-64). If you have another platform that is not included in the build
|
||||||
distribution, you can build native components for your platform directly from the distribution.
|
distribution, you can build native components for your platform directly from the distribution.
|
||||||
See the *Getting Started* document for additional information. Users running with older shared
|
See the *Getting Started* document for additional information. Users running with older shared
|
||||||
|
@ -44,9 +44,9 @@ launching native executables such as the Decompiler and GNU Demangler which may
|
||||||
rebuild of native components.
|
rebuild of native components.
|
||||||
|
|
||||||
**NOTE:** Ghidra Server: The Ghidra 12.0 server is compatible with Ghidra 9.2 and later Ghidra
|
**NOTE:** Ghidra Server: The Ghidra 12.0 server is compatible with Ghidra 9.2 and later Ghidra
|
||||||
clients although the presence of any newer link-files within a repository may not be handled properly
|
clients, although the presence of any newer link-files within a repository may not be handled properly
|
||||||
by client versions prior to 12.0 which lack support for the new storage format. Ghidra 12.0 clients
|
by client versions prior to 12.0 which lack support for the new storage format. Ghidra 12.0 clients
|
||||||
which introduce new link-files into a project will not be able to add such files into version
|
that introduce new link-files into a project will not be able to add such files into version
|
||||||
control if connected to older Ghidra Server versions.
|
control if connected to older Ghidra Server versions.
|
||||||
|
|
||||||
**NOTE:** Ghidra Server: Due to potential Java version differences, it is
|
**NOTE:** Ghidra Server: Due to potential Java version differences, it is
|
||||||
|
@ -100,7 +100,7 @@ can also be used in headless mode with the new `-mirror` command line option.
|
||||||
## PyGhidra
|
## PyGhidra
|
||||||
PyGhidra 3.0.0 (compatible with Ghidra 12.0 and later) introduces many new Python-specific API
|
PyGhidra 3.0.0 (compatible with Ghidra 12.0 and later) introduces many new Python-specific API
|
||||||
methods with the goal of making the most common Ghidra tasks quick and easy, such as opening a
|
methods with the goal of making the most common Ghidra tasks quick and easy, such as opening a
|
||||||
project, getting a program, running a GhidraScript, etc. Legacy API fuctions such as
|
project, getting a program, and running a GhidraScript. Legacy API fuctions such as
|
||||||
`pyghidra.open_program()` and `pyghidra_run_script()` have been deprecated in favor of the new
|
`pyghidra.open_program()` and `pyghidra_run_script()` have been deprecated in favor of the new
|
||||||
methods. Below is an example program that showcases some of the new API functionality. See the
|
methods. Below is an example program that showcases some of the new API functionality. See the
|
||||||
PyGhidra library README for more information.
|
PyGhidra library README for more information.
|
||||||
|
@ -148,7 +148,7 @@ with pyghidra.open_project(os.environ["GHIDRA_PROJECT_DIR"], "ExampleProject", c
|
||||||
```
|
```
|
||||||
|
|
||||||
## Z3 Concolic Emulation and Symbolic Summary
|
## Z3 Concolic Emulation and Symbolic Summary
|
||||||
We've added an experimental Z3-based symbolic emulator, which runs as a "auxilliary" domain to the
|
We've added an experimental Z3-based symbolic emulator, which runs as an "auxilliary" domain to the
|
||||||
concrete emulator, effectively constructing what is commonly called a "concolic" emulator. The
|
concrete emulator, effectively constructing what is commonly called a "concolic" emulator. The
|
||||||
symbolic emulator creates Z3 expressions and branching constraints, but it only follows the path
|
symbolic emulator creates Z3 expressions and branching constraints, but it only follows the path
|
||||||
determined by concrete emulation. This is most easily accessed by installing the "SymbolicSummaryZ3"
|
determined by concrete emulation. This is most easily accessed by installing the "SymbolicSummaryZ3"
|
||||||
|
@ -166,7 +166,7 @@ our JIT-accelerated emulator into the GUI. Please see the **Notable API Changes*
|
||||||
[Change History](ChangeHistory.md). The goal is to facilitate integration by composition; whereas,
|
[Change History](ChangeHistory.md). The goal is to facilitate integration by composition; whereas,
|
||||||
it had previously required inheritance, which is now considered poor design. Essentially, we've
|
it had previously required inheritance, which is now considered poor design. Essentially, we've
|
||||||
introduced a set of callbacks that integrators can use to detect when certain things have happened
|
introduced a set of callbacks that integrators can use to detect when certain things have happened
|
||||||
in emulation, as well as offer some control of machine-state behavior, e.g., to facilitate lazily
|
in emulation, as well as offer some control of machine-state behavior; e.g., to facilitate lazily
|
||||||
loading from a snapshot.
|
loading from a snapshot.
|
||||||
|
|
||||||
Extensions that currently integrate via inheritance can continue to do so, but will still need to
|
Extensions that currently integrate via inheritance can continue to do so, but will still need to
|
||||||
|
|
|
@ -29,6 +29,6 @@
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="_Integration Test"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="_Integration Test"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ghidra.GhidraRun"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ghidra.GhidraRun"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="_Integration Test"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="_Integration Test"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:+IgnoreUnrecognizedVMOptions -Djava.system.class.loader=ghidra.GhidraClassLoader -Xshare:off -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Dsun.java2d.pmoffscreen=false -Dsun.java2d.xrender=true -Dsun.java2d.d3d=false -Xdock:name="Ghidra" -Dvisualvm.display.name=Ghidra -Dpython.console.encoding=UTF-8 -Djavax.xml.accessExternalDTD= -Djavax.xml.accessExternalSchema= -Djavax.xml.accessExternalStylesheet="/>
|
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:+IgnoreUnrecognizedVMOptions -Djava.system.class.loader=ghidra.GhidraClassLoader -Xshare:off -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Dsun.java2d.pmoffscreen=false -Dsun.java2d.xrender=true -Dsun.java2d.d3d=false -Xdock:name="Ghidra" -Dvisualvm.display.name=Ghidra -Dpython.console.encoding=UTF-8 -Djavax.xml.accessExternalDTD= -Djavax.xml.accessExternalSchema= -Djavax.xml.accessExternalStylesheet= --enable-native-access=ALL-UNNAMED"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Framework Utility}"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Framework Utility}"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
|
|
@ -31,5 +31,5 @@
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="Framework Utility"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="Framework Utility"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ghidra.GhidraRun"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ghidra.GhidraRun"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Framework Utility"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Framework Utility"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:+IgnoreUnrecognizedVMOptions -Djava.system.class.loader=ghidra.GhidraClassLoader -Xshare:off -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Dsun.java2d.pmoffscreen=false -Dsun.java2d.xrender=true -Dsun.java2d.d3d=false -Xdock:name="Ghidra" -Dvisualvm.display.name=Ghidra -Dpython.console.encoding=UTF-8 -Djavax.xml.accessExternalDTD= -Djavax.xml.accessExternalSchema= -Djavax.xml.accessExternalStylesheet="/>
|
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:+IgnoreUnrecognizedVMOptions -Djava.system.class.loader=ghidra.GhidraClassLoader -Xshare:off -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Dsun.java2d.pmoffscreen=false -Dsun.java2d.xrender=true -Dsun.java2d.d3d=false -Xdock:name="Ghidra" -Dvisualvm.display.name=Ghidra -Dpython.console.encoding=UTF-8 -Djavax.xml.accessExternalDTD= -Djavax.xml.accessExternalSchema= -Djavax.xml.accessExternalStylesheet= --enable-native-access=ALL-UNNAMED"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
|
|
@ -31,5 +31,5 @@
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="Framework Utility"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="Framework Utility"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ghidra.JShellRun"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="ghidra.JShellRun"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Framework Utility"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Framework Utility"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:+IgnoreUnrecognizedVMOptions -Djava.system.class.loader=ghidra.GhidraClassLoader -Xshare:off -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Dsun.java2d.pmoffscreen=false -Dsun.java2d.xrender=true -Dsun.java2d.d3d=false -Xdock:name="Ghidra" -Dvisualvm.display.name=Ghidra -Dpython.console.encoding=UTF-8 -Djavax.xml.accessExternalDTD= -Djavax.xml.accessExternalSchema= -Djavax.xml.accessExternalStylesheet="/>
|
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XX:+IgnoreUnrecognizedVMOptions -Djava.system.class.loader=ghidra.GhidraClassLoader -Xshare:off -Dfile.encoding=UTF8 -Duser.country=US -Duser.language=en -Dsun.java2d.pmoffscreen=false -Dsun.java2d.xrender=true -Dsun.java2d.d3d=false -Xdock:name="Ghidra" -Dvisualvm.display.name=Ghidra -Dpython.console.encoding=UTF-8 -Djavax.xml.accessExternalDTD= -Djavax.xml.accessExternalSchema= -Djavax.xml.accessExternalStylesheet= --enable-native-access=ALL-UNNAMED"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
|
|
@ -396,6 +396,7 @@ public class BundleStatusTableModel
|
||||||
columnDescriptor.addVisibleColumn(new BuildSummaryColumn());
|
columnDescriptor.addVisibleColumn(new BuildSummaryColumn());
|
||||||
columnDescriptor.addHiddenColumn(new OSGiStatusColumn());
|
columnDescriptor.addHiddenColumn(new OSGiStatusColumn());
|
||||||
columnDescriptor.addHiddenColumn(new BundleTypeColumn());
|
columnDescriptor.addHiddenColumn(new BundleTypeColumn());
|
||||||
|
columnDescriptor.addHiddenColumn(new BundleLocationId());
|
||||||
|
|
||||||
return columnDescriptor;
|
return columnDescriptor;
|
||||||
}
|
}
|
||||||
|
@ -549,6 +550,27 @@ public class BundleStatusTableModel
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class BundleLocationId extends Column<String> {
|
||||||
|
|
||||||
|
BundleLocationId() {
|
||||||
|
super("Bundle Location ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getValue(BundleStatus status, Settings settings, List<BundleStatus> data,
|
||||||
|
ServiceProvider serviceProvider0) throws IllegalArgumentException {
|
||||||
|
GhidraBundle bundle = bundleHost.getGhidraBundle(status.getFile());
|
||||||
|
if (bundle != null) {
|
||||||
|
String id = bundle.getLocationIdentifier();
|
||||||
|
if (id != null) {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private class BundleFileRenderer extends AbstractGColumnRenderer<ResourceFile> {
|
private class BundleFileRenderer extends AbstractGColumnRenderer<ResourceFile> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -45,6 +45,8 @@ import aQute.bnd.osgi.Clazz.QUERY;
|
||||||
import generic.io.NullPrintWriter;
|
import generic.io.NullPrintWriter;
|
||||||
import generic.jar.ResourceFile;
|
import generic.jar.ResourceFile;
|
||||||
import ghidra.app.script.*;
|
import ghidra.app.script.*;
|
||||||
|
import ghidra.framework.Application;
|
||||||
|
import ghidra.framework.ApplicationProperties;
|
||||||
import ghidra.util.Msg;
|
import ghidra.util.Msg;
|
||||||
import util.CollectionUtils;
|
import util.CollectionUtils;
|
||||||
import utilities.util.FileUtilities;
|
import utilities.util.FileUtilities;
|
||||||
|
@ -880,6 +882,13 @@ public class GhidraSourceBundle extends GhidraBundle {
|
||||||
|
|
||||||
analyzer.setProperty("Export-Package", "!*.private.*,!*.internal.*,*");
|
analyzer.setProperty("Export-Package", "!*.private.*,!*.internal.*,*");
|
||||||
|
|
||||||
|
String minJava =
|
||||||
|
Application.getApplicationProperty(ApplicationProperties.APPLICATION_JAVA_MIN_PROPERTY);
|
||||||
|
if (minJava != null) {
|
||||||
|
analyzer.setProperty("Require-Capability",
|
||||||
|
"osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version>=%s))\"".formatted(minJava));
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Manifest manifest;
|
Manifest manifest;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -66,12 +66,18 @@ public class VSCodeIntegrationOptionsPlugin extends Plugin implements Applicatio
|
||||||
*/
|
*/
|
||||||
private static File getDefaultVSCodeExecutable() {
|
private static File getDefaultVSCodeExecutable() {
|
||||||
return switch (OperatingSystem.CURRENT_OPERATING_SYSTEM) {
|
return switch (OperatingSystem.CURRENT_OPERATING_SYSTEM) {
|
||||||
case WINDOWS -> new File(System.getenv("LOCALAPPDATA"),
|
case WINDOWS:
|
||||||
|
File local = new File(System.getenv("LOCALAPPDATA"),
|
||||||
"Programs/Microsoft VS Code/bin/code.cmd");
|
"Programs/Microsoft VS Code/bin/code.cmd");
|
||||||
case MAC_OS_X -> new File(
|
File admin =
|
||||||
"/Applications/Visual Studio Code.app/Contents/MacOS/Electron");
|
new File(System.getenv("PROGRAMFILES"), "Microsoft VS Code/bin/code.cmd");
|
||||||
case LINUX -> new File("/usr/bin/code");
|
yield admin.exists() ? admin : local;
|
||||||
default -> null;
|
case MAC_OS_X:
|
||||||
|
yield new File("/Applications/Visual Studio Code.app/Contents/MacOS/Electron");
|
||||||
|
case LINUX:
|
||||||
|
yield new File("/usr/bin/code");
|
||||||
|
default:
|
||||||
|
yield null;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,9 @@ VMARGS=-Djavax.xml.accessExternalDTD=
|
||||||
VMARGS=-Djavax.xml.accessExternalSchema=
|
VMARGS=-Djavax.xml.accessExternalSchema=
|
||||||
VMARGS=-Djavax.xml.accessExternalStylesheet=
|
VMARGS=-Djavax.xml.accessExternalStylesheet=
|
||||||
|
|
||||||
|
# Enable native access (required by FlatLaf)
|
||||||
|
VMARGS=--enable-native-access=ALL-UNNAMED
|
||||||
|
|
||||||
# Settings directory used by the application to store application settings and data that persist
|
# Settings directory used by the application to store application settings and data that persist
|
||||||
# between application sessions, system reboots, and periodic system cleanup. Overridden values
|
# between application sessions, system reboots, and periodic system cleanup. Overridden values
|
||||||
# are required to be absolute paths. The current user name may be incorporated into the settings
|
# are required to be absolute paths. The current user name may be incorporated into the settings
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue