-
我想hook libart.so的ThreadSuspendByPeerWarning函数,但看Android 14源码上,这个函数的声明,第一个参数是引用ScopedObjectAccess&,但这个类型在NDK里也访问不到,代理函数该怎么写呢
|
Beta Was this translation helpful? Give feedback.
Answered by
caikelun
May 15, 2024
Replies: 1 comment 1 reply
-
C++引用的调用约定是通过指针传递的,所以可以定义为 |
Beta Was this translation helpful? Give feedback.
1 reply
Answer selected by
flx413
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
C++引用的调用约定是通过指针传递的,所以可以定义为
void *soa
。如果你在 proxy 函数中需要访问 soa 的数据成员,可以自己定一个 ScopedObjectAccess 结构体,参数顺序和类型需要和设备上系统库中的一样,也可以通过地址偏移直接访问,如果要做到不同安卓版本的兼容性,还需要针对不同安卓版本定义不同的 ScopedObjectAccess 结构体(或不同的地址偏移)。调试的方法:可以用 objdump / ida 对比看下 ThreadSuspendByPeerWarning 原函数和你的 proxy 函数分别编译后的汇编代码在处理入参时的区别。