0

我在以下代码中遇到分段错误。

.section .data

myarray:
        .int 10,20,30,40,50,60

format:
        .ascii "%d\n"

.section .text

.globl _start
_start:

movl $2, %ebx
movl myarray(,%ebx,4) , %ecx

pushl %ecx
pushl $format
addl $8,%esp
call printf

movl $1,%eax
movl $0,%ebx
int $0x80

在 gdb 中运行时,我得到

Program received signal SIGSEGV, Segmentation fault.
strchrnul () at ../sysdeps/i386/strchrnul.S:68
68  ../sysdeps/i386/strchrnul.S: No such file or directory.
    in ../sysdeps/i386/strchrnul.S

请指出我哪里出错了。

4

1 回答 1

1

addl $8,%esp从堆栈中删除东西。它删除了推到它上面的两个参数。该指令应该在调用之后printf,而不是之前。

可能还有其他错误;我没有仔细检查。此外,您没有在问题中指定您正在使用哪个工具或平台。不同的平台可能对调用、中断和系统例程使用不同的接口。

于 2013-08-21T14:10:24.597 回答