本周分享知识星球里面的二进制逆向成员,C语言基础教程,适合新手练习。这次跟大家分享其中的课程。
本文作者:kn0sky(MS08067安全实验室二进制逆向成员)
C语言基础--初见C语言
一
常见函数:
默认情况下,main函数是C语言的起点
printf()函数是格式化输出函数 (来自stdio.h)
单行注释:/ 单行内容 /
多行注释:/* 多行内容 */
二
使用VS2015创建项目:
1. 新建项目
2. 依次选择vc++ ,win32 ,win32控制台程序
3.随便写个项目名称
4. 应用程序向导里选择空项目,其他默认
5. 从源文件添加新建项,创建.c文件
三
第一个程序:
int main() {
printf("hello world!n");
return 0;
}
程序分析
vs2015反汇编代码如下
#include<stdio.h>
int main() {
;前面这块用于保障程序稳定性,把栈抬高,然后可以随便弄,弄完再把栈还原,再把寄存器的值还原;将ebp存起来,然后把栈抬高0C0H位
00C41760 push ebp
00C41761 mov ebp,esp
00C41763 sub esp,0C0h
;把ebx,esi,edi入栈
00C41769 push ebx
00C4176A push esi
00C4176B push edi
;把栈抬高的位置放到edi,然后从edi刷CCCCCCCCh
00C4176C lea edi,[ebp-0C0h]
00C41772 mov ecx,30h
00C41777 mov eax,0CCCCCCCCh
00C4177C rep stos dword ptr es:[ed
;这里是直接把字符串push进去,然后调用printf,然后平栈
printf("hello world!n");
00C4177E push offset string "hello world!n" (0C46BD0h)
00C41783 call _printf (0C41316h)
00C41788 add esp,4
return 0;
;等价于eax清零,比mov eax ,0效率高
00C4178B xor eax,eax
}
00C4178D pop edi
00C4178E pop esi
00C4178F pop ebx
00C41790 add esp,0C0h
;比较一下栈是否还在原来的位置
00C41796 cmp ebp,esp
00C41798 call __RTC_CheckEsp (0C4110Eh)
00C4179D mov esp,ebp
00C4179F pop ebp
00C417A0 ret
四
C语言关键字:
五
C语言保留标识符:
1. 下划线开始的标识符
2. 标准库函数名
六
C语言数据类型:
//C99之前没有布尔类型,要用需要通过typedef的方式自己构造 int main(){
//int家族
short num0; //2字节
int num1; //4字节
long num2; //8字节,大部分情况下 long = int 都是4字节 long long num3;
unsigned short num4; // 无符号短整型
unsigned int num5;
unsigned long num6;
//字符
char ctmp = 'A'; //此处需要用单引号,双引号是字符串
//浮点型,存小数,也支持科学技术法
float f1;//32位
double f2;//64位
long double f3;//128位
//bool
bool ff = true;//1
bool ft = false;//0
//指针
char * pch;
//union联合体
//struct结构体
//enum枚举
return 0;
}
七
C语言输入输出函数:
输入函数:scanf("%?",temp);
输出函数:printf("%?",temp);
实例:输入输出字符串
int main() {
int len = 0;
char str1[20];
scanf("%s", str1);
len = strlen(str1);
printf("hello world:%s,long:%d",str1,len);
return 0;
}
默认情况下scanf被禁用了,因为存在安全问题,需要包含一个宏才能用:
1. 项目--属性--C/C++--预处理器--编辑
2. 把报错里说的宏复制进去
八
C语言命名规则:
九
C语言运算符:
算数运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
运算符优先级
https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E 7%BA%A7/4752611#3
扫描下方二维码加入星球学习
加入后会邀请你进入内部微信群,内部微信群永久有效!
本文始发于微信公众号(Ms08067安全实验室):C语言基础01--初见C语言
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论