SEH обработчик в стеке...почему не работатет

Тема в разделе "WASM.WIN32", создана пользователем zhorik, 14 авг 2009.

  1. zhorik

    zhorik New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    11
    Помогите разобраться, почему если seh обработчик запихнуть в стек, то он не срабатывает, т.е. до labbegin дело не доходит соовсем...в чем дело?

    собсна код:
    Код (Text):
    1.       push  dword ptr [exh+4]
    2.       push  dword ptr [exh]
    3.       push  esp ; указатель на обработчик который находится в стеке
    4.       push  fs:[0]      
    5.       mov   fs:[0],esp
    6.       xor   eax,eax
    7.       mov   dword ptr [eax],0
    8.    
    9. labbegin:
    10.       mov   esp,[esp+8]
    11.       pop   fs:[0]
    12.       add   esp,8
    13.  
    14.       invoke Beep,1000,100
    15.       invoke ExitProcess,0
    16.  
    17. exh:
    18.   push offset labbegin
    19.   ret
    А ВОТ ТАК ГЛАВНОЕ РАБОТАЕТ:
    Код (Text):
    1.       push   offset exh     ; указатель на обработчик который находится в коде
    2.       push   fs:[0]      
    3.       mov    fs:[0],esp
    4.       xor    eax,eax
    5.       mov    dword ptr [eax],0
    6.    
    7. labbegin:
    8.       mov   esp,[esp+8]
    9.       pop   fs:[0]
    10.       add   esp,8
    11.  
    12.       invoke Beep,1000,100
    13.       invoke ExitProcess,0
    14.  
    15. exh:
    16.   push offset labbegin
    17.   ret
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    1) зачем такой изврат.
    2) а стек-то выполнять можно? атрибутики проверьте.
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
  4. zhorik

    zhorik New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    11
    такой изврат нужно для защиты от дизассемблирования и отладки...там все ксорится по 10 раз...
    извините за ламерский вопрос... а где атрибуты стека находятся?
     
  5. IceT

    IceT IceT

    Публикаций:
    0
    Регистрация:
    13 авг 2009
    Сообщения:
    233
    Адрес:
    RU
    аяй
     
  6. zhorik

    zhorik New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    11
    IceT ???
    leo спасибо за предоставленную информацию....очень жаль что DEP все портит...
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    zhorik
    Разреши запись в секцию кода VirtualProtect'ом и ксорь себе наздоровье ;)

    Ну он только нач.адрес обработчика проверяет, поэтому если очень хочется, то можно основное тело обработчика запихнуть в стек, а в секции кода оставить пару инструкций, передающих управление на стек. Но учти, что на компах с хардварным DEP-ом нужно будет разрешить исполнение кода в стеке тем же VirtualProtect-ом
     
  8. zhorik

    zhorik New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    11
    leo

    да у секции кода уже стоит атрибут на запись....

    но всё равно, спасибо тебе бальшое! буду копать дальше...
     
  9. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    zhorik, сейчас посмотрела: KiUserExceptionDispatcher вызывает _RtlDispatchException а там делается проверка, находиться ли обработчик в стеке. Если да, то он просто не выполняется
     
  10. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    GetProcessDEPPolicy, Flags = 0
    GetSystemDEPPolicy = AlwaysOff

    XPSP3

    ; редактирования нет
     
  11. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Вы все на Михалыча работаете, да уже давно не стреляют....
     
  12. zhorik

    zhorik New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    11
    lhc645
    спасибо!

    RET
    это к чему ваще???
     
  13. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    К тому "ваще"
     
  14. zhorik

    zhorik New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    11
    RET
    Эфиоп! где-то я тебя уже видел...)))