#1221·mimalloc

在启动时发生崩溃,安全设备正在注入另一个 DLL

作者: gmnl创建于 2026年2月5日更新于 2026年9月14日

我遇到了一个问题,如果计算机上安装了第三方安全设备(由请求提供的快速通道管理员),则我们的 Windows 应用程序在启动时会崩溃。安全设备的 DLL ShellHelper64.dll 在加载 mimalloc.dll 之前在应用程序启动时被注入。看起来,这个 DLL 在堆管理器被重定向到 mimalloc 之前进行分配。在重定向后释放内存,则 mimalloc 会因访问违规而崩溃,因为它无法处理原始堆管理器的地址。我已经使用 minject.exe 检查了 mimalloc.dll 的正确位置:

minject --list MyApplication.exe
原始导入模块 (42):
0: mimalloc.dll
1: MyDll1.dll
2: MyDll2.dll
3: fmt.dll
4: opencv_core490.dll
5: opencv_imgcodecs490.dll
6: opencv_imgproc490.dll
...
加载顺序如下所示:
MyApplication.exe
ntdll.dll
kernel32.dll
KERNELBASE.dll
ShellHelper64.dll
rpcrt4.dll
shlwapi.dll
ucrtbase.dll
version.dll
msvcrt.dll
user32.dll
win32u.dll
gdi32.dll
gdi32full.dll
msvcp_win.dll
advapi32.dll
sechost.dll
shell32.dll
WinTypes.dll
combase.dll
ole32.dll
ws2_32.dll
fmt.dll
opencv_core490.dll
MyDlll1.dll
mimalloc.dll
<30 个其他 DLL>
mimalloc-redirect.dll
当我使用 `minject.exe` 修补应用程序时,`mimalloc_redirect.dll` 会在 `mimalloc.dll` 前添加,导入模块数量增加 1。加载顺序略有变化,但崩溃仍然存在。
是否有方法在整个程序中将堆管理器重定向,然后再注入其他外部 DLL?还有其他解决此问题的方法吗?
系统信息:
- MiMalloc 3.0.3
- VS2022 17.6.5
- Win11 25H2

内容来源: microsoft/mimalloc