Function at 0x4ad264
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffcc
push ebx
push esi
push edi
xor ecx, ecx
mov dword [ebp - 0x14], ecx
mov dword [ebp - 0x10], ecx
mov dword [ebp - 8], ecx
mov dword [ebp - 4], edx
mov edi, eax
xor eax, eax
push ebp
push 0x4ad759
push dword fs:[eax]
mov dword fs:[eax], esp
mov ebx, dword [edi + 0x30]
mov eax, ebx
mov edx, dword [sym.imp.vcl70.bpl__Grids_TCustomGrid_]
call sub.rtl70.bpl__System__IsClass_qqrp14System_TObjectp17System_TMetaClass
test al, al
je 0x4ad2ad
mov edx, dword [ebp - 4]
mov eax, ebx
mov si, 0xffba
call sub.rtl70.bpl__System__CallDynaInst_qqrv
mov eax, dword [ebp - 4]
cmp byte [eax], 9
jne 0x4ad2c0
mov eax, dword [ebp - 4]
mov byte [eax], 0
jmp 0x4ad733
mov eax, dword [ebp - 4]
mov al, byte [eax]
add al, 0xe0
sub al, 0xe0
jb 0x4ad2ed
mov eax, dword [ebp - 4]
mov al, byte [eax]
cmp al, 8
je 0x4ad2ed
mov eax, dword [ebp - 4]
cmp byte [eax], 0xd
jne 0x4ad415
cmp byte [edi + 0x251], 0
je 0x4ad415
mov eax, edi
call fcn.004adb84
test eax, eax
je 0x4ad320
mov eax, edi
call fcn.004adb84
cmp byte [eax + 0x39], 0
jne 0x4ad320
mov eax, edi
call fcn.004adb84
mov al, byte [eax + 0x3a]
add al, 0xfe
sub al, 2
jb 0x4ad320
mov eax, dword [ebp - 4]
mov byte [eax], 0
jmp 0x4ad733
mov eax, edi
call fcn.004adb84
test eax, eax
jne 0x4ad348
mov eax, edi
call fcn.004adc0c
test al, al
jne 0x4ad733
xor edx, edx
mov eax, edi
call fcn.004adc18
jmp 0x4ad415
mov eax, edi
call fcn.004adc0c
test al, al
jne 0x4ad415
mov eax, dword [edi + 0x278]
cmp dword [eax + 0x1c], 0
je 0x4ad415
mov eax, dword [edi + 0x278]
mov eax, dword [eax + 0x1c]
call fcn.004da52c
test al, al
je 0x4ad415
mov ebx, dword [edi + 0x278]
mov eax, dword [ebx + 0x1c]
cmp byte [eax + 0x41], 0
jne 0x4ad733
mov eax, ebx
call sub.dbrtl70.bpl__Db_TDataLink_GetDataSet_qqrv
mov edx, dword [eax]
call dword [edx + 0x124]
test al, al
je 0x4ad733
mov eax, dword [edi + 0x278]
mov eax, dword [eax + 0x1c]
call fcn.004da52c
test al, al
je 0x4ad403
mov ebx, dword [edi + 0x30]
test ebx, ebx
je 0x4ad3f3
mov eax, ebx
call sub.rtl70.bpl__System_TObject_ClassType_qqrv
mov edx, 0x4ad770
call fcn.004debd8
test al, al
je 0x4ad3f3
mov eax, dword [edi + 0x30]
call fcn.004e04d0
test al, al
je 0x4ad3f3
mov eax, dword [edi + 0x278]
call sub.dbrtl70.bpl__Db_TDataLink_GetDataSet_qqrv
call sub.dbrtl70.bpl__Db_TDataSet_Edit_qqrv
jmp 0x4ad403
mov eax, dword [edi + 0x278]
call sub.dbrtl70.bpl__Db_TDataLink_GetDataSet_qqrv
call sub.dbrtl70.bpl__Db_TDataSet_Edit_qqrv
cmp byte [edi + 0x20e], 0
je 0x4ad415
xor edx, edx
mov eax, edi
call sub.vcl70.bpl__Stdctrls_TCustomEdit_SetReadOnly_qqro
mov eax, dword [edi + 0x240]
call fcn.004b0444
test al, al
je 0x4ad42f
mov eax, edi
call fcn.004abe24
test al, al
jne 0x4ad48d
cmp byte [edi + 0x28c], 0
je 0x4ad48d
mov eax, dword [ebp - 4]
mov al, byte [eax]
cmp al, 0x20
jne 0x4ad48d
mov eax, edi
mov si, 0xffb2
call sub.rtl70.bpl__System__CallDynaInst_qqrv
push 0x11
call sub.user32.dll_GetKeyState
test ax, ax
jl 0x4ad48d
mov edx, dword [ebp - 4]
mov eax, edi
call fcn.004acc48
test al, al
je 0x4ad48d
cmp word [edi + 0x24a], 0
je 0x4ad733
lea edx, [ebp - 0x10]
mov eax, edi
call sub.vcl70.bpl__Mask_TCustomMaskEdit_GetText_qqrv
mov edx, dword [ebp - 0x10]
mov eax, edi
call fcn.004af5cc
jmp 0x4ad733
mov eax, dword [ebp - 4]
mov al, byte [eax]
mov byte [ebp - 9], al
mov edx, dword [ebp - 4]
mov eax, edi
call fcn.004af8cc
xor ebx, ebx
mov eax, dword [ebp - 4]
cmp byte [eax], 0
jne 0x4ad4bd
cmp byte [edi + 0x260], 0
je 0x4ad4bd
mov dl, 1
mov eax, edi
call fcn.004b0568
jmp 0x4ad4e0
mov eax, edi
call sub.vcl70.bpl__Mask_TCustomMaskEdit_GetMasked_qqrv
test al, al
je 0x4ad4e0
mov eax, dword [ebp - 4]
cmp byte [eax], 0
jne 0x4ad4e0
cmp byte [ebp - 9], 0
je 0x4ad4e0
mov eax, dword [ebp - 4]
mov dl, byte [ebp - 9]
mov byte [eax], dl
mov bl, 1
lea ecx, [ebp - 8]
xor edx, edx
mov eax, edi
mov esi, dword [eax]
call dword [esi + 0x144]
test al, al
jne 0x4ad610
mov eax, dword [edi + 0x278]
mov esi, dword [eax + 0x1c]
mov eax, esi
mov edx, dword [sym.imp.dbrtl70.bpl__Db_TIntegerField_]
call sub.rtl70.bpl__System__IsClass_qqrp14System_TObjectp17System_TMetaClass
test al, al
jne 0x4ad526
mov eax, esi
mov edx, dword [sym.imp.dbrtl70.bpl__Db_TFloatField_]
call sub.rtl70.bpl__System__IsClass_qqrp14System_TObjectp17System_TMetaClass
test al, al
je 0x4ad5d2
lea edx, [ebp - 0x14]
mov eax, edi
mov ecx, dword [eax]
call dword [ecx + 0x108]
cmp dword [ebp - 0x14], 0
je 0x4ad5d2
mov eax, dword [ebp - 4]
mov al, byte [eax]
add al, 0xe0
sub al, 0xe0
jae 0x4ad610
mov eax, dword [edi + 0x278]
mov eax, dword [eax + 0x1c]
mov edx, dword [sym.imp.dbrtl70.bpl__Db_TIntegerField_]
call sub.rtl70.bpl__System__IsClass_qqrp14System_TObjectp17System_TMetaClass
test al, al
je 0x4ad592
mov eax, dword [ebp - 4]
mov al, byte [eax]
sub al, 0x2b
je 0x4ad610
sub al, 2
je 0x4ad610
add al, 0xfd
sub al, 0xa
jb 0x4ad610
push 0
call sub.user32.dll_MessageBeep
mov eax, dword [ebp - 4]
mov byte [eax], 0
jmp 0x4ad610
push edi
mov esi, 0x4ad780
lea edi, [ebp - 0x34]
mov ecx, 8
rep movsd dword es:[edi], dword [esi]
pop edi
mov eax, dword [sym.imp.rtl70.bpl__Sysutils_DecimalSeparator]
mov al, byte [eax]
and eax, 0xff
bts dword [ebp - 0x34], eax
mov eax, dword [ebp - 4]
mov al, byte [eax]
and eax, 0xff
bt dword [ebp - 0x34], eax
jb 0x4ad610
push 0
call sub.user32.dll_MessageBeep
mov eax, dword [ebp - 4]
mov byte [eax], 0
jmp 0x4ad610
mov eax, dword [ebp - 4]
mov al, byte [eax]
add al, 0xe0
sub al, 0xe0
jae 0x4ad610
mov eax, dword [edi + 0x278]
cmp dword [eax + 0x1c], 0
je 0x4ad610
mov edx, dword [ebp - 4]
mov dl, byte [edx]
mov eax, dword [edi + 0x278]
mov eax, dword [eax + 0x1c]
mov ecx, dword [eax]
call dword [ecx + 0xd8]
test al, al
jne 0x4ad610
push 0
call sub.user32.dll_MessageBeep
mov eax, dword [ebp - 4]
mov byte [eax], 0
mov eax, dword [ebp - 4]
movzx eax, byte [eax]
cmp eax, 0x16
jg 0x4ad637
je 0x4ad64f
sub eax, 8
je 0x4ad64f
dec eax
je 0x4ad707
sub eax, 4
je 0x4ad6c4
jmp 0x4ad729
sub eax, 0x18
je 0x4ad64f
sub eax, 3
je 0x4ad680
add eax, 0xfffffffb
sub eax, 0xe0
jae 0x4ad729
mov eax, dword [edi + 0x278]
call sub.vcldb70.bpl__Dbctrls_TFieldDataLink_Edit_qqrv
mov dl, 1
mov eax, edi
call fcn.004b0568
mov eax, edi
mov edx, dword [eax]
call dword [edx + 0x118]
test al, al
jne 0x4ad729
mov eax, dword [ebp - 4]
mov byte [eax], 0
jmp 0x4ad729
mov eax, edi
mov edx, dword [eax]
call dword [edx + 0xec]
mov eax, edi
mov edx, dword [eax]
call dword [edx + 0x7c]
mov eax, dword [ebp - 4]
mov byte [eax], 0
mov esi, dword [edi + 0x30]
test esi, esi
je 0x4ad729
mov eax, esi
call sub.rtl70.bpl__System_TObject_ClassType_qqrv
mov edx, 0x4ad770
call fcn.004debd8
test al, al
je 0x4ad729
mov eax, dword [edi + 0x30]
mov edx, dword [eax]
call dword [edx + 0xc4]
jmp 0x4ad729
cmp byte [edi + 0x251], 0
je 0x4ad6e3
mov eax, dword [edi + 0x278]
call sub.vcldb70.bpl__Dbctrls_TFieldDataLink_Edit_qqrv
mov dl, 1
mov eax, edi
call fcn.004b0568
jmp 0x4ad729
mov esi, dword [edi + 0x30]
test esi, esi
je 0x4ad729
mov eax, esi
call sub.rtl70.bpl__System_TObject_ClassType_qqrv
mov edx, 0x4ad770
call fcn.004debd8
test al, al
je 0x4ad729
mov eax, dword [ebp - 4]
mov byte [eax], 0
jmp 0x4ad729
mov esi, dword [edi + 0x30]
test esi, esi
je 0x4ad729
mov eax, esi
call sub.rtl70.bpl__System_TObject_ClassType_qqrv
mov edx, 0x4ad770
call fcn.004debd8
test al, al
je 0x4ad729
mov eax, dword [ebp - 4]
mov byte [eax], 0
test bl, bl
je 0x4ad733
mov eax, dword [ebp - 4]
mov byte [eax], 0
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4ad760
lea eax, [ebp - 0x14]
call sub.rtl70.bpl__System__LStrClr_qqrpv
lea eax, [ebp - 0x10]
call sub.rtl70.bpl__System__LStrClr_qqrpv
lea eax, [ebp - 8]
call sub.rtl70.bpl__System__LStrClr_qqrpv
ret