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.
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)相关推荐

  1. 2、从汇编语言到Windows内核编程笔记(2)

    内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...

  2. 从自己的角度比较 天书夜读 和 寒江独钓

    序 本文节选自<寒江独钓>一书序言 早在一年前,谭文就和我谈过想写一本既能深刻介绍Windows内核架构,又能结合具体Windows驱动程序开发实例的书.在一年的时间中,谭文一直在构思酝酿 ...

  3. 寒江独钓Windows内核编程-双机调试1

    今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大.我使用的书是<寒江独钓Wind ...

  4. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

  5. Windows内核编程实现拦截Xuetr程序

    Windows内核编程实现拦截Xuetr程序 ----TTL 寒假的时候,开始学习windows内核编程,想走近windows的内部世界.由于微软对于windows并不开源,所以有些人开始质疑:学习w ...

  6. 11月3日云栖精选夜读:《maven实战》读书笔记2——maven安装(windows和eclipse插件)...

    前言 由于我的工作中开发环境就是windows,IDE是eclipse,因此安装也只涉及和记录这两部分,在看书和动手的过程也就直接跳过其他部分. 笔记 windows中maven的安装 安装条件 ma ...

  7. Windows Socket编程笔记之最简单的小Demo

    Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API-------  0.初始化         |  WSAStartup()  1.创建So ...

  8. 天书夜读笔记——C++写的内核驱动程序

    友链 extern "C" {#include<ntifs.h> }class MyDriver { public:MyDriver(PDRIVER_OBJECT dr ...

  9. 天书夜读:WinDbg配置和使用基础

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. 1. WinDbg介绍:     Debuggi ...

  10. 天书夜读笔记——内存分页机制

    友链 现代操作系统中,都会用到分页机制 在32bit操作系统中,对于一个进程来说,他拥有4GB的内存空间 其中低2G属于进程自己的,高2G的空间属于内核空间,所有进程看到的内核空间中的值都是一样的,也 ...

最新文章

  1. 【138天】尚学堂高淇Java300集视频精华笔记(84)
  2. 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理
  3. 集装箱计算机跟踪管理方式,集装箱运输第二章集装箱及其箱务管理(图文)解析.ppt...
  4. jboss fuse 教程_JBoss Fuse –使用MVEL将您的静态配置转换为动态模板
  5. 在SQL Server2005中进行错误捕捉
  6. 欢迎加入唐山.NET俱乐部
  7. java 布局实例,HarmonyOS Java UI之StackLayout布局示例
  8. cad 打开硬件加速卡_老司机手把手带你解决,各种CAD疑难杂症
  9. 区块链xuperchain ubuntu多机多节点 single共识 部署教程
  10. 【已解决】FAILURE: Build failed with an exception......
  11. CFDA发布GMP《计算机化系统和确认与验证》两个附录
  12. Debug调试报错解决方案
  13. 梦想近在眼前却遥不可及
  14. 东芝笔记本电脑重装系统
  15. C#数据结构与算法总结
  16. python中求和符号怎么打_SymPy求和表达式中的代换符号
  17. 【十大思想实验之一】电车难题
  18. linux管理web项目目录结构图,WEB项目管理完整.doc
  19. 哪个软件能代替斐讯路由_斐讯路由(老版本无需登录)
  20. 计算机音乐谱大全好汉歌,好汉歌简谱-刘欢-电视剧《水浒传》主题曲

热门文章

  1. Tenorshare iCareFone for mac如何修复iPhone手机系统?
  2. asp.net core 系列之用户认证(authentication)
  3. 亚马逊向GuardDuty服务添加三种新的威胁检测规则
  4. Vue Element校验validate
  5. 扎克伯格正用“山寨”策略碾压Snapchat
  6. Ubuntu系统多屏幕时 触摸屏如何分屏定位
  7. async和await用法
  8. 企业之经典《HSRP热备份路由协议高级配置》技术
  9. aggs 聚合 取结果
  10. Linux下防止用户查看他人的进程-hidepid