VCamD.ax!CFactoryTemplate::CreateInstance() + 0x3f bytes
> VCamD.ax!CClassFactory::CreateInstance() + 0x7f bytes
What's 0x7f
and 0x3f
?
VCamD.ax!CFactoryTemplate::CreateInstance() + 0x3f bytes
> VCamD.ax!CClassFactory::CreateInstance() + 0x7f bytes
What's 0x7f
and 0x3f
?
Those values are the offset of the instruction pointer from the start of the listed function.
It's a way of expressing which assembly instruction is currently being executed in the function. Similar to having the the current source code line highlighted in the editor. Except that the offset is at the assembly level not the source code level.
You got .pdb files that were stripped. Their source code file and line number info was removed. Typical for example for .pdb files you can get from the Microsoft symbol server.
Which is okay, you can't get the source code anyway. Without the line number info, the debugger falls back to using the 'closest' symbol whose address it does have available, typically the function entry point, and adds the offset of the call instruction.
Sometimes you get bogus information if debug info is missing for long stretches of code. That 'closest' symbol is in no way related to the original code. Any time the offset gets to be larger than, oh, 0x2000 then you ought to downplay the relevance of the displayed symbol name. There are a couple of places in the Windows code where you actually see the name of a string variable. The stack trace you posted has high confidence, those offsets are small.
If it's at the top of the stack, then it's the offset of the instruction pointer relative to the given symbol. So if the top stack frame is VCamD.ax!CClassFactory::CreateInstance() + 0x7f bytes
, and VCamD.ax!CClassFactory::CreateInstance()
is at location 0x3000
in memory (fictional obviously), then EIP
is currently 0x307f
. This shows you how far into the function you are.
If it's further up the stack then it's the return offset from the start of the given symbol. So if VCamD.ax!CFactoryTemplate::CreateInstance()
called VCamD.ax!CClassFactory::CreateInstance()
, and VCamD.ax!CFactoryTemplate::CreateInstance()
is at location 0x4000
, then when VCamD.ax!CClassFactory::CreateInstance()
returns, EIP
will be at 0x403f
.
One important thing to notice though is that if you see something like somedll!SomeFunc() + 0x5f33 bytes
, you can be pretty certain that this is NOT the correct symbol. Since functions are rarely 0x5f33
bytes long, you can see that EIP
is simply in a place that the debugger doesn't have symbols for.