You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

老式DOS游戏内存驻留作弊程序键盘捕获技术问询

为老式DOS游戏开发内存驻留式作弊程序

最近我一直在捣鼓给老式DOS游戏做个简单的内存驻留(TSR)作弊程序——这类程序加载进内存后,会悄悄拦截键盘输入,当按下特定按键时就执行预设的作弊操作。

键盘中断拦截的核心实现

我用汇编代码直接操作DOS的中断向量表,来捕获键盘硬件中断(中断9),具体代码如下:

cli
mov ax, [es:9*4+2]
mov [origseg], ax
mov ax, [es:9*4]
mov [origint], ax
mov word [es:9*4], kbhandler
mov [es:9*4+2], cs
sti

这段代码的步骤拆解一下:

  • 先执行cli关闭所有可屏蔽中断,防止修改中断向量表的过程被打断,避免系统崩溃
  • 从ES寄存器指向的0段(中断向量表所在段)中,取出原中断9处理程序的段地址和偏移地址,分别存入origseg和origint变量保存
  • 将自定义的键盘处理函数kbhandler的偏移地址,以及当前代码段(CS)的地址,写入中断向量表的中断9条目,完成中断拦截的替换
  • 最后执行sti重新开启可屏蔽中断,让系统恢复正常中断响应

交还控制权给原处理程序

在自定义的kbhandler函数处理完自己的逻辑后,我用下面的代码把控制权交还给原来的键盘中断处理程序,确保系统的正常键盘功能不受影响:

push word [origseg]
push word [origint]
retf

目前通过调试器验证,这段逻辑是可以正常工作的~

内容的提问来源于stack exchange,提问作者Jakub Judas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:18:01