0
我还在学习ARM,我无法理解这个功能应该做什么。需要帮助了解ARM功能
你们能帮我解释它是如何工作的吗?
.text:0006379C EXPORT _nativeD2AB
.text:0006379C _nativeD2AB
.text:0006379C var_28 = -0x28
.text:0006379C
.text:0006379C STMFD SP!, {R4-R11,LR}
.text:000637A0 SUB SP, SP, #0x3A4
.text:000637A4 STMFA SP, {R0-R3}
.text:000637A8 LDR R0, =(_GLOBAL_OFFSET_ - 0x637B8)
.text:000637AC LDR R1, =(__stack_chk - 0x134EAC)
.text:000637B0 ADD R0, PC, R0 ; _GLOBAL_OFFSET_
.text:000637B4 LDR R0, [R1,R0] ; __stack_chk
.text:000637B8 LDR R0, [R0]
.text:000637BC STR R0, [SP,#0x3C8+var_28]
.text:000637C0 MOV R0, #1
.text:000637C4 ADR R1, sub_637D0
.text:000637C8 MUL R0, R1, R0
.text:000637CC MOV PC, R0
.text:000637CC ; End of function _nativeD2AB
。
.got:00134EAC _GLOBAL_OFFSET_TABLE_ DCD 0
。
.got:00134B0C AREA .got, DATA
.got:00134B0C __stack_chk DCD __stack_chkA
。
找到函数的其余部分。如果我理解正确一些,它似乎是加扰的数据,尽管这可能只是胡乱猜测:
.text:000637D0 sub_637D0
.text:000637D0 MOV R0, #1
.text:000637D4 ADR R1, sub_637E0
.text:000637D8 MUL R0, R1, R0
.text:000637DC MOV PC, R0
.text:000637DC ; End of function sub_637D0
.text:000637E0 sub_637E0
.text:000637E0
.text:000637E0 arg_14 = 0x14
.text:000637E0
.text:000637E0 STR R2, [SP,#arg_14]
.text:000637E4 MOV R0, #1
.text:000637E8 ADR R1, loc_637F4
.text:000637EC MUL R0, R1, R0
.text:000637F0 MOV PC, R0
.text:000637F0 ; End of function sub_637E0
.text:000637F4 loc_637F4
.text:000637F4 STR R2, [SP,#0x28]
.text:000637F8 STR R0, [SP,#0x18]
.text:000637FC MOV R1, #2
.text:00063800 STR R2, [SP,#0x1C]
.text:00063804 STR R0, [SP,#0x20]
.text:00063808 STR R0, [SP,#0x24]
“这是由函数返回值” - 它没有返回任何东西,它做一个奇怪的跳转_to_'sub_637D0 ',这几乎肯定是一个反汇编器生成的符号,表示0x637cc处的mov pc,r0之后的下一条指令。让我想知道'mov r0,#1'是否打算做hotpatched,或者它只是世界上最少优化的单项跳转表。无论哪种方式,我们只能想知道函数的其余部分是什么样的...... – Notlikethat
我想我已经找到了函数的其余部分。没有必要怀疑了^^。顺便说一句,谢谢你的回答。 –