因此,我一直在 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() 很可能会出错。
最佳答案
您基本上希望在您的函数上启用 __declspec(naked),以避免编译器生成的序言和结语。
另见:http://msdn.microsoft.com/en-us/library/h5w10wxs(v=vs.80).aspx
关于c++ - 指向 C++ 中内联 __asm 块的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5552473/