How to get the EXCEPTION_POINTERS in Windows 32bit x86 assembly?

0

So I have some basic asm file that looks like the one below(print_eax is removed as it's large and unrelated to the question) and have been using this http://www.godevtool.com/ExceptFrame.htm as a source of information. But I'm unsure of how to get the EXCEPTION_POINTERS. I've tried popping from the stack, and using different registers in case it was passed through those, as well as various offsets from each of these, but honestly I'm at a loss and have been unable to find a solution through google. How do I get the EXCEPTION_POINTERS when we enter FINAL_HANDLER?

    global _main
    extern  _GetStdHandle@4
    extern  _WriteFile@20
    extern  _ExitProcess@4
    extern _SetUnhandledExceptionFilter@4

    section .text
_main:
    
    push FINAL_HANDLER
    CALL _SetUnhandledExceptionFilter@4

    ;---Protected code---
    mov eax, dword [0xffffffff] ;Force C0000005h exception

    ; ExitProcess(0)
    push    0
    call    _ExitProcess@4

    ; never here
    hlt

FINAL_HANDLER:
    ; get EXCEPTION_POINTERS
    ;????
    ; get EXCEPTION_RECORD(dword [EXCEPTION_POINTERS+0])
    mov eax, dword [EXCEPTION_POINTERS]
    ; get ExceptionCode(dword [EXCEPTION_RECORD+0])
    mov eax, dword [eax]
    call print_eax ; a simple procedure that outputs eax in hex

    ; ExitProcess(1)
    push    1
    call    _ExitProcess@4
winapi
assembly
x86
nasm
asked on Stack Overflow Aug 20, 2020 by Hrothgar

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0