Sim, existe. O mecanismo geral para esse tipo de coisa (sobrescrevendo uma função padrão) é chamado de LD_PRELOAD. A idéia geral é bastante simples, ao carregar bibliotecas na memória para um programa, qualquer que seja o primeiro a definir um dado nome de símbolo define o que esse símbolo faz. Assim, LD_PRELOAD permite que você diga ao vinculador dinâmico para carregar bibliotecas específicas antes de todas as outras (incluindo libc), o que significa que elas podem substituir funções específicas de bibliotecas que seriam carregadas posteriormente.
Exemplos de projetos amplamente utilizados que fazem uso de LD_PRELOAD incluem:
- jemalloc Pode ser pré-carregado para permitir que você use o alocador de memória jemalloc com programas que não o usam explicitamente.
- datefudge Permite que você falsifique a data e a hora do sistema.
-
libeatmydata Substitui
sync()
e chamadas relacionadas para não fazer nada, melhorando o desempenho de alguns aplicativos ao custo da segurança de dados. - dante Inclui um comando que usa LD_PRELOAD para ativar o uso do protocolo SOCKS para aplicativos que não suportam nativamente isso.
Há também uma biblioteca que faz exatamente o que você está perguntando chamado libtrash
. A página oficial da web pode ser encontrada aqui . Eu não tenho certeza se isso funciona ou não, como eu nunca usei isso sozinho, mas houve um recente lançamento de uma nova versão, então parece que o autor ainda está mantendo pelo menos.