-
-
[原创]从反汇编的角度学C/C++之条件判断
-
发表于:
2021-9-29 10:06
9511
-
由于条件判断中需要用到条件指令,这里为了方便把常见的几个跳转指令放这里参考
在C/C++中我们使用使用if-else if -else语句来实现程序根据不同情况来跳转运行。下面通过一个实例来学习其中的内部实现
由上可以看出,在经过if或者else if的时候程序是判断是否不满足条件。在不满足条件的情况下,程序根据情况跳转到相应的地方,如果满足条件程序就会往下执行完相应的指令之后在跳转到整个if-else if-else结构的下一条指令。转换为汇编以后的程序执行流程就如下图所示
在条件判断中,我们经常使用&&与||。接下来看看他们转成汇编以后的样子。
由上可以看出,对于&&程序会经过两次判断条件是否都成立,任何一次条件不成立都会导致语句块不被执行且第一次判断如果不成立就不会进行第二次判断直接跳过程序块。
而对于||,任何一次条件成立都会导致语句块被执行,且如果第一次条件成立就不会进行第二次判断,直接跳转到条件成立的语句进行执行。
下面列举了两种新手比较容易犯的错误。第一次情况是把=号当做==来进行使用,第二种情况是由于else匹配if是根据最近匹配的原则,由于第一个if成立的语句块没有加{}导致else匹配了第二个if。
最终生成的反汇编代码如下:
可以看到,由于把=当成==使用,导致第一个if判断时候先是对x赋值为1,然后在判断x是否等于0。而在第二个由于else没正确配对导致跳转语句不符合预期。最终运行结果如下:
swich-case在c/c++中也是一种常见的条件判断语法,那么在内存中的表现形式与if-else结构有什么不同呢,请看下面的实例:
可以看出与if-else if-else结构相比,switch case生成的结构会在最开始就一一判断符合的情况然后跳转到相应的地方。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-12-13 17:00
被1900编辑
,原因: