首页
社区
课程
招聘
[求助]Arm反汇编 BLX的问题。55
发表于: 2010-3-26 17:06 15985

[求助]Arm反汇编 BLX的问题。55

2010-3-26 17:06
15985
.text:7D8DF684
.text:7D8DF684 loc_7D8DF684
.text:7D8DF684 SUB     R0, R11, #0x354
.text:7D8DF688 BL      sub_7D8B8D2C
.text:7D8DF68C SUB     R0, R11, #0x35C
.text:7D8DF690 LDR     R1, [R11,#var_20]
.text:7D8DF694 BL      sub_7D8E03E0
.text:7D8DF698 SUB     R3, R11, #0x35C
.text:7D8DF69C SUB     R0, R11, #0x354
.text:7D8DF6A0 MOV     R1, R3
.text:7D8DF6A4 BL      _ZN6TDes164CopyERK7TDesC16 ; TDes16::Copy(TDesC16  const&)
.text:7D8DF6A8 SUB     R0, R11, #0x560
.text:7D8DF6AC SUB     R0, R0, #4
.text:7D8DF6B0 BL      sub_7D8B8D2C
.text:7D8DF6B4 LDR     R0, [R11,#var_20]
.text:7D8DF6B8 BL      sub_7D8E03B8
.text:7D8DF6BC MOV     R4, R0
.text:7D8DF6C0 LDR     R0, [R11,#var_20]
.text:7D8DF6C4 BL      sub_7D8E03B8
.text:7D8DF6C8 MOV     R2, #0xC
.text:7D8DF6CC LDR     R3, [R0]
.text:7D8DF6D0 ADD     R3, R2, R3
.text:7D8DF6D4 LDR     R3, [R3]
.text:7D8DF6D8 BLX     R3
.text:7D8DF6DC MOV     LR, R0
.text:7D8DF6E0 MOV     R2, #0x10
.text:7D8DF6E4 LDR     R3, [R4]
.text:7D8DF6E8 ADD     R3, R2, R3
.text:7D8DF6EC SUB     R2, R11, #0x560
.text:7D8DF6F0 SUB     R2, R2, #4
.text:7D8DF6F4 LDR     R12, [R3]
.text:7D8DF6F8 MOV     R0, R4
.text:7D8DF6FC MOV     R1, R2
.text:7D8DF700 MOV     R2, #0
.text:7D8DF704 MOV     R3, LR
.text:7D8DF708 BLX     R12
.text:7D8DF70C LDR     R0, [R11,#var_20]
.text:7D8DF710 BL      sub_7D8E03B8
.text:7D8DF714 MOV     R2, #0xC
.text:7D8DF718 LDR     R3, [R0]
.text:7D8DF71C ADD     R3, R2, R3
.text:7D8DF720 LDR     R3, [R3]
.text:7D8DF724 BLX     R3 <-------------------------------------------运行到这里
.text:7D8DF728 BL      _ZN7HBufC165NewLCEi ; HBufC16::NewLC(int)
.text:7D8DF72C STR     R0, [R11,#var_14C]
.text:7D8DF730 SUB     R0, R11, #0x354
.text:7D8DF734 BL      sub_7D8B6C30
.text:7D8DF738 BL      _ZN7HBufC165NewLCEi ; HBufC16::NewLC(int)
.text:7D8DF73C STR     R0, [R11,#var_568]
.text:7D8DF740 SUB     R0, R11, #0x570
.text:7D8DF744 SUB     R0, R0, #4
.text:7D8DF748 SUB     R0, R0, #8
.text:7D8DF74C LDR     R1, [R11,#var_568]
.text:7D8DF750 BL      _ZN7HBufC163DesEv ; HBufC16::Des(void)
.text:7D8DF754 SUB     R0, R11, #0x570
.text:7D8DF758 SUB     R0, R0, #4
.text:7D8DF75C SUB     R0, R0, #8
.text:7D8DF760 SUB     R3, R11, #0x354
.text:7D8DF764 MOV     R1, R3
.text:7D8DF768 BL      _ZN6TDes164CopyERK7TDesC16 ; TDes16::Copy(TDesC16  const&)
.text:7D8DF76C SUB     R0, R11, #0x570
.text:7D8DF770 SUB     R0, R0, #4
.text:7D8DF774 SUB     R0, R0, #8
.text:7D8DF778 LDR     R1, [R11,#var_14C]
.text:7D8DF77C BL      _ZN7HBufC163DesEv ; HBufC16::Des(void)
.text:7D8DF780 SUB     R0, R11, #0x570
.text:7D8DF784 SUB     R0, R0, #4
.text:7D8DF788 SUB     R0, R0, #8
.text:7D8DF78C SUB     R3, R11, #0x560
.text:7D8DF790 SUB     R3, R3, #4
.text:7D8DF794 MOV     R1, R3
.text:7D8DF798 BL      _ZN6TDes164CopyERK7TDesC16 ; TDes16::Copy(TDesC16  const&)
.text:7D8DF79C LDR     R3, [R11,#var_18]
.text:7D8DF7A0 LDR     R3, [R3,#0x24]
.text:7D8DF7A4 LDR     R3, [R3]
.text:7D8DF7A8 LDR     R2, [R11,#var_18]
.text:7D8DF7AC LDR     R3, [R3]
.text:7D8DF7B0 LDR     R0, [R2,#0x2

我用IDA跟到这里7D8DF6D8 ,发现是“BLX     R3”R3=0x80870401   查手册时发现

BLX <地址>

  BLX指令有两种格式,第1种格式的BLX指令记作BLX(1)。BLX(1)从ARM指令集跳转到指令中指定的目标地址,并将程序状态切换到Thumb状态,该指令同时将PC寄存器的内容复制到LR寄存器中。

  BLX(1)指令属于无条件执行的指令。

  第2种格式的BLX指令记作BLX(2)。BLX(2)指令从ARM指令集跳转到指令中指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器<dest>中,该地址的bit[0]值为0,目标地址处的指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。


可是发现
反汇编窗口:
MEMORY:80870401 % 1
MEMORY:80870402 % 1
MEMORY:80870403 % 1
MEMORY:80870404 % 1
MEMORY:80870405 % 1
MEMORY:80870406 % 1
MEMORY:80870407 % 1
MEMORY:80870408 % 1
MEMORY:80870409 % 1
MEMORY:8087040A % 1
MEMORY:8087040B % 1
MEMORY:8087040C % 1


在DUMP窗口:
80870401  ?? ?? ?? ?? ?? ?? ?? ??  ?? ?? ?? ?? ?? ?? ?? ??  ????????????????
80870411  ?? ?? ?? ?? ?? ?? ?? ??  ?? ?? ?? ?? ?? ?? ?? ??  ????????????????
80870421  ?? ?? ?? ?? ?? ?? ?? ??  ?? ?? ?? ?? ?? ?? ?? ??  ????????????????


很纠结,我该如何跟进BLX里呢?

.text:7D8DF6CC LDR     R3, [R0]
.text:7D8DF6D0 ADD     R3, R2, R3
.text:7D8DF6D4 LDR     R3, [R3]
.text:7D8DF6D8 BLX     R3

看代码能发现R0是类的实例,相当于This,看代码像是调用类的一个方法。而这个方法还貌似不是自己实现的,应该是继承下来,所以我不知道该如何跟进去。请指点一下小弟吧。先谢过了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 138
活跃值: (108)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
  走过路过不要错过。
2010-3-28 11:53
0
雪    币: 413
活跃值: (351)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这里的指令是你所说的第二种形式.因为第一种形式,后面必须跟的是立即数. 在第二种形式中, 如果如果R3的第0位是1,则要切换到thumb模式,如果是0,则仍处在arm模式. 在跳至thumb代码运行时,R3的值应 &0xfffffffe.  所以你的代码中实际跳转地址应是0x80870400
2010-3-28 21:00
0
雪    币: 109
活跃值: (498)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
4
首先应该说明
你当前是热调试状态。

然后解答问题
你IDA反编译的是你目标程序 AAA
目标程序调用了系统动态连接库BBB。dll中的 ccc 导出函数
IDA只能显示已经反编译了的模块,所以看不到BBB程序中的汇编信息。

最后
你若真的想分析,可以对BBB这个程序的导出函数分析。
2010-3-29 10:35
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
BLX有两个意思,一个是保存当前的链接地址,一个是进行ARM和Thumb的转换;
不过你的问题不在于搞错了BLX的意思,而在于你使用的APPTRK是不允许对程序以外内存进行调试,所以你看到的都是1和?。
如果想看的话,需要把APPTRK破解才行
2010-4-19 23:04
0
游客
登录 | 注册 方可回帖
返回
//