.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,看代码像是调用类的一个方法。而这个方法还貌似不是自己实现的,应该是继承下来,所以我不知道该如何跟进去。请指点一下小弟吧。先谢过了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)