代码如何捕获异常?

时间:2012-12-07 08:52:58

标签: c++ visual-studio exception assembly exception-handling

代码如何捕获异常(try,catch(...))?

push 0FFFFFFFFh
...
mov eax, dword ptr fs:[00000000h]
...
mov dword ptr fs:[00000000h],eax  
mov dword ptr [ebp-10h],esp

这个代码在函数“head”中的含义是什么,它捕获了异常?

mov dword ptr [ebp-4], 0

这个(在“尝试”的头部)?函数没有任何局部变量。

功能:

int SUM(int a, int b)
{
    try{}
    catch(...){}
    return 0;
}

FS细分市场中的哪些商店?

2 个答案:

答案 0 :(得分:7)

fs:[0]中存储的值是指向EXCEPTION_REGISTRATION结构的链接列表的指针。请阅读此处了解更多详情:

A Crash Course on the Depths of Win32 Structured Exception Handling, MSJ January 1997

答案 1 :(得分:1)

MSVC如何实现异常(在x86上):https://www.openrce.org/articles/full_view/21

这包括SEH(__try/__catch/__finally)和C ++(try/catch)异常实现。

MSVC(x64)和GCC(Linux / iOS)如何实现异常处理:http://www.hexblog.com/?p=704