Android_Inline_Hook icon indicating copy to clipboard operation
Android_Inline_Hook copied to clipboard

《Android Native Hook技术路线概述》文章中的疑问

Open GToad opened this issue 6 years ago • 3 comments

《Android Native Hook技术路线概述》文章里的问题就发这里哈,这样方便我定期从这个issue下面找东西补充文章。

GToad avatar Aug 02 '18 01:08 GToad

_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岂不是更好

BigFaceCat2017 avatar Oct 26 '18 07:10 BigFaceCat2017

不是这样滴~ 第一句的作用并不仅仅是求得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".

GToad avatar Oct 26 '18 09:10 GToad

好吧,但是当前这种写法虽然可以达到目的,但是阅读源码时如果没有注释,理解上就很费解了,所以还是感觉先分配栈空间,即sub SP, SP ,#16,然后再push {R0}这种写法更容易理解,毕竟代码是给人看的

BigFaceCat2017 avatar Oct 29 '18 03:10 BigFaceCat2017