ELF가 대단한건 아닙니다. 간단히 말하자면, 컴파일한 object파일을 어떻게
담을지를 결정 하는 거죠. 즉, 포장의 방식입니다. 하지만 그 내용은
컴파일러에 의해서 결정이 됩니다. 컴파일러가 만드는 프로세서 명령어 흔히
인스트럭션이라는 것은 당연 프로세서가 무엇이냐에 따라서 다르겠죠.
결국 x86플랫폼에서 빌드된 프로그램은 sparc이나 arm같은 프로세서에서 돌려 봤자,
unknown instruction 과 같은 exception이 발생할겁니다.
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.
윈도우에서도 그건
윈도우에서도 그건 안될텐데요.
예전에 윈도우NT가 인텔용뿐 아니라 PowerPC용이나 alpha용도 있었는데
인텔(x86)에서 컴파일한 바이너리가 alpha용 윈도우에서도 돌아갔다는 소리는 들은적이 없습니다.
그... 프로세서에 독립적이라는 말이...
프로세서에 관계 없이 같은 형식의 이진 파일 포맷을 사용할 수 있다는 뜻 아닐까요?
같은 형식의 이진 파일 포맷이라고 해서 같은 바이너리로 여러 플랫폼에서 돌릴 수 있다는 건 아닐테니까요 ^^
즉 같은 PE 형식이더라도 각 플랫폼 별로 CPU 실행 명령 자체가 다르니 이진 파일 포맷인 PE 가 실행 파일을 재 컴파일 없이 사용한다는 것은 불가능 하죠~ 다만 실행 파일의 헤더와 내용에 관한 형식은 같겠죠~
ELF 도 마찬가지로 수 많은 플랫폼에서 쓰는 형식이지만 형식이 같다는 것이지 이진 파일의 호환성을 보장해주지는 않겠죠 ^^
프로세서에 독립적인 바이너리는 만들수 없습니다. 현재까진...
ELF가 대단한건 아닙니다. 간단히 말하자면, 컴파일한 object파일을 어떻게
담을지를 결정 하는 거죠. 즉, 포장의 방식입니다. 하지만 그 내용은
컴파일러에 의해서 결정이 됩니다. 컴파일러가 만드는 프로세서 명령어 흔히
인스트럭션이라는 것은 당연 프로세서가 무엇이냐에 따라서 다르겠죠.
결국 x86플랫폼에서 빌드된 프로그램은 sparc이나 arm같은 프로세서에서 돌려 봤자,
unknown instruction 과 같은 exception이 발생할겁니다.
전에 PPC를 지원하는 Classic MacOS에서
정확히는 기억이 안나는데 680x0, PPC를 동시에 지원하는 바이너리 포맷이 있었던 걸로 압니다.
어떤 방식으로 지원이 되었던건지 궁금한데 혹시 알고 계신분 있으신가요?
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
동시에 지원이 된다
동시에 지원이 된다 해도 여러가지 명령어셋의 바이너리를 한 덩어리로 합쳐놓고
환경에 따라 바이너리를 결정하는 식으로 도는 것에 불과합니다.
어차피 명령어셋이 달라지면 CPU는 실행 불가거든요. x86용이면 스팍에서 안돌듯이.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
PE가 프로세서
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.
답변
답변 감사합니다.
제가 잘못 알고 있었군요. ^_^;;
댓글 달기