본문 바로가기
호기심_메모

.so 파일 (1)

by 겸손하게 빚진자로, 밝게 인사 2014. 11. 18.
728x90

a - 정적 라이브러리(최종파일안에 묻어짐)

so - 동적 라이브러리(프로그램 실행 후 필요할 때 불려짐)

같이 디렉터리 안에 같은 이름으로 존재한다면 동적라이브러리가 우선시되어 링킹됩니다

[1]

정적 라이브러리(또는 Archive)

정적라이브러리(또는 Archive)파일이라 불리우고 .a의 확장자를 가진다.

여러개의 오브젝트 파일들을 하나로 묶어 사용하기 때문에 Archive파일이라고 부른며 컴파일 시간에

코드를 포함하기 때문에 정적 라이브러리라고 부른다.

# gcc -c test.c
# gcc -c app.c

test.o 파일과 app.o 파일이 생기는데 test.o 파일을 Archive로 묶어 보자.

라이브러리 파일의 작명법은 lib뒤에 이름을 붙이는 것이다.

# ar cr libtest.a test.o

libtest.a 파일이 생성되었을 것이며 이 라이브러리를 사용하여 컴파일하려면 아래와 같이 한다.

-L은 라이브러리 파일의 위치를 지정하며 -ltest가 libtest.a를 지정하게 된다.

#gcc -o  app app.o -L. -ltest


동적 라이브러리

실행시간에 라이브러리 파일을 찾아 코드를 포함하기 때문에 동적라이브러리라고 부른다.

# gcc -c -fPIC test.c
# gcc -c app.c

-fPIC옵션은 Position-Independent Code의 약자이며 test.o파일을 동적라이브러리로 사용하도록 컴파일 하는 옵션이다.

이렇게 컴파일된 오브젝트 파일을 .so파일로 묶으면 된다.


# gcc -shared -fPIC -o libtest.so test.o

컴파일은 아래와 같이 하면 된다.

# gcc -o app app.o -L. -ltest

만일 libtest.a 파일과 libtest.so 파일이 같이 있을 경우 gcc 컴파일러는 libtest.so 파일을 먼저 지정하게 된다.

만일 libtest.a를 사용하여 컴파일 하고 싶으면 아래와 같이 실행하면 된다. [1]

 


# gcc -static -o app app.o -L. –ltest

 

 

nm 명령어로 so 파일의 내용에 대해 심볼값, 심볼타입, 심볼이름을 알 수 있다. [2]

 

예제)

 $ nm -Ca /lib/mylib.so.1

 

Reference

  1. https://kldp.org/node/47793
  2. http://leechwin.tistory.com/entry/Ubuntu-NM-%EC%9C%BC%EB%A1%9C-so-%ED%8C%8C%EC%9D%BC-%EC%8B%AC%EB%B3%BC%EC%9D%84-%EA%B2%80%EC%83%89%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
  3. http://boho.or.kr/upload/file/EpF832.pdf 안드로이드 테스트앱을 이용한 난독화 라이브러리 파일 동적 분석
  • 난독화된 악성앱의 라이브러리를 IDA로 원격디버깅하여 분석하는 방법 설명
반응형

'호기심_메모' 카테고리의 다른 글

SSL certificate pinning  (0) 2014.11.20
암호 : TLS  (0) 2014.11.20
Oracle : DBlink 취약점 (1)  (0) 2014.11.19
FIDO, Fingerprinter (1)  (0) 2014.11.17
SunOS : passwd명령어로 lock 설정된 계정 확인  (0) 2014.11.04