尽可能快的过一下C语言,再转pwn。

听课资料:慕课MOOC

学习相关的博客资源:

https://blog.csdn.net/m0_57304511/article/details/122280010

https://blog.csdn.net/mozibai666/article/details/119786120

简明汇编指南:

https://arthurchiao.art/blog/x86-asm-guide-zh/

W3C汇编指南:

https://www.w3schools.cn/assembly/assembly_introduction.html

Sublime Text3 搭建C开发环境:

https://blog.csdn.net/qq_41905795/article/details/113623038

pwn博客教程指导资源 ,pwn笔记资源汇总,pwn入门题库,B站视频,IDA常用快捷键.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

一般的主程序框架:

#include "stdio.h"
int main(){
printf("study");
return 0;
}

运行的方式:

> gcc -o test test.c
> test

知识点

输出函数

//简单的打印字符串
printf("Hello world!");

输入函数

// 获取一个输入值,并且是整数
scanf("%d",&price);
// 获取两个输入值,并且是空格间隔开的那种。或者是输入一个值回车再输入一个。
scanf("%d %d",&a,&b);

字符串操作

//存入一个整数:
printf("%d",price);
//%d : 格式字符串

变量

存储、放数据的地方。

常量

常量定义后是无法被修改的。

//定义一个常量
const int amount = 100;

数据类型

一旦被定义,则永远都是这个类型。比如定义整数,则永远都是整数。

// 整数类型,一旦出现整数之间的换算,得到的结果也只能是整数。
int a = 12;
// 小数/浮点型(单精度)
float b = 1.0;
// 双精度浮点数
// 自动将整数转换为浮点数参与运算,运算的整数就不用带小数了
// 举个例子:
// 原本是:float a = 1;float b=4;scanf("%f %f",&a,&b);运算:a+b/12.0 =得到浮点数结果
// 改进后:double a=1;double b=4;scanf("%lf %lf",&a,&b);运算:a+b/12 =得到浮点数结果
// 改进前除数12需要带小数点才能与浮点数相互运算,改进后整数也能参与小数的运算,得到浮点数结果
double c = 1;

数据类型的特殊情况:

#include "stdio.h"

int main(){
//不会四舍五入,它会直接截断结果。
printf("%d",14/3);
return 0;
}

浮点运算:整数运算转只有整数部分,否则要用浮点数。

表达式

由运算符和算子组成。

优先级

单目运算:例如给变量a取负,这就是单目运算符。

双目运算:一般加法有两个算子,所以叫做双目。

优先级 运算符 运算 结合关系 举例
1 + 单目不变 自右向左 a*+b
1 - 单目取负 自右向左 a*-b
2 * 自左向右 a*b
2 / 自左向右 a/b
2 % 取余 自左向右 a%b
3 + 自左向右 a+b
3 - 自左向右 a-b
4 = 赋值(最低优先级) 自右向左 a=b

赋值是一个运算符,不是一个动作。能拿到结果。