GP-1645 Added relative pointer action in the decompiler

This commit is contained in:
caheckman
2022-01-03 12:46:32 -05:00
committed by ghidra1
parent ca410b1274
commit ec5b6aada7
4 changed files with 540 additions and 3 deletions
@@ -812,6 +812,9 @@ public class DecompilerProvider extends NavigatableComponentProviderAdapter
RetypeLocalAction retypeLocalAction = new RetypeLocalAction();
setGroupInfo(retypeLocalAction, variableGroup, subGroupPosition++);
CreatePointerRelative createRelativeAction = new CreatePointerRelative();
setGroupInfo(createRelativeAction, variableGroup, subGroupPosition++);
RetypeGlobalAction retypeGlobalAction = new RetypeGlobalAction();
setGroupInfo(retypeGlobalAction, variableGroup, subGroupPosition++);
@@ -991,6 +994,7 @@ public class DecompilerProvider extends NavigatableComponentProviderAdapter
addLocalAction(setEquateAction);
addLocalAction(removeEquateAction);
addLocalAction(retypeLocalAction);
addLocalAction(createRelativeAction);
addLocalAction(retypeGlobalAction);
addLocalAction(retypeReturnAction);
addLocalAction(retypeFieldAction);
@@ -59,7 +59,11 @@ public class RetypeLocalAction extends AbstractDecompilerAction {
setKeyBindingData(new KeyBindingData(KeyEvent.VK_L, InputEvent.CTRL_DOWN_MASK));
}
private void retypeSymbol(Program program, HighSymbol highSymbol, Varnode exactSpot,
protected RetypeLocalAction(String name) {
super(name);
}
protected void retypeSymbol(Program program, HighSymbol highSymbol, Varnode exactSpot,
DataType dt, PluginTool tool) {
HighFunction hfunction = highSymbol.getHighFunction();
@@ -260,7 +260,7 @@ public class PcodeDataTypeManager {
* @param offset is the offset into the base data-type
* @return the inner data-type
*/
private DataType findSubType(DataType base, int offset) {
public static DataType findPointerRelativeInner(DataType base, int offset) {
if (base instanceof TypeDef) {
base = ((TypeDef) base).getBaseDataType();
}
@@ -297,7 +297,7 @@ public class PcodeDataTypeManager {
}
resBuf.append(">\n");
DataType parent = pointer.getDataType();
DataType ptrto = findSubType(parent, (int) offset);
DataType ptrto = findPointerRelativeInner(parent, (int) offset);
buildTypeRef(resBuf, ptrto, 1);
buildTypeRef(resBuf, parent, 1);
resBuf.append("\n<off>").append(offset).append("</off>\n");