As far as I know, everything you've said is 100% correct. I've experienced the same issues. In fact, I was working on this exact problem in the background when a friend sent me a link to this post.
There are actually three related issues here. First, prior to IDA 7.2, IDA's type system did not have a concept of a virtual function table per se. Meaning, ...
I finally solved my problem.
DIA stands for Debug Interface Access and is the component used to correctly read PDB files.
The msdia90.dll used doesn't seem to have been installed with the VS 2013 redistributables.
I had to install the 2008 redistributables to get the correct dll.
I solved my problem thanks to http://download.tuxfamily.org/...
dynamic_cast requires a runtime check that the cast is valid at execution time and the usual implementation uses RTTI (Run-time type information) attached to all classes participating in the casts. However, since it's not easy to narrow down the classes that may be possibly casted, in practice the compiler emits RTTI for all polymorphic classes (i.e. those ...
You can use PDB downloader which doesn’t require any installation https://docs.microsoft.com/en-us/archive/blogs/webtopics/pdb-downloader. Or you could use its source below to see how you could recreate with PowerShell or some other method.
You can also just copy the WinDBg files from a machine where it’s ...
While sdb files was created to translate imports that are referenced by ordinal instead of by name (see "Exporting Functions from a DLL by Ordinal Rather Than by Name"), pdb files are something entirely different.
Program Database (PDB) file or DBG file are produced by the compiler. PDB files are used by developers to debug their program ...
Old versions of link.exe supported the /debugtype argument that used these options:
use COFF format
use CodeView or Program Database format (depends on /pdb option)
use both COFF and CodeView/Program Database formats
According to the MSDN docs for Visual Studio 2008's linker, that option was no ...
So all the steps above are correct the way they were described. The only thing I have done wrong was, that my target DLL was modified by Mono.Cecil before (I already had read and wrote my target DLL and modified it by this way). So the DLL and the PDB was not the same anymore.
So if you want to run Mono.Cecil just once and you get the exception above do the ...
To load a PDB for your own DLL, as already mentioned, use File -> Load file -> PDB file.
To load a PDB for a Microsoft DLL from the public PDB server:
Set _NT_SYMBOL_PATH environment variable as described on MSDN.
For example, to srv*C:\symbols*https://msdl.microsoft.com/download/symbols
In IDA, Go to File -> Load ...
While PDBs will certainly help in decompilation (e.g. with you may be able to recover names of functions, classes, and maybe even local variables), they don't contain the original source code and other things unnecessary for debugging (such as comments).
pdb is self contained so you can drag and drop it and the debugger can utilize it
but src files are just path references
either relative or absolute paths
so either you have to copy them to a local directory
(think about feasibility of this with a project that has thousands of src files) or
set up the directory structure ( a bit easier if you did not compile ...