- LD_LIBRARY_PATH
- /etc/ld.so.cache
- /usr/lib
- /lib
Kirjastossa ei tarvitse muuta kuin määritellä funktio oikealla nimellä. Esimerkkikirjasto korvaa getpid-kutsun funktiolla, joka palauttaa aina 123.
#include <sys/types.h>Kirjaston voi kääntää komennolla
#include <unistd.h>
pid_t getpid(void)
{
return 123;
}
gcc -shared -Wl,-soname,getpid_replacement.so.1 -o getpid_replacement.so getpid_replacement.c -WallTestiohjelma, joka kutsuu getpidiä.
#include <sys/types.h>Nyt kun ohjelman ajaa se voi tulostaa "getpid() = 7570". Seuraavaksi pitää asettaa ympäristömuuttujat kuntoon ja ajaa ohjelma korvatulla getpidillä.
#include <unistd.h>
#include <stdio.h>
int main(void)
{
printf("getpid() = %d\n", getpid());
return 0;
}
- $ export LD_PRELOAD=getpid_replacement.so
- $ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
- $ ./a.out
- getpid() = 123
Tässä vielä versio, joka tulostaa prosessin oikean pidin ja palauttaa väärän.
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
inline int get_real_pid(void)
{
asm("mov $20, %%eax\n"
"int $0x80\n" : :);
}
pid_t getpid(void)
{
printf("Original pid:%d\n", get_real_pid());
return 123;
}
Ei kommentteja:
Lähetä kommentti