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

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

二维数组和单通道Mat相关问题

我们分别将二维数组第一行的首地址和单通道Mat第一行的首地址赋给指针: 1 int a[2][2] = 2 { 3 {1,2}, 4 {3,4} 5 }; 6 7 int* p = a[0]; 8 cout << p[2] << endl;   结果为3 1 Mat m = (M…

C++ 参考网站汇总

本篇总结学习 C++ 时常用的几个网站,点击会跳转到相应网页。 目录一、CPP 基础知识参考链接1. C++ 参考手册2. CPlusPlus3. 微软 C++ 参考文档4. Cpp Core Guidelines5. TutorialsPoint二、CPP 开源代码库1. Rosetta Code 代…

驱动开发:通过Async反向与内核通信

在前几篇文章中给大家具体解释了驱动与应用层之间正向通信的一些经典案例,本章将继续学习驱动通信,不过这次我们学习的是通过运用Async异步模式实现的反向通信,反向通信机制在开发中时常被用到,例如一个杀毒软件如果监控到有异常进程运行或有异常注册表被改写后,该驱动需要主动的通知应用层进程让其知道,这就需要用到…

02 线性表 | 数据结构与算法

1. 线性表 线性表的定义 特点: 存在唯一一个被称为第一个的数据元素 存在唯一一个被称为最后一个的数据元素 除了第一个元素之外,其他的数据元素都有唯一一个直接前驱 除了最后一个元素之外,其他的数据元素都有唯一一个直接后驱 定义:是由 \(n(n\ge 0)\) 个相同数据类型的数据元素组成的有限序列 …

怎样让VS Code编辑C++更舒适

大家在看到这篇文章前,为了有一个舒适的c++IDE,一定感受到了Dev-c++的廉价感,Clion功能的多余,VS的臃肿。他们也有自己的优点,但糟点太多,令人十分难受。而VS Code,可以取长补短。下面的配置内容,可以让你在刷题时,享受丝滑的动画,体会集成终端的方便,让你觉得Coding不再枯燥。 S…

c++ string 类 和 c 风格 string 的问题梳理

1. 互相转换:   c++ --->  c :                      cppstr.c_str()   c     --->  c++ :     string cppstr = string(cstr)   打印时、cout 都可以打印、如果用 printf 等方法那…

驱动开发:通过PIPE管道与内核层通信

在本人前一篇博文《驱动开发:通过ReadFile与内核层通信》详细介绍了如何使用应用层ReadFile系列函数实现内核通信,本篇将继续延申这个知识点,介绍利用PIPE命名管道实现应用层与内核层之间的多次通信方法。 什么是PIPE管道? 在Windows编程中,数据重定向需要用到管道PIPE,管道是一种用…

有效字母异位词

题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "r…