프로그래밍

 3198, 1/160 회원가입  로그인  
   qkrwncks96
   공유라이브러리영역

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3461 [복사]



책보면 공유라이브러리 영역이 있던데

무슨 명령들이 있다는데 무슨소리죠?

명령은 <stdio.h> 파일ㅇㅔ있는게 아닌가요?

stdio.h 는 안에있는 소스코드로 치환되어서 코드영역으로 들어가고

그런데왜 공유라이브러리 영역이있는거죠?


  Hit : 4376     Date : 2012/07/22 03:36



    
ka0r1 stdio.h파일에 적혀있는 것들은 정의가 아닌 아래와 같은 선언들입니다.

.
.
.
extern int printf __P ((__const char *__restrict __format, ...));
.
.
.

함수를 선언할 때, int function(int a, int b); 이렇게 선언하는 것과 마찬가지로
선언만 들어있지 함수의 몸체는 아닙니다.
"공유 라이브러리 영역"이라는 문장 자체가 구글에서도 잘 없는 것 같은데
제 생각엔 정의(함수의 몸체)부분이 공유 라이브러리 영역에 올라가는 게 아닐까 싶네요.

자세한 것은 저보다 더 많이 아시는 분들이 많으니 좋은 답변 부탁드려야 되겠네요.
2012/07/22  
cd80 프로그램에서 함수를 사용하면<br />
프로그램을 디버거로 열어도 함수자체를 살펴볼순 없고<br />
PLT 로 점프하는 코드만 들어있습니다<br />
여기서 PLT 로 점프한후 PLT 에서 GOT 에 저장된<br />
그함수를 라이브러리에서 가져와서 사용하는 형식입니다<br />
<br />
헤더파일에 있는 소스들은 치환되지않고<br />
왠만한 함수들은 /lib/libc.so.6 이라는 shared object 파일에<br />
모두 구현되어있습니다<br />
<br />
라이브러리 함수들이 사용될땐 그 함수들이 코드영역으로 그대로 들어가진 않고<br />
위에서 말씀드린대로 라이브러리에 있는 함수의 주소를 알아온후 그 함수를 호출하는 형태로 작동합니다
2012/07/24  
cd80 왜 <br /> 이 붙었지;; 2012/07/24  
qkrwncks96 이해했습니다 ! 모두들 감사합니다 ~ 2012/08/01