Listar as chamadas do sistema usadas em um aplicativo

0

Existe alguma maneira de obter uma lista de todas chamadas de sistema usadas em um aplicativo sem executar todos os possíveis cenários no aplicativo?

    
por UVV 29.09.2014 / 15:16

1 resposta

2

Em teoria, se a aplicação obedecer a certas restrições, sim. Em geral, não.

A maneira mais comum de invocar chamadas do sistema é através dos wrappers da biblioteca padrão para o mesmo. Portanto, por exemplo, read(fd,buf,BUFLEN) compila a montagem call read e, no código de objeto amd64, seria e8 00 00 00 00 (onde os zeros são cobertos por uma entrada da tabela de símbolos para read ). Construa uma tabela de todos os syscalls usados pela biblioteca padrão, leia o código do objeto procurando por chamadas para a biblioteca padrão, use isso para procurar os possíveis syscalls.

No entanto, um programa também pode usar syscall diretamente. O primeiro argumento é um número de syscall. Ele poderia ler esse número de um arquivo, um argumento de linha de comando, entrada padrão, um soquete de rede ou fazer algum cálculo demorado (tentar fatorar um número primo, procurar seqüencialmente por entrada que produz um determinado hash SHA2, executar um Turing universal máquina até que ela pare, etc.) para gerá-la.

Um programa também pode usar dlopen / dlsym para chamar uma função de biblioteca padrão, e pode obter o nome para chamar de um arquivo, um argumento de linha de comando, entrada padrão, um soquete de rede ou após algum cálculo demorado. Na verdade, a função de biblioteca padrão que pode procurar pode ser syscall .

Portanto, existem programas para os quais a resposta seria "pode chamar qualquer coisa".

    
por 29.09.2014 / 16:30