Function at 0x411af0
Capabilities:
Read file on windows

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x42534a
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0xcbc
mov al, byte [0x42bcfc]
mov cl, byte [0x42bcdc]
push ebx
push esi
push edi
xor esi, esi
and al, cl
push 0x3e87ffff
push 0x3ddbffff
mov dword [ebp - 0x34], esi
mov byte [0x42bcda], al
call fcn.0040e4c0
mov dword [0x42bd08], eax
mov al, byte [0x42bce2]
imul byte [0x42bcde]
push 0x1e41ffff
push 0xc08fffff
mov byte [0x42bcd8], al
call fcn.0040e4c0
movsx ecx, byte [0x42bcdd]
push ecx
push 0x5935ffff
mov word [0x42bcf2], ax
call fcn.0040e500
mov dword [0x42bd08], eax
mov al, byte [0x42bcdd]
add esp, 0x18
test al, al
je 0x411b94
cmp word [0x42bce4], si
mov byte [0x42bcdd], 1
jne 0x411b9b
mov byte [0x42bcdd], 0
movsx eax, byte [0x42bcd9]
movsx ecx, word [0x42bce2]
mov dl, byte [0x42bcea]
push eax
push ecx
mov byte [0x42bcd8], dl
call fcn.0040e5d0
lea edx, [ebp - 0x88]
mov dword [0x42bd10], eax
push edx
call fcn.00412db0
xor eax, eax
cmp word [0x42bce4], si
mov byte [ebp - 0xcc8], 0
mov byte [ebp - 0x8c8], 0
setne al
mov dword [0x42bd10], eax
mov byte [ebp - 0x4c8], 0
mov bl, byte [0x42bcdb]
xor eax, eax
movsx ecx, word [0x42bcf2]
test bl, bl
setne al
push eax
push ecx
mov dword [ebp - 4], esi
mov dword [0x42bd18], eax
call fcn.0040e580
mov dl, byte [0x42bcd8]
add esp, 0x14
neg dl
lea ecx, [ebp - 0xcc8]
mov word [0x42bcec], ax
mov byte [0x42bce0], dl
call fcn.0040ffb0
movsx ax, byte [0x42bcdd]
movsx ecx, byte [0x42bcdf]
movsx edx, byte [0x42bcdc]
and ax, word [0x42bcf0]
add ecx, edx
push 0x62abffff
push 0x7cedffff
mov word [0x42bce4], ax
mov dword [0x42bd0c], ecx
call fcn.0040e620
mov word [0x42bcf2], ax
movsx eax, byte [0x42bce0]
push eax
push 0xf71bffff
call fcn.0040e5d0
mov cl, byte [ebp + 0xb]
add esp, 0x10
mov byte [ebp - 0x48], cl
lea ecx, [ebp - 0x48]
push esi
mov byte [0x42bcdf], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
lea edi, [ebp - 0xcc8]
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebx, ecx
lea ecx, [ebp - 0x48]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x411ce7
mov edi, dword [ebp - 0x44]
mov ecx, ebx
mov edx, ecx
lea esi, [ebp - 0xcc8]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [ebp - 0x48]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
mov eax, dword [0x42bd10]
mov ecx, dword [0x42bcfc]
neg eax
push 0xf8f3ffff
push ecx
mov byte [ebp - 4], 1
mov word [0x42bcf0], ax
call fcn.0040e580
movsx edx, word [0x42bcf0]
push 0x916fffff
push edx
mov word [0x42bce6], ax
call fcn.0040e4c0
mov word [0x42bcf0], ax
mov eax, dword [0x42bd0c]
push 0x23e9ffff
push eax
call fcn.0040e540
mov dword [0x42bcf8], eax
lea edi, [ebp - 0x8c8]
or ecx, 0xffffffff
xor eax, eax
add esp, 0x18
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
lea ecx, [ebp - 0x8c8]
push ecx
lea ecx, [ebp - 0x48]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::append_char_const___unsigned_int_]
mov edx, dword [0x42bd0c]
push 0xb83bffff
push edx
call fcn.0040e480
mov word [0x42bcec], ax
lea edi, [ebp - 0x4c8]
or ecx, 0xffffffff
xor eax, eax
add esp, 8
repne scasb al, byte es:[edi]
not ecx
dec ecx
lea eax, [ebp - 0x4c8]
push ecx
push eax
lea ecx, [ebp - 0x48]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::append_char_const___unsigned_int_]
movsx ecx, byte [0x42bcda]
push 0x814dffff
push ecx
call fcn.0040e480
movsx edx, word [0x42bcea]
push 0xab41ffff
push edx
mov dword [0x42bd00], eax
call fcn.0040e500
mov ecx, dword [0x42bd0c]
mov word [0x42bcee], ax
mov eax, dword [0x42bcfc]
add esp, 0x10
add ecx, eax
mov al, byte [0x42b938]
sub al, 0x1b
mov word [0x42bce4], cx
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b938
call fcn.00422bc0
mov dl, byte [ebp + 0xb]
push 0
lea ecx, [ebp - 0x1c]
mov esi, eax
mov byte [ebp - 0x1c], dl
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov edi, esi
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebx, ecx
lea ecx, [ebp - 0x1c]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x411e51
mov edi, dword [ebp - 0x18]
mov ecx, ebx
mov eax, ecx
push ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [ebp - 0x1c]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
mov edi, dword [0x42bd0c]
mov edx, dword [ebp - 0x74]
xor ecx, ecx
lea eax, [ebp - 0x70]
test edi, edi
setne cl
push edx
push eax
mov byte [ebp - 4], 2
mov word [0x42bcee], cx
call fcn.00404a90
mov esi, eax
mov ecx, dword [ebp - 0x78]
lea edx, [ebp - 0xc8]
push ecx
push edx
mov byte [ebp - 4], 3
call fcn.00404a90
mov edi, eax
mov eax, dword [ebp - 0x7c]
lea ecx, [ebp - 0xb8]
push eax
push ecx
mov byte [ebp - 4], 4
call fcn.00404a90
push edi
lea edx, [ebp - 0x98]
push eax
push edx
mov byte [ebp - 4], 5
call sub.MSVCP60.dll_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____cdecl_std::operator_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const__
push esi
push eax
lea eax, [ebp - 0xa8]
mov bl, 6
push eax
mov byte [ebp - 4], bl
call sub.MSVCP60.dll_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____cdecl_std::operator_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const__
add esp, 0x30
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [ebp - 4], 7
mov edx, dword [ecx]
lea ecx, [ebp - 0x1c]
push edx
push 0
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::append_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
push 1
lea ecx, [ebp - 0xa8]
mov byte [ebp - 4], bl
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0x98]
mov byte [ebp - 4], 5
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0xb8]
mov byte [ebp - 4], 4
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0xc8]
mov byte [ebp - 4], 3
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 1
lea ecx, [ebp - 0x70]
mov byte [ebp - 4], 2
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 0xde9bffff
push 0x182dffff
call fcn.0040e500
mov dword [0x42bd04], eax
mov ax, word [0x42bcec]
add esp, 8
test ax, ax
je 0x411f6c
cmp word [0x42bcf0], 0
mov byte [0x42bcd8], 1
jne 0x411f73
mov byte [0x42bcd8], 0
movsx ecx, byte [0x42bcd9]
movsx eax, ax
imul eax, ecx
movsx dx, byte [0x42bcdf]
mov dword [0x42bcf8], eax
mov al, byte [0x42b930]
sub al, 0x1b
mov word [0x42bce6], dx
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b930
call fcn.00422bc0
mov ebx, eax
or ecx, 0xffffffff
mov edi, ebx
xor eax, eax
repne scasb al, byte es:[edi]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [eax]
sub ecx, edx
cmp ecx, esi
ja 0x411fdc
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x412021
mov edx, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea eax, [edx + esi]
push eax
mov dword [ebp - 0x20], eax
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412021
mov eax, dword [ebp - 0x18]
mov ecx, dword [ebp - 0x14]
lea edi, [ecx + eax]
mov ecx, esi
mov edx, ecx
mov esi, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov eax, dword [ebp - 0x20]
mov ecx, edx
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
lea ecx, [ebp - 0x1c]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
movsx ecx, word [0x42bcec]
push ecx
push 0xecf5ffff
call fcn.0040e480
mov dword [0x42bd10], eax
mov eax, dword [ebp - 0x44]
add esp, 8
test eax, eax
jne 0x412047
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
push eax
call fcn.00414fa0
mov dword [ebp - 0x20], eax
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
add esp, 4
repne scasb al, byte es:[edi]
mov eax, dword [edx]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x412078
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x4120b9
mov ecx, dword [ebp - 0x14]
xor edi, edi
push edi
lea ebx, [ecx + esi]
lea ecx, [ebp - 0x1c]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x4120bb
mov edx, dword [ebp - 0x18]
mov eax, dword [ebp - 0x14]
mov ecx, esi
mov esi, dword [ebp - 0x20]
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [ebp - 0x1c]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
xor edi, edi
mov eax, dword [0x42bd00]
push 0xa27bffff
dec eax
push 0xe511ffff
mov word [0x42bcea], ax
call fcn.0040e620
mov word [0x42bcec], ax
mov eax, dword [0x42bd18]
mov ecx, eax
mov edx, dword [0x42bcfc]
imul ecx, ecx, 0x53cbffff
push edx
push eax
mov dword [ebp - 0x38], edi
xor bl, bl
mov dword [0x42bd00], ecx
call fcn.0040e580
mov ecx, dword [0x42bd18]
mov byte [0x42bcdf], al
movsx eax, word [0x42bcf0]
push eax
push ecx
call fcn.0040e480
lea edx, [ebp - 0x60]
mov byte [0x42bce0], al
push edx
call fcn.00413ee0
add esp, 0x1c
mov eax, dword [0x42bd10]
mov byte [ebp - 4], 8
cmp eax, edi
je 0x41214a
cmp word [0x42bcea], di
mov word [0x42bcee], 1
jne 0x412151
mov word [0x42bcee], di
cmp dword [ebp - 0x58], edi
jbe 0x412255
mov ax, word [0x42bce2]
movsx ecx, byte [0x42bce0]
neg ax
mov word [0x42bcec], ax
mov eax, dword [ebp - 0x5c]
add ecx, 0x4d0fffff
cmp eax, edi
mov dword [0x42bd10], ecx
jne 0x412188
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
push edi
push edi
push 3
push edi
push 1
push SysReAllocString
push eax
call dword [sym.imp.KERNEL32.DLL_CreateFileA]
xor edx, edx
cmp word [0x42bcea], di
mov esi, eax
setne dl
cmp esi, 0xffffffff
mov word [0x42bce2], dx
je 0x412255
push 0x9c61ffff
push 0x52afffff
call fcn.0040e5d0
mov ecx, dword [0x42bd0c]
mov word [0x42bce8], ax
movsx eax, ax
push eax
push ecx
call fcn.0040e580
add esp, 0x10
mov dword [0x42bcf8], eax
mov byte [0x42bcda], 1
push 2
push edi
push 0xfffffffffffffffc
push esi
call dword [sym.imp.KERNEL32.DLL_SetFilePointer]
cmp eax, 0xffffffff
je 0x412255
lea edx, [ebp - 0x20]
push edi
push edx
lea eax, [ebp - 0x38]
push 4
push eax
push esi
mov word [0x42bce4], di
mov dword [ebp - 0x20], edi
call dword [sym.imp.KERNEL32.DLL_ReadFile]
test eax, eax
je 0x412255
cmp dword [ebp - 0x20], 4
jne 0x412255
movsx edx, byte [0x42bcdb]
movsx eax, byte [0x42bcdc]
mov edi, dword [0x42bd18]
or ecx, 0xffffffff
sub ecx, edi
push edx
push eax
mov word [0x42bcf0], cx
call fcn.0040e670
add esp, 8
mov byte [0x42bcde], al
mov bl, 1
mov al, byte [0x42bd18]
push 0x8345ffff
imul byte [0x42bcd8]
movsx ecx, word [0x42bce6]
push ecx
mov byte [0x42bcd9], al
call fcn.0040e670
movsx ecx, word [0x42bcec]
add esp, 8
mov byte [0x42bcdc], al
lea edx, [ecx + ecx*2]
lea edx, [edx + edx*4]
shl edx, 2
sub edx, ecx
lea edx, [ecx + edx*8]
lea edx, [edx + edx*8]
shl edx, 0x12
sub edx, ecx
test bl, bl
mov dword [0x42bcfc], edx
je 0x4123aa
mov bl, byte [0x42bcdd]
or al, 0xff
sub al, bl
mov byte [0x42bcd8], 0xff
mov byte [0x42bcdb], al
mov al, byte [0x42b924]
sub al, 0x1b
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b924
call fcn.00422bc0
mov ebx, eax
or ecx, 0xffffffff
mov edi, ebx
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov edx, dword [ecx]
mov ecx, dword [ebp - 0x14]
sub edx, ecx
cmp edx, esi
ja 0x412309
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x41234d
mov eax, dword [ebp - 0x14]
push 0
add eax, esi
lea ecx, [ebp - 0x1c]
push eax
mov dword [ebp - 0x20], eax
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x41234d
mov ecx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x14]
lea edi, [edx + ecx]
mov ecx, esi
mov eax, ecx
mov esi, ebx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp - 0x20]
push ecx
lea ecx, [ebp - 0x1c]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
mov edx, dword [ebp - 0x38]
lea eax, [ebp - 0x70]
push edx
push eax
call fcn.00404a90
add esp, 8
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [ebp - 4], 9
mov edx, dword [ecx]
lea ecx, [ebp - 0x1c]
push edx
push 0
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::append_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
mov eax, dword [ebp - 0x6c]
mov byte [ebp - 4], 8
test eax, eax
je 0x412461
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x41239c
cmp al, 0xff
je 0x41239c
dec al
mov byte [ecx], al
jmp 0x412461
push ecx
call sub.MSVCRT.dll_void___cdecl_operator_delete_void__
add esp, 4
jmp 0x412461
mov ecx, dword [0x42bd18]
movsx edx, word [0x42bce4]
movsx ax, al
and eax, ecx
mov ecx, dword [0x42bd14]
push ecx
push edx
mov word [0x42bce6], ax
call fcn.0040e620
mov dword [0x42bd10], eax
mov al, byte [0x42b914]
sub al, 0x1b
add esp, 8
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b914
call fcn.00422bc0
mov dword [ebp - 0x20], eax
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [eax]
sub ecx, edx
cmp ecx, esi
ja 0x412421
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x412461
mov edx, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea ebx, [edx + esi]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412461
mov eax, dword [ebp - 0x18]
mov ecx, dword [ebp - 0x14]
lea edi, [ecx + eax]
mov ecx, esi
mov esi, dword [ebp - 0x20]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
mov al, byte [0x42b908]
mov cx, word [0x42bd04]
add cx, word [0x42bce2]
sub al, 0x1b
and eax, 0xff
add eax, 3
mov word [0x42bce6], cx
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b908
call fcn.00422bc0
mov dword [ebp - 0x20], eax
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
repne scasb al, byte es:[edi]
mov eax, dword [edx]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x4124c0
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x412500
mov ecx, dword [ebp - 0x14]
push 0
lea ebx, [ecx + esi]
lea ecx, [ebp - 0x1c]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412500
mov edx, dword [ebp - 0x18]
mov eax, dword [ebp - 0x14]
mov ecx, esi
mov esi, dword [ebp - 0x20]
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
movsx ecx, byte [0x42bcde]
push ecx
push 0xcf17ffff
call fcn.0040e5d0
movsx edx, byte [0x42bcde]
mov word [0x42bcf2], ax
push 0x6f01ffff
movsx eax, byte [0x42bcd8]
mov ecx, eax
push eax
sub ecx, edx
mov dword [0x42bd18], ecx
call fcn.0040e500
lea edx, [ebp - 0x70]
mov byte [0x42bcdc], al
push edx
mov word [0x42bcec], 0xffff
call fcn.00404640
add esp, 0x14
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [ebp - 4], 0xa
mov edx, dword [ecx]
lea ecx, [ebp - 0x1c]
push edx
push 0
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::append_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
mov eax, dword [ebp - 0x6c]
mov byte [ebp - 4], 8
test eax, eax
je 0x412596
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x41258d
cmp al, 0xff
je 0x41258d
dec al
mov byte [ecx], al
jmp 0x412596
push ecx
call sub.MSVCRT.dll_void___cdecl_operator_delete_void__
add esp, 4
push 0x2729ffff
push 0x7f49ffff
call fcn.0040e540
mov dword [0x42bd04], eax
mov al, byte [0x42b8fc]
sub al, 0x1b
add esp, 8
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b8fc
call fcn.00422bc0
mov dword [ebp - 0x20], eax
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [eax]
sub ecx, edx
cmp ecx, esi
ja 0x4125f6
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x412636
mov edx, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea ebx, [edx + esi]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412636
mov eax, dword [ebp - 0x18]
mov ecx, dword [ebp - 0x14]
lea edi, [ecx + eax]
mov ecx, esi
mov esi, dword [ebp - 0x20]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
movsx cx, byte [0x42bcdc]
sub cx, word [0x42bce6]
mov al, byte [0x42bcdd]
mov dl, byte [0x42bd18]
test al, al
mov word [0x42bce6], cx
mov byte [0x42bcd9], dl
je 0x412674
mov al, byte [0x42bce0]
mov dword [0x42bd0c], 1
test al, al
jne 0x41267e
mov dword [0x42bd0c], 0
mov edi, 0x42b8f8
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [ebp - 0x14]
repne scasb al, byte es:[edi]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [eax]
sub ecx, edx
cmp ecx, esi
ja 0x4126a5
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x4126e7
mov edx, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea ebx, [edx + esi]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x4126e7
mov eax, dword [ebp - 0x18]
mov ecx, dword [ebp - 0x14]
lea edi, [ecx + eax]
mov ecx, esi
mov edx, ecx
mov esi, 0x42b8f8
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
mov ecx, dword [0x42bd04]
push 0x29adffff
push ecx
mov dword [0x42bd10], 0x2e380000
call fcn.0040e540
movsx edx, word [0x42bce8]
mov dword [0x42bd04], eax
mov al, byte [0x42b8ec]
sub al, 0x1b
or edx, 0xb153ffff
and eax, 0xff
add esp, 8
add eax, 3
mov dword [0x42bcfc], edx
and al, 0xfc
mov word [0x42bcf0], 0xffff
call fcn.00424380
mov ecx, esp
mov edx, 0x42b8ec
call fcn.00422bc0
mov dword [ebp - 0x20], eax
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
mov esi, ecx
mov ecx, dword [eax]
sub ecx, edx
cmp ecx, esi
ja 0x41276f
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x4127af
mov edx, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea ebx, [edx + esi]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x4127af
mov eax, dword [ebp - 0x18]
mov ecx, dword [ebp - 0x14]
lea edi, [ecx + eax]
mov ecx, esi
mov esi, dword [ebp - 0x20]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
mov al, byte [0x42bce6]
imul byte [0x42bcdf]
mov byte [0x42bcdc], al
call fcn.00401320
mov ecx, dword [eax*4 + 0x42b84c]
mov al, byte [ecx]
sub al, 0x1b
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov esi, esp
call fcn.00401320
mov edx, dword [eax*4 + 0x42b84c]
mov ecx, esi
call fcn.00422bc0
mov dword [ebp - 0x20], eax
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
repne scasb al, byte es:[edi]
mov eax, dword [edx]
mov edx, dword [ebp - 0x14]
not ecx
dec ecx
sub eax, edx
mov esi, ecx
cmp eax, esi
ja 0x41281b
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test esi, esi
jbe 0x41285b
mov ecx, dword [ebp - 0x14]
push 0
lea ebx, [ecx + esi]
lea ecx, [ebp - 0x1c]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x41285b
mov edx, dword [ebp - 0x18]
mov eax, dword [ebp - 0x14]
mov ecx, esi
mov esi, dword [ebp - 0x20]
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
movsx ecx, word [0x42bcf0]
movsx edx, word [0x42bcec]
push ecx
push edx
call fcn.0040e540
mov word [0x42bce6], ax
mov eax, dword [0x42bcfc]
push eax
push 0xee29ffff
call fcn.0040e500
movsx ecx, ax
push 0xbf47ffff
push ecx
mov word [0x42bcee], ax
call fcn.0040e480
lea edx, [ebp - 0x34]
mov dword [0x42bd18], eax
push edx
push 8
call fcn.0040f840
movsx eax, word [0x42bcf0]
movsx ecx, word [0x42bce2]
push eax
push ecx
call fcn.0040e670
movsx edx, word [0x42bce8]
mov dword [0x42bd0c], eax
mov eax, dword [0x42bcf8]
push edx
push eax
call fcn.0040e500
mov edx, dword [0x42bd14]
mov byte [0x42bcdd], al
mov eax, dword [0x42bd00]
xor esi, esi
cmp eax, esi
push 0x9aa9ffff
setne cl
push edx
mov byte [0x42bcd8], cl
call fcn.0040e540
mov word [0x42bce2], ax
mov al, byte [ebp + 0xb]
mov byte [ebp - 0x30], al
mov edi, 0x42b8f8
or ecx, 0xffffffff
xor eax, eax
add esp, 0x38
mov dword [ebp - 0x2c], esi
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov dword [ebp - 0x28], esi
push ecx
push 0x42b8f8
lea ecx, [ebp - 0x30]
mov dword [ebp - 0x24], esi
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
mov ecx, dword [0x42bd04]
mov byte [ebp - 4], 0xb
push ecx
push 0xe0edffff
call fcn.0040e500
movsx edx, byte [0x42bcdd]
push edx
push 0xcab3ffff
mov dword [0x42bd08], eax
call fcn.0040e620
push 0x6a89ffff
push 0x4ffffff
mov dword [0x42bcf8], eax
call fcn.0040e480
mov ecx, dword [ebp - 0x34]
mov word [0x42bcee], ax
lea eax, [ebp - 0x30]
push eax
push ecx
call fcn.0041e250
add esp, 0x20
test eax, eax
jne 0x412b88
cmp word [0x42bcee], si
lea eax, [ebp - 0x20]
push eax
push 2
setne dl
mov byte [0x42bcdc], 0xfe
mov byte [0x42bcda], dl
call fcn.0040f840
movsx cx, byte [0x42bcde]
lea edx, [ebp - 0x4c]
dec ecx
push edx
push 3
mov word [0x42bce8], cx
call fcn.0040f840
movsx ecx, word [0x42bce4]
mov eax, dword [0x42bd04]
push eax
push ecx
call fcn.0040e540
mov edi, dword [0x42bd18]
mov byte [0x42bcd8], al
movsx eax, word [0x42bce2]
xor edx, edx
cmp edi, esi
setne dl
push eax
push 0xa931ffff
mov word [0x42bce6], dx
call fcn.0040e500
mov edx, dword [ebp - 0x20]
lea ecx, [ebp - 0x50]
push ecx
push edx
mov word [0x42bcf2], ax
call fcn.0041ea80
add esp, 0x28
test eax, eax
je 0x412ad0
mov ecx, dword [ebp - 0x4c]
lea eax, [ebp - 0x50]
push eax
push ecx
call fcn.0041ea80
add esp, 8
test eax, eax
je 0x412ad0
push 0xbc33ffff
push 0x3d31ffff
call fcn.0040e500
movsx edx, byte [0x42bcdd]
mov word [0x42bce4], ax
mov ecx, dword [0x42bd08]
movsx eax, byte [0x42bcd8]
or edx, eax
push ecx
mov dword [0x42bd10], edx
movsx edx, word [0x42bcf0]
push edx
call fcn.0040e540
mov byte [0x42bcdc], al
mov edi, 0x42b8e8
or ecx, 0xffffffff
xor eax, eax
add esp, 0x10
repne scasb al, byte es:[edi]
not ecx
dec ecx
push 1
mov ebx, ecx
lea ecx, [ebp - 0x30]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412b13
mov edi, dword [ebp - 0x2c]
mov ecx, ebx
mov eax, ecx
mov esi, 0x42b8e8
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp - 0x2c]
mov dword [ebp - 0x28], ebx
mov byte [ecx + ebx], 0
jmp 0x412b13
mov edi, 0x42b8f8
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebx, ecx
lea ecx, [ebp - 0x30]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412b13
mov edi, dword [ebp - 0x2c]
mov ecx, ebx
mov edx, ecx
mov esi, 0x42b8f8
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x2c]
mov dword [ebp - 0x28], ebx
mov byte [eax + ebx], 0
push 0xe531ffff
push 0x8249ffff
call fcn.0040e5d0
push 0x7687ffff
push 0xa8e7ffff
mov dword [0x42bd04], eax
call fcn.0040e480
mov edx, dword [ebp - 0x34]
lea ecx, [ebp - 0x30]
push ecx
push edx
mov word [0x42bcee], 1
call fcn.0041e7c0
movsx eax, word [0x42bce6]
movsx edx, byte [0x42bcdf]
mov cx, word [0x42bcf2]
add eax, 0x26860001
neg cx
push 0xbd07ffff
push edx
mov dword [0x42bd0c], eax
mov word [0x42bcee], cx
call fcn.0040e4c0
add esp, 0x20
mov byte [0x42bcdc], al
mov bl, byte [0x42bcd9]
xor eax, eax
test bl, bl
setne al
mov word [0x42bcf2], ax
mov al, byte [0x42b8e0]
sub al, 0x1b
and eax, 0xff
add eax, 3
and al, 0xfc
call fcn.00424380
mov ecx, esp
mov edx, 0x42b8e0
call fcn.00422bc0
mov esi, eax
or ecx, 0xffffffff
mov edi, esi
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov edi, ecx
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov edx, dword [ecx]
mov ecx, dword [ebp - 0x14]
sub edx, ecx
cmp edx, edi
ja 0x412be4
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test edi, edi
jbe 0x412c21
mov eax, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea ebx, [eax + edi]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412c21
mov edx, dword [ebp - 0x18]
mov eax, dword [ebp - 0x14]
mov ecx, edi
lea edi, [eax + edx]
mov edx, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x14], ebx
mov byte [eax + ebx], 0
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [0x42bcdc], 0
mov eax, dword [ecx]
mov ecx, dword [ebp - 0x28]
mov edi, eax
cmp ecx, edi
jae 0x412c3b
mov edi, ecx
sub eax, dword [ebp - 0x14]
cmp eax, edi
ja 0x412c48
call dword [sym.imp.MSVCP60.dll_void___cdecl_std::_Xlen_void_]
test edi, edi
jbe 0x412c92
mov edx, dword [ebp - 0x14]
push 0
lea ecx, [ebp - 0x1c]
lea ebx, [edx + edi]
push ebx
call dword [sym.imp.MSVCP60.dll_private:_bool___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Grow_unsigned_int__bool_]
test al, al
je 0x412c92
mov esi, dword [ebp - 0x2c]
test esi, esi
jne 0x412c6f
mov esi, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
mov eax, dword [ebp - 0x18]
mov edx, dword [ebp - 0x14]
mov ecx, edi
push ebx
lea edi, [edx + eax]
mov eax, ecx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [ebp - 0x1c]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Eos_unsigned_int_]
movsx ecx, byte [0x42bcda]
movsx ax, byte [0x42bcdc]
imul ecx, ecx, 0x8919ffff
mov esi, dword [0x42bcfc]
or edx, 0xffffffff
sub edx, esi
mov esi, dword [ebp + 8]
mov dword [0x42bd04], ecx
mov cl, byte [ebp - 0x1c]
inc eax
xor edi, edi
mov word [0x42bce8], dx
mov word [0x42bcee], ax
mov byte [esi], cl
mov dword [esi + 4], edi
mov dword [esi + 8], edi
mov dword [esi + 0xc], edi
mov edx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
lea ecx, [ebp - 0x1c]
mov eax, dword [edx]
push eax
push edi
push ecx
mov ecx, esi
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
mov ecx, dword [ebp - 0x2c]
cmp ecx, edi
je 0x412d12
mov al, byte [ecx - 1]
test al, al
je 0x412d08
cmp al, 0xff
je 0x412d08
dec al
mov byte [ecx - 1], al
jmp 0x412d12
dec ecx
push ecx
call sub.MSVCRT.dll_void___cdecl_operator_delete_void__
add esp, 4
mov ecx, dword [ebp - 0x5c]
mov dword [ebp - 0x2c], edi
cmp ecx, edi
mov dword [ebp - 0x28], edi
mov dword [ebp - 0x24], edi
je 0x412d3e
mov al, byte [ecx - 1]
test al, al
je 0x412d34
cmp al, 0xff
je 0x412d34
dec al
mov byte [ecx - 1], al
jmp 0x412d3e
dec ecx
push ecx
call sub.MSVCRT.dll_void___cdecl_operator_delete_void__
add esp, 4
mov ecx, dword [ebp - 0x18]
mov dword [ebp - 0x5c], edi
cmp ecx, edi
mov dword [ebp - 0x58], edi
mov dword [ebp - 0x54], edi
je 0x412d6a
mov al, byte [ecx - 1]
test al, al
je 0x412d60
cmp al, 0xff
je 0x412d60
dec al
mov byte [ecx - 1], al
jmp 0x412d6a
dec ecx
push ecx
call sub.MSVCRT.dll_void___cdecl_operator_delete_void__
add esp, 4
mov ecx, dword [ebp - 0x44]
mov dword [ebp - 0x18], edi
cmp ecx, edi
mov dword [ebp - 0x14], edi
mov dword [ebp - 0x10], edi
je 0x412d96
mov al, byte [ecx - 1]
test al, al
je 0x412d8c
cmp al, 0xff
je 0x412d8c
dec al
mov byte [ecx - 1], al
jmp 0x412d96
dec ecx
push ecx
call sub.MSVCRT.dll_void___cdecl_operator_delete_void__
add esp, 4
mov ecx, dword [ebp - 0xc]
lea esp, [ebp - 0xcd4]
mov eax, esi
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret