Strace mostra chamadas de sistema , que no GNU / Linux são funções C. Estes são emitidos pela biblioteca C nativa da qual todo processo executável precisa fazer uso de alguma forma. O código C real pode chamá-los diretamente ou usar uma função de wrapper da API, que geralmente corresponde diretamente à própria chamada do sistema.
Isso significa que você pode decifrar a maioria das chamadas sys observando a documentação da função da API correspondente, já que as assinaturas são geralmente idênticas. Por exemplo:
open("datalog.txt", O_RDONLY)
Abaixo está a assinatura para o GNU C open()
, de man 2 open
. A seção 2 do manual é todas as chamadas do sistema 1 :
int open(const char *pathname, int flags);
Caso você não fale C, isso leva um caminho de string, um sinalizador inteiro (neste caso O_RDONLY
que significa, somente leitura) e retorna um inteiro.
Esse inteiro é um descritor de arquivo e é usado com outras funções de entrada / saída C de baixo nível, como% código%. Strace mostra o valor após o read()
para o =
, neste caso, 3 . Aqui está a assinatura para POSIX / GNU C open()
:
ssize_t read(int fd, void *buf, size_t count);
O primeiro argumento é um descritor de arquivo inteiro.
1. Observe que o termo "chamada do sistema" refere-se ambiguamente às chamadas reais do sistema da biblioteca ou às funções do wrapper da API, já que, novamente, elas são geralmente idênticas. A seção 2 é realmente a última documentação. Tecnicamente, é a API do GNU, mas está em conformidade com POSIX , que também tem documentos oficiais - por exemplo, aqui read()
. Nem todos os sistemas * nix usam a biblioteca GNU C, mas todos eles têm algum equivalente e a lógica acima ainda se aplica.