在哪里可以获得Linux中x86 Assembly的系统调用函数列表



我目前正在尝试学习使用ArchLinux的x86体系结构进行汇编编程。我刚刚开始这段旅程,并了解以下打印Hello World程序的内部工作原理。

; Jon Webb
; December 31, 2021
; ==============================================================================
; ==============================================================================
; Data Section
section .data
; Message to be printed
msg: db "Hello World", 10
; Length of message
len: equ $ - msg
; ==============================================================================
; Code section
section .text
; Define entry point
global _start
_start:
        ; 4 is equivalent to sys_write(std_output, msg, len)
        mov eax, 4   ; Calls sys_write function from syscall
        mov ebx, 1   ; File descriptor (1 standard output)
        mov ecx, msg ; Message to be printed
        mov edx, len ; Length of message to be printed
        int 0x80     ; Make syscall
        ; 1 is equivalent to sys_exit(status)
        mov eax, 1   ; Specify exit syscall
        mov eab, 0   ; Pass a status code of zero which indicates successful conclusion
        int 0x80     ; Make syscall
; ==============================================================================
; ==============================================================================
; end of file

我理解这个代码是如何工作的。该代码调用两个Linux系统调用函数sys_write()sys_exit(),这两个函数分别由整数4和1定义。在每个函数中,我通过将其定义整数传递给eax来调用该函数,然后将连续的变量传递给ebx、ecx、edx等等。在这种情况下,我知道这两个函数,因为我正在读的书告诉我,4表示sys_write,1表示sys_exit;然而,我怀疑它们还有其他类似的功能。在哪里可以获得所有Linux系统调用函数的列表。我原以为这会是一个简单的答案,通过简单的谷歌搜索,但到目前为止,我几乎没有得到什么。这是x86汇编编程的一个基本方面,尽管这些函数会在教程中列出,但到目前为止,我还没有发现这是真的。

strace有列出这些表的表。您可以在此处找到x86_64调用。

最新更新