section .text align=4 exec

%include "C:\development\shell\cplusplus-filter\nasm-cc\x64\seh64.asm"

%include "C:\development\shell\cplusplus-filter\nasm-cc\x64\macros64.asm"

%include "C:\development\shell\cplusplus-filter\nasm-cc\x64\math_mac.asm"

section .bss align=4 noexec


section .text align=4 exec

struc struc___sFILE
   ._stream: resb 8
   ._buffer: resb 8
   ._offset: resb 8
   ._error: resb 4
   ._ch: resb 4
   ._un: resb 4
   .size:
endstruc

extern _get_bit8
extern _get_bit16
extern _get_bit32
extern _get_bit64
extern _set_bit8
extern _set_bit16
extern _set_bit32
extern _set_bit64
extern __stdout
extern __stderr
extern __stdin
extern _fileno
extern _ferror
extern _remove
extern _fread
extern _fwrite
extern _fopen
extern _freopen
extern _clearerr
extern _ftell
extern _gets
extern _fseek
extern _feof
extern _fprintf
extern _fgets
extern _fscanf
extern _fflush
extern _fclose
extern _ungetc
extern _printf
extern _scanf
extern _sscanf
extern _getchar
extern _fgetc
extern _fgetwc
extern _fputc
extern _puts
extern _putws
extern sprintf
extern _perror
extern _lock_fileA
extern _unlock_fileA
global _mainA
global _ginit_64_obj
extern _memcpy

extern ExitProcess
extern MessageBoxA
extern _puts
exception_code_begin:
%define _num rsp+112
%define temp_4 rsp+104
%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_mainA:
	sub rsp,120
	mov rax,qword 0
	mov r13,rax
.L0:
	mov rcx,qword 18446744073709551615
	mov rax,r13
	cmp rax,rcx
	setb al
	movzx rax,al
	cmp rax,0
	jz .L1
	inc r13
	jmp .L0
.L1:
	mov rcx,C0
	mov [temp_4],r13
	call _printf
	mov r13,[temp_4]
	mov rax,0
	add rsp,120
	ret
%undef _num
%undef temp_4
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7


%define arg0 rsp+0
%define arg1 rsp+8
%define arg2 rsp+16
%define arg3 rsp+24
%define arg4 rsp+32
%define arg5 rsp+40
%define arg6 rsp+48
%define arg7 rsp+56
ALIGN 32,db 0xCC
_ginit_64_obj:
	sub rsp,104
	add rsp,104
	ret
%undef arg0
%undef arg1
%undef arg2
%undef arg3
%undef arg4
%undef arg5
%undef arg6
%undef arg7



exception_code_end:

exception_handler:
	mov [rsp+8*1],rcx
	mov [rsp+8*2],rdx
	mov [rsp+8*3],r8
	mov [rsp+8*4],r9
	sub rsp,40
	mov [rsp+8*4],r9
	sub rsp,40
	mov r9,16
	mov r8,EX
	mov rdx,EX
	mov rcx,0
	call MessageBoxA
	mov rcx,1
	call ExitProcess
	add rsp,40
	ret

section .data align=4 noexec

C0 : db 'done...',10,'',0;DE

EX : db 'software exception...',10,0
