66.1 Linux

在Linux系统中,系统调用通常使用int 0x80中断进行调用。通过EAX寄存器传递调用号,再通过其它寄存器传递所需参数。

Listing 66.1: A simple example of the usage of two syscalls

  1. section .text
  2. global _start
  3. _start:
  4. mov edx,len ; buf len
  5. mov ecx,msg ; buf
  6. mov ebx,1 ; file descriptor. stdout is 1
  7. mov eax,4 ; syscall number. sys_write is 4
  8. int 0x80
  9. mov eax,1 ; syscall number. sys_exit is 4
  10. int 0x80
  11. section .data
  12. msg db 'Hello, world!',0xa
  13. len equ $ - msg

编译:

  1. nasm -f elf32 1.s
  2. ld 1.o

Linux所有的系统调用在这里可以查看:http://go.yurichev.com/17319

在Linux中可以使用strace(71章)对系统调用进行跟踪或者拦截。