• [Assembly]汇编编写简易键盘记录器


    环境:
    Windows xp sp3
    工具:
    masm
    notepad++

    首先列出本次编程程序要执行的步骤:
    (1)、读取键盘所输入的字符
    (2)、输出到屏幕上
    (3)、完善Esc、Backspace、空格、回车的输出

    首先解决(1)
    这里我们可以利用int 16h的中断功能读取字符缓存区的字符

    mov ah,0
    int 16h

    执行完int 16h后 ah=扫描码 al=ASCII码

    例如我们输入abc后
    字符缓存区如下状态

    然后执行int 16h
    缓存区状态如下

    前面的1E61被读进了ah和al

    解决(2)
    既然解决了(1),也成功读取了ASCII码到al中
    这时候就是输出字符到屏幕上了

    这里可以用内存中的b800H~bffffH这段32KB的空间输出
    B800:0000就对应屏幕上第一列第一行了

    mov ax,0b800h
    mov es,ax
    mov ah,2
    mov al,41
    mov es:[si],ax
    add si,2

    高位存放该字符的属性 这里ah=2代码字符以绿色输出
    地位存放该字符的ASCII码 这里选择41H(A)来测试

    可以明显看到左上角屏幕出现了A

    最后可以编写出大概的程序如下;

    assume cs:code
    code segment
    start:
    mov cx,2h
    mov si,0
    ints:
    mov ah,0
    int 16h
    mov bl,al
    mov ax,0b800h
    mov es,ax
    mov al,bl
    mov ah,2
    mov es:[si],ax
    add si,2
    add cx,1
    loop ints
    mov ax,4c00h
    int 21h
    
    code ends
    end start

    执行完int16h之后就不断的往屏幕上输出,然后si+2指向下一个字符输出的屏幕地址

    随便输入几个字符,可以成功在屏幕上输出

    接下来优化下Esc、Backspace、空格、回车的输出
    根据上面的编程,已经知道程序是根据ASCII码到屏幕上输出的,可是Esc、Backspace、空格、回车的ASCII码不太明显
    这里用cmp指令判断Esc、Backspace、空格、回车的扫描码,然后再修改对应的al中的ASCII码
    程序如下

    assume cs:code
    code segment
    start:
    mov cx,2h
    mov si,0
    ints:
    mov ah,0
    int 16h
    cmp ah,1ch
    je ent
    cmp ah,39h
    je kg
    fh:mov bl,al
    mov ax,0b800h
    mov es,ax
    mov al,bl
    mov ah,2
    mov es:[si],ax
    add si,2
    add cx,1
    loop ints
    mov ax,4c00h
    int 21h
    
    ent:
    mov al,19h
    jmp fh
    kg:
    mov al,07h
    jmp fh
    
    code ends
    end start

    编译后我们依次输入Esc、空格、回车、Backspace

    可以看到屏幕出现了←(Esc)•(空格)↓(回车)◘(Backspace)


    最后附上各个键盘的扫描码

    注意,,程序中用了死循环!

  • 相关阅读:
    Android拍照+方形剪裁——附代码与效果图
    Caffe源代码中Solver文件分析
    Java学习笔记五(多线程)
    setTimeout和setInterval的区别
    javascript中this的妙用
    javascript基于原型的语言的特点
    css样式小技巧
    html块元素和内联元素
    怎么解决浏览器兼容性问题
    高效率、简洁、CSS代码优化原则
  • 原文地址:https://www.cnblogs.com/wh4am1/p/7708373.html
Copyright © 2020-2023  润新知