首页 > 解决方案 > Haskell,读取另一个进程的内存

问题描述

我正在尝试读取另一个进程的基地址的值并将其输出。

我得到这样的句柄: handle <- openProcess 0x0010 False PID

然后尝试像这样读取基地址result <- peekP handle BASE_ADDRESS

然而,这显然是错误的,因为它不知道它应该读取什么类型,所以我得到:

Ambiguous type variable `a0' arising from a use of `peekP' prevents the constraint `(Storable a0)' from being solved.`

我相信我应该::以某种方式指定我想使用的可存储的类型,但找不到任何解释如何执行此操作的地方。

如果有人能告诉我如何做到这一点,那就太好了。

抱歉,如果这是一个愚蠢的问题,任何帮助将不胜感激。

标签: windowshaskellwinapimemory

解决方案


根据peekP Documentation的签名peekP

peekP :: Storable a => PHANDLE -> ForeignAddress -> IO a

所以它的返回类型是多态的。

如果编译器无法推断出使用的具体类型而不是类型变量a,它将发出您看到的此类(或类似)错误消息。

正如您所建议的,您可以通过类型注释帮助编译器,例如

result <- ((peekP handle BASE_ADDRESS) :: IO Int32)

还有peekProcessMemory,我猜它的名字会更合适。


推荐阅读