首页
社区
课程
招聘
[求助][求助]关于IDA调试ARM代码的一些疑惑
发表于: 2016-10-25 13:06 7134

[求助][求助]关于IDA调试ARM代码的一些疑惑

2016-10-25 13:06
7134
刚开始学习Android,开始用IDA调试手机里面的ELF文件,对ARM指令不熟悉,IDA里面遇到一些奇怪的指令完全不知道是什么情况,百度查ARM指令也没有讲解的
IT CC 这种还好,只要单步一下就大概能猜出是什么意思,但是下面指令就非常费解了:

server:40028192 5A F8 25 20 LDR.W           R2, [R10,R5,LSL#2]      ; val2 = r10[r5]; // r10 是 uint*
server:40028196 06 A8       ADD             R0, SP, #0x18           ; dwsave[2]  = BEA5EB18
server:40028198 39 46       MOV             R1, R7                  ; val1
server:4002819A 02 93       STR             R3, [SP,#8]
server:4002819C CD F8 04 C0 STR.W           R12, [SP,#4]
server:400281A0 FF F7 48 FE BL              Clac2val
server:400281A4 DD F8 04 C0 LDR.W           R12, [SP,#4]
server:400281A8 06 99       LDR             R1, [SP,#24]            ; r1 = dwsave[0];
server:400281AA 5C F8 25 30 LDR.W           R3, [R12,R5,LSL#2]      ; r3 = r12[r5];  // r12 是 uint*
server:400281AE F0 18       ADDS            R0, R6, R3              ; r0 = r6+r3;
server:400281B0 00 EB 01 06 ADD.W           R6, R0, R1              ; r6 = r6+r3+r1;
server:400281B4 34 BF       ITE CC


最后一个ITE CC 百度上可以找到IT指令的零散解析,但是对于ITE 就很少解析,后面再跟个CC就完全找不到了
请问下,这个指令是IDA显示的指令,不是ARM标准显示?如果是标准为何都没有讲解
最最重要的问题是,如果有不懂的指令应该哪里查呢?Intel有Intel卷二可以查,arm有对应的什么手册没有呢?谢谢大牛指点!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我刚注册这个论坛,看来第一个回复要给你了。搞ARM嵌入式的。
这句话就是IF 跳转,CC是条件,是 进位清零\无符号小于。这里是符合条件执行下一句。这句话其实没这么简单,你先这样理解就行。
手册是有的,ARM官网里。有个叫ARM指令速查参考卡。
我很纳闷,你破解ARM程序干嘛?还没见只卖软件的嵌入式。。
2016-10-25 22:38
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
首先说句谢谢,我找到了你说的速查表,里面if这个找不到合理的解释,因为跳转过去以后连Clac2val函数的参数都变了,而且我还不知道它是从哪里来的,这个参数对以后的作用影响比较大。
有些软件不是绑定硬件来卖的,比如你想了解一款最新的root工具里面elf文件做了什么,除了逆向没有其他更好的办法,另外还有恶意代码分析,等等
2016-10-26 02:00
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哦,没仔细看到你是分析手机的软件。
关于手册,你可以看ARMv7-AR Architecture Reference Manual,是针对手机用的处理器。要是64位处理器就是V8手册。
你可以在ARM官网,搜索汇编相关的文档。比如DUI0489F_arm_assembler_reference.PDF,IT语句我想你在这个文档里应该能自己看明白。
还有ARM指令有1.ARM指令集2Thumb-1指令集3.Thumb-2指令集。这个IT指令是属于Thumb-2指令集,这就很特殊了。ARM甚至能随意切换指令集状态。其实所有的ARM指令都可以附加条件执行,这个IT指令就是为了模仿这个功能。
另外你可以看看中文的资料先理解ARM 寄存器,以及它的指令分类。除了特殊场合需要比如启动文件,算法优化,应该没人会用ARM指令。我也只是研究过半个月而已。
另外直接百度ARM+IT 到的信息,感觉对你理解有帮助的
2016-10-26 21:50
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
非常感谢你的热心回答,让我学到了很多,今天又重新调试了好久,发现其实不是指令解释有问题,而是调试器有问题,IDA 单步会莫名的跳过一些代码,多调试几遍就好了。非常感谢
2016-10-27 01:28
0
游客
登录 | 注册 方可回帖
返回
//