Quando provo ad usare LD_PRELOAD come seguendo,ERRORE: ld.so: oggetto 'getpid.so' dal LD_PRELOAD non può essere precaricato: ignorato
LD_PRELOAD=getpid.so ./testpid
ottengo il seguente errore ...
ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored.
compilo getpid.so utilizzando
gcc -Wall -fPIC -shared -o getpid.so getpid.c
e contiene il seguente codice ...
// getpid.c
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
pid_t getpid(void)
{
printf("Hello, world!\n");
return syscall(SYS_getpid);
}
tespid.c
codice constains che utilizza getpid come mostrato di seguito e che è compilato facendo
gcc testpid -o testpid.c
Quale può essere il problema? Perché LD_PRELOAD non funziona?
// testpid.c
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
printf("pid = %d!\n", getpid());
return 0;
}
Verissimo! Invece di LD_PRELOAD = getpid.so ./testpid, dovrebbe essere LD_PRELOAD =./Getpid.so ./testpid. Ora sta funzionando. – MetallicPriest
nel mio caso ho dovuto anche impostare 'LD_LIBRARY_PATH' e ottenere la versione a 64 bit della libreria. –