mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 02:39:44 +02:00
GP-42 Initial implementation of Pdb symbol store / symbol servers
This commit is contained in:
parent
df72f24b58
commit
425667e640
93 changed files with 7715 additions and 3874 deletions
|
@ -20,7 +20,6 @@ import java.io.IOException;
|
|||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import docking.DockingWindowManager;
|
||||
import docking.widgets.OptionDialog;
|
||||
import docking.widgets.dialogs.MultiLineMessageDialog;
|
||||
import ghidra.app.plugin.core.analysis.*;
|
||||
import ghidra.app.plugin.core.datamgr.archive.DuplicateIdException;
|
||||
|
@ -29,8 +28,6 @@ import ghidra.app.util.bin.format.pdb.PdbException;
|
|||
import ghidra.app.util.bin.format.pdb.PdbParser;
|
||||
import ghidra.app.util.bin.format.pdb2.pdbreader.*;
|
||||
import ghidra.app.util.importer.MessageLog;
|
||||
import ghidra.app.util.pdb.PdbLocator;
|
||||
import ghidra.app.util.pdb.PdbProgramAttributes;
|
||||
import ghidra.app.util.pdb.pdbapplicator.*;
|
||||
import ghidra.framework.options.Options;
|
||||
import ghidra.program.model.address.AddressSetView;
|
||||
|
@ -45,19 +42,21 @@ class LoadPdbTask extends Task {
|
|||
private final Program program;
|
||||
private final boolean useMsDiaParser;
|
||||
private final PdbApplicatorControl control; // PDB Universal Parser only
|
||||
private boolean debugLogging;
|
||||
|
||||
LoadPdbTask(Program program, File pdbFile, boolean useMsDiaParser, PdbApplicatorControl control,
|
||||
DataTypeManagerService service) {
|
||||
boolean debugLogging, DataTypeManagerService service) {
|
||||
super("Load PDB", true, false, true, true);
|
||||
this.program = program;
|
||||
this.pdbFile = pdbFile;
|
||||
this.useMsDiaParser = useMsDiaParser;
|
||||
this.control = control;
|
||||
this.debugLogging = debugLogging;
|
||||
this.service = service;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(final TaskMonitor monitor) {
|
||||
public void run(TaskMonitor monitor) {
|
||||
|
||||
WrappingTaskMonitor wrappedMonitor = new WrappingTaskMonitor(monitor) {
|
||||
@Override
|
||||
|
@ -134,7 +133,7 @@ class LoadPdbTask extends Task {
|
|||
|
||||
private boolean parseWithMsDiaParser(MessageLog log, TaskMonitor monitor)
|
||||
throws IOException, CancelledException {
|
||||
PdbParser parser = new PdbParser(pdbFile, program, service, true, monitor);
|
||||
PdbParser parser = new PdbParser(pdbFile, program, service, true, true, monitor);
|
||||
try {
|
||||
parser.parse();
|
||||
parser.openDataTypeArchives();
|
||||
|
@ -147,44 +146,19 @@ class LoadPdbTask extends Task {
|
|||
return false;
|
||||
}
|
||||
|
||||
// NOTE: OptionDialog will not display an empty line
|
||||
private static final String BLANK_LINE = " \n";
|
||||
|
||||
private boolean parseWithNewParser(MessageLog log, TaskMonitor monitor)
|
||||
throws IOException, CancelledException {
|
||||
|
||||
PdbLog.setEnabled(debugLogging);
|
||||
|
||||
PdbReaderOptions pdbReaderOptions = new PdbReaderOptions(); // use defaults
|
||||
|
||||
PdbApplicatorOptions pdbApplicatorOptions = new PdbApplicatorOptions();
|
||||
|
||||
pdbApplicatorOptions.setProcessingControl(control);
|
||||
|
||||
PdbProgramAttributes programAttributes = new PdbProgramAttributes(program);
|
||||
|
||||
try (AbstractPdb pdb = ghidra.app.util.bin.format.pdb2.pdbreader.PdbParser.parse(
|
||||
pdbFile.getAbsolutePath(), pdbReaderOptions, monitor)) {
|
||||
|
||||
PdbIdentifiers identifiers = pdb.getIdentifiers();
|
||||
if (!PdbLocator.verifyPdbSignature(programAttributes, identifiers)) {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Selected PDB does not match program's PDB specification!\n");
|
||||
builder.append(BLANK_LINE);
|
||||
builder.append("Program's PDB specification:\n");
|
||||
builder.append(PdbLocator.formatPdbIdentifiers(programAttributes));
|
||||
builder.append(BLANK_LINE);
|
||||
builder.append("Selected PDB file specification:\n");
|
||||
builder.append(
|
||||
PdbLocator.formatPdbIdentifiers(pdbFile.getAbsolutePath(), identifiers));
|
||||
builder.append(BLANK_LINE);
|
||||
builder.append("Do you wish to force load this PDB?");
|
||||
|
||||
if (OptionDialog.YES_OPTION != OptionDialog.showYesNoDialog(null,
|
||||
"Confirm PDB Load", builder.toString())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
monitor.setMessage("PDB: Parsing " + pdbFile + "...");
|
||||
pdb.deserialize(monitor);
|
||||
PdbApplicator applicator = new PdbApplicator(pdbFile.getAbsolutePath(), pdb);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue