Haskell,读取另一个进程的内存

时间:2019-11-28 11:57:30

标签: windows haskell winapi memory

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

我正在像这样处理: 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.`

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

如果有人可以告诉我该怎么做,那就太好了。

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

1 个答案:

答案 0 :(得分:1)

根据peekP Documentation@Component({ selector: 'my-slider', templateUrl: './my-slider.html' }) export class MySlider extends ControlWrapper { public options: Options = { animate: false, step: 1 }; @Input() public set min(v: number) { this.options = { ...this.options, floor: v }; } @Input() public set max(v: number) { this.options = { ...this.options, ceil: v }; } constructor( @Optional() @Self() public ngControl: NgControl, private changeDetector: ChangeDetectorRef ) { super(); this.ngControl.valueAccessor = this; } public onChange() { this.changeDetector.detectChanges(); } } 的签名是

peekP

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

如果编译器无法推断出所使用的具体类型,而是类型变量peekP :: Storable a => PHANDLE -> ForeignAddress -> IO a ,则会发出您看到的此类(或类似的)错误消息。

如您所建议,您可以帮助编译器以及类型注释,例如

a

还有一个peekProcessMemory,我猜它的名字应该更合适。