Je *_*Rog 4 assembly gcc x86-64
.text
.globl _start
_start:
pushq %rbp
movq %rsp,%rbp
movq $2, %rax
leaveq
retq
Run Code Online (Sandbox Code Playgroud)
我正在编译-nostdlib:
[root@ test]# gcc -nostdlib -Wall minimal.S &&./a.out
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
顺便说一句,是否有可能使其他名称的入口点main和_start?
正如@jaquadro所提到的,您可以在命令行上指定链接器的入口点(或使用链接脚本): gcc -Wall -Wextra -nostdlib -Wl,-eMyEntry minimal.S && ./a.out
您的程序段错误的原因是,由于您没有使用标准库,因此无处可返回(retq).而是使用正确的系统调用调用exit(在这种情况下,它是60,放入rax,第一个(也是唯一的)参数放入rdi.
例:
.text
.globl MyEntry
MyEntry:
# Use Syscall 60 (exit) to exit with error code 42
movq $60, %rax
movq $42, %rdi
syscall
| 归档时间: |
|
| 查看次数: |
4460 次 |
| 最近记录: |