2

我正在尝试获取在另一个进程中加载​​的模块的名称GetModuleFileNameA
我已经使用 dbgHelp 加载了一个符号并获得了它的模块基地址,但是发生了 2 件奇怪的事情:
1. 有时GetModuleFileNameA返回系统错误代码 5:访问被拒绝。
2.它返回错误的模块名称。对于我知道在模块 A 中的函数,我得到模块 B 的名称...:/

有人可以帮助我吗?
谢谢:)

4

2 回答 2

3

请阅读文档。就在GetModuleFileName的页面上,它说

要找到由另一个进程加载的模块的文件,请使用 GetModuleFileNameEx 函数。

GetModuleFileName 仅对进程中的模块有意义。即使两个进程都加载了模块,它也可能位于不同的基地址。您正在有效地喂食 GetModuleFileName 垃圾。重申一下,您需要使用GetModuleFileNameEx

于 2011-04-16T08:17:06.993 回答
0

如果您的进程想要访问另一个进程,则它需要具有这样做的权限。这意味着您的进程需要提升权限,或者它必须是其他进程的所有者。

如果你得到错误的名字,你可能使用了错误的句柄。这也可以解释为什么您有时会被拒绝访问。如果您将句柄传递给错误的模块,您可能无法访问它,即使您确实可以访问您想知道其名称的模块。

于 2011-04-16T07:03:37.930 回答