驱动开发:内核CR3切换读写内存

首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操作,此类读写属于有痕读写,多数驱动保护都会将这个地址改为无效,此时CR3读写就失效了,当然如果能找到CR3的正确地址,此…

static_cast和dynamic_cast

C++的强制类型转换,除了继承自C语言的写法((目标类型)表达式)之外,还新增了4个关键字,分别是:static_cast、dynamic_cast、const_cast和reinterpret_cast。用法:xxx_cast<目标类型>(表达式)。由于后两者的使用频率较少,尤其是rein…

C++ 左值引用与一级指针

将左值引用用于一级指针时,有以下几种用法: //方式一:引用一级指针,常规用法 int a = 5; int * pa = &a; int * &rpa = pa; //方式二:引用指向常量的一级指针,以下几种为等效表示 int a = 5; const int * pa = &…

9.20Leetcode记录

一、字符串的排列 题干: 输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"] 限制: 1 <= s 的长度 <= 8 …

通用ORM的设计与实现

介绍 我们通用的ORM,基本模式都是想要脱离数据库的,几乎都在编程语言层面建立模型,由程序去与数据库打交道。虽然脱离了数据库的具体操作,但我们要建立各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的想法是,将关系数据库拥有的完善设计工具之优势,来实现数据设计以提供结构信息,让jso…

C++ 左值引用与 const 关键字

左值引用是已定义的变量的别名,其主要用途是用作函数的形参,通过将左值引用变量用作参数,函数将使用原始数据,而不是副本。引用变量必须在声明时同时初始化,可将 const 关键字用于左值引用,如下所示: //声明并初始化常规左值引用变量 int x = 55; int & rx = x; //将co…

深入理解C++的new和delete

一、C++中的动态内存管理方式 C语言中的动态管理方式是用malloc、free函数,它们在C++仍然可以继续使用,但是由于在部分地方略显无能为力,且使用起来比较麻烦,所以C++提出了自己的内存管理方式:采用new、delete关键字去进行动态内存管理。 注意:C语言开辟空间所用的malloc、call…

Qt源码阅读(二) moveToThread

Qt 源码分析之moveToThread 这一次,我们来看Qt中关于将一个QObject对象移动至一个线程的函数moveToThread 目录Qt 源码分析之moveToThreadQt使用线程的基本方法源码分析一些线程和信号槽使用的心得 Qt使用线程的基本方法 首先,我们简单的介绍一下在Qt中使用多线…

C++/Qt网络通讯模块设计与实现(五)

在C++/Qt网络通讯模块设计与实现(四) 中具体分析了Qt的信号槽、线程相关的知识,即从 Qt::ConnectionType,示例源码,结果论证,归纳总结等四个方面进行了全方面讲解,深刻阐述了代码设计的原因。这节讲解接口的应用,从广度上让大家对面向接口编程(该编程思想很重要)进行掌握。 面向接口编程…