【发布时间】:2014-01-20 10:59:34
【问题描述】:
我用汇编语言编写了一个简单的程序,试图在我的 64 位 Ubuntu 操作系统上运行它。但是,它因“Segmentation fault (core dumped) error”而失败。
这是我的代码:
.section .data
values :
.int 10, 15, 20, 25, 30 ,35, 40, 45, 50, 55, 60
output :
.asciz "The value is %d\n"
.section .text
.globl main
main :
nop
movl $0, %edi
loop :
movl values( , %edi, 4), %eax
pushq %rax
pushq $output
call printf
addl $8, %esp
inc %edi
cmpl $11, %edi
jne loop
movl $0, %ebx
movl $1, %eax
int $0x80
【问题讨论】:
-
我认为您的大部分
e__寄存器应该是r__。看起来这是作为 x86 程序集编写的,并且没有进行所有必要的更改就被强制移植到 x64。 -
我试过了,还是不行。
-
组装成64位?那么堆栈不是 DWORD 而是 QWORD 对齐的,所以你向 rsp 添加 8 是错误的,应该在你的 printf 调用之后向 rsp 添加 16
-
你是对的,这里有一个错误。谢谢。
标签: assembly