Skip to content

LucasEmanuell/so

Repository files navigation

Autores: Lucas Emanuel Rodrigues de Matos, Italo Viviano Félix Martins

Projeto desenvolvido como trabalho da disciplina Sistemas Operacionais, cujo objetivo é criar um logger de chamadas de sistema (syscalls) em ambiente Linux.


🎯 Objetivo

Implementar uma ferramenta capaz de:

  • Interceptar todas as syscalls realizadas por um processo em execução.
  • Registrar:
    • Nome da syscall
    • Argumentos (traduzidos, quando possível)
    • Valor de retorno
    • Timestamp
    • PID do processo
  • Exportar o log para análise posterior em um arquivo CSV.

📂 Estrutura do Projeto

O projeto está dividido em arquivos separados para organização e facilidade de manutenção:

syscall_logger.c

  • É o programa principal.
  • Faz:
    • Execução ou anexação ao processo alvo.
    • Configuração do ptrace.
    • Loop de captura das syscalls.
    • Impressão no terminal.
    • Escrita do log no arquivo CSV.
  • Chama a função translate_syscall() para traduzir syscalls conhecidas.

translations.h

  • Cabeçalho com definições comuns às traduções:
    • Estrutura syscall_info_t.
    • Prototipagem de funções de tradução.

translations.c

  • Contém funções específicas de tradução para syscalls conhecidas.
  • Traduz syscalls como:
    • execve
    • open
    • openat
    • read
    • write
    • e várias outras
  • Implementa funções auxiliares como:
    • read_string → lê strings na memória do processo.
    • read_string_array → lê arrays de strings (ex.: argv).

🛠️ Por que modularizamos?

Se colocássemos todas as traduções dentro de syscall_logger.c, o arquivo ficaria enorme e difícil de manter.

Separar em módulos permite:

  • Manter o código organizado e legível.
  • Adicionar novas syscalls traduzidas sem mexer no código principal.
  • Facilitar manutenção para futuras alterações ou melhorias.

🚀 Como Compilar

gcc -o syscall_logger syscall_logger.c translations.c -O2

▶️ Como Usar

Executar um programa novo:

./syscall_logger /bin/ls

Executar com argumentos:

./syscall_logger /bin/ls -l /etc

Anexar a um processo já existente:

sleep 60 &
sudo ./syscall_logger -p <pid_do_sleep>

📊 Saída

As syscalls capturadas ficam salvas em:

  • syscall_log.csv

Exemplo de linha no CSV:

timestamp,pid,syscall,args,retval
"2025-07-15 15:35:16.123456789",4567,openat,"AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY",0x3

✅ Funcionalidades implementadas

  • Captura de syscalls via ptrace.
  • Tradução de argumentos em syscalls mais comuns.
  • Exportação para arquivo CSV.
  • Suporte a processos filhos (fork, exec, clone).
  • Suporte a anexação a processos já rodando.

Projeto realizado para atender aos requisitos da disciplina Sistemas Operacionais.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages