我正在尝试获取在另一个进程中加载的模块的名称GetModuleFileNameA
。
我已经使用 dbgHelp 加载了一个符号并获得了它的模块基地址,但是发生了 2 件奇怪的事情:
1. 有时GetModuleFileNameA
返回系统错误代码 5:访问被拒绝。
2.它返回错误的模块名称。对于我知道在模块 A 中的函数,我得到模块 B 的名称...:/
有人可以帮助我吗?
谢谢:)
我正在尝试获取在另一个进程中加载的模块的名称GetModuleFileNameA
。
我已经使用 dbgHelp 加载了一个符号并获得了它的模块基地址,但是发生了 2 件奇怪的事情:
1. 有时GetModuleFileNameA
返回系统错误代码 5:访问被拒绝。
2.它返回错误的模块名称。对于我知道在模块 A 中的函数,我得到模块 B 的名称...:/
有人可以帮助我吗?
谢谢:)
请阅读文档。就在GetModuleFileName的页面上,它说
要找到由另一个进程加载的模块的文件,请使用 GetModuleFileNameEx 函数。
GetModuleFileName 仅对进程中的模块有意义。即使两个进程都加载了模块,它也可能位于不同的基地址。您正在有效地喂食 GetModuleFileName 垃圾。重申一下,您需要使用GetModuleFileNameEx
如果您的进程想要访问另一个进程,则它需要具有这样做的权限。这意味着您的进程需要提升权限,或者它必须是其他进程的所有者。
如果你得到错误的名字,你可能使用了错误的句柄。这也可以解释为什么您有时会被拒绝访问。如果您将句柄传递给错误的模块,您可能无法访问它,即使您确实可以访问您想知道其名称的模块。