KR20180098213A - 단계형 중간언어 변환 장치 및 방법 - Google Patents

단계형 중간언어 변환 장치 및 방법 Download PDF

Info

Publication number
KR20180098213A
KR20180098213A KR1020180100655A KR20180100655A KR20180098213A KR 20180098213 A KR20180098213 A KR 20180098213A KR 1020180100655 A KR1020180100655 A KR 1020180100655A KR 20180100655 A KR20180100655 A KR 20180100655A KR 20180098213 A KR20180098213 A KR 20180098213A
Authority
KR
South Korea
Prior art keywords
intermediate language
language
preprocessing
generating
generated
Prior art date
Application number
KR1020180100655A
Other languages
English (en)
Inventor
차상길
류찬호
정승일
오동엽
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020180100655A priority Critical patent/KR20180098213A/ko
Publication of KR20180098213A publication Critical patent/KR20180098213A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

바이너리 파일로부터 역어셈블링된 어셈블리 언어를 수신하고, 상기 어셈블리 언어로부터 전처리 중간언어를 생성하는 전처리부, 그리고 전처리 중간언어로부터 제1 단계 중간언어를 생성하고, 제1 단계 중간언어를 입력으로 받아 제2 단계 중간언어를 생성하며, 미리 설정된 횟수에 생성된 단계별 중간언어를 최종 중간언어로 생성하는 후처리부를 포함하여 중간언어 변환 장치가 구성된다.

Description

단계형 중간언어 변환 장치 및 방법{Apparatus and method for intermediate language transformation of binary data}
본 발명은 단계형 중간언어 변환 장치 및 방법에 관한 것이다.
중간언어는 컴파일러가 소스코드를 바이너리 코드로 변환하기 위해 생성하는 언어이다. 즉, 다양한 플랫폼의 바이너리를 하나의 통일된 형태로 표현하는 것이 중간언어이다.
그러나, 컴파일 과정에서 소스에 존재하는 타입 정보, 변수 이름 등의 추상 정보가 모두 사라진 것이 바이너리 코드이기 때문에, 바이너리 코드로부터 중간언어를 변환하는 과정은 컴파일과 달리 매우 어려운 문제에 해당한다. 따라서, 중간언어를 변환하는 과정에서 소실된 추상 정보를 복원하는 과정이 필요하다.
바이너리 코드를 중간언어로 변환하는 것은, 바이너리 분석에 있어 가장 중요한 기반 기술이다. 중간언어로의 변환 과정 없이는 기존의 프로그램 분석 기법을 적용할 수 없게 된다. 뿐만 아니라 역공학의 측면에 있어서도 저수준의 코드보다는 고수준의 언어를 통해 분석을 진행해야 효율성이 높아진다.
기존의 중간언어 변환은 대부분 하나의 단계로 이루어진다. 즉, 바이너리 코드에 대한 역어셈블을 진행함과 동시에 하나의 중간언어로 표현하는 방식을 택한다. 이러한 방식은 저수준의 기계어를 표현하는 데는 유리하지만, 고수준의 언어를 표현하기에는 비효율적이다.
예를 들어 고수준 언어에 존재하는 For 문을 표현하려면 저수준의 중간언어에서는 여러개의 중간언어 문장을 연결해야만 가능하다. 그 뿐 아니라 고수준의 언어에 존재하는 타입정보 역시 저수준의 추상구문트리(AST: Abstract Syntax Tree) 안에는 해당 정보를 담을 수가 없다.
따라서, 본 발명은 단계별 중간언어를 구성하여 효율적인 바이너리 분석이 가능하도록 하는 단계형 중간언어 변환 장치 및 방법을 제공한다.
상기 본 발명의 기술적 과제를 달성하기 위한 본 발명의 하나의 특징인 중간언어 변환 장치는,
바이너리 파일로부터 역어셈블링된 어셈블리 언어를 수신하고, 상기 어셈블리 언어로부터 전처리 중간언어를 생성하는 전처리부; 및 상기 전처리 중간언어로부터 제1 단계 중간언어를 생성하고, 상기 제1 단계 중간언어를 입력으로 받아 제2 단계 중간언어를 생성하며, 미리 설정된 횟수에 생성된 단계별 중간언어를 최종 중간언어로 생성하는 후처리부를 포함한다.
상기 후처리부는, 상기 전처리 중간언어를 입력으로 받고, 상기 전처리 중간언어로부터 상기 제1 단계 중간언어를 생성하는 제1 후처리기; 및 상기 제1 중간언어를 입력으로 받고, 상기 제1 중간언어로부터 상기 제2 단계 중간언어를 생성하는 제2 후처리기를 포함할 수 있다.
상기 제1 단계 중간언어의 레벨은 상기 전처리 중간언어의 레벨보다 상위 레벨이고, 상기 제2 단계 중간언어의 레벨은 상기 제1 단계 중간언어의 레벨보다 상위 레벨일 수 있다.
상기 전처리부는, 상기 바이너리 파일이 생성된 환경 정보인 바이너리 정보를 수신하고, 상기 전처리 중간언어를 생성할 때 상기 바이너리 정보를 토대로 추상화 정보를 도출한 후 상기 전처리 중간언어를 생성할 수 있다.
상기 본 발명의 기술적 과제를 달성하기 위한 본 발명의 또 다른 특징인 중간언어 변환 장치가 어셈블리 언어를 중간언어로 변환하는 방법은,
상기 어셈블리 언어로부터 전처리 중간언어를 생성하는 단계; 상기 생성한 전처리 중간언어로부터 제1 단계 중간언어를 생성하는 단계; 상기 제1 단계 중간언어로부터 제2 단계 중간언어를 생성하는 단계; 및 상기 생성한 제2 단계 중간언어가 미리 설정한 단계의 마지막 단계별 중간언어이면, 상기 제2 단계 중간언어를 최종 중간언어로 설정하는 단계를 포함한다.
상기 전처리 중간언어를 생성하는 단계는, 상기 어셈블리 언어에 대한 바이너리 파일이 생성된 환경 정보인 바이너리 정보를 수신하는 단계; 및 상기 바이너리 정보를 토대로 상기 어셈블리 언어로부터 추상화 정보를 도출하는 단계를 포함할 수 있다.
상기 제2 단계 중간언어를 생성하는 단계는, 상기 제2 단계 중간언어가 상기 미리 설정한 단계의 마지막 단계별 중간언어가 아니면, 상기 제2 단계 중간언어를 입력으로 받아 제3 단계 중간언어를 생성하는 단계를 더 포함할 수 있다.
상기 제1 단계 중간언어, 제2 단계 중간언어 및 제3 단계 중간언어는 각각 미리 설정된 블록 단위로 생성되며, 상기 블록 단위는 상기 바이너리 파일을 구성하고 있는 함수 또는 모듈 중 어느 하나의 단위에 해당할 수 있다.
본 발명에 따르면, 바이너리 코드를 저수준에서부터 고수준에 이르는 언어로 표현할 수 있다.
또한, 고수준의 중간언어를 통해 역공학의 효율을 높일 수 있으며, 바이너리에 존재하지 않는 다양한 추상적 정보를 추론할 수 있다.
도 1은 일반적인 프로그램 생성 과정을 나타낸 예시도이다.
도 2는 본 발명의 실시예에 따른 중간언어 변환 장치가 포함된 환경의 예시도이다.
도 3은 본 발명의 실시예에 따른 중간언어 변환 장치의 구조도이다.
도 4는 본 발명의 실시예에 따른 중간언어 변환 방법을 통해 프로그램을 복원하는 방법에 대한 흐름도이다.
아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 도면을 참조로 하여 본 발명의 실시예에 따른 중간언어 변환 장치 및 방법에 대해 설명한다. 본 발명의 실시예에 대해 설명하기 앞서, 일반적인 프로그램 생성 과정에 대해 도 1을 참조로 설명한다.
도 1은 일반적인 프로그램 생성 과정을 나타낸 예시도이다.
도 1에 도시된 바와 같이, 일반적인 프로그램 생성 과정은 프로그램에 대한 아이디어를 가지고 프로그램 개발자가 작성한 소스 코드가 입력되면(S10), 프로그램은 입력된 소스 코드를 컴파일 과정을 거쳐 중간언어와 어셈블리 언어로 생성한다(S20, S30). 그리고 생성한 어셈블리 언어는 컴퓨터가 이해할 수 있는 바이너리 코드로 변환되어, 프로그램이 동작된다(S40).
이와 같이, 일반적으로 프로그램 생성 과정에서는 소스코드에서 어셈블리 언어로 변환될 때 한 번의 중간언어 생성 단계만을 거치게 된다. 그리고 일반적인 프로그램 과정의 역공학 과정에서도 동일하게 한 번의 중간언어 생성 단계가 발생하는데, 이는 저수준의 기계어 표현시에는 유리리하다. 그러나 고수준의 언어에 존재하는 다양한 반복문이나 조건문들을 표현하기 위해서는, 여러 개의 중간언어 문장을 연결해야만 표현할 수 있기 때문에 비효율적이다.
따라서, 역공학 과정에서 단계별 중간언어를 구성하여 효율적인 바이너리 분석의 기반을 제공할 뿐만 아니라, 멀티 플랫폼에서 바이너리 코드를 표현 가능한 중간언어를 생성하여, 다양한 플랫폼에 대한 표현 및 확장이 용이하도록 하고 단계별 중간언어를 생성하여 고수준 코드 정보 확장이 가능하도록 하는 중간언어 변환 장치 및 방법에 대해 도 2 내지 도 4를 참조로 설명한다.
도 2는 본 발명의 실시예에 따른 중간언어 변환 장치가 포함된 환경의 예시도이다.
도 2에 도시된 바와 같이, 다양한 형태의 바이너리 코드, 바이너리 코드가 작성된 환경의 운영체계(OS) 정보나 명령체계(ISA: Instruction Set Architecture) 정보들을 토대로 바이너리 정보를 파악한다. 바이너리 코드에서 변환되어 생성된 어셈블리 언어는, 파악한 바이너리 정보와 함께 중간언어 변환 장치(100)로 입력된다.
여기서, 바이너리 정보를 파악하는 예에 대해 설명하면, 바이너리 파일의 파일 저장 형태가 여러 형태(예를 들어, PE, ELF, MACH 등) 중 PE 파일 형식인 경우 PE 뷰어 툴(tool)을 이용하면 운영체계 정보나 명령체계 정보를 쉽게 파악할 수 있다. 이와 같이 바이너리 정보를 파악하는 방법은 다양하게 있으며, 본 발명의 실시예에서는 어느 하나의 방법으로 한정하지 않는다.
중간언어 변환 장치(100)는 어셈블리 언어와 바이너리 정보를 토대로 복수의 단계의 중간 언어를 생성한다. 복수의 단계 각각에서 생성되는 중간언어는 기본 블록 단위로 결합되어 중간표현으로 생성된다. 생성된 중간표현은 다음 단계의 중간표현을 생성하는데 이용되며, 이에 대해서는 이후 상세히 설명한다.
이상에서 설명한 환경에서, 어셈블리 언어와 바이너리 정보를 이용하여 어셈블리 언어를 중간언어로 변환하는 중간언어 변환 장치(100)의 구조에 대해 도 3을 참조로 설명한다. 중간언어 변환 장치(100)는 일반적인 프로그램에서의 중간언어 번역기에 해당하며, 설명의 편의를 위하여 중간언어 변환 장치라 지칭하여 설명한다.
도 3은 본 발명의 실시예에 따른 중간언어 변환 장치의 구조도이다.
도 3에 도시된 바와 같이, 중간언어 변환 장치(100)는 전처리부(110)와 후처리부(120)를 포함한다.
전처리부(110)는 중간언어 변환 장치(100)과 연결되어 있으며 중간언어 변환 장치(100)의 앞단에 위치한 역어셈블러(도면 미도시)로부터 어셈블리 언어를 수신한다. 그리고 전처리부(110)는 수신한 어셈블리 언어를 번역하여 중간언어로 생성하기 위하여 전처리를 수행한다.
즉, 전처리부(110)는 어셈블리 언어로부터 추상화(abstraction) 정보를 도출한 후, 저레벨(low level) 중간언어(이하, 설명의 편의를 위하여 '전처리 중간언어'라 지칭함)를 생성한다. 여기서, 추상화 정보라 함은 어셈블리 언어에 포함된 변수, 타입 등의 데이터 정보들을 의미한다. 그리고 생성한 전처리 중간언어에는 논리적 연산 구조 등의 흐름 정보를 포함한다.
전처리부(110)가 어셈블리 언어를 전처리할 때, 외부로부터 입력된 바이너리 정보를 참고하여 추상화 정보를 도출한 후 전처리 중간언어로 생성한다. 전처리부(110)가 바이너리 정보를 참고하는 것은, 바이너리 코드는 OS나 ISA, 그리고 지원하는 하드웨어에 따라 각각 다른 형태로 생성되기 때문이다.
따라서, 전처리부(110)는 바이너리 코드로부터 변환되어 생성된 기계어인 어셈블리 언어를 전처리하기 위해서는, 기계어가 생성된 환경에 대한 정보인 바이너리 정보가 필요하다. 이를 위해, 본 발명의 실시예에서는 바이너리 정보에 바이너리 파일이 생성된 운영체계 정보와, 상기 바이너리 파일을 인식하기 위한 명령체계 정보가 포함되어 있는 것을 예로 하여 설명한다.
전처리부(110)가 바이너리 정보를 참고하여 어셈블리 언어를 전처리하고, 어셈블리 언어로부터 추상화 정보를 도출하여 전처리 중간언어로 생성하는 방법은 여러 방법으로 수행할 수 있으므로, 본 발명의 실시예에서는 상세한 설명을 생략한다.
복수의 단계별 후처리기들을 포함하는 후처리부(120)는 전처리부(110)에서 생성한 전처리 중간언어를 미리 설정된 단계만큼 반복 번역하여, 기준 블록(basic-block) 단위의 단계별 중간언어를 생성한다. 그리고 단계별 중간언어가 미리 설정한 단계 차수만큼 번역되면 고레벨(high level) 중간언어(이하, 설명의 편의를 위하여, '최종 중간언어'라 지칭함)가 생성된다.
여기서, 최종 중간언어는 소스파일로 생성되기 전 단계의 중간언어로, 상위개념의 프로그래밍 언어로 기술되는 표현과 동일한 중간언어를 의미한다. 최종 중간언어로부터 언어적인 특성(예를 들어, 문법 등)이 고려되면, 소스코드로 생성될 수 있다.
그리고, 기준 블록 단위라 함은, 본 발명의 실시예에 따른 단계별 중간언어 표현의 기본 단위로, 분기 명령 등의 기준점을 중심으로는 블록 기반의 표현을 의미한다. 즉, 바이너리 파일에서 어셈블리 언어로 변환하게 되면, 생성된 어셈블리 언어만으로는 바이너리 파일의 흐름을 파악하기 어렵다. 따라서, 바이너리 파일의 전체 구성을 용이하게 파악할 수 있도록, 바이너리 파일을 구성하는 함수나 모듈 단위로 단계별 중간언어를 표현하여, 여러 개의 중간 언어의 연결 없이도 하나의 중간언어로 고수준의 언어를 표현할 수 있다.
제1 단계 후처리기(120-1)가 전처리 중간언어를 번역하여 생성한 단계별 중간언어인 제1단계 중간언어는, 전처리 중간언어보다 상위레벨의 중간언어로 생성된다. 그리고 생성된 상위레벨의 중간언어인 제1 단계 중간언어를 제2 단계 후처리기(120-2)가 다시 번역하여, 제1 단계 중간언어보다 상위레벨의 제2 단계 중간언어로 생성한다.
후처리부(120)는 이와 같은 절차를 미리 설정한 단계수만큼 반복하여 단계별 중간언어를 생성하고, 마지막으로 번역된 중간언어가 최종 중간언어로 생성한다. 이때, 후처리부(120)는 단계별 중간언어를 생성할 때 마다 다양한 정보를 단계별로 추상화한다.
이를 위해, 본 발명의 실시예에서는 복수의 단계별 후처리기(120-1∼120-n)들이 후처리부(120)를 형성하는 것을 예로 하여 설명하나, 하나의 후처리부(120)에서 반복적으로 수행할 수 있다.
그리고, 각 단계별 후처리기(120-1∼120-n)에는 단계별 중간언어를 생성하기 위한 중간언어 문법이 정의되어 있다. 여기서 각 단계별 후처리기(120-1∼120-n)에 저장된 중간언어 문법의 형태나 중간언어 문법을 정의하는 방법은 어느 하나의 방법으로 한정하지 않는다.
또한, 각 단계별 후처리기(120-1∼120-n)들은 단계별 중간언어를 생성하기 위해 정의되는 단계에 따라 단계별 후처리기의 수가 유동적으로 생성되거나, 또는 이미 생성되어 있는 단계별 후처리기들 중 일부만 사용하는 등 다양한 형태로 구현될 수 있으므로, 본 발명의 실시예에서는 어느 하나의 방법으로 한정하지 않는다.
그리고, 단계별 중간언어는 중간언어의 용도에 따라 다양하게 표현될 수 있다. 예를 들어, 취약점 분석용 또는 악성코드 분석용 등 역공학의 목적에 따라 단계별 중간언어가 특성을 고려하여 표현될 수 있다. 단계별 중간언어의 표현 방법은 여러 방법으로 수행할 수 있으며, 본 발명의 실시예에서는 상세한 설명을 생략한다.
이상에서 설명한 중간언어 변환 장치(100)를 이용하여, 어셈블리 언어를 중간언어로 변환하는 방법에 대해 도 4를 참조로 설명한다.
도 4는 본 발명의 실시예에 따른 중간언어 변환 방법을 통해 프로그램을 복원하는 방법에 대한 흐름도이다.
도 4에 도시된 바와 같이, 다양한 명령체계나 운영체계를 가지는 시스템들 중 어느 하나의 시스템에서 바이너리 코드가 생성되면(S100), 생성된 바이너리 코드는 역어셈블러(도면 미도시)에서 어셈블리 언어로 변환된다(S110). 바이너리 코드가 생성되는 방법이나 역어셈블러가 바이너리 코드를 어셈블리 언어로 변환하는 방법은 이미 알려진 사항으로, 본 발명의 실시예에서는 상세한 설명을 생략한다.
중간언어 변환장치(100)는 S110 단계에서 역어셈블러가 생성한 어셈블리 언어를 수신하면, 전처리부(110)가 바이너리 정보를 이용하여 어셈블리 언어를 전처리 중간언어로 생성한다(S120). 여기서, 바이너리 정보는 S100 단계에서 바이너리 코드가 생성된 환경에 대한 정보로, 명령체계 정보, 운영체계 정보, 그리고 바이너리 코드가 지원하는 하드웨어 정보 등을 포함한다.
S120 단계에서 전처리부(110)가 전처리 중간언어를 생성하면, 후처리부(120)는 S120 단계에서 생성된 전처리 중간언어를 입력받아 미리 설정된 횟수만큼 중간언어로의 번역을 실행하여 각 차수의 단계별 중간언어를 생성한다(S130). 즉, 후처리부(120)는 전처리 중간언어를 입력받아, 1차로 중간언어로 해석한 뒤 제1 단계 중간언어를 생성한다. 여기서 제1 단계 중간언어는 전처리 중간언어보다 상위레벨 언어로 생성된다. 상위레벨 언어로 생성된다 함은 사람이 이해하기 언어로 해석된다는 것을 의미한다.
후처리부(120)는 S130 단계에서 생성한 단계별 중간언어에서 단계별로 추상화 정보를 도출한다(S140). 여기서 단계별 중간언어에서 추상화 정보를 도출하는 방법은 여러 방법으로 수행할 수 있으며, 도출된 추상화 정보 또한 역공학의 목적에 따라 다양하게 도출될 수 있으므로, 본 발명의 실시예에서는 어느 하나로 한정하지 않는다.
여기서, 추상화 정보는 데이터 추상화 정보와 흐름 추상화 정보를 포함한다. 데이터 추상화 정보는 단순 데이터, 연속된 데이터, 복합 데이터, 데이터의 은닉성 등의 순서로 단위 데이터 크기에서 복잡하고 다양한 데이터를 복원하는 순서로 중간 언어를 정의하기 위한 정보에 해당한다. 그리고, 흐름 추상화 정보는 단순 논리 값, 반복, 분기, 함수 등 프로그램의 흐름 변화에 대한 내용을 복원할 수 있는 정보를 의미한다.
한편, 후처리부(120)는 S130단계에서 생성한 단계별 중간언어가 미리 설정한 단계에 대응하는 단계별 중간언어인지 확인한다(S150). 만약 생성한 단계별 중간언어가 미리 설정한 단계에 대응하는 단계별 중간언어라면, 해당 단계별 중간언어를 최종 중간언어로써 출력한다(S160). 본 발명의 실시예에서는 S160 단계에서 최종 중간언어가 출력되는 것만 나타내었으나, 각 단계별 중간언어들이 모두 출력될 수도 있다.
S160 단계에서 출력된 최종 중간언어는 이후 코드 프린팅에 의해 소스 코드로 생성된다(S170). 코드 프린팅에 대한 사항은 이미 알려진 것으로, 본 발명의 실시예에서는 상세한 설명을 생략한다.
한편, S150 단계에서 확인한 결과, 생성한 단계별 중간언어가 미리 설정한 단계에 대응하는 단계별 중간언어가 아니라면, 해당 단계별 중간언어를 해석하여 다음 단계의 단계별 중간 언어를 생성하는 S130 단계 이후의 절차를 수행한다.
예를 들어, 사용자의 입력 또는 기타 입력에 의해 모두 3단계의 단계별 중간언어가 생성되도록 설정되어 있다면, 후처리부(120)는 전처리 중간언어를 해석하여 제1 단계 중간언어를 생성한다. 그리고 생성한 제1 단계 중간언어를 해석하여 제1 단계 중간언어보다 상위레벨의 제2 단계 중간언어를 생성한다.
마지막으로, 제2 단계 중간언어를 다시 한번 해석하여, 제2 중간단계 언어보다 상위레벨의 제3 단계 중간언어를 생성한다. 여기서, 제3 단계 중간언어가 최종 중간언어가 된다. 이와 같이, 종래에 한 단계로 이루어진 중간언어 생성단계를 복수 단계의 중간언어 생성단계로 표현함으로써, 고수준의 언어를 표현하기 용이하다. 또한, 저수준의 중간언어를 입력 받아 고수준의 중간언어를 생성하기 때문에, 각 단계별로 생성된 중간언어에 대한 검증도 가능하다.
이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.

Claims (6)

  1. 중간언어 변환 장치에 있어서,
    바이너리 파일로부터 역어셈블링된 어셈블리 언어를 수신하고, 상기 어셈블리 언어로부터 전처리 중간언어를 생성하는 전처리부; 및
    상기 전처리 중간언어로부터 미리 설정된 횟수만큼 복수의 중간언어 생성 단계를 거쳐 최종 중간언어를 생성하는 후처리부
    를 포함하고,
    상기 후처리부는,
    상기 전처리 중간언어를 입력으로 받고, 상기 전처리 중간언어로부터 상기 제1 단계 중간언어를 생성하는 제1 후처리기; 및 상기 제1 단계 중간언어를 입력으로 받고, 상기 제1 단계 중간언어로부터 제2 단계 중간언어를 생성하는 제2 후처리기를 포함하며,
    제1 후처리기는 상기 전처리 중간언어를 처리하여 전처리 중간언어의 레벨보다 상위 레벨의 제1 단계 중간언어를 생성하고, 상기 제2 후처리기는 상기 제1 후처리기가 생성한 상기 제1 단계 중간언어를 입력으로 받아 상기 제1 단계 중간언어의 레벨보다 상위 레벨의 제2 단계 중간언어를 생성하며, 미리 설정된 횟수에 따라 복수의 단계별 중간언어를 생성한 뒤 최종 중간언어로 생성하고,
    상기 단계별 중간언어를 생성하기 위해 미리 설정된 횟수에 따라 복수의 단계별 중간 언어를 생성하기 위해 복수의 후처리기가 상기 후처리부에 포함되는 중간언어 변환 장치.
  2. 제1항에 있어서,
    상기 전처리부는,
    상기 바이너리 파일이 생성된 환경 정보인 바이너리 정보를 수신하고,
    상기 전처리 중간언어를 생성할 때 상기 바이너리 정보를 토대로 추상화 정보를 도출한 후 상기 전처리 중간언어를 생성하는 중간언어 변환 장치.
  3. 제2항에 있어서,
    상기 바이너리 정보는 상기 바이너리 파일이 생성된 운영체계 정보와 상기 바이너리 파일을 인식하기 위한 명령체계 정보를 포함하는 중간언어 변환 장치.
  4. 중간언어 변환 장치가 어셈블리 언어를 중간언어로 변환하는 방법에 있어서,
    상기 어셈블리 언어로부터 전처리 중간언어를 생성하는 단계;
    상기 생성한 전처리 중간언어로부터 상기 전처리 중간언어의 레벨보다 상위 레벨의 제1 단계 중간언어를 생성하는 단계;
    상기 제1 단계 중간언어의 레벨보다 상위 레벨인 제2 단계 중간언어를 상기 제1 단계 중간언어로부터 생성하는 단계;
    상기 제2 단계 중간언어가 상기 미리 설정한 단계의 마지막 단계별 중간언어가 아니면, 상기 제2 단계 중간언어를 입력으로 받아 상기 제2 단계 중간언어의 레벨보다 상위 레벨인 제3 단계 중간언어를 생성하는 단계; 그리고
    상기 생성한 제2 단계 중간언어가 미리 설정한 단계의 마지막 단계별 중간언어이면, 상기 제2 단계 중간언어를 최종 중간언어로 설정하는 단계
    를 포함하고,
    상기 제1 단계 중간언어, 제2 단계 중간언어 및 제3 단계 중간언어는 각각 미리 설정된 블록 단위로 생성되며, 상기 블록 단위는 바이너리 파일을 구성하고 있는 함수 또는 모듈 중 어느 하나의 단위에 해당하는 중간언어 변환 방법.
  5. 제4항에 있어서,
    상기 전처리 중간언어를 생성하는 단계는,
    상기 어셈블리 언어에 대한 바이너리 파일이 생성된 환경 정보인 바이너리 정보를 수신하는 단계; 및
    상기 바이너리 정보를 토대로 상기 어셈블리 언어로부터 추상화 정보를 도출하는 단계
    를 더 포함하는 중간언어 변환 방법.
  6. 제5항에 있어서,
    상기 바이너리 정보는 상기 바이너리 파일이 생성된 운영체계 정보와 상기 바이너리 파일을 인식하기 위한 명령체계 정보를 포함하는 중간언어 변환 방법.
KR1020180100655A 2018-08-27 2018-08-27 단계형 중간언어 변환 장치 및 방법 KR20180098213A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180100655A KR20180098213A (ko) 2018-08-27 2018-08-27 단계형 중간언어 변환 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180100655A KR20180098213A (ko) 2018-08-27 2018-08-27 단계형 중간언어 변환 장치 및 방법

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020160155803A Division KR20180057317A (ko) 2016-11-22 2016-11-22 단계형 중간언어 변환 장치 및 방법

Publications (1)

Publication Number Publication Date
KR20180098213A true KR20180098213A (ko) 2018-09-03

Family

ID=63601014

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180100655A KR20180098213A (ko) 2018-08-27 2018-08-27 단계형 중간언어 변환 장치 및 방법

Country Status (1)

Country Link
KR (1) KR20180098213A (ko)

Similar Documents

Publication Publication Date Title
CN108388425B (zh) 一种基于lstm自动补全代码的方法
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
JPH08202545A (ja) ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
CN107291522B (zh) 一种面向自定义规则文件的编译优化方法及系统
RU2004100525A (ru) Способ и система для записи макросов в синтаксисе, независимом от языка
CN112764738A (zh) 基于多视图程序特征的代码自动生成方法及系统
US20020026632A1 (en) Universal computer code generator
Fedorchenko et al. Equivalent transformations and regularization in context-free grammars
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
US20150020051A1 (en) Method and apparatus for automated conversion of software applications
Zhang et al. Automated extraction of grammar optimization rule configurations for metamodel-grammar co-evolution
KR20180098213A (ko) 단계형 중간언어 변환 장치 및 방법
CN104731705B (zh) 一种基于复杂网络的脏数据传播路径发现方法
KR20180057317A (ko) 단계형 중간언어 변환 장치 및 방법
CN112270176B (zh) 深度学习框架中模式转换的方法、装置和计算机存储介质
KR20230065017A (ko) 인공지능 분석 기반 프로그램 소스코드의 요약문 생성 장치 및 방법
KR101629068B1 (ko) 프로그램 언어 변환 장치 및 프로그램 언어 변환 장치를 구비하는 검증 장치
Akers et al. Case study: Re-engineering C++ component models via automatic program transformation
Sunitha Compiler construction
US20090112568A1 (en) Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
US20240078435A1 (en) Systems and methods for unit test generation using reinforcement learning augmented transformer architectures
JP3141945B2 (ja) コンパイル装置
JP2861630B2 (ja) 接続構造解析器
CN109814869A (zh) 应用于机器人的解析方法、系统及计算机可读存储介质

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application