系统调用的说明以及调用方式

系统调用号存放在eax寄存器中, 参数一般不超过3个,分别储存在ebx、ecx、edx寄存器中。
返回值保存在eax中。

主要参考了Linux 5.10 syscalls,详细请参见:https://man7.org/linux/man-pages/man2/syscalls.2.html ;也可以在实验用的Ubuntu虚拟机中用man命令查看,如man getdents。

系统调用execve2

#define __NR_execve2 87
int execve2(const char *path, char * argv[], char * envp[]);

系统调用getdents

#define __NR_getdents 88
int getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count);
  struct linux_dirent {
    long           d_ino;
    off_t          d_off;
    unsigned short d_reclen;
    char           d_name[];
};
- count:dirp的大小。

系统调用pipe2

#define __NR_pipe2 89
int pipe2(int fd[2], int flags);

系统调用sleep

#define __NR_sleep 90
int sleep(unsigned int seconds);

系统调用getcwd

#define __NR_getcwd 91
long getcwd(char * buf, size_t size);

系统调用mmap

#define __NR_mmap 92
long mmap(void *start, size_t len, int prot, int flags, 
    int fd, off_t off);

系统调用munmap

#define __NR_munmap 93
int munmap(void * start, size_t len);

系统调用clone

#define __NR_clone 94
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);