mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-11-10 14:11:59 +00:00
Merge remote-tracking branch 'origin/Ghidra_11.1'
This commit is contained in:
commit
8dd83c7be5
@ -4,15 +4,17 @@
|
|||||||
<HEAD>
|
<HEAD>
|
||||||
<TITLE> Ghidra What's New</TITLE>
|
<TITLE> Ghidra What's New</TITLE>
|
||||||
<STYLE type="text/css" name="text/css">
|
<STYLE type="text/css" name="text/css">
|
||||||
li { font-family:times new roman; font-size:14pt; font-family:times new roman; font-size:14pt; margin-bottom: 8px; }
|
body { margin-bottom: 50px; margin-left: 10px; margin-right: 10px; margin-top: 10px; } /* some padding to improve readability */
|
||||||
h1 { color:#000080; font-family:times new roman; font-size:28pt; font-style:italic; font-weight:bold; text-align:center; color:#000080; font-family:times new roman; }
|
li { font-family:times new roman; font-size:14pt; margin-bottom: 8px; }
|
||||||
h2 { padding-top:10px; color:#984c4c; font-family:times new roman; color:#984c4c; font-family:times new roman; font-size:18pt; font-weight:bold; }
|
h1 { color:#000080; font-family:times new roman; font-size:36pt; font-style:italic; font-weight:bold; text-align:center; }
|
||||||
h3 { margin-left:40px; padding-top:10px; font-family:times new roman; font-family:times new roman; font-size:14pt; font-weight:bold; }
|
h2 { margin: 10px; margin-top: 20px; color:#984c4c; font-family:times new roman; font-size:18pt; font-weight:bold; }
|
||||||
h4 { margin-left:40px; padding-top:10px; font-family:times new roman; font-family:times new roman; font-size:14pt; font-weight:bold; }
|
h3 { margin-left: 10px; margin-top: 20px; color:#0000ff; font-family:times new roman; `font-size:14pt; font-weight:bold; }
|
||||||
p { margin-left:40px; font-family:times new roman; font-size:14pt; }
|
h4 { margin-left: 10px; margin-top: 20px; font-family:times new roman; font-size:14pt; font-style:italic; }
|
||||||
table, th, td { border: 1px solid black; border-collapse: collapse; font-size:10pt; }
|
p { margin-left: 40px; font-family:times new roman; font-size:14pt; }
|
||||||
td { font-family:times new roman; font-size:14pt; padding-left:10px; padding-right:10px; text-align:left; vertical-align:top; }
|
blockquote p { margin-left: 10px; }
|
||||||
th { font-family:times new roman; font-size:14pt; font-weight:bold; padding-left:10px; padding-right:10px; text-align:left; }
|
table { margin-left: 20px; margin-top: 10px; width: 80%;}
|
||||||
|
td { font-family:times new roman; font-size:14pt; vertical-align: top; }
|
||||||
|
th { font-family:times new roman; font-size:14pt; font-weight:bold; background-color: #EDF3FE; }
|
||||||
code { color:black; font-family:courier new; font-size: 12pt; }
|
code { color:black; font-family:courier new; font-size: 12pt; }
|
||||||
span.code { font-family:courier new font-size: 14pt; color:#000000; }
|
span.code { font-family:courier new font-size: 14pt; color:#000000; }
|
||||||
.gcode { font-family: courier new; font-weight: bold; font-size: 85%; }
|
.gcode { font-family: courier new; font-weight: bold; font-size: 85%; }
|
||||||
@ -87,21 +89,25 @@
|
|||||||
<P> We are introducing a new debugger connection system called Trace RMI. This is replacing the older system,
|
<P> We are introducing a new debugger connection system called Trace RMI. This is replacing the older system,
|
||||||
which we are calling the Recorder system.</P>
|
which we are calling the Recorder system.</P>
|
||||||
|
|
||||||
<P>The most noticeable difference will be a new menu for launching targets. It is very similar to the previous system, but with some key differences:
|
<P>The most noticeable difference will be a new menu for launching targets. It is very similar to the previous system, but with some key differences:</P>
|
||||||
<UL style="padding-left:100px">
|
<BLOCKQUOTE>
|
||||||
|
<UL>
|
||||||
<LI>Connection and launching are no longer separated into two different configuration panels. There is one panel to launch your target.</LI>
|
<LI>Connection and launching are no longer separated into two different configuration panels. There is one panel to launch your target.</LI>
|
||||||
<LI>Ghidra will no longer attempt to launch blindly with defaults. The first time you launch a program, you must select a launcher and configure it.</LI>
|
<LI>Ghidra will no longer attempt to launch blindly with defaults. The first time you launch a program, you must select a launcher and configure it.</LI>
|
||||||
<LI>After the initial launch you can re-launch with a previous configuration, without requiring a prompt.</LI>
|
<LI>After the initial launch you can re-launch with a previous configuration, without requiring a prompt.</LI>
|
||||||
</UL>
|
</UL>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
|
||||||
<P>The next most noticeable difference will be the replacement of the Interpreter window with the Terminal window. This is a proper VT-100
|
<P>The next most noticeable difference will be the replacement of the Interpreter window with the Terminal window. This is a proper VT-100
|
||||||
terminal emulator, so the experience will be much like, if not identical to, how you'd debug in a plain terminal, except embedded into and integrated with Ghidra.
|
terminal emulator, so the experience will be much like, if not identical to, how you'd debug in a plain terminal, except embedded into and integrated with Ghidra.
|
||||||
Some notable improvements that brings:</P>
|
Some notable improvements that brings:</P>
|
||||||
<UL style="padding-left:100px">
|
<BLOCKQUOTE>
|
||||||
|
<UL>
|
||||||
<LI>Tab completion, history, etc., should all work as implemented by the connected debugger's command-line interface.</LI>
|
<LI>Tab completion, history, etc., should all work as implemented by the connected debugger's command-line interface.</LI>
|
||||||
<LI>When the target is running, it has proper I/O in that terminal.</LI>
|
<LI>When the target is running, it has proper I/O in that terminal.</LI>
|
||||||
<LI>If connecting goes poorly for some reason, the debugger's command-line interface is likely still operational.</LI>
|
<LI>If connecting goes poorly for some reason, the debugger's command-line interface is likely still operational.</LI>
|
||||||
</UL>
|
</UL>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
|
||||||
<P>You may also notice the replacement of the Debugger Targets window with the Connection Manager window, and the replacement
|
<P>You may also notice the replacement of the Debugger Targets window with the Connection Manager window, and the replacement
|
||||||
of the Objects window with the Model window. These are operationally very similar to their previous counterparts.</P>
|
of the Objects window with the Model window. These are operationally very similar to their previous counterparts.</P>
|
||||||
@ -169,20 +175,21 @@
|
|||||||
|
|
||||||
<P>There have been many improvements to keyboard only actions and navigation in Ghidra. These changes will be welcome for those who
|
<P>There have been many improvements to keyboard only actions and navigation in Ghidra. These changes will be welcome for those who
|
||||||
prefer to use the keyboard as much as possible and those needing better accessibility. Improvements include:</P>
|
prefer to use the keyboard as much as possible and those needing better accessibility. Improvements include:</P>
|
||||||
<UL style="padding-left:100px">
|
<BLOCKQUOTE>
|
||||||
|
<UL>
|
||||||
<LI>Standard keyboard navigation should now work in most component windows and dialogs. In general, <span class="gtitle">Tab</span> and <span class="gtitle"><CTRL> Tab</span> will
|
<LI>Standard keyboard navigation should now work in most component windows and dialogs. In general, <span class="gtitle">Tab</span> and <span class="gtitle"><CTRL> Tab</span> will
|
||||||
move focus to the next focusable component and <span class="gtitle"><SHIFT> Tab</span> and <span class="gtitle"><CTRL><SHIFT> Tab</span> will move to the
|
move focus to the next focusable component and <span class="gtitle"><SHIFT> Tab</span> and <span class="gtitle"><CTRL><SHIFT> Tab</span> will move to the
|
||||||
previous focusable component. <span class="gtitle">Tab</span> and <span class="gtitle"><SHIFT> Tab</span> do not always work as some components use those keys internally, but
|
previous focusable component. <span class="gtitle">Tab</span> and <span class="gtitle"><SHIFT> Tab</span> do not always work as some components use those keys internally, but
|
||||||
<span class="gtitle"><CTRL> Tab,</span> and <span class="gtitle"><SHIFT><CTRL> Tab</span> should work universally.</LI>
|
<span class="gtitle"><CTRL> Tab,</span> and <span class="gtitle"><SHIFT><CTRL> Tab</span> should work universally.</LI>
|
||||||
<LI>Ghidra now provides some convenient keyboard shortcut actions for transferring focus:</LI>
|
<LI>Ghidra now provides some convenient keyboard shortcut actions for transferring focus:</LI>
|
||||||
<UL style="padding-left:50px">
|
<UL>
|
||||||
<LI><span class="gtitle"><CTRL> F3</span> - Transfers focus to the next window or dialog.</LI>
|
<LI><span class="gtitle"><CTRL> F3</span> - Transfers focus to the next window or dialog.</LI>
|
||||||
<LI><span class="gtitle"><CTRL><SHIFT> F3</span> - Transfers focus to the previous window or dialog.</LI>
|
<LI><span class="gtitle"><CTRL><SHIFT> F3</span> - Transfers focus to the previous window or dialog.</LI>
|
||||||
<LI><span class="gtitle"><CTRL> J</span> - Transfers focus to the next titled dockable component (titled windows).</LI>
|
<LI><span class="gtitle"><CTRL> J</span> - Transfers focus to the next titled dockable component (titled windows).</LI>
|
||||||
<LI><span class="gtitle"><CTRL><SHIFT> J</span> - Transfers focus to the previous titled dockable component.</LI>
|
<LI><span class="gtitle"><CTRL><SHIFT> J</span> - Transfers focus to the previous titled dockable component.</LI>
|
||||||
</UL>
|
</UL>
|
||||||
<LI>All actions can now be accessed via a searchable dialog.</LI>
|
<LI>All actions can now be accessed via a searchable dialog.</LI>
|
||||||
<UL style="padding-left:50px">
|
<UL>
|
||||||
<LI>Pressing <span class="gtitle"><CTRL> 3</span> will bring up the actions dialog with the local toolbar, popup and keyboard actions.</LI>
|
<LI>Pressing <span class="gtitle"><CTRL> 3</span> will bring up the actions dialog with the local toolbar, popup and keyboard actions.</LI>
|
||||||
<LI>Pressing <span class="gtitle"><CTRL> 3</span> a second time will add in all the global actions. </LI>
|
<LI>Pressing <span class="gtitle"><CTRL> 3</span> a second time will add in all the global actions. </LI>
|
||||||
<LI>Pressing <span class="gtitle"><CTRL> 3</span> a third time will add in the disabled actions as well.</LI>
|
<LI>Pressing <span class="gtitle"><CTRL> 3</span> a third time will add in the disabled actions as well.</LI>
|
||||||
@ -190,6 +197,7 @@
|
|||||||
arrow keys allow you to select an action and enter will invoke the selected action </LI>
|
arrow keys allow you to select an action and enter will invoke the selected action </LI>
|
||||||
</UL>
|
</UL>
|
||||||
</UL>
|
</UL>
|
||||||
|
</BLOCKQUOTE>
|
||||||
|
|
||||||
<H2>Other Improvements </H2>
|
<H2>Other Improvements </H2>
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ public class DemanglerCmd extends BackgroundCommand<Program> {
|
|||||||
// tell a mangled from a non-mangled symbol.
|
// tell a mangled from a non-mangled symbol.
|
||||||
// Msg.debug(this, "Unable to demangle name: " + mangled);
|
// Msg.debug(this, "Unable to demangle name: " + mangled);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) { e.printStackTrace();
|
||||||
// Demangler IndexOutOfBoundsException that we're not sure how to fix
|
// Demangler IndexOutOfBoundsException that we're not sure how to fix
|
||||||
setStatusMsg("Unable to demangle symbol: " + mangled + " at " + addr + ". Message: " +
|
setStatusMsg("Unable to demangle symbol: " + mangled + " at " + addr + ". Message: " +
|
||||||
e.getMessage());
|
e.getMessage());
|
||||||
|
@ -18,6 +18,8 @@ package ghidra.app.util.demangler.gnu;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import generic.jar.ResourceFile;
|
import generic.jar.ResourceFile;
|
||||||
import ghidra.app.util.demangler.*;
|
import ghidra.app.util.demangler.*;
|
||||||
import ghidra.app.util.opinion.ElfLoader;
|
import ghidra.app.util.opinion.ElfLoader;
|
||||||
@ -106,8 +108,12 @@ public class GnuDemangler implements Demangler {
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
GnuDemanglerNativeProcess process = getNativeProcess(options);
|
GnuDemanglerNativeProcess process = getNativeProcess(options);
|
||||||
String demangled = process.demangle(mangled).trim();
|
String demangled = process.demangle(mangled);
|
||||||
if (mangled.equals(demangled) || demangled.length() == 0) {
|
if (demangled == null) {
|
||||||
|
throw new DemangledException(false);
|
||||||
|
}
|
||||||
|
demangled = demangled.trim();
|
||||||
|
if (demangled.length() == 0 || mangled.equals(demangled)) {
|
||||||
throw new DemangledException(true);
|
throw new DemangledException(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ package ghidra.app.util.demangler.gnu;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
@ -166,35 +165,30 @@ public class GnuDemanglerNativeProcess {
|
|||||||
|
|
||||||
String[] command = buildCommand();
|
String[] command = buildCommand();
|
||||||
IOException exc = null;
|
IOException exc = null;
|
||||||
String err = "";
|
|
||||||
isDisposed = true;
|
isDisposed = true;
|
||||||
try {
|
try {
|
||||||
process = Runtime.getRuntime().exec(command);
|
process = Runtime.getRuntime().exec(command);
|
||||||
// Give process time to load and report possible error
|
|
||||||
process.waitFor(200, TimeUnit.MILLISECONDS);
|
|
||||||
InputStream in = process.getInputStream();
|
InputStream in = process.getInputStream();
|
||||||
OutputStream out = process.getOutputStream();
|
OutputStream out = process.getOutputStream();
|
||||||
reader = new BufferedReader(new InputStreamReader(in));
|
reader = new BufferedReader(new InputStreamReader(in));
|
||||||
writer = new PrintWriter(out);
|
writer = new PrintWriter(out);
|
||||||
isDisposed = !process.isAlive();
|
|
||||||
if (isDisposed) {
|
checkForError(command);
|
||||||
err = new String(process.getErrorStream().readAllBytes());
|
|
||||||
process.destroy();
|
isDisposed = false;
|
||||||
process = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
exc = e;
|
exc = e;
|
||||||
}
|
}
|
||||||
catch (InterruptedException e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
finally {
|
finally {
|
||||||
if (isDisposed) {
|
if (isDisposed) {
|
||||||
|
if (process != null) {
|
||||||
|
process.destroy();
|
||||||
|
}
|
||||||
if (!getAndSetErrorDisplayed()) {
|
if (!getAndSetErrorDisplayed()) {
|
||||||
String errorDetail = err;
|
String errorDetail = "";
|
||||||
if (exc != null) {
|
if (exc != null) {
|
||||||
errorDetail = exc.getMessage() + "\n" + errorDetail;
|
errorDetail = exc.getMessage();
|
||||||
}
|
}
|
||||||
errorDetail = "GNU Demangler executable may not be compatible with your system and may need to be rebuilt.\n" +
|
errorDetail = "GNU Demangler executable may not be compatible with your system and may need to be rebuilt.\n" +
|
||||||
"(see InstallationGuide.html, 'Building Native Components').\n\n" +
|
"(see InstallationGuide.html, 'Building Native Components').\n\n" +
|
||||||
@ -207,8 +201,6 @@ public class GnuDemanglerNativeProcess {
|
|||||||
throw exc;
|
throw exc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkForError(command);
|
|
||||||
|
|
||||||
String key = getKey(applicationName, options);
|
String key = getKey(applicationName, options);
|
||||||
processesByName.put(key, this);
|
processesByName.put(key, this);
|
||||||
|
Loading…
Reference in New Issue
Block a user