mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 09:49:23 +02:00
GP-5321: Fixing PE debug coff symbol NPE
This commit is contained in:
parent
a6809a3529
commit
5452e14db4
2 changed files with 25 additions and 27 deletions
|
@ -16,6 +16,8 @@
|
|||
package ghidra.app.util.bin.format.pe.debug;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ghidra.app.util.bin.BinaryReader;
|
||||
import ghidra.app.util.bin.format.pe.NTHeader;
|
||||
|
@ -27,21 +29,19 @@ public class DebugCOFFSymbolTable {
|
|||
private int ptrToSymbolTable;
|
||||
private int symbolCount;
|
||||
|
||||
private DebugCOFFSymbol [] symbols;
|
||||
private List<DebugCOFFSymbol> symbols = new ArrayList<>();
|
||||
|
||||
public DebugCOFFSymbolTable(BinaryReader reader, DebugCOFFSymbolsHeader coffHeader, int offset)
|
||||
throws IOException {
|
||||
this.ptrToSymbolTable = coffHeader.getFirstSymbolLVA() + offset;
|
||||
this.symbolCount = coffHeader.getNumberOfSymbols();
|
||||
|
||||
//TODO:
|
||||
//should symbol table info in NT Header agree with info in COFF Header?
|
||||
//TODO: should symbol table info in NT Header agree with info in COFF Header?
|
||||
|
||||
if (symbolCount > 0 && symbolCount < NTHeader.MAX_SANE_COUNT) {
|
||||
symbols = new DebugCOFFSymbol[symbolCount];
|
||||
if (symbolCount < NTHeader.MAX_SANE_COUNT) {
|
||||
for (int i = 0; i < symbolCount; ++i) {
|
||||
symbols[i] = new DebugCOFFSymbol(reader,
|
||||
ptrToSymbolTable + (i * DebugCOFFSymbol.IMAGE_SIZEOF_SYMBOL), this);
|
||||
symbols.add(new DebugCOFFSymbol(reader,
|
||||
ptrToSymbolTable + (i * DebugCOFFSymbol.IMAGE_SIZEOF_SYMBOL), this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,10 +51,9 @@ public class DebugCOFFSymbolTable {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the COFF symbols defined in this COFF symbol table.
|
||||
* @return the COFF symbols defined in this COFF symbol table
|
||||
* {@return the COFF symbols defined in this COFF symbol table}
|
||||
*/
|
||||
public DebugCOFFSymbol [] getSymbols() {
|
||||
public List<DebugCOFFSymbol> getSymbols() {
|
||||
return symbols;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -345,9 +345,8 @@ abstract class AbstractPeDebugLoader extends AbstractOrdinalSupportLoader {
|
|||
if (dcst == null) {
|
||||
return;
|
||||
}
|
||||
DebugCOFFSymbol[] symbols = dcst.getSymbols();
|
||||
int errorCount = 0;
|
||||
for (DebugCOFFSymbol symbol : symbols) {
|
||||
for (DebugCOFFSymbol symbol : dcst.getSymbols()) {
|
||||
if (monitor.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue