Function at 0x403972
Capabilities:
Terminate process

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x6c
push ebx
push esi
xor esi, esi
cmp dword [0x4961e8], esi
jne 0x403b90
push 1
pop ebx
mov dword [0x4961e8], ebx
call dword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
mov dword [0x48a114], eax
mov eax, 0x48a0e8
mov dword [0x4961b0], eax
mov dword [sym.ruby187g.exc_ruby_frame], eax
mov dword [0x48a1a0], 0x48a168
call dword [sym.imp.MSVCRT.dll___p__environ]
mov eax, dword [eax]
mov dword [sym.ruby187g.exc_rb_origenviron], eax
lea eax, [ebp - 8]
push eax
call sym.ruby187g.exc_Init_stack
pop ecx
call sym.ruby187g.exc_Init_heap
mov eax, dword [0x48a0d0]
mov dword [ebp - 0xc], eax
call sym.ruby187g.exc_rb_newobj
mov dword [eax], 0x3e
mov dword [eax + 4], esi
cmp dword [sym.ruby187g.exc_ruby_safe_level], 3
jl 0x4039fe
test al, 3
jne 0x4039fe
test eax, 0xfffffffb
je 0x4039fe
or byte [eax + 1], bl
mov dword [eax + 8], esi
mov dword [eax + 0xc], esi
mov dword [eax + 0x10], esi
mov ecx, dword [sym.ruby187g.exc_ruby_scope]
mov dword [ebp - 4], ecx
mov dword [sym.ruby187g.exc_ruby_scope], eax
mov dword [eax + 0xc], esi
mov eax, dword [sym.ruby187g.exc_ruby_scope]
push esi
mov dword [ebp - 0x20], 4
mov dword [eax + 8], esi
mov ecx, dword [sym.ruby187g.exc_ruby_frame]
mov eax, dword [sym.ruby187g.exc_ruby_scope]
mov dword [ebp - 0x2c], ecx
mov ecx, dword [0x48a1a0]
mov dword [0x48a178], eax
mov dword [ebp - 0x1c], eax
mov dword [ebp - 0x28], ecx
mov ecx, dword [0x48a174]
lea eax, [ebp - 0x6c]
mov dword [0x48a174], eax
lea eax, [ebp - 0x6c]
push eax
mov dword [0x48a0d0], ebx
mov dword [ebp - 0x14], ecx
mov dword [ebp - 0x24], esi
mov dword [ebp - 0x18], esi
mov dword [ebp - 0x10], esi
call sub.MSVCRT.dll__setjmp3
pop ecx
cmp eax, esi
pop ecx
mov dword [ebp - 8], eax
jne 0x403b13
call sym.ruby187g.exc_rb_call_inits
mov eax, dword [sym.ruby187g.exc_rb_cObject]
mov ecx, dword [sym.ruby187g.exc_ruby_frame]
mov dword [sym.ruby187g.exc_ruby_class], eax
mov eax, dword [sym.ruby187g.exc_ruby_top_self]
push esi
push esi
mov dword [ecx], eax
push dword [sym.ruby187g.exc_rb_cObject]
push 0x54
call sym.ruby187g.exc_rb_node_newnode
push dword [sym.ruby187g.exc_ruby_top_self]
mov dword [sym.ruby187g.exc_ruby_top_cref], eax
mov dword [sym.ruby187g.exc_ruby_cref], eax
call fcn.0040ebfe
push eax
push str.TOPLEVEL_BINDING
call sym.ruby187g.exc_rb_define_global_const
add esp, 0x1c
call sym.ruby187g.exc_ruby_prog_init
dec dword [sym.ruby187g.exc_rb_prohibit_interrupt]
jne 0x403b06
cmp dword [sym.ruby187g.exc_rb_thread_critical], esi
jne 0x403b06
cmp dword [sym.ruby187g.exc_rb_thread_pending], esi
jne 0x403af7
mov eax, dword [sym.ruby187g.exc_rb_thread_tick]
dec dword [sym.ruby187g.exc_rb_thread_tick]
test eax, eax
jg 0x403b06
mov dword [sym.ruby187g.exc_rb_thread_tick], 0x1f4
call sym.ruby187g.exc_rb_thread_schedule
cmp dword [sym.ruby187g.exc_rb_trap_pending], esi
je 0x403b13
call sym.ruby187g.exc_rb_trap_exec
mov eax, dword [ebp - 0x14]
cmp dword [ebp - 8], esi
mov dword [0x48a174], eax
jne 0x403b94
mov eax, dword [sym.ruby187g.exc_ruby_scope]
test byte [eax + 0x10], 4
je 0x403b3e
cmp dword [ebp - 4], esi
je 0x403b3e
push dword [ebp - 4]
call fcn.0040e96a
mov eax, dword [sym.ruby187g.exc_ruby_scope]
pop ecx
test byte [eax + 0x10], bl
jne 0x403b6d
mov dword [eax + 0xc], esi
mov eax, dword [sym.ruby187g.exc_ruby_scope]
mov dword [eax + 8], esi
mov eax, dword [sym.ruby187g.exc_ruby_scope]
test byte [eax + 0x10], 4
jne 0x403b6d
cmp eax, dword [0x48a178]
je 0x403b6d
push eax
call sym.ruby187g.exc_rb_gc_force_recycle
mov eax, dword [sym.ruby187g.exc_ruby_scope]
pop ecx
or dword [eax + 0x10], 2
mov eax, dword [ebp - 4]
mov eax, dword [ebp - 0xc]
mov dword [0x48a0d0], eax
mov eax, dword [0x48a178]
mov dword [sym.ruby187g.exc_ruby_scope], eax
and dword [eax + 0x10], 0xfffffffd
mov dword [0x4961d4], ebx
pop esi
pop ebx
leave
ret
call fcn.00403ba0
push ebx
call dword [sym.imp.MSVCRT.dll_exit]