作者: 马文杰

Magic

89 篇文章

R3和R0的交互(NT框架的使用)
  验证环境/使用工具: visual studio 2019、Windows XP、winobj、Dbjview 验证目标: 让R3和R0能通过读写交换数据,也就是驱动和R3做交互过程(NT框架包含了这个交互)   内核API(极简进化史): 系统 => 抽象驱动 => 硬件 抽象驱动是什么? 1). 简明:驱动框架 => 读、写操作 => 硬件 2).详细(进一步思考:文件的抽象,操作文件):驱动框架 => 文件(打开、读取、写入、控制、查询信息、关闭) 下发配置: 应用程序 => ReadFile => 系统 => 驱动::读取 => 厂家驱动 => 硬件 获取信息: 应用程序 <= ReadFile <= 系统 <= 驱动::读取 <= 厂家驱动 <= 硬件   糟糕,出师不利,出现了一点点点的问题: 整理代码之后,不知道为什么,vs2019中driverentry 的结构体死活打不开,要看里面的成员啊。 解决方案: 经过一番设置之后,还是不行,重新创建个项目试下,果然还得是重新创建项目,项目正常了。果然还得是老话:“重装系统能够解决99.9%的问题”   两步走计划: 注册派遣函数 驱动绑定到 "设备",来调用驱动 完成R3和R0的数据交互   0x01 注册派遣函数 sample.h #pragma once #include <ntddk.h> VOID Unload(__in struct _DRIVER_OBJECT* DriverObject); extern "C" NTSTATUS …
【OS】01&02 – Hello,DTOD!
【OS】01 :进阶操作系统 【OS】02 - Hello,DTOD!   2024/07/17 更新     目的: 编写一个主引导程序(汇编语言) 可独立运行x86架构的主机(无操作系统) 运行后屏幕上打印字符串;     思路: 引导程序 (类比C语言) 入口: | 0x7c00 | (main) 主题: | 汇编语言 | (C/C++) 底层: | bios中断 | (OS系统调用) 1、关键寄存器设置为 => mov ax,0 2、定义要打印的数据 => db "hello DTOS!" 3、打印预定义好的字符数据 => int 0x10   代码:   boot.asm org 0x7c00 start: mov ax, cs mov ss, ax ;初始化堆栈段,使其与代码段相同。 mov ds, ax ;初始化数据段,使其与代码段相同。 mov es, ax ;初始化附加段,使其与代码段相同。 mov si, msg ;si 通常用于字符串操作或指向数据的地址 print: mov al, [si] add si, 1 cmp al, 0x00 je last mov ah, 0x0e ;设置中断调用的功能号,这里0x0e代表的是在文本模式下输出字符的功能,表示 BIOS 的 teletype 输出功能 mov bx, 0x0f ;表示字符颜色(白色) int 0x10 jmp print last: hlt jmp last msg: ;定义输出数据 db 0x0a, 0x0a ; db => define byte, db的定义了两个数据,0a换行符 db &qu…
【OS】03 – bochs环境搭建
引用:【OS】03 - bochs环境搭建-理论详情 开发环境搭建 bochs安装、配置和测试 bochs调试环境搭建和测试 bochs常用调试命令 0x01 Bochs安装和配置 1.1 ./configure --enable-debugger --enable-disasm ./configure --enable-debugger --enable-disasm 有报错,无法继续后面操作 1.2 sudo apt-get install libgtk2.0-dev 参考网友的做法 sudo apt-get install libgtk2.0-dev 1.3 ./configure --enable-debugger --enable-disasm 再重新解压: ./configure --enable-debugger --enable-disasm 1.4 make 执行: make 1.5 sudo make install 安装: sudo make install 1.6 测试是否安装成功 执行: bochs 运行崩溃,但这是安装成功了 0x02 实验验证:Bochs的验证 2.1 启动文件模板 文件放到虚拟机里,把值填进去; Bochsrc ############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # fil…
【OS】04 – 主引导程序的拓展(上)【了解Fat12】
【OS】04 - 主引导程序的拓展(上) ,理论详情 实验: 把文件写入虚拟软盘 0x01 创建虚拟软盘 1.1 创建虚拟软盘和文件,文件写入虚拟软盘 需要的工具: bochsrc freedos.img bochsrc ############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # what disk images will be used floppya: 1_44=freedos.img, status=inserted # choose the boot disk. boot: a # where do we send log messages? # log: bochsout.txt # disable the mouse mouse: enabled=0 # enable key mapping, using US layout as default. keyboard_mapping: enabled=1, map=/usr/local/share/bochs…
深入浅出的处理器
深入浅出的处理器(上) 深入浅出的处理器(中) 深入浅出的处理器(下) 深入浅出的处理器(续) tip: 点击链接的时候按下键盘的 CTRL 就会另外新打开一个页面
gcc的编译选项-详细
嵌入式C语言编译器,文章的理论部分 注意: 下文验证的内容,使用的是这里的func.h、test.c func.h #include <stdio.h> void func() { #ifdef TEST printf("TEST = %s\n", TEST); #endif return; } test.c #include <stdio.h> #include "func.h" int g_global = 0; int g_test = 1; int main(int argc, char *argv[]) { func(); printf("&g_global = %p\n", &g_global); printf("&g_test = %p\n", &g_test); printf("&func = %p\n", &func); printf("&main = %p\n", &main); return 0; } 0x01 预处理指令: gcc -E test.c -o test.i test.i # 1 "test.c" // 1 :表示后文部分是test.c的第一行展开内容 # 1 "<built-in>" # 1 "<command-line>" # 1 "test.c" # 1 "/usr/include/stdio.h" 1 3 4 // .....…
函数模版和类模版简单例子
#include <iostream> using namespace std; // 函数模版 template <typename T> void Swap(T& a, T& b) { T t = a; a = b; b = t; } // 类模版 template <typename T> class Op { public: T process(T v) { return v * v; } }; int main() { int a = 2; int b = 1; Swap(a, b); cout << "a = " << a << " " << "b = " << b << endl; double c = 0.01; double d = 0.02; Swap<double>(d, c); cout << "c = " << c << " " << "d = " << d << endl; Op<int> opInt; // 需要指明类型 Op<double> opDouble; cout << "5 * 5 = " << opInt.process(5) << endl; cout << "0.3 * 0.3 = " << opDoubl…
NAT协议
文章还是比较清楚的,mark一下 知乎:网络地址转换协议NAT功能详解及NAT基础知识介绍
win10专业版/企业版-密钥和激活脚本
方法1 Win10正式专业版密钥(32位和64位均可正常使用): W269N-WFGWX-YVC9B-4J6C9-T83GX Win10正式企业版密钥(32位和64位均可正常使用): NPPR9-FWDCX-D2C8J-H872K-2YT43 方法2 win10专业版激活脚本 @echo off echo The system is being activated...... slmgr.vbs /upk slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 slmgr /skms zh.us.to slmgr /ato echo System is activated. echo. & pause 方法3 2024/07/31 更新 又找到一个方法,亲测有用,非常优雅使用win10 windows10专业版激活的教程如下: 1.使用Windows PowerShell(管理员的权限运行) 依次输入: slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmgr /skms kms.03k.org slmgr /ato 也可以写成一个脚本跑一跑