Android_Inline_Hook
Android_Inline_Hook copied to clipboard
《Android Native Hook技术路线概述》文章中的疑问
《Android Native Hook技术路线概述》文章里的问题就发这里哈,这样方便我定期从这个issue下面找东西补充文章。
_shellcode_start_s:
push {r0, r1, r2, r3}
mrs r0, cpsr
str r0, [sp, #0xC]
str r14, [sp, #8]
add r14, sp, #0x10
str r14, [sp, #4]
pop {r0}
push {r0-r12}
mov r0, sp
这个stub中,第一行代码的作用是做什么?没看明白,没发现有神马作用。如果仅是分配堆栈空间的话,sub SP, SP ,#16岂不是更好
不是这样滴~ 第一句的作用并不仅仅是求得16byte的栈空间,还需要把R0先暂时保存下来。 之后还有一句pop {r0}是恢复R0。 因此不建议把push {r0, r1, r2, r3}变成sub SP, SP ,#16
OK, I understand your question. The first "push {r0, r1, r2, r3}" is not just for 16 bytes on stack, it also try to save R0 to the stack. So after I use R0 to save CPSR and other reg, I can recover R0 from stack by "pop {r0-12}" So, it will be some mistakes if you wanna change "push {r0, r1, r2, r3}" to "sub SP, SP ,#16".
好吧,但是当前这种写法虽然可以达到目的,但是阅读源码时如果没有注释,理解上就很费解了,所以还是感觉先分配栈空间,即sub SP, SP ,#16,然后再push {R0}这种写法更容易理解,毕竟代码是给人看的