Re:从零开始的逆向随手记02day

学习资料来自滴水逆向,标题同理,若无内容则无必要笔记

1-C语言

1 课程概要
2 C语言的汇编表示&函数的定义与调用
3 参数传递与返回值

在C语言中参数传递是通过堆栈的,传递的顺序是从右到左

在C语言中函数返回值是存储在寄存器eax中

4 变量

int 4字节、short 2字节、char 1字节

全局变量初始值为0

5 函数嵌套调用的内存布局
6 整数类型

7 浮点类型

如果不加上F,编译器默认会认为这个值是double,然后再转换赋值给float

8 字符与字符串

%u 无符号形式打印

%x 16进制形式打印

%{x.y}f 打印浮点数 x标志打印总长度 y 代表小数点后长度

9 中文字符
10 运算符与表达式

非 ~

或 |

11 分支语句

12 循环语句
13 数组
14 多维数组
15 结构体
16 字节对齐

#pragma pack(...)来改变结构体成员的对齐方式

17 结构体数组
18 指针类型

指针类型自增、自减是加、减去掉一个星号后的宽度

指针类型是可以做比较的

19 &的使用
20 取值运算符
21 数组参数传递
22 指针与字符串

char* strcpy(char* dest, char* src); // 复制字符串src到dest中,返回指针为dest的值

char* strcat(char* dest, char* src); // 将字符串src添加到dest尾部,返回指针为dest的值

23 指针取值的两种方式
24 结构体指针
25 指针数组与数组指针
26 调用约定

27 函数指针

假设有攻击者要破解你的程序,它在MessageBox下断点,你正常的代码就会被成功断点,但是如果你使用函数指针的方式就可以绕过

28 预处理之宏定义、条件编译与文件包含
28.1 宏定义

使用宏比较节省空间,因为使用宏定义函数,没有堆栈提升操作,也就是不会作为函数调用而是直接内联到代码内

宏名标识符与左圆括号之前不允许有空白符,应紧接在一起

28.2 条件编译与文件包含
指令用途
#undef取消已定义的宏
#if如果给定条件为真,则编译下面代码
#endif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#else同else
#endif结束一个#if…#else条件编译块
#ifdef如果宏已经定义,则编译下面代码
#ifndef如果宏没有定义,则编译下面代码
28.3 文件包含

使用双引号:系统首先到当前目录下查找被包含的文件,如果没找到,再到系统指定的包含文件目录(由用户在配置环境时设置)去找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值