Pregunta

¿Puede alguien decirme aquí si hay algo similar a LD_PRELOAD en versiones recientes de AIX? Más específicamente, necesito interceptar llamadas de mi binario a time (), devolviendo un tiempo constante, con fines de prueba.

¿Fue útil?

Solución

AIX 5.3 introdujo las variables LDR_PRELOAD (para programas de 32 bits) y LDR_PRELOAD64 (para programas de 64 bits). Son análogos a LD_PRELOAD en Linux. Ambas son listas de bibliotecas separadas por dos puntos, y los símbolos se cargarán de forma preventiva desde los objetos compartidos enumerados antes que nada.

Por ejemplo, si tiene un objeto compartido foo.so:

 LDR_PRELOAD=foo.so

Si usa archivos, use el estilo AIX para especificar el objeto dentro del archivo:

 LDR_PRELOAD="bar.a(shr.so)"

Y separe varias entradas con dos puntos:

 LDR_PRELOAD="foo.so:bar.a(shr.so)"

Otros consejos

AIX 5L utiliza la variable LDR_PRELOAD.

No que yo sepa. Lo más cercano que hemos hecho (con malloc / gratis para depurar) es

  • cree un nuevo archivo de biblioteca con solo las funciones deseadas (el mismo nombre que el original).
  • colóquelo en un directorio diferente al original.
  • haga una dependencia de nuestro archivo de biblioteca al original.
  • cambie LD_LIBRARY_PATH (o SHLIB_PATH?) para poner nuestra biblioteca primero en la cadena de búsqueda.

De esa forma, nuestras funciones fueron recogidas primero por el cargador, las que no suministramos fueron proporcionadas por el original.

Esto fue hace un tiempo. Se supone que AIX 5L se parece mucho más a Linux (de ahí la L), por lo que puede hacer exactamente lo que necesita.

Alternativamente, si tiene la fuente, mezcle las llamadas a time () con mytime () y proporcione su función. No está probando exactamente el mismo software, pero las diferencias para ese tipo de cambio mínimo no deberían importar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top