mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
Merge remote-tracking branch 'origin/GP-3772_dev747368_string_xlat_auto_eol_comment'
This commit is contained in:
commit
4bd74e2f94
2 changed files with 55 additions and 11 deletions
|
@ -183,6 +183,10 @@ public class DisplayableEol {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] getPreviewForNoReferences() {
|
private String[] getPreviewForNoReferences() {
|
||||||
|
String translatedStringValue = getPreviewForString();
|
||||||
|
if (translatedStringValue != null) {
|
||||||
|
return new String[] { translatedStringValue };
|
||||||
|
}
|
||||||
String undefinedPointerText = getUndefinedPointer(codeUnit);
|
String undefinedPointerText = getUndefinedPointer(codeUnit);
|
||||||
if (undefinedPointerText != null) {
|
if (undefinedPointerText != null) {
|
||||||
return new String[] { undefinedPointerText };
|
return new String[] { undefinedPointerText };
|
||||||
|
@ -190,6 +194,17 @@ public class DisplayableEol {
|
||||||
return new String[0];
|
return new String[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getPreviewForString() {
|
||||||
|
if (codeUnit instanceof Data data && StringDataInstance.isString(data)) {
|
||||||
|
StringDataInstance sdi = StringDataInstance.getStringDataInstance(data);
|
||||||
|
if (sdi.hasTranslatedValue()) {
|
||||||
|
// show the opposite value
|
||||||
|
return sdi.getStringRepresentation(sdi.isShowTranslation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isValidReference(Program program, Reference reference) {
|
private boolean isValidReference(Program program, Reference reference) {
|
||||||
|
|
||||||
if (!reference.isMemoryReference()) {
|
if (!reference.isMemoryReference()) {
|
||||||
|
|
|
@ -15,15 +15,14 @@
|
||||||
*/
|
*/
|
||||||
package ghidra.program.model.data;
|
package ghidra.program.model.data;
|
||||||
|
|
||||||
import static ghidra.program.model.data.EndianSettingsDefinition.ENDIAN;
|
import static ghidra.program.model.data.EndianSettingsDefinition.*;
|
||||||
import static ghidra.program.model.data.RenderUnicodeSettingsDefinition.RENDER;
|
import static ghidra.program.model.data.RenderUnicodeSettingsDefinition.*;
|
||||||
import static ghidra.program.model.data.StringLayoutEnum.*;
|
import static ghidra.program.model.data.StringLayoutEnum.*;
|
||||||
import static ghidra.program.model.data.TranslationSettingsDefinition.TRANSLATION;
|
import static ghidra.program.model.data.TranslationSettingsDefinition.*;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import java.nio.*;
|
import java.nio.*;
|
||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
import generic.stl.Pair;
|
import generic.stl.Pair;
|
||||||
import ghidra.docking.settings.*;
|
import ghidra.docking.settings.*;
|
||||||
|
@ -759,10 +758,33 @@ public class StringDataInstance {
|
||||||
* <p>
|
* <p>
|
||||||
* Example (quotes are part of result): {@code "Test\tstring",01,02,"Second\npart",00}
|
* Example (quotes are part of result): {@code "Test\tstring",01,02,"Second\npart",00}
|
||||||
*
|
*
|
||||||
* @return formatted String
|
* @return formatted String, or the translated value if present and the "show translated"
|
||||||
|
* setting is enabled for this string's location
|
||||||
*/
|
*/
|
||||||
public String getStringRepresentation() {
|
public String getStringRepresentation() {
|
||||||
return getStringRep(StringRenderBuilder.DOUBLE_QUOTE, StringRenderBuilder.DOUBLE_QUOTE);
|
return showTranslation && translatedValue != null
|
||||||
|
? getTranslatedStringRepresentation(translatedValue)
|
||||||
|
: getStringRep(StringRenderBuilder.DOUBLE_QUOTE, StringRenderBuilder.DOUBLE_QUOTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a formatted version of the string returned by {@link #getStringValue()}.
|
||||||
|
* <p>
|
||||||
|
* The resulting string will be formatted with quotes around the parts that contain plain ASCII
|
||||||
|
* alpha characters (and simple escape sequences), and out-of-range byte-ish values listed as
|
||||||
|
* comma separated hex-encoded values:
|
||||||
|
* <p>
|
||||||
|
* Example (quotes are part of result): {@code "Test\tstring",01,02,"Second\npart",00}
|
||||||
|
*
|
||||||
|
* @param originalOrTranslated boolean flag, if true returns the representation of the
|
||||||
|
* string value, if false returns the representation of the translated value
|
||||||
|
* @return formatted String
|
||||||
|
*/
|
||||||
|
public String getStringRepresentation(boolean originalOrTranslated) {
|
||||||
|
return originalOrTranslated
|
||||||
|
? getStringRep(StringRenderBuilder.DOUBLE_QUOTE, StringRenderBuilder.DOUBLE_QUOTE)
|
||||||
|
: translatedValue != null ? getTranslatedStringRepresentation(translatedValue)
|
||||||
|
: UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getStringRep(char quoteChar, char quoteCharMulti) {
|
private String getStringRep(char quoteChar, char quoteCharMulti) {
|
||||||
|
@ -771,10 +793,6 @@ public class StringDataInstance {
|
||||||
return UNKNOWN;
|
return UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showTranslation && translatedValue != null) {
|
|
||||||
return getTranslatedStringRepresentation(translatedValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] stringBytes = convertPaddedToUnpadded(getStringBytes());
|
byte[] stringBytes = convertPaddedToUnpadded(getStringBytes());
|
||||||
if (stringBytes == null) {
|
if (stringBytes == null) {
|
||||||
return UNKNOWN_DOT_DOT_DOT;
|
return UNKNOWN_DOT_DOT_DOT;
|
||||||
|
@ -911,6 +929,17 @@ public class StringDataInstance {
|
||||||
return s.substring(0, lastGoodChar + 1);
|
return s.substring(0, lastGoodChar + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this string has a translated value that could
|
||||||
|
* be displayed.
|
||||||
|
*
|
||||||
|
* @return boolean true if translated value is present, false if no
|
||||||
|
* value is present
|
||||||
|
*/
|
||||||
|
public boolean hasTranslatedValue() {
|
||||||
|
return translatedValue != null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value of the stored
|
* Returns the value of the stored
|
||||||
* {@link TranslationSettingsDefinition#getTranslatedValue(Data) translated settings}
|
* {@link TranslationSettingsDefinition#getTranslatedValue(Data) translated settings}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue