Re: gdb и elf
On Sat, Nov 10, 2007 at 12:43:11AM +0300, Dmitry E. Oboukhov wrote:
> > есть libconnect в портах freebsd - там перехватывается connect(2), дабы сделать
> > bind(2) на локальную сторону сокета (bind адрес берется из переменной окружения
> > CONN_ADDR). используется так:
>
> набросал такой тестик, но почему-то не раотает
> что-то я делаю не так?
>
> $ cat main.c
> #include <stdio.h>
>
> void foo(void)
> {
> printf("This is foo() from main\n");
> }
>
> int main(void)
> {
> foo();
> return 0;
> }
>
> $ cat test_lib.c
> #include <stdio.h>
>
> void foo(void)
> {
> printf("This is foo() from library\n");
> }
>
> $ make clean all
> rm -f library.so program
> gcc -shared -o library.so test_lib.c
> gcc main.c -o program
>
> nb:[/home/dimka/test]$ LD_PRELOAD=/home/dimka/test/library.so ./program
> This is foo() from main
>
> или из простого бинарника функции не перехватить?
>
похоже только библиотечную функцию -- сам не знал -- причем она должна
иметь __attribute__((weak)). чтобы довести тему до конца проиллюстрируем
примером.
foo.c
int foo()
{
printf("%s -> %s()\n", __FILE__, __func__);
return 0;
}
gcc -shared foo.c -o foo.so
mainfoo.c
int __attribute__((weak)) foo()
{
printf("%s -> %s()\n", __FILE__, __func__);
return 0;
}
gcc -shared mainfoo.c -o mainfoo.so
main.c
main()
{
foo();
return 0;
}
gcc main.c mainfoo.so -o main
LD_LIBRARY_PATH=. ./main
mainfoo.c -> foo()
LD_LIBRARY_PATH=. LD_PRELOAD=foo.so ./main
foo.c -> foo()
если статически линковать - то уже не работает. т.е.
gcc main.c mainfoo.c -o main
LD_PRELOAD=./foo.so ./main
mainfoo.c -> foo()
селяви... :(
/swp
Reply to:
- References:
- gdb и elf
- From: "Dmitry E. Oboukhov" <dimka@avanto.org>
- Re: gdb и elf
- From: Покотиленко Костик <casper@meteor.dp.ua>
- Re: gdb и elf
- From: "Dmitry Fedorov" <dm.fedorov@gmail.com>
- gdb и elf
- From: "Dmitry E. Oboukhov" <dimka@avanto.org>
- Re: gdb и elf
- From: "Dmitry Fedorov" <dm.fedorov@gmail.com>
- gdb и elf
- From: "Dmitry E. Oboukhov" <dimka@avanto.org>
- Re: gdb и elf
- From: "mitrohin a.s." <swp@swp.pp.ru>
- gdb и elf
- From: "Dmitry E. Oboukhov" <dimka@avanto.org>