[질문] 로더가 시스템콜 함수 exec*() 인가요?

oosap의 이미지

유명한 글 중에 kldp 에서도 번역물을 공개하고 있는 아래 글이 있습니다.

제목은 "링커와 로더" 입니다.

http://wiki.kldp.org/wiki.php/DocbookSgml/LinkerLoader-TRANS#basic

최종적으로 만들어진 실행파일(a.out)은 이제 로드될 준비가 되었다. 이것을 실행시키기 위해서 우리는 쉘 프롬프트상에서
아래와 같이 타이핑한다.
 
./a.out
 
그러면 쉘은 '로더'를 불러 a.out의 코드와 데이터를 메모리로 복사하고, 프로그램내의 제일 처음으로 제어권을 넘긴다.
"여기서 말하는 로더는 execve라는 것으로 실행가능한 오브젝트 파일의 코드와 데이터를 메모리로 로드하고 그 프로그램의
첫번째 명령어가 저장된 주소로 점프함으로써 프로그램을 수행하게 한다."

그런데 위 글을 읽어보면 execve 가 로더라고 합니다. man 페이지에서 설명하는 것을 찾아보면 그것은 시스템콜 함수인데요...
위 인용된 단락에서 설명하는 부분은 다름아니라 쉘이 fork() 하고 execve() 를 해서 유저가 실행하려는 프로그램을 실행하는 과정을 말하는 것 같습니다. 그렇다면 정말로 로더라는 것이 따로 있는 것이 아니라 그냥 시스템콜을 얘기하는 것인가요? 그렇다면 exec 류의 함수들을 모두 '로더' 라고 말할 수 있는 것인가요? cpp, cc1, as, ld 가 각각 실행파일인 것 처럼 로더 역시 독립된 실행파일로 존재하는 것이 아니고 단지 그냥 시스템 콜을 이야기하는 것인지 궁금합니다. 그렇지 않을 것이라고 짐작했었는데 위 글과 또 다른 책을 읽으면서 혼란스러운 상태 입니다. kldp 에서 검색해보니 관련 물음이 있었습니다만, 명확히 답변되지는 않은 것 같아요..

http://kldp.org/node/39468

바꿔서 질문해보면, 로더란 exec*() 류의 함수를 호출하는 독립된 실행파일이 아닌가요?

감사합니다.

oosap의 이미지

제가 지금 읽고 있는 백창우씨의 유틸리티 책에서도

링커나 로더, 디버거를 만들어야 하는 독자가 있다면 pdf 파일 형태의 ELF 메뉴얼을 읽어보기 바란다.

라고 되어있네요.... 만들 수 있다면 시스템콜을 얘기하는 것은 아닐텐데요.... 로더의 실체가 정말 궁금합니다.
부트로더는 뭔지 알겠는데,... 로더는 분명히 독립된 실행프로그램이죠?

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

kaeri17의 이미지

http://en.wikipedia.org/wiki/Loader_(computing) 대강 위키를 보면 운영체제의 일부분이라고 되어 있습니다. 즉, 독립된 프로그램은 아니라는 것이고요, execve함수가 이 로더를 통해 프로그램을 로딩하는 시스템콜인 것인듯 합니다. 즉, 로더를 만드는 것은 linux 소스에서 loader부분을 target machine에 맞게 동작을 수정하는것을 이야기 하는것 같네요.

oosap의 이미지

말씀하신 대로이군요..

In Unix, the loader is the handler for the system call execve().

로더는 시스템콜 execve 의 핸들러이니 fork 하고 execve 하면 결국 로더를 통해 프로그램을 실행하는 것이고...
그 로더는 그렇다면 OS 의 일부분이다.

그럼 결국 커널 코드에 비밀이 숨겨져 있는 것 같습니다.
커널..

감사합니다. *^^*

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

댓글 달기

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