逆向基础之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也会先执行一次
今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!
搜索
复制