Linux,  Programming

[Linux] Executable의 RPATH 확인

Linux에서 executable은 elf format으로 구성되는데, 내부에는 rpath entry라는게 존재한다.

참고로 rpath는 shared library를 이용하는 build된 binary에서 dynamic loading 시 어떤 위치에 shared library가 존재하는지 가리키는 entry다. Runtime 시 shared library를 참조하는 순서는 다음과 같다.

  1. rpath
  2. LD_LIBRARY_PATH
  3. runpath
$ readelf -d a.out | grep RPATH
0x000000000000000f (RPATH)              Library rpath: [/usr/local/lib;/home/shumin/local/lib]

위 명령어처럼 readelf 커맨드를 통해서 쉽게 참조가 가능하다.

추가로 특정 executable에 rpath를 통해 link된 shared library path를 확인하는 명령어는 다음과 같다.

$ ldd a.out

# Example
$ ldd /bin/ls
        linux-vdso.so.1 =>  (0x00007ffc4ddf0000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6de707e000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007f6de6e79000)
        libacl.so.1 => /lib64/libacl.so.1 (0x00007f6de6c70000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6de68a3000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f6de6641000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f6de643d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6de72a5000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007f6de6238000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6de601c000)

Reference

  1. https://amir.rachum.com/blog/2016/09/17/shared-libraries/#rpath-and-runpath
  2. https://www.lesstif.com/software-architect/shared-library-linker-loader-12943542.html

Leave a Reply

Your email address will not be published. Required fields are marked *