反汇编之流程控制语句的识别(if语句)

if 语句的功能是先对运算条件进行比较,然后根据比较结果选择对应的语句来执行。if 语句只能判断两种情况: “0” 为假,“非0”为真。如果为真,则进入语句块内执行语句; 如果为假, 则跳过 if 语句块,继续执行后面的语句。要注意的是, if 语句转换的条件跳转指令与if  语句的判断结果是相反的。 

按照if 语句的规定,满足if判定的表达式才能执行if语句块,而汇编语言的条件跳转是满足某条件则跳转,绕过某些代码块, 这一点与C语言是相反的。

C语言是根据代码的位置来决定编译后的二进制代码的地址高低的,也就是说, 第函数对应低地址,高行数对应高地址,所以有时会使用标号相减得到代码的长度。鉴于此,C语言的编译器是 不能随意改变代码行在内存中的顺序。

if 语句转换规则:

在转换成汇编代码后,由于当 if   比较结果 为假时,需要跳过if 语句内的代码, 因此使用了相反的条件跳转指令。

总结:

;先执行各类影响标志位的指令

;其后是各类条件跳转指令

jxx xxxx

如果遇到以上指令, 可高度怀疑  它是一个由if语句组成的单分支结构,根据标胶信息与跳转指令, 找到其跳转条件的的相反逻辑,即可恢复分支结构原型。而循环结构中也会出现类似的代码,因此在分析过程中,还需要 结合上下文。

附 if 语句结构执行流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值