[완료] ELF도 win32(PE)처럼 프로세서에 독립적인가요?

gamdora의 이미지

win32(PE) 바이너리는 프로세서에 독립적이라고 들었는데,

리눅스*에서 쓰는 ELF 바이너리도 프로세서에 독립적인가요?

예를 들면,

x86 리눅스*에서 컴파일한 바이너리가 스팍 리눅스*에서도 돌아가나요?

익명사용자의 이미지

윈도우에서도 그건 안될텐데요.
예전에 윈도우NT가 인텔용뿐 아니라 PowerPC용이나 alpha용도 있었는데
인텔(x86)에서 컴파일한 바이너리가 alpha용 윈도우에서도 돌아갔다는 소리는 들은적이 없습니다.

wish의 이미지

프로세서에 관계 없이 같은 형식의 이진 파일 포맷을 사용할 수 있다는 뜻 아닐까요?

같은 형식의 이진 파일 포맷이라고 해서 같은 바이너리로 여러 플랫폼에서 돌릴 수 있다는 건 아닐테니까요 ^^

즉 같은 PE 형식이더라도 각 플랫폼 별로 CPU 실행 명령 자체가 다르니 이진 파일 포맷인 PE 가 실행 파일을 재 컴파일 없이 사용한다는 것은 불가능 하죠~ 다만 실행 파일의 헤더와 내용에 관한 형식은 같겠죠~

ELF 도 마찬가지로 수 많은 플랫폼에서 쓰는 형식이지만 형식이 같다는 것이지 이진 파일의 호환성을 보장해주지는 않겠죠 ^^

익명사용자의 이미지

ELF가 대단한건 아닙니다. 간단히 말하자면, 컴파일한 object파일을 어떻게
담을지를 결정 하는 거죠. 즉, 포장의 방식입니다. 하지만 그 내용은
컴파일러에 의해서 결정이 됩니다. 컴파일러가 만드는 프로세서 명령어 흔히
인스트럭션이라는 것은 당연 프로세서가 무엇이냐에 따라서 다르겠죠.
결국 x86플랫폼에서 빌드된 프로그램은 sparc이나 arm같은 프로세서에서 돌려 봤자,
unknown instruction 과 같은 exception이 발생할겁니다.

dormael의 이미지

정확히는 기억이 안나는데 680x0, PPC를 동시에 지원하는 바이너리 포맷이 있었던 걸로 압니다.

어떤 방식으로 지원이 되었던건지 궁금한데 혹시 알고 계신분 있으신가요?

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

Necromancer의 이미지

동시에 지원이 된다 해도 여러가지 명령어셋의 바이너리를 한 덩어리로 합쳐놓고
환경에 따라 바이너리를 결정하는 식으로 도는 것에 불과합니다.

어차피 명령어셋이 달라지면 CPU는 실행 불가거든요. x86용이면 스팍에서 안돌듯이.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

chadr의 이미지

PE가 프로세서 독립적이란 말은 아마 PE헤더안에 Machine이라는 필드가 있기 때문에 나온 말일지도 모릅니다.
기본적은 PE의 설계는 우선 이 필드를 가지고 해당 실행파일이 실행되는 시피유의 종류를 기록 하게 되어있습니다만...

설계가 그렇다 뿐이지 실제로 구현은 그렇게 되어있지 않습니다..
실행파일을 실행할때 로더가 해당파일의 이미지를 읽어오는데 로더가 해당 파일을 지원하지 않으면 안되겠지요..
그런데 로더는 둘째치고 로더가 PE포맷을 읽어봤자 위에서 말씀들 하신것과 같이 시피유에서 명령어를 지원하지 않으면 아무리 로더가 읽어봤자 실행을 못하니 아무런 소용이 없습니다..

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

gamdora의 이미지

답변 감사합니다.

제가 잘못 알고 있었군요. ^_^;;

댓글 달기

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