系统调用号存放在eax寄存器中, 参数一般不超过3个,分别储存在ebx、ecx、edx寄存器中。
返回值保存在eax中。
主要参考了Linux 5.10 syscalls,详细请参见:https://man7.org/linux/man-pages/man2/syscalls.2.html ;也可以在实验用的Ubuntu虚拟机中用man命令查看,如man getdents。
#define __NR_execve2 87
int execve2(const char *path, char * argv[], char * envp[]);
#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的大小。
#define __NR_pipe2 89
int pipe2(int fd[2], int flags);
#define __NR_sleep 90
int sleep(unsigned int seconds);
#define __NR_getcwd 91
long getcwd(char * buf, size_t size);
#define __NR_mmap 92
long mmap(void *start, size_t len, int prot, int flags,
int fd, off_t off);
#define __NR_munmap 93
int munmap(void * start, size_t len);
#define __NR_clone 94
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);