Windows 7 x64调用约定和单个参数传递

时间:2014-01-14 16:59:33

标签: c++ windows 64-bit driver calling-convention

我目前正在尝试追踪驱动程序中的一个错误,该驱动程序似乎在调用内核函数IoFreeIrp以将IRP内存释放回非分页池时遇到问题。

我在IoFreeIrp函数中设置了一个断点,当它被命中时,我可以看到寄存器中包含的值,但是我不确定哪个寄存器实际上包含需要释放的IRP。

根据我对x64 Windows 7的了解,它使用x64调用约定,这意味着前四个参数通过寄存器传递,Microsoft声明:

  

参数在寄存器RCX,RDX,R8和R9中传递。

所以,也许我在这里有点天真,但我认为需要释放的IRP总是在RCX寄存器中指定,但我猜我错了。当断点被击中时,RCX寄存器有时包含似乎是IRP的内容,有时则不是这样。

Microsoft声明IoFreeIrp函数采用一个参数:

The IoFreeIrp routine releases a caller-allocated IRP from the caller's IoCompletion routine.
Syntax

C++

VOID IoFreeIrp(
_In_  PIRP Irp
);

Parameters

Irp [in]
Pointer to the IRP that is to be released.

Microsoft文档还声明整数值在这些寄存器中传递,所以我不确定指针是否符合整数值,我认为确实如此,对吧?

如果有人可以在点击断点时提​​供一些关于读取寄存器值的建议,我会很感激。

感谢。

0 个答案:

没有答案