40 lines
554 B
Plaintext
40 lines
554 B
Plaintext
section .text
|
|
|
|
extern except
|
|
|
|
%macro raise_exception 1
|
|
align 16
|
|
raise_exception_%1:
|
|
cld
|
|
%if %1 == 8 || %1 == 10 || %1 == 11 || %1 == 12 || %1 == 13 || %1 == 14 || %1 == 17 || %1 == 30
|
|
pop eax
|
|
%else
|
|
xor eax, eax
|
|
%endif
|
|
push ebp
|
|
mov ebp, esp
|
|
push eax
|
|
push %1
|
|
call except
|
|
%endmacro
|
|
|
|
%assign i 0
|
|
%rep 32
|
|
raise_exception i
|
|
%assign i i+1
|
|
%endrep
|
|
|
|
section .rodata
|
|
|
|
%macro raise_exception_getaddr 1
|
|
dd raise_exception_%1
|
|
%endmacro
|
|
|
|
global exceptions
|
|
exceptions:
|
|
%assign i 0
|
|
%rep 32
|
|
raise_exception_getaddr i
|
|
%assign i i+1
|
|
%endrep
|