서로다른 OS에서 프로그램이 실행되지 않는 이유는...?

s_jeho의 이미지

요약질문입니다.

같은 gcc계열의 컴파일러로 같은 소스를 컴파일 할때
서로다른 OS에서 프로그램이 실행되지 않는이유를 알아내기위해선
커널에 관련된 책을 봐야할까요 컴파일러에 관한 책을 봐야할까요?

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

원래 아래글이 진짜 질문글이었는데 읽다보니 쓸데없이 긴거같아서 축약하여 올립니다.

많이 여쭤보진 못하고 조금만 여쭤보겠습니다....
아무래도 "학습"이 목표인 프로젝트라 여기다가 물어봐서 답이 딱 나와버리면 공부할게 없거든요...
그래서 올리는것도 고민하다가 최소한 방향에 관한 질문이라도 올리면 좋을듯 하여 올립니다-

일단 전제를 잠깐 깔겠습니다.
학부 2학년생입니다만 아는게 정말 하나도 없습니다.(자랑은 절대로 아닙니다)
전공공부 안하기로 소문나고 이미 사회과학(심리학)쪽으로 외도한 나쁜놈이랍니다

컴퓨터 시스템개론 이라는 과목에서 기계어에 관련한 자유주제를 바탕으로 프로젝트를 진행하는데요,
저희팀의 주제가 서로다른 OS에서 프로그램이 실행되지 않는이유는..? 을 바탕으로 진행합니다..
그런데 막상 모인팀이 다들(저빼고) 전공공부는 잘하는데 기본적인 스키마가 없는 사람들이라
배우지도 않은걸로 뭘 해보자니 참 어렵더군요

하지만 일주일 내내 도서실에서 책이것저것 핥다보니까 대충 어떻게 방향을 잡아야 하는지 나오긴했습니다.

일단 제일 메인이 되는 주제는 왜 서로다른 OS상에서 프로그램이 돌아가지 않는가.. 이고
최종적인 목표는 윈도우와 리눅스에서 서로 연동되는 에뮬레이터 제작.. 입니다.
에뮬레이터라고 해서 뭐 와인같은거 생각하시면 경기도 오산..;;
딱 Helloworld만 뱉어낼수 있을정도의 간단한 에뮬레이터입니다.

일단 Helloworld 소스를 바탕으로 해서 작업합니다.
일단 서로 완전히 다른 OS에서 실행파일단계까지 컴파일이 끝난 상태에서 에뮬레이터 제작은 너무 힘들듯하여
컴파일의 중간단계인 어셈블 단계에서 작업할 예정입니다.

윈도우에서 MingW32 에서 빼낸 어셈블과 리눅스gcc에서 빼낸 어셈블이 몇몇부분만 제외하고 다르다는것을
확인했습니다..

저는 어셈블이란것도 C언어처럼 뭔가 표준적으로 통합되어있는줄 알았는데 그게 아니더군요!!
VC에서 역어셈한값과 gcc에서 역어셈한값이 완전히 틀린것도 놀랐고..
같은 gcc계열이지만 운영체제에 따라서 약간 틀리더군요.

그래서 실험했습니다..
리눅스상에서 빼낸 어셈블파일과 윈도우에서 빼낸 어셈블 파일을 서로 바꿔서 이어서 컴파일했더니 안되더군요..
뭔가 위험 4개와 오류 1개를 뱉어낸채..

뭔가 어셈블 상태에서 보니 두개가 메모리를 관리하는 방식이 약간 틀리더군요.
그리고 오류내용을 보니 helloworld! 를 출력하기위해 사용된 printf를 참조할수 없다는 에러가 뜨고.

여기서 추측할수 있는 문제가 2개정도 나왔습니다.

*문제1은 서로다른 OS에서 컴파일하면 메모리를 관리하는 방식이 틀리다(커널의 문제인가?)
*문제2는 명령어를 참조할수 없다는 에러로 미루어 볼때 아마 두 OS가 참조하는 라이브러리(?)가 틀린모양이다.

그렇다면 이 두가지 문제중에 어떤것이 진짜 문제인가 판별하면 서로 다른 OS에서 컴파일된 어셈블 파일을
이어서 컴파일 시켜서 실행파일로 만들어낼수 있지 않을까? 라는 생각을 하게되었습니다.

라고 요약되었습니다.

자. 저는 커널을 공부해야 할까요 아니면 컴파일러를 공부해야 할까요....;;;

시간만 많다면 무작정 맨땅에 헤딩하는 마음으로 둘다 파고들고싶지만 지금 시험기간이고 남은시간도 한달정도남았기때문에
어느정도 방향이 설정되어야 짧은시간안에 목표를 이룰것같아서 질문드립니다.
간단한 질문인데 너무 길게 되버렸네요 죄송합니다..

부가적인 질문 하나만 더 드리겠습니다
: 참조하던 어셈블책(MASM)과 리눅스 gcc에서 어셈블한것이 명령어부터가 확 틀리네요.. 이건 어디서 뭘 참조해야할까요?

lovian의 이미지

커널과 컴파일러는 따로 떼어 놓을 수 없는 부분입니다. 아무리 시간이 없으셔도 필요한 부분이니까 어느정도 아셔야합니다.

그리고 컴퓨터구조, 커널(혹은 운영체제), 컴파일러의 관계를 추적해보시면 괜찮을것 같습니다.

부가적인 것에 대한건 구글에서 '어셈블리 문법'으로 검색보시면 도움이 될것 같군요.

---------------------
한글을 사랑합니다.

-----------------
한글을 사랑합니다.

Anonymou의 이미지

을 참고적으로 학습하세요.

실행파일이 스스로 실행되는게 아니라 로더를 통해서 메모리 상에 적재되고
그리고 실행됩니다. 로더는 그 플랫폼(해당 OS)상에 사용하는 실행파일
구조에 의존적입니다.

dll, so 파일등에 대해서도 공부하셔야 할겁니다.

댓글 달기

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