在线编译:支持31中语言 OnlineGDB beta ISA 【官】 Intel 手册 【官】 ARM A64 ISA 【官】 ARM A32 ISA x86 vs ARM Intel 指令集表格版 汇编语言 【官】 AS Manual X86 Assembly(Intel) X86 Assembly(AT&T) Linux 【官】 源码下载 【官】 man page 【官】 GNU software 在线查看 Linux Base C 【官】 GNU C Manual ELF 【官】ELF_Format 带书签的 ELF wiki 这里有张图很好 System V Application Binary Interface-1 System V Application Binary Interface-2 gcc 【官】官方文档 glibc 【官】源码下载 【官】手册 手册在线 pdf 在线查看 工程化 make 【官】手册 跟我一起写 Makefile makefiletutorial autoconf 【官】手册 Java 语言 【官】Java Language and Virtual Machine Specifications 【官】JEP 【官】JSR OpenJDK 通用网站 著名源码在线看 Linux Assembly cppreference RFC gnu binutils gnu coreutils 优质资源或教程 eater ELF for armv8 造轮子 LFS arch linux 电脑博物馆 在线观察 …
验证环境/使用工具: 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 :进阶操作系统 【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环境搭建-理论详情 开发环境搭建 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 - 主引导程序的拓展(上) ,理论详情 实验: 把文件写入虚拟软盘 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 就会另外新打开一个页面
嵌入式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…
文章还是比较清楚的,mark一下 知乎:网络地址转换协议NAT功能详解及NAT基础知识介绍