我正在研究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
请帮助
答案 0 :(得分:2)
mov
不能使用两个内存操作数;一个人必须是一个登记册。因此,在您的情况下,您需要有两个mov
说明:
mov eax, [s.AddrFrame.Offset + 1]
mov old_ebp, eax
类似于ret_addr
。