개요

Binary translation은 GuestOS에서 트랩과 같은 방식으로 처리해야하는 Sensitive instruction들을 효과적으로 처리하기 위해서 GuestOS의 바이너리를 패치하는 방식을 말한다. 정적인 타임에 모두 편환하는 것이 아니라 동적인 타임에 변환함으로서, 변환 효율을 높이는 방식을 사용한다. Trap and emulate만을 사용하는 Classic한 방식보다 더 빠른 성능을 보일 수 있다. 그러나 Hardware virtualization기법의 발달로 인해서 현재는 하드웨어 적으로 구현이 되지 않은 새로운 Feature가 있는 경우를 제외하고는 거의 사용하지 않는 사장된 기술이 되었다.

Binary translation은 다음과 같은 경우를 처리해야 한다.

  • PC-relative address: Binary translation을 하게 되면 RIP+OFFSET이라는 경우에서 OFFSET이 코드 길이가 변경됨으로 달라져서 이 것을 수정해 주어야 한다.
  • Direct control flow
  • Indirect control flow
  • Sensitive instruction

Binary translation은 x86을 가상화 시킬 수 있으며, 어떤 OS라도 가상화 시킬 수 있다는 장점이 있다. 그러나 Direct execution이나 하드웨어 기반 방식보다 느리며, Memory의 추가 사용이 요구되고, JMP, CALL, RIP-relative와 같은 경우도 패칭해주어야 한다는 단점이 있다.