티스토리 뷰

조사

Dynamic Binary Translation

덕쑤 2013. 3. 28. 15:48

Dynamic Binary Translation

 

코드 변환 기법은 임의의 아키텍처의 모든 바이너리 코드를 새로운 바이너리 코드로 변환하는 정적(static)코드 변환 기법과 코드가 실행되는 도중에 (just-in-time translation at runtime) 코드를 변환하는 동적(dynamic) 코드 변환 기법으로 나눌 수 있다.

 정적 코드 변환 기법 은 실행 전에 모든 바이너리 코드를 새로운 바이너리 코드로 변환하기 때문에 코드가 실행하는 과정에서 추가 실행시간이 발생하지 않는 점과 복잡한 바이너리 코드에 대해서도 임의로 변환할 수 있는 장점이 있다. 하지만 정적으로 코드 영역이 할당되어야 하는 점은 동적 로딩 (dynamic loading), 자가 수정(self-modifying), 간접 제어 분기(indirect control transfers)에 제한사항이 된다. 

 이에 비해, 동적 코드 변환 기법은 코드가 처음으로 실행 되기 바로 전에 변환한다. 따라서 프로그램의 변화에 쉽게 적응할 수 있고 코드 영역을 동적으로 할당 할 수 있다. 따라서 정적 코드 변환 기법이 갖는 문제들을 해결할 수 있을 뿐만 아니라 새로운 코드를 동시에 생성할 수 있기 때문에 변환 시 발생하는 오버헤드에도 불구하고 정적 코드 변환 기법보다 빠르게 변환 할 수 있다.

대부분의 동적 코드 변환기법은 오버헤드를 줄이기 위해 코드 캐시를 할당한다. 변환된 코드는 코드 캐시영역에 위치하게 되고, 같은 코드가 재실행될 때에는 코드 캐시영역에 위치한 해당코드의 변환코드를 실행시킴으 로써 변환 과정의 오버헤드를 줄이다. 이 과정에서 중요한 원칙은 사용자 프로그램의 스택 영역은 변하지 않고 고정된다는 것이다. 이는 프로그램이 변환되었는지 알 수 없는 경우에 변환된 스택 영역에서의 검색을 통해 가상화를 가능하게 해준다. 변환되지 않은 반환 주소 (return address)는 추가의 검색 오버헤드(additional look up overhead)를 야기하지만 자가 수정코드, 디버깅, 예외 관리(exception management)등의 프로그램에서 사용된다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함