汇编代码中的Segfault

时间:2013-08-21 14:05:44

标签: assembly inline-assembly

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

.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

请指出我出错的地方。

1 个答案:

答案 0 :(得分:1)

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

可能还有其他错误;我没有彻底检查过。此外,您尚未在问题中指定您使用的工具或平台。不同的平台可能会为调用,中断和系统例程使用不同的接口。