바이너리 변환

Binary translation

컴퓨팅에서 바이너리 변환명령어 시퀀스가 소스 명령어 세트에서 타깃 명령어 세트로 변환되는 바이너리 재컴파일 형식입니다.명령 집합 시뮬레이션과 같은 경우에 대상 명령 집합은 소스 명령 집합과 동일할 수 있으며 명령 추적, 조건부 중단점 및 스폿 검출 등의 테스트 및 디버깅 기능을 제공할 수 있습니다.

두 가지 주요 유형은 정적 바이너리 변환과 동적 바이너리 변환입니다.변환은 하드웨어(CPU 의 회로 등) 또는 소프트웨어(런타임엔진, 스태틱재컴파일러, 에뮬레이터 등)로 실행할 수 있습니다.

동기

바이너리 변환은 타깃 플랫폼용 바이너리가 없거나 타깃 플랫폼용으로 컴파일할 소스 코드가 없거나 타깃 플랫폼의 소스 컴파일이 어렵기 때문에 이루어집니다.

정적 재컴파일된 바이너리는 에뮬레이션 오버헤드가 제거되므로 각각의 에뮬레이트된 바이너리보다 잠재적으로 빠르게 실행됩니다.이는 일반적으로 해석된 프로그램과 컴파일된 프로그램 간의 성능 차이와 유사합니다.

정적 바이너리 변환

정적 바이너리 변환을 사용하는 변환기는 동적 바이너리 변환과 같이 먼저 코드를 실행할 필요 없이 실행 파일의 모든 코드를 타깃 아키텍처에서 실행하는 코드로 변환하는 것을 목표로 합니다.모든 코드를 번역자가 검출할 수 있는 것은 아니기 때문에, 이것은 올바르게 실시하기 매우 어렵습니다.예를 들어 실행 파일의 일부는 실행 시에만 값이 알려진 간접 브랜치를 통해서만 도달할 수 있습니다.

이러한 정적 바이너리 변환기 중 하나는 범용 슈퍼 옵티마이저 핍홀 테크놀로지(Sorav Bansal과 스탠포드 대학의 Alex Aiken에 의해 개발)를 사용하여 많은 소스 쌍과 타깃 쌍 간에 효율적인 변환을 수행하며 개발 비용은 상당히 저렴하고 타깃 바이너리의 고성능입니다.PowerPC에서 x86으로 변환하는 실험에서 일부 바이너리는 네이티브 버전을 능가하기도 했지만 평균적으로 네이티브 속도의 3분의 2로 실행되었습니다.

스태틱 바이너리 변환의 예

Honeywell그들의 Honeywell 200 시리즈 컴퓨터용 Liberator라는 프로그램을 제공했습니다. IBM 1400 시리즈 컴퓨터용 프로그램을 Honeywell 200 [1]시리즈용 프로그램으로 변환할 수 있습니다.

2014년, 1998년 비디오 게임 StarCraft의 ARM 아키텍처 버전이 정적 재컴파일 및 원래 x86 [2][3]버전의 추가 리버스 엔지니어링에 의해 생성되었습니다.Pandora 핸드헬드 커뮤니티는 필요한[4] 툴을 자체 개발하여 여러 [5][6]번 번역할 수 있었습니다.

예를 들어,[7] 2014년 비디오 게임 큐브 월드의 절차적 지형 생성기에 대해 x86-to-x64 정적 재컴파일이 성공적으로 생성되었습니다.

또 다른 예는 비디오 게임 슈퍼 마리오 브라더스의 NES-to-x86 정적 재컴파일 버전이다.2013년에 [8]LLVM을 사용하여 생성되었습니다.

2004년 스콧 엘리엇과 필립 R.닌텐도의 허친슨은 게임보이 바이너리에서 "C" 코드를 생성하는 도구를 개발했는데, 새로운 플랫폼을 위해 컴파일되고 항공사 엔터테인먼트 시스템에서 사용하기 [9]위해 하드웨어 라이브러리에 링크될 수 있었다.

1995년 벨 커뮤니케이션 연구소의 노먼 램지와 메리 F.프린스턴 대학 컴퓨터 과학부의 페르난데즈는 정적 어셈블리 [10]번역을 위한 기본 도구를 갖춘 The New Jersey Machine-Code Toolkit을 개발했습니다.

동적 바이너리 변환

Dynamic Binary Translation(DBT; 동적 바이너리 변환)은 짧은 코드 시퀀스(일반적으로 단일 기본 블록)를 확인한 후 이를 변환하고 결과 시퀀스를 캐시합니다.코드는 검출되었을 때 및 가능한 경우에만 변환되며 분기 명령은 이미 변환되어 저장된 코드(메모화)를 가리키도록 작성됩니다.

다이내믹 바이너리 변환은 단순한 에뮬레이션(에뮬레이터의 주요 읽기/복호화/실행 루프 제외)과는 다릅니다.이는 변환 시 큰 오버헤드를 초래합니다.이 오버헤드는 변환된 코드 시퀀스가 여러 번 실행되므로 상각될 수 있습니다.

보다 고도의 동적 변환기는 동적 재컴파일을 사용하여 변환된 코드가 계측되어 어떤 부분이 많이 실행되는지 확인하고 이러한 부분을 적극적으로 최적화합니다.이 기술은 JIT 컴파일러를 연상시킵니다.실제로 이러한 컴파일러(Sun의 HotSpot 테크놀로지 )는 가상 명령어 세트(바이트 코드)에서 실제 명령어까지의 동적 변환기로 볼 수 있습니다.

소프트웨어의 동적 바이너리 변환 예시

  • Apple Computer는 Power에 M68K 코드용 동적 번역 에뮬레이터를 구현했습니다.매우 높은 수준의 신뢰성, 성능 및 호환성을 실현한 Macintosh [11]PC 제품군(Mac 68K 에뮬레이터 참조).이것에 의해, 애플은 부분적으로 네이티브인 operating system만을 사용해 머신을 시장에 투입할 수 있게 되어, 최종 유저는 소프트웨어에의 투자를 희생하지 않고, 보다 고속의 새로운 아키텍처를 채용할 수 있게 되었습니다.부분적으로는 에뮬레이터가 매우 성공적이었기 때문에 운영 체제의 많은 부분이 에뮬레이트된 상태로 남아 있었습니다.2001년 Mac OS X(10.0)가 출시될 때까지 PowerPC 네이티브 운영체제(OS)로 완전히 전환되지 않았습니다.(Mac OS X "Classic" 런타임 환경은 Mac OS X 10.5까지 PowerPC Mac에서 이 에뮬레이션 기능을 계속 제공했습니다.)
  • 인텔 베이스의 Mac용 Mac OS X 10.4.4는, PPC 베이스의 하드웨어로부터 x86으로의 이행을 용이하게 하기 위해서, Rosetta 다이나믹 번역 레이어를 도입했습니다.Transitive Corporation이 애플용으로 개발한 Rosetta 소프트웨어는 Transitive의 QuickTransit 솔루션을 구현한 것입니다.
  • Quick Transit은 제품 수명 동안 SPARCx86, x86→PowerPCMIPSItanium 2 번역을 지원했습니다.
  • DEC는 번역 툴을 사용하여 사용자가 CISC VAX 아키텍처에서 Alpha RISC [citation needed]아키텍처로 이행할 수 있도록 지원했습니다.
  • HP ARES(자동 재번역 및 통합 환경 시뮬레이션)는[12] 고속 코드 해석과 2단계 동적 변환을 결합하여 HP-UX 11i for HPE Integrity [13]Servers에서 HP 9000 HP-UX 애플리케이션을 투명하고 정확하게 실행하는 소프트웨어 동적 바이너리 변환 시스템입니다.ARIES 퍼스트인터프리터는 사용자의 개입 없이 비특권 PA-RISC 명령의 완전한 세트를 에뮬레이트합니다.해석하는 동안 응용 프로그램의 실행 패턴을 모니터링하고 런타임에 자주 실행되는 코드만 기본 Itanium 코드로 변환합니다.ARIES는 2단계 동적 변환을 구현합니다.이 기술은 첫 번째 단계의 변환된 코드가 2단계 변환 중에 사용되는 런타임프로파일 정보를 수집하여 변환된 코드를 더욱 최적화합니다.ARRIES는 동적으로 변환된 코드를 코드 캐시라고 불리는 메모리버퍼에 저장합니다.변환된 기본 블록에 대한 추가 참조는 코드 캐시에서 직접 실행되므로 추가 해석이나 번역이 필요하지 않습니다.변환된 코드 블록의 타깃은 백패치가 적용되어 실행이 대부분의 시간 동안 코드 캐시에서 수행되도록 합니다.에뮬레이션의 마지막에, ARRIES 는 원래의 애플리케이션을 변경하지 않고, 변환 끝난 코드를 모두 폐기합니다.또, AIRIES 에뮬레이션 엔진은, HP 9000 HP-UX 애플리케이션의 시스템 콜, 신호 전달, 예외 관리, 스레드 관리, HP GDB의 디버깅 에뮬레이션, 애플리케이션의 코어 파일 작성을 에뮬레이션 하는 환경 에뮬레이션도 실장합니다.
  • DEC는 x86 어플리케이션을 Alpha [11]어플리케이션으로 변환하기 위한 FX!32 바이너리 트랜슬레이터를 만들었습니다.
  • Sun Microsystems의 Wabi 소프트웨어에는 x86에서 SPARC로의 동적 변환 명령이 포함되어 있습니다.
  • 2000년 1월 트랜스메타는 크루소라는 [14][15]이름의 새로운 프로세서 디자인을 발표했다.웹사이트 FAQ에서[16]

    스마트 마이크로프로세서는 엔진으로서의 하드웨어 VLIW 코어와 코드 모핑 소프트웨어라고 불리는 소프트웨어 층으로 구성되어 있다.코드 모핑 소프트웨어는 셸 […] 모핑 또는 x86 명령어를 Cruso 원어민 명령어로 변환하는 역할을 합니다.또한 Code Morphing 소프트웨어에는 다이내믹 컴파일러와 코드 옵티마이저가 포함되어 있습니다.[…] 그 결과 최소한의 전력만으로 퍼포먼스가 향상됩니다.[…] [이를 통해 Transmeta는 소프트웨어 애플리케이션의 대규모 기반에 영향을 주지 않고 VLIW 하드웨어와 Code Morping 소프트웨어를 개별적으로 진화시킬 수 있습니다.

  • 인텔은 IA-32 이그제큐션 레이어를 개발 및 구현했습니다.이는 Itanium 기반 시스템에서 IA-32 애플리케이션을 지원하도록 설계된 다이내믹 바이너리 트랜슬레이터입니다.Itanium 아키텍처용 Microsoft Windows Server 및 Red Hat, Suse Linux 버전에 포함되어 있습니다.IA-32 어플리케이션은 Itanium 프로세서에서 네이티브 IA-32 모드를 사용할 때보다 더 빠르게 실행할 수 있었습니다.
  • Dolphin(GameCube/Wii용 에뮬레이터)이 전력의 JIT 재컴파일 실행x86 및 AArch64의 PC 코드.

하드웨어에서의 다이내믹 바이너리 변환 예시

  • Pentium Pro 이후 인텔의 x86 CPU는 복잡한 CISC x86 명령을 RISC와 같은 내부 마이크로 오퍼레이션으로 변환합니다.
  • Nvidia Tegra K1 Denver는 느린 하드웨어 디코더 상의 ARM 명령어를 네이티브 마이크로코드 명령어로 변환하고 [citation needed]핫코드에는 소프트웨어 바이너리 변환기를 사용합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Honeywell Series 200 Summary Description (PDF). Honeywell. February 1966. p. 11. For example, the instruction repertoire of Series 200 processors is similar enough to those of several other processing systcms, viz., the IBM 1400 series, to allow automated, one-time translation of programs written for these competitive systems to a form suitable for execution on higher-performance Series 200 systems.
  2. ^ Steinlechner, Peter (2014-03-10). "Starcraft für ARM-Handheld kompiliert" (in German). golem.de. Retrieved 2014-03-25.
  3. ^ notaz (2014-03-04). "StarCraft". repo.openpandora.org. Retrieved 2014-03-26.
  4. ^ notaz (2014-03-01). "ia32rtools/". GitHub. Retrieved 2015-01-09.
  5. ^ notaz (2014-03-04). "Starcraft". openpandora.org. Retrieved 2014-03-29. The "no source, no port" rule is not completely true, you can get something similar (but not the same) as a port through static recompilation. Similar stuff was done several times by M-HT for some DOS games. The game was also converted for Android with somewhat similar approach.
  6. ^ M-HT. "Warcraft: Orcs & Humans". repo.openpandora.org.
  7. ^ Kærlev, Mathias (2014-04-14). "Practical and Portable X86 Recompilation". Retrieved 2014-08-08. but then the idea of somehow using the original x86 machine code presented itself. However, for our open server, we need to support x86-64 as well, and in that case, we absolutely need emulation or recompilation. […] Static recompilation to assembler seemed like a much better option, but to keep it portable, we would need to write backends for x86, x86-64, and possibly ARM/PowerPC.
  8. ^ Kelley, Andrew (2013-07-07). "Statically Recompiling NES Games into Native Executables with LLVM and Go". Retrieved 2013-08-08. This article presents original research regarding the possibility of statically disassembling and recompiling Nintendo Entertainment System games into native executables.
  9. ^ US 7765539, Elliott, Scott & Hutchinson, Phillip, "비디오 게임을 변환하는 시스템 및 방법", 2010년 발행
  10. ^ Ramsey, Norman; Fernandez, Mary F. (1995). "The New Jersey Machine-Code Toolkit". Proceeding TCON'95 Proceedings of the USENIX 1995 Technical Conference Proceedings. USENIX Association Berkeley, CA, USA: 24.
  11. ^ a b Wharton, John Harrison (1994-08-01). "Gary Kildall, industry pioneer, dead at 52: created first microcomputer languages, disk operating systems". Microprocessor Report. MicroDesign Resources Inc. (MDR). 8 (10). Archived from the original on 2016-11-18. Retrieved 2016-11-18. […] Ironically, many of the techniques Gary pioneered are being rediscovered now, ten years later. Apple and DEC are touting binary recompilation as a "new" technology for porting existing software to the PowerPC or Alpha architecture. Actually, DRI introduced an 8080-to-8086 binary recompiler in the early 1980s. […]
  12. ^ Carlson, Jim; Huck, Jerry (2003). Itanium Rising: Breaking Through Moore's Second Law of Computing Power. Prentice Hall PTR. ISBN 978-0-13046415-6. Retrieved 2015-01-09.
  13. ^ "HP ARIES Dynamic Binary Translator". HP. Retrieved 2015-01-09.
  14. ^ Stokes, Jon. "Transmeta Crusoe Explored". Ars Technica. Retrieved 2015-01-09.
  15. ^ Hughes, Rob (2000-01-20). "Transmeta's Crusoe Microprocessor". geek.com. Archived from the original on 2007-09-27.
  16. ^ "Transmeta Crusoe Processor Frequently Asked Questions FAQ". Transmeta. 2007. Archived from the original on 2007-01-10.

추가 정보