Возникла проблема: в целях отладки мне нужно подменить некоторые
символы в Libc таким образом, чтобы вместо оригинальной функции
вызвалась моя, что-то напечатала, а затем вызывала "настоящую"
функцию. Я делаю это посредством LD_PRELOAD.
Но это получается, если только у символа есть синоним. Вопрос такой:
как подменить символы, у которых нет синонимов? Ну например, я пишу
маленькую библиотеку mysocks.so:
#include <stdio.h>
int accept (int __fd, void *__addr, int *__addr_len) {
printf("mysocks::accept(fd=%d, addr=%X, addr_len=%X, *addr_len=%X)\n", __fd, __addr, __addr_len, *__addr_len);
int r = __libc_accept(__fd, __addr, __addr_len);
printf("mysocks::accept(fd=%d, addr=%X, addr_len=%X) returned %d\n", __fd, __addr, __addr_len, r);
return r;
}
int bind (int __fd, void *__addr, int __len) {
printf("mysocks::bind(__fd=%d, __addr=%X, __len=%X)\n", __fd, __addr, __len);
int r = __libc_bind(__fd, __addr, __len);
printf("mysocks::bind(__fd=%d, __addr=%X, __len=%X)=%d\n", __fd, __addr, __len, r);
return r;
}
У accept() есть синоним __libc_accept(), а у bind() - нет! Так что
загрузка этой библиотеки с LD_PRELOADК не работает.
Как же мне поступить с bind()?