Merge remote-tracking branch 'origin/Ghidra_11.1'

This commit is contained in:
Ryan Kurtz 2024-06-07 16:00:20 -04:00
commit 8dd83c7be5
4 changed files with 41 additions and 35 deletions

View File

@ -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">&lt;CTRL&gt; 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">&lt;CTRL&gt; Tab</span> will
move focus to the next focusable component and <span class="gtitle">&lt;SHIFT&gt; Tab</span> and <span class="gtitle">&lt;CTRL&gt;&lt;SHIFT&gt; Tab</span> will move to the move focus to the next focusable component and <span class="gtitle">&lt;SHIFT&gt; Tab</span> and <span class="gtitle">&lt;CTRL&gt;&lt;SHIFT&gt; Tab</span> will move to the
previous focusable component. <span class="gtitle">Tab</span> and <span class="gtitle">&lt;SHIFT&gt; 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">&lt;SHIFT&gt; Tab</span> do not always work as some components use those keys internally, but
<span class="gtitle">&lt;CTRL&gt; Tab,</span> and <span class="gtitle">&lt;SHIFT&gt;&lt;CTRL&gt; Tab</span> should work universally.</LI> <span class="gtitle">&lt;CTRL&gt; Tab,</span> and <span class="gtitle">&lt;SHIFT&gt;&lt;CTRL&gt; 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">&lt;CTRL&gt; F3</span> - Transfers focus to the next window or dialog.</LI> <LI><span class="gtitle">&lt;CTRL&gt; F3</span> - Transfers focus to the next window or dialog.</LI>
<LI><span class="gtitle">&lt;CTRL&gt;&lt;SHIFT&gt; F3</span> - Transfers focus to the previous window or dialog.</LI> <LI><span class="gtitle">&lt;CTRL&gt;&lt;SHIFT&gt; F3</span> - Transfers focus to the previous window or dialog.</LI>
<LI><span class="gtitle">&lt;CTRL&gt; J</span> - Transfers focus to the next titled dockable component (titled windows).</LI> <LI><span class="gtitle">&lt;CTRL&gt; J</span> - Transfers focus to the next titled dockable component (titled windows).</LI>
<LI><span class="gtitle">&lt;CTRL&gt;&lt;SHIFT&gt; J</span> - Transfers focus to the previous titled dockable component.</LI> <LI><span class="gtitle">&lt;CTRL&gt;&lt;SHIFT&gt; 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">&lt;CTRL&gt; 3</span> will bring up the actions dialog with the local toolbar, popup and keyboard actions.</LI> <LI>Pressing <span class="gtitle">&lt;CTRL&gt; 3</span> will bring up the actions dialog with the local toolbar, popup and keyboard actions.</LI>
<LI>Pressing <span class="gtitle">&lt;CTRL&gt; 3</span> a second time will add in all the global actions. </LI> <LI>Pressing <span class="gtitle">&lt;CTRL&gt; 3</span> a second time will add in all the global actions. </LI>
<LI>Pressing <span class="gtitle">&lt;CTRL&gt; 3</span> a third time will add in the disabled actions as well.</LI> <LI>Pressing <span class="gtitle">&lt;CTRL&gt; 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>

View File

@ -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());

View File

@ -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);
} }

View File

@ -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);