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");