|
|
反馈下
【SOMCP 缺陷反馈】so_open 打开大型 SO(20MB/数万符号)长时间卡住,后续工具全 SERVER_BUSY
现象:
- 打开约 21MB 的 arm64-v8a .so(4.5万+动态符号、6.9万+重定位),so_open 数分钟不返回;
- 或已返回 workspaceId,但后续所有重型工具持续 SERVER_BUSY,直到后台分析结束(真机数分钟,模拟器数十分钟);
- 真机/模拟器表现一致,仅时长不同;小 SO 无此问题。
根因(EngineRuntimeSources.kt open() L124-130):
so_open 打开时在重型闸门内同步调用 NativeEngine.functions() → Rizin rzFunctions 全量函数分析。该返回值仅用于 counts.analyzedFunctions 展示,却承担了最重的分析成本,导致打开卡死 + 闸门被占。
建议修复(改动最小):
1. so_open 打开时不触发 rzFunctions,analyzedFunctions 直接用 symbolFunctions.size(轻量 ELF 符号计数);函数级分析留给 analyze_functions 主动调用。
2. SettingsStore: requestTimeoutMs 默认 30000→120000+, maxConcurrentTools 默认 1→2。
3. 顺带: Storage.kt scanApk 缓存键用 size=0 + modified=currentTimeMillis 导致缓存永远 miss,每次扫描全量解压大 APK,建议传 walk 的真实 size/modified。
涉及文件: engine/EngineRuntimeSources.kt, core/SettingsStore.kt, engine/Storage.kt |
|