你好我有关于lea指令和数组的问题,这很好用:
char *msg = new char[6];
msg = "hello";
_asm{
push 10h
push 0
mov eax, [msg]
push eax
push 0
call MessageBox
}
}
但为什么我在这里遇到“操作数大小冲突”错误?
char msg2[] = "hey2";
_asm{
push 10h
push 0
mov eax, [msg2]
push eax
push 0
call MessageBox
}
为什么它再次与lea一起工作?
char msg2[] = "hey2";
_asm{
push 10h
push 0
lea eax, [msg2] // <-
push eax
push 0
call MessageBox
}
答案 0 :(得分:1)
在这里,您尝试取消引用指向大小为char的指针,但是您尝试从中加载一个int。
mov eax, [msg2]
不确定这是否是正确的语法,但您可以使用
mov eax, offset msg3
这里,要加载地址,或使用lea
指令。
在C中,这类似于:
char msg2[10];
char *p = &msg2[0];
int x = *p;
该指令不取消引用指针,它只取得它的地址,它也可以用某些运算符计算地址。
lea eax, [msg2] // <-
是等效的:
char msg2[10];
char *p = &msg2[0];