Как код ловит исключения?

Как код перехватывает исключения (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;
}

Какой магазин в сегменте ФС?

2

Решение

Значение хранится в fs:[0] это указатель на связанный список EXCEPTION_REGISTRATION структур. Читайте здесь для более подробной информации:

Ускоренный курс по глубине структурной обработки исключений Win32, MSJ, январь 1997 г.

7

Другие решения

Как 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

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector