Метод ассемблерных вставок
В качестве "боевого" примера рассмотрим классический антиотладочный код, встречающийся во многих статьях и книгах:
push offset my_she ; назначаем свой обработчик структурных исключений
push dword ptr fs:[0] ; сохраняем старый обработчик в цепочке
mov fs:[0],esp ; регистрируем новый обработчик
pushf ; толкаем в стек флаги
or dword ptr[esp],100h ; взводим трассировочный бит
popf ; выталкиваем обновленный бит в регистр флагов,
; заставляя ЦП возбуждать исключение на каждой команде
xor eax,eax ; без отладчика после xor
возбуждается исключение и
; управление получает my_seh, а в eax будет не нуль
; под отладчиком исключение молчаливо "съедается"
my_seh:
test eax,eax ; если отладчика нет, eax
!= 0
jnz debugger_is_present