PLT(proceduere linkage table)와 동적링커 사이의 관계가.

zellgam의 이미지


현재 유닉스 리눅스 프로그래밍 - 필수유틸리티 책을 공부하고 있습니다.

오브젝트 파일에서 공유 라이브러리를 사용할때 (예를 들어 puts)
puts가 사용된 곳에 PLT섹션을 호출하도록 링킹한다고 하는데....

그리고 컴파일 된 프로그램을 실행할때 puts라는 라이브러리가 필요하다고 하면 동적링커에 제어권을 넘긴다고 하고
동적링커는 필요한 공유 라이브러리를 메모리에 매핑한다고 하는데요....

그럼 PLT와 동적 링커는 어떠한 관계가 있는거죠...??

고수님들 부탁드리겠습니다.

jb0730의 이미지

필수유틸리티 p74 14번째줄을 참고하시면 됩니다...

익명 사용자의 이미지

탐에게 물어보십시오.

jb0730의 이미지

Dump of assembler code for function main:
0x0804840c <+0>: push %ebp
0x0804840d <+1>: mov %esp,%ebp
0x0804840f <+3>: and $0xfffffff0,%esp
0x08048412 <+6>: sub $0x10,%esp
0x08048415 <+9>: movl $0x80484c8,(%esp)
=> 0x0804841c <+16>: call 0x80482f0
0x08048421 <+21>: mov $0x0,%eax
0x08048426 <+26>: leave
0x08048427 <+27>: ret
End of assembler dump.

Dump of assembler code for function puts@plt:
=> 0x080482f0 <+0>: jmp *0x804a00c
0x080482f6 <+6>: push $0x0
0x080482fb <+11>: jmp 0x80482e0
End of assembler dump.

Dump of assembler code for function puts@plt:
0x080482f0 <+0>: jmp *0x804a00c
=> 0x080482f6 <+6>: push $0x0
0x080482fb <+11>: jmp 0x80482e0
End of assembler dump.

Dump of assembler code for function puts@plt:
0x080482f0 <+0>: jmp *0x804a00c
0x080482f6 <+6>: push $0x0
=> 0x080482fb <+11>: jmp 0x80482e0
End of assembler dump.

No function contains program counter for selected frame.
eip 0x80482e0 0x80482e0
eip 0x80482e6 0x80482e6

0xb7ff26a0 in ?? () from /lib/ld-linux.so.2

예전에 디버깅해본 정보입니다....
puts함수를 호출하면은 바로 그 함수로 가는것이 아니라 plt Section으로 갑니다 plt Section에는 함수에 대한 맨처음에는 아무것도 지니지 않은 값들이 존재합니다.
그다음으로 plt Section에서는 다이나믹 링커 ld-linux.so.2로 점프합니다. 여기서부터는 심볼정보가 없어서 못올렸으나 이떄 돌아오는 값은 puts 함수의 주소값입니다. 그 값을 plt Section에 저장해놓고 다음부터는 다이나믹 링커를 거치지 않고 바로 함수를 호출할수 있게 하여줍니다…

그렇다면은 다이나믹링커는 해당 함수들의 엔트리포인트? 를 가지고 있다가? 로딩이 않되어 있다면은 로딩도 시켜주고, 요청이 들어오는 놈에게 해당정보를 알려주는 것입니다. 이렇게 해서 생기는 이득으로는 정적로딩에 따른 오버해드의 감소 및 메모리 공간을 효율적으로 사용할수 있지않을까요?? 둘이 똑같은 말이지만요 …

plt Section에 대해 아는내용은 이게전부입니다....

got Section은 글로벌심볼들의 정보를 가지고 Relocation 하여줍니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.