由于在针对 x64 架构进行编译时 Microsoft C++ 中不提供内联汇编器,因此我无法弄清楚如何访问 RSP 寄存器(堆栈指针)。我知道我可以使用 RtlCaptureContext 读取它,但这也会执行很多不需要的操作。它也会慢几千倍(就我而言,这是 Not Acceptable )。如果我编写一个单独的 ASM 函数,RSP 显然会改变,所以这也不是替代方案。
那么如何使用 Microsoft C++ 读取 x64 RSP 寄存器的内容呢?
最佳答案
您可以使用 _AddressOfReturnAddress()
(请参阅 MSDN reference )内在函数间接获得它。
显然,您无法确定当前堆栈帧的停止位置,但是您可以使用您拥有的任何堆栈变量并通过查看生成的程序集来猜测它。
结合 Olipro 的建议:在独立函数中使用 _AddressOfReturnAddress()
,获取堆栈地址变得非常容易。更不用说用 C 编写的函数很可能只包含对 this 内部函数的调用被内联。
关于c++ - 从 Microsoft C++ 读取 RSP 寄存器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6733821/