📄 keyrpt.asm
字号:
; This program reads the file created by the KEYEVAL.EXE TSR program.
; It displays the log containing dates, times, and number of keystrokes.
.xlist
.286
include stdlib.a
includelib stdlib.lib
.list
dseg segment para public 'data'
FileHandle word ?
month byte 0
day byte 0
year word 0
hour byte 0
minute byte 0
second byte 0
KeyStrokes word 0
RecSize = $-month
dseg ends
cseg segment para public 'code'
assume cs:cseg, ds:dseg
; SeeIfPresent- Checks to see if our TSR is present in memory.
; Sets the zero flag if it is, clears the zero flag if
; it is not.
SeeIfPresent proc near
push es
push ds
pusha
mov cx, 0ffh ;Start with ID 0FFh.
IDLoop: mov ah, cl
push cx
mov al, 0 ;Verify presence call.
int 2Fh
pop cx
cmp al, 0 ;Present in memory?
je TryNext
strcmpl
byte "Keypress Logger TSR",0
je Success
TryNext: dec cl ;Test USER IDs of 80h..FFh
js IDLoop
cmp cx, 0 ;Clear zero flag.
Success: popa
pop ds
pop es
ret
SeeIfPresent endp
Main proc
meminit
mov ax, dseg
mov ds, ax
argc
cmp cx, 1 ;Must have exactly 1 parm.
je GoodParmCnt
print
byte "Usage:",cr,lf
byte " KEYRPT filename",cr,lf,0
ExitPgm
GoodParmCnt: mov ax, 1
argv
print
byte "Keypress logger report program",cr,lf
byte "Processing file:",0
puts
putcr
mov ah, 3Dh ;Open file command.
mov al, 0 ;Open for reading.
push ds
push es ;Point ds:dx at name
pop ds
mov dx, di
int 21h ;Open the file
jnc GoodOpen
print
byte "DOS error #",0
puti
print
byte " opening file.",cr,lf,0
ExitPgm
GoodOpen: pop ds
mov FileHandle, ax ;Save file handle.
; Okay, read the data and display it:
ReadLoop: mov ah, 3Fh ;Read file command
mov bx, FileHandle
mov cx, RecSize ;Number of bytes.
mov dx, offset month ;Place to put data.
int 21h
jc ReadError
test ax, ax ;EOF?
je Quit
mov cx, year
mov dl, day
mov dh, month
dtoam
puts
free
print
byte ", ",0
mov ch, hour
mov cl, minute
mov dh, second
mov dl, 0
ttoam
puts
free
printf
byte ", keystrokes = %d\n",0
dword KeyStrokes
jmp ReadLoop
ReadError: print
byte "Error reading file",cr,lf,0
Quit: mov bx, FileHandle
mov ah, 3Eh ;Close file
int 21h
ExitPgm
Main endp
cseg ends
sseg segment para stack 'stack'
stk db 1024 dup ("stack ")
sseg ends
zzzzzzseg segment para public 'zzzzzz'
LastBytes db 16 dup (?)
zzzzzzseg ends
end Main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -