windows - 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.`
我相信我应该::
以某种方式指定我想使用的可存储的类型,但找不到任何解释如何执行此操作的地方。
如果有人能告诉我如何做到这一点,那就太好了。
抱歉,如果这是一个愚蠢的问题,任何帮助将不胜感激。
解决方案
根据peekP Documentation的签名peekP
是
peekP :: Storable a => PHANDLE -> ForeignAddress -> IO a
所以它的返回类型是多态的。
如果编译器无法推断出使用的具体类型而不是类型变量a
,它将发出您看到的此类(或类似)错误消息。
正如您所建议的,您可以通过类型注释帮助编译器,例如
result <- ((peekP handle BASE_ADDRESS) :: IO Int32)
还有peekProcessMemory,我猜它的名字会更合适。
推荐阅读
- java - 如何使用 JSoup 从 HTML 元素中选择具有特定文本的元素
- typescript - 严格的打字稿,同时以方便的方式使用 sinon
- c# - 如何在 c# 代码中分配 DisplayMemberBinding 转换器
- python - Python正则表达式在两个字符串之间查找字符串
- python-3.x - 如何在 Python3 的此代码块中插入无限循环?
- python - 如何在 Texinput 字段中只接受两个数字?
- windows - 如何从 WSL (Ubuntu) 中启动 Windows 上本机安装的 Atom 或 VSCode?
- javascript - 使用 React 功能组件处理事件 - 接收未定义的错误
- json - 使用 Grails 视图漂亮地打印 JSON
- javascript - 这是多余的吗?