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

if .....  else .... 组合后是一个双分支结构,两者间的功能有所不同。从愈发上看,if...else.... 只是比 if 多出了一个 else, else, 有2个功能,如果 if 判断成功,

则跳过else分支语句块, 如果,if 判断失败,则进入else 语句块。 有了 else语句块的存在,程序在进行流程选择时,必会经过2个分支中的一个。

总结: 

;先执行影响标志位的相关指令

jxx  ....................................else_begin

if _begin

........

if_end

jmp ......  else_end

else_begin

.....

else_end

如果遇见以上指令,先考察其中的两个跳转指令,当地一个条件跳转指令跳到  else_begin 处的之前有个jmp 指令,则可视为由 if ... else ....组合而成的双分支结构。

根据这两个跳转指令可以得到  if   和  else 语句块的代码边界。通过 cmp 与  jxx 可 还原出 if  的比较信息, jmp 指令之后即为 else  语句块的开始,依次分析,即可逆向分析出  if  ....else..... 组合原型。

但是,有时候会遇到复杂的条件表达式作为分支或者循环结构的判定条件的情况, 这时即使直接阅读高级源码也会让人抓狂。在没有 高级源码的情况下,分析者需要先定位语句块的边界,然后根据跳转目标和逻辑依赖慢慢反推出高级源码。


附上   if .... else .... 语句结构图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值