2013-12-16 2 views
2

x86-64 모드 (인수 포함)에 대한 syscalls 목록을 찾았습니다 : http://filippo.io/linux-syscall-table/ 그러나이 syscalls에 대한 자세한 설명은 어디에서 확인할 수 있습니까? 플래그가 다른 경우에는, 0102o RW (생성)을 제외 '열기'콜을 사용할 수있다 예를 들어 후술x86-64 Linux NASM (YASM)에 대한 Syscalls 자세한 설명

: 읽기 전용, 쓰기 전용 등의 기준 자료

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

syscalls에 대한 문서는 맨 페이지의 섹션 2 및/또는 소스 코드의 주석에 있습니다. O_RDONLY, O_WRONLY, 또는 O_RDWR: 다음 액세스 모드 중 하나를 포함해야

#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); 

인수 플래그 :

남자 페이지로 시작합니다. 이 요청은 파일을 읽기 전용, 쓰기 전용 또는 읽기/쓰기로 각각 여는 것입니다.

또한 0 개 이상의 파일 생성 플래그와 파일 상태 플래그는 플래그에 bitwise-or 될 수 있습니다. 파일 생성 플래그 O_CREAT, O_EXCL, O_NOCTTYO_TRUNC 있습니다.

이들 값은 시스템 헤더 파일에서 쉽게 찾아 볼 수 있습니다.

+0

grep -i 0102 /usr/include/asm/unistd_64.h - 아무것도 없습니다. 복용 방법? – Alex0102o

+0

@ Alex0102o : 이해가 안됩니다. 이 파일은 syscall 항목 번호 목록입니다. * flags * 인수와 아무 관련이 없습니다. 플래그는'/ usr/include/bits/fcntl.h'에 있습니다. 여기서 0102는 분명히'O_RDWR | O_CREAT' (적어도 Fedora 17-64에서는). – wallyk

+0

wallyk, /usr/include/bits/fcntl.h에 있음 (Debian Lenny 64bit) 감사합니다! (미안, 내 나쁜 영어) 0102 나는 32 비트 흠집에서 가져 갔다. – Alex0102o

관련 문제