Supponiamo di voler prendere completamente in carico la chiamata di sistema open(), magari per avvolgere il syscall effettivo ed eseguire alcuni logging. One way to do this is to use LD_PRELOAD per caricare una libreria di oggetti condivisa (creata dall'utente) che riprende il punto di ingresso open().Come reimplementare (o avvolgere) una funzione di syscall su Linux?
La routine open() creata dall'utente ottiene quindi il puntatore alla funzione glibc open()
per dlsym()
e lo chiama.
La soluzione sopra proposta è tuttavia una soluzione dinamica. Supponiamo che io voglia collegare il mio wrapper open()
staticamente. Come lo farei? Immagino che il meccanismo sia lo stesso, ma suppongo anche che ci sarà uno scontro di simboli tra lo open()
definito dall'utente e la libc open()
.
Si prega di condividere altre tecniche per raggiungere lo stesso obiettivo.
Che ne dici di inserire semplicemente una funzione/macro wrapper nel codice? –
@Seamus: preferisco non utilizzare le macro. Non ho davvero un problema. Sto chiedendo solo di aumentare la conoscenza di SO e imparare qualche nuovo trucco. –