You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GetModuleHandle返回空值及相关API使用问题求助

问题分析与解决办法

1. GetModuleHandle((LPCWSTR)"mono-2.0-bdwgc.dll")返回NULL的原因

GetModuleHandle仅在当前进程的地址空间内查找已加载模块,你要操作的是独立的目标游戏进程,模块是加载在目标进程而非当前进程中,所以直接调用这个函数必然返回NULL。该函数不支持跨进程获取模块句柄。

2. 模块句柄与baseModule相同是否正常

这种情况完全正常,常见于Unity的特殊打包场景:

  • 当游戏采用单文件打包(包括Mono或IL2CPP的单文件发布模式)时,mono-2.0-bdwgc.dll的代码会被合并到主程序模块(baseModule)中,不会以独立DLL的形式加载,因此两者的模块基地址(即你拿到的句柄)完全一致。

3. GetProcAddress返回NULL的解决办法

(1)核对导出函数名的准确性

部分Mono模块的导出函数可能带有名称修饰,或者你存在拼写错误。可以用dumpbin /exports <目标模块路径>命令,或PE Explorer、x64dbg等工具查看模块实际导出的函数名,确保传入GetProcAddress的字符串与实际导出名完全匹配。

(2)跨进程获取导出地址的正确姿势

你拿到的模块句柄是目标进程的内存基地址,当前进程无法直接用GetProcAddress(该函数依赖当前进程地址空间)。正确的两种思路:

  • 手动解析PE导出表:通过ReadProcessMemory读取目标进程中模块的PE头、导出表数据,自行计算目标函数的内存地址。
  • 远程注入代码:将你的逻辑代码注入到目标游戏进程中,在目标进程的上下文内调用GetModuleHandle和GetProcAddress,此时就能正常获取到函数地址。

(3)针对Unity单文件打包的特殊处理

如果是单文件打包的游戏,mono-2.0-bdwgc.dll的导出函数已合并到主模块,你需要直接在主程序模块的导出表中查找对应的Mono函数(比如mono_get_root_domain、mono_image_open_from_data等)。


内容的提问来源于stack exchange,提问作者Ahmed Jihad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:32:33