本实验包含 2 关,要求如下:
Phase 1
键入 F12,激活功能,键入学生本人的姓名拼音,首尾字母等显示
比如:zhangsan,显示为:hagsa*
Phase 2
键入“学生本人的学号” :激活功能,键入学生本人的姓名拼音,首尾字母等显示
比如:zhangsan,显示为:hagsa*,
键入“学生本人的学号-” :取消显示*功能
提示:完成本实验需要对 lab4/linux-0.11/kernel/chr_drv/目录下的 keyboard.s、console.c 和 tty_io.c 源文件进行分析,理解按下按键到回显到显示频上程序的执行过程,然后对涉及到的数据结构进行分析,完成对前两个源程序的修改。修改方案有两种:
 在 C 语言源程序层面进行修改
 在汇编语言源程序层面进行修改

四、实验步骤及实验分析

首先进行环境的安装

1.输入指令,下载以及安装相关资源并解压

Phase_1
2.进行F12按键的功能修改
进入文件夹

keyboard.S函数修改,增加全局变量f12Flag

函数func中的加入call change_f12Flag

在/kernel/chr_drv/console.c中增加函数change_f12Flag


f12Flag置位时,将英文字母显示为‘*“

改为输入名字时,进行改变

运行指令截图(如下)

运行结果截图(如下)

Phase_2

指令输入

分析:基于第一阶段的基础上,扩展的功能是需要正确输入本人的学号进行触发“”处理,如“2018211252liubaolin”;并且若本人学号输入为”2018211252-liubaolin”,那么就不会出发“”的处理.基于以上分析,在console.c文件中进行修改。而具体来说,因为console.c文件主要是包含控制初始化程序和控制台写函数con_write();如果是写队列中取出的字符是普通显示字符代码,就直接从当前映射字符集中去除对应的显示字符,并放到当前光标所处的显示位置,即直接显示该字符。而此处,我们借助这个原理,稍作改变,增加条件判断语句,如果经过判断符合”2018211252liubaolin”,那么就将首字母与末尾字母和与之相同的字母的输出改为“”输出;若不是,那么正常输出。并且需要判断输入是“2018211252-liubaolin”时,那个”-“符号决定是否关闭”“处理,按照如此思路解决即可。当然为了保证“*”被激活一次之后,就一直处于激活状态,那么我们需要查看类似于”f12Flag”功能的实现方案。在本实验需要对 lab4/linux-0.11/kernel/chr_drv/目录下的 keyboard.s、console.c 和 tty_io.c 源文件进行分析,理解按下按键到回显到显示频上程序的执行过程,然后对涉及到的数据结构进行分析,完成对前两个源程序的修改。我采取在C语言源程序层面进行修改。

逐步程序分析
1.首先基于keyboard.S源文件的分析,找到如下图;这是一段对子程序处理功能键,把功能键扫描码变成转义字符并存放入到读队列中,并且调用修改插入的函数cahnge_f12Flag,很明显只要键入F12,就会调用该函数。

2.并且根据规则可知,键入F12,因为初始时,f12Falg = 0,那么进入函数cahnge_f12Flag()中就会出现的如下改变:刚开始是0,那么进入该函数后,赋值为1。

3.根据f12Flag在上一步被赋值为1,那么如下程序就可以执行“”的功能,并且直到f12Falg = 0 时,关闭”“的供能。

基于以上的f12Flag的相关执行程序,那么我只需要根据以上步骤将f12Flag的键入输入改为此处的学号的判断,并且将num标识符作为自己的类似于f12Flag的功能实现的全局变量即可。

下列进行console.c源代码修改
1.在此处添加全局变量extern int num = 0;作为标志,起到为判断结果做记号的功能。功能类似于extern int f12Flag的作用。

2.修改主体部分的con_write函数,做学号的输入的判断如”2018211252liubaolin”的输入判断;如果输入正确的话,就进行num = 1的赋值;那么在后续的运行测试当中,若未输入“2018211252-”,因为一直有num = 1,那么”“功能一直都处于被激活的状态,会每次将我的姓名拼音当中的”l”和“n”都以“”的形式显示出来。若输入的是“2018211252-”那么就会关闭”*”的激活状态,使之处于关闭前状态。

运行测试结果
经过反复的测试验证,具备键入“学生本人的学号” :激活功能,键入学生本人的姓名拼音,首尾字母等显示;键入“学生本人的学号-” :取消显示*功能。

运行结果信息分析:
1.第一次输入”liubaolin”会发现拼音是正常的输出。因为未激活“”状态。
2.第二次输入”2018211252liubaolin”,会发现输出已经将学生本人的姓名拼音,首尾字母等显示
。完成 “”状态的激活,以及实现“”功能。
3.第三次输入“liubaolin”,”“功能正常执行。
4.第四次键入”2018211000-“,”
“功能仍然正常执行,因为不符合我的学号”2018211252“。
5.第五次键入”2018211253-“,”“功能仍然正常执行,因为不符合我的学号”2018211252“。
6.第六次键入”2018211252-liubaolin“,”
”功能被关闭,并且正常输出我的本人的姓名拼音“liubaolin”。
7.第七次键入”liubaolin”,会发现拼音是正常的输出,因为“*”状态处于关闭状态。

csapp--键盘驱动程序的分析与修改相关推荐

  1. CSAPP LAB4 键盘驱动程序的分析与修改(谢罪)

    -------------不用往下看力,,我实验想多了导致画蛇添足,请各位大手子根据实验报告要求编写,在此谢罪----------------------- . . . . . . . . . 准备环 ...

  2. PC键盘驱动程序源码分析

    一.   编写目的: 描述uclinux内核中pc机键盘驱动的体系结构和工作原理,用于指导针对具体的嵌入式键盘的驱动程序的编写. 二.   参考资料: 1.<Linux内核源代码情景分析(下册) ...

  3. WDM内核驱动程序模型分析

    WDM内核驱动程序模型分析  WDM驱动程序是Windows 2000操作系统重要的组成部分,它的正常工作需要有Windows 2000其它内核组件的支持,同时大部分的内核组件也必须同WDM驱动程序交 ...

  4. QQ 键盘加密保护分析

    QQ 键盘加密保护分析 让我们现在开始进入正题, QQ 键盘加密保护主要依赖的是 QQ 目录下的 3 个文件,分别是 npkcrypt.sys . npkcusb.sys 和 npkcrypt.vxd ...

  5. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 使用 IDA 分析要修改的内存特征 | 根据内存特征搜索修改点 | 修改进程内存 )

    文章目录 一.使用 IDA 分析要修改的内存特征 二.根据内存特征搜索修改点 三.修改进程内存 一.使用 IDA 分析要修改的内存特征 在前的博客 [Android 逆向]逆向修改游戏应用 ( 分析应 ...

  6. Android之Launcher分析和修改1——Launcher默认界面配置(default_workspace)

    www.cnblogs.com/mythou/p/3153880.html 最近工作都在修改Launcher,所以打算把分析源码和修改源码的过程记录下来,最近会写一些关于Launcher的分析和修改博 ...

  7. c语言键盘驱动程序,c语言键盘扫描程序

    描述 c语言键盘扫描程序 4*4键盘扫描C语言程序 /*  4x4矩阵键盘的扫描程序 测试通过*/ #includesbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2= ...

  8. 帆软report分析报表修改控件样式

    帆软report分析报表修改CSS样式 参考文档 修改单元格按钮控件背景色.字体颜色 setTimeout(function() {$("div[widgetname=BUTTON1]&qu ...

  9. 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发

    O 引 言 随着以计算机技术.通信技术和软件技术为核心的信息技术的发展,嵌入式系统在各个行业中得到了广泛的应用.嵌入式系统已成为当今IT行业的焦点之一.而在嵌入式系统中,键盘是重要的人机交互设备之一. ...

  10. GPS PCB走线问题分析和修改

    GPS PCB走线问题分析和修改 1.主板介绍 主板是一个4G GPS定位器的4层通孔板,因为终端的功能较多同时要求体积较小,板子的GPS芯片和主控芯片只能布局于板子的中心位置,给射频走线处理带来了很 ...

最新文章

  1. NR 5G 协议层服务和功能
  2. 解决Visual Studio 找不到报表控件、rdlc中文乱码
  3. 11.10 chkconfig:管理开机服务
  4. Android 返回桌面
  5. 阿里云从0安装mysql到远程连接
  6. 白噪声检测_科学家尝试用智能扬声器的白噪声来监测婴儿的呼吸运动
  7. 30muduo_net库源码分析(六)
  8. Spring MVC 3.2+ @ResponseBody 导致的中文乱码处理
  9. 高等数学 下册 第九章 偏导数 笔记
  10. 变频器RS485通讯协议
  11. 硅谷硬核Rasa课程、Rasa培训、Rasa面试系列之:Rasa 3.x rasa run actions等运行命令学习
  12. AIOT在数字化转型中的机遇和挑战
  13. 第三单元 用python学习微积分(二十二)功、平均值、概率(下)和 数值积分(1)
  14. 50种响应式web设计的奇妙工具
  15. 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
  16. [动态规划] 什么是动态规划
  17. 自动化测试C语言程序,初级自动化测试笔试题
  18. 【精选模板】古风汉服影楼摄影PSD源文件,绝美的素材,附带预览图
  19. C:勇敢羊羊不怕困难!2022-2023年度第四届全国大学生算法设计与编程挑战赛(秋季赛)之羊驼
  20. 我国已建立30个5G基站 仪表厂商发力5G第二阶段测试

热门文章

  1. WinCC界面中通过插件打开pdf文件
  2. 仙侣情缘之麒麟劫java_《仙侣情缘之麒麟劫》详细流程攻略[多图]
  3. win10更改/修改c盘下的用户名/Users
  4. 计算机用户目录是什么,c盘里面users是什么文件夹
  5. 苹果系统 怎么找到共享计算机,Mac电脑怎么访问共享文件夹
  6. Python数据可视化 | 一文带你掌握Pyecharts地理数据可视化
  7. Office 添加或删除 skype for business、oneNote、OutLook、oneDrive等功能
  8. 选择合理的WCDMA网络无线扩容方案(转)
  9. 电脑文件的后缀名不见了,如何显示隐藏扩展名?
  10. Web前端开发—html基础(3)