Является ли приложение статически связанным?
Вы можете переопределить некоторые символы, например, давайте переопределим socket
int socket(int domain, int type, int protocol)
{
write(1,"Error\n",6);
return -1;
}
Затем создайте общую библиотеку:
gcc -fPIC -shared test.c -o libtest.so
Запустим:
nc -l -p 6000
Ok
А теперь:
$ LD_PRELOAD=./libtest.so nc -l -p 6000
Error
Can't get socket
Что происходит, когда вы работаете с переменной LD_PRELOAD=./libtest.so
, она переопределяет символы, определенные в libtest.so, по сравнению с теми, которые определены в библиотеке.