2012-09-21 10 views
6

Quindi questo è lo scenario che sto guardando:collegamento a più librerie, una delle quali si avvolge una serie di chiamate di sistema

Ho 3 biblioteche - A, B e C.

  • La libreria A implementa la funzione foo() e la espone come un'API.
  • La funzione foo() chiama la chiamata POSIX write() per scrivere alcuni dati.
  • La libreria B scrive un wrapper per la chiamata glibc write() utilizzando l'opzione di collegamento del linker.
  • collegamenti libreria C sia per A e B.

Qualsiasi write() chiamata che la libreria C rende otterrà intercettato dal wrapper biblioteca B. Ma, la mia domanda è, se libreria C chiama foo(), sarà il write() call inside foo() viene intercettato da B?

+1

Prova a scrivere il codice e guarda cosa succede, questo è quello che vorrei fare. – fonZ

+0

La funzione glibc 'write' è un wrapper per la vera chiamata di sistema. –

+0

Grazie, @ JonathanCruz. Si trattava di librerie ipotetiche di cui stavo parlando, e il comportamento della libreria wrapper in uno scenario del genere sarebbe stato un fattore decisivo per vedere se dovevo andare a scriverlo. Tuttavia, ora sto lavorando a un caso di test più piccolo e ora. Ho solo pensato che il passaggio allo stackoverflow potrebbe dare una risposta più rapida :) – crazyg33k

risposta

2

Se A è collegato con -wrap=write, foo chiamerà il wrapper. Se non lo è, non lo farà.

Lo stesso vale per le chiamate allo write in C. Non c'è alcuna differenza tra A e C per quanto riguarda la chiamata write.

+0

Grazie, questo è esattamente quello che volevo sapere! – crazyg33k

Problemi correlati