"first-chance exception..."消息中的十六进制数字是什么意思?

What do the hex numbers in the "first-chance exception..." messages mean?

本文关键字:是什么 意思 十六进制数字 first-chance exception 消息      更新时间:2023-10-16

例如,在消息中:

foo.exe中0x757bd36f处的首次机会异常:Microsoft C++异常:_ASExceptionInfo位于内存位置0x001278cc。。

0x757bd36f和0x001278cc是什么意思?我认为0x757bd36f意味着抛出异常时的EIP,但第二个数字呢?

正如您所推测的,第一个是发生异常时的EIP(或RIP,对于64位代码)。

在进行一些测试时,第二个数字是被捕获的异常对象的地址。但是,请记住,这与抛出的异常对象的地址不同。例如,我编写了以下测试代码:

#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获得的地址匹配。