Как код перехватывает исключения (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:[0]
это указатель на связанный список EXCEPTION_REGISTRATION
структур. Читайте здесь для более подробной информации:
Ускоренный курс по глубине структурной обработки исключений Win32, MSJ, январь 1997 г.
Как 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