Function at 0x5008330
Capabilities:
Check os version

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x5237ef5
mov eax, dword fs:[0]
push eax
sub esp, 0xe0
mov eax, dword [0x53f3c3c]
xor eax, esp
mov dword [esp + 0xd8], eax
push ebx
push esi
push edi
mov eax, dword [0x53f3c3c]
xor eax, esp
push eax
lea eax, [esp + 0xf0]
mov dword fs:[0], eax
mov esi, dword [ebp + 8]
mov edi, dword [ebp + 0xc]
mov ebx, dword [ebp + 0x10]
mov dword [esp + 0x30], esi
mov dword [esp + 0x34], edi
mov dword [esp + 0x58], ebx
test esi, esi
jne 0x5008391
or eax, 0xffffffff
jmp 0x50088c6
test edi, edi
je 0x5008389
test ebx, ebx
je 0x5008389
lea ecx, [esi + 0x308]
mov eax, edi
mov dl, byte [eax]
cmp dl, byte [ecx]
jne 0x50083c1
test dl, dl
je 0x50083bd
mov dl, byte [eax + 1]
cmp dl, byte [ecx + 1]
jne 0x50083c1
add eax, 2
add ecx, 2
test dl, dl
jne 0x50083a1
xor eax, eax
jmp 0x50083c6
sbb eax, eax
sbb eax, 0xffffffff
test eax, eax
jne 0x50083d9
mov eax, ebx
call fcn.0500ed80
test eax, eax
jge 0x50088c6
push edi
push esi
call fcn.0500c260
mov esi, eax
add esp, 8
test esi, esi
jne 0x500840a
push edi
push str.Error:__s_is_not_a_type_n
call dword [sym.imp.MSVCR90.dll___iob_func]
add eax, 0x40
push eax
call dword [sym.imp.MSVCR90.dll_fprintf]
add esp, 0xc
lea eax, [esi - 2]
jmp 0x50088c6
mov eax, dword [esi + 0x24]
cmp eax, 6
je 0x500843a
cmp eax, 7
je 0x500843a
push edi
push str.Error:__s_is_not_a_struct_union_n
call dword [sym.imp.MSVCR90.dll___iob_func]
add eax, 0x40
push eax
call dword [sym.imp.MSVCR90.dll_fprintf]
add esp, 0xc
mov eax, 0xfffffffd
jmp 0x50088c6
push ebx
lea ecx, [esp + 0x98]
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
lea eax, [esp + 0x94]
push eax
lea ecx, [esp + 0x7c]
mov dword [esp + 0xfc], 0
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const__]
push 0
push 0x2e
lea ecx, [esp + 0x9c]
mov byte [esp + 0x100], 1
call dword [sym.imp.MSVCP90.dll_public:_unsigned_int___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::find_first_of_char__unsigned_int_const]
mov ecx, dword [sym.imp.MSVCP90.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov ebx, eax
cmp ebx, dword [ecx]
je 0x5008511
push ebx
push 0
lea edx, [esp + 0x64]
push edx
lea ecx, [esp + 0xa0]
call dword [sym.imp.MSVCP90.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__::substr_unsigned_int__unsigned_int_]
push eax
lea ecx, [esp + 0x7c]
mov byte [esp + 0xfc], 2
call dword [0x523a2b0]
lea ecx, [esp + 0x5c]
mov byte [esp + 0xf8], 1
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
mov eax, dword [esp + 0xa8]
sub eax, ebx
dec eax
push eax
lea ecx, [ebx + 1]
push ecx
lea edx, [esp + 0x64]
push edx
lea ecx, [esp + 0xa0]
call dword [sym.imp.MSVCP90.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__::substr_unsigned_int__unsigned_int_]
push eax
lea ecx, [esp + 0x98]
mov byte [esp + 0xfc], 3
call dword [0x523a2b0]
lea ecx, [esp + 0x5c]
mov byte [esp + 0xf8], 1
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea eax, [esp + 0x18]
push eax
call fcn.05009730
mov byte [esp + 0xf8], 4
mov eax, dword [esp + 0x7c]
mov edi, 0x10
cmp dword [esp + 0x90], edi
jae 0x5008539
lea eax, [esp + 0x7c]
lea ecx, [esp + 0x18]
push ecx
push eax
lea ecx, [esp + 0x80]
call fcn.05007f20
add esp, 8
cmp eax, 1
jge 0x5008590
lea esi, [esp + 0x18]
call fcn.050076f0
lea ecx, [esp + 0x78]
mov byte [esp + 0xf8], 0
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0x94]
mov dword [esp + 0xf8], 0xffffffff
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
mov eax, 0xfffffffc
jmp 0x50088c6
mov ecx, dword [esp + 0x7c]
cmp dword [esp + 0x90], edi
jae 0x50085a1
lea ecx, [esp + 0x7c]
mov eax, esi
call fcn.050075a0
mov esi, eax
test esi, esi
jne 0x500861a
mov eax, dword [esp + 0x7c]
cmp dword [esp + 0x90], edi
jae 0x50085bf
lea eax, [esp + 0x7c]
mov edx, dword [esp + 0x34]
push edx
push eax
push str.Error:_There_is_no_field__s__in_struct__s__n
call dword [sym.imp.MSVCR90.dll___iob_func]
add eax, 0x40
push eax
call dword [sym.imp.MSVCR90.dll_fprintf]
add esp, 0x10
lea esi, [esp + 0x18]
call fcn.050076f0
lea ecx, [esp + 0x78]
mov byte [esp + 0xf8], 0
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0x94]
mov dword [esp + 0xf8], 0xffffffff
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
mov eax, 0xfffffffb
jmp 0x50088c6
mov eax, dword [esi]
mov edx, dword [eax + 0x28]
mov ecx, esi
call edx
mov dword [esp + 0x14], eax
mov eax, dword [esi]
mov edx, dword [eax + 0x20]
mov ecx, esi
call edx
mov dword [esp + 0x54], eax
mov eax, dword [esi]
mov edx, dword [eax + 0x50]
mov ecx, esi
call edx
push eax
lea ecx, [esp + 0xd0]
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
mov byte [esp + 0xf8], 5
mov eax, dword [esi]
mov edx, dword [eax + 0x48]
mov ecx, esi
call edx
push eax
lea ecx, [esp + 0xb4]
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const__]
mov byte [esp + 0xf8], 6
mov eax, dword [esi]
mov edx, dword [eax + 0x34]
lea ecx, [esp + 0x38]
push ecx
mov ecx, esi
call edx
mov byte [esp + 0xf8], 7
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0x48]
sub eax, dword [esp + 0x24]
sub ecx, dword [esp + 0x44]
sar eax, 2
sar ecx, 2
cmp eax, ecx
je 0x5008790
test eax, eax
je 0x50086fa
push str.Error:_array_dimension_doesnt_match__n
call dword [sym.imp.MSVCR90.dll___iob_func]
add eax, 0x40
push eax
call dword [sym.imp.MSVCR90.dll_fprintf]
add esp, 8
lea esi, [esp + 0x38]
call fcn.050076f0
lea ecx, [esp + 0xb0]
mov byte [esp + 0xf8], 5
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0xcc]
mov byte [esp + 0xf8], 4
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
jmp 0x50085dd
mov edx, dword [sym.imp.MSVCP90.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
cmp ebx, dword [edx]
je 0x5008790
push str.Error:_The_array_dimension_of_the_parent_should_be_defined__n
call dword [sym.imp.MSVCR90.dll___iob_func]
add eax, 0x40
push eax
call dword [sym.imp.MSVCR90.dll_fprintf]
add esp, 8
lea esi, [esp + 0x38]
call fcn.050076f0
lea ecx, [esp + 0xb0]
mov byte [esp + 0xf8], 5
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0xcc]
mov byte [esp + 0xf8], 4
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea esi, [esp + 0x18]
call fcn.050076f0
lea ecx, [esp + 0x78]
mov byte [esp + 0xf8], 0
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0x94]
mov dword [esp + 0xf8], 0xffffffff
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
mov eax, 0xfffffffa
jmp 0x50088c6
xor edi, edi
test eax, eax
jle 0x50087ca
lea esi, [esp + 0x38]
call fcn.05009790
lea esi, [esp + 0x18]
mov dword [esp + 0x50], eax
call fcn.05009790
mov eax, dword [eax]
mov ecx, dword [esp + 0x50]
cmp eax, dword [ecx]
jge 0x50088ea
mov edx, dword [esp + 0x28]
sub edx, dword [esp + 0x24]
inc edi
sar edx, 2
cmp edi, edx
jl 0x5008796
lea eax, [esp + 0x38]
push eax
mov eax, dword [esp + 0x58]
lea ecx, [esp + 0x1c]
call fcn.05007dd0
mov edi, dword [esp + 0x18]
mov ecx, dword [sym.imp.MSVCP90.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
add edi, eax
add esp, 4
mov dword [esp + 0x14], edi
cmp ebx, dword [ecx]
je 0x5008847
mov ecx, dword [esp + 0x98]
mov eax, 0x10
cmp dword [esp + 0xac], eax
jae 0x500880f
lea ecx, [esp + 0x98]
cmp dword [esp + 0xc8], eax
mov eax, dword [esp + 0xb4]
jae 0x5008826
lea eax, [esp + 0xb4]
mov edx, dword [esp + 0x30]
push 0
push 0
push ecx
push eax
push edx
call fcn.05008330
mov edi, eax
add esp, 0x14
test edi, edi
jl 0x500885e
add dword [esp + 0x14], edi
mov edi, dword [esp + 0x14]
test edi, edi
jl 0x500885e
mov eax, dword [esp + 0x58]
mov esi, dword [esp + 0x30]
push edi
push eax
mov eax, dword [esp + 0x3c]
call fcn.0500edc0
lea esi, [esp + 0x38]
call fcn.050076f0
lea ecx, [esp + 0xb0]
mov byte [esp + 0xf8], 5
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0xcc]
mov byte [esp + 0xf8], 4
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea esi, [esp + 0x18]
call fcn.050076f0
lea ecx, [esp + 0x78]
mov byte [esp + 0xf8], 0
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0x94]
mov dword [esp + 0xf8], 0xffffffff
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
mov eax, edi
mov ecx, dword [esp + 0xf0]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xd8]
xor ecx, esp
call fcn.0520b902
mov esp, ebp
pop ebp
ret
mov eax, dword [esp + 0x48]
sub eax, dword [esp + 0x44]
sar eax, 2
cmp edi, eax
jb 0x50088ff
call dword [sym.imp.MSVCR90.dll__invalid_parameter_noinfo]
mov edx, dword [esp + 0x28]
sub edx, dword [esp + 0x24]
mov ecx, dword [esp + 0x44]
sar edx, 2
lea esi, [edi*4]
lea ebx, [esi + ecx]
cmp edi, edx
jb 0x5008922
call dword [sym.imp.MSVCR90.dll__invalid_parameter_noinfo]
mov eax, dword [ebx]
mov ecx, dword [esp + 0x24]
mov edx, dword [esi + ecx]
push eax
push edx
push str.Error:_The_array_index__d__is_out_of_bound__d___n
call dword [sym.imp.MSVCR90.dll___iob_func]
add eax, 0x40
push eax
call dword [sym.imp.MSVCR90.dll_fprintf]
add esp, 0x10
lea esi, [esp + 0x38]
call fcn.050076f0
lea ecx, [esp + 0xb0]
mov byte [esp + 0xf8], 5
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0xcc]
mov byte [esp + 0xf8], 4
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea esi, [esp + 0x18]
call fcn.050076f0
lea ecx, [esp + 0x78]
mov byte [esp + 0xf8], 0
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
lea ecx, [esp + 0x94]
mov dword [esp + 0xf8], 0xffffffff
call dword [sym.imp.MSVCP90.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::destructor_void_]
mov eax, 0xfffffff9
jmp 0x50088c6