Function at 0x421870
Capabilities:
Create directory
Hide graphical window
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x48c
lea eax, [esp + 0x18c]
push ebx
push esi
push edi
push 0x100
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
lea eax, [esp + 0x398]
push eax
lea eax, [esp + 0x94]
push eax
lea eax, [esp + 0x2a0]
push eax
lea eax, [esp + 0x18]
push eax
lea eax, [esp + 0x1a8]
push eax
call fcn.00474bc5
add esp, 0x14
xor ecx, ecx
mov al, byte [esp + ecx + 0xc]
lea ecx, [ecx + 1]
mov byte [ecx + 0x4b0ddf], al
test al, al
jne 0x4218c3
lea edx, [esp + 0x298]
mov esi, edx
nop dword [eax]
mov al, byte [edx]
inc edx
test al, al
jne 0x4218e0
mov edi, 0x4b0de0
sub edx, esi
dec edi
nop
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x4218f0
mov eax, dword [ebp + 8]
mov ecx, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
mov dword [0x4b0dd8], eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
call dword [sym.imp.COMCTL32.dll_InitCommonControls]
mov ebx, dword [ebp + 0x10]
mov edx, 0x4af2b0
mov ecx, ebx
sub edx, ebx
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [ecx + edx - 1], al
test al, al
jne 0x421920
mov edi, 0x4af2b0
lea ecx, [edi + 1]
mov al, byte [edi]
inc edi
test al, al
jne 0x421935
sub edi, ecx
je 0x42197f
xor esi, esi
test edi, edi
jle 0x42197f
nop word [eax + eax]
movsx eax, byte [esi + 0x4af2b0]
push eax
call fcn.004752b7
add esp, 4
test eax, eax
je 0x42197a
movsx eax, byte [esi + 0x4af2b0]
push eax
call fcn.00474570
add esp, 4
mov byte [esi + 0x4af2b0], al
inc esi
cmp esi, edi
jl 0x421950
push ebx
push str.cmd:___s__n
call fcn.0040e1d0
add esp, 8
call fcn.0040d790
mov ecx, 0x4b0de0
mov dword [esp + 0x6c], 0
mov dword [esp + 0x70], 0xf
mov byte [esp + 0x5c], 0
lea edx, [ecx + 1]
nop
mov al, byte [ecx]
inc ecx
test al, al
jne 0x4219b0
sub ecx, edx
push ecx
push 0x4b0de0
lea ecx, [esp + 0x64]
call fcn.004235b0
push str.save
lea edx, [esp + 0x60]
lea ecx, [esp + 0x18]
call fcn.00423920
add esp, 4
cmp dword [eax + 0x14], 0x10
jb 0x4219e5
mov eax, dword [eax]
mov esi, dword [sym.imp.KERNEL32.dll_CreateDirectoryA]
push 0
push eax
call esi
mov edx, dword [esp + 0x28]
cmp edx, 0x10
jb 0x421a26
mov ecx, dword [esp + 0x14]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x421a1c
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x422435
push edx
push ecx
call fcn.004655c1
add esp, 8
push str.Mempaks
lea edx, [esp + 0x60]
lea ecx, [esp + 0x18]
call fcn.00423920
add esp, 4
cmp dword [eax + 0x14], 0x10
jb 0x421a43
mov eax, dword [eax]
push 0
push eax
call esi
mov edx, dword [esp + 0x28]
cmp edx, 0x10
jb 0x421a7e
mov ecx, dword [esp + 0x14]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x421a74
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x42243a
push edx
push ecx
call fcn.004655c1
add esp, 8
push str.Lang
lea edx, [esp + 0x60]
lea ecx, [esp + 0x18]
call fcn.00423920
add esp, 4
cmp dword [eax + 0x14], 0x10
jb 0x421a9b
mov eax, dword [eax]
push 0
push eax
call esi
mov edx, dword [esp + 0x28]
cmp edx, 0x10
jb 0x421ad6
mov ecx, dword [esp + 0x14]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x421acc
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x42243f
push edx
push ecx
call fcn.004655c1
add esp, 8
push str.ScreenShots
lea edx, [esp + 0x60]
lea ecx, [esp + 0x18]
call fcn.00423920
add esp, 4
cmp dword [eax + 0x14], 0x10
jb 0x421af3
mov eax, dword [eax]
push 0
push eax
call esi
mov edx, dword [esp + 0x28]
cmp edx, 0x10
jb 0x421b2e
mov ecx, dword [esp + 0x14]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x421b24
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x422444
push edx
push ecx
call fcn.004655c1
add esp, 8
push str.plugin
lea edx, [esp + 0x60]
lea ecx, [esp + 0x18]
call fcn.00423920
add esp, 4
cmp dword [eax + 0x14], 0x10
jb 0x421b4b
mov eax, dword [eax]
push 0
push eax
call esi
mov edx, dword [esp + 0x28]
cmp edx, 0x10
jb 0x421b86
mov ecx, dword [esp + 0x14]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x421b7c
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x422449
push edx
push ecx
call fcn.004655c1
add esp, 8
mov edx, dword [esp + 0x70]
cmp edx, 0x10
jb 0x421bbc
mov ecx, dword [esp + 0x5c]
inc edx
mov eax, ecx
cmp edx, 0x1000
jb 0x421bb2
mov ecx, dword [ecx - 4]
add edx, 0x23
sub eax, ecx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x42244e
push edx
push ecx
call fcn.004655c1
add esp, 8
mov dword [0x4b0ee8], 0
mov dword [0x4b0dc8], 1
call fcn.00414650
push dword [0x49ee8c]
push 0x4af2b0
call fcn.004674f0
add esp, 8
test eax, eax
jne 0x421bf5
mov byte [esp + 0x90], al
jmp 0x421c02
mov eax, 0x31
mov word [esp + 0x90], ax
lea ecx, [esp + 0x90]
lea edx, [ecx + 1]
nop dword [eax]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x421c10
mov ebx, dword [ebp + 8]
mov edi, dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
mov dword [esp + 0x2c], 0x30
mov dword [esp + 0x30], 0
mov dword [esp + 0x38], 0
mov dword [esp + 0x3c], 0
mov dword [esp + 0x40], ebx
push 0xb5
push 0
sub ecx, edx
jne 0x4222ad
mov dword [0x4af2a8], 0
mov dword [esp + 0x3c], 0x41f8b0
call edi
mov esi, dword [sym.imp.USER32.dll_LoadIconA]
push eax
call esi
push 0xb4
push 0
mov dword [esp + 0x4c], eax
call edi
push eax
call esi
push 0x7f00
push 0
mov dword [esp + 0x60], eax
call dword [sym.imp.USER32.dll_LoadCursorA]
push 4
mov dword [esp + 0x4c], eax
call dword [sym.imp.GDI32.dll_GetStockObject]
mov dword [esp + 0x4c], eax
lea eax, [esp + 0x2c]
push eax
mov dword [esp + 0x54], 0x65
mov dword [esp + 0x58], str.myWindowClass
call dword [sym.imp.USER32.dll_RegisterClassExA]
test ax, ax
jne 0x421ce0
push 0x30
push 0x4a1e80
push str.Window_Registration_Failed_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
push 0x67
push ebx
call dword [sym.imp.USER32.dll_LoadAcceleratorsA]
push 0
push ebx
push 0
push 0
push dword [0x4b01c0]
mov edi, eax
push dword [0x4b01bc]
mov dword [esp + 0x28], edi
push dword [0x4b01c8]
push dword [0x4b01c4]
push 0x2cf0008
push str.Mupen_64_1.0.4
push str.myWindowClass
push 0x10
call dword [sym.imp.USER32.dll_CreateWindowExA]
mov ebx, eax
mov dword [esp + 0xc], ebx
test ebx, ebx
jne 0x421d4d
push 0x30
push str.Error_
push str.Window_Creation_Failed_
push eax
call dword [sym.imp.USER32.dll_MessageBoxA]
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
push dword [ebp + 0x14]
mov dword [0x4b09c4], ebx
push ebx
call dword [sym.imp.USER32.dll_ShowWindow]
push ebx
call dword [sym.imp.USER32.dll_UpdateWindow]
cmp dword [0x4b0984], 0
mov esi, dword [sym.imp.USER32.dll_GetMenu]
jne 0x421d84
push 1
push 0x2328
push ebx
call esi
push eax
call dword [sym.imp.USER32.dll_EnableMenuItem]
mov eax, dword [0x4ade20]
test eax, eax
jns 0x421de9
push 0x4a0454
push 0x4b0de0
lea eax, [esp + 0x98]
push 0x4a0468
push eax
call fcn.0040e260
add esp, 0x10
lea eax, [esp + 0x90]
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov dword [0x24b17a8], eax
test eax, eax
je 0x42222e
push eax
mov dword [0x4ade20], 1
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov eax, dword [0x4ade20]
test eax, eax
mov dword [0x24b17a8], 0
jne 0x421dfc
push 0
push 0x238c
push ebx
call esi
push eax
call dword [sym.imp.USER32.dll_DeleteMenu]
movaps xmm0, xmmword [0x4a6b30]
mov eax, dword [0x4b09c0]
mov edx, dword [0x4abafc]
mov ecx, dword [0x4b09c4]
movaps xmmword [0x4af120], xmm0
movaps xmm0, xmmword [0x4a6b00]
movaps xmmword [0x4af130], xmm0
movaps xmm0, xmmword [0x4a6b50]
mov dword [0x24b1a18], eax
mov dword [0x24b1a1c], eax
mov eax, dword [0x4b0dd8]
mov dword [0x24b1a20], 1
mov dword [0x24b1a24], 0x24b1940
mov dword [0x24b1a28], 0x4bb7b0
mov dword [0x24b1a2c], 0x4b96e0
mov dword [0x24b1a30], edx
mov dword [0x24b1a34], 0x4b9684
mov dword [0x24b1a38], 0xcbb818
mov dword [0x24b1a3c], 0xcbb81c
mov dword [0x24b1a40], 0xcbb820
mov dword [0x24b1a44], 0xcbb828
mov dword [0x24b1a48], 0xcbb838
mov dword [0x24b1a4c], 0xcbb83c
mov dword [0x24b1a50], 0xcbb840
mov dword [0x24b1a54], 0xcbb844
mov dword [0x24b1a58], 0x4bb6e0
mov dword [0x24b1a5c], 0x4bb6e4
mov dword [0x24b1a60], 0x4bb6e8
mov dword [0x24b1a64], 0x4bb6ec
mov dword [0x24b1a68], 0x4bb6f0
mov dword [0x24b1a6c], 0x4bb6f4
mov dword [0x24b1a70], 0x4bb6f8
mov dword [0x24b1a74], 0x4bb6fc
mov dword [0x24b1a78], 0x4bb700
mov dword [0x24b1a7c], 0x4bb704
mov dword [0x24b1a80], 0x4bb708
mov dword [0x24b1a84], 0x4bb70c
mov dword [0x24b1a88], 0x4bb710
mov dword [0x24b1a8c], 0x4bb714
mov dword [0x24b1a90], 0x40c6a0
mov dword [0x24b1900], ecx
mov dword [0x24b1904], eax
mov dword [0x24b1908], 1
mov dword [0x24b190c], 0x24b1940
mov dword [0x24b1910], 0x4bb7b0
mov dword [0x24b1914], 0x4b96e0
mov dword [0x24b1918], edx
mov dword [0x24b191c], 0x4b9684
mov dword [0x24b1920], 0x4bb764
mov dword [0x24b1924], 0x4bb768
mov dword [0x24b1928], 0x4bb76c
mov dword [0x24b192c], 0x4bb770
mov dword [0x24b1930], 0x4bb774
mov dword [0x24b1934], 0x4bb778
mov dword [0x24b1938], 0x40c6a0
mov dword [0x24b17ac], ecx
mov dword [0x24b17b0], eax
mov dword [0x24b17b4], 1
mov dword [0x24b17b8], 0x24b1940
mov dword [0x24b17bc], 0x4af120
movaps xmmword [0x4af140], xmm0
mov dword [0x24b181c], 1
mov dword [0x24b1820], 0x4bb7b0
mov dword [0x24b1824], 0x4b96e0
mov dword [0x24b1828], edx
mov dword [0x24b182c], 0x4b9684
mov dword [0x24b1830], 0xcbb7e4
mov dword [0x24b1834], 0xcbb7e8
mov dword [0x24b1838], 0xcbb7ec
mov dword [0x24b183c], 0xcbb7f0
mov dword [0x24b1840], 0xcbb7f8
mov dword [0x24b1844], 0xcbb80c
mov dword [0x24b1848], 0xcbb810
mov dword [0x24b184c], 0x4b9698
mov dword [0x24b1850], 0xcbb814
mov dword [0x24b1854], 0xcbb818
mov dword [0x24b1858], 0xcbb81c
mov dword [0x24b185c], 0xcbb820
mov dword [0x24b1860], 0xcbb828
mov dword [0x24b1864], 0xcbb838
mov dword [0x24b1868], 0xcbb83c
mov eax, dword [fcn.0040c6a0]
xor ecx, ecx
mov dword [0x24b1878], eax
mov eax, dword [fcn.0040c6a0]
mov dword [0x24b187c], eax
mov eax, dword [fcn.0040c6a0]
mov dword [0x24b1880], eax
mov eax, dword [fcn.0040c6a0]
mov dword [0x24b186c], 0xcbb840
mov dword [0x24b1870], 0xcbb844
mov dword [0x24b1874], 0x40c6a0
mov dword [0x24b1884], eax
call fcn.0041f040
call fcn.004141d0
neg eax
push str.Mupen64___Nintendo_64_emulator___re_recording_v8___GUI_mode
sbb eax, eax
and dword [0x4af2ac], eax
call fcn.00419590
add esp, 4
push str.Mupen64___Nintendo_64_emulator___re_recording_v8
call fcn.00428fc0
add esp, 4
lea eax, [esp + 0x74]
push 0
push 0
push 0
push eax
call dword [sym.imp.USER32.dll_GetMessageA]
test eax, eax
jle 0x4223e2
mov ebx, dword [sym.imp.USER32.dll_GetKeyState]
nop
lea eax, [esp + 0x74]
push eax
push edi
push dword [0x4b09c4]
call dword [sym.imp.USER32.dll_TranslateAcceleratorA]
test eax, eax
jne 0x42219c
lea eax, [esp + 0x74]
push eax
call dword [sym.imp.USER32.dll_TranslateMessage]
lea eax, [esp + 0x74]
push eax
call dword [sym.imp.USER32.dll_DispatchMessageA]
xor edi, edi
nop
lea esi, [edi + edi*4]
cmp dword [esi*4 + 0x4b01e4], 0
jne 0x42227e
cmp dword [esi*4 + 0x4b01e8], 0
jne 0x4221d3
cmp dword [esi*4 + 0x4b01ec], 0
jne 0x4221d3
cmp dword [esi*4 + 0x4b01f0], 0
je 0x42227e
push 0x10
call ebx
shr eax, 0xf
and eax, 1
test edi, edi
je 0x42223d
cmp eax, dword [esi*4 + 0x4b01e8]
jne 0x42227e
push 0x11
call ebx
shr eax, 0xf
and eax, 1
cmp eax, dword [esi*4 + 0x4b01ec]
jne 0x42227e
push 0x12
call ebx
shr eax, 0xf
and eax, 1
cmp eax, dword [esi*4 + 0x4b01f0]
jne 0x42227e
push 0
push dword [esi*4 + 0x4b01f4]
push 0x111
push dword [esp + 0x18]
call dword [sym.imp.USER32.dll_SendMessageA]
jmp 0x42227e
mov dword [0x4ade20], 0
jmp 0x421deb
cmp eax, dword [esi*4 + 0x4b01e8]
jne 0x422274
push 0x11
call ebx
shr eax, 0xf
and eax, 1
cmp eax, dword [0x4b01ec]
jne 0x422274
push 0x12
call ebx
shr eax, 0xf
and eax, 1
mov dword [0x4aba5c], 0
cmp eax, dword [0x4b01f0]
je 0x42227e
mov dword [0x4aba5c], 1
inc edi
cmp edi, 0x2a
jl 0x4221a0
push 0
push 0
push 0
lea eax, [esp + 0x80]
push eax
call dword [sym.imp.USER32.dll_GetMessageA]
mov edi, dword [esp + 0x10]
test eax, eax
jg 0x422170
jmp 0x4223e2
mov dword [0x4af2a8], 1
mov dword [esp + 0x3c], 0x41f780
call edi
mov esi, dword [sym.imp.USER32.dll_LoadIconA]
push eax
call esi
push 0xb4
push 0
mov dword [esp + 0x4c], eax
call edi
push eax
call esi
push 0x7f00
push 0
mov dword [esp + 0x60], eax
call dword [sym.imp.USER32.dll_LoadCursorA]
push 4
mov dword [esp + 0x4c], eax
call dword [sym.imp.GDI32.dll_GetStockObject]
mov dword [esp + 0x4c], eax
lea eax, [esp + 0x2c]
push eax
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], str.myWindowClass
call dword [sym.imp.USER32.dll_RegisterClassExA]
test ax, ax
jne 0x42233a
push 0x30
push 0x4a1e1c
push 0x4a1e24
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10
push 0
push ebx
push 0
push 0
push dword [0x4b01c0]
push dword [0x4b01bc]
push dword [0x4b01c8]
push dword [0x4b01c4]
push 0x2cf0000
push 0x4a1e40
push str.myWindowClass
push 0
call dword [sym.imp.USER32.dll_CreateWindowExA]
push dword [ebp + 0x14]
mov esi, eax
push esi
mov dword [0x4b09c4], esi
call dword [sym.imp.USER32.dll_ShowWindow]
push esi
call dword [sym.imp.USER32.dll_UpdateWindow]
call fcn.004141d0
push str.Mupen64___Nintendo_64_emulator___Guiless_mode
call fcn.00419590
mov esi, dword [sym.imp.USER32.dll_GetMessageA]
lea eax, [esp + 0x78]
add esp, 4
push 0
push 0
push 0
push eax
call esi
test eax, eax
jle 0x4223e2
mov edi, dword [sym.imp.USER32.dll_TranslateMessage]
mov ebx, dword [sym.imp.USER32.dll_DispatchMessageA]
nop
lea eax, [esp + 0x74]
push eax
call edi
lea eax, [esp + 0x74]
push eax
call ebx
push 0
push 0
push 0
lea eax, [esp + 0x80]
push eax
call esi
test eax, eax
jg 0x4223c0
cmp dword [0x4b0984], 0
je 0x4223f6
mov eax, dword [0x4b098c]
test eax, eax
je 0x4223f6
call eax
push str.Kaillera_:_kailleraShutdown__
call fcn.00419590
mov eax, dword [0x4b09a4]
add esp, 4
test eax, eax
je 0x42240e
call eax
mov eax, dword [0x24b17a8]
test eax, eax
je 0x42241e
push eax
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov eax, dword [esp + 0x7c]
pop edi
pop esi
mov dword [0x24b17a8], 0
pop ebx
mov esp, ebp
pop ebp
ret 0x10
call fcn.004756b4
call fcn.004756b4
call fcn.004756b4
call fcn.004756b4
call fcn.004756b4
call fcn.004756b4
int3