我正在将应用程序从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*/
}
Run Code Online (Sandbox Code Playgroud)
EBP是指向当前函数堆栈的基指针.有没有办法在不使用内联asm的情况下获取堆栈指针?我一直在关注微软提供的内在函数作为内联asm的替代品,但我找不到任何能给我带来帮助的东西.有任何想法吗?
安德烈亚斯询问用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
}
}
else Frame = frameEBP;
pFrame = (PDWORD)Frame;
do
{
pc = pFrame[1];
pPrevFrame …Run Code Online (Sandbox Code Playgroud) 我在Image.cpp中有一些代码:
Image::Image( int width, int height, int depth ) : m_sFileName(0)
{
...
}
and in Image.h:
class Image: public DrawAble, public RenderAble
{
...
private :
std::string *m_sFileName;
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:m_sFilename第一行发生了什么?我猜它被设置为NULL,但这样做的重点是什么.做同样的事情是这样的:
Image::Image( int width, int height, int depth )
{
m_sFileName(0);
...
}
Run Code Online (Sandbox Code Playgroud)