反汇编之流程控制语句的识别(if...else...语句)
2015-03-25 12:30
309 查看
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 .... 语句结构图
则跳过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 .... 语句结构图
相关文章推荐
- 反汇编之流程控制语句的识别(if语句)
- java流程控制语句&if...else
- java学习之路 之 基本语法-程序流程控制-(if-else)语句练习题
- 【慕课笔记】第四章 流程控制语句 第2节 JAVA条件语句之if...else...
- JAVA流程控制 IF ELSE语句与Switch Case语句的使用
- SQL 流程控制语句 之一 IF…ELSE语句
- SQL Server-流程控制 2,If...Else 语句
- Linux学习之道:linux中流程控制语句if if else case
- JAVA 控制流程之分支语句 (if -else)
- Java流程控制语句——if-else语句
- C++程序员学Java系列之九:流程控制语句if,else
- java学习之路 之 基本语法-程序流程控制-(if-else)语句练习题
- ”反汇编之流程控制语句的识别“ 特此说明
- 流程控制-if-else语句
- 流程控制------if else分支语句
- python流程控制语句 ifelse - 3
- Python流程控制语句->if .......else
- PHP流程控制语句-if、if-else、if-elseif-else语句
- python流程控制语句 ifelse - 1
- python流程控制语句 ifelse - 2