mov [eax],value - 总是核心转储

时间:2015-11-04 19:57:56

标签: assembly

我试图编辑char数组的第一个字母。
暂时不要介意 y 变量。

#include <stdio.h>

int main(void)
{
    char* s = "some_text";
    short int y;

    asm volatile
    (
        ".intel_syntax noprefix;"

        "mov eax, %1;"
        "mov byte ptr [eax], 'D';"

        ".att_syntax prefix;"
        : "=r" (y) // %0
        : "r" (s)  // %1
        : "eax"
    ); 

    printf("s = %s, y = %hd\n", s, y);

    return 0;
}

在linux下编译,使用以下命令:

gcc -o file file.c -m32

输出:

(core dumped)

可能出现什么问题?

1 个答案:

答案 0 :(得分:3)

写入字符串文字是C中未定义的行为。

要创建可写字符串,请使用数组将其存储在堆栈中:

char s[] = "some_text";