Дизасеблер: створення/знищення фрейму SEH

Створення фрейму (початок блоку __try) виглядає так:

1 push 004060d0h // data value... 2 push 004014a0h // ...and function pointer (__except_handler3) 3 mov eax, fs:[0] // accessing TIB - adding a node to the top... 4 push eax // ...of the cjain 5 mov dword ptr fs:[0], esp // where actual node is

Цей код може бути оптимізовано і в результаті перемішано з іншим кодом:

1 mov eax, fs:[0] 2 push ebp 3 mov ebp, esp 4 push 0ffh 5 push 77f3d1e8h 6 push __except_handler3 7 push eax 8 mov eax, [BaseStaticServerData] 9 mov dword ptr fs:[0], esp

Знищення фрейму компілюється у такий код:

1 mov ecx, dword ptr [ebp-10h] 2 mov dword ptr fs:[0], ecx