Perfare / Zygisk-Il2CppDumper

Using Zygisk to dump il2cpp data at runtime
MIT License
2.14k stars 5.27k forks source link

X86模拟器无法在内存获取arm_handle,把path改为指定加载路径才行 #137

Open liusj5257 opened 1 year ago

liusj5257 commented 1 year ago

dalao,X86模拟器不知道为什么path无法打开,我看log路径是存在的 2023-05-13 12:18:22.008 2086-2086 Perfare pid-2086 I path zygisk/armeabi-v7a.so 2023-05-13 12:18:22.008 2086-2086 Perfare pid-2086 I File permissions: 100644 2023-05-13 12:18:22.008 2086-2086 Perfare pid-2086 I Last access time: 1683951376 2023-05-13 12:18:22.008 2086-2086 Perfare pid-2086 I Length: 273292 2023-05-13 12:18:22.013 2086-2094 Perfare pid-2086 I hack thread: 2094 2023-05-13 12:18:22.013 2086-2094 Perfare pid-2086 I api level: 25 2023-05-13 12:18:27.016 2086-2094 Perfare com.bilibili.azurlane I nb 0xbee677e9 2023-05-13 12:18:27.016 2086-2094 Perfare com.bilibili.azurlane I NativeBridgeLoadLibrary 0xae9bac10 2023-05-13 12:18:27.016 2086-2094 Perfare com.bilibili.azurlane I NativeBridgeLoadLibraryExt 0x0 2023-05-13 12:18:27.016 2086-2094 Perfare com.bilibili.azurlane I NativeBridgeGetTrampoline 0xae9bad60 2023-05-13 12:18:27.017 2086-2094 Perfare com.bilibili.azurlane I JNI_GetCreatedJavaVMs 0xc29d6ca0 2023-05-13 12:18:27.018 2086-2094 Perfare com.bilibili.azurlane I arm path /proc/self/fd/160 2023-05-13 12:18:27.018 2086-2094 Perfare com.bilibili.azurlane I /proc/self/fd/160 exists 然后把path改为指定加载路径就能成功获取,不知道哪里出了问题 if (api_level >= 26) { arm_handle = callbacks->loadLibraryExt(path, RTLD_NOW, (void *) 3); } else { arm_handle = callbacks->loadLibrary("/data/local/tmp/abc.so", RTLD_NOW); LOGI("arm handle %p", arm_handle); }

Perfare commented 1 year ago

X86模拟器是什么东西?

另外我添加了abi版本的判断,现在会自动判断游戏安装的abi选择载入对应的arm so或者不载入直接在x86下运行

Perfare commented 1 year ago

晚上花了点时间把所有模拟器安卓版本和abi版本都测试了一下,基本所有安卓版本和abi版本都没有问题,只有 夜神安卓7运行armabi-v7a游戏的时候没法成功loadLibrary,根据你这个log来看也是相同的问题,基本可以认为是安卓7下abi为armabi-v7a时loadLibrary会失败。 这几天我有空的话看看有没有好点的办法解决,不过最后可能也不会考虑修它,因为现在基本都会使用性能更好的安卓9模拟器,而且甚至现在都已经有安卓11或者安卓12模拟器了

liusj5257 commented 1 year ago

感谢回复, 其实就是之前用64位模拟器,安装X64碧蓝,但X64碧蓝容易在弹幕多时卡住,就想直接用32位模拟器调用模块了,然后32位的模拟器都是安卓7以下,但安卓7的loadLibrary打不开内存中的path,我现在的方案是把so复制到local/tmp中,加载后删除so

Perfare commented 1 year ago

其实没必要再用32位模拟器了,我测试过夜神安卓9安装碧蓝默认是armabi-v7a,雷电9默认是x86,修改过后的代码这两个都能正常运行

liusj5257 commented 1 year ago

试了一下现在的代码,蓝叠的安卓9可以成功,但蓝叠安卓11不行 log: 05-24 18:47:41.384 4618 4631 I Perfare : hack thread: 4631
05-24 18:47:41.384 4618 4631 I Perfare : api level: 30
05-24 18:47:46.385 4618 4631 I Perfare : JNI_GetCreatedJavaVMs 0x0

Perfare commented 1 year ago

试了一下现在的代码,蓝叠的安卓9可以成功,但蓝叠安卓11不行 log: 05-24 18:47:41.384 4618 4631 I Perfare : hack thread: 4631 05-24 18:47:41.384 4618 4631 I Perfare : api level: 30 05-24 18:47:46.385 4618 4631 I Perfare : JNI_GetCreatedJavaVMs 0x0

收到,我这周有空修下,这个应该比较好修