聘我网

新概念招聘3.0

为何这里会段错误?

vote up0vote downstar
.text
    .globl _start
_start:
     pushq %rbp
     movq %rsp,%rbp
     movq $2, %rax
     leaveq
     retq


[root@ test]# gcc -nostdlib -Wall minimal.S &&./a.out 
Segmentation fault

另外,有办法让entrymain,_start以外的名字吗?

 

1 个答复

vote up0vote downcheck

出现段错误的原因是你这里没有用标准库(-nostdlib),从而程序没有地方可以返回(retq)

正确的做法是调用syscall退出。

.text
.globl MyEntry
MyEntry:
    # Use Syscall 60 (exit) to exit with error code 42
    movq $60, %rax
    movq $42, %rdi
    syscall

要改变entry的名字需要用-Wl,-eMyEntry告诉ld:

gcc -Wall -nostdlib -Wl,-eMyEntry minimal.S && ./a.out
链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.