实际内存地址和Stalker输出地址不匹配不一致

某次Stalker调试的log是:

===== 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
...

其中指令地址看起来不匹配=不一致:

  • 指令地址:0x1071dbcd8
  • 函数二进制内偏移量:0xa0460
    • 此处akd模块基地址:0x10054c000
      • 所以函数的实际真实起始地址:0x1005ec460

后来才明白是:

Frida的Stalker中,看到2个函数地址不匹配:

  • 函数实际内存起始地址:0x1005ec460
    • 0x1005exxxx 之类的地址
  • Stalker中运行期间的函数地址:0x1071dbcd8
    • 0x1071dxxxx 之类的地址

的原因:

Stalker内部的hook指令的原理就是:把当前代码拷贝一份,加上hook代码及其他逻辑

而此处的:拷贝一份,到别处,别的一段内存地址空间,此处就是指的是:

  • 0x1071dbcd8
    • 0x1071dxxxx 之类的地址

所以,原始函数代码和被Stalker去hook的代码,两个地址是不同的,是可以理解的。

results matching ""

    No results matching ""