原文链接: 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
类型返回当前对象的基础地址. 在后备存储依然被使用的情况下,
调用者有责任使缓冲区保持活跃状态.
网友评论