第7章so逆向流程控制分析
环境配置
1、 Ubuntu15.10系统IP:192.168.153.130
2、 工具 make 和 IDA
1、 交叉编译使用make命令
编译后会生成if、if.o、if.S文件
2、 接着使用IDA工具打开if文件查看ARM汇编代码
3、 查看if0的流程图语句,双击if0位置后按空格键进入
将var_8参数位置重命名为p1(注意:按“N”键进行修改)
4、 注解if0流程语句
5、 ARM汇编对应的if0流程语句写法
Int if0(int p1){
If(p1)
Return 1;
Return 0;
}
6、 注解if1流程语句
7、 ARM汇编对应的if1流程语句写法
Int if1(int p1){
if(p1<=9)
Return 5;
Elseif(p1>10)
Return6;
Elseif(p1==10)
Return7;
Returnp1;
}
8、 注解if2流程语句
9、 ARM汇编对应的if1流程语句写法
Int if2(int p1){
If(p1<=10)
Return1;
Elseif(p1>10)
{
If(p1<=19)
Return 2;
}
Elsereturn 3;
}
if总结:
cmpR0,#0xA 这是一个典型的IF
BGLloc_8039
If-else总结:
cmpR0,#0xA
BLEs1
B出口
S1:
…….
If-else-if 总结:
cmp R0,#0xA
BGT s1
B出口
S1:
cmp R0,#0xA
BLE s2
……
B出口
S2:
10、sum求和
11、ARM汇编对应的for流程语句写法
Intsum (int p1, int p2){
Intp1 = 0;
Intp2 =0;
For(intvar_count=p1;var_count<=p2;var_count++)
{
Var_8= var_8 + var_count
Returnvar_8;
}
}
12、while循环
13、ARM汇编对应的while流程语句写法
Int while1(int p1){
Intvar_8 = 0;
While(p1--)
{
Var_8++;
}
Return var_8;
}
14、dowhile循环
15、ARM汇编对应的do while流程语句写法
Int dowhile1(int p1){
Intp2 = 0;
Do{
P2++;
}while(p1--);
Return p2;
}
16、外for循环
17、ARM汇编对应的外for流程语句写法
For(int i=0;i<=99;i++)
{
Printf(“%d”,i);
}