KR101559651B1 - Method and apparatus of dynamic analysis - Google Patents
Method and apparatus of dynamic analysis Download PDFInfo
- Publication number
- KR101559651B1 KR101559651B1 KR1020140010340A KR20140010340A KR101559651B1 KR 101559651 B1 KR101559651 B1 KR 101559651B1 KR 1020140010340 A KR1020140010340 A KR 1020140010340A KR 20140010340 A KR20140010340 A KR 20140010340A KR 101559651 B1 KR101559651 B1 KR 101559651B1
- Authority
- KR
- South Korea
- Prior art keywords
- binary code
- instruction
- instructions
- dynamic analysis
- processor
- Prior art date
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 94
- 230000000875 corresponding Effects 0.000 claims abstract description 18
- 231100000486 side effect Toxicity 0.000 claims description 5
- 206010057190 Respiratory tract infection Diseases 0.000 claims description 4
- 230000014509 gene expression Effects 0.000 description 10
- 230000003068 static Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 238000000034 method Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 2
- 230000001419 dependent Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006011 modification reaction Methods 0.000 description 2
- 231100000957 no side effect Toxicity 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000003287 optical Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
Abstract
프로그램의 바이너리 코드는 동적으로 또는 정적으로 분석될 수 있다. 그 중 중간 언어를 사용하여 바이너리 코드를 동적으로 분석하기 위한 방법 및 장치가 제공된다. 동적 분석 방법 및 장치는 바이너리 코드를 사용하여 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성할 수 있다. 동적 분석 방법 및 장치는 생성된 하나 이상의 중간 명령어들에 기반하여 동적 분석을 수행할 수 있다.The binary code of the program can be analyzed dynamically or statically. Methods and apparatus are provided for dynamically analyzing binary code using an intermediate language. The dynamic analysis method and apparatus may use the binary code to generate one or more intermediate instructions of the intermediate language corresponding to the binary code. The dynamic analysis method and apparatus can perform dynamic analysis based on one or more intermediate instructions generated.
Description
기술 분야는 동적 분석에 관한 것으로, 특히 프로그램의 바이너리 코드를 동적으로 분석하는 방법 및 장치에 관한 것이다.The technical field relates to dynamic analysis, and more particularly, to a method and apparatus for dynamically analyzing a binary code of a program.
종래의 중간 언어는 정적 분석을 위해 사용되는 비-네이티브 언어일 수 있다. 즉, 중간 언어는 디스어셈블러의 표현법들 중 하나일 수 있다.Conventional intermediate languages may be non-native languages used for static analysis. That is, the intermediate language can be one of the disassembler expressions.
중간 언어는 실행 경로 확장을 수행함에 있어서, 부분적인 정적 분석의 수행에 의해 결과를 획득하는 방식으로 구현될 수 있다. An intermediate language can be implemented in such a way that in performing execution path expansion, the result is obtained by performing a partial static analysis.
종래의 중간 언어는 정적 분석에 대한 것일 수 있으므로, 동적 분석의 기호 실행의 수행을 위해서는 적합하지 않은 구조일 수 있다. 종래의 중간 언어는 복잡한 구조를 갖기 때문에 기호 실행에 적합하지 않을 수 있다. 예를 들면, 종래의 중간 언어는 묵시적 피연산자(implicit operand)의 처리를 위해 유사한 시멘틱을 가진 명령어들을 별개의 명령어들로 각각 변환해야 하는 제한을 가질 수 있다. 변환에 의해 생성된 다양한 명령어들은 기호 실행의 효율성을 낮출 수 있다.Conventional intermediate languages may be for static analysis, and thus may not be suitable for performing symbolic execution of dynamic analysis. The conventional intermediate language has a complicated structure and may not be suitable for symbol execution. For example, a conventional intermediate language may have restrictions that translate instructions with similar semantics into separate instructions for processing of implicit operands, respectively. Various commands generated by the conversion can lower the efficiency of symbol execution.
한국공개특허 제10-2005-0000348호(공개일 2005년 1월 3일)에는 컴퓨터 시스템 및 방법이 관계 및 비관계 데이터 소스에 대한 하나 이상의 XML 언어 조회의 의미론적 표현이 개시된다. 의미론적 중간 언어 표현은 하나 이상의 XML 언어 조회에 대한 의미를 명시적으로 설명한다. 의미론적 중간 언어는, 원래 조회(original query)의 연산을 설명하는 노드들을 가진 그래프 구조일 수 있다. 의미론적 그래프의 노드들에 할당된 연산자들로 인해, 원래 XML 조회의 명료한 정의가 가능하다. 의미론적 중간 언어는 하나 또는 다수의 데이터 소스에 대한 XML 조회를 수행하는데 사용될 수 있다. 방법은 하나 이상의 조회를 수신하는 단계, 수신된 조회내의 모든 연산에 대해 하나 이상의 노드 오브젝트를 정의하는 단계, 각각의 노드 오브젝트를 연산자를 사용해 번역하는 단계, 및 연산자들로부터, 의미론적 표현을 생성하는 단계를 포함한다.Korean Patent Laid-Open No. 10-2005-0000348 (published January 3, 2005) discloses a semantic representation of one or more XML language queries for computer systems and method-related and non-relational data sources. A semantic intermediate language expression explicitly explains the semantics of one or more XML language queries. The semantic intermediate language may be a graphical structure with nodes describing the operations of the original query. Due to the operators assigned to the nodes of the semantic graph, it is possible to clearly define the original XML query. A semantic intermediate language can be used to perform an XML query on one or more data sources. The method includes receiving one or more queries, defining one or more node objects for all operations in the received query, translating each node object using an operator, and generating semantic expressions from the operators .
일 실시예는 동적 분석을 위해 중간 언어를 사용하는 장치 및 방법을 제공할 수 있다.One embodiment may provide an apparatus and method that uses an intermediate language for dynamic analysis.
일 실시예는 묵시적 피연산자에 대해 프로세서에 의해 설정되는 값을 참조함으로써 동적 분석을 수행하는 장치 및 방법을 제공할 수 있다.One embodiment may provide an apparatus and method for performing dynamic analysis by referring to a value set by a processor for an implicit operand.
일 측면에 있어서, 프로세서에 의해 수행되는, 바이너리 코드(binary code)를 사용하여 상기 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성하는 단계 및 상기 하나 이상의 중간 명령어들을 사용하여 동적 분석을 수행하는 단계를 포함하는, 동적 분석 방법이 제공된다.In one aspect, there is provided a method comprising: generating one or more intermediate instructions of an intermediate language corresponding to the binary code using a binary code, performed by a processor; and performing dynamic analysis using the one or more intermediate instructions A dynamic analysis method is provided.
상기 동적 분석은 기호 실행에 대한 동적 분석일 수 있다.The dynamic analysis may be a dynamic analysis of the symbol execution.
상기 동적 분석은 상기 바이너리 코드에 대한 동적 분석일 수 있다.The dynamic analysis may be a dynamic analysis of the binary code.
상기 동적 분석은 상기 바이너리 코드의 실행 경로 탐색에 대한 동적 분석일 수 있다.The dynamic analysis may be a dynamic analysis of the execution path of the binary code.
상기 생성하는 단계는 상기 바이너리 코드의 동일하거나 유사한 시멘틱의 네이티브 명령어(native instruction)들의 각각을 동일한 중간 명령어로 치환함으로써 하나 이상의 중간 명령어들을 생성할 수 있다.The generating step may generate one or more intermediate instructions by replacing each of the native instructions of the same or similar semantics of the binary code with the same intermediate instruction.
상기 동적 분석 방법은 동일하거나 유사한 시멘틱의 네이티브 명령어들의 각각을 동일한 중간 명령어로 치환함으로써 네이티브 명령어를 유사한 다른 네이티브 명령어로 치환하여 사용하는 악성 코드 분석을 위해 사용될 수 있다.The dynamic analysis method can be used for malicious code analysis that replaces each of the native commands of the same or similar semantics with the same intermediate command to replace the native command with another similar native command.
상기 생성하는 단계는 상기 바이너리 코드의 네이티브 명령어와 관련된 명시적 피연산자(explicit operand) 및 묵시적 피연산자(implicit operand) 중 상기 명시적 피연산자만의 분석을 수행하고, 상기 묵시적 피연산자에 대한 분석은 배제하여 상기 하나 이상의 중간 명령어들을 생성할 수 있다.Wherein the generating comprises performing an analysis of only the explicit operand of an explicit operand and an implicit operand associated with a native instruction of the binary code and wherein the analysis of the implicit operand is not performed, The above intermediate instructions can be generated.
상기 수행하는 단계는 상기 프로세서에 의해 설정되는 값을 참조함으로써 상기 동적 분석에 있어서 상기 묵시적 피연산자의 값을 검사할 수 있다.The performing step may check the value of the implied operand in the dynamic analysis by referring to a value set by the processor.
상기 설정되는 값은 상기 바이너리 코드의 실행에 기반하여 상기 프로세서에 의해 설정될 수 있다.The set value may be set by the processor based on execution of the binary code.
상기 묵시적 피연산자는 상기 프로세서의 플래그일 수 있다.The implicit operand may be a flag of the processor.
상기 설정되는 값은 상기 플래그의 값일 수 있다.The set value may be the value of the flag.
상기 생성하는 단계는 상기 바이너리 코드의 비트쉬프트(bit-shift) 연산을 상기 중간 언어의 산술 연산으로 대체하여 상기 하나 이상의 중간 명령어들을 생성할 수 있다.The generating may replace the bit-shift operation of the binary code with an arithmetic operation of the intermediate language to generate the one or more intermediate instructions.
상기 수행하는 단계는 상기 설정되는 값을 참조함으로써 상기 비트쉬프트 연산에 의한 사이드 이펙트(side effect)를 상기 산술 연산의 실행에 반영할 수 있다.The performing step may reflect the side effect of the bit shift operation to the execution of the arithmetic operation by referring to the set value.
상기 생성하는 단계는 상기 바이너리 코드의 복수의 조건 분기 네이티브 명령어들을 동일한 조건 분기 중간 명령어로 치환할 수 있다.The generating step may replace a plurality of conditional branch native instructions of the binary code with the same conditional branch intermediate instruction.
상기 수행하는 단계는 상기 조건 분기 중간 명령어의 분석에 있어서, 상기 바이너리 코드의 상기 조건 분기 중간 명령어에 대응하는 조건 분기 네이티브 명령어를 참조할 수 있다.In the analysis of the conditional branch intermediate instruction, the performing may refer to a conditional branch native instruction corresponding to the conditional branch intermediate instruction of the binary code.
다른 일 측면에 있어서, 바이너리 코드를 저장하는 메모리 및In another aspect, a memory storing binary code and
상기 바이너리 코드를 사용하여 상기 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성하고, 상기 하나 이상의 중간 명령어들을 사용하여 동적 분석을 수행하는 프로세서를 포함하는 전자 장치가 제공된다.A processor for generating one or more intermediate instructions of an intermediate language corresponding to the binary code using the binary code and performing dynamic analysis using the one or more intermediate instructions.
동적 분석을 위해 중간 언어를 사용하는 장치 및 방법이 제공된다.Devices and methods using intermediate languages for dynamic analysis are provided.
묵시적 피연산자에 대해 프로세서에 의해 설정되는 값을 참조함으로써 동적 분석을 수행하는 장치 및 방법을 제공된다.There is provided an apparatus and method for performing dynamic analysis by referring to a value set by a processor for an implicit operand.
도 1은 일 실시예에 따른 전자 장치의 구성도를 도시한다.
도 2는 일 실시예에 따른 동적 분석 방법의 흐름도를 도시한다.
도 3은 일 예에 따른 중간 명령어의 생성에 대한 개념도를 도시한다.
도 4는 일 예에 따른 중간 명령어의 구조에 대해 도시한다.
도 5는 일 예에 따른 쉬프트 연산에 대한 치환을 도시한다.
도 6은 일 예에 따른 조건 분리 명령어에 대응하는 중간 언어의 중간 명령어를 도시한다.1 shows a configuration diagram of an electronic device according to an embodiment.
Figure 2 shows a flow diagram of a dynamic analysis method according to one embodiment.
Figure 3 shows a conceptual diagram for the generation of an intermediate instruction according to an example.
Figure 4 illustrates the structure of an intermediate instruction according to an example.
Figure 5 illustrates a permutation for a shift operation according to an example.
FIG. 6 illustrates an intermediate instruction of an intermediate language corresponding to a conditional separation instruction according to an example.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.In the following, embodiments will be described in detail with reference to the accompanying drawings. Like reference symbols in the drawings denote like elements.
실시예에는 다양한 변경이 가해질 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 실시예를 실시 형태에 대해 한정하려는 것이 아니며, 실시예는 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.Various modifications may be made to the embodiments and may have various embodiments, and specific embodiments are illustrated in the drawings and described in detail in the description. It is to be understood, however, that the intention is not to limit the embodiments to the embodiments, but to include all modifications, equivalents, and alternatives falling within the spirit and scope of the invention.
실시예에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 실시예를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.The terms used in the examples are used only to illustrate specific embodiments and are not intended to limit the embodiments. The singular expressions include plural expressions unless the context clearly dictates otherwise. In the present application, the terms "comprises" or "having" and the like are used to specify that there is a feature, a number, a step, an operation, an element, a component or a combination thereof described in the specification, But do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, or combinations thereof.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.Unless defined otherwise, all terms used herein, including technical or scientific terms, have the same meaning as commonly understood by one of ordinary skill in the art to which this embodiment belongs. Terms such as those defined in commonly used dictionaries are to be interpreted as having a meaning consistent with the contextual meaning of the related art and are to be interpreted as either ideal or overly formal in the sense of the present application Do not.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 실시예의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
In the following description of the present invention with reference to the accompanying drawings, the same components are denoted by the same reference numerals regardless of the reference numerals, and redundant explanations thereof will be omitted. In the following description of the embodiments, a detailed description of related arts will be omitted if it is determined that the gist of the embodiments may be unnecessarily blurred.
도 1은 일 실시예에 따른 전자 장치의 구성도를 도시한다.1 shows a configuration diagram of an electronic device according to an embodiment.
고급 언어(high level language)는 프로그램의 언어들 중 사람이 직관적으로 이해할 수 있는 구문 및 수식 등을 사용하는 언어일 수 있다. 프로그램을 실행하는 중앙 처리 장치(CPU)는 이러한 고급 언어로 작성된 프로그램을 바로 이해할 수 없다. 따라서, 고급 언어로 작성된 프로그램은 프로세서가 이해할 수 있는 언어인 기계어(machine language)로 변환되어야 할 수 있다.A high level language can be a language that uses syntactic and mathematical expressions that can be intuitively understood by one of the program's languages. A central processing unit (CPU) that executes a program can not directly understand a program written in such a high-level language. Thus, a program written in a high-level language may have to be converted into a machine language, which is a language understood by the processor.
저급 언어는 CPU가 직접 처리할 수 있는 기계어에 대응하는 언어일 수 있다. 따라서, 저급 언어는 프로세서의 플랫폼에 종속되는 플랫폼-종속적(platform-dependent)인 언어일 수 있다.A lower level language can be a language corresponding to a machine language that the CPU can directly handle. Thus, the lower level language may be a platform-dependent language that is dependent on the platform of the processor.
중간 언어는 저급 언어 및 고급 언어의 사이에 위치하는 언어일 수 있다. 중간 언어는 사람이 직관적으로 이해하기에는 어려우나, 저급 언어 또는 기계어로 효율적으로 변환될 수 있다. 또한, 중간 언어는 플랫폼 중립성(platform-independency)를 제공할 수 있다.An intermediate language can be a language located between a lower-level language and a higher-level language. Intermediate language is difficult for a person to intuitively understand, but can be efficiently translated into low-level language or machine language. In addition, intermediate languages can provide platform-independence.
아래의 실시예에서, 중간 언어는 기호 실행(symbolic execution)을 위해 사용될 수 있다.In the example below, an intermediate language can be used for symbolic execution.
기호 실행은 프로그램의 단위 내의 입력 변수에 문자 값이 아닌 기호 값을 할당할 수 있다. 기호 실행은 입력에 대한 기호 값을 식 내의 연산자에 전달함으로써 프로그램을 분석할 수 있다. 기호 실행에 의한 결과의 기호 식은 모든 중간 계산 및 판단이 항상 기호 입력에 대해서 표시될 수 있도록 간소화될 수 있다.Symbol execution can assign a symbol value to an input variable in a unit of a program, rather than a character value. Symbol execution can analyze the program by passing the symbol value for the input to the operator in the expression. The symbolic expression of the result by symbol execution can be simplified so that all intermediate calculations and judgments are always displayed for the symbol input.
또한, 기호 실행은 입력 데이터의 실제 값보다 기호들을 사용하여 프로그램 수행을 모방하고, 프로그램의 출력이 사용된 기호들을 포함한 논리적 및 수학적 수식들로 표현되는 검증 기법일 수 있다.Symbol execution may also be a verification technique in which symbols of the program are imitated using symbols rather than the actual values of the input data, and the output of the program is expressed in logical and mathematical formulas including symbols used.
다른 표현으로 기호 실행은, 프로그램의 특정한 아웃풋(output)을 발생시키는 인풋(input)을 계산하기 위하여, 프로그램이 포함하는 하나 이상의 명령어들에 대한 프로그램 컨텍스트(Program Context)를 수식으로서 나타내고, 생성된 수식을 저장하는 과정을 포함할 수 있다. 프로그램 컨텍스트는 프로그램 실행 중에 동적으로 할당되거나 값이 변화할 수 있는 프로그램의 실행 환경을 포함할 수 있다. 상기의 프로그램의 실행 환경은 레지스터의 값, 변수의 값, 사용자 입력 값, 네트워크 트래픽 및 시스템 시간 등을 포함할 수 있다.Symbol execution in other manners may be expressed as an expression as a program context for one or more instructions that the program includes to calculate an input that generates a particular output of the program, For example. The program context may include an execution environment of a program that can be dynamically allocated or changed in value during program execution. The execution environment of the program may include a register value, a variable value, a user input value, a network traffic, and a system time.
기호 실행은 동적 분석 또는 정적 분석으로 수행될 수 있다. 정적 분석은 프로그램을 분석할 때, 프로그램을 실행시키지 않고 프로그램 자체를 분석하는 것일 수 있다. 정적 분석과는 반대로, 동적 분석은 프로그램을 실행함으로써 프로그램을 분석하는 것일 수 있다.Symbol execution can be performed with dynamic or static analysis. Static analysis can be the analysis of the program itself, without analyzing the program. Contrary to static analysis, dynamic analysis can be the analysis of a program by running the program.
정적 분석에 이용되는 중간 언어는 플랫폼-독립성을 위해 복잡한 구조를 갖게 되는 측면이 있다. 예를 들면, 정적 분석에 이용되는 중간 언어는 산술 연산의 시멘틱에 비해 유사한 시멘틱을 갖는 비트쉬프트(bit-shift) 연산을 별도의 비트쉬프트 연산으로 분류한다.The intermediate language used for static analysis has a complex structure for platform independence. For example, an intermediate language used for static analysis classifies a bit-shift operation having a similar semantics to a semantics of an arithmetic operation into a separate bit shift operation.
정적 분석에 이용될 수 있는 중간 언어로서, 바인 중간 언어(Vine intermediate language) 및 바이너리 분석 플랫폼(Binary Analysis Platform; BAP) 중간 언어 등이 있다. 바인 중간 언어 및 BAP 중간 언어는 정적 분석에 맞춰진 중간 언어이기 때문에, 동적 분석을 수행하며 기호 실행을 통한 실행 경로 확장의 용도로 사용되기에는 오버헤드가 클 수 있다.As intermediate languages that can be used for static analysis, there are Vine intermediate language and Binary Analysis Platform (BAP) intermediate language. Since the intermediate language and the intermediate language BAP are an intermediate language adapted to the static analysis, the overhead may be large to be used for dynamic analysis and execution path expansion through symbol execution.
동적 분석에는 실제 명령어와 유사한 구조를 가진 간결한 중간 언어의 중간 명령어가 더 적합할 수 있다. 예를 들어, 실제 명령어는 바이너리 코드(binary code)의 네이티브 명령어(native instruction)일 수 있다. 바이너리 코드는 전자 장치의 메모리에 저장되어, 프로세서에 의해 독출되어 직접 실행될 수 있는, 저급 언어에 대응하는 코드일 수 있다.For dynamic analysis, a concise intermediate language intermediate instruction with a structure similar to the actual instruction may be more appropriate. For example, the actual instruction may be a native instruction of a binary code. The binary code may be a code corresponding to a lower level language stored in the memory of the electronic device and readable by the processor and executed directly.
따라서, 동적 분석을 위해 네이티브 명령어와 유사한 구조를 가진 간결한 중간 명령어가 생성될 수 있어야 한다.Thus, for dynamic analysis, a concise intermediate instruction with a structure similar to the native instruction must be generated.
전자 장치(100)는 메모리(110) 및 프로세서(120)를 포함할 수 있다.The electronic device 100 may include a memory 110 and a processor 120.
메모리(110)는 프로그램의 바이너리 코드를 저장할 수 있다. 또한, 메모리(110)는 중간 언어의 중간 명령어들을 저장할 수 있고, 동적 분석 및 기호 실행을 위한 데이터를 저장할 수 있다.The memory 110 may store the binary code of the program. The memory 110 may also store intermediate instructions of the intermediate language and may store data for dynamic analysis and symbol execution.
프로세서(120)는 플래그(flag)(130)를 포함할 수 있다. 플래그(130)는 프로세서(120)에 의해 설정되는 값을 저장하기 위한 저장부일 수 있다.Processor 120 may include a flag 130. [ The flag 130 may be a storage for storing a value set by the processor 120.
플래그(130)는 하나 이상일 수 있다. 예를 들어, 플래그(130)는 상태(status) 플래그, 캐리(carry) 플래그, 오버플로우(overflow) 플래그, 부호(sign) 플래그, 제로(zero) 플래그, 보조 캐리 플래그, 패리티(parity) 플래그 및 제어(control) 플래그 중 하나 이상을 포함할 수 있다.The flag 130 may be one or more. For example, the flag 130 may include a status flag, a carry flag, an overflow flag, a sign flag, a zero flag, an auxiliary carry flag, a parity flag, Control flags, and control flags.
플래그(130)의 값은, 프로세서(120)가 연산자(operator)를 실행함에 따라 설정될 수 있다. 예를 들어, 제로 플래그는 연산 결과가 0인 경우에 참(true)일 수 있다. 두 레지스터들에 대한 차(subtract) 연산을 수행한 결과의 값이 0일 때, 제로 플래그는 참을 나타내는 1의 값으로 설정될 수 있다. 캐리 플래그는 부호 없는 숫자들에 대한 연산의 결과가 프로세서(120)가 처리할 수 있는 비트 범위를 넘어선 경우에 참일 수 있다. 오버플로우 플래그는 부호 있는 숫자들에 대한 연산의 결과가 프로세서(120)가 처리할 수 있는 비트 범위를 넘어선 경우 참일 수 있다. The value of flag 130 may be set as processor 120 executes an operator. For example, the zero flag may be true if the operation result is zero. When the result of performing a subtract operation on two registers is 0, the zero flag can be set to a value of 1 indicating true. The carry flag may be true if the result of the operation on unsigned numbers is beyond the bit range that the processor 120 can handle. The overflow flag may be true if the result of the operation on the signed numbers is beyond the bit range that the processor 120 can process.
프로세서(120)는 메모리(110)의 바이너리 코드를 독출할 수 있고, 바이너리 코드를 사용하여 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성할 수 있고, 하나 이상의 중간 명령어들을 사용하여 동적 분석을 수행할 수 있다.The processor 120 may read the binary code of the memory 110 and may use the binary code to generate one or more intermediate instructions of the intermediate language corresponding to the binary code and may use one or more intermediate instructions to perform dynamic analysis Can be performed.
하기에서, 도 2 내지 도 6을 참조하여, 바이너리 코드를 동적으로 분석하는 방법에 대해 설명된다.
In the following, a method of dynamically analyzing a binary code will be described with reference to Figs. 2 to 6. Fig.
도 2는 일 실시예에 따른 동적 분석 방법의 흐름도를 도시한다.Figure 2 shows a flow diagram of a dynamic analysis method according to one embodiment.
단계(210)에서, 프로세서(120)는 메모리(110)로부터 바이너리 코드를 독출할 수 있다. 바이너리 코드는 분석할 프로그램의 코드일 수 있다.At step 210, the processor 120 may read the binary code from the memory 110. The binary code can be the code of the program to be analyzed.
단계(220)에서, 프로세서(120)는 독출된 바이너리 코드를 사용하여 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성할 수 있다. 예를 들어, 프로세서(120)는 바이너리 코드의 하나 이상의 네이티브 명령어들에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성할 수 있다.At step 220, the processor 120 may use the read binary code to generate one or more intermediate instructions of the intermediate language corresponding to the binary code. For example, the processor 120 may generate one or more intermediate instructions of an intermediate language corresponding to one or more native instructions of the binary code.
바이너리 코드의 네이티브 명령어에 기반하여 중간 명령어가 생성되는 방법에 대해, 하기에서 도 3을 참조하여 상세히 설명된다.A method by which an intermediate instruction is generated based on a native instruction of a binary code will be described in detail with reference to Fig. 3 below.
단계(230)에서, 프로세서(120)는 생성된 하나 이상의 중간 명령어들을 사용하여 동적 분석을 수행할 수 있다.At step 230, the processor 120 may perform dynamic analysis using one or more intermediate instructions generated.
일 실시예에 따르면, 동적 분석은 기호 실행에 대한 동적 분석일 수 있다.According to one embodiment, the dynamic analysis may be a dynamic analysis of the symbol execution.
다른 일 실시예에 따르면, 동적 분석은 바이너리 코드에 대한 동적 분석일 수 있다.According to another embodiment, the dynamic analysis may be a dynamic analysis of the binary code.
또 다른 일 실시예에 따르면, 동적 분석은 바이너리 코드의 실행 경로 탐색에 대한 동적 분석일 수 있다. 프로세서(120)는 기호 실행을 사용하여 바이너리 코드의 실행 경로 탐색을 할 수 있다. 프로세서(120)는 실행 경로 탐색에 대한 동적 분석을 할 수 있다.According to yet another embodiment, the dynamic analysis may be a dynamic analysis of the execution path search of the binary code. The processor 120 may use the symbol execution to search the execution path of the binary code. The processor 120 may perform dynamic analysis on the execution path search.
프로세서(120)는 제약 조건 해결(Constraint Solver)을 통해 바이너리 코드의 실행 경로를 탐색할 수 있다. 제약 조건 해결은 기호 실행에 의해 생성된 바이너리 코드의 프로그램 컨텍스트를 이용함으로써 바이너리 코드의 조건 분기 명령어의 참 조건(True Condition) 및 거짓 조건(False Condition)을 만족시키는 프로그램 컨텍스트들을 각각 도출하여 실행 경로의 탐색에 반영하는 과정을 포함할 수 있다.The processor 120 can search the execution path of the binary code through Constraint Solver. The solution of the constraint is to extract the program contexts satisfying the true condition and the false condition of the conditional branch instruction of the binary code by using the program context of the binary code generated by the symbol execution, And reflecting it to the search.
프로세서(120)는 중간 명령어를 사용하여 바이너리 코드의 적어도 하나의 네이티브 명령어에 대해 기호 실행을 수행함으로써 바이너리 코드의 프로그램 컨텍스트를 생성할 수 있다.The processor 120 may generate the program context of the binary code by performing symbolic operations on at least one native instruction of the binary code using the intermediate instruction.
프로세서(120)는 바이너리 코드의 적어도 하나의 네이티브 명령어 중 조건 분기 명령어에 대하여 프로그램 컨텍스트를 사용하여 제약 조건을 해결할 수 있다.The processor 120 may resolve the constraint using the program context for the conditional branch instruction of at least one native instruction of the binary code.
일 실시예에 따르면, 동적 분석 방법은 기호 실행을 효율적으로 수행하기 위한 방법일 수 있다. 또한, 일반적으로, 기호 실행은 실행 경로의 탐색을 위해 사용될 수 있다. 따라서, 동적 분석 방법은 소프트웨어 테스팅(software testing), 소프트웨어 취약점 분석(software vulnerability analysis), 소프트웨어 보증(software assurance), 소프트웨어 보안(software security), 소프트웨어 유사성 비교(software similarity comparison), 소프트웨어 행위 분석(software behavior analysis) 또는 악성코드 분석(malware analysis) 등에 사용되는 기호 실행에 관련된 분야에 적용될 수 있다.According to one embodiment, the dynamic analysis method may be a method for efficiently performing symbol execution. Also, in general, symbol execution can be used to search for execution paths. Therefore, dynamic analysis methods can be classified into software testing, software vulnerability analysis, software assurance, software security, software similarity comparison, software behavior analysis behavior analysis, or malware analysis.
특히, 악성 코드는 악성 코드가 분석되는 것을 어렵게 하기 위해 하나의 명령어를 동일하거나 유사한 다른 명령어로 치환하여 사용할 수 있다. 실시예에서 제안된 동적 분석 방법은 동일하거나 유사한 시멘틱을 가진 명령어들을 하나의 명령어로 치환할 수 있다. 따라서, 실시예의 동적 분석 방법은 악성 코드 분석에 적합할 수 있다.In particular, malicious code can replace a single command with the same or similar command to make it difficult for malicious code to be analyzed. The dynamic analysis method proposed in the embodiment can replace the instructions having the same or similar semantics with one instruction. Therefore, the dynamic analysis method of the embodiment can be suitable for malicious code analysis.
앞서 도 1을 참조하여 설명된 기술적 내용들이 그대로 적용될 수 있으므로, 보다 상세한 설명은 이하 생략하기로 한다.
The technical contents described above with reference to FIG. 1 can be applied as it is, so a detailed description will be omitted below.
도 3은 일 예에 따른 중간 명령어의 생성에 대한 개념도를 도시한다.Figure 3 shows a conceptual diagram for the generation of an intermediate instruction according to an example.
메모리(110)는 바이너리 코드(310)를 저장할 수 있다. 바이너리 코드(310)는 하나 이상의 네이티브 명령어들을 포함할 수 있다. 바이너리 코드(310)는 도 2를 참조하여 전술된 바이너리 코드에 대응할 수 있다.The memory 110 may store the binary code 310. Binary code 310 may include one or more native instructions. The binary code 310 may correspond to the binary code described above with reference to FIG.
프로세서(120)는 메모리(110)로부터 바이너리 코드(310)를 독출함으로써 바이너리 코드(310)에 기반하여 하나 이상의 중간 명령어들(320)을 생성할 수 있다. 중간 언어의 하나 이상의 중간 명령어들은 바이너리 코드의 하나 이상의 네이티브 명령어들에 대응할 수 있다.The processor 120 may generate one or more intermediate instructions 320 based on the binary code 310 by reading the binary code 310 from the memory 110. [ One or more intermediate instructions of the intermediate language may correspond to one or more native instructions of the binary code.
예를 들어, 생성되는 중간 명령어는 산술 연산 명령어, 비트 연산 명령어, 데이터 전송 명령어, 분기 명령어를 포함할 수 있다.For example, the generated intermediate instruction may include an arithmetic operation instruction, a bit operation instruction, a data transfer instruction, and a branch instruction.
산술 연산 명령어는 두 피연산자들의 덧셈(ADD) 명령어, 두 피연산자들의 뺄셈(SUB) 명령어, 두 피연산자들의 곱셈(MUL) 명령어, 두 피연산자들의 나눗셈(DIV) 명령어 및 두 피연산자들의 모듈러(MOD) 명령어 등을 포함할 수 있다.The arithmetic operation instructions include two operand addition (ADD) instructions, two operand subtraction (SUB) instructions, two operand multiplication (MUL) instructions, two operand division (DIV) instructions and two operand mod .
비트 연산 명령어는 두 피연산자들의 비트와이스(bitwise) 앤드(AND) 명령어, 두 피연산자들의 비트와이스 오어(OR) 명령어 및 두 피연산자들의 익스클루시브 오어(XOR) 명령어 등을 포함할 수 있다.The bit operation instruction may include a bitwise AND instruction of the two operands, a bitwise OR instruction of the two operands, and an exclusive OR instruction of the two operands.
데이터 전송 명령어는 메모리로부터 데이터를 읽어오는 명령어(Load Data from Memory; LDM), 메모리에 데이터를 저장하는 명령어(Store data To Memory; STM) 및 레지스터에 데이터를 저장하는 명령어(Store data To Register)를 포함할 수 있다.The data transfer instruction is a command to load data from memory (LDM), a command to store data in memory (STM), and a command to store data in register (Store data to register). .
분기 명령어는 조건 분기 명령어(Jump if Condition is met; JCC)를 포함할 수 있다.The branch instruction may include a conditional branch instruction (JCC).
상기에서 설명된 중간 명령어의 구조에 대해, 하기에서 도 4를 참조하여 상세히 설명된다.The structure of the intermediate command described above will be described in detail below with reference to FIG.
도 2를 참조하여 전술된 단계(220)에서, 프로세서(120)는 바이너리 코드(310)의 네이티브 명령어에 대응하는 중간 명령어를 생성할 수 있다. 프로세서(120)는 네이티브 명령어를 중간 언어로 변환함으로써 중간 명령어를 생성할 수 있다.In step 220 described above with reference to FIG. 2, the processor 120 may generate an intermediate instruction corresponding to the native instruction of the binary code 310. Processor 120 may generate an intermediate instruction by converting the native instruction into an intermediate language.
프로세서(120)는 바이너리 코드(310)의 동일하거나 유사한 시멘틱의 네이티브 명령어들의 각각을 동일한 중간 명령어로 치환함으로써 하나 이상의 중간 명령어들(320)을 생성할 수 있다. 동일하거나 유사한 시멘틱의 네이티브 명령어들이 동일한 중간 명령어로 치환되기 때문에, 생성된 중간 명령어들(320)의 구조가 단순하게 될 수 있다.Processor 120 may generate one or more intermediate instructions 320 by replacing each of the native instructions of the same or similar semantics of binary code 310 with the same intermediate instruction. Since the native instructions of the same or similar semantics are replaced with the same intermediate instruction, the structure of the generated intermediate instructions 320 can be simplified.
단계(220)에서, 프로세서(120)는 바이너리 코드(310)의 네이티브 명령어와 관련된 명시적 피연산자(explicit operand) 및 묵시적 피연산자(implicit operand) 중 명시적 피연산자만의 분석을 수행할 수 있다. 말하자면, 프로세서(120)는 묵시적 피연산자에 대한 분석을 배제하여 하나 이상의 중간 명령어들(320)을 생성할 수 있다.At step 220, the processor 120 may perform an analysis of explicit operands, one of an explicit operand and an implicit operand associated with the native instruction of the binary code 310. [ That is, the processor 120 may generate one or more intermediate instructions 320, excluding the analysis of the implicit operands.
묵시적 피연산자의 값은 바이너리 코드(310)의 실행 또는 중간 언어의 하나 이상의 중간 명령어들(320)의 실행에 의해 설정될 수 있다. 프로세서(120)가 하나 이상의 중간 명령어들(320)을 생성할 때, 묵시적 피연산자에 대한 분석이 배제됨으로써, 하나 이상의 중간 명령어들(320)이 더 빠르게 생성될 수 있고, 하나 이상의 중간 명령어들(320)의 구조가 더 단순해질 수 있다.The value of the implicit operand may be set by execution of the binary code 310 or by execution of one or more intermediate instructions 320 of the intermediate language. One or more intermediate instructions 320 may be generated more quickly and the one or more intermediate instructions 320 may be generated by the processor 120. For example, ) Can be made simpler.
명령어의 실행은 조건 분기 명령어의 조건을 생성하는 플래그 레지스터(FLAGS register)를 변경시킬 수 있다. 말하자면, 프로세서(120)가 명령어를 실행함에 따라, 명령어의 실행의 결과로 플래그(130)의 값이 설정될 수 있다. 말하자면, 플래그(130)의 값의 설정 또는 변경은 명령어의 실행의 사이드 이펙트(side effect)로 이루어질 수 있다. 명령어는 바이너리 코드의 네이티브 명령어 또는 중간 언어의 중간 명령어일 수 있다.Execution of the instruction can change the flag register (FLAGS register) that generates the condition of the conditional branch instruction. That is, as the processor 120 executes the instruction, the value of the flag 130 may be set as a result of execution of the instruction. In other words, setting or changing the value of the flag 130 may be a side effect of the execution of the instruction. The instruction may be a native instruction of the binary code or an intermediate instruction of the intermediate language.
종래의 중간 언어는 명령어의 묵시적 피연산자를 파악하기 위해 여러 개의 플래그들의 변화 정보를 반영해야 할 수 있다. 예를 들어, Intel 社의 프로세서 플랫폼, IA-32 또는 x64의 조건 분기 명령어는 여러 개의 플래그를 참조하여 분기 여부를 결정한다. 따라서, 중간 명령어에 산술식이 포함될 수 있었다. 이와 같은 구조의 중간 언어는 그 자체로서는 플랫폼 독립성이 확보된 것으로 간주될 수 있다. 그러나, 동적 분석에 있어서는, 여러 개의 플래그들의 변화 정보를 반영해야 하는 것에 큰 의미가 없을 수 있다. 즉, 동적 분석을 통해 수행되는 기호 실행에 있어서는, 종래의 중간 언어에 대해 요구된 것과 같은 높은 수준의 플랫폼 독립성이 요구되지 않을 수 있다. 오히려, 종래의 중간 언어의 복잡한 구조는 동적 분석을 통해 수행되는 기호 실행의 연산량을 증가시키고, 실행 속도를 저하시킬 수 있다.Conventional intermediate languages may need to reflect change information of several flags to understand the implicit operands of the instruction. For example, Intel's processor platform, IA-32 or x64 conditional branch instruction determines whether to branch by referring to several flags. Thus, an arithmetic expression could be included in the intermediate instruction. The intermediate language of this structure can be regarded as having platform independence in itself. However, in the dynamic analysis, it may not have much meaning to reflect change information of several flags. That is, for sign execution performed through dynamic analysis, a high level of platform independence as required for a conventional intermediate language may not be required. Rather, the complex structure of conventional intermediate languages can increase the amount of computation of symbol execution performed through dynamic analysis and reduce execution speed.
따라서, 사이드 이펙트가 없다는 가정 하에, 명시적 피연산자만이 분석의 대상으로 단순화될 수 있다. 또한, 사이드 이펙트가 없다는 가정에 의해 중간 언어에서 사용하는 중간 명령어의 개수가 크게 감소될 수 있다.Thus, with the assumption that there are no side effects, only the explicit operand can be simplified to the subject of analysis. In addition, the number of intermediate instructions used in the intermediate language can be greatly reduced by the assumption that there are no side effects.
또한, 암묵적 피연산자에 대한 분석을 배제함으로써 기호 실행의 구현 과정에서 어려움이 있는 비트쉬프트 연산이 단순한 산술 연산으로 대체될 수 있다.In addition, by excluding the analysis on the implicit operand, a bit shift operation which is difficult in the implementation of symbol execution can be replaced with a simple arithmetic operation.
단계(230)에서 수행되는 동적 분석 방법은 동일하거나 유사한 시멘틱의 네이티브 명령어들의 각각을 동일한 중간 명령어로 치환함으로써 악성 코드 분석을 위해 사용될 수 있다. 상기의 악성 코드는 네이티브 명령어를 유사한 다른 네이티브 명령어로 치환하여 사용하는 코드일 수 있다.The dynamic analysis method performed in step 230 may be used for malicious code analysis by replacing each of the native commands of the same or similar semantics with the same intermediate command. The malicious code may be a code for replacing a native command with another similar native command.
단계(230)에서, 프로세서(120)는 프로세서(120)에 의해 설정되는 값을 참조함으로써 동적 분석에 있어서 묵시적 피연산자의 값을 검사할 수 있다. 예를 들어, 묵시적 피연산자의 값은 프로세서(120)의 플래그(130) 또는 레지스터일 수 있다.At step 230, the processor 120 may examine the value of the implicit operand in dynamic analysis by referring to the value set by the processor 120. [ For example, the value of the implicit operand may be a flag 130 or register of processor 120.
상기의 설정되는 값은 바이너리 코드(310)의 실행에 기반하여 프로세서(120)에 의해 설정될 수 있다. 설정되는 값은 플래그(130)의 값 또는 레지스터의 값일 수 있다.The set value may be set by the processor 120 based on execution of the binary code 310. The value to be set may be the value of the flag 130 or the value of the register.
조건 분기 명령어는 여러 개의 플래그(130)들을 참조하여 분기 여부를 결정할 수 있다. 따라서, 플래그(130)를 참조함으로써 동적 분석에 있어서 요구되는 묵시적 피연산자의 값을 검사 및 결정할 수 있다.The conditional branch instruction can determine whether to branch by referring to a plurality of flags 130. Thus, by referring to the flag 130, it is possible to inspect and determine the value of the implied operand required in the dynamic analysis.
동적 분석에 있어서, 프로세서(120)가 플래그(130)를 직접 참조하게 됨으로써, 앞서 중간 명령어가 생성될 때, 프로세서(120)는 묵시적 피연산자에 대한 분석을 배제할 수 있다. 따라서, 생성되는 중간 명령어의 구조가 간단하게 될 수 있다.In the dynamic analysis, the processor 120 may directly refer to the flag 130, so that when the intermediate instruction is generated earlier, the processor 120 may exclude the analysis of the implicit operand. Therefore, the structure of the generated intermediate command can be simplified.
앞서 도 1 내지 도 2를 참조하여 설명된 기술적 내용들이 그대로 적용될 수 있으므로, 보다 상세한 설명은 이하 생략하기로 한다.
The technical contents described above with reference to Figs. 1 and 2 can be applied as they are, so that a more detailed description will be omitted below.
도 4는 일 예에 따른 중간 명령어의 구조에 대해 도시한다.Figure 4 illustrates the structure of an intermediate instruction according to an example.
중간 언어의 구조는 하기의 [표 1]의 구조와 같을 수 있다.The structure of the intermediate language can be the same as the structure of [Table 1] below.
"OPERAND0"는 제1 피연산자 일 수 있다. "OPERAND1"는 제2 피연산자일 수 있다. "OPERATOR"는 중간 명령어 일 수 있다. "RESULT"는 중간 명령어의 실행의 결과인 피연산자일 수 있다. ":="는 제1 피연산자, 제2 피연산자 및 중간 명령어를 이용하여 연산한 결과 값을 결과에 할당하는 것을 의미할 수 있다."OPERAND0" may be the first operand. "OPERAND1" may be the second operand. "OPERATOR" can be an intermediate command. "RESULT" may be an operand that is the result of execution of the intermediate instruction. The ": =" may mean assigning the result computed using the first operand, the second operand, and the intermediate instruction to the result.
하기의 [표 2]는 중간 명령어의 구조 및 중간 명령어에 대한 설명을 나타낸다.Table 2 below shows the structure of the intermediate instruction and the description of the intermediate instruction.
NULL은 임의의 값으로, NULL에는 어떤 값이 오더라도 상관 없음.Indicates that the current command is JCC. That is to say, the current instruction corresponds to the actual conditional branch instruction.
NULL is an arbitrary value, and NULL can be any value.
상기의 각 명령어의 실행의 결과에 의해 플래그(130)의 값이 설정될 수 있다. 예를 들면, " EAX := EAX SUB EBX"의 결과로 0의 값이 EAX에 할당되면, 제로 플래그의 값이 '1'로 설정될 수 있다.The value of the flag 130 may be set according to the result of executing each of the above-mentioned instructions. For example, if a value of 0 is assigned to EAX as a result of "EAX: = EAX SUB EBX ", the value of the zero flag may be set to '1'.
앞서 도 1 내지 도 3을 참조하여 설명된 기술적 내용들이 그대로 적용될 수 있으므로, 보다 상세한 설명은 이하 생략하기로 한다.
The technical contents described with reference to Figs. 1 to 3 can be applied as it is, and a detailed description will be omitted below.
도 5는 일 예에 따른 쉬프트 연산에 대한 치환을 도시한다.Figure 5 illustrates a permutation for a shift operation according to an example.
단계(220)에서, 프로세서(120)는 바이너리 코드(310)의 비트쉬프트 연산을 중간 언어의 산술 연산으로 대체하여 하나 이상의 중간 명령어들(320)을 생성할 수 있다.At step 220, the processor 120 may generate one or more intermediate instructions 320 by replacing the bit shift operation of the binary code 310 with an arithmetic operation of the intermediate language.
예를 들어, 비트쉬프트 연산은 왼쪽 쉬프트 또는 오른쪽 쉬프트일 수 있다.For example, the bit shift operation may be a left shift or a right shift.
예를 들어, 원래의 비트가 "000010"인 경우 왼쪽 쉬프트의 연산에 의해 변경된 비트는 "000100"일 수 있다. 다음으로, 2 개의 왼쪽 쉬프트의 연산들에 의해 변경된 비트는 "010000"일 수 있다.For example, if the original bit is "000010 ", the bit changed by the operation of the left shift may be" 000100 ". Next, the bit changed by the operations of the two left shifts may be "010000 ".
네이티브 명령어가 왼쪽 쉬프트인 경우, 생성되는 중간 명령어는 "x2"(즉, 2를 곱하는 연산)일 수 있다. "x2"는 피연산자의 값에 2를 곱하고, 상기의 곱의 결과를 상기의 피연산자에 할당하는 연산일 수 있다. 말하자면, 왼쪽 쉬프트 및 "x2"의 연산의 양자는 레지스터와 같은 특정한 피연산자에 대한 연산일 수 있다.If the native instruction is a left shift, the intermediate instruction that is generated may be "x2" (i.e., an operation that multiplies 2). "x2" may be an operation that multiplies the value of the operand by 2, and assigns the result of the multiplication to the operand. That is to say, both the left shift and the "x2" operation may be operations on a particular operand, such as a register.
바이너리 코드(310)의 네이티브 명령어들이 세 번의 왼쪽 쉬프트들일 수 있다. 세 번의 왼쪽 쉬프트들 각각은 동일하거나 유사한 시멘틱의 네이티브 명령어들일 수 있다. 프로세서(120)는 동일하거나 유사한 시멘틱의 네이티브 명령어들을 하나의 중간 명령어로 생성할 수 있다. 따라서, 프로세서(120)는 세 번의 왼쪽 쉬프트들에 대해 하나의 중간 명령어인, "x23"을 생성할 수 있다. 여기서, "x23"는 피연산자의 값에 2의 3승인 8을 곱하고, 상기의 곱의 결과를 상기의 피연산자에 할당하는 연산일 수 있다.The native instructions of the binary code 310 may be three left shifts. Each of the three left shifts may be native instructions of the same or similar semantics. The processor 120 may generate native instructions of the same or similar semantics as one intermediate instruction. Thus, the processor 120 can generate "x2 3 ", which is one intermediate instruction for three left shifts. Here, "x2 3 " may be an operation of multiplying the value of the operand by two 3 acknowledgments, and assigning the result of the multiplication to the operand.
즉, 프로세서(120)는 바이너리 코드(310)의 복수의 동일하거나 유사한 시멘틱의 네이티브 명령어들을 하나의 중간 언어의 중간 명령어로 치환함으로써 중간 명령어를 생성할 수 있다.That is, processor 120 may generate an intermediate instruction by replacing a plurality of identical or similar semantic native instructions of binary code 310 with intermediate instructions of one intermediate language.
치환에 있어서, 네이티브 명령어에 의해 설정되는 플래그(130)의 값 및 중간 명령어에 의해 설정되는 플래그(130)의 값이 서로 상이하다는 점이 문제가 될 수 있다. 예를 들어, 피연산자들의 값들이 동일하다고 하더라도, 3 개의 왼쪽 쉬프트들 중 마지막 쉬프트인 네이티브 명령어에 의해 설정되는 플래그(130)들의 값은 8을 곱하는 중간 명령어에 의해 설정되는 플래그(130)들의 값에 비해 상이할 수 있다. 상기의 문제에 있어서, 프로세서(120)는 도 3에서 전술된, 프로세서(120)에 의해 설정되는 값을 참조함으로써 비트쉬프트 연산에 의한 사이드 이펙트를 산술 연산의 실행에 반영할 수 있다. 말하자면, 프로세서(120)는 프로세서(120)에 의해 설정되는 값을 참조함으로써 비트쉬프트 연산에 의한 사이드 이펙트를 별도의 계산 없이 사용할 수 있고, 치환 후에도 동일한 시맨틱으로 중간 명령어가 동작하게 할 수 있다. 설정되는 값은 플래그(130)일 수 있다.In substitution, it may be problematic that the values of the flag 130 set by the native instruction and the value of the flag 130 set by the intermediate instruction are different from each other. For example, even though the values of the operands are the same, the value of the flags 130 set by the native instruction, which is the last of the three left shifts, is the value of the flags 130 set by the intermediate instruction, . In the above problem, the processor 120 may reflect the side effect by the bit shift operation to the execution of the arithmetic operation by referring to the value set by the processor 120, which is described above in Fig. In other words, the processor 120 can use the side effect by the bit shift operation without any additional calculation by referring to the value set by the processor 120, and can make the intermediate instruction operate with the same semantics after replacement. The value to be set may be the flag 130.
앞서 도 1 내지 도 4를 참조하여 설명된 기술적 내용들이 그대로 적용될 수 있으므로, 보다 상세한 설명은 이하 생략하기로 한다.
The technical contents described above with reference to Figs. 1 to 4 can be applied as they are, so that a more detailed description will be omitted below.
도 6은 일 예에 따른 조건 분리 명령어에 대응하는 중간 언어의 중간 명령어를 도시한다.FIG. 6 illustrates an intermediate instruction of an intermediate language corresponding to a conditional separation instruction according to an example.
도 2를 참조하여 전술된 단계(220)에서, 프로세서(120)는 바이너리 코드(310)의 조건 분기 네이티브 명령어를 조건 분기 중간 명령어로 치환함으로써 중간 명령어를 생성할 수 있다. 조건 분기 네이티브 명령어는 실제의 조건 분기 명령어(610)일 수 있다.In step 220 described above with reference to FIG. 2, the processor 120 may generate an intermediate instruction by replacing the conditional branch native instruction of the binary code 310 with a conditional branch intermediate instruction. The conditional branch native instruction may be an actual conditional branch instruction (610).
예를 들어, 실제의 조건 분기 명령어(610)는 플래그의 종류에 따라 조건을 설정할 수 있다 플래그는 결과 값이 0인 경우 설정되는 ZF 플래그, 결과 값에서 버림 혹은 올림이 이루어 졌을 경우 설정되는 CF 플래그, 부호가 음수일 경우 설정되는 SF 플래그, 결과 값이 오버플로우 또는 언더플로우된 경우 설정되는 OF 플래그 및 결과 값에서 하위 8비트가 짝수인 경우 설정되는 PF 플래그를 포함할 수 있다.For example, the actual conditional branch instruction (610) can set the condition according to the type of flag. The flag is a ZF flag set when the result value is 0, a CF flag set when the result value is rounded or rounded An SF flag set when the sign is negative, an OF flag set when the result value overflows or underflows, and a PF flag set when the lower 8 bits are even in the result value.
실제의 조건 분기 명령어(610)는 아무런 조건 없이 무조건 특정 위치로 이동하는 명령어(JMP), ZF 플래그가 설정된 경우 특정 위치로 점프하는 명령어(JZ), ZF 플래그가 설정되지 않은 경우 특정 위치로 점프하는 명령어(JNZ), CF 플래그가 설정된 경우 특정 위치로 점프하는 명령어(JC), CF 플래그가 설정되지 않은 경우 특정 위치로 점프하는 명령어(JNC), SF 플래그가 설정된 경우 특정 위치로 점프하는 명령어(JS), SF 플래그가 설정되지 않은 경우 특정 위치로 점프하는 명령어(JNS), OF 플래그가 설정된 경우 특정 위치로 점프하는 명령어(JO), OF 플래그가 설정되지 않은 경우 특정 위치로 점프하는 명령어(JNO), PF 플래그가 설정된 경우 특정 위치로 점프하는 명령어(JP) 및 PF 플래그가 설정되지 않은 경우 특정 위치로 점프하는 명령어(JNP)를 포함할 수 있다.The actual conditional branch instruction 610 includes a command (JMP) for unconditionally moving to a specific position without any condition, a command (JZ) for jumping to a specific position when the ZF flag is set, a jump instruction for jumping to a specific position when the ZF flag is not set (JC) that jumps to a specific position when the CF flag is set; a command (JNC) that jumps to a specific position when the CF flag is not set; (JNS) that jumps to a specific position when the SF flag is not set, a command (JO) that jumps to a specific position when the OF flag is set, a command (JNO) that jumps to a specific position when the OF flag is not set, , A command (JP) for jumping to a specific position when the PF flag is set, and a command (JNP) for jumping to a specific position when the PF flag is not set.
상기에 연결된 다수의 실제의 조건 분기 명령어(610)들에 대응하여 생성되는 중간 명령어는 단일한 조건 분기 중간 명령어(JCC)일 수 있다.The intermediate instructions generated corresponding to the plurality of actual conditional branch instructions 610 connected to the above may be a single conditional branch intermediate instruction (JCC).
JCC는 실제의 조건 분기 명령어(610)를 참조하여 처리될 수 있다. JCC는 현재의 중간 명령어가 다수의 실제의 조건 분기 명령어(610)에 대응한다는 것을 알려줄 수 있다.The JCC can be processed with reference to the actual conditional branch instruction 610. [ The JCC may inform that the current intermediate instruction corresponds to a plurality of actual conditional branch instructions 610. [
상술된 것과 같이, 실제의 조건 분기 명령어(610)는 묵시적 피연산자를 참조하고, 실시예의 중간 언어에서는 묵시적 피연산자를 고려하지 않으므로, JCC는 실제의 조건 분기 명령어(610)를 완벽하게 표현하지 못할 수 있다. 따라서, 중간 언어는 실제의 조건 분기 명령어(610)에 대하여 대응하는 중간 명령어를 JCC로 결정할 수 있고, 어떤 조건에 따라 분기하는 조건 분기 명령어인지는 실제의 조건 분기 명령어(610)를 참조할 수 있다.As described above, the actual conditional branch instruction 610 refers to the implicit operand, and the JCC does not fully represent the actual conditional branch instruction 610 because the implicit operand is not considered in the intermediate language of the embodiment . Therefore, the intermediate language can determine the corresponding intermediate instruction for the actual conditional branch instruction 610 as JCC, and refer to the actual conditional branch instruction 610 as to which conditional branch instruction to branch according to the condition .
바이너리 코드(310)의 조건 분기 네이티브 명령어가 복수인 경우, 프로세서(120)는 바이너리 코드(310)의 복수의 조건 분기 네이티브 명령어들을 동일한 조건 분기 중간 명령어로 치환함으로써 중간 명령어를 생성할 수 있다.Conditional Branching of Binary Code 310 When there are a plurality of the native instructions, the processor 120 can generate an intermediate instruction by replacing a plurality of conditional branching native instructions of the binary code 310 with the same conditional branching intermediate instruction.
도 2를 참조하여 전술된 단계(230)에서, 프로세서(120)는 조건 분기 중간 명령어의 분석에 있어서, 바이너리 코드(310)의 조건 분기 중간 명령어에 대응하는 조건 분기 네이티브 명령어를 참조할 수 있다. 여기서, 조건 분기 네이티브 명령어는 실제의 조건 분기 명령어(610)일 수 있다. 분석은 기호 실행을 위한 동적 분석일 수 있다.In step 230 described above with reference to FIG. 2, the processor 120 may refer to the conditional branch native instruction corresponding to the conditional branch intermediate instruction of the binary code 310 in the analysis of the conditional branch intermediate instruction. Here, the conditional branch native instruction may be an actual conditional branch instruction 610. The analysis can be a dynamic analysis for symbol execution.
일 실시예에 따르면, 프로세서(120)는 조건 분기 중간 명령어 및 플래그(130)를 참조하여 동적 분석을 수행할 수 있다.According to one embodiment, the processor 120 may perform dynamic analysis with reference to the conditional branch intermediate instruction and flag 130.
앞서 도 1 내지 도 5를 참조하여 설명된 기술적 내용들이 그대로 적용될 수 있으므로, 보다 상세한 설명은 이하 생략하기로 한다.
The technical contents described above with reference to Figs. 1 to 5 may be applied as they are, so that a more detailed description will be omitted below.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPA(field programmable array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.The apparatus described above may be implemented as a hardware component, a software component, and / or a combination of hardware components and software components. For example, the apparatus and components described in the embodiments may be implemented within a computer system, such as, for example, a processor, a controller, an arithmetic logic unit (ALU), a digital signal processor, a microcomputer, a field programmable array (FPA) A programmable logic unit (PLU), a microprocessor, or any other device capable of executing and responding to instructions. The processing device may execute an operating system (OS) and one or more software applications running on the operating system. The processing device may also access, store, manipulate, process, and generate data in response to execution of the software. For ease of understanding, the processing apparatus may be described as being used singly, but those skilled in the art will recognize that the processing apparatus may have a plurality of processing elements and / As shown in FIG. For example, the processing unit may comprise a plurality of processors or one processor and one controller. Other processing configurations are also possible, such as a parallel processor.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.The method according to an embodiment may be implemented in the form of a program command that can be executed through various computer means and recorded in a computer-readable medium. The computer-readable medium may include program instructions, data files, data structures, and the like, alone or in combination. The program instructions to be recorded on the medium may be those specially designed and configured for the embodiments or may be available to those skilled in the art of computer software. Examples of computer-readable media include magnetic media such as hard disks, floppy disks and magnetic tape; optical media such as CD-ROMs and DVDs; magnetic media such as floppy disks; Magneto-optical media, and hardware devices specifically configured to store and execute program instructions such as ROM, RAM, flash memory, and the like. Examples of program instructions include machine language code such as those produced by a compiler, as well as high-level language code that can be executed by a computer using an interpreter or the like. The hardware devices described above may be configured to operate as one or more software modules to perform the operations of the embodiments, and vice versa.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다. While the present invention has been particularly shown and described with reference to exemplary embodiments thereof, it is to be understood that the invention is not limited to the disclosed exemplary embodiments. For example, it is to be understood that the techniques described may be performed in a different order than the described methods, and / or that components of the described systems, structures, devices, circuits, Lt; / RTI > or equivalents, even if it is replaced or replaced.
100: 전자 장치
110: 메모리
120: 프로세서
130: 플래그100: Electronic device
110: Memory
120: Processor
130: Flag
Claims (15)
바이너리 코드(binary code)를 사용하여 상기 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성하는 단계; 및
상기 하나 이상의 중간 명령어들을 사용하여 동적 분석을 수행하는 단계
를 포함하고,
상기 생성하는 단계는 상기 바이너리 코드의 동일하거나 유사한 시멘틱의 네이티브 명령어(native instruction)들의 각각을 동일한 중간 명령어로 치환함으로써 하나 이상의 중간 명령어들을 생성하는, 동적 분석 방법.≪ RTI ID = 0.0 >
Generating one or more intermediate instructions of an intermediate language corresponding to the binary code using a binary code; And
Performing dynamic analysis using the one or more intermediate instructions
Lt; / RTI >
Wherein the generating step generates one or more intermediate instructions by replacing each of the native instructions of the same or similar semantics of the binary code with the same intermediate instruction.
상기 동적 분석은 기호 실행에 대한 동적 분석인, 동적 분석 방법.The method according to claim 1,
Wherein the dynamic analysis is a dynamic analysis of symbol execution.
상기 동적 분석은 상기 바이너리 코드에 대한 동적 분석인, 동적 분석 방법.The method according to claim 1,
Wherein the dynamic analysis is a dynamic analysis on the binary code.
상기 동적 분석은 상기 바이너리 코드의 실행 경로 탐색에 대한 동적 분석인, 동적 분석 방법.The method according to claim 1,
Wherein the dynamic analysis is a dynamic analysis of an execution path search of the binary code.
상기 동적 분석 방법은 동일하거나 유사한 시멘틱의 네이티브 명령어들의 각각을 동일한 중간 명령어로 치환함으로써 네이티브 명령어를 유사한 다른 네이티브 명령어로 치환하여 사용하는 악성 코드 분석을 위해 사용되는, 동적 분석 방법.The method according to claim 1,
Wherein the dynamic analysis method is used for malicious code analysis in which a native instruction is replaced with another similar native instruction by replacing each of the native instructions of the same or similar semantics with the same intermediate instruction.
상기 생성하는 단계는 상기 바이너리 코드의 네이티브 명령어와 관련된 명시적 피연산자(explicit operand) 및 묵시적 피연산자(implicit operand) 중 상기 명시적 피연산자만의 분석을 수행하고, 상기 묵시적 피연산자에 대한 분석은 배제하여 상기 하나 이상의 중간 명령어들을 생성하는, 동적 분석 방법.The method according to claim 1,
Wherein the generating comprises performing an analysis of only the explicit operand of an explicit operand and an implicit operand associated with a native instruction of the binary code and wherein the analysis of the implicit operand is not performed, And generates the intermediate instructions.
상기 수행하는 단계는 상기 프로세서에 의해 설정되는 값을 참조함으로써 상기 동적 분석에 있어서 상기 묵시적 피연산자의 값을 검사하는, 동적 분석 방법.8. The method of claim 7,
Wherein the performing step examines the value of the implicit operand in the dynamic analysis by referring to a value set by the processor.
상기 설정되는 값은 상기 바이너리 코드의 실행에 기반하여 상기 프로세서에 의해 설정되는, 동적 분석 방법.9. The method of claim 8,
Wherein the set value is set by the processor based on execution of the binary code.
상기 묵시적 피연산자는 상기 프로세서의 플래그이고,
상기 설정되는 값은 상기 플래그의 값인, 동적 분석 방법.9. The method of claim 8,
Wherein the implicit operand is a flag of the processor,
Wherein the value to be set is a value of the flag.
상기 생성하는 단계는 상기 바이너리 코드의 비트쉬프트(bit-shift) 연산을 상기 중간 언어의 산술 연산으로 대체하여 상기 하나 이상의 중간 명령어들을 생성하는, 동적 분석 방법.9. The method of claim 8,
Wherein said generating step replaces a bit-shift operation of said binary code with an arithmetic operation of said intermediate language to generate said one or more intermediate instructions.
상기 수행하는 단계는 상기 설정되는 값을 참조함으로써 상기 비트쉬프트 연산에 의한 사이드 이펙트를 상기 산술 연산의 실행에 반영하는, 동적 분석 방법.12. The method of claim 11,
Wherein the performing step reflects the side effect by the bit shift operation to the execution of the arithmetic operation by referring to the set value.
상기 생성하는 단계는 상기 바이너리 코드의 복수의 조건 분기 네이티브 명령어들을 동일한 조건 분기 중간 명령어로 치환하는, 동적 분석 방법.9. The method of claim 8,
Wherein the generating step replaces a plurality of conditional branch native instructions of the binary code with the same conditional branch intermediate instruction.
상기 수행하는 단계는 상기 조건 분기 중간 명령어의 분석에 있어서, 상기 바이너리 코드의 상기 조건 분기 중간 명령어에 대응하는 조건 분기 네이티브 명령어를 참조하는, 동적 분석 방법.14. The method of claim 13,
Wherein performing in the analysis of the conditional branch intermediate instruction refers to a conditional branch native instruction corresponding to the conditional branch intermediate instruction of the binary code.
상기 바이너리 코드를 사용하여 상기 바이너리 코드에 대응하는 중간 언어의 하나 이상의 중간 명령어들을 생성하고, 상기 하나 이상의 중간 명령어들을 사용하여 동적 분석을 수행하는 프로세서
를 포함하고,
상기 프로세서는 상기 바이너리 코드의 동일하거나 유사한 시멘틱의 네이티브 명령어(native instruction)들의 각각을 동일한 중간 명령어로 치환함으로써 하나 이상의 중간 명령어들을 생성하는, 전자 장치.Memory to store the binary code and
A processor for generating one or more intermediate instructions of an intermediate language corresponding to the binary code using the binary code and performing dynamic analysis using the one or more intermediate instructions,
Lt; / RTI >
Wherein the processor generates one or more intermediate instructions by replacing each of the native instructions of the same or similar semantics of the binary code with the same intermediate instruction.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020140010340A KR101559651B1 (en) | 2014-01-28 | 2014-01-28 | Method and apparatus of dynamic analysis |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020140010340A KR101559651B1 (en) | 2014-01-28 | 2014-01-28 | Method and apparatus of dynamic analysis |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150089570A KR20150089570A (en) | 2015-08-05 |
KR101559651B1 true KR101559651B1 (en) | 2015-10-13 |
Family
ID=53885988
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020140010340A KR101559651B1 (en) | 2014-01-28 | 2014-01-28 | Method and apparatus of dynamic analysis |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101559651B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102304861B1 (en) * | 2021-03-30 | 2021-09-23 | 세종대학교산학협력단 | Apparatus and method for detecting firmware vulnerabiliry based on hybrid fuzzing |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102117165B1 (en) * | 2018-10-29 | 2020-05-29 | 한국과학기술원 | Method and apparatus for testing intermediate language for binary analysis |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100813662B1 (en) * | 2006-11-17 | 2008-03-14 | 삼성전자주식회사 | Profiler for optimizing processor architecture and application |
JP2008546085A (en) | 2005-06-04 | 2008-12-18 | トランジティブ リミテッド | Method and apparatus for executing native code and target code in combination during program code conversion |
JP2012506094A (en) | 2008-10-15 | 2012-03-08 | マイクロソフト コーポレーション | Storing code generated at runtime in the cache |
-
2014
- 2014-01-28 KR KR1020140010340A patent/KR101559651B1/en not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008546085A (en) | 2005-06-04 | 2008-12-18 | トランジティブ リミテッド | Method and apparatus for executing native code and target code in combination during program code conversion |
KR100813662B1 (en) * | 2006-11-17 | 2008-03-14 | 삼성전자주식회사 | Profiler for optimizing processor architecture and application |
JP2012506094A (en) | 2008-10-15 | 2012-03-08 | マイクロソフト コーポレーション | Storing code generated at runtime in the cache |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102304861B1 (en) * | 2021-03-30 | 2021-09-23 | 세종대학교산학협력단 | Apparatus and method for detecting firmware vulnerabiliry based on hybrid fuzzing |
Also Published As
Publication number | Publication date |
---|---|
KR20150089570A (en) | 2015-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101160564B (en) | Method and apparatus for implementing a bi-endian capable compiler | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US20160321039A1 (en) | Technology mapping onto code fragments | |
CN111124492B (en) | Instruction generation method and device, instruction execution method, processor and electronic equipment | |
Del Barrio et al. | Multispeculative addition applied to datapath synthesis | |
US11036527B2 (en) | Class splitting in object-oriented environments | |
US10216499B2 (en) | Method, program, and system for code optimization | |
US11068463B2 (en) | System and method for managing log data | |
US10268798B2 (en) | Condition analysis | |
KR101559651B1 (en) | Method and apparatus of dynamic analysis | |
US20110302394A1 (en) | System and method for processing regular expressions using simd and parallel streams | |
US8930929B2 (en) | Reconfigurable processor and method for processing a nested loop | |
CN103793653B (en) | A kind of program dependence based on tree optimization analyzes method and system | |
EP2181389A2 (en) | Data processing with protection against soft errors | |
US8700887B2 (en) | Register, processor, and method of controlling a processor using data type information | |
US10180826B2 (en) | Estimation of bit widths of variables based on liveness | |
Dernehl et al. | Combining abstract interpretation with symbolic execution for a static value range analysis of block diagrams | |
KR20140134971A (en) | Method of generating semantic models for FMEA documents | |
JP2014228891A (en) | Compiler and compilation method | |
US9280441B2 (en) | Detection and correction of race conditions in workflows | |
KR102021447B1 (en) | Computing device and operating method thereof | |
TWI706325B (en) | Computer program product, computer system and computer implemented method for conditional branch to an indirectly specified location | |
KR101900813B1 (en) | Apparatus and method for dynamic control-flow analysis for prescribing control-flow with Inputs generated from grammar | |
Kulkarni et al. | Abstraction of Information Flow Table from a Restructured Legacy ‘C’program to be amenable for Multicore Architecture | |
Ali | Practical Comparison Between the LR (1) Bottom-Up and LL (1) Top-Down Methodology |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |