Eu encontrei dois métodos possíveis para enumerar o syscalls do Linux. Um envolve um bash one-liner , mas depende da distribuição da sua distribuição para todos as manpages relevantes. O outro, o strace , uma ferramenta que pode ser usada para descobrir e rastrear todo e qualquer tipo de syscalls possíveis.
strace
strace
pode ser encontrado em GitHub e GitLab . Eu não posso garantir o seu ambiente, e se você quiser verificar se há syscalls dentro de um contêiner, esta solução não seria a ideal, no entanto, funciona melhor do que o one-liner do bash, pois as páginas de manual podem não ser instaladas.
Filter by type of syscall:
strace -e trace=%desc Trace all file descriptor related system calls. %file Trace all system calls which take a file name as an argument. %fstat Trace fstat and fstatat syscall variants. %fstatfs Trace fstatfs, fstatfs64, fstatvfs, osf_fstatfs, and osf_fstatfs64 system calls. %ipc Trace all IPC related system calls. %lstat Trace lstat syscall variants. %memory Trace all memory mapping related system calls. %network Trace all the network related system calls. %process Trace all system calls which involve process management. %pure Trace syscalls that always succeed and have no arguments. %signal Trace all signal related system calls. %stat Trace stat syscall variants. %statfs Trace statfs, statfs64, statvfs, osf_statfs, and osf_statfs64 system calls. %%stat Trace syscalls used for requesting file status. %%statfs Trace syscalls related to file system statistics.
No entanto, se você tiver uma lista de syscalls específicas que deseja procurar, use o seguinte comando:
strace -e [syscall1],[syscall2],[syscall3],...,[syscalln]
Eu também estou incluindo este blog para mais informações na strace.
Bash one-liner
Eu estarei fazendo referência à página de manual syscalls, Link 1 Link 2 , bem como esta página da Web com conselhos sobre como completar a tarefa de enumerar todos os syscalls disponíveis para um determinado sistema Linux.
O indivíduo na página da Web sugere que você possa fazer referência a suas páginas de manual para obter uma lista completa de syscalls. Este exemplo dá saída em uma lista anotada.
ls /usr/share/man/man2 | sed -e s/.2.gz//g | xargs man -s 2 -k | sort | grep -v 'unimplemented system calls'
Conclusão
Mais uma vez, gostaria de observar que, se a sua distribuição não enviar todos os seus pacotes com todas as suas páginas de manual relevantes, então o one-liner bash ficaria aquém. Se a saída da lista anotada não for necessária e essa solução não couber na saída desejada, atualize sua postagem para definir melhor sua meta.
Também incluirei um link para uma ferramenta python usada para procurar por syscalls . Isso pode ser uma boa referência para comparar quais syscalls você descobre com o que está disponível.
Por favor, comente se você tiver dúvidas ou problemas com esta resposta. Eu sugiro que você leia cada link que eu forneci completamente antes de tentar os comandos. Eu aprecio o feedback para corrigir quaisquer equívocos e melhorar minhas postagens. Eu posso atualizar minha resposta conforme necessário.
Melhor da Sorte!