指向c ++中内联__asm块的指针

时间:2011-04-05 13:17:47

标签: c++ visual-studio pointers inline-assembly

所以我一直在讨论VS2010中的__asm块,但是我找不到更好的方法来获得指向程序集块开头的指针。

我知道如何做到这一点的唯一方法是声明一个void函数。这样做的一个问题是void函数在我的程序集块之前和之后都有自己的程序集,我必须通过获取函数的实际地址并添加偏移量来补偿。

示例:

C ++

void myfunc(){
    __asm{
        nop
        nop
        nop
        ret
    }
}  

会导致装配类似于:

push ebp
mov ebp,esp
add esp,8
nop
nop
nop
retn
mov esp,ebp
pop ebp
retn
如果执行,

myfunc()很可能会出错。

1 个答案:

答案 0 :(得分:4)

你基本上想在你的函数上启用__declspec(naked),以避免编译器生成的序言和epilog。

另请参阅:http://msdn.microsoft.com/en-us/library/h5w10wxs(v=vs.80).aspx