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的代码,两个地址是不同的,是可以理解的,没有出错,是正常的。

results matching ""

    No results matching ""