例如,在消息中:
foo.exe 中 0x757bd36f 处的第一次机会异常:Microsoft C++ 异常:_ASExceptionInfo 位于内存位置 0x001278cc..
0x757bd36f 和 0x001278cc 是什么意思?我认为 0x757bd36f 表示抛出异常时的 EIP,但是第二个数字呢?
例如,在消息中:
foo.exe 中 0x757bd36f 处的第一次机会异常:Microsoft C++ 异常:_ASExceptionInfo 位于内存位置 0x001278cc..
0x757bd36f 和 0x001278cc 是什么意思?我认为 0x757bd36f 表示抛出异常时的 EIP,但是第二个数字呢?
正如您所推测的,第一个是异常发生时的 EIP(或 RIP,对于 64-it 代码)。
做一些测试,第二个数字是被捕获的异常对象的地址。但是请记住,这与抛出的异常对象的地址不同。例如,我写了以下一段测试代码:
#include <iostream>
#include <conio.h>
class XXX { } xxx;
void thrower() {
throw xxx;
}
int main() {
try {
std::cout << "Address of xxx: " << (void *)&xxx << "\n";
thrower();
}
catch(XXX const &x) {
std::cout << "Address of x: " << (void *)&x << "\n";
}
getch();
return 0;
}
至少在我的测试中,VS 在其“第一次机会异常”消息中显示的第二个地址与我x
在上面的代码中获得的地址匹配。