逆向基础之C语言:C语言printf scanf举例
一.简单介绍printf scanf裸汇编
printf 打印数据
scanf 输入数据
注意,scanf后面的参数跟的是地址,&取地址符号
int fun() { int a; int b; int c; c=0; scanf("%d %d",&a,&b); c=a+b; printf("%d\n",c); return 0; }
如上面代码简单应用scanf与printf,写成裸汇编如下面的代码所示
char*p="%d %d"; char*p1="%d\n"; _declspec(naked) int fun1() { _asm{ push ebp mov ebp,esp sub esp,0x4c push ebx push esi push edi lea edi,dword ptr ds:[ebp-0x4c] mov ecx,0x13 mov eax,0xcccccccc rep stosd mov dword ptr ds:[ebp-0xc],0x0 lea eax,dword ptr ds:[ebp-0x8] push eax lea ecx,dword ptr ds:[ebp-0x4] push ecx mov edx,p push edx call scanf add esp,0xc mov eax,dword ptr ds:[ebp-0x4] add eax,dword ptr ds:[ebp-0x8] mov DWORD ptr ds:[ebp-0xc],eax mov ecx,dword ptr ds:[ebp-0xc] push ecx mov eax,p1 push eax call printf add esp,0x8 xor eax,eax pop edi pop esi pop ebx mov esp,ebp pop ebp ret } }
下面是应用scanf与printf相关小例子
二.判断偶数
void oushu() { int a; printf("请输入一个数\n"); scanf("%d",&a); if (a % 2==0) { printf("您输入的%d是偶数\n",a); } else { printf("您输入的%d是奇数\n",a); } }
三.把几个数按从小到大排列
void bidaxiao() { int a; int b; int c; int t; scanf("%d%d%d",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("从小到大排列%d%d%d\n",a,b,c); }
四.判断是否是闰年
思路:1.能被4整除,但是不能被100整除;2.能被400整除
int runian() { int year; scanf("%d",&year); if((year % 4 ==0 && year % 100 !=0)||year %400 ==0) { printf("%d是闰年\n",year); } else { printf("%d不是闰年",year); } return 0; }
五.检测字符类型
思路:数字:48-57 大写字母:65-90 小写字母 97-122 特殊符号:剩下的
有两种写法:以大写字母举例,
第一种:c>=’A’&&c<=’Z’
第二种:c>=65&&c<=90
下面代码两种写法混写
int zifu() { char c; scanf("%c",&c); if(c>='0'&& c<=57) { printf("%c是数字",c); } else if(c>='a' && c<='z') { printf("%c是小写字母",c); } else if(c>=65&& c<=97) { printf("%c是大写字母",c); } else { printf("%c是特殊字符",c); } return 0; }
六:简单计算器
void jisuanqi() { int a; int b; char c; scanf("%d%c%d",&a,&c,&b); switch(c) { case '+': { printf("%d\n",a+b); break; } case '-': { printf("%d\n",a-b); break; } case '*': { printf("%d\n",a*b); break; } case '/': { if(!b) { printf("除数不能为0"); break; } else { printf("%d\n",a/b); break; } } default: { printf("输入有错\n"); } } }
今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!
搜索
复制