Je veux construire glibc malloc comme une bibliothèque partagée au lieu de faire partie de libc.soPuis-je créer uniquement glibc malloc en tant que bibliothèque partagée?
Je n'utilise pas de chroot mais j'essaie directement de le construire.
Quand je fais glibc comme une construction normale, il émet la commande qui est utilisé pour construire malloc savoir:
gcc malloc.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wundef -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes -fPIC -DMORECORE_CLEARS=2 -I../include -I/home/sharath.g/glibc-2.20/build/malloc -I/home/sharath.g/glibc-2.20/build -I../sysdeps/unix/sysv/linux/x86_64/64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/x86_64/nptl -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/x86_64/64 -I../sysdeps/x86_64/fpu/multiarch -I../sysdeps/x86_64/fpu -I../sysdeps/x86/fpu -I../sysdeps/x86_64/multiarch -I../sysdeps/x86_64 -I../sysdeps/x86 -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64/wordsize-64 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/wordsize-64 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DSHARED -o /home/sharath.g/glibc-2.20/build/malloc/malloc.o -MD -MP -MF /home/sharath.g/glibc-2.20/build/malloc/malloc.os.dt -MT /home/sharath.g/glibc-2.20/build/malloc/malloc.os
Comme vous pouvez le voir, malloc est construit en utilisant -fPIC
donc je devrais pouvoir simplement le lier comme une bibliothèque partagée.
Cependant quand je lance cette commande gcc -shared -Wl,-soname,libmalloc.so -shared -lpthread -lm -lrt -o /home/sharath.g/glibc-2.20/build/malloc/libmalloc.so /home/sharath.g/glibc-2.20/build/malloc/malloc.o
Je reçois une erreur relocation R_X86_64_PC32 against undefined symbol `__libc_multiple_threads' can not be used when making a shared object; recompile with -fPIC
Je ne comprends pas pourquoi cette erreur apparaît? clairement j'ai compilé malloc.c avec -fPIC
Merci. C'était une explication très claire. Il n'y a donc pas de moyen facile de pirater un malloc.so? Aussi par curiosité, comment avez-vous retrouvé la référence à '__libc_multiple_threads' que vous avez posté dans la réponse? – sha
@sha Vous pouvez certainement construire 'malloc.so' en utilisant tcmalloc ou jemalloc. Mais séparer des parties de la glibc n'est pas susceptible de fonctionner. –