Basic I/O

Note

The documentation has a new home: Check it out!

Every PDB image interaction is done through classes defined by the AsmResolver.Symbols.Pdb namespace:

using AsmResolver.Symbols.Pdb;

Creating a new PDB Image

Creating a new image can be done by instantiating a PdbImage class:

var image = new PdbImage();

Opening a PDB Image

Opening a PDB Image can be done through one of the FromXXX methods from the PdbImage class:

byte[] raw = ...
var image = PdbImage.FromBytes(raw);
var image = PdbImage.FromFile(@"C:\myfile.pdb");
MsfFile msfFile = ...
var image = PdbImage.FromFile(msfFile);
BinaryStreamReader reader = ...
var image = PdbImage.FromReader(reader);

If you want to read large files (+100MB), consider using memory mapped I/O instead:

using var service = new MemoryMappedFileService();
var image = PdbImage.FromFile(service.OpenFile(@"C:\myfile.pdb"));

Writing a PDB Image

Writing PDB images directly is currently not supported yet, however there are plans to making this format fully serializable.

Creating a new MSF File

Multi-Stream Format (MSF) files are files that form the backbone structure of all PDB images. AsmResolver fully supports this lower level type of access to MSF files using the MsfFile class.

To create a new MSF file, use one of its constructors:

var msfFile = new MsfFile();
var msfFile = new MsfFile(blockSize: 4096);

Opening an MSF File

Opening existing MSF files can be done in a very similar fashion as reading a PDB Image:

byte[] raw = ...
var msfFile = MsfFile.FromBytes(raw);
var msfFile = MsfFile.FromFile(@"C:\myfile.pdb");
BinaryStreamReader reader = ...
var msfFile = MsfFile.FromReader(reader);

Similar to reading PDB images, if you want to read large files (+100MB), consider using memory mapped I/O instead:

using var service = new MemoryMappedFileService();
var msfFile = MsfFile.FromFile(service.OpenFile(@"C:\myfile.pdb"));

Writing an MSF File

Writing an MSF file can be done through one of the Write method overloads.

msfFile.Write(@"C:\myfile.patched.pdb");