-
我想hook libart.so的ThreadSuspendByPeerWarning函数,但看Android 14源码上,这个函数的声明,第一个参数是引用ScopedObjectAccess&,但这个类型在NDK里也访问不到,代理函数该怎么写呢
|
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
C++引用的调用约定是通过指针传递的,所以可以定义为 |
Beta Was this translation helpful? Give feedback.
-
https://juejin.cn/post/7364409181053206554 但是我正在处理 Android 15 的线程挂起超时问题,也遇到了一个难点。 |
Beta Was this translation helpful? Give feedback.
C++引用的调用约定是通过指针传递的,所以可以定义为
void *soa
。如果你在 proxy 函数中需要访问 soa 的数据成员,可以自己定一个 ScopedObjectAccess 结构体,参数顺序和类型需要和设备上系统库中的一样,也可以通过地址偏移直接访问,如果要做到不同安卓版本的兼容性,还需要针对不同安卓版本定义不同的 ScopedObjectAccess 结构体(或不同的地址偏移)。调试的方法:可以用 objdump / ida 对比看下 ThreadSuspendByPeerWarning 原函数和你的 proxy 函数分别编译后的汇编代码在处理入参时的区别。