我在以下代码中遇到了分段错误。
.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
请指出我出错的地方。
答案 0 :(得分:1)
addl $8,%esp
从堆栈中删除了东西。它删除了在它上面推送的两个参数。该指令应在致电printf
之后,而不是之前。
可能还有其他错误;我没有彻底检查过。此外,您尚未在问题中指定您使用的工具或平台。不同的平台可能会为调用,中断和系统例程使用不同的接口。