我正在将应用程序从x86移植到x64。我正在使用Visual Studio 2009;大多数代码是C ++,有些部分是纯C。朝x64编译时不支持__asm关键字,我们的应用程序包含内联汇编程序的一些部分。我没有编写此代码,所以我不确切知道应该做什么:
int CallStackSize() {
DWORD Frame;
PDWORD pFrame;
__asm
{
mov EAX, EBP
mov Frame, EAX
}
pFrame = (PDWORD)Frame;
/*... do stuff with pFrame here*/
}
EBP是指向当前函数堆栈的基本指针。有没有不用内联asm来获取堆栈指针的方法?我一直在研究Microsoft提供的内在函数来代替内联汇编,但是我找不到任何能给我带来帮助的东西。有任何想法吗?
安德烈亚斯(Andreas)问pFrame做些什么。这是完整的功能:
int CallStackSize(DWORD frameEBP = 0)
{
DWORD pc;
int tmpint = 0;
DWORD Frame;
PDWORD pFrame, pPrevFrame;
if(!frameEBP) // No frame supplied. Use current.
{
__asm
{
mov EAX, EBP
mov Frame, EAX
}