Domanda

Qualcuno qui può dirmi se c'è qualcosa di simile a LD_PRELOAD nelle ultime versioni di AIX? Più specificamente, devo intercettare le chiamate dal mio binario a time (), restituendo un tempo costante, a scopo di test.

È stato utile?

Soluzione

AIX 5.3 ha introdotto le variabili LDR_PRELOAD (per programmi a 32 bit) e LDR_PRELOAD64 (per programmi a 64 bit). Sono analoghi a LD_PRELOAD su Linux. Entrambi sono elenchi di librerie separati da due punti e i simboli verranno caricati preventivamente dagli oggetti condivisi elencati prima di ogni altra cosa.

Ad esempio, se si dispone di un oggetto condiviso foo.so:

 LDR_PRELOAD=foo.so

Se usi gli archivi, usa lo stile AIX per specificare l'oggetto all'interno dell'archivio:

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

E separa più voci con due punti:

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

Altri suggerimenti

AIX 5L utilizza la variabile LDR_PRELOAD.

Non di cui sono a conoscenza. La cosa più vicina che abbiamo fatto (con malloc / free per il debug) è

  • crea un nuovo file di libreria con solo le funzioni desiderate (stesso nome dell'originale).
  • posizionalo in una directory diversa dall'originale.
  • crea una dipendenza dal nostro file di libreria all'originale.
  • modifica LD_LIBRARY_PATH (o SHLIB_PATH?) per mettere la nostra libreria al primo posto nella catena di ricerca.

In questo modo, le nostre funzioni sono state rilevate per prime dal caricatore, qualsiasi cosa non fornita è stata fornita dall'originale.

Questo è stato un po 'di tempo fa. AIX 5L dovrebbe essere molto più simile a Linux (da qui la L), quindi potrebbe essere in grado di fare esattamente ciò di cui hai bisogno.

In alternativa, se hai la fonte, munge le chiamate a time () con mytime () e fornisci la tua funzione. Non stai testando esattamente lo stesso software, ma le differenze per quel tipo di cambiamento minimo non dovrebbero importare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top