关于在C ++中插入汇编代码的问题

时间:2010-12-31 05:50:05

标签: c++ assembly

我正在研究VC ++编译器。我想完成以下

变量s.AddrFrame.Offset和s.AddrStack.Offset分别包含EBP和ESP的值。偏移量是64位无符号整数。我的机器是小端的。

typedef unsigned __int64 DWORD64; 

我想提取旧EBP的值和返回地址。假设地址EBP + 1包含旧的32位EBP值,EBP + 5表示返回地址,我写了以下代码:

unsigned int old_ebp = 0;
unsigned int ret_addr = 0;

__asm{

mov old_ebp, DWORD PTR [s.AddrFrame.Offset + 1] 
mov ret_addr, DWORD PTR [s.AddrStack.Offset + 5]

}

但这不是编译

xxxx.cpp(1130) : error C2415: improper operand type

请帮助

1 个答案:

答案 0 :(得分:2)

mov不能使用两个内存操作数;一个人必须是一个登记册。因此,在您的情况下,您需要有两个mov说明:

mov eax, [s.AddrFrame.Offset + 1]
mov old_ebp, eax

类似于ret_addr