我用匯編語言編寫了一個簡單的程序,試圖在我的64位Ubuntu操作系統上運行它。但是,「分段錯誤(核心轉儲錯誤)」失敗。AT&T彙編代碼中的分段錯誤(核心轉儲)錯誤
這裏是我的代碼:
.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
我認爲你的'''''寄存器的大部分應該是'r__'。它看起來像是寫成x86程序集,並強制移植到x64而沒有進行所有必要的更改。 – Mysticial 2012-07-14 03:33:00
我試過了,但它也無法工作。 – Nmzzz 2012-07-14 03:34:33
組裝爲64bit?然後堆棧不是DWORD但QWORD對齊,所以你添加8到rsp是錯誤的,應該在printf調用之後將16添加到rsp – Gunner 2012-07-14 04:44:21