小编Jac*_*sen的帖子

如何获取基本堆栈指针的地址

我正在将应用程序从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)

c windows assembly stack pointers

16
推荐指数
2
解决办法
2万
查看次数

C++方法声明问题

我在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)

c++ methods syntax declaration

4
推荐指数
1
解决办法
3402
查看次数

标签 统计

assembly ×1

c ×1

c++ ×1

declaration ×1

methods ×1

pointers ×1

stack ×1

syntax ×1

windows ×1