2

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

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

这段代码在捕获异常的函数“头”中是什么意思?

mov dword ptr [ebp-4], 0

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

功能:

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

FS段有什么商店?

4

2 回答 2

7

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

Win32 结构化异常处理深度速成课程,MSJ 1997 年 1 月

于 2012-12-07T08:58:42.117 回答
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

于 2012-12-07T17:04:56.847 回答