GP-1827 - Fix NPE for null PDB DBI; static symbol/type parsing methods help remedy

This commit is contained in:
ghizard 2022-04-13 15:26:10 -04:00
parent 07a9878b94
commit d86b60e6b2
19 changed files with 655 additions and 537 deletions

View file

@ -122,8 +122,8 @@ public class PdbQuery {
TaskMonitor monitor = script.getMonitor();
monitor.initialize(num);
println(script, "Searching " + num + " PDB data type components...");
for (int indexNumber =
tpi.getTypeIndexMin(); indexNumber < tpi.getTypeIndexMaxExclusive(); indexNumber++) {
for (int indexNumber = tpi.getTypeIndexMin(); indexNumber < tpi
.getTypeIndexMaxExclusive(); indexNumber++) {
monitor.checkCanceled();
RecordNumber recordNumber = RecordNumber.typeRecordNumber(indexNumber);
AbstractMsType typeRecord = pdb.getTypeRecord(recordNumber);
@ -161,8 +161,8 @@ public class PdbQuery {
TaskMonitor monitor = script.getMonitor();
monitor.initialize(num);
println(script, "Searching " + num + " PDB item type components...");
for (int indexNumber =
ipi.getTypeIndexMin(); indexNumber < ipi.getTypeIndexMaxExclusive(); indexNumber++) {
for (int indexNumber = ipi.getTypeIndexMin(); indexNumber < ipi
.getTypeIndexMaxExclusive(); indexNumber++) {
monitor.checkCanceled();
RecordNumber recordNumber = RecordNumber.itemRecordNumber(indexNumber);
AbstractMsType typeRecord = pdb.getTypeRecord(recordNumber);
@ -188,17 +188,21 @@ public class PdbQuery {
public static void searchSymbols(GhidraScript script, AbstractPdb pdb, String searchString)
throws CancelledException {
PdbDebugInfo debugInfo = pdb.getDebugInfo();
if (debugInfo == null) {
return;
}
StringBuilder results = new StringBuilder();
results.append('\n');
int numModules = pdb.getDebugInfo().getNumModules();
int numModules = debugInfo.getNumModules();
TaskMonitor monitor = script.getMonitor();
int numSymbols = 0;
for (int module = 0; module <= numModules; module++) {
monitor.checkCanceled();
try {
Map<Long, AbstractMsSymbol> symbols =
pdb.getDebugInfo().getModuleSymbolsByOffset(module);
Map<Long, AbstractMsSymbol> symbols = debugInfo.getModuleSymbolsByOffset(module);
numSymbols += symbols.size();
}
catch (PdbException e) {
@ -211,8 +215,7 @@ public class PdbQuery {
for (int module = 0; module <= numModules; module++) {
monitor.checkCanceled();
try {
Map<Long, AbstractMsSymbol> symbols =
pdb.getDebugInfo().getModuleSymbolsByOffset(module);
Map<Long, AbstractMsSymbol> symbols = debugInfo.getModuleSymbolsByOffset(module);
numSymbols += symbols.size();
for (Map.Entry<Long, AbstractMsSymbol> entry : symbols.entrySet()) {
monitor.checkCanceled();