Syscalls for x86-64 Linux NASM(YASM)详细说明

时间:2013-12-16 20:03:43

标签: linux x86-64 nasm system-calls

我找到了x86-64模式的syscalls列表(带参数): http://filippo.io/linux-syscall-table/ 但是我在哪里可以得到这个系统调用的详细描述?

例如下面,除了0102o(rw,create)之外,哪些标志可以用于'open'syscall,在其他情况下: 只读,只写等。

SECTION .data
    message: db 'Hello, world!',0x0a    
    length:    equ    $-message        
    fname    db "result"
    fd       dq 0

SECTION .text
global _start   
_start:
        mov rax, 2            ; 'open' syscall
        mov rdi, fname        ; file name
        mov rsi, 0102o        ; read and write mode, create if not
        mov rdx, 0666o        ; permissions set
        syscall

        mov [fd], rax

        mov    rax, 1          ; 'write' syscall
        mov    rdi, [fd]       ; file descriptor
        mov    rsi, message    ; message address
        mov    rdx, length     ; message string length
        syscall

        mov rax, 3             ; 'close' syscall
        mov rdi, [fd]          ; file descriptor  
        syscall 

        mov    rax, 60        
        mov    rdi, 0        
        syscall

基于来源(可能) https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/open.c 如何理解它,可以使用哪个(所有开放列表)标志?

1 个答案:

答案 0 :(得分:2)

系统调用的文档位于手册页的第2部分和/或源代码的注释中。

手册页以:

开头
   #include <sys/types.h>
   #include <sys/stat.h>
   #include <fcntl.h>

   int open(const char *pathname, int flags);
   int open(const char *pathname, int flags, mode_t mode);
  

参数 flags 必须包含以下访问模式之一: O_RDONLY O_WRONLY O_RDWR 。这些请求分别以只读,只写或读/写方式打开文件。

     

此外,在标志中可以按位或按钮设置零个或多个文件创建标志和文件状态标志。文件创建标志为 O_CREAT O_EXCL O_NOCTTY O_TRUNC

可以在系统头文件中轻松查找这些值。