Function at 0x421740
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x98
movzx eax, byte [ebp + 0x18]
movzx ebx, byte [ebp + 0x1c]
mov esi, dword [ebp + 0x10]
cmp byte [ebp + 0x20], 0
mov edi, dword [ebp + 8]
mov dword [esp + 0x14], edx
mov dword [esp + 0x38], ecx
mov dword [esp + 0x34], eax
je 0x421788
mov eax, dword [esp + 0x14]
mov eax, dword [eax + 8]
test byte [eax + 0xc3], 1
jne 0x42179a
test byte [eax + 0xcb], 1
jne 0x42179a
mov edx, dword [edi + 0x80]
cmp edx, 0x110000
jne 0x421847
mov eax, dword [edi + 0x68]
test eax, eax
je 0x4217bb
cmp dword [edi + 0x6c], esi
jne 0x4217bb
push esi
push eax
push dword [ebp + 0xc]
call sub.msvcrt.dll_memcmp
add esp, 0xc
test eax, eax
je 0x4220db
mov edx, dword [ebp + 0xc]
lea ecx, [esp + 0x40]
push esi
call sym.os_str_bytes::imp::os_str_from_bytes::h6f1f95b92ef6b081
add esp, 4
movzx eax, byte [esp + 0x4c]
cmp al, 3
je 0x422122
movzx edx, word [esp + 0x4d]
mov ah, byte [esp + 0x4f]
mov edi, dword [esp + 0x40]
mov esi, dword [esp + 0x44]
mov ecx, dword [esp + 0x48]
cmp al, 2
mov word [esp + 4], dx
mov byte [esp + 6], ah
jne 0x421884
test esi, esi
je 0x4218a8
js 0x422145
movzx eax, byte [0x5c6170]
mov eax, dword [0x5c6108]
test eax, eax
jne 0x42182a
call sub.KERNEL32.dll_GetProcessHeap
test eax, eax
je 0x421839
mov dword [0x5c6108], eax
push esi
push 0
push eax
call sub.KERNEL32.dll_HeapAlloc
mov ebx, eax
test eax, eax
jne 0x4218ad
mov ecx, 1
mov edx, esi
call dbg.handle_alloc_error
ud2
mov ecx, 1
cmp edx, 0x80
mov eax, edx
jb 0x421992
cmp edx, 0x800
jae 0x421930
mov eax, edx
mov ecx, edx
and eax, 0x3f
shr ecx, 6
shl eax, 8
or eax, ecx
mov ecx, 2
or eax, 0x80c0
jmp 0x421992
mov dword [esp + 0x40], edi
mov dword [esp + 0x44], esi
mov dword [esp + 0x48], ecx
mov esi, dword [ebp + 8]
movzx edx, word [esp + 4]
movzx ecx, byte [esp + 6]
mov byte [esp + 0x4c], al
mov word [esp + 0x4d], dx
jmp 0x4218df
mov ebx, 1
push esi
push edi
push ebx
call sym._memcpy
add esp, 0xc
movzx eax, word [esp + 0x18]
movzx ecx, byte [esp + 0x1a]
mov dword [esp + 0x40], ebx
mov dword [esp + 0x44], esi
mov dword [esp + 0x48], esi
mov esi, dword [ebp + 8]
movzx ebx, byte [ebp + 0x1c]
mov byte [esp + 0x4c], 0
mov word [esp + 0x4d], ax
mov byte [esp + 0x4f], cl
mov ecx, dword [esp + 0x14]
movzx eax, bl
mov edx, esi
push eax
push dword [esp + 0x38]
mov edi, dword [ebp + 0x14]
push edi
lea eax, [esp + 0x4c]
push eax
call sym.clap::parse::parser::Parser::add_single_val_to_arg::ha059c6644f3f95cb
add esp, 0x10
mov ecx, edi
mov edx, esi
call sym.clap::parse::arg_matcher::ArgMatcher::needs_more_vals::hdf7a7d89553ce658
mov edi, 2
test al, al
je 0x4220e0
movsd xmm0, qword [esi + 0x38]
mov eax, dword [esp + 0x38]
mov edi, 1
movsd qword [eax + 8], xmm0
jmp 0x4220e0
mov eax, edx
cmp edx, 0x10000
jae 0x421962
lea ecx, [edx*4]
shr eax, 0xc
and ecx, 0x3f00
or ecx, eax
mov eax, edx
and eax, 0x3f
shl eax, 0x10
or eax, ecx
mov ecx, 3
or eax, 0x8080e0
jmp 0x421992
mov ecx, edx
shr eax, 0x12
shr ecx, 4
and ecx, 0x3f00
or ecx, eax
mov eax, edx
shl eax, 0xa
and eax, 0x3f0000
or eax, ecx
mov ecx, edx
and ecx, 0x3f
shl ecx, 0x18
lea eax, [ecx + eax - 0x7f7f7f10]
mov ecx, 4
mov dword [esp + 0x88], edx
mov edx, dword [ebp + 0xc]
mov dword [esp + 0x78], edx
mov dword [esp + 0x7c], esi
mov dword [esp + 0x84], ecx
mov ecx, dword [edi + 0x68]
mov dword [esp + 0x80], eax
test ecx, ecx
je 0x421aca
mov edx, dword [edi + 0x6c]
movsd xmm0, qword [esp + 0x78]
movsd xmm1, qword [esp + 0x80]
mov eax, ecx
xor esi, esi
mov edi, 4
mov dword [esp + 4], 4
mov dword [esp + 8], 0
mov dword [esp + 0xc], 0
mov dword [esp + 0x3c], eax
mov dword [esp + 0x10], edx
movsd qword [esp + 0x20], xmm1
movsd qword [esp + 0x18], xmm0
jmp 0x421a20
mov dword [edi + edx*8], esi
mov dword [edi + edx*8 + 4], ebx
mov esi, dword [esp + 0xc]
inc esi
mov dword [esp + 0xc], esi
mov edx, dword [esp + 0x18]
mov dword [esp], esi
test edx, edx
je 0x421c1b
lea eax, [esp + 0x20]
lea ecx, [esp + 0x40]
push eax
push dword [esp + 0x20]
call sym.os_str_bytes::raw_str::RawOsStr::split_once_raw::hebb3d099996ff12d
add esp, 8
mov esi, dword [esp + 0x40]
test esi, esi
je 0x421a70
mov ebx, dword [esp + 0x44]
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x4c]
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], ecx
jmp 0x421a88
mov esi, dword [esp + 0x18]
mov ebx, dword [esp + 0x1c]
mov dword [esp + 0x18], 0
test esi, esi
je 0x421c1b
cmp ebx, dword [esp + 0x10]
jne 0x421aa7
push dword [esp + 0x10]
push dword [esp + 0x40]
push esi
call sub.msvcrt.dll_memcmp
add esp, 0xc
test eax, eax
je 0x421c1b
mov edx, dword [esp]
cmp edx, dword [esp + 8]
jne 0x421a10
lea ecx, [esp + 4]
call sym.alloc::raw_vec::RawVec_LT_T_C_A_GT_::reserve_for_push::h0e65b0e1fde6e2f6
mov edi, dword [esp + 4]
mov edx, dword [esp + 0xc]
jmp 0x421a10
lea eax, [esp + 0x80]
lea ecx, [esp + 0x40]
push eax
push esi
call sym.os_str_bytes::raw_str::RawOsStr::split_once_raw::hebb3d099996ff12d
add esp, 8
mov edi, dword [esp + 0x40]
test edi, edi
je 0x421afd
mov ebx, dword [esp + 0x44]
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x4c]
mov dword [esp + 0x78], eax
mov dword [esp + 0x7c], ecx
jmp 0x421b15
mov edi, dword [esp + 0x78]
mov ebx, dword [esp + 0x7c]
mov dword [esp + 0x78], 0
test edi, edi
je 0x421cdd
movzx eax, byte [0x5c6170]
mov eax, dword [0x5c6108]
test eax, eax
jne 0x421b37
call sub.KERNEL32.dll_GetProcessHeap
test eax, eax
je 0x42214c
mov dword [0x5c6108], eax
push 0x20
push 0
push eax
call sub.KERNEL32.dll_HeapAlloc
test eax, eax
je 0x42214c
mov dword [eax], edi
mov dword [eax + 4], ebx
mov edx, 1
mov edi, eax
mov dword [esp + 4], eax
mov dword [esp + 8], 4
mov dword [esp + 0xc], 1
movsd xmm0, qword [esp + 0x78]
movsd xmm1, qword [esp + 0x80]
movsd qword [esp + 0x20], xmm1
movsd qword [esp + 0x18], xmm0
jmp 0x421ba3
mov edi, dword [esp + 4]
mov edx, dword [esp]
mov dword [edi + edx*8], ebx
mov dword [edi + edx*8 + 4], esi
inc edx
mov dword [esp + 0xc], edx
mov dword [esp], edx
mov edx, dword [esp + 0x18]
test edx, edx
je 0x421c1b
lea eax, [esp + 0x20]
lea ecx, [esp + 0x40]
push eax
push dword [esp + 0x20]
call sym.os_str_bytes::raw_str::RawOsStr::split_once_raw::hebb3d099996ff12d
add esp, 8
mov ebx, dword [esp + 0x40]
test ebx, ebx
je 0x421bf0
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x4c]
mov esi, dword [esp + 0x44]
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], ecx
jmp 0x421c04
mov ebx, dword [esp + 0x18]
mov esi, dword [esp + 0x1c]
mov dword [esp + 0x18], 0
test ebx, ebx
je 0x421c1b
mov edx, dword [esp]
cmp edx, dword [esp + 8]
jne 0x421b97
lea ecx, [esp + 4]
call sym.alloc::raw_vec::RawVec_LT_T_C_A_GT_::reserve::do_reserve_and_handle::h384dbbf760aae4d5
jmp 0x421b90
mov eax, dword [esp + 4]
mov ecx, dword [esp + 8]
mov dword [esp + 0x2c], eax
mov dword [esp + 0x30], ecx
cmp byte [ebp + 0x1c], 0
jne 0x421cfe
mov eax, dword [ebp + 8]
mov esi, dword [eax + 0x38]
mov ebx, dword [eax + 0x3c]
mov ecx, dword [ebp + 0x14]
mov edx, esi
push ebx
call sym.clap::parse::arg_matcher::ArgMatcher::new_val_group::ha61b4ee0dff32e71
add esp, 4
mov eax, dword [esp + 0x14]
mov eax, dword [eax + 8]
mov ecx, dword [eax + 0x130]
test ecx, ecx
je 0x421cfe
mov edx, dword [eax + 0x128]
imul eax, ecx, 0x38
mov ecx, edx
add eax, edx
mov dword [esp + 0x8c], eax
jmp 0x421c8d
mov ecx, dword [esp + 0x10]
cmp ecx, dword [esp + 0x8c]
je 0x421cfe
lea eax, [ecx + 0x38]
mov edx, dword [ecx + 0x10]
mov dword [esp + 0x3c], ecx
mov ecx, dword [ecx + 0x18]
mov dword [esp + 0x10], eax
shl ecx, 3
nop word cs:[eax + eax]
nop dword [eax + eax]
test ecx, ecx
je 0x421c80
mov edi, dword [edx]
mov eax, dword [edx + 4]
add ecx, 0xfffffff8
add edx, 8
xor edi, esi
xor eax, ebx
or eax, edi
jne 0x421cb0
mov eax, dword [esp + 0x3c]
mov edx, dword [eax]
mov ecx, dword [ebp + 0x14]
push dword [eax + 4]
call sym.clap::parse::arg_matcher::ArgMatcher::new_val_group::ha61b4ee0dff32e71
add esp, 4
jmp 0x421c80
mov dword [esp + 0x2c], 4
mov dword [esp], 0
mov dword [esp + 0x30], 0
cmp byte [ebp + 0x1c], 0
je 0x421c35
mov eax, dword [esp]
test eax, eax
je 0x421e55
mov edi, dword [esp + 0x2c]
lea ebx, [esp + 0x40]
lea eax, [edi + eax*8]
mov dword [esp + 0x10], eax
nop dword [eax + eax]
mov edx, dword [edi]
mov ecx, ebx
push dword [edi + 4]
call sym.os_str_bytes::imp::os_str_from_bytes::h6f1f95b92ef6b081
add esp, 4
movzx eax, byte [esp + 0x4c]
cmp al, 3
je 0x4220ee
mov ecx, dword [esp + 0x40]
lea edx, [esp + 0x4d]
mov esi, dword [esp + 0x44]
cmp al, 2
mov dword [esp], ecx
movzx ecx, word [edx]
mov word [esp + 4], cx
movzx ecx, byte [edx + 2]
mov byte [esp + 6], cl
mov ecx, dword [esp + 0x48]
jne 0x421db0
test esi, esi
je 0x421dc8
js 0x42211b
movzx eax, byte [0x5c6170]
mov eax, dword [0x5c6108]
test eax, eax
jne 0x421d8f
call sub.KERNEL32.dll_GetProcessHeap
test eax, eax
je 0x42210d
mov dword [0x5c6108], eax
push esi
push 0
push eax
call sub.KERNEL32.dll_HeapAlloc
mov ebx, eax
test eax, eax
jne 0x421dcd
jmp 0x42210d
movzx edx, byte [esp + 6]
mov byte [esp + 0x2a], dl
movzx edx, word [esp + 4]
mov word [esp + 0x28], dx
mov edx, dword [esp]
jmp 0x421df8
mov ebx, 1
push esi
push dword [esp + 4]
push ebx
call sym._memcpy
add esp, 0xc
movzx eax, word [esp + 0x40]
mov edx, ebx
mov ecx, esi
lea ebx, [esp + 0x40]
mov word [esp + 0x28], ax
movzx eax, byte [esp + 0x42]
mov byte [esp + 0x2a], al
xor eax, eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x1c], esi
mov dword [esp + 0x20], ecx
mov byte [esp + 0x24], al
movzx eax, word [esp + 0x28]
lea ecx, [esp + 0x25]
mov word [esp + 0x90], ax
mov word [ecx], ax
movzx eax, byte [esp + 0x2a]
mov byte [esp + 0x92], al
mov byte [ecx + 2], al
mov edx, dword [ebp + 8]
mov ecx, dword [esp + 0x14]
push 1
push dword [esp + 0x38]
push dword [ebp + 0x14]
lea eax, [esp + 0x24]
push eax
call sym.clap::parse::parser::Parser::add_single_val_to_arg::ha059c6644f3f95cb
add esp, 0x10
add edi, 8
cmp edi, dword [esp + 0x10]
jne 0x421d20
cmp dword [esp + 0x30], 0
je 0x421e6d
push dword [esp + 0x2c]
push 0
push dword [0x5c6108]
call sub.KERNEL32.dll_HeapFree
mov eax, dword [esp + 0x88]
cmp eax, 0x80
jae 0x421eb1
cmp dword [ebp + 0x10], 0x3f
mov edi, 1
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], 1
ja 0x421eee
movzx eax, al
mov ebx, 1
mov dword [esp + 0x14], eax
mov eax, dword [ebp + 0x10]
mov edx, dword [ebp + 0xc]
cmp edi, eax
ja 0x4220b4
jmp 0x42203a
mov edx, dword [ebp + 0xc]
cmp eax, 0x800
mov esi, eax
jae 0x421f60
mov eax, esi
mov ecx, esi
mov edi, 2
and eax, 0x3f
shr ecx, 6
shl eax, 8
or eax, ecx
mov cl, 1
or eax, 0x80c0
cmp dword [ebp + 0x10], 0x40
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], edi
jb 0x421fd6
lea esi, [esp + 0x40]
lea eax, [esp + 0x18]
mov edx, 1
mov ecx, esi
push edi
push eax
call sym.memchr::memmem::Searcher::new::h5b0711ac0c27e2e0
add esp, 8
mov edx, dword [ebp + 0xc]
mov ecx, esi
push dword [ebp + 0x10]
call sym.memchr::memmem::Finder::find::hd8fe1d2e1316a38a
add esp, 4
cmp dword [esp + 0x68], 0
mov esi, eax
je 0x421f38
cmp dword [esp + 0x70], 0
je 0x421f38
push dword [esp + 0x6c]
push 0
push dword [0x5c6108]
call sub.KERNEL32.dll_HeapFree
mov eax, dword [ebp + 8]
mov edi, 2
cmp esi, 1
je 0x4220e0
test byte [eax + 0x139], 2
mov edi, 2
je 0x4220c5
jmp 0x4220e0
mov eax, esi
cmp esi, 0x10000
jae 0x421f92
lea ecx, [esi*4]
shr eax, 0xc
mov edi, 3
and ecx, 0x3f00
or ecx, eax
mov eax, esi
and eax, 0x3f
shl eax, 0x10
or eax, ecx
or eax, 0x8080e0
jmp 0x421fc2
mov ecx, esi
shr eax, 0x12
mov edi, 4
shr ecx, 4
and ecx, 0x3f00
or ecx, eax
mov eax, esi
mov esi, esi
shl eax, 0xa
and esi, 0x3f
and eax, 0x3f0000
shl esi, 0x18
or eax, ecx
lea eax, [esi + eax - 0x7f7f7f10]
xor ecx, ecx
cmp dword [ebp + 0x10], 0x40
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], edi
jae 0x421eee
cmp dword [esp + 0x88], 0x80
movzx esi, al
mov ebx, 1
jb 0x421ffd
shr eax, 8
mov ebx, 2
test cl, cl
movzx eax, al
lea esi, [eax + esi*2]
je 0x42200d
mov eax, dword [ebp + 0x10]
mov dword [esp + 0x14], esi
cmp edi, eax
jbe 0x42203a
jmp 0x4220b4
lea eax, [esp + 0x1a]
lea ecx, [edi - 2]
nop word cs:[eax + eax]
nop
movzx edx, byte [eax]
inc eax
add ebx, ebx
dec ecx
lea esi, [edx + esi*2]
jne 0x422020
mov dword [esp + 0x14], esi
mov eax, dword [ebp + 0x10]
mov edx, dword [ebp + 0xc]
cmp edi, eax
ja 0x4220b4
mov esi, edi
xor eax, eax
xor edi, edi
movzx ecx, byte [edx + eax]
inc eax
cmp esi, eax
lea edi, [ecx + edi*2]
jne 0x422040
mov dword [esp], esi
mov ecx, dword [ebp + 0x10]
mov esi, dword [esp]
cmp dword [esp + 0x14], edi
jne 0x4220b0
jmp 0x422077
movzx eax, byte [edx]
dec ecx
imul eax, ebx
sub edi, eax
movzx eax, byte [edx + esi]
inc edx
lea edi, [eax + edi*2]
cmp dword [esp + 0x14], edi
jne 0x4220b0
mov dword [esp + 0x34], ecx
mov ecx, edx
mov dword [esp + 0x10], edx
mov edx, dword [esp + 0x34]
push dword [esp]
lea eax, [esp + 0x1c]
push eax
call sym.memchr::memmem::rabinkarp::is_prefix::h52845791f7df1d06
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x3c]
add esp, 8
test al, al
jne 0x4220db
nop word cs:[eax + eax]
nop dword [eax + eax]
cmp ecx, esi
ja 0x422060
mov eax, dword [ebp + 8]
test byte [eax + 0x139], 2
mov edi, 2
jne 0x4220e0
mov ecx, dword [ebp + 0x14]
mov edx, eax
mov esi, eax
call sym.clap::parse::arg_matcher::ArgMatcher::needs_more_vals::hdf7a7d89553ce658
test al, al
jne 0x421918
jmp 0x4220e0
mov edi, 2
mov eax, dword [esp + 0x38]
mov dword [eax], edi
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
mov edx, 0x11
mov ecx, str.invalid_raw_bytesbyte_index__is_not_a_valid_boundary__it_is_inside_U__bytes_..
push 0x54d720
push 0x54d5a4
push ebx
call dbg.unwrap_failed
add esp, 0xc
jmp 0x422120
mov ecx, 1
mov edx, esi
call dbg.handle_alloc_error
jmp 0x422120
call sym.alloc::raw_vec::capacity_overflow::hd0578b62e5d0dfac
ud2
mov ecx, str.invalid_raw_bytesbyte_index__is_not_a_valid_boundary__it_is_inside_U__bytes_..
mov edx, 0x11
push 0x54d720
push 0x54d5a4
lea eax, [esp + 0x48]
push eax
call dbg.unwrap_failed
add esp, 0xc
ud2
call sym.alloc::raw_vec::capacity_overflow::hd0578b62e5d0dfac
ud2
mov ecx, 4
mov edx, 0x20
call dbg.handle_alloc_error
ud2