glibc malloc을 libc.so의 일부가 아닌 공유 라이브러리로 만들고 싶습니다.glibc malloc 만 공유 라이브러리로 빌드 할 수 있습니까?
저는 chroot를 사용하지 않고 직접 빌드하려고합니다. 당신이 볼 수 있듯이, malloc에이 -fPIC
를 사용하여 구축됩니다
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
그래서 난 할 수 있어야한다 :
나는 정상적인 빌드로의 glibc을
, 그것은 즉 malloc을 구축하는 데 사용되는 명령을 출력 공유 라이브러리로 간단하게 링크 할 수 있습니다. 내가이 명령 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
을 실행할 때
그러나 나는이 오류가 나타 왜 relocation R_X86_64_PC32 against undefined symbol `__libc_multiple_threads' can not be used when making a shared object; recompile with -fPIC
내가 이해하지 못하는 오류가? 분명히 malloc.c를 컴파일했습니다 -fPIC
감사합니다. 그것은 아주 명확한 설명이었습니다. 그래서 malloc을 쉽게 해킹 할 수있는 방법은 없습니다. 그래서? 또한 호기심에 대한 답변에서 게시 한'__libc_multiple_threads'에 대한 참조를 어떻게 추적 했습니까? – sha
@sha 확실히 tmalloc이나 jemalloc을 사용하여'malloc.so'를 빌드 할 수 있습니다. 그러나 glibc의 일부를 분리하는 것은 효과가 없을 것입니다. –