将数组的值赋给eax时的分段错误(AT& T语法)

时间:2015-12-18 07:37:32

标签: arrays assembly gas att

我只想尝试将myarray[0]的值加载到eax

        .text
        .data

        # define an array of 3 words
array_words:     .word 1, 2, 3

        .globl main

main:
        # assign array_words[0] to eax
        mov $0, %edi
        lea array_words(,%edi,4), %eax

但是当我运行这个时,我不断遇到段故障。 有人可以指出我在这里做错了吗?

2 个答案:

答案 0 :(得分:3)

标签main似乎位于.data部分。

如果系统不允许在.data部分执行代码,则应导致分段错误。

程序代码应位于.text部分。

答案 1 :(得分:2)

您需要正确终止您的计划,例如在Linux x86_64上调用sys_exit系统调用:

...
main:
     # assign array_words[0] to eax
     mov $0, %edi
     lea array_words(,%edi,4), %eax

     mov $60, %rax       # System-call "sys_exit"
     mov $0, %rdi        # exit code 0
     syscall

否则程序继续执行上一条指令后的存储器内容,这很可能在所有情况下都是无效指令(甚至是无效的存储单元)。