原文链接:
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, 访问时不会进行校验, 这意味着
坏的指针将会导致进程崩溃.