mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 10:19:23 +02:00
GP-1827 - Fix NPE for null PDB DBI; static symbol/type parsing methods help remedy
This commit is contained in:
parent
07a9878b94
commit
d86b60e6b2
19 changed files with 655 additions and 537 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue