3、从汇编语言到Windows内核编程笔记(3)

简介: Windows内核(一).sys放在Drivers目录下。运行在R0层。在WDK的相应环境中,进行相应代码目录,build.一个内核程序被看作一个PE格式的DLL,它是被Windows整个内核调用的一个DLL,一旦加裁,就成为内核的组成部分。

Windows内核(一)
.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.
3Windbg设置
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位汇编语言程序设计:汇编学习
软件调试,张银奎:软件调试<?xml:namespace prefix = o />

目录
相关文章
|
3月前
|
缓存 网络协议 数据安全/隐私保护
[运维笔记] - (命令).Windows server常用网络相关命令总结
[运维笔记] - (命令).Windows server常用网络相关命令总结
185 0
|
5月前
|
消息中间件 C++ Windows
02 MFC - Windows 编程模型
02 MFC - Windows 编程模型
22 0
|
2月前
|
Windows
火山中文编程 -- 第一个windows程序
火山中文编程 -- 第一个windows程序
12 0
|
2月前
|
编译器 API Windows
windows编程基础
windows编程基础
13 0
|
2月前
|
Windows
win32编程 -- windows绘图操作
win32编程 -- windows绘图操作
19 0
|
6月前
|
网络协议 程序员 API
[笔记] Microsoft Windows网络编程《一》WinSock简介(四)
[笔记] Microsoft Windows网络编程《一》WinSock简介(四)
|
3月前
|
网络协议 Linux C语言
005.在Windows下编程让效率起飞
windows开发Linux方式: 先用编辑器编写源代码 然后进入Linux 系统,使用gcc编译器(后面会讲),对源代码进行编译运行。 熟练后推荐使用VS2019 开发Linux C++ 程序 将自己的Ip地址设为静态IP
40 1
|
3月前
|
存储 Ubuntu 开发工具
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
|
4月前
|
Linux API C++
音视频windows安装ffmpeg6.0并使用vs调试源码笔记
音视频windows安装ffmpeg6.0并使用vs调试源码笔记
110 0
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。