2012-09-21 20 views
6

Así que este es el escenario que estoy mirando:ligarse a varias bibliotecas, una de las cuales envuelve un conjunto de llamadas al sistema

tengo 3 - bibliotecas A, B y C.

  • La biblioteca A implementa la función foo() y la expone como una API.
  • La función foo() llama a la llamada POSIX write() para escribir algunos datos.
  • La biblioteca B escribe un derivador en la llamada glibc write() utilizando la opción del enlazador-envoltura.
  • Biblioteca C enlaces a ambos A y B.

Cualquier write() llamada que la biblioteca C hace que conseguirá interceptado por la envoltura biblioteca B. Sin embargo, mi pregunta es, si la biblioteca C llama foo(), será el write() llamada dentro de foo() ser interceptado por B?

+1

Intenta escribir el código y mira lo que sucede, eso es lo que haría. – fonZ

+0

La función glibc 'write' es un contenedor de la llamada al sistema real. –

+0

Gracias, @JonathanCruz. Estas eran bibliotecas hipotéticas de las que hablaba, y el comportamiento de la biblioteca contenedora en tal escenario habría sido un factor decisivo para ver si debía escribirlo. Sin embargo, ahora estoy trabajando en un caso de prueba más pequeño y ahora. Solo pensé que pasar a stackoverflow podría dar una respuesta más rápida :) – crazyg33k

Respuesta

2

Si A está vinculado con -wrap=write, foo llamará a la envoltura. Si no es así, no lo hará.

Lo mismo se aplica a las llamadas al write en C. No hay diferencia alguna entre A y C en lo que respecta a llamar al write.

+0

¡Gracias, esto es exactamente lo que quería saber! – crazyg33k

Cuestiones relacionadas