🌓

滴水逆向 02-27 指针2

类型转换 并不是所有的数据类型之间都可以相互转换,比如结构体与基本类型 带 * 的类型可以强制转,比如: 123456void Test() { char* x; int* y; x = (char*)10; y = (int*)x;} &符号的使用 & 是地址符,类型是其后面的类型加一个 “*”,任何变量都可以使...

阅读全文

滴水逆向 02-26 指针1

先抛去指针是存地址的这个概念,看看这种类型最本质的特点 “带*类型” 的特征探测 宽度 对于一个变量来说,最重要的一个特征就是数据的宽度,如何探测某个类型的变量的宽度? 对于平时用的类型: 123456789void Test() { char x; short y; int z; x = 1; y = 2; z = 3;...

阅读全文

滴水逆向 02-06 switch语句反汇编

之前的笔记都是边听边写的,这次边听边玩塞尔达呢。。。笔记都是课后整理的,可能会有遗落,会尽力回想 switch语句 switch 语句是 if 语句的简写 switch 要求: case 后面必须是常量表达式 case 后面常量表达式的值不能一样 switch 后面表达式必须为整数 switch语句的反汇编 常见的有四种: 分支比较少:if…else...

阅读全文

滴水逆向 02-05 字节对齐_结构体数组

结构体对齐 观察到一个现象: 12345678910111213141516171819202122struct S1 { char a; int b; char c;};struct S2 { //顺序不一样大小也不一样 int a; char b; char c;};int main(int argc,...

阅读全文

滴水逆向 02-04 结构体

结构体 正向基础我就不整理了,多说一句,其实我之前最喜欢写的就是结构体,不知道为什么觉得用起来特别爽 但是这一部分有个问题,关于课上讲的结构体中变量的存储地址的计算,就是基址+偏移嘛,但是有一个问题就是,课堂中举的那个例子(见下图),Gamer 这个的第一个变量生命写成了 +4,应该是写错了,Gamer 的生命是 +0 才对,和坐标的那个规则一样是从 +0 ...

阅读全文

滴水逆向 02-03 多维数组

二维数组 一维数组与多维数组在反汇编上没有区别 12345678void Fun() { int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; //int arr[1...

阅读全文

滴水逆向 02-02 参数_返回值_局部变量_数组反汇编

返回值的传递 char 类型的返回值:用 al 存 short 类型的返回值:用 ax 存 int 类型的返回值:用 eax 存 宽度为 64 位的返回值数据类型要怎么存储?见作业1 参数传递 本机尺寸:如果本机是 32 位的,那么对 32 位的数据支持最好,如果是 64 位的,那么对 64 位的支持最好。编译器也遵守了这个规则:char 类型或者 s...

阅读全文

滴水逆向 01-30 C语言05_循环语句

被坑了哇,看到爱达人官网那里有一个3块钱的练习代码下载,还以为是刚开始提到的那个有基础的人觉得无聊的话就去逆的那个程序,买了下载了一看只是一个很普通的交换排序,不知道是干啥用的,是说的那个无聊就去逆的吗?不管了反正课也直接拉进度条听完了 do…while语句 语句及对应反汇编示例: 总结: 根据条件跳转指令所跳转到的地址,可以得到循环语句块的起始地址 ...

阅读全文

滴水逆向 01-29 C语言05_正向基础

变量的声明 声明变量就是告诉计算机,我要用一块内存,你给我留着,宽度和存储格式有数据类型决定。 计算机什么时候把这块内存给你,取决于变量的作用范围,如果是全局变量,在程序编译完就已经分配了空间,如果是局部变量,只有所在的程序被调用的时候,才会分配空间。 全局变量如果不赋初始值,默认是0,但局部变量在使用前一定要赋初值 类型转换 MOVSX先符号扩展,...

阅读全文

滴水逆向 01-28 C语言04_IF语句逆向分析下

IF…ELSE…语句的反汇编判断 第一个 JCC 跳转到的地址前面有一个 jmp(并且 jump 是往下跳的),就可以确定是 if…else… 语句 案例分析 demo: IF…ELSE IF…ELSE IF…多分支语句的反汇编判断 案例分析 demo: 课后作业 If…else 还原成 C : 123456789101112131415161...

阅读全文