Function at 0x408690
Capabilities:
Check for hardware breakpoints
Hijack thread execution
Resume thread
Suspend thread

Disassembly:
push ebp
mov ebp, esp
add esp, 0xfffffd24
push ebx
push esi
push edi
mov esi, dword [ebp + 0x10]
mov edi, dword [ebp + 8]
cmp dword [0x4d375c], 0
jne 0x4086b3
or eax, 0xffffffff
jmp 0x4089e2
cmp esi, 1
je 0x4086c7
cmp esi, 5
je 0x4086c7
cmp esi, 6
je 0x4086c7
cmp esi, 7
jne 0x4086d0
mov dword [ebp + 0xc], 1
jmp 0x4086f1
cmp esi, 4
jne 0x4086dd
and edi, 0xffff
jmp 0x4086f1
test esi, esi
je 0x4086f1
mov edx, dword [ebp + 0xc]
dec edx
test edx, edi
je 0x4086f1
or eax, 0xffffffff
jmp 0x4089e2
cmp dword [ebp + 0xc], 1
je 0x40870b
cmp dword [ebp + 0xc], 2
je 0x40870b
cmp dword [ebp + 0xc], 4
je 0x40870b
or eax, 0xffffffff
jmp 0x4089e2
mov eax, 0x4d8d70
xor edx, edx
mov dword [ebp - 8], edx
xor ebx, ebx
mov edx, dword [eax + 8]
test edx, edx
je 0x40875c
cmp esi, edx
jne 0x40875c
cmp edi, dword [eax]
jb 0x40873b
mov ecx, dword [eax]
mov edx, dword [ebp + 0xc]
add ecx, dword [eax + 4]
add edx, edi
cmp ecx, edx
jb 0x40873b
xor eax, eax
jmp 0x4089e2
cmp edi, dword [eax]
ja 0x40875c
mov ecx, dword [eax]
mov edx, dword [ebp + 0xc]
add ecx, dword [eax + 4]
add edx, edi
cmp ecx, edx
ja 0x40875c
mov dword [eax], edi
mov ecx, dword [ebp + 0xc]
mov dword [eax + 4], ecx
mov dword [ebp - 8], 1
inc ebx
add eax, 0x1c
cmp ebx, 4
jl 0x408717
cmp dword [ebp - 8], 0
jne 0x408800
xor ebx, ebx
mov eax, 0x4d8d78
cmp dword [eax], 0
je 0x408784
inc ebx
add eax, 0x1c
cmp ebx, 4
jl 0x408776
cmp ebx, 4
jl 0x4087c9
cmp esi, 5
je 0x408798
cmp esi, 6
je 0x408798
cmp esi, 7
jne 0x4087a0
or eax, 0xffffffff
jmp 0x4089e2
push 1
call sym.ollydbg.exe__Hardbreakpoints
pop ecx
test eax, eax
je 0x4087b4
or eax, 0xffffffff
jmp 0x4089e2
xor ebx, ebx
mov eax, 0x4d8d78
cmp dword [eax], 0
je 0x4087c9
inc ebx
add eax, 0x1c
cmp ebx, 4
jl 0x4087bb
cmp ebx, 4
jl 0x4087e1
push str.There_is_no_free_slot_for_a_new_hardware_breakpoint.
call sym.ollydbg.exe__Error
pop ecx
or eax, 0xffffffff
jmp 0x4089e2
mov eax, ebx
shl eax, 3
sub eax, ebx
mov dword [eax*4 + 0x4d8d70], edi
mov edx, dword [ebp + 0xc]
mov dword [eax*4 + 0x4d8d74], edx
mov dword [eax*4 + 0x4d8d78], esi
cmp dword [0x4d5a5c], 3
jne 0x4089e0
cmp esi, 5
je 0x4089e0
cmp esi, 6
je 0x4089e0
cmp esi, 7
je 0x4089e0
mov ecx, dword [0x4d7db0]
mov dword [ebp - 0xc], ecx
cmp dword [ebp - 0xc], 0
jne 0x40884a
push str.Internal_error:_dont_know_how_to_set_hardware_breakpoint.
call sym.ollydbg.exe__Error
pop ecx
or eax, 0xffffffff
jmp 0x4089e2
xor ebx, ebx
mov eax, dword [ebp - 0xc]
lea esi, [eax + 0xc]
jmp 0x408863
mov eax, dword [esi]
push eax
call sub.KERNEL32.DLL_SuspendThread
inc ebx
add esi, 0x66c
cmp ebx, dword [0x4d7d98]
jl 0x408854
xor ebx, ebx
mov eax, dword [ebp - 0xc]
lea edx, [eax + 0xc]
mov dword [ebp - 0x10], edx
jmp 0x4089b3
mov dword [ebp - 0x2dc], 0x10010
lea ecx, [ebp - 0x2dc]
push ecx
mov eax, dword [ebp - 0x10]
mov edx, dword [eax]
push edx
call sub.KERNEL32.DLL_GetThreadContext
test eax, eax
je 0x4089ab
mov ecx, dword [0x4d8d70]
mov eax, dword [0x4d8d8c]
mov dword [ebp - 0x2d8], ecx
mov dword [ebp - 0x2d4], eax
mov edx, dword [0x4d8da8]
mov ecx, dword [0x4d8dc4]
mov eax, 0x4d8d78
mov dword [ebp - 0x2d0], edx
xor edx, edx
mov dword [ebp - 0x2cc], ecx
mov esi, 0x400
cmp dword [eax], 0
je 0x408986
mov ecx, edx
add ecx, ecx
mov edi, 1
shl edi, cl
or esi, edi
mov ecx, dword [eax]
cmp ecx, 7
ja case.0x4088f7.0
jmp dword [ecx*4 + 0x4088fe]
xor ecx, ecx
mov dword [ebp - 4], ecx
mov dword [eax - 4], 1
jmp 0x40895e
mov dword [ebp - 4], 3
or esi, 0x100
jmp 0x40895e
mov dword [ebp - 4], 1
or esi, 0x100
jmp 0x40895e
mov dword [ebp - 4], 2
or esi, 0x100
jmp 0x40895e
xor ecx, ecx
mov dword [ebp - 4], ecx
mov ecx, dword [eax - 4]
sub ecx, 2
je 0x40896d
sub ecx, 2
je 0x408973
jmp 0x408977
or dword [ebp - 4], 4
jmp 0x408977
or dword [ebp - 4], 0xc
mov ecx, edx
shl ecx, 2
add ecx, 0x10
mov edi, dword [ebp - 4]
shl edi, cl
or esi, edi
inc edx
add eax, 0x1c
cmp edx, 4
jl 0x4088da
mov dword [ebp - 0x2c4], esi
lea eax, [ebp - 0x2dc]
push eax
mov edx, dword [ebp - 0x10]
mov ecx, dword [edx]
push ecx
call sub.KERNEL32.DLL_SetThreadContext
inc ebx
add dword [ebp - 0x10], 0x66c
cmp ebx, dword [0x4d7d98]
jl 0x40887b
xor ebx, ebx
mov eax, dword [ebp - 0xc]
lea esi, [eax + 0xc]
jmp 0x4089d8
mov eax, dword [esi]
push eax
call sub.KERNEL32.DLL_ResumeThread
inc ebx
add esi, 0x66c
cmp ebx, dword [0x4d7d98]
jl 0x4089c9
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret