2017-02-01 6 views
0

Windows API를 사용하여 프로그램을 코딩 한 다음 컴파일한다고 가정 해 보겠습니다. 이 코드는 CPU가 실행될 수 있도록 기계어 코드로 컴파일됩니다. 자, 내 질문은 : 다른 사람의 실행 파일을 자신의 CPU에 설정된 다른 명령과 공유하는 경우입니다. CPU가 코드를 동일한 방식으로 실행하고 오류를주지 않거나 다른 코드를 실행하는 방법은 무엇입니까? 자신의 CPU ... 다른 명령어 세트와 다른내 CPU의 프로그램이 다른 CPU에서 같은 방식으로 실행되는 이유는 무엇입니까?

답변

1

사람이 어떻게 자신의 CPU는 코드를 코드는 실행되지 않습니다 같은 방법으로

를 실행할 수 있습니다. CPU는 단순히 다른 언어로 말합니다.

당신은 두 가지 옵션

  1. 대상 CPU의 코드를 컴파일

    (당신이 다음 stdlib와 C/C++로 남겨 있도록, 동일한 소스 언어없이 특정 플랫폼 API를 사용할 수 있습니다 가정)가
  2. 스크립트/바이트 코드를 작성하고 두 플랫폼의 스크립트 (또는 바이트 코드)

을 해석하기에 런타임이 왜 가능한 런타임을 사용 JVM (Java 용) 및 스크립트 (Python, Scala, Lua, JavaScript 등)와 같은 스톨링은 코드가 스크립트의 형식 또는 플랫폼 독립 코드로되어 있습니다.

그리고 지금 - 다음 단계. Windows API를 사용하고 있다면 이름에서 알 수 있듯이 Windows 시스템에서 제공하는 API (서비스)입니다. 따라서 Windows 시스템없이 (예 : Linux 시스템에서) 동일한 CPU를 사용하더라도 응용 프로그램은 실행되지 않습니다. (좋아, 리눅스에서 Windows API를 공개하는 방법이 종종 있지만, 때때로 까다로울 수있다.)

결론 : 바이너리는 당신이 어떤 높은 수준의 API (Win32에서, ...)를 사용하는 경우, 운영 체제도

0

높은 수준에 거의 걸려있어, 명령어 세트 사이에 이식 할 수 없습니다 언어는 실행 가능하게 컴파일되며 종종 중간 코드로 컴파일됩니다. 이것은 어셈블리 언어에 가깝게 컴파일 된 소스 코드를 나타내지 만 모든 CPU 명령어 세트에만 국한되지는 않습니다. 이 중간 코드를 해석하여 CPU의 원시 명령어 세트에서 실행하는 것은 실행 파일을 실행하는 시스템에 달려 있습니다.