동적링킹, 심볼해석, plt, got 등에대한 질문

declspec의 이미지

질문1.
컴파일러에서 함수의 이름을 심볼이라고 하는데
함수의 이름 말고 또 다른 심볼의 종류는 뭐가있나요?
제 생각에는 전역변수와 함수명 이거말고는
심볼이라고 부를게 없는거같은데...

질문2.
그리고 리눅스에서
PLT, GOT 를 이용해서 동적라이브러리의 함수를
호출시 로딩하고(lazy binding)진입주소를 결정하는과정을
봤는데요, 제생각에 PLT, GOT 두개의 테이블이 하는 역할을
그냥 하나의 테이블로도 할 수 있을거같은데... 왜 꼭 PLT, GOT 가 따로 있어야하는지
모르겠네요... 바인딩 과정을 하고나면
GOT 가 동적라이브러리의 함수의 절대주소를 가지고있게되고
PLT 가 GOT 를 참조해서 함수를 호출하게 되는데
그냥 애당초에, 함수의 절대주소를 PLT 가 가지고있도록
동적링커가 해주면 안되나요? 즉 PLT 에서 GOT 로 점프하는 부분을
그냥 실제 함수 진입점으로 점프하게 덮어쓰면 될거같은데...?

질문3.
공유라이브러리가 가지고있는 전역변수를 읽거나 쓰고자 할때
링커 입장에서는 아직 전역변수의 가상주소를 결정할수 없을텐데
이건 어떻게 처리되나요? 공유라이브러리함수의 경우 PLT 를 참조하고
동적링커가 처리해주는 방식인데, 전역변수의 경우도 비슷하겠죠?
하지만 구체적으로 어떻게 되는지 궁금하네요

질문4.
제가 이해한바를 아래에 적겠습니다. 틀린부분이 있다면 지적해주세요
실행가능한 바이너리는 하나이상의 Object 파일들이 병합되서 만들어지는데
이때 각각의 Object 파일도 ELF 포맷으로 구성되며 나름대로의 섹션들을 가지고있다.
그중에 PLT 섹션을 가지고 있는 파일들도 있으며(공유객체를 참조할경우)
링커에 의해서 여러개의 PLT 섹션이 하나로 병합되고, GOT 는 링킹단계에서
최종적으로 생성된다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.