电子科技大学:《Linux操作系统内核技术 The Linux Kernel Technology》课程教学资源(课件讲稿)第四讲 内核模块不可调试之谜

第四讲内核模块不可调试之谜 李林 电子科技大学计算机学院
第四讲 内核模块不可调试之谜 李 林 电子科技大学 计算机学院

内核模块不可调试之谜 问题 练习程序员手段之调试驱动程序 调试内核版本3.13.0中的驱动程序(代码 4.1) 问题 停在断点之后,不能继续往下运行了 可能是什么原因?
内核模块不可调试之谜——问题 ◼ 练习程序员手段之调试驱动程序 ◼ 调试内核版本3.13.0中的驱动程序(代码 4.1) ◼ 问题: ◼ 停在断点之后,不能继续往下运行了 ◼ 可能是什么原因?

内核模块不可调试之谜 问题 利用反汇编手段,分析问题 再次调试程序,并反汇编发现: 0xffffffffa0272235 mov %cr3,%rax Oxffffffffa0272238 : mov %rax,-0x8(%rbp) Oxffffffffa027223c : int3 Oxffffffffa027223d : out %eax,(%dx) Oxffffffffa027223e : std Oxffffffffa027223f : (bad) Oxffffffffa0272240 dec %ecx Oxffffffffa0272242 : retq 什么是int3(trap)? 为什么会有int3(机器码0xcc)?能想到 什么?
内核模块不可调试之谜——问题 ◼ 利用反汇编手段,分析问题 ◼ 再次调试程序,并反汇编发现: ◼ 什么是int 3(trap)? ◼ 为什么会有int 3(机器码0xcc)?能想到 什么?

内核模块不可调试之谜 问题 调试器的基本原理 设置断点并continue后,调试器会将断点处的 内存修改为0xcC 运行到断点处后,相当于执行int3的处理函数, 即调试器的主要工作环境 ·同时,调试器会将断点处的0xcc修改为原值 kgdb不能往下执行的原因:在于没有将Oxcc 改回原值 问题来了:为什么没有改回原值?
内核模块不可调试之谜——问题 ◼ 调试器的基本原理 ◼ 设置断点并continue后,调试器会将断点处的 内存修改为0xcc ◼ 运行到断点处后,相当于执行int 3的处理函数, 即调试器的主要工作环境 ◼ 同时,调试器会将断点处的0xcc修改为原值 ◼ kgdb不能往下执行的原因:在于没有将0xcc 改回原值 ◼ 问题来了:为什么没有改回原值?

内核模块不可调试之谜 猜想 为什么没有改回原值? 代码有bug 代码忘写了 会不会驱动代码所在的物理页面不可写?
内核模块不可调试之谜——猜想 ◼ 为什么没有改回原值? ◼ 代码有bug ◼ 代码忘写了 ◼ …………… ◼ 会不会驱动代码所在的物理页面不可写?

内核模块不可调试之谜 实证 实证:驱动代码所在的物理页面不可写 如何实证? ·得首先找到驱动代码在哪一个物理页面 猜测:一定有信息用于描述一个物理页面可读、 可写属性 思路 弄清线性地址是怎么样转换成物理地址的? 弄清如何描述一个物理页面的属性 思路二: 弄清Linux内核是如何为驱动设置上述机制的?
内核模块不可调试之谜——实证 ◼ 实证:驱动代码所在的物理页面不可写 ◼ 如何实证? ◼ 得首先找到驱动代码在哪一个物理页面 ◼ 猜测:一定有信息用于描述一个物理页面可读、 可写属性 ◼ 思路一: ◼ 弄清线性地址是怎么样转换成物理地址的? ◼ 弄清如何描述一个物理页面的属性 ◼ 思路二: ◼ 弄清Linux内核是如何为驱动设置上述机制的?

实证思路一:弄清页表转换 线性地址转换成物理地址,通常要经过页表 逻辑地址 分段 线性地址 分页 物理地址 线性地址在页表作用下,可转换成物理地址 疑问: .谁执行page walk? 《页表由谁创建? ·谁会设置或修改页表?
实证思路一:弄清页表转换 ◼ 线性地址转换成物理地址,通常要经过页表。 ◼ 线性地址在页表作用下,可转换成物理地址 ◼ 疑问: ◼ 谁执行page walk? ◼ 页表由谁创建? ◼ 谁会设置或修改页表? 逻辑地址 线性地址 分段 分页 物理地址

实证思路 一:弄清页表转换 体系结构制订了页表的规范,内核只是按照 这个规范组织页表等数据结构 程序员手段之阅读技术文档 Volume 3:System Programming Guide Chapter 4 Paging Intel CPU:提供了多种页表结构: 级页表:32位非PAE模式 三级页表:PAE模式 四级页表:IA-32e,即64位模式
实证思路一:弄清页表转换 ◼ 体系结构制订了页表的规范,内核只是按照 这个规范组织页表等数据结构 ◼ 程序员手段之阅读技术文档 ◼ Volume 3: System Programming Guide ◼ Chapter 4 Paging ◼ Intel CPU提供了多种页表结构: ◼ 二级页表:32位非PAE模式 ◼ 三级页表:PAE模式 ◼ 四级页表:IA-32e,即64位模式

32位的页表 Linear Address 31 2221 1211 0 Directory Table Offset 12 4-KByte Page 10 10 Page Table Physical Address Page Directory PTE 20 PDE with PS=0 20 PS=1, CR3 4MB页面
32位的页表 PS=1, 4MB页面

PAE的页表 Linear Address 313029 2120 1211 0 Directory Pointer-> Directory Table Offset 12 4-KByte Page Page Table Physical Address Page Directory 9 9 PTE 40 PDE with PS=0 2 40 PDPTE Registers PS=1, 40 2MB页面 PDPTE value Page Directory Pointer Table
PAE的页表 Page Directory Pointer Table PS=1, 2MB页面
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 电子科技大学:《Linux操作系统内核技术 The Linux Kernel Technology》课程教学资源(课件讲稿)第三讲 指针存储之谜.pdf
- 电子科技大学:《Linux操作系统内核技术 The Linux Kernel Technology》课程教学资源(课件讲稿)第二讲 程序员技术手段.pdf
- 电子科技大学:《Linux操作系统内核技术 The Linux Kernel Technology》课程教学资源(课件讲稿)第一讲 课程概述(李林).pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第9章 Markov马尔科夫分类.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第8章 特征提取与降维.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第7章 非监督分类.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第6章 深度神经网络.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第5章 支持向量机.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第4章 回归分类.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第3章 统计分类.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第2章 数值最优化介绍.pdf
- 电子科技大学:《机器学习 Machine Learning》课程教学资源(课件讲稿)第1章 机器学习介绍(师君).pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)09 CDN内容分发网络.pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)11 社会计算(二).pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)11 社会计算(一).pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)10 物联网.pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)08 域名系统.pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)07 P2P网络(二)Distributed Hash Table.pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)06 P2P网络(一).pdf
- 电子科技大学:《网络计算模式 Network Computing Paradigm》课程教学资源(课件讲稿)05 云计算(三)数据一致性理论.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 01 面向对象软件开发概述.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 10 Java 高级编程.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 02 Java 概述.ppt
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 03 Java 编程入门.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 03 Java 编程入门.ppt
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 04 Java 语言基础.ppt
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 05 Java 类.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 05 Java 类.ppt
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 06 继承与多态.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 07 Java 工具类.pdf
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 08 数据结构与算法.ppt
- 南京大学:《Java语言程序设计 Programming in Java》课程教学资源(教案讲义)Lecture 09 图形用户界面的设计与实现.ppt
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)01 Introduction(戴海鹏).pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)02 Security Principles.pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)03 Symmetric Key Cryptography.pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)04 Advanced Encryption Standard(AES).pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)05 Asymmetric Key Cryptography.pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)06 Number Theory.pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)07 Hashes and Message Digests.pdf
- 南京大学:《网络安全与入侵检测 Network Security and Intrusion Detection》课程教学资源(课件讲稿)08 Authentication Using Asymmetric Keys.pdf