2023.12.3
更新 2026.7.23 c++ 206 字· 1 分钟 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <windows.h> #include <fmt/printf.h> #include <string> #include <type_traits> template <typename CharType, …
2018.1.7
更新 2026.7.23 C-lang 219 字· 1 分钟 分析结构体大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 struct S1 { char c1; double d; char c2; char c3; }; struct S2 { char c1; char c2; char c3; double d; }; struct S3 …
2018.1.7
更新 2026.7.23 C-lang 363 字· 1 分钟 结构体数组的定义 类型 变量名[常量表达式]; //定义结构体类型 struct stStudent { int Age; int Level; } //定义结构体变量 struct stStudent st; //定义结构体数组 struct stStudent arr[10]; //或者 stStudent arr[10]; 结构体数组初始化 …
2018.1.7
更新 2026.7.23 C-lang 810 字· 2 分钟 #include char x; short y; int check() { x =1; y=2; return 0; } int main(int argc, char* argv[]) { check(); system("pause"); return 0; } //上述代码中 check 函数的反汇编 13: x =1; 00401038 C6 …
2018.1.3
更新 2026.7.23 C-lang 603 字· 2 分钟 思考:
当需要一个容器能够存储1个字节,你会怎么做? //char
当需要一个容器能够存储4个字节,你会怎么做? //int
当需要一个容器能够存储100个2个字节的数据,你会怎么做? //short arr[100]
当需要一个容器能够存储5个数据,这5个数据中有1字节的,2字节的有10字节的。。。你会怎么做??
2017.12.21
更新 2026.7.23 汇编 · C-lang 约 1.3k 字· 3 分钟 int x = 123; //补码 int float f = 123.4F; //IEEE编码 int i = "A"; //神马情况??? 我们在代码中写入
int i = "A"; 反编译后汇编就编程了
mov dword ptr ss:[esp-4],0x41 为什么会变成41呢?
字符类型 ASCII 表 (American Standard …
2017.11.18
更新 2026.7.23 汇编 602 字· 2 分钟 计算机只认识0和1,计算机能做的运算归根结底也就是直接对0和1做运算(通常称为 位运算)
与运算 两个位都为1时,结果为1 and(&)
或运算 只要有一个为1 就是1 or(|)
异或运算 不一样的时候是1 xor(^)
非运算(单目运算) 0变1 1变0 not(~)
左移 各二进制位全部左移若干位,高位丢弃,低位补0 shl(>) 在汇编中shr补 …
2017.11.17
更新 2026.7.23 汇编 376 字· 1 分钟 数据宽度 因为计算机受硬件制约,数据都是有长度限制的(数据宽度),超过最多宽度的数据会被丢弃
计算机中常见的数据宽度: 位(BIT) -> 一个0或1 字节(BYTE) =8位 范围 0-> FF 字(Word) = 16位 0->FFFF 双字(DoubleWord) = 32位 0-FFFFFFFF 超过范围的数会被丢弃
有符号数和无符号数 有符号数还是 …
2017.9.17
更新 2026.7.23 汇编 331 字· 1 分钟 什么是堆栈 程序启动的时候操作系统会给每个程序一块虚拟的4G内存当程序需要使用的时候必须要和操作系统申请内存
堆栈是程序的心脏,程序中需要用到的重要数据,都在堆栈中体现
就是一块特殊的内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用 和数据结构的堆栈无关 查看堆栈 正常内存使用从小地址往大地址使用,堆栈中从大地址往小地址使用
当堆栈用完了就会出现 …
2017.9.16
更新 2026.7.23 汇编 约 1.1k 字· 3 分钟 寄存器数量和容量有限,为了存储大量数据,所以我们需要内存
每个程序都会有自己的独立的4GB内存空间( 这里的内存其实是虚拟的,并不是真的给了程序4G内存,当程序读或者写这段内存的时候,操作系统才会把使用的内存映射到物理内存上
物理内存和内存条之间还有一层映射
2017.9.16
更新 2026.7.23 汇编 877 字· 2 分钟 标志寄存器 EFL EFL是32位寄存器
其中的每一位,含义都是不同的
0x00000246 16进制 0000 0000 0000 0000 0000 0010 0100 0110 二进制 第十位(从下标开始算 从右往左):DF位
DF位为``的时候: MOVS 执行完毕之后 ESI和EDI的值会增加
DF位位1的时候: MOVS 执行完毕之后 ESI和 …