为什么我在mov [edx],al?

时间:2014-11-29 09:28:18

标签: assembly x86 mov

我在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
    }
}

1 个答案:

答案 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;
}