Seh на Fasm

Тема в разделе "WASM.WIN32", создана пользователем no_vichok, 25 дек 2007.

  1. no_vichok

    no_vichok New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2007
    Сообщения:
    20
    вот
    Код (Text):
    1. format PE GUI 4.0 at $00400000
    2.  
    3. include 'D:\fasm\INCLUDE\win32ax.inc'
    4.  
    5. section '.data' data readable writeable
    6.  
    7. szException   db 'Exception', 0
    8.  
    9.  
    10. .code
    11.  
    12. proc SehHandler
    13.         PUSH EDX
    14.         MOV  EDX,DWORD [EBP+0Ch]
    15.         MOV  EAX,DWORD [EBP+10h]
    16.         add  dword [EAX+0B8h],1h
    17.         PUSH DWORD [EDX+8h]           ;[edx].SafeOffset
    18.         POP  DWORD [EAX+0B8h]         ;[eax].regEip
    19.         PUSH DWORD [EDX+0Ch]          ;[edx].PrevEsp
    20.         POP  DWORD [EAX+0C4h]         ;[eax].regEsp
    21.         PUSH DWORD [EDX+10h]          ;[edx].PrevEbp
    22.         POP  DWORD [EAX+0B4h]         ;[eax].regEbp
    23.         MOV  EAX,0h
    24.         POP  EDX
    25.         invoke MessageBox, NULL, NULL,szException, MB_OK
    26.         ret
    27. endp
    28.  
    29. start:
    30.        xor  eax, eax
    31.        mov  eax, cs
    32.        push SehHandler
    33.        push dword [fs:0]
    34.        mov  [fs:0], esp
    35.        db 0CDh, 03                     ; 2-byte int 3
    36.  
    37. SafePlace:
    38.        pop DWORD[fs:0]
    39.        mov esp, DWORD[esp+1h]
    40.        invoke ExitProcess, 0
    41. .end start
    после месаги, ХР просит завершить приложения
    где ошибки? перевёл часть кода из масм.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Код (Text):
    1. ; SEH Guard code
    2. proc __SEHHandler uses edx, pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD
    3.  
    4.     mov     edx,[pFrame]
    5.     mov     eax,[pContext]
    6.    
    7.     virtual at edx
    8.         .seh SEH
    9.     end virtual
    10.     virtual at eax
    11.         .ctx CONTEXT
    12.     end virtual
    13.    
    14.     push    [.seh.safeOffset]
    15.     pop     [.ctx.regEip]
    16.     push    [.seh.prevEsp]
    17.     pop     [.ctx.regEsp]
    18.     push    [.seh.prevEbp]
    19.     pop     [.ctx.regEbp]
    20.    
    21.     ; set here your on_error actions
    22.    
    23.     mov eax,1
    24.     ret
    25.  
    26. endp
    В фасме это int 3 (в отличие от int3).

    Используй отладочный вывод лучше.
     
  3. no_vichok

    no_vichok New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2007
    Сообщения:
    20
    IceStudent
    не компилится
    Illegal instraction
    .seh SEH
    мой код более рабочий чем твой лол
     
  4. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    db 0xCC
     
  5. h3uristic

    h3uristic New Member

    Публикаций:
    0
    Регистрация:
    18 май 2007
    Сообщения:
    82
    no_vichok у тебя структуры то SEH и CONTEXT определены ?
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    no_vichok
    Ну, если тебе непонятно, что представляет из себя структура SEH из кода __SEHHandler, то я умываю руки.
     
  7. no_vichok

    no_vichok New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2007
    Сообщения:
    20
    всё проблему решил