analizer
23.09.2011 16:43 mcabber
Как? Как оно определяет когда нужно юзать глибцшный, а когда мою реализацию fopen?
user@host $ cat main.c
#include <stdio.h>
int main() {
printf("%p\n", fopen("",""));
return 0;
}
user@host $ gcc main.c
user@host $ ./a.out
(nil)
user@host $ cat fopen.c
#include <stdio.h>
FILE* fopen(const char* path, const char* mode) {
puts("hello");
return (void*)0xface8d;
}
user@host $ gcc main.c fopen.c
user@host $ ./a.out
hello
0xface8d
и чем же это они отличаются?
а если подключить мозг?
libc же цепляется динамически ? Я так понимаю, что приоритет у реализованных внутри твоего кода, будет выше. Хотя объяснить это не могу :(
попробовал добавить к гцц флаг -static — монопенисуально (если не считать того что он вырос ровно в сто раз и ldd стал говорить «not a dynamic executable»)
блин, я уж даже не знаю о_О Я ожидал увидеть symbol redefinition в static сборке. Кекеке.
я ожидал его увидеть просто на «gcc main.c fopen.c»
А зделой g++ main.c fopen.c , например. Хочу разогнать демонов.
тащем-та в самой первой версии это оно у меня и было http://ideone.com/5fSEs
единственный способ вывернуться из такого капкана — грузить напрямую из glibc при помощи dlsym