【问题标题】:Pointer to inline __asm block in c++指向 C++ 中的内联 __asm 块的指针
【发布时间】:2011-04-05 21:21:17
【问题描述】:

所以我一直在使用 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() 如果执行很可能会出错。

【问题讨论】:

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


    【解决方案1】:

    您基本上希望在您的函数上启用 __declspec(naked),以避免编译器生成的序言和结语。

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

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多