第六篇 键盘中断与应用程序读取键盘缓冲区

python实现键盘记录木马 pyHook第三方库,用于捕捉特定的Windows事件,封装了所有底层调用,我们 只需要关注程序逻辑。更多内容及使用方法请自行查找 下载链接:http://sourceforge.net/projects/pyhook/主干逻辑图当程序运行后,每当用户在键盘按下一个键,就会触发钩子函数,调用 键盘记录函数 记录按键内容,该函数又会调用 进程切换函数 来应对焦点窗口切换的情况并打印出相应的进程名称 阅读详情

这篇博文主要介绍在X86下键盘的中断过程,以及应用程序如何利用中断读取键盘缓冲区内容。

 

一、撰写该篇博文的背景介绍

在我们全屏看视频时,按下Esc键,播放器还原或者最小化;在利用其他软件的时候,我们会

发现,设置可以设置打开或关闭程序的快捷方式......

应用程序为什么可以根据键盘的指示工作?又是如何工作的呢?

 

二、对于键盘中断的介绍

当我们在按下按键时,键盘会把按键的扫描码发送到主板的接口电路中,具体说就是端口60H。

当60H收到扫描码,这时接口就会向CPU发出中断请求。这是一个可屏蔽中断。所以,当IF=1,

并且CPU执行完当前指令后就会响应中断。也就是进入int 9中断服务程序。此时,程序将读取

60H中的扫描码,并判断输入的按键是什么。

 

 

 

三、应用程序读取键盘缓冲区

利用键盘控制应用程序主要有两种方式:

1、直接从60H端口中读取键盘扫描码,在应用程序中分析键盘输入的是字符还是控制符、切换符等。

2、利用BIOS提供的中断int 16H。

 

四、介绍本程序

1、功能:当按下按键a,屏幕被写成红色;再按下shift+a屏幕又恢复成黑色。程序运行过程中,按下其他键没

有响应。

2、本程序是利用BIOS功能调用int 16h,读取键盘缓冲区的。

3、通过直接向显存写数据的办法,改变了屏幕的颜色。

4、代码:

int9 equ 09h

data segment
	addr dw ?,?     ;存储系统int 9的地址
	flag db 0       ;程序结束的标志,为1表明按下了shift+a,介绍程序
data ends

code segment
	assume cs:code,ds:data
start:
	mov ax,data
	mov ds,ax

	mov ax,0
	mov es,ax

	;保存原中断地址
	mov ax,es:[int9*4]
	mov addr,ax
	mov ax,es:[int9*4+2]
	mov addr[2],ax

	;设置新中断地址
	;cli
	;mov word ptr es:[int9*4],offset isr
	;mov word ptr es:[int9*4+2],seg isr
	;sti

	;加入新中断服务程序地址
	cli
	lea ax,isr
	mov es:[int9*4],ax
	mov ax,seg isr
	mov es:[int9*4+2],ax
	sti


	;等待shift+a,结束程序
back:
	cmp flag,1
	je leave
	jmp back

	;恢复原中断地址
leave:
	cli
	mov ax,addr
	mov es:[int9*4],ax
	mov ax,addr[2]
	mov es:[int9*4+2],ax
	sti

	mov ah,4ch
	int 21h

;新的中断服务程序
isr proc far
	push ax
	push bx

	mov ax,data
	mov ds,ax

	;调用原int 9完成必要的工作
	pushf
	call dword ptr addr

	;调用BIOS的int 16h读出键盘缓冲区的一个字节
	mov ah,0
	int 16h
	
	;按下a
	cmp al,61h
	je go1

	;按下shift+a
	cmp al,41h
	je go2
back1:
	pop bx
	pop ax
	iret

	;按下a通过bl传递显存中的字符属性为高亮红色		
go1:
	mov bl,48h
	call far ptr display
	jmp back1

	;按下shift+a则恢复
go2:
	mov flag,1
	mov bl,0
	call far ptr display
	jmp back1

isr endp

display proc far
	push cx
	push si

	;向显存内写
	mov cx,0b800h
	mov es,cx
	
	mov cx,2000
	mov si,1
again:
	mov es:[si],bl
	add si,2
	loop again

	pop si
	pop cx
	ret

code ends
	end start

5、实验结果截图

①按下a

②按下shift+a

 

五、博主上传了王爽《汇编语言》。欢迎学习交流。

 

 

汇编语言:键盘中断 汇编语言:键盘中断 实验目的:了解8259中断控制器的使用,掌握键盘中断的编程,观察中断的执行情况。 实验任务:每按下任意一个键就向CPU发出中断请求信号,该信号由8259的IRQ1引入,中断类型号为09, CPU响应中断后转入执行中断服务程序,并在屏幕上显示“OK!”,按下10次键后返回DOS。 附加任务:通过DOS系统功能调用的25H,35H功能实现中断向量的设置和读取;在显示”OK前加上按键次数;按下10次键盘后直接返回;修改显示字符属性 阅读详情

相关推荐

键盘输入缓冲区的问题

有两个进程同时存在于一个程序中。其中第一个进程在屏幕上连续显示‘A’字符,与此同时,程序不断检测是否有键盘输入,如果有,就读如用户键入的字符并保存到输入缓冲区中。在用户输入时键入的字符不立即显示在屏幕上。当用户渐入’;’或’,’时,第一个进程结束,第二个进程从缓冲区中依次读取用户输入的字符,并显示在屏幕上。第二个进程结束后,程序又进入第一个进程,重新显示‘A’,同时用户又可以继续键入字符,直到用户键入‘.’时,第二个进程结束。另外,当输入缓冲区满后,强行中止第一个进程,进入第二个进程。

12.键盘中断处理

简介 上一节我们实现了键盘中断事件调用显示所有可显示字符的字体图形显示,对中断处理机制有基本的认识。 目标 1.实现键盘扫描码字体图标显示。当键盘上的一个按键按下时,键盘会发送一个中断信号给CPU,与此同时,键盘会在指定端口(0x60) 输出一个数值,这个数值对应按键的扫描码(make code)叫通码,当按键弹起时,键盘又给端口输出一个数值,这个数值叫断码(break code).我们以按键按键...

Zllvincent的博客 1万+

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 600

自制操作系统13:移动鼠标 - 中断机制探秘,键盘中断识别具体键值,键盘缓冲区

参考:https://blog.youkuaiyun.com/tyler_download/article/details/52770376https://www.bilibili.com/video/BV1VJ41157wq?p=13https://weread.qq.com/web/reader/38732220718ff5cf3877215k9f6326602389f61408e3715 上节只是捕获了按键,然后打印出来事件,但并不知道按了哪个键。 今天我们继续加油吧。鼠标不动的原因已经大体弄清楚了,主要是由于设

hb_zxl的专栏 643

《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》论文阅读笔记

文章名:《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》 作者Jiyao Wei a,1, Jian Liaoa,1, Zhenfei Yanga, Suge Wanga,b,∗, Qiang Zhaoa 年份 2019 1 Introduction 目前文本情感分析多分析带...

weixin_39036944的博客 1631

DDR内存设计必看:DFI接口协议详解与实战避坑指南(附时序图解析)

本文深入解析了DDR内存设计中连接内存控制器与物理层的DFI接口协议,聚焦于DDR4/DDR5设计的实际痛点。文章详细阐述了协议版本兼容性、时钟架构(匹配频率与频率比系统)、PCB信号完整性设计以及上电初始化与调试等关键环节,为硬件工程师提供了一套从理论到实战的完整避坑指南,并附有时序图解析以助理解。

weixin_29256771的博客 331

c语言从键盘缓冲区取值,【C语言篇】? 3. 缓冲区问题

缓冲区:输入缓冲区键盘—》键盘缓冲区—》输入缓冲区—》程序(scanf函数)我们在键盘上输入的任何东西,会先进入输入缓冲区区域,然后程序从输入缓冲区里把数据一个一个读出来。输入缓冲区的管理方式:先进入的数字会被先读出来(输入缓冲区里把前面的数字读走了,才能读后面的数字)scanf就是从输入缓冲区里拿数字,如果输入缓冲区的内容和scanf指定的格式类型不一样,它就不动,不会把输入缓冲区里的任何内容转...

weixin_39875805的博客 1374

模电专题-MOS管的放大电路分析

在实际应用中,我们经常会使用到功率MOS,这时通常不会将它当成一个开关使用,而是当成一个放大器来使用,那这就需要让其工作在放大状态。参考下图中的mos管的特性曲线,右图中的输出特性曲线中有一根红色的分界线,这个线就是区分mos管工作状态的分界线,在红线的左边,mos管工作在可变电阻区,也就是线性区;在红线的右边mos管工作在恒流区,也就是饱和区。当然,还有一个截止区。本文分析主要运用模电课本中的理论计算验证。

Anitawen的博客 2万+

动手写操作系统9----键盘&鼠标中断实现

键盘&鼠标中断实现 本节主要实现键盘中断和鼠标中断,键盘中断实现将键盘数据显示到屏幕;鼠标中断实现鼠标位置的移动。 键盘中断通过主8259A的IRQ1触发,鼠标中断通过从8259A的IRQ4触发 CPU通过中断向量号来寻址待执行的中断代码 中断向量号 = 起始向量号 + 中断请求号 ...

大魔王 4494

CEH Practical 实战考试真题与答案

CEH Practical 是 EC-Council 推出的Certified Ethical Hacker(CEH)认证项目中的一项高级动手实践考试。它不同于传统的理论考试,侧重于在真实环境中检验考生的实操能力。

sgafdgdagd的博客 970

Linux环境下OpenSSH升级到 OpenSSH_9.8p1(内置保姆级教程并包含openssl升级过程)

2024年7月1日接到安全部门同事邮件通知,目前生产环境及测试环境服务器Openssh存在远程代码执行漏洞(CVE-2024-6387),漏洞等级高,且攻击者可以成功利用该漏洞获得远程root shell最高权限从而执行任意代码及命令,主要受影响版本为8.5p1

菜鸟运维升级之路 2万+

键盘之中断法1

本次项目是一个按键、外部中断、LED但又不失基础的综合项目,为接下来的学习大有裨益!最后,LED-执棋困局下一文章我们将继续介绍按键与中断的综合性项目,我们敬请期待吧!!!

LIN___IT的博客 868

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

汇编语言(王爽)17章键盘缓冲区

cpu执行完int9之后,键盘输入放到了键盘缓冲区中。 键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ascii码 只有通码及相应ascii码会放入键盘缓冲区,断码不会 一个按键占一个字,高位字节放扫描码,低位字节放ascii码 控制键(shift、ctrl等)不会放入键盘缓冲区,但会改变状态字节的对应位 int 16h;ah=0从键盘缓冲区读取一个键盘输入。返回:ah=扫描码,a...

weixin_43292547的博客 2381

【DaVinci Developer工具实战】03 -导入xml文件

本文档描述了 DaVinci Developer 导入数据的的具体功能 ,它适用于导入AUTOSAR SWC 模板【AUTOSAR XML 文件】 文件。

1991

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

流缓冲区与键盘缓冲区

今天猛然被问道输入输出流与缓冲区的关系,一下子懵了,于是各种百度和请教大神,以下是暂时得出的结论,欢迎各位大神们斧正。 键盘的输入缓冲区由键盘驱动或键盘控制器实现,是内存的一块区域。按下回车后,数据从键盘的输入缓冲区,进入流缓冲区(系统给它另外单独开了一块内存不过跟键盘那个不在同一个位置),进而形成输入流,提取运算符">>"才能从中提取数据。 输入流的本质是文件,打开流即打开文件,如标准输入流

黑暗之神 2341

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

使用Python开发木马程序

使用Python开发木马程序 一、实验介绍 1.1 实验内容 木马程序会给普通用户带来很多危害,比如盗取QQ账号,游戏账号等。课程将用Python实现一个简易的木马程序,该程序会记录用户的键盘输入和屏幕截图并将数据发送到指定的服务器。通过分析键盘输入的数据,可以分析出root密码和其他账号的密码等等。 1.2 实验知识点 linux设备文件linux下Python多进程编程Pytho

oxuzhenyi的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汇编语言_使用int16h中断读取键盘缓冲区

利用int 16h读取键盘缓冲区,int16的使用方法如下: mov ah,0 int 16h 结果:ah=扫描码,al=ASCII码 调用int16h中断检测到键盘缓冲区后,发现缓冲区空,则循环等待,知道缓冲区中有数据;如果缓冲区满,则覆盖掉之前的数据。 本实验就是利用了16中断检测缓冲区空不断读取的特性,完成了从缓冲区读取一个字符,并作出判断,根据是否符合条件来改变屏幕的颜色值。代码如下: assume cs:code,ss:stack,ds:data data segment db 128 du

weixin_43916755的博客 3299

键盘按下背后的中断秘密

键盘输入中断是计算机系统中处理用户输入的高效机制。通过键盘控制器生成中断信号,CPU能够及时响应用户的输入,确保输入数据能够快速、准确地被处理。这一过程涉及硬件和软件的紧密协作,是现代计算机系统中不可或缺的一部分。理解键盘输入中断的工作原理对于深入学习计算机系统和操作系统的设计与实现非常重要。接下来我们可以进一步探讨键盘输入中断的相关内容,包括其在操作系统中的实现、可能遇到的问题以及如何优化输入处理等方面。键盘输入中断是计算机系统中处理用户输入的核心机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 2153

已解决(Python键盘中断报错问题) KeyboardInterrupt

成功解决(Python键盘中断报错问题):KeyboardInterrupt

努力让自己发光,对的人才能迎着光而来 7万+

键盘之中断法2-与数码管结合

讲述键盘、外部中断、数码管综合项目

LIN___IT的博客 673

ARM7键盘工作原理及中断方式实现(C语言)

一般键盘结构如图所示. 图中的每个行列交叉处为一个按键。当键盘上没有任何按键动作,整个行列线均处于断开状态,此时列线输出为高电平,当某个按键被按下,则与此按键相连的行线被连通,此时对应列线电平输出则取决于行线的电平。如果将所有列线设置为输出,对应行线设置为输入,则可通过程序控制行线的电平状态,如,首先将第一行设置为低电平,其余行为高电平,此时依次检测列线电平输出状态,若第一列电平输出为低

grow_mature的专栏 3863

键盘中断

键盘中有一颗键盘编码器的芯片,通常是Intel8048

guocaigao的专栏 4582

键盘缓冲区

键盘缓冲区的简要解释。

tq02的博客 2511

那些突然想到的问题---关于电脑里中断是怎样的

中断服务程序(Interrupt Service Routine,ISR)是操作系统中用于处理中断的一段代码,其代码结构和实现方式取决于具体的中断类型和操作系统。一般来说,中断服务程序包括:1. 中断处理程序的入口:中断请求信号到达CPU后,CPU会跳转到中断处理程序的入口处,开始执行中断处理程序。2. 保存CPU状态:中断处理程序在执行前需要保存当前CPU的状态,包括程序计数器、堆栈指针、寄存器等。这些状态信息通常被保存在堆栈中。

m0_62598965的博客 1101
上一篇: 第五篇 直接面向系统资源的0号中断处理
下一篇: 第七篇 使用8253计数器
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值