Ubuntu 16.04, intel core i5
我正在使用汇编语言进行预算并编写了以下简单程序:
section .text
global _start
_start:
mov eax, 0x04
mov ebx, 0x01
mov ecx, text
mov edx, 0x03
syscall
mov eax, 0x01
syscall
segment .data
text db 'The text'
当我按如下方式编译时:
nasm -f elf64 main.asm
ld -o bin main.o
然后运行我得Segmentation fault
。但是当我用syscall
替换int 0x80
并编译 64位 二进制文件时:
section .text
global _start
_start:
mov eax, 0x04
mov ebx, 0x01
mov ecx, text
mov edx, 0x03
int 0x80
mov eax, 0x01
int 0x80
segment .data
text db 'The text'
它工作正常并打印出我想要的内容。
如果我们只替换一个系统调用:
section .text
global _start
_start:
mov eax, 0x04
mov ebx, 0x01
mov ecx, text
mov edx, 0x03
syscall
mov eax, 0x01
int 0x80
segment .data
text db 'The text'
它不是Segfault,但它也不会打印任何内容。我做错了什么?为什么系统调用不像我期望的那样工作?