天书夜读:从汇编语言到Windows内核编程笔记(3)
.sys放在Drivers目录下。运行在R0层。
在WDK的相应环境中,进行相应代码目录,build.
一个内核程序被看作一个PE格式的DLL,它是被Windows整个内核调用的一个DLL,一旦加裁,就成为内核的组成部分。所有的内核内存空间是共享的。内核程序崩溃,Windows系统也就崩溃了。
DriverEntry是一个内核程序的入口,以system进程名出现。
编写内核的规则:
不能调用Windows应用层API函数,而应用内核API。
关于字符串,内存处理,打印等,参见前面Rtl函数
浮点数要特殊处理
在Windows中,不同类型设备的驱动有不同的安装方式,ini文件。非“任何类型”的驱动程序,当作服务安装。(搜“服务安装驱动下载”,net start 服务名)
调试
Windbg ( http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx )
我们用虚拟机进行调试VMWare.
环境搭建:
1、虚拟机中boot.ini
.......
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect /debug /debugport=com1 /baudrate=9600
2、设置虚拟机
Hardward > Serial Port > Output to named pipe,添入:
\\.\pipe\com_1,this end is the server,the other end is an application.
3、Windbg设置
Windbg(本机中)的启动参数:
Windbg.exe -b -k com:port=\\.\pipe\com_1,baud=9600,pipe
(整成快捷方式)
说明1:在虚拟中在调试模式下启动windows后,马上以以上参数启动Windbg
说明2:我以指定波特率启动WINDBG时老是提示我参数出错,把指定波特项取消后可以成功。
4、设置代码路径和符号表位置,就可以调试了。Symbol File Path中,sys的位置。多个路径以分号隔开。
用以下设置来下载符号表。
srv*c:\symbols*http://msdl.microsoft.com/download/symbols
(关于说明,可见:http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx)
其它更进一步的关于汇编代码的分析,见[6]
其它调试如同VS中。
C++写内核
需要自己写new操作符
用ecx传递this指针对象的开头部分就是虚函数表地址
父类和子类各有一份虚函数表,没有共公部分。在子类的虚函数表中,没有重载的基类虚函数的地址和基类虚函数一样,而重载后有自己独特的地址。
参考
[1] http://www.cnblogs.com/phinecos/archive/2009/02/19/1393803.html
[2] http://www.cnblogs.com/qsilence/archive/2009/06/11/1501511.html
[3 http://msdn.microsoft.com/en-us/library/ff557565%28VS.85%29.aspx
[4] http://www.cnblogs.com/wanghao111/archive/2009/05/25/1489041.html
[5] Windows驱动编程基础教程.doc
[6] 天书夜读-从汇编语言到windows内核编程(http://download.csdn.net/source/2754275)
[7] Windows DDK
推荐其它书籍
Programming the micfosoft windows Driver Model:驱动开发
windows环境下的32位汇编语言程序设计:汇编学习
软件调试,张银奎:软件调试
转载于:https://www.cnblogs.com/forlina/archive/2011/07/11/2103094.html
天书夜读:从汇编语言到Windows内核编程笔记(3)相关推荐
- 2、从汇编语言到Windows内核编程笔记(2)
内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...
- 从自己的角度比较 天书夜读 和 寒江独钓
序 本文节选自<寒江独钓>一书序言 早在一年前,谭文就和我谈过想写一本既能深刻介绍Windows内核架构,又能结合具体Windows驱动程序开发实例的书.在一年的时间中,谭文一直在构思酝酿 ...
- 寒江独钓Windows内核编程-双机调试1
今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大.我使用的书是<寒江独钓Wind ...
- windows内核开发笔记七:内核开发OVERLAPPED结构体详解
windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHi ...
- Windows内核编程实现拦截Xuetr程序
Windows内核编程实现拦截Xuetr程序 ----TTL 寒假的时候,开始学习windows内核编程,想走近windows的内部世界.由于微软对于windows并不开源,所以有些人开始质疑:学习w ...
- 11月3日云栖精选夜读:《maven实战》读书笔记2——maven安装(windows和eclipse插件)...
前言 由于我的工作中开发环境就是windows,IDE是eclipse,因此安装也只涉及和记录这两部分,在看书和动手的过程也就直接跳过其他部分. 笔记 windows中maven的安装 安装条件 ma ...
- Windows Socket编程笔记之最简单的小Demo
Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API------- 0.初始化 | WSAStartup() 1.创建So ...
- 天书夜读笔记——C++写的内核驱动程序
友链 extern "C" {#include<ntifs.h> }class MyDriver { public:MyDriver(PDRIVER_OBJECT dr ...
- 天书夜读:WinDbg配置和使用基础
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. 1. WinDbg介绍: Debuggi ...
- 天书夜读笔记——内存分页机制
友链 现代操作系统中,都会用到分页机制 在32bit操作系统中,对于一个进程来说,他拥有4GB的内存空间 其中低2G属于进程自己的,高2G的空间属于内核空间,所有进程看到的内核空间中的值都是一样的,也 ...
最新文章
- 【138天】尚学堂高淇Java300集视频精华笔记(84)
- 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理
- 集装箱计算机跟踪管理方式,集装箱运输第二章集装箱及其箱务管理(图文)解析.ppt...
- jboss fuse 教程_JBoss Fuse –使用MVEL将您的静态配置转换为动态模板
- 在SQL Server2005中进行错误捕捉
- 欢迎加入唐山.NET俱乐部
- java 布局实例,HarmonyOS Java UI之StackLayout布局示例
- cad 打开硬件加速卡_老司机手把手带你解决,各种CAD疑难杂症
- 区块链xuperchain ubuntu多机多节点 single共识 部署教程
- 【已解决】FAILURE: Build failed with an exception......
- CFDA发布GMP《计算机化系统和确认与验证》两个附录
- Debug调试报错解决方案
- 梦想近在眼前却遥不可及
- 东芝笔记本电脑重装系统
- C#数据结构与算法总结
- python中求和符号怎么打_SymPy求和表达式中的代换符号
- 【十大思想实验之一】电车难题
- linux管理web项目目录结构图,WEB项目管理完整.doc
- 哪个软件能代替斐讯路由_斐讯路由(老版本无需登录)
- 计算机音乐谱大全好汉歌,好汉歌简谱-刘欢-电视剧《水浒传》主题曲