Closed tyrionchen closed 2 years ago
你好~
可以改成这样试试:
int unity_new_open(const char *path, int flags, mode_t modes) {
BYTEHOOK_STACK_SCOPE();
VERBOSE("unity_new_open() path=%s", path);
int result = BYTEHOOK_CALL_PREV(unity_new_open, path, flags, modes);
VERBOSE("unity_new_open() ret=%d", result);
return result;
}
可变参数分两种情况:
open
(具体可以看下 aosp 中 open
的实现)。这种情况可以按照最大的参数个数情况来定义 proxy 函数。snprintf
。这种情况一般都会有对应的 va_list
类型的函数,比如 vsnprintf
,因此可以在 proxy 函数中提取 va_list
然后调用 vsnprintf
。另外,PLT 方式 hook open一共需要 hook 三处:open
,__open_real
,__open_2
。供参考。
你好~
可以改成这样试试:
int unity_new_open(const char *path, int flags, mode_t modes) { BYTEHOOK_STACK_SCOPE(); VERBOSE("unity_new_open() path=%s", path); int result = BYTEHOOK_CALL_PREV(unity_new_open, path, flags, modes); VERBOSE("unity_new_open() ret=%d", result); return result; }
可变参数分两种情况:
- 可变部分的参数个数上限已知:比如
open
(具体可以看下 aosp 中open
的实现)。这种情况可以按照最大的参数个数情况来定义 proxy 函数。- 可变部分的参数个数上限未知:比如
snprintf
。这种情况一般都会有对应的va_list
类型的函数,比如vsnprintf
,因此可以在 proxy 函数中提取va_list
然后调用vsnprintf
。另外,PLT 方式 hook open一共需要 hook 三处:
open
,__open_real
,__open_2
。供参考。
感谢解答! 修改后确实就不崩了
bytehook Version
1.0.4
Android OS Version
13
Android ABIs
arm64-v8a
Device Manufacturers and Models
Google Pixel 5(Android 13)
Describe the Bug
问题描述:
你好! 我新建了一个空的Unity工程(版本: 2018.4.36f1),导出了Android工程,导出的工程中有三个so,我需要hook libunity.so的所有open函数从而修改文件路径。我发现在Google Pixel 5手机上,我hook以后会出现崩溃,如果我不hook就不会崩溃,其他手机(包括小米8、小米max2、HUAWEI nova7、HUAWEI Mate 10等)没有出现这个问题。
代码片段:
因为open函数有多个,我在代理函数中用可变参数来调用,不知道是否正确。
崩溃堆栈:
附件是详细的日志和我的工程,解压AndroidUnity2018EmptyFor50.zip导入Android studio可以复现问题。 crash.log
AndroidUnity2018EmptyFor50.zip