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.
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.