From ee0cb94312ae2f1092644a49c50517fe926d7e84 Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Mon, 16 Mar 2020 15:10:03 -0500 Subject: [PATCH] ghidra: add special case for vector that is not a bit vector --- reversing/import_df_structures.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/reversing/import_df_structures.java b/reversing/import_df_structures.java index 2991bee1a..39a4f1efa 100644 --- a/reversing/import_df_structures.java +++ b/reversing/import_df_structures.java @@ -76,6 +76,8 @@ public class import_df_structures extends GhidraScript { if (target == null) target = DataType.DEFAULT; + if (BooleanDataType.dataType.isEquivalent(target)) + target = dtInt8; var ptr = dtm.getPointer(target, currentProgram.getDefaultPointerSize()); var name = "vector<" + target.getName() + ">"; @@ -247,7 +249,7 @@ public class import_df_structures extends GhidraScript } private interface IHasFields { - List getFields(); + List getFields(); } private static abstract class NameHaver implements IHasName @@ -1192,9 +1194,13 @@ public class import_df_structures extends GhidraScript private void labelVTables() throws Exception { updateProgressMajor("Labelling vtables..."); + monitor.initialize(symbolTable.vtables.size()); + int i = 0; for (var vt : symbolTable.vtables) { + monitor.setProgress(i++); + if (!vt.hasName) continue; @@ -1224,7 +1230,8 @@ public class import_df_structures extends GhidraScript private void labelGlobals() throws Exception { updateProgressMajor("Labelling globals..."); - + monitor.initialize(codegen.globals.size()); + var addrs = new HashMap(); for (var g : symbolTable.globals) @@ -1237,8 +1244,11 @@ public class import_df_structures extends GhidraScript addrs.put(g.name, toAddr(g.value)); } + int i = 0; for (var gobj : codegen.globals) { + monitor.setProgress(i++); + if (!gobj.hasName) continue; if (!addrs.containsKey(gobj.name)) @@ -1247,7 +1257,7 @@ public class import_df_structures extends GhidraScript var dt = getDataType(gobj.item); if (dt == null) throw new Exception("missing data type for global " + gobj.name); - + labelData(addrs.get(gobj.name), dt, gobj.name, gobj.item.size); } }