我在Visual Studio中编写此代码,但我不知道为什么它会在mov [edx]上获得访问冲突。谁能帮我解释一下呢?
int main()
{
char z[10] = "banana";
_asm
{
lea ecx, z;
mov edx, [ecx];
inc edx;
mov [ecx], edx;
dec edx;
mov al, 31;
mov [edx], al;
mov eax, 31;
and eax, 0FFh
}
}
答案 0 :(得分:0)
EDX
保留z
的前4个字节(mov edx, [ecx]
)不 z
的地址。如果你"演员" EDX
到一个方括号的地址,你指向任何地方,但肯定不会纠正内存。我无法显示正常工作的代码,因为我不知道你想做什么。
看your last post我想你想做这样的事情:
#include <stdio.h>
__declspec (naked) char khanh_asm (char a, char** b)
{
_asm
{
mov ecx, [esp+8]
mov edx, [ecx]
inc edx
mov [ecx], edx
dec edx
mov al, [esp+4]
mov [edx], al
mov eax, [esp+4]
and eax, 0FFh
retn
}
}
int main( void )
{
char b[] = "banana";
char* P = b;
printf("%s \n", b);
khanh_asm ( '1', &P);
printf("%s \n", b);
khanh_asm ( '2', &P);
printf("%s \n", b);
return 0;
}