프로그래밍/리눅스 프로그래밍

[cross-platform] ld-linux-x86-64.so 란

jinkwon.kim 2020. 11. 3. 13:17
728x90
반응형

ld-linux-x86-64.so 란?

elf interpreter이며 이를 이용하면 실행 파일과 관련된 shared library를 연결 시켜주는 역활을 합니다.

 

언제 사용하나?

linux에서 다른 여러 platform에서 프로그램을 돌리고 싶을때 상용합니다. ld-linux-x8-64.so는 shared library path를 실행 시점에 다시 지정 해줄수 있기 때문이 가능 합니다. 

 

핵심 

컴파일 환경에서 "ld-linux-x86-64.so"와 "실행 파일"에 필요한 shared library를 실행 할 환경에 복사한 후

"ld-linux-x86-64.so" 로 프로그램을 실행 한다.

 

상세 사용법

1. compile 환경과 다른 환경에서 프로그램을 실행 합니다. 

  - 그러면 어떠한 라이브러리가 없다고 나옵니다.

2. compile한 환경의 ld-linux-x8-64.so 를 실행 할 환경에 복사 합니다.

3. compile한 환경에서 1번에서 에러나 library를 복사하여 실행할 환경의 임의의(현기선 lib) 디렉토리게 놓습니다.

  - 주로 시스템에 의존성이 강한 library가 대부분 입니다. 

    Ex) /lib64/libstdc++.so.6

         /libc.so.6

2. 실행할 환경에서 ld-linux-x86-64.so 의 --library-path에 3번에서 생성한 디렉토리를 넣은 후 아래와 같이 실행 합니다. 

   #./ld-linux-x86-64.so --library-path ./lib/ ./get_docker_info

 

shared library link 과정

  • shared library사용시 실행되는 과정을 알아 보겠습니다. 
  1. 실행 파일에서 shared library 찾기 
  2. share library를 메모리에 mapping 시키기
  3. 메모리에 mapping된 shared-library를 프로그램이 실행 할 수 있게 재배치
  4. 프로그램 초기화를 실행하여 재배치된 shared-library를 프로그램에 연결합니다.
  5. 프로그램 실행

참고

https://blog.daum.net/tlos6733/125

 

[리눅스 링커] 02 - 다이나믹 링킹에 대한 이해 & GOT & PLT

작성자 : 박진범 메일 : jinb.park7@gmail.com :) 다이나믹 링커 로더 - 프로그램에 링크되어 있는 공유 라이브러리를 로드 및 링크하는 프로그램이다. - 리눅스는 일반적으로 /lib/ld-so.linux.so.2 파일을 다

blog.daum.net

https://ezbeat.tistory.com/374

 

ELF 파일의 PLT, GOT

음.. 윈도우 PE파일에서는 프로그램이 실행되면 Import table과 Export table을 사용해 프로그램에서 사용할 라이브러리 주소를 가져오지요. dll 같은 경우는 로드될때 base address가 바뀔수도 있기 때문

ezbeat.tistory.com

https://gist.github.com/sftblw/924a8a5888af95e3bb187eda5ba82086

 

공유 라이브러리의 로드 시점 재배치(relocation)

공유 라이브러리의 로드 시점 재배치(relocation). GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/

 

Position Independent Code (PIC) in shared libraries - Eli Bendersky's website

I've described the need for special handling of shared libraries while loading them into the process's address space in a previous article. Briefly, when the linker creates a shared library, it doesn't know in advance where it might be loaded. This creates

eli.thegreenplace.net

 

728x90
반응형