Je vois beaucoup de gens référencer en ligne
arch/x86/entry/syscalls/syscall_64.tbl
pour la table syscall, cela fonctionne bien. Mais beaucoup d'autres font référence
/include/uapi/asm-generic/unistd.h
qui se trouve généralement dans le paquet d'en-têtes. Comment se fait-il que les syscall_64.tbl
spectacles,
0 common read sys_read
La bonne réponse, et unistd.h
montre,
#define __NR_io_setup 0
__SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup)
Et puis ça se voit __NR_read
comme
#define __NR_read 63
__SYSCALL(__NR_read, sys_read)
Pourquoi est-ce 63, et non 1? Comment puis-je comprendre le sens de /include/uapi/asm-generic/unistd.h
? Il /usr/include/asm/
y a toujours
/usr/include/asm/unistd_x32.h
#define __NR_read (__X32_SYSCALL_BIT + 0)
#define __NR_write (__X32_SYSCALL_BIT + 1)
#define __NR_open (__X32_SYSCALL_BIT + 2)
#define __NR_close (__X32_SYSCALL_BIT + 3)
#define __NR_stat (__X32_SYSCALL_BIT + 4)
/usr/include/asm/unistd_64.h
#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
/usr/include/asm/unistd_32.h
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
Quelqu'un pourrait-il me dire la différence entre ces unistd
fichiers. Expliquez comment ça unistd.h
marche? Et quelle est la meilleure méthode pour trouver la table syscall?