1. patchelf 최신 릴리즈 다운받기
github.com/NixOS/patchelf/releases
[
Releases · NixOS/patchelf
A small utility to modify the dynamic linker and RPATH of ELF executables - NixOS/patchelf
github.com
](https://github.com/NixOS/patchelf/releases)
2. 설치 진행
./bootstrap.sh
./configure
make
sudo make install
make check
이때 autoreconf 패키지 설치 필요할 수 있음 .
sudo apt-get install dh-autoreconf
3. 로더와 libc 교체
patchelf --set-interpterter ld ./binary
patchelf --replace-needed libc.so.6 ./libc ./binary
다만 이런식으로 로드하면 디버깅 심볼이 안맞아 제대로 명령어 사용이 힘듬. 힙이나 ld 관련 정보도 읽어오지 못함.
디버깅에 필요한 디버깅 심볼은 libc6-dbg 패키지.
launchpad.net/ubuntu/xenial/amd64/libc6-dbg/2.23-0ubuntu11
예제 문제의 라이브러리는 2.23 버전이기 때문에 해당 버전 deb 을 받아온다.
http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/
위 사이트에서 찾아도 되고, libc 버전와 운영체제에 맞게 구글링 해도 된다 .
dpkg -x ./libc6-dbg_2.29-0ubuntu2_amd64.deb ./<output_folder>
로 압축 풀고 ,
<output dir>/usr/lib/debug/lib/x86_64-linux-gnu
만 사용하면 된다.
디버거 열고 set debug-file-directory <output dir>/usr/lib/debug/lib/x86_64-linux-gnu
그 다음에 run이나 start 실행
아까 안되던게 잘 된다. 근데 무슨차이인지는 모르겠는데 gdb -q 옵션걸고 실행하면 로드가 안되더라.
-q 옵션 걸지말고 해야한다.
도움주신 heyon님 감사합니다.