原文链接: https://frida.re/docs/javascript-api/#nativepointer
欢迎加入 Frida 交流群: 1049977261
NativePointer
-
new NativePointer(s):
通过s创建一个新的NativePointer对象,s可以是一个数字也可以 是一个包含以 "0x" 开头的十六进制的数字字符串.
您可以使用ptr(s)作为这个方法的简写.
isNull(): 返回一个布尔值以便让您方便的检测指针是否为NULL.add(rhs),sub(rhs),
and(rhs),or(rhs),
xor(rhs):
通过将当前NativePointer对象与另一个数字或NativePointer对象进行加, 减, 与, 或, 异或来创建一个新的NativePointer对象.shr(n),shl(n):
通过将当前对象向右或向左移n位来创建一个新的NativePointer对象.not(): 通过将当前对象进行位反转来创建一个新的NativePointer对象.equals(rhs): 通过比较当前对象与rhs是否拥有相同的指针来判断它们是否相同.compare(rhs):
类似于String#localeComare()一样返回一个数字类型的比较结果.toInt32(): 将当前对象转换成一个有符号的 32 位的整型数字.toString([radix = 16]):
将当前对象转换成数字字符串, 可指定进制, 默认十进制.toMatchPattern():
根据当前指针的原始数据返回一个Memory.scan()兼容的匹配模板(pattern)-
readPointer(): 从当前内存地址上读取一个NativePointer对象.如果当前地址不可读则抛出一个 JavaScript 异常.
-
writePointer(ptr): 在当前内存地址上写入一个ptr对象.如果当前地址不可写则抛出一个 JavaScript 异常.
-
readS8(),readU8(),
readS16(),readU16(),
readS32(),readU32(),
readShort(),readUShort(),
readInt(),readUInt(),
readFloat(),readDouble():
从当前内存地址上读取一个有符号或无符号的整型或浮点型数字.如果当前地址不可读则抛出一个 JavaScript 异常.
-
writeS8(value),writeU8(value),
writeS16(value),writeU16(value),
writeS32(value),writeU32(value),
writeShort(value),writeUShort(value),
writeInt(value),writeUInt(value),
writeFloat(value),writeDouble(value):
在当前内存地址上写入一个有符号或无符号的整型或浮点型数字.如果当前地址不可写则抛出一个 JavaScript 异常.
-
readS64(),readU64(),
readLong(),readULong():
从当前内存地址上读取一个有符号或无符号的 64 位或 128 位的值,
并返回相应的 Int64/UInt64 对象.如果当前地址不可读则抛出一个 JavaScript 异常.
-
writeS64(value),writeU64(value),
writeLong(value),writeULong(value):
在当前内存地址上写入一个有符号或无符号的 Int64/UInt64 对象.如果当前地址不可写则抛出一个 JavaScript 异常.
-
readByteArray(length):
从当前内存地址上读取length个字节, 并将其作为一个 ArrayBuffer 对象返回.
通过将这个对象传递到send()的第二个参数, 它可以有效的传输到您的 Frida 应用中.如果
length个字节中的任意一个不可读则抛出一个 JavaScript 异常. -
writeByteArray(bytes):
在当前内存地址上写入bytes,bytes可以是readByteArray()返回的 ArrayBuffer 对象, 也可以是由 0 ~ 255 构成的整型数组. 例如:[ 0x13, 0x37, 0x42 ].如果任意一个字节不可写入到指定的地址则抛出一个 JavaScript 异常.
-
readCString([size = -1]),
readUtf8String([size = -1]),
readUtf16String([length = -1]),
readAnsiString([size = -1]):
从当期内存地址上读取一个 ASCII, UTF-8, UTF-16, 或 ANSI 字符串.
如果您知道字符串的字节尺寸, 您可以提供可选的size参数.
如果这个字符串是以结束符结尾的, 您也可以省略size参数, 或者传入 -1.
同样的, 如果您知道字符串有多少个字符, 您也可以提供可选的length参数.如果
size或length个字节中的任意一个不可读则抛出一个 JavaScript 异常.注意,
readAnsiString()仅可用于 Windows. -
writeUtf8String(str),
writeUtf16String(str),
writeAnsiString(str):
将 JavaScript 字符串以结束符结尾进行编码并写入到当前内存地址.如果任意一个字节不可写入到指定的地址则抛出一个 JavaScript 异常.
注意,
writeAnsiString()仅可用于 Windows.
ArrayBuffer
-
wrap(address, size):
通过已有的内存区域创建一个ArrayBuffer对象,NativePointer类型的
address指定了区域的基础地址, 数字size则指定了尺寸.
不同于NativePointer的读写相关的 API, 访问时不会进行校验, 这意味着
坏的指针将会导致进程崩溃.
-
unwrap():
以NativePointer类型返回当前对象的基础地址. 在后备存储依然被使用的情况下,
调用者有责任使缓冲区保持活跃状态.