前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓逆向:老司机带你回顾ARM和C/C++基本结构

安卓逆向:老司机带你回顾ARM和C/C++基本结构

作者头像
小道安全
修改2021-01-21 22:13:27
1.4K0
修改2021-01-21 22:13:27
举报
文章被收录于专栏:游戏安全攻防游戏安全攻防

引言:这还是一篇比较枯燥的和ARM打交道的文章。不过这也是为了后续能更好进行做so逆向而做铺垫。

Arm C/C++基本结构逆向结构图

掌握ARM汇编中基本结构前需要回顾和并熟记以下的条件指令

在熟悉下另外一个重要的ARM汇编指令:CMP

CMP指令:在汇编中就是将两个寄存器中的值做一个相减,再判断值是否大于0(它会设置对应状态寄存器),它的主要跳转方式与下一条指令相关联的。

进入主题

if...else结构

(注意:if在arm中的展示和源代码的实现是取反的操作)

C/C++代码结构

If...else结构

if(....)

{

.....

}

else if(....)

{

....

}

else

{

...

}

C/C++对应arm汇编结构提炼

判断指令cmp后面的跳转执行指令指向的地址都是往后跳的。

cmp r0,xx(这个xx可以是寄存器,可以是具体数据)

BNE loc_xxx(地址是往下指向)

cmp r0, xx(这个xx可以是寄存器,可以是具体数据)

BNE loc_xxx(地址是往下指向)

C/C++源代码

IDA中if..else结构的流程图

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM汇编代码及解释

If...elseif....else 源代码

IDA中if...elseif...else结构的流程图

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM汇编代码及解释

for结构

C/C++基本结构

for(int i = 0; i <j; i++)

{

.....

.....

}

for结构对应arm汇编结构提炼

for默认情况下都是从0开始,会先进行判断是否要跳出循环体,接着在执行循环体内容,并且在循环体的尾部+1的向上跳。

mov xx,xx

cmp xx,xx

BLT 地址(跳出整个结束循环体)

loc_xxx

mov xx,xx

add xx,1

BNE loc_xxx(向上跳到前面loc_xxx地址,继续执行循环的内容)

C/C++源代码:

IDA中for结构体的流程图

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM汇编代码及解释

C/C++源代码2

IDA中for结构的流程图2

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM汇编代码及解释2

while结构

(注意地址往上跳的情况)

C/C++基本结构

while(xxxx)

{

xxxxx

xxxxx

}

while对应arm汇编结构提炼

在arm汇编中for和while结构是一样的,两种没有差别

mov xx,xx

cmp xx,xx

BLT 地址(跳出整个结束循环体)

loc_xxx

mov xx,xx

add xx,1

BNE loc_xxx(向上跳到前面loc_xxx地址,继续执行循环内容)

C/C++源代码

IDA中while的结构流程图

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM的汇编代码及解释

do..while结构

C/C++基本结构

do{

xxxxx

xxxxx

xxxxx

}while(xxx);

do...while对应arm汇编结构提炼

mov xx,xx

loc_xxx(循环体开始地址)

mov xx,xx

cmp xx,xx

BLT loc_xxx(向上跳到前面循环体,继续执行循环体内容)

C/C++源代码

IDA中do...while结构的流程图

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM汇编代码及解释

Switch结构

C/C++基本结构

switch(xxx)

{

case xx:

xxxxx

xxxxx

break;

case xx:

xxxxx

xxxxx

break;

case xx:

xxxxxx

xxxxx

break;

....

...

default:

xxxx

xxx

break;

}

switch对应arm汇编结构提炼

switch最明显的特征就是存在TBB 后面跟上的是跳转表。

mov xx,xx

cmp xx,xx

BHI loc_xxx(往下跳的地址)

TBB {PC,xx} (TBB关键字)

DCB xxx (跳转表)

DCB xxx

...

....

loc_xxx

xxxx

xxxx

B loc_xxx(结束的地址)

loc_xxx

xxxx

xxxx

B loc_xxx(结束的地址)

loc_xxx

xxxx

xxxx

B loc_xxx(结束的地址)

C/C++源代码

IDA中switch结构的流程图

绿色箭头指向表示 : 跳转条件满足时候的走向。

红色箭头指向表示:跳转条件不满足时候的走向。

ARM汇编代码及解释

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 游戏安全攻防 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档