Ассемблирование без секретов

Метод ассемблерных вставок


В качестве "боевого" примера рассмотрим классический антиотладочный код, встречающийся во многих статьях и книгах:

       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



Содержание раздела