Stalker中函数地址和指令地址匹配不上
对于之前Stalker代码
___lldb_unnamed_symbol2575$$akd
的某次调试输出日志是:
===== dynamicDebug/frida/scripts/fridaStalker_akdSymbol2575.js =====
funcRelativeStartAddr=656480, functionSize=9416, funcRelativeEndAddr=665896
moduleName=akd, moduleBaseAddress=0x10054c000
funcRealStartAddr=0x1005ec460, funcRealEndAddr=0x1005ec4609416
[iPhone::PID::13098 ]-> ----- arg0=0xfffffffffffffffe, arg1=0x16fe26838, arg2=0x16fe26838, arg3=0xfffffffffffffffe
curTid= 26635
+++ into iterator=
[0x1071dbcd8] b #0x1071dbce8
+++ into iterator=
[0x1071dbce8] str wzr, [x19, #0x90]
[0x1071dbcec] ldr x0, [x19, #0xa0]
[0x1071dbcf0] str xzr, [x19, #0xa0]
[0x1071dbcf4] cbz x0, #0x1071dbcfc
+++ into iterator=
[0x1071dbcf8] bl #0x1070dfef8
+++ into iterator=
[0x1071dbcfc] ldr x0, [x19, #0x98]
[0x1071dbd00] str xzr, [x19, #0x98]
[0x1071dbd04] cbz x0, #0x1071dbd14
...
-》看到2个函数地址不匹配:
- 函数实际内存起始地址:
0x1005ec460
0x1005exxxx
之类的地址
- Stalker中运行期间的函数地址:
0x1071dbcd8
0x1071dxxxx
之类的地址
后来明白原因了:
Stalker内部的hook指令的原理就是:
把当前代码拷贝一份,加上hook代码及其他逻辑
而此处的:拷贝一份,到别处,别的一段内存地址空间,此处就是指的是:
0x1071dbcd8
0x1071dxxxx
之类的地址
所以,原始函数代码和被Stalker去hook的代码,两个地址是不同的,是可以理解的,没有出错,是正常的。