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

[逆向|C语言]C语言for循环九九乘法表以及裸汇编

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

[逆向|C语言]C语言for循环九九乘法表以及裸汇编

目录

一.for循环

<1>.格式:

<2>.for循环只有中间的条件表达式时反汇编跟while是一模一样的

<3>.for循环反汇编中间插了个jmp 一眼就可看出是for循环

 二.for循环九九乘法表

 三.for循环九九乘法表裸汇编


一.for循环

<1>.格式:

for( ; ;)
{

}

括号里的表达式

第1个.赋初值
第2个.判断条件
第3个.跳出循环的条件(一般自增自减) 

for循环可以是1个表达式 可以是2个表达式 可以是3个表达式.

<2>.for循环只有中间的条件表达式时反汇编跟while是一模一样的
 int fun1()
 {
	 int a;
	 int b;
	 a=1;
	 b=0;
	 for(;a<=100;)
	 {
		 b=b+a;
		 a++;
	 }
	 printf("%d",b);
	 return 0;
 }

上面for循环代码的反汇编如下图所示

 

int fun2()
 {
	 int a;
	 int b;
	 a=1;
	 b=0;
	 while(a<=100)
	 {
		 b=b+a;
		 a++;
	 }
	 printf("%d",b);
	 return 0;
 }

 这是while循环代码

这是while循环反汇编,对比两个循环的反汇编,注意观察 ,for循环只有中间的条件表达式时反汇编跟while循环不能说毫无关系,只能说一模一样

<3>.for循环反汇编中间插了个jmp 一眼就可看出是for循环

 二.for循环九九乘法表
int fun()
{
	int a;
	int b;
	for(a=1;a<=9;a++)
	{
		for (b=1;b<=a;b++)
		{
			printf("%d*%d=%dt",b,a,b*a);
		}
		printf("n");

	}
	return 0;
}

代码如上所示,打印出来如下图所示

 三.for循环九九乘法表裸汇编
char*p="%d*%d=%dt";
char*p1="n";
char*p2="这是for循环裸汇编运行出来的n";
_declspec(naked) int fund()
{
	_asm
	{
		  push ebp
		  mov ebp,esp
		  sub esp,0x48
		  push ebx
		  push esi
		  push edi
		  lea edi,dword ptr ds:[ebp-0x48]
		  mov ecx,0x12
		  mov eax,0xcccccccc
		  stosd
//a=1
		  mov dword ptr ds:[ebp-0x4],0x1
		  jmp lab1
lab4:
		  //a++
		  mov eax,dword ptr ds:[ebp-0x4]
		  add eax,0x1
		  mov dword ptr ds:[ebp-0x4],eax
lab1:
		  //a<=9
		  cmp dword ptr ds:[ebp-0x4],0x9
		  jg lab7

		  //b=1
		  mov dword ptr ds:[ebp-0x8],0x1
		  jmp lab2
lab6:
		  //b++
		  mov ecx,dword ptr ds:[ebp-0x8]
		  add ecx,0x1
		  mov dword ptr ds:[ebp-0x8],ecx
lab2:
		  //b<=a
		  mov edx,dword ptr ds:[ebp-0x4]
		  cmp DWORD ptr ds:[ebp-0x8],edx
		  jg lab3
		  mov eax,dword ptr ds:[ebp-0x8]
		  imul eax,dword ptr ds:[ebp-0x4]
		  push eax
		  push DWORD ptr ds:[ebp-0x4]
		  push DWORD ptr ds:[ebp-0x8]
		  mov ecx,p
		  push ecx
		  call printf
		  add esp,0x10
		  jmp lab6
lab3:
		  mov edx,p1
		  push edx
		  call printf
		  add esp,0x4
		  jmp lab4
lab7:
		  mov edx,p2
	      push edx
		  call printf
		  add esp,0x4
		  xor eax,eax


		  pop edi
		  pop esi
		  pop ebx
		  mov esp,ebp
		  pop ebp
		  ret

	}


}

for循环九九乘法表裸汇编如上,打印出来如下图片所示


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

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

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

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