地址指针相加
js中,普通2个,原以为都是普通的数值的值,用加号相加:
var functionSize = 0x24C8; // 9416 == 0x24C8
...
const moduleBaseAddress = Module.findBaseAddress(moduleName);
const funcRealStartAddr = moduleBaseAddress.add(funcRelativeStartAddr); // 0x1001fc460
...
var funcRealEndAddr = funcRealStartAddr + functionSize;
结果却是:
funcRealEndAddr=0x10015c0006564809416
而不是以为的:
funcRealEndAddr=0x1001fe928- 其中:
0x1001fe928-0x1001fc460=0x24C8
- 其中:
原因:
此处的值funcRealStartAddr,其实是Frida中的特殊定义的类型,叫做:NativePointer
所以,两个NativePointer类型的地址相加,要用特殊写法,否则就变成了:字符串级别的拼接相加了。
解决办法:
搞懂定义和方法:
NativePointer- 文档:
- 属性、函数:
add()sub()- ...
equals()compare()toInt32()
后,改为:
用NativePointer的add(和前面写法一样)
var funcRealEndAddr = funcRealStartAddr.add(functionSize);
即可
-> 输出正常的值:
funcRelativeStartAddr=656480, functionSize=9416, funcRelativeEndAddr=665896
moduleName=akd, moduleBaseAddress=0x10015c000
funcRealStartAddr=0x1001fc460, funcRealEndAddr=0x1001fe928