栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[逆向|C语言]C语言printf scanf裸汇编以及相关的小例子

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[逆向|C语言]C语言printf scanf裸汇编以及相关的小例子

目录

一.简单介绍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("%dn",c);
	return 0;
}

如上面代码简单应用scanf与printf,写成裸汇编如下面的代码所示

char*p="%d %d";
char*p1="%dn";

_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%dn",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("%dn",a+b);
				break;
			}
		case '-':
			{
				printf("%dn",a-b);
				break;
			}
		case '*':
			{
				printf("%dn",a*b);
				break;
			}
		case '/':
			{
			
				if(!b)
				{
					printf("除数不能为0");
					
				    break;

				}
				else
				{
					printf("%dn",a/b);
					break;
				}
				
			}
		default:
			{
				printf("输入有错n");
			}
	}

}

今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982176.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号