自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蛛丝

编织隐秘的网,困住你我

  • 博客(51)
  • 收藏
  • 关注

原创 C++实现机制(二)——编译器实现对象模型的方法

      没错哦,从题目可以看出本章是讲述编译器构建Class的方法。      作为C++核心基础之一的class,了解编译器背后为其做了哪些,是认识C++底层实现机制的关键,同时我看到,很多人在各类文章的只言片语中,对其进行了大量的充满迷信和传说的诠释。      要讲class,就不得不说说struct,因为编译器在构建它们的数据成员的方法上是相似的。这也是我最想让你知道的,即“通过类封装数据和操作本身是绝对没有额外成本的,效率和空间的牺牲大部分在于虚表的维护”      回到正题,我们实际上可以认

2010-08-04 11:40:00 1403 2

原创 C++底层机制(一)——开篇

   很少有人质疑C语言生成代码的高效和精悍,然而C++究竟能多么接近C语言的水平呢?   相信长期以来存在这样的共识,核心算法为了效率常常抛弃C++而使用C,他们认为C++庞大又迟缓,比如他们拒绝使用C++编写数据库引擎,他们说:“继承和重载降低效率,并且C++背着你做很多事情”   我相信通过之后的一系列文章,会帮助您破除围绕在C++周围的迷信和传说。   除此之外,了解C++底层机制还能帮助您调试代码,同时避免将C语言的技巧移植到C++时,陷入险境。   另外,对于一些某些只提供C语言接口的平台,比如

2010-08-03 22:30:00 2291

原创 (六)NT驱动基础——驱动程序分层结构及其拓展

<br />一、垂直结构<br />      从前文中我们得知“设备链”(也有译为设备栈)这个名称,它是指驱动对象pDriverObject->DeviceObject含有PDEVICE_OBJECT类型的NextDevice成员,显然这是一个由链表构成的设备链。<br />      这样就形成了驱动程序的单向垂直结构,由于这样的结构可以通过设备依附不同的派遣函数,将单个驱动程序分成多层完成一个任务,同时,设备链并不要求其上设备对象属于同一驱动对象,这样又可以形成多个驱动程序的垂直结构。<br /> <

2010-07-31 09:28:00 984

原创 (五)NT驱动基础——分发函数的三种读写方式

要知道内核模式地址和用户模式地址是不可以直接互相读写的,那么它们之间的数据传递,是通过请求作为载体。这样产生了三种读写方式:1.缓冲区设备读写                                    2.直接设备读写                                    3.其他方式设备读写一、缓冲区设备读写1.原理:      缓冲区设备读写是应用程序将数据传通过请求递给内核缓冲区,它的优点是,比较简单的解决了用户地址传入的问题,缺点是应用程序与内核之间相互复制数据,效率较差

2010-07-29 21:34:00 1791

原创 (四)NT驱动基础——分发函数

一、分发函数的功能    学过用WinMain写窗口框架的人,一定了解窗口消息循环的原理。那么驱动程序又是如何相应的呢?答案是“请求分发”    先来看看“请求”是什么样的,它是应用程序通过API函数的接口发出的,发送给对应的驱动程序,但是又有一个问题,请求是有各种各样的类型,有的要求读,有的要求写,那么它们就要被分类后,分发到对应的自己编写的处理函数,这些函数叫做“分发函数”,也有翻译为“派遣函数”二、分发函数的基本形态//关于创建的分发函数,以IRP_MJ_CREATE请求为例NTSTTUS Creat

2010-07-29 20:23:00 3304

原创 (三)NT驱动基础——创建驱动设备 并 实现驱动与应用程序的通信

NT驱动需要至少在入口函数创建一个设备对,这个对象可以与物理设备建立映射,来操控物理设备;也可以独立存在,作为软件驱动设备一、设备对象的功能1.作为物理设备的虚拟映射,即作为物理设备与应用程序的中间层2.接收处理应用程序请求的实体二、设备对象的结构typedef struct _DEVICE_OBJECT{ CSHORT Type; CSHORT Size; ULONG ReferenceCount;//引用计数器 st

2010-07-29 17:05:00 1436

原创 (二)NT驱动基础——可动态卸载驱动编写 和 其安装卸载

上一篇文章我们编写了NT驱动的Hello World,但是编译好的驱动如何安装和卸载呢?事实上,上篇的hello World代码可以安装,不能动态卸载。所以我们来改造以下原来的代码,在驱动程序上添加卸载函数一、代码改造//Hello World.cVOID UnloadDriver(PDRIVER_OBJECT pDriver){  DbgPrint("Unload Driver of Hello World");}NTSTATUS DriverEntry( PDRIVER_OBJECT pDriver,P

2010-07-29 14:51:00 2104

原创 (一)NT驱动基础——Hello World

我习惯使用C++写驱动,好处很多,但是代码会复杂一点,所以以下代码都用C来写Hello World作为所有编程语言的起始阶段,不要轻视它,回避它。一、示例代码//Hello World.cNTSTATUS DriverEntry( PDRIVER_OBJECT pDriver,PUNICODE_STRING pRegistryPath){  DbgPrint("DriverEnter end/n");  return STATUS_SUCCESS;}二、分析1.DbgPrint是在内核模式下printf,并

2010-07-29 13:59:00 1202

原创 (零)预备,跑

一、安装驱动编译器——WDK下载地址:https://www.microsoft.com/china/whdc/resources/downloads.mspx选择你的平台选择32位还是64位勾选全部,下一步至最后二、安装虚拟机,并在其上安装windows 不论是使用VMware还是Virual PC都不难,唯一注意的是不要使用ghost版的windows,下一个安装版的。三、下载srvinstw,安装到虚拟机上四、下载DbgView,安装到虚拟机上五、下载IRPTrace,安装到虚拟机上六、下载WinDb

2010-07-29 13:02:00 909

原创 better C/C++ code(二)——谨慎使用goto

标准c/c++建议废弃使用goto,其对于goto的支持仅是对于旧代码的兼容然而我们在微软的新代码中仍然看到goto的存在,这是为什么?其实若是把goto当做汇编中的LOOP使用,的确是应该废弃的例如:     int n=0;      printf("input a string/n"); loop: if(getchar()!='/n')        {            n++;            goto loop;         }     printf("%d",n);  我们看这

2010-07-29 12:19:00 1445

原创 better C/C++ code(一)——注释

前辈们总说代码要详细注释、给后人创造好的再利用和维护条件。然而事实是,再编写和调试所谓“艰难代码时”,程序员也很痛苦,让他们同时兼顾添加详细注释也实在是不堪重负。一则,代码能否需要再次修改并不确定;二则,项目完成后,公司基本不会给时间recode,一般都是聚餐、旅游...等等其实代码注释也可以这样写:a.代码注释尽量写在.h文件里,仅需写出作者、时间、功能、注意事项b.实现代码尽量依靠变量名和函数名等的含有完成“自注释”c.严禁变量一语多用d.函数只能有一个出口g.不使用类的继承,而利用类的多态性重新包装,

2010-07-29 11:38:00 899

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除