strcpy
является слабым символом со связью "C", поэтому можно переопределить без ошибок
libstrcpy. cc:
#include <dlfcn.h>
extern "C" {
void strcpy(char *dest, char *src)
{
auto real_strcpy = (char*(*)(char*,char*)) dlsym(RTLD_NEXT, "strcpy");
real_strcpy(dest, src);
}
}
Скомпилировать с помощью: g++ libstrcpy.cc -std=c++11 -shared -fPIC -ldl -o libstrcpy.so
Проверка strcpy
экспорт: readelf --dyn-syms libstrcpy.so
Для использования (основной. cc):
extern "C"{
void strcpy(char *, char *);
}
int main()
{
char a[10] = "test" , b[10] = {};
strcpy(a, b);
}
Скомпилировать с: g++ main.cc -o main -lstrcpy -L./
Обратите внимание, что если вы хотите использовать правильное void
возвращающее объявление, вы не можете импортировать любой заголовок, который определит strcpy
(правильный путь).