Better type blacklisting
This commit is contained in:
parent
49ef8d7148
commit
70c2881dbe
|
@ -0,0 +1,88 @@
|
||||||
|
basetsd.h
|
||||||
|
bink.h
|
||||||
|
cderr.h
|
||||||
|
commdlg.h
|
||||||
|
crtdefs.h
|
||||||
|
ctype.h
|
||||||
|
d3d8.h
|
||||||
|
d3d8caps.h
|
||||||
|
d3d8types.h
|
||||||
|
dde.h
|
||||||
|
ddeml.h
|
||||||
|
dlgs.h
|
||||||
|
excpt.h
|
||||||
|
file.h
|
||||||
|
float.h
|
||||||
|
guiddef.h
|
||||||
|
imm.h
|
||||||
|
io.h
|
||||||
|
jmorecfg.h
|
||||||
|
jpeglib.h
|
||||||
|
LstDef2.h
|
||||||
|
Izexpand.h
|
||||||
|
malloc.h
|
||||||
|
math.h
|
||||||
|
mbstring.h
|
||||||
|
mcx.h
|
||||||
|
mmsystem.h
|
||||||
|
mswsock.h
|
||||||
|
msxml.h
|
||||||
|
nb30.h
|
||||||
|
oleidl.h
|
||||||
|
oaidl.h
|
||||||
|
objbase.h
|
||||||
|
oleauto.h
|
||||||
|
ole2.h
|
||||||
|
objidl.h
|
||||||
|
process.h
|
||||||
|
propidl.h
|
||||||
|
prsht.h
|
||||||
|
qos.h
|
||||||
|
rad.h
|
||||||
|
rpc.h
|
||||||
|
rpcasync.h
|
||||||
|
rpcdce.h
|
||||||
|
rpcdcep.h
|
||||||
|
rpcndr.h
|
||||||
|
rpcnsi.h
|
||||||
|
rpcnsip.h
|
||||||
|
rpcnterr.h
|
||||||
|
servprov.h
|
||||||
|
shellapi.h
|
||||||
|
snddef.h
|
||||||
|
sound.h
|
||||||
|
stdarg.h
|
||||||
|
stdint.h
|
||||||
|
stdio.h
|
||||||
|
stdlib.h
|
||||||
|
string.h
|
||||||
|
time.h
|
||||||
|
timer.h
|
||||||
|
tvout.h
|
||||||
|
unknwn.h
|
||||||
|
urlmon.h
|
||||||
|
vadefs.h
|
||||||
|
verrsrc.h
|
||||||
|
winbase.h
|
||||||
|
wincon.h
|
||||||
|
wincrypt.h
|
||||||
|
windef.h
|
||||||
|
WinDef.h
|
||||||
|
winefs.h
|
||||||
|
winerror.h
|
||||||
|
wingdi.h
|
||||||
|
winioctl.h
|
||||||
|
winnetwk.h
|
||||||
|
winnls.h
|
||||||
|
winnt.h
|
||||||
|
winperf.h
|
||||||
|
winreg.h
|
||||||
|
winscard.h
|
||||||
|
winsmcrd.h
|
||||||
|
winsock.h
|
||||||
|
winsock2.h
|
||||||
|
winspool.h
|
||||||
|
winsvc.h
|
||||||
|
winuser.h
|
||||||
|
winver.h
|
||||||
|
wtypes.h
|
|
@ -517,7 +517,7 @@ public class DataTypeWriter {
|
||||||
this.writer.write(EOL);
|
this.writer.write(EOL);
|
||||||
this.writer.write(EOL);
|
this.writer.write(EOL);
|
||||||
} else {
|
} else {
|
||||||
this.writer.write("typedef enum " + enumName + " {");
|
this.writer.write("typedef enum " + enumName + "_ {");
|
||||||
String description = enumm.getDescription();
|
String description = enumm.getDescription();
|
||||||
if (description != null && description.length() != 0) {
|
if (description != null && description.length() != 0) {
|
||||||
var10000 = this.writer;
|
var10000 = this.writer;
|
||||||
|
|
|
@ -18,6 +18,7 @@ public class RecompileConfig {
|
||||||
// The output directory for the recompiled game
|
// The output directory for the recompiled game
|
||||||
public final String outputDir;
|
public final String outputDir;
|
||||||
public final String typeBlacklistPath;
|
public final String typeBlacklistPath;
|
||||||
|
public final String categoryPathBlacklistPath;
|
||||||
public final String functionBlacklistPath;
|
public final String functionBlacklistPath;
|
||||||
// The static memory block
|
// The static memory block
|
||||||
public final Address staticMemoryBlockStart;
|
public final Address staticMemoryBlockStart;
|
||||||
|
@ -60,6 +61,7 @@ public class RecompileConfig {
|
||||||
script.println("Output path: " + outputDir);
|
script.println("Output path: " + outputDir);
|
||||||
|
|
||||||
typeBlacklistPath = new File(outputDir, "type_blacklist.txt").toString();
|
typeBlacklistPath = new File(outputDir, "type_blacklist.txt").toString();
|
||||||
|
categoryPathBlacklistPath = new File(outputDir, "type_path_blacklist.txt").toString();
|
||||||
functionBlacklistPath = new File(outputDir, "function_blacklist.txt").toString();
|
functionBlacklistPath = new File(outputDir, "function_blacklist.txt").toString();
|
||||||
|
|
||||||
dirDecompAuto = new File(outputDir, "gh_auto");
|
dirDecompAuto = new File(outputDir, "gh_auto");
|
||||||
|
|
|
@ -8,10 +8,13 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ghidra.app.script.GhidraScript;
|
import ghidra.app.script.GhidraScript;
|
||||||
|
import ghidra.program.model.data.CategoryPath;
|
||||||
|
import ghidra.program.model.data.Composite;
|
||||||
import ghidra.program.model.data.DataType;
|
import ghidra.program.model.data.DataType;
|
||||||
import ghidra.program.model.data.EnumDataType;
|
import ghidra.program.model.data.EnumDataType;
|
||||||
import ghidra.program.model.data.ProgramBasedDataTypeManager;
|
import ghidra.program.model.data.ProgramBasedDataTypeManager;
|
||||||
import ghidra.program.model.data.Structure;
|
import ghidra.program.model.data.Structure;
|
||||||
|
import ghidra.program.model.data.TypeDef;
|
||||||
import ghidra.program.model.data.TypedefDataType;
|
import ghidra.program.model.data.TypedefDataType;
|
||||||
import ghidra.program.model.listing.Program;
|
import ghidra.program.model.listing.Program;
|
||||||
|
|
||||||
|
@ -28,7 +31,9 @@ public class TypeDumper {
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
ProgramBasedDataTypeManager dtm = currentProgram.getDataTypeManager();
|
ProgramBasedDataTypeManager dtm = currentProgram.getDataTypeManager();
|
||||||
|
|
||||||
HashSet<String> typeBlacklist = Utils.loadStructBlacklist(RecompileConfig.INSTANCE.typeBlacklistPath);
|
HashSet<String> typeBlacklist = Utils.loadSimpleBlacklist(RecompileConfig.INSTANCE.typeBlacklistPath);
|
||||||
|
HashSet<String> categoryPathBlacklist = Utils
|
||||||
|
.loadSimpleBlacklist(RecompileConfig.INSTANCE.categoryPathBlacklistPath);
|
||||||
|
|
||||||
if (typeBlacklist == null) {
|
if (typeBlacklist == null) {
|
||||||
script.println("Building struct blacklist from existing data types");
|
script.println("Building struct blacklist from existing data types");
|
||||||
|
@ -44,15 +49,45 @@ public class TypeDumper {
|
||||||
}
|
}
|
||||||
|
|
||||||
List<DataType> filteredTypes = new ArrayList<>();
|
List<DataType> filteredTypes = new ArrayList<>();
|
||||||
|
|
||||||
|
// Iterator<DataType> compIt = dtm.getAllDataTypes();
|
||||||
|
// while (compIt.hasNext()) {
|
||||||
|
// DataType comp = compIt.next();
|
||||||
|
// // script.println("Found: " + comp.getDisplayName() + " - " +
|
||||||
|
// // comp.getClass().getSimpleName());
|
||||||
|
|
||||||
|
// if (comp instanceof TypeDef) {
|
||||||
|
// if (comp.getDisplayName().startsWith("FIL_")) {
|
||||||
|
// script.println("Found: " + comp.getDisplayName() + " - " + comp.getName() + "
|
||||||
|
// - " + comp.getClass().getSimpleName());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // if (comp.getName() == "FIL_tdstConcatFile") {
|
||||||
|
// // // script.println("Found: " + dt.getDisplayName() + " - " +
|
||||||
|
// // // dt.getClass().getSimpleName());
|
||||||
|
// // throw new Exception("Found: " + comp.getDisplayName() + " - " +
|
||||||
|
// comp.getClass().getSimpleName());
|
||||||
|
// // }
|
||||||
|
// }
|
||||||
|
|
||||||
Iterator<DataType> it = dtm.getAllDataTypes();
|
Iterator<DataType> it = dtm.getAllDataTypes();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
DataType dt = it.next();
|
DataType dt = it.next();
|
||||||
if (dt instanceof Structure || dt instanceof TypedefDataType || dt instanceof EnumDataType) {
|
if (typeBlacklist.contains(dt.getDisplayName()))
|
||||||
if (typeBlacklist.contains(dt.getDisplayName()))
|
continue;
|
||||||
continue;
|
CategoryPath catPath = dt.getCategoryPath();
|
||||||
script.println("Adding: " + dt.getDisplayName() + " - " +
|
if (catPath.getPathElements().length > 0 && categoryPathBlacklist.contains(catPath.getPathElements()[0]))
|
||||||
dt.getClass().getSimpleName());
|
continue;
|
||||||
|
|
||||||
|
script.println("Type: " + dt.getDisplayName() + " - CatPath: " + dt.getCategoryPath());
|
||||||
|
|
||||||
|
// if (dt.getName().equals("ImageBaseOffset32"))
|
||||||
|
// throw new Exception("Found: " + dt.getDisplayName() + " - " + catPath.getPathElements()[0] + " - " + dt.getClass().getSimpleName());
|
||||||
|
|
||||||
|
if (dt instanceof Structure || dt instanceof TypeDef || dt instanceof EnumDataType) {
|
||||||
|
// script.println("Adding: " + dt.getDisplayName() + " - " +
|
||||||
|
// dt.getClass().getSimpleName());
|
||||||
filteredTypes.add(dt);
|
filteredTypes.add(dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class Utils {
|
||||||
return name.replaceAll("[^a-zA-Z0-9_]", "_");
|
return name.replaceAll("[^a-zA-Z0-9_]", "_");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HashSet<String> loadStructBlacklist(String path) {
|
public static HashSet<String> loadSimpleBlacklist(String path) {
|
||||||
File file = new File(path);
|
File file = new File(path);
|
||||||
HashSet<String> structBlacklist = new HashSet<>();
|
HashSet<String> structBlacklist = new HashSet<>();
|
||||||
try (Scanner scanner = new Scanner(file)) {
|
try (Scanner scanner = new Scanner(file)) {
|
||||||
|
|
Loading…
Reference in New Issue