逆向基础之C语言:C语言while do while


一.while循环
<1>.格式


While(表达式)
{
语句
}

while()里的表达式可以是关系运算,可以是算术运算,算术运算一定要注意容易造成死循环,一定要加上break;关系运算就看表达式的关系是否成立,while循环一般情况下都是用的关系运算

<2>.while循环的关键要素


1.需要括号里的表达式成立

2.判断哪个变量就要给那个变量设置条件

3.判断条件不能存放结果

<3>.while循环就是通过if+goto演变过来的
goto语句相当于汇编的jmp指令,也是和lab搭配使用

int fun()
{
//定义变量
int a;
int b;

//初始化
a=1;
b=1;

lab:
if(a<=5)
{
b=a+b;
a++;
goto lab;
}


printf("%d\n",b);
return 0;
}
int fun()
{
//定义变量
int a;
int b;

//初始化
a=1;
b=1;

while(a<=5)
{
b=a+b;
a++;
}


printf("%d\n",b);
return 0;
}


?
如上面代码所示,while循环就相当于if+goto.

<4>.while循环看它往回跳的位置来确定整个循环的范围

while(a<=5)
{
b=a*b;
a++;
while(a)
{
b++;
}

}


上面代码外面一层循环里面一层循环,怎么确定它的循环范围,如下图所示是它的反汇编

如图所示,关键点看往回跳的位置,图上已做了清楚的标注,红框为外层循环范围,橙框为内层循环范围.

二.do...while循环
<1>.格式


do
{
语句
}while(表达式);

注意看清楚,Do while 后面要记得有个分号,

<2>.do...while反汇编表达式判断条件是正的,判断条件是什么指令就是什么.

do
{
b=a+b;
a++;

}while(a<=5);


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

如图可以看出,判断条件是小于等于,反汇编里的指令也是小于等于

三.while与do while的区别


while是先判断后执行

do while是先执行后判断

int fun1()
{
int a;
int b;
a=10;
b=0;
while(a<=3)
{
b=a+b;
a++;
}
printf("%d\n",b);
return 0;
}
int fun1()
{
int a;
int b;
a=10;
b=0;

do
{
b=a+b;
a++;
} while (a<=3);
printf("%d\n",b);
return 0;
}

如上面代码所示,while循环与do...while循环明显结果不同,因为判断条件就算不满足,do...while也会先执行一次


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

搜索

复制