실행파일 제작 과정..?;;;

jenix의 이미지

안녕하세요.

이전 부터 궁금하던 점인데요,

리눅스용 실행파일들이나 윈도우용 실행파일들

생성원리(?) 혹은 동작원리(?) 가 궁금해서 그러는데,

어떤 서적들을 참고하면 될까요?

컴파일러 소스를 헤집는건 쥐 잡으려고 집에 불사르는거 같구요 ^^;

간단한 인터프리터를 만들었는데, 이걸 실행파일로 만들어 보고 싶어서요 :oops:

컴퓨터 오거니제이션 & 디자인 책은 대략(?) 봐서..

C 코드 -> 어셈변환 -> 심볼테이블 만들고 -> 이진으로 변환

이정도 과정은 이해하고 있거든요..

조언 부탁드립니다 :oops:

ㅡ,.ㅡ;;의 이미지

간단한 인터프리터를 만드는데 실행파일을 못만들다니..ㅡ,.ㅡ;;
실행파일은 MS윈도우에서는 확장자에 따르고 유닉스에서는 퍼미션.. 즉, 해당x권한을 따릅니다.


----------------------------------------------------------------------------

Bini의 이미지

ㅡ,.ㅡ;; wrote:
간단한 인터프리터를 만드는데 실행파일을 못만들다니..ㅡ,.ㅡ;;
실행파일은 MS윈도우에서는 확장자에 따르고 유닉스에서는 퍼미션.. 즉, 해당x권한을 따릅니다.

jenix님은 실행가능한 머신코드를 이야기하시는것 같은데...
알고서도 농담하시는건지 ^^;
익명 사용자의 이미지

Bini wrote:

...
알고서도 농담하시는건지 ^^;

농담은 아는 사람 사이에 하는 것이라고 보오. :twisted:
ㅡ,.ㅡ;; 님은 그래서 좋소이다.

머신코드를 만드는 작업은 보통 노가다 중에서도 아주 생노가다라고 할 수 있소이다. 해봤냐고 물어보면 해봤다고 할 수 밖에는 없소이다.
....
... 컴파일러등의 제작자는 인터미디어트 코드(Assembly code)까지를 주로 그 목적으로 한다고 생각하오.
제안을 한다면, 타켓 머신용 어셈블리 언어로 변환하는 것 까지를 만드는 것이 유용하리라고 생각하오.
그리고, 해당 시스템에 존재하는 어셈블러를 사용하여 코드를 만드는것이 나을 듯 하외다.

jenix의 이미지

질문을 잘못한건지요,.

bini 님 말씀처럼 머쉰코드 생성에 대해 알고 싶어서 질문했습니다.

기존의 어셈블러를 이용한다면,

뭣하러 공부하겠습니까;;;[/b]

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

jenix의 이미지

컴파일러 제작의 목적이라기 보다는

머쉰코드 작동 원리를 파헤쳐보고 싶은 겁니다 :oops:

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

pynoos의 이미지

jenix wrote:
안녕하세요.

이전 부터 궁금하던 점인데요,

리눅스용 실행파일들이나 윈도우용 실행파일들

생성원리(?) 혹은 동작원리(?) 가 궁금해서 그러는데,

어떤 서적들을 참고하면 될까요?

컴파일러 소스를 헤집는건 쥐 잡으려고 집에 불사르는거 같구요 ^^;

간단한 인터프리터를 만들었는데, 이걸 실행파일로 만들어 보고 싶어서요 :oops:

컴퓨터 오거니제이션 & 디자인 책은 대략(?) 봐서..

C 코드 -> 어셈변환 -> 심볼테이블 만들고 -> 이진으로 변환

이정도 과정은 이해하고 있거든요..

조언 부탁드립니다 :oops:

우선 OS의 C 라이브러리와 링크를 시켜보세요.
어떤 플랫폼이던지, C library의 구현이 존재하고, 그 플랫폼에 맞는 실행파일을 링커를 통해 링크하는 과정을 통해서 연습하면됩니다. c runtime object인 crt1.o 같은 파일을 링크하면 OS에 서 구동시키는 startup 코드를 탑재하게 됩니다.

익명 사용자의 이미지

뜻이 그러하시다면,
컴퓨터 아키텍쳐(모리스 마노의 책으로 공부했었던 기억이... 간단한 컴퓨터를 설계하고, 머신코드를 생성하는 원리가 기술되어 있었습니다. 고급 어쩌구 하는 책들은 머신코드보다는 고수준의 기술에 대한 언급이 많으므로, 선정에 유의하도록 하시길.)
x86 어셈블리언어( 쉽게 접할수 있는 머신이지요. 어드레싱모드 등에 대해 상세히 나오는 책으로 선택하셔야 하고자 하는 바를 성취하는데 보탬이 될듯합니다. 타켓으로 생각하는 컴퓨터의 어셈블리 언어에 능통해야 합니다.)
nasm 오픈 소스 어셈블러입니다. 때로는 코드로 보는게 보탬이 되기도 합니다.

voider의 이미지

예전에 가장 작은 실행 파일 만들기 에 관련된 문서가 있었는데
어디에 있는지 못찾겠네요.

http://wiki.kldp.org/wiki.php/DocbookSgml/LinkerLoader-TRANS
이건 링커 로더에 관한 문서..

그리고 밑에 링크는 제가 예전에 만든 어셈블러입니다
무지 허접한 거니까 분석하기엔 좋지 않을까 하는 생각이 ㅡ.ㅡ;
http://mu.kunsan.ac.kr/zero/download.php?id=V_M&page=1&page_num=12&category=&sn=off&ss=off&sc=off&keyword=&prev_no=&select_arrange=headnum&desc=asc&no=3&filenum=1

-- 아쉬운 하루 되세요 --

댓글 달기

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