mirror of
https://github.com/NationalSecurityAgency/ghidra
synced 2024-08-28 05:20:21 +00:00
GP-2662 - Paste hex in search memory window
This commit is contained in:
parent
79e239f690
commit
e3ed010914
|
@ -580,10 +580,10 @@ class MemSearchDialog extends DialogComponentProvider {
|
||||||
memoryBlockGroup.add(loadedBlocks);
|
memoryBlockGroup.add(loadedBlocks);
|
||||||
memoryBlockGroup.add(allBlocks);
|
memoryBlockGroup.add(allBlocks);
|
||||||
|
|
||||||
loadedBlocks.setToolTipText(HTMLUtilities.toHTML(
|
loadedBlocks.setToolTipText(HTMLUtilities
|
||||||
"Only searches memory blocks that are loaded in a running executable.\n " +
|
.toHTML("Only searches memory blocks that are loaded in a running executable.\n " +
|
||||||
"Ghidra now includes memory blocks for other data such as section headers.\n" +
|
"Ghidra now includes memory blocks for other data such as section headers.\n" +
|
||||||
"This option exludes these OTHER (non loaded) blocks."));
|
"This option exludes these OTHER (non loaded) blocks."));
|
||||||
allBlocks.setToolTipText(
|
allBlocks.setToolTipText(
|
||||||
"Searches all memory blocks including blocks that are not actually loaded in a running executable");
|
"Searches all memory blocks including blocks that are not actually loaded in a running executable");
|
||||||
|
|
||||||
|
@ -710,9 +710,9 @@ class MemSearchDialog extends DialogComponentProvider {
|
||||||
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
|
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
|
||||||
clearStatusText();
|
clearStatusText();
|
||||||
|
|
||||||
// allow pasting numbers in the forms like 0xABC or ABCh
|
// allow pasting numbers in the forms like 0xABC or ABCh
|
||||||
str = removeNumberBasePrefixAndSuffix(str);
|
str = removeNumberBasePrefixAndSuffix(str);
|
||||||
|
|
||||||
String currentText = getText(0, getLength());
|
String currentText = getText(0, getLength());
|
||||||
String beforeOffset = currentText.substring(0, offs);
|
String beforeOffset = currentText.substring(0, offs);
|
||||||
String afterOffset = currentText.substring(offs, currentText.length());
|
String afterOffset = currentText.substring(offs, currentText.length());
|
||||||
|
@ -791,28 +791,32 @@ class MemSearchDialog extends DialogComponentProvider {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String removeNumberBasePrefixAndSuffix(String str) {
|
private String removeNumberBasePrefixAndSuffix(String str) {
|
||||||
if (!(currentFormat instanceof HexSearchFormat || currentFormat instanceof BinarySearchFormat)) {
|
if (!(currentFormat instanceof HexSearchFormat ||
|
||||||
|
currentFormat instanceof BinarySearchFormat)) {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
String numMaybe = str.strip();
|
String numMaybe = str.strip();
|
||||||
String lowercase = numMaybe.toLowerCase();
|
String lowercase = numMaybe.toLowerCase();
|
||||||
if (currentFormat instanceof HexSearchFormat) {
|
if (currentFormat instanceof HexSearchFormat) {
|
||||||
if (lowercase.startsWith("0x")) {
|
if (lowercase.startsWith("0x")) {
|
||||||
numMaybe = numMaybe.substring(2);
|
numMaybe = numMaybe.substring(2);
|
||||||
} else if (lowercase.startsWith("$")) {
|
}
|
||||||
|
else if (lowercase.startsWith("$")) {
|
||||||
numMaybe = numMaybe.substring(1);
|
numMaybe = numMaybe.substring(1);
|
||||||
} else if (lowercase.endsWith("h")) {
|
}
|
||||||
|
else if (lowercase.endsWith("h")) {
|
||||||
numMaybe = numMaybe.substring(0, numMaybe.length() - 1);
|
numMaybe = numMaybe.substring(0, numMaybe.length() - 1);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (lowercase.startsWith("0b")) {
|
if (lowercase.startsWith("0b")) {
|
||||||
numMaybe = numMaybe.substring(2);
|
numMaybe = numMaybe.substring(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the resultant number looks valid for insertion (i.e. not empty)
|
// check if the resultant number looks valid for insertion (i.e. not empty)
|
||||||
if (!numMaybe.isEmpty()) {
|
if (!numMaybe.isEmpty()) {
|
||||||
return numMaybe;
|
return numMaybe;
|
||||||
|
|
|
@ -15,8 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.app.plugin.core.searchmem;
|
package ghidra.app.plugin.core.searchmem;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
|
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
|
@ -99,8 +98,7 @@ public class MnemonicSearchPluginTest extends AbstractGhidraHeadedIntegrationTes
|
||||||
|
|
||||||
performAction(searchMnemonicOperandsNoConstAction, cb.getProvider(), true);
|
performAction(searchMnemonicOperandsNoConstAction, cb.getProvider(), true);
|
||||||
|
|
||||||
MemSearchDialog dialog =
|
MemSearchDialog dialog = waitForDialogComponent(MemSearchDialog.class);
|
||||||
waitForDialogComponent(tool.getToolFrame(), MemSearchDialog.class, 2000);
|
|
||||||
assertNotNull(dialog);
|
assertNotNull(dialog);
|
||||||
Container component = dialog.getComponent();
|
Container component = dialog.getComponent();
|
||||||
|
|
||||||
|
@ -121,8 +119,7 @@ public class MnemonicSearchPluginTest extends AbstractGhidraHeadedIntegrationTes
|
||||||
|
|
||||||
performAction(searchMnemonicNoOperandsNoConstAction, cb.getProvider(), true);
|
performAction(searchMnemonicNoOperandsNoConstAction, cb.getProvider(), true);
|
||||||
|
|
||||||
MemSearchDialog dialog =
|
MemSearchDialog dialog = waitForDialogComponent(MemSearchDialog.class);
|
||||||
waitForDialogComponent(tool.getToolFrame(), MemSearchDialog.class, 2000);
|
|
||||||
assertNotNull(dialog);
|
assertNotNull(dialog);
|
||||||
Container component = dialog.getComponent();
|
Container component = dialog.getComponent();
|
||||||
|
|
||||||
|
@ -143,8 +140,7 @@ public class MnemonicSearchPluginTest extends AbstractGhidraHeadedIntegrationTes
|
||||||
|
|
||||||
performAction(searchMnemonicOperandsConstAction, cb.getProvider(), true);
|
performAction(searchMnemonicOperandsConstAction, cb.getProvider(), true);
|
||||||
|
|
||||||
MemSearchDialog dialog =
|
MemSearchDialog dialog = waitForDialogComponent(MemSearchDialog.class);
|
||||||
waitForDialogComponent(tool.getToolFrame(), MemSearchDialog.class, 2000);
|
|
||||||
assertNotNull(dialog);
|
assertNotNull(dialog);
|
||||||
Container component = dialog.getComponent();
|
Container component = dialog.getComponent();
|
||||||
|
|
||||||
|
@ -160,7 +156,7 @@ public class MnemonicSearchPluginTest extends AbstractGhidraHeadedIntegrationTes
|
||||||
/**
|
/**
|
||||||
* Tests that when multiple regions are selected, the user is notified via
|
* Tests that when multiple regions are selected, the user is notified via
|
||||||
* pop-up that this is not acceptable.
|
* pop-up that this is not acceptable.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testMultipleSelection() {
|
public void testMultipleSelection() {
|
||||||
|
@ -178,10 +174,10 @@ public class MnemonicSearchPluginTest extends AbstractGhidraHeadedIntegrationTes
|
||||||
// Now invoke the menu option we want to test.
|
// Now invoke the menu option we want to test.
|
||||||
performAction(searchMnemonicOperandsConstAction, cb.getProvider(), false);
|
performAction(searchMnemonicOperandsConstAction, cb.getProvider(), false);
|
||||||
|
|
||||||
// Here's the main assert: If the code recognizes that we have multiple selection, the
|
// Here's the main assert: If the code recognizes that we have multiple selection, the
|
||||||
// MemSearchDialog will NOT be displayed (an error message pops up instead). So verify that
|
// MemSearchDialog will NOT be displayed (an error message pops up instead). So verify that
|
||||||
// the dialog is null and we're ok.
|
// the dialog is null and we're ok.
|
||||||
Window errorDialog = waitForWindow("Mnemonic Search Error", 2000);
|
Window errorDialog = waitForWindow("Mnemonic Search Error");
|
||||||
assertNotNull(errorDialog);
|
assertNotNull(errorDialog);
|
||||||
errorDialog.setVisible(false);
|
errorDialog.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue