KR20100106409A - 다중 언어 소프트웨어 코드 분석 - Google Patents

다중 언어 소프트웨어 코드 분석 Download PDF

Info

Publication number
KR20100106409A
KR20100106409A KR1020107013614A KR20107013614A KR20100106409A KR 20100106409 A KR20100106409 A KR 20100106409A KR 1020107013614 A KR1020107013614 A KR 1020107013614A KR 20107013614 A KR20107013614 A KR 20107013614A KR 20100106409 A KR20100106409 A KR 20100106409A
Authority
KR
South Korea
Prior art keywords
source code
level
instructions
converting
embedded
Prior art date
Application number
KR1020107013614A
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
Priority claimed from AU2007906350A external-priority patent/AU2007906350A0/en
Application filed by 내셔널 아이씨티 오스트레일리아 리미티드 filed Critical 내셔널 아이씨티 오스트레일리아 리미티드
Publication of KR20100106409A publication Critical patent/KR20100106409A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/454Multi-language systems; Localisation; Internationalisation

Abstract

본 발명은 다중 언어로 쓰여진 코드를 포함하는 소프트웨어 코드의 분석에 관한 것이다. 특히 본 발명은 고급 언어에 내장된 저급 언어로 쓰여진 소스 코드를 가진 임베디드 시스템의 소스 코드에 대한 정적 분석에 관한 것이나, 다만 본 발명은 이에 제한되지는 않는다. 본 발명은 내장된 저급 언어 소스 코드를 상기 정적 분석이 수행될 수 있는 공통 고급 표현으로 변환하는 것(60)을 제공한다. 이러한 변환은 상기 정적 분석에 대응하는 충분한 의미를 단지 보유할 수 있으나, 점차 상기 변환을 허용한다. 본 발명의 실시예들은 방법, 컴퓨터 시스템 및 소프트웨어를 포함한다.

Description

다중 언어 소프트웨어 코드 분석{MULTI LANGUAGE SOFTWARE CODE ANALYSIS}
본 발명은 다중 언어로 쓰여진 코드를 포함하는 소프트웨어 코드의 분석에 관한 것이다. 특히, 본 발명은 이에 내장된 다른 언어로 쓰여진 소스 코드에 대한 정적 분석을 수행하는 방법에 관한 것이나, 다만 본 발명은 이에 제한되지는 않는다. 본 발명의 실시예들은 방법, 컴퓨터 시스템 및 소프트웨어를 포함한다.
소프트웨어 제품 개발은 두 가지 목적에 의해 이루어진다. 즉, 시장까지 도달하는 짧은 시간과 낮은 개발 비용이 그것이다. 그러나, 최근 소프트웨어 개발에 있어 최선의 관행은 여전히 비용과 시간이 많이 소비되고, 제품 개발의 후반부 또는 심지어 제품 개발 후에 종종 불필요한 비용이 발생한다. 그 이유 중 하나는 소프트웨어의 소스 코드에 있는 오류나 결함(예, 소프트웨어 버그)인데, 이를 발견하기 위한 비용과 시간이 많이 소비된다. 따라서 이러한 소프트웨어 버그를 발견하거나 결국 소프트웨어 버그가 없음을 보증하는 것은 소프트웨어 개발에 있어서 매우 중요하다.
개발 사이클의 초기에 버그를 발견하는 것이 특히 중요한 분야는 임베디드 시스템이다. 임베디드 시스템은 이가 제어하는 디바이스에 의해 컴퓨터가 완전히 캡슐화되어 있는 특수 목적 시스템이다. 개인용 컴퓨터와 같은 일반 목적의 컴퓨터와는 달리, 임베디드 시스템은 보통 매우 특정된 요구사항과 함께 하나 이상의 사전 정의된 임무를 수행한다. 이러한 예로는 휴대폰, 현금 자동 입출금기(ATM), 의료기기 및 엔진 제어기가 있다. 이와 같은 안전성이나 임무가 중요한 응용분야 및 버그 수정을 위한 잠재적 리콜에 수반된 막대한 비용 때문에 그러한 디바이스 상의 소프트웨어에 버그가 없는 것은 중요하다.
몇몇 프로그래밍 언어가 서로 얽혀진 방법으로 사용되는 것은 임베디드 시스템 소프트웨어 개발의 특징이다. C 또는 C++과 같은 고급 언어는 디바이스의 전체적인 제어 동작을 프로그래밍하는데 사용되지만, 특히 어셈블리와 같은 저급 언어의 단편(fragment)들은 디바이스의 하드웨어에 직접 접근할 수 있도록 C/C++ 코드에 내장되어 있다.
프로그램 분석을 위하여, 고급 언어일수록 더 많은 구조와 더 많은 정보를 가지고 있기 때문에 일반적으로 더 편리하다. 예를 들어, 고급 C/C++ 프로그램은 조건 루프(conditional loop), 객체(object) 및 배열(array)의 범위와 같은 많은 구조와 타입 정보를 가지고 있지만, 저급 어셈블리 프로그램은 이러한 정보를 전혀 가지고 있지 않거나 쉽게 이용할 수 없다.
그러나, 종종 언어들이 혼합되어 있는 인베디드 시스템 환경에서는 저급 프로그램 단편(fragment)(예, 어셈블리)들이 고급 프로그램(예, C/C++)에 내장되어 있다.
이러한 문제를 극복하기 위하여 과거에는 분석이 하나의 언어에 제한되어 있었다. 이 솔루션은 간단히 하나의 언어를 간과하고, 그 분석은 간과된 언어가 소스 코드에 미치는 영향을 고려하지 못하게 된다. 분석을 하나의 언어에 한정하는 것은 분명히 만족스럽지는 않지만, 현재 많은 상업적 정적 분석 툴에서 사용되고 있다. 그 대신, 저급 언어 및 고급 언어에 대하여 별개로 독립된 분석을 수행한 후 그 결과를 합치고 있다. 이 두 번째 솔루션은 독립된 정적 분석기를 필요로 하고 정적 분석 솔루션을 제공하기 위하여 거의 두 배의 노력이 필요하다.
본 발명의 일 실시예는 고급 언어 소스 코드에 내장된 저급 언어 소스 코드를 가지는 소스 코드에 대한 정적 분석의 수행 방법을 제공한다. 여기서, 상기 고급 언어 소스 코드는 상기 정적 분석이 수행될 수 있는 고급 표현으로 표현된다. 상기 정적 분석의 수행 방법은, 상기 내장된 저급 언어 소스 코드를 상기 정적 분석이 수행될 수 있는 상기 고급 표현으로 변환하는 단계; 및 상기 고급 언어 소스 코드의 상기 고급 표현과 상기 저급 소스 코드의 상기 고급 표현에 대한 정적 분석을 수행하는 단계를 포함한다.
소스 코드에 대한 완전한 정적 분석은 상기 고급 언어 소스 코드뿐만 아니라 상기 내장된 저급 언어 소스 코드에 대한 이해를 필요로 한다. 본 발명자들은 별도로 상기 언어들을 하나씩 분석하여 상기 언어들을 이해하는 것은 충분하지 않다는 것을 발견하였다. 다른 언어들의 상기 코드는 상호 작용을 하기 때문에, 두 언어는 함께 분석되어야 한다. 두 언어를 동일한 고급 표현으로 변환함으로써, 하나의 일관된 분석을 수행할 수 있다. 상기 언어들의 고급 표현에 대한 상기 정적 분석을 수행함으로써, 프로그램 구조(예를 들어, 소스 코드에서 루프, 점프 및 브랜치의 구조를 비교함) 및 변수 타입(예를 들어, 정수(integer)형 및 불(boolean)형을 비교함)에 대한 정보는 손실되지 않고 상기 정적 분석에 포함시킬 수 있다.
나아가, 본 발명을 이용하여, 근간이 되는 정적 분석 기술의 향상은 적은 노력으로 모든 언어에 적용될 수 있다. 언어 자체를 프로그래밍하는 것보다 분석 기술에 더 많은 변화가 있을 것으로 예상되기 때문에, 이는 또한 중요한 비용 절감 요소가 된다.
상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는, 상기 저급 언어 소스 코드의 전체 의미를 보유하지는 않는 방식으로 변환하는 것을 포함할 수 있다. 특히, 상기 고급 표현에 대응하는 것을 가지지 않는 상기 저급 언어 소스 코드 내의 명령어를 상기 명령어의 모든 의미를 보유하지는 않는 방식으로 변환하는 것을 포함할 수 있다.
본 발명의 일 실시예는 소스 코드에 대한 정적 분석을 수행하기 위하여 상기 저급 소스 코드의 모든 의미를 유지할 필요는 없음을 인식한다. 이는 코드 검사에 대한 이해와 완전히 대립된다. 검증 분석에 있어서 모든 의미는 상기 소스 코드에 나타난 모든 언어들에 대하여 유지되어야 한다. 이를 이루는 유일한 방법은 상기 코드를 상기 언어들의 최소공통분모로 전환하는 것이다. 이는, 상기 저급 언어에 대하여 상기 분석을 수행하고 상기 코드에 대하여 현재 수행될 수 있는 분석 타입의 범위가 현저히 줄어든다는 것을 의미한다. 상기 저급 소스 코드의 전체 의미를 보유할 필요는 없다는 것을 인식함으로써, 본 발명자들은 상기 문제에 접근하는 새로운 진보적인 방법을 발견하였다. 이러한 인식으로부터 본 발명자들은 더 넓은 범위에서 분석을 하기 위하여, 동시에 필요하면 상기 정적 분석에서 상기 내장된 저급 언어의 특징들을 고려하면서, 상기 코드를 고급 표현으로 변환할 수 있다는 것을 또한 발견할 수 있었다.
상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는, 상기 고급 표현에 대응하는 것을 가지지 않는 상기 저급 언어 소스 코드 내의 하나 이상의 명령어를 식별하는 단계; 및 상기 하나 이상의 명령어를, 상기 명령어가 상기 소스 코드에 미치는 영향을 표현하는 방식으로, 상기 고급 표현으로 변환하는 단계를 포함할 수 있다.
상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는, 상기 고급 표현에 대응하는 것을 가지지 않는 상기 저급 언어 소스 코드 내의 하나 이상의 명령어를 식별하는 단계; 및 상기 하나 이상의 명령어를, 상기 명령어가 상기 소스 코드에 미치는 실질적인 영향만을 표현하는 방식으로, 상기 고급 표현으로 변환하는 단계를 포함할 수 있다.
상기 고급 표현에 대응하는 것을 가지지 않는 명령어는 다음 단계 중 하나 이상을 포함하는 상기 하드웨어에 직접 접근을 제공하는 명령어일 수 있다:
상기 스택 포인터(stack pointer)를 판독하거나 수정하는 단계;
상기 프로그램 카운터(program counter)를 수정하는 단계;
특정한 (보조)프로세서 레지스터((co-)processor register)를 판독하거나 수정하는 단계;
새로운 페이지 테이블을 설정하는 단계; 캐시(cache)를 플러시(flush)하는 단계;
캐시를 인에이블(enable) 또는 디세이블(disable)하는 단계; 또는
인터럽트(interrupt)를 인에이블 또는 디세이블하는 단계.
상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는,
상기 저급 언어 소스 코드에 사용되는 임의의 변수 및 레지스터를 식별하는 단계; 및
상기 고급 표현에서 상기 식별된 변수 및/또는 레지스터를 선언하는 단계를 포함할 수 있다. 이는 상기 고급 언어와 상기 저급 언어 사이에 매핑하는 인터페이스가 또한 나중에 분석되는 상기 고급 표현에 포함될 수 있음을 의미한다.
상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는, 상기 고급 표현 내의 하나의 고급 명령문을 표현하는 상기 저급 언어 소스 코드 내의 명령어 세트를 식별하는 단계; 및 상기 고급 표현 내의 상기 하나의 고급 명령문을 표현하도록 상기 명령어 세트를 변환하는 단계를 포함할 수 있다.
상기 정적 분석의 수행 방법은 상기 고급 언어 소스 코드를 상기 정적 분석이 수행될 수 있는 상기 고급 표현으로 변환하는 단계를 더 포함할 수 있다.
상기 고급 표현은 추상 구문 트리(abstract syntax tree)일 수 있다. 상기 고급 소스 코드는 실질적으로 상기 고급 표현과 동일할 수 있다.
상기 방법은 다음 단계 중 하나 이상을 하기 위하여 상기 고급 표현의 상기 정적 분석을 이용하는 단계를 더 포함할 수 있다:
상기 소스 코드에서 오류를 식별하는 단계;
상기 소스 코드의 최악 수행 시간(worst case execution time)을 결정하는 단계;
상기 소스 코드의 보안 위험(security risk)을 결정하는 단계;
상기 소스 코드에서 접근 정책(access policy)의 올바른 구현을 결정하는 단계;
상기 소스 코드의 상기 명령어를 수행하는 디바이스의 메모리 소비를 결정하는 단계;
상기 소스 코드의 상기 명령어를 수행하는 디바이스의 배터리 소비를 결정하는 단계; 및
통계 및 구조와 같은 상기 소스 코드의 특성을 나타내는 정보를 결정하는 단계.
상기 소스 코드는 임베디드 시스템에서 사용될 수 있다. 상기 내장된 저급 언어 소스 코드는 아키텍쳐 및 하드웨어 의존적일 수 있다.
본 발명의 다른 실시예는 컴퓨터에 인스톨될 때 앞서 언급한 상기 방법에 따라 상기 컴퓨터를 동작시키는 컴퓨터 판독 가능 매체 상에 저장된 컴퓨터 실행 가능 명령어인 소프트웨어를 제공한다.
본 발명의 또 다른 실시예는, 컴퓨터의 프로세서가 앞서 언급한 상기 방법을 수행하도록 소프트웨어가 인스톨된 컴퓨터 시스템을 제공한다.
앞서 하나 이상의 실시예들에서 언급된 바와 같이 본 발명의 이점은 아래를 포함한다:
(1) 상기 제안된 방법의 전체적으로 향상된 점을 통하여 하나의 언어가 다른 언어에 내장되어 있는 중간언어(interlanguage) 코드를 편리하게 분석할 수 있다. 이는 정보/정확성의 손실 없이 내장된 코드가 "사각 지대"로 인식되는 것을 방지한다. 고급 레벨에서 작업함으로써 상기 분석은, 그렇지 않으면 손실될 수 있는 구조와 타입 정보를 이용할 수 있다.
(2) 개별 언어를 위해 개별 분석기를 가질 필요가 없다. 모든 언어가 공통 포맷으로 번역되기 때문에 모든 언어에 대한 상기 공통 포맷에 대한 동일한 분석을 이용할 수 있다. 따라서 분석 개발에 시간을 절약할 수 있고, 전체적인 접근을 보다 일관되고 신뢰할 수 있게 하며, 새로운 검사를 빨리 적용할 수 있게 한다.
도 1은 고급 소스 코드에 내장된 저급 언어 소스 코드를 가지는 소스 코드를 변환하는 방법을 나타낸 순서도이다.
도 2는 정적 분석 방법에 대한 도식적인 아키텍처를 나타낸 도면이다.
도 3은 임베디드 어셈블리 프로그램의 제1 실시예이다.
도 4는 본 발명을 이용하여 C로 번역된 도 3의 어셈블리 프로그램이다.
도 5는 임베디드 어셈블리 프로그램의 제2 실시예이다.
도 6은 본 발명을 이용하여 간단 번역된 도 5의 어셈블리 프로그램이다.
도 7은 본 발명을 이용하여 고급 번역된 도 5의 어셈블리 프로그램이다.
본 명세서 전반에 걸쳐 "포함한다"라는 단어 및 이의 활용어들은 언급된 요소, 정수 또는 단계, 또는 요소들, 정수들 또는 단계들의 그룹을 포함하는 것으로 이해될 것이나, 임의의 다른 요소, 정수 또는 단계, 또는 요소들, 정수들 또는 단계들의 그룹을 배재하지는 않는 것으로 이해될 것이다.
본 명세서에 포함된 문서, 행동, 자료, 디바이스, 아티클(article) 등에 대한 논의는 단지 본 발명의 설명을 제공하기 위한 목적을 가진다. 이 사항들 중 일부 또는 전부는 선행 기술의 일부를 구성하지 않으며, 본 출원 발명의 우선일 이전에 존재했던 본 발명과 관련된 분야의 통상의 지식으로 인정될 수도 없다.
본 예에서는, 저급 언어로 쓰여진 프로그램을 포함하는 소스 코드의 부분은 Plow 로 나타내고, 고급 언어로 쓰여진 부분은 Phigh 로 나타낸다. 프로그램들은 통상 이들의 소스 코드 표현으로 정의된다. 프로그램 분석 및 컴파일(compilation)을 위해 이 소스 코드는 어떤 내부 포맷에, 대개 추상 구문 트리(abstract syntax tree, AST) 형태에 저장된다. 이 후, Plow 는 추상 구문 트리(AST) ASTlow 에 표현되고, Phigh 는 추상 구문 트리(AST) ASThigh 에 표현된다. 다른 실시예에서는, 소스 코드의 내부적인 형식 표현은 추상 구문 트리 형태에 있을 필요는 없다. 분석 및 컴파일에 사용되는 다른 적절한 포맷도 소소 코드, 또는 상기 코드가 분석 수행이 가능한 기계 판독 가능 형태로 있는 유사 형태와 같이 사용될 수 있다.
도 1의 순서도를 참조하여, 고급 소소 코드 Phigh 에 내장된 저급 언어 소스 코드 Plow 를 가지는 소스 코드의 변환 방법에 대한 본 발명의 일 실시예를 설명한다.
우선, 상기 방법은 고급 프로그램의 명령문(statement) Phigh 를 정적 분석이 가능한 고급 표현으로 변환하는 단계(50)를 포함한다. 고급 표현 및 고급 프로그래밍 언어 Phigh 는 이러한 변환 단계를 단순화하는 것과 매우 유사할 수 있다. 그렇지 않으면, 고급 표현 및 고급 프로그래밍 언어는 사실 이 단계를 수행할 필요를 없애는 것과 동일할 수도 있다.
이어서, 상기 방법은 내장된 저급 프로그램의 명령문 Plow 을 단계 50에서 사용된 동일한 고급 표현으로 변환하는 단계를 포함한다.
이를 위하여, 내장된 저급 프로그램에 사용된 모든 저급 변수 또는 레지스터 vlow;i 를 초기에 식별한다(60a).
각 저급 변수 또는 레지스터 vlow ;i 에 대하여 공통 고급 표현에서 새로운 변수 vhigh;i 를 선언한다.
그리고, 하나 이상의 저급 명령어(instruction)를 공통 고급 표현에 있는 하나 이상의 명령문으로 변환한다(60c). 여기서 각 저급 변수 vlow ;i 는 대응하는 새로운 변수 vhigh ; i 로 대체된다. 가능하다면 저급 명령어의 공통 연속들은 하나의 고급 명령문으로 조합된다.
끝으로, Plow 및 Phigh 의 상기 조합된 고급 표현에 대하여 정적 분석을 수행한다(70). 상기 정적 분석은 아래 사항을 위해 사용될 수 있다:
(1) 근간이 되는 소스 코드에서 잠재적 오류를 식별하는 것.
(2) 최악 수행 시간(worst case execution time)을 식별하는 것. 임베디드 시스템에서 동작하는 소프트웨어의 중요한 일면은 통상 실시간 요구사항을 가지고 있다는 점이다. 이는 일정한 시간 내에 반응해야 하고, 일정한 시간에 임무를 끝내야 하고, 일반적으로 실시간과 관련하여 예측 가능하도록 동작해야 한다는 것을 의미한다. 이것은 타이밍 동작(timing behavior)을 개별 명령어 또는 프로그램 세그먼트(segment)에 배정한 후 이들의 상호 의존적인 효과를 계산함으로써 일반적으로 조사된다. 내장된 코드를 위한 타이밍 동작의 분석을 위한 몇몇 문제점을 해결하기 위하여 정적 분석을 사용할 수 있다.
(3) 코드의 보안 위험(security risk) 및 특별한 접근 정책(access policy)의 올바론 구현을 조사하는 것. 이 설명에서 보안은 더 넓은 의미를 가지는 것으로 받아들여 진다. 첫째, 안전한 프로그래밍 구성(constructs)을 사용하는 면에서, 그리고 엉성한 프로그래밍에 기인한 잠재적인 버퍼 오버런(buffer overruns)과 같은 보안 구멍을 피함으로써. 둘째, 코드가 몇몇 유저 또는 시스템-의존적인 보안 정책을 구현하는지를 조사하는 것.
(4) 메모리/파원 소비를 결정하는 것. 임베디드 디바이스는 일반적으로 이용할 수 있는 메모리 또는 소요할 수 있는 파워의 양에 관하여 엄격히 자원을 제한해 오고 있다. 임베디드 시스템에서 동작하는 소프트웨어는 이를 주의해야 한다. 본 발명의 정적 분석에 기초하여 메모리/파워가 얼마나 소비될지에 대하여 예측할 수 있다. 이는 최악 수행 시간 분석과 유사하다.
(5) 프로그램 정보 검색. 특히 큰 소프트웨어 프로젝트에서 소스 코드 구조, 변수의 발생 또는 간단히 특정 소스 코드 구성의 발생 및 관계에 대한 정보를 검색하는 것은 중요하다. 정적 분석에 기초하여, 언어에 독립적인 프로그램으로부터 임의의 상기 정보를 검색할 수 있다. 이것은 특히 소스 코드의 리팩토링(refactoring), 디버깅(debugging) 및 코드 복잡도 분석(code complexity analysis)을 위해 소중하다.
이 방법은 또한 도 2에 개괄적으로 나타나 있다. 우선, 고급 소스 코드 Phigh 와 저급 소스 코드 Plow 가 조합된 원본 소스 코드(72)는 정적 분석이 가능한 형태로 변환(50, 60)되어야 한다. 본 실시예에서는 공통 고급 표현은 추상 구문 트리(74)이다. 소스 코드의 고급 부분 Phigh 는 추상 구문 트리 ASThigh 의 노드로 구문분석된다(76). 내장된 저급 부분 Plow 도 구문분석된 후 변환되고(80), 대응 노드 ASTlow 는 끝으로 추상 구문 트리(74)에 추가된다. 변환(80)의 일부도 내장된 코드의 저급 변수 또는 레지스터 vlow ;i 에 기인하여 도입된 로컬 변수를 위한 ASTlow 에 새로운 노드 vhigh ; i 를 생성한다. 따라서 마지막 추상 구문 트리(74)는 원본 고급 코드 Phigh 를 반영한 노드, 새로이 도입된 로컬 변수를 위한 노드 및 변환된 저급 명령어를 위한 노드를 포함한다. 이러한 추상 구문 트리(74)는 프로그램 분석을 구동(70)하기 위해 사용된다. 이는 본 실시예에서 원본 소스 코드(78)에 속성 위반(property violations) 경고를 띄울 것이다.
본 발명에 대한 더 좋은 예를 들기 위하여 지금부터 더욱 상세한 예를 설명할 것이다. 여기서 고급 언어는 C/C++이고, 저급 언어는 어셈블리이다. 접근법은 다른 언어 조합에도 유사하게 적용될 것이다. 비록 공통 고급 표현이 약간 다를 수 있으나, 간단하고 명료함을 기하기 위하여 C/C++을 공통 고급 표현으로 사용한다.
이 제1 실시예에서, 도 3에 도시된 함수를 설명한다. 이 함수는, 잠재적으로 느린 곱셈(multiplication) 명령어를 회피하는 매우 최적화된 방식으로, 함수 f (a ; b) = 105a + 73b를 구현하는 내장된 ARM(Advanced RISC Machine) 어셈블러를 가지는 C 함수이다. 실제로는, 만약 잦은 함수 호출이 있고 특정한 프로세서가 빠른 곱셈 명령어를 제공하지 않기 때문에 함수의 성능이 중요하다면, 이러한 함수가 사용될 수 있다. (키워드 asm에 의해 소개된) 임베디드 어셈블리 블록에서, 특정 산술 및 인터페이스 기술(interface description)을 구현하는 다섯 개의 어셈블러 명령어가 있다. 인터페이스 기술은 어떤 C 변수(이 경우, c)와 파라미터(이 경우, a 및 b)가 어떤 어셈블러 레지스터에 매핑하는지 뿐만 아니라 어떤 레지스터(이 경우, r3)가 어셈블리 블록에 사용되는지("변경되는지 (clobbered)")를 컴파일러에게 알려준다.
본 예에서 C/C++이 공통 고급 표현으로 사용되기 때문에, 도 3의 함수를 간단한 방법으로 변환하면서 단계 50을 수행하기 위해 어떠한 프로세스도 필요하지 않다.
다음으로, 단계(60)을 수행한다. 각 식별된 저급 변수 및 레지스터(60a)를 위하여, 로컬 C 변수 어셈블리 오퍼랜드(operand)를 재선언한다(60b). 더욱 상세하게, 상기 방법은 변수 c로 복사될 어셈블리 블록으로부터 출력 레지스터를 위한 asm_operand_0을 소개한다. asm_operand_1 및 asm_operand_2는 파라미터 a 및 b의 복사본을 가질 어셈블리 블록에 두 입력 레지스터를 위해 선언된다. 끝으로, 변경된(clobbered) 레지스터 r3를 위해 사용될 로컬 C 변수 asm_operand_3이 소개된다.
그리고 상기 방법은 어셈블리 명령어를 대응하는 C 명령문으로 변환한다(60c). 예를 들어, add 명령어(도 3의 마지막 add 명령어와 같음)는 아래와 같이 오른쪽에 추가 단어와 함께 대입 명령문(assignment statement)으로 변환된다:
ARM 어셈블리 : add rd , r op1 , r op2 → C : r d = r op1 + r op2
산술 자리이동 오퍼랜드(arithmetic-shift operand)(도 3의 처음 rsb 명령어와 같음)와 함께 약간 더 복잡한 rsb 명령어("reverse substract": 역 뺄샘)는 아래와 같이 C로 변환된다:
ARM 어셈블리 : rsb r d , r op1 , r op2 , asl #i → C : r d = r op2 * 2 i - r op1
도 3의 전체 함수를 간단한 방법으로 변환하여 도 4에 도시된 함수를 얻는다. 예에서, 어셈블리 레지스터는 asm_operand_n (여기서, n은 인터페이스 기술에 오퍼랜드의 숫자이다) 으로 명명된 대응하는 C 변수로 대체된다.
이러한 고급 표현으로의 변환으로부터 파라미터 a 및 b가 실제로 사용되는지, 변수 c가 어셈블리 블록 내에서 올바르게 초기화되었는지, 및 컴파일러가 어셈블리 블록 내에 실제로 사용된 모든 레지스터에 대하여 아는지를 확인할 수 있다. 이를 통하여 내장된 코드와 고급 프로그램 사이의 관계에 기초한 어떠한 오류도 식별할 수 있다.
이러한 제1 실시예는 상기 방법의 간단한 구현을 나타낸다. 단계 50을 진행할 필요가 없었다. 나아가, 모든 저급 언어 구성은 대응하는 고급 언어 구성으로 직접 번역된다. 즉, 하나의 어셈블리 명령어는 하나의 대응하는 C 명령문으로 변환된다.
본 발명의 더욱 향상된 점은 저급 언어 구성의 특정 조합이 실제로 더 복잡한 고급 언어 구성을 구현한다는 것을 인식한 것이다. 예를 들어, if-then-else 또는 loop 명령문과 같이 고급 언어의 더 복잡한 제어 흐름 명령문(control-flow statement)을 하나의 저급 언어 명령어(low level language instruction)로 구현하는 것은 종종 불가능하다. 따라서 그러한 고급 구성을 구현하기 위해서는 다양한 저급 언어 명령어가 필요하다. 따라서 단계 60에서 저급 언어를 고급 언어로 변환할 때, 다양한 저급 언어 구성의 그러한 조합이 하나의 고급 언어 구성으로 맞춰질 수 있다.
예로서, 간단한 if-then 제어 흐름 명령문도 가장 현대적인 어셈블리 언어에서 하나의 명령어로 구현될 수 없다. 왜냐하면 이는 각각 독립된 비교(comparison)와 브랜치 부분으로 구성되어 있기 때문이다. 따라서 제어 흐름 구조는 다양한 어셈블리 명령어로 구현되어야 한다. 그러나, 이러한 어셈블리 명령어는 대부분 매우 유사하게 보일 것이다. 이는 브랜치 명령어의 어떤 형태가 뒤따르는 비교 명령어의 어떤 형태를 포함할 것이다. 이러한 명령어들의 조합은 발견되고 따라서 변환될 수 있다. 예를 들어, 다음의 ARM 명령어 연속은 if-then 명령문(if() 안에 평가된 실제적인 표현 없이)을 구현한다:
cmp r1 , op2
bcc label
...
label:
etc.
이 패턴은 다음과 같이 if-then 명령문으로 매치되어 변환될 수 있다:
if ( r1 comp-op op2 ) {
...
}
etc .
여기서 cc는 특정한 조건 코드를 표시하고, comp-op는 대응하는 비교 연산(compare operation)을 표시한다.
이러한 더욱 향상된 점을 도 5에 도시된 제3 실시예 프로그램을 참조하여 설명할 것이다. 상기 프로그램의 내장된 ARM 어셈블리 부분은 for-루프 구성을 구현한다. 제1 실시예에서 설명한 바와 같이 어셈블리 코드를 C로 간단하게 변환하면 도 6에 도시된 C 프로그램에 이르게 된다. 도 6의 C 프로그램이 올바른 변환이지만, 원본 임베디드 어셈블리 프로그램의 진정한 구조를 반영하지는 않는다. 상기 더 고급 기술을 통하여, 도 7에 도시된 바와 같이 어셈블리 코드가 실제로 for-루프 구성을 구현하고 따라서 상기 코드를 변환하는 것을 발견한다. 예를 들어, 상기 발견은, 고급 언어 표현인 if-then-else 명령문으로 변환될 수 있는 CMP(비교) 및 BLT(점프) 명령어의 특별한 조합과 같은 사전에 정의된 패턴을 찾는 것에 기초할 수 있다.
저급 코드를 고급으로 변환하고 이에 의해 루프 구조를 발견함으로써, 고급 코드의 차후 정적 분석은 단계 70에서 루프-관련 검사를 포함할 수 있다. 이는 루프의 루프 변수 i 가 루프 바디 내에서 수정되는 것을 감지하는 것을 포함한다.
이러한 실시예들은 또한, 조합된 코드의 고급 표현을 분석함으로써 우리 기술이 변수 i 와 파라미터 x 가 실제로 그 함수에 사용되는 것을 정확히 발견한다는 것과, 그 함수의 결과를 리턴(return)하기 위해 변수 y를 사용하기 전에 변수 y에 정확히 값이 부여된다는 것을 보여준다. 내장된 저급 코드를 고급 표현으로 변환하는 본 발명의 방법이 없으면, 임베디드 어셈블리 부분에 사용되는 그러한 변수와 파라미터는 완전히 무시되거가 긍정오류(false positive)를 낳게 될 것이다.
저급 코드를 시스템 코스 내에서 고급 언어로 내장시키는 하나의 중요한 이유는 특정한 명령어가 일정한 임무에 필요하기 때문이다. 그러한 임무 중 대표적인 예를 다음과 같다:
스택 포인터(stack pointer)를 판독하거나 수정하기
프로그램 카운터(program counter)를 수정하기
특정한 (보조)프로세서 레지스터((co-)processor register)를 판독하거나 수정하기
새로운 페이지 테이블을 설정하기
캐시(cache)를 플러시(flush)하기
캐시를 인에이블(enable) 또는 디세이블(disable)하기
인터럽트(interrupt)를 인에이블 또는 디세이블하기
C/C++와 같은 고급 언어에는 이러한 명령어들에 대응하는 명령문이 없기 때문에, 우리 기술은 그들이 정적 분석에 대하여 의미를 가지도록 그들의 효과에 대하여 충분히 표현하는 명령문으로 그들을 변환한다. 이런 방식에서 내장된 코드의 변환은 정확할 필요는 없다. 예를 들어, 스택 포인터를 로컬 변수로 판독하는 명령어는 그 로컬 변수에 특별히 표시된 값을 부여하는 명령문으로 변환된다:
ARM 어셈블리 : mrs r1, sp → C : asm_operand_1 = UNKNOWN_VALUE ;
여기서 asm_operand_1은 레지스터 r1에 대응하고 UNKNOWN_VALUE는 분석을 목적으로 하는 "우리가 모르는 어떤 값"을 의미한다. 그리고 상기 분석은 asm_operand_1에 값이 부여되었다는 것을 적어도 알게 되고, 따라서 정확하게 초기화되지 않은 변수에 대하여 잘못된 경고(false warnings)를 차단한다. 이는 우리의 중간언어(interlanguage) 분석이 없으면 잘못되게 검사될지도 모른다.
우리는 로컬 변수의 값을 특정한 보조 프로세서 레지스터에 쓰는 명령어를 제2 실시예로 들고 있다. 그러한 명령어는 상기 로컬 변수를 단지 판독하는 명령문으로 변환된다:
ARM 어셈블리 : mrc p15, 0, r1, c7, c0, 0 → C : (void) asm_operand_1;
여기서 p15는 보조 프로세서 레지스터이고, r1은 결과가 쓰여지는 로컬 변수에 대응하는 메인 프로세서의 레지스터이다(여기서 다른 오퍼랜드는 중요하지 않다). 비록 변환된 C 명령문에 가시적 효과가 없다고 하더라도, 이는 변수의 값이 실제로 사용되고 다시 긍정오류를 방지하는 것을 설명하기 때문에 상기 분석은 여전히 유용하다.
우리는 인터럽트를 디세이블하는 짧은 명령어 연속을 마지막 실시예로 들고 있다. 이 명령어 연속은 고급 변환 기술로 발견되며 그리고 동일한 효과를 나타내는 특정한 고급 명령문으로 변환된다:
ARM 어셈블리:
mrs r0, cpsr
orr r0, r0, #0xd0
msr cpsr_c, r0 → C : special_stmt ( cli ) ;
상기 특정한 명령문은 실제 고급 언어에는 존재하지 않을 수 있는 명령문이다. 그러나 이를 고급 표현에 삽입함으로써 그럼에도 불구하고 원래 효과와 관련된 특성을 검사할 수 있다. 예를 들어 언터럽트가 턴오프된 후에 항상 턴온되는 것을 검사할 수 있다. 이는 여기서 개략적으로 설명된 중간언어 분석 방법을 통해서만 가능하다.
본 발명은 소프트웨어로서 제공될 수 있다. 상기 소프트웨어가 컴퓨터 시스템에 인스톨되면, 프로세서는 상기 컴퓨터 시스템이 앞서 언급한 방법을 수행하게 하는 상기 소프트웨어의 명령어를 실행한다. 컴퓨터 시스템은 분산될(distributed) 수 있다. 컴퓨터는 소스 코드를 받고 저장하는 입력 디바이스를 포함한다. 컴퓨터는 또한 상기 받은 소스 코드 및 소프트웨어를 저장하는 저장 수단을 포함한다. 모니터와 같은 컴퓨터의 출력 디바이스는 유저에게 유저 인터페이스를 보여주기 위하여 제공된다. 인터페이스를 사용하여 유저는 소스 코드에 대하여 정적 분석을 수행할 수 있고, 정적 분석의 결과는 인터페이스 상에서 유저에게 보여진다. 상기 방법의 일부분은 유저가 소스 코드를 쓰는 동안 수행될 수 있다. 그 대신에, 상기 방법은 컴파일 시간 동안에 수행될 수도 있다. 상기 컴퓨터 시스템은 분산될 수 있다.
대략적으로 기재된 바와 같이 본 발명의 범위를 벗어나지 않고 상기 특정한 실시예들에 나타난 바와 같이 본 발명에 다양한 변화 및/또는 수정을 할 수 있음은 당업자에 의해 인정될 것이다. 따라서 본 실시예들은 모든 점에서 설명적으로 이해되어야 하며 제한적으로 해석되어서는 아니 된다.

Claims (17)

  1. 고급 언어 소스 코드에 내장된 저급 언어 소스 코드를 가지는 소스 코드에 대한 정적 분석의 수행 방법에 있어서,
    상기 고급 언어 소스 코드는 상기 정적 분석이 수행될 수 있는 고급 표현으로 표현되고,
    상기 정적 분석의 수행 방법은,
    상기 내장된 저급 언어 소스 코드를 상기 정적 분석이 수행될 수 있는 상기 고급 표현으로 변환하는 단계; 및
    상기 고급 언어 소스 코드의 상기 고급 표현과 상기 저급 소스 코드의 상기 고급 표현에 대하여 정적 분석을 수행하는 단계를 포함하는 정적 분석의 수행 방법.
  2. 제1 항에 있어서,
    상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는, 상기 고급 표현에 대응하는 것을 가지지 않는 상기 명령어를 상기 저급 언어 소스 코드의 전체 의미(semantics)를 보유하지는 않는 방식으로 변환하는 것을 포함하는 정적 분석의 수행 방법.
  3. 제2 항에 있어서,
    상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는, 상기 저급 언어 소스 코드의 전체 의미를 보유하지는 않는 방식으로 변환하는 것을 포함하는 정적 분석의 수행 방법.
  4. 제3 항에 있어서,
    상기 변환하는 단계는, 상기 고급 표현에 대응하는 것을 가지지 않는 상기 저급 언어 소스 코드 내의 하나 이상의 명령어를 상기 하나 이상의 명령어의 모든 의미를 보유하지는 않는 방식으로 변환하는 것을 포함하는 정적 분석의 수행 방법.
  5. 제1 항 내지 제4 항 중 어느 한 항에 있어서, 상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는,
    상기 고급 표현에 대응하는 것을 가지지 않는 상기 저급 언어 소스 코드 내의 하나 이상의 명령어를 식별하는 단계; 및
    상기 하나 이상의 명령어를, 상기 명령어가 상기 소스 코드에 미치는 실질적인 영향만을 표현하는 방식으로, 상기 고급 표현으로 변환하는 단계를 포함하는 정적 분석의 수행 방법.
  6. 제1 항 내지 제5 항 중 어느 한 항에 있어서, 상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는,
    상기 저급 언어 소스 코드에 사용되는 임의의 변수 및 레지스터를 식별하는 단계; 및
    상기 고급 표현에서 상기 식별된 변수 및/또는 레지스터를 선언하는 단계를 포함하는 정적 분석의 수행 방법.
  7. 제1 항 내지 제6 항 중 어느 한 항에 있어서, 상기 내장된 저급 언어 소스 코드를 상기 고급 표현으로 변환하는 단계는,
    상기 고급 표현 내의 하나의 고급 명령문을 표현하는 상기 저급 언어 소스 코드 내의 명령어 세트를 식별하는 단계; 및
    상기 고급 표현 내의 상기 하나의 고급 명령문을 표현하도록 상기 명령어 세트를 변환하는 단계를 포함하는 정적 분석의 수행 방법.
  8. 제1 항 내지 제7 항 중 어느 한 항에 있어서,
    상기 고급 언어 소스 코드를 상기 정적 분석이 수행될 수 있는 상기 고급 표현으로 변환하는 단계를 더 포함하는 정적 분석의 수행 방법.
  9. 제1 항 내지 제8 항 중 어느 한 항에 있어서,
    상기 고급 표현은 추상 구문 트리(abstract syntax tree)인 정적 분석의 수행 방법.
  10. 제1 항 내지 제9 항 중 어느 한 항에 있어서,
    상기 고급 소스 코드는 실질적으로 상기 고급 표현과 동일한 정적 분석의 수행 방법.
  11. 제1 항 내지 제10 항 중 어느 한 항에 있어서,
    상기 정적 분석의 수행 방법은 다음 단계 중 하나 이상을 하기 위하여 상기 고급 표현의 상기 정적 분석을 이용하는 단계를 포함하는 정적 분석의 수행 방법.
    상기 소스 코드에서 오류를 식별하는 단계;
    상기 소스 코드의 최악 수행 시간(worst case execution time)을 결정하는 단계;
    상기 소스 코드의 보안 위험(security risk)을 결정하는 단계;
    상기 소스 코드에서 접근 정책(access policy)의 올바른 구현을 결정하는 단계;
    상기 소스 코드의 상기 명령어를 수행하는 디바이스의 메모리 소비를 결정하는 단계;
    상기 소스 코드의 상기 명령어를 수행하는 디바이스의 배터리 소비를 결정하는 단계; 및
    통계 및 구조와 같은 상기 소스 코드의 특성을 나타내는 정보를 결정하는 단계.
  12. 제1 항 내지 제11 항 중 어느 한 항에 있어서,
    상기 소스 코드는 임베디드 시스템에서 사용되는 정적 분석의 수행 방법.
  13. 제1 항 내지 제12 항 중 어느 한 항에 있어서,
    상기 내장된 저급 언어 소스 코드는 아키텍쳐 및 하드웨어 의존적인 정적 분석의 수행 방법.
  14. 제1 항 내지 제13 항 중 어느 한 항에 있어서,
    임베디드 시스템에 상기 소스 코드를 인스톨하는 단계를 더 포함하는 정적 분석의 수행 방법.
  15. 컴퓨터에 인스톨될 때 제1 항 내지 제14 항 중 어느 한 항의 방법에 따라 상기 컴퓨터를 동작시키는 컴퓨터 판독 가능 매체 상에 저장된 컴퓨터 실행 가능 명령어인 소프트웨어.
  16. 컴퓨터의 프로세서가 제1 항 내지 제14 항 중 어느 한 항의 방법을 수행하도록 소프트웨어가 인스톨된 컴퓨터 시스템.
  17. 제3 항 또는 제4 항에 있어서,
    상기 고급 표현에 대응하는 것을 가지지 않는 상기 명령어는 다음 단계 중 하나 이상을 포함하는 상기 하드웨어에 직접 접근을 제공하는 명령어인 정적 분석의 수행 방법.
    스택 포인터(stack pointer)를 판독하거나 수정하는 단계;
    프로그램 카운터(program counter)를 수정하는 단계;
    특정한 (보조)프로세서 레지스터((co-)processor register)를 판독하거나 수정하는 단계;
    새로운 페이지 테이블을 설정하는 단계;
    캐시(cache)를 플러시(flush)하는 단계;
    캐시를 인에이블(enable) 또는 디세이블(disable)하는 단계; 또는
    인터럽트(interrupt)를 인에이블 또는 디세이블하는 단계.

KR1020107013614A 2007-11-20 2008-11-17 다중 언어 소프트웨어 코드 분석 KR20100106409A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
AU2007906350A AU2007906350A0 (en) 2007-11-20 Multi Language Software Code Analysis
AU2007906350 2007-11-20

Publications (1)

Publication Number Publication Date
KR20100106409A true KR20100106409A (ko) 2010-10-01

Family

ID=40667046

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107013614A KR20100106409A (ko) 2007-11-20 2008-11-17 다중 언어 소프트웨어 코드 분석

Country Status (5)

Country Link
US (1) US8869120B2 (ko)
EP (1) EP2223213B1 (ko)
KR (1) KR20100106409A (ko)
AU (1) AU2008328515B2 (ko)
WO (1) WO2009065168A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017018644A1 (ko) * 2015-07-30 2017-02-02 삼성전자 주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9047164B2 (en) * 2006-09-12 2015-06-02 Opshub, Inc. Calculating defect density by file and source module
CN101881995B (zh) * 2010-06-04 2011-11-09 四川大学 一种针对arm指令集的层次分类功耗测量方法
US9875090B2 (en) * 2012-12-20 2018-01-23 Microsoft Technology Licensing, Llc Program analysis based on program descriptors
JP6008456B2 (ja) * 2013-08-01 2016-10-19 石田 伸一 装置及びプログラム
CA2831711A1 (en) * 2013-10-31 2015-04-30 Ibm Canada Limited - Ibm Canada Limitee Performing safe conditional-load and conditional-store operations
KR20150126484A (ko) * 2014-05-02 2015-11-12 삼성전자주식회사 소스 코드를 머신 코드로 변환하는 전자 장치 및 방법
US10539609B2 (en) * 2014-12-08 2020-01-21 Nxp Usa, Inc. Method of converting high-level test specification language to low-level test implementation language
US9645800B2 (en) 2014-12-19 2017-05-09 Veracode, Inc. System and method for facilitating static analysis of software applications
CN112000339B (zh) * 2020-07-09 2021-09-21 北京大学 安卓apk文件依赖组件识别方法及装置
CN115562649B (zh) * 2022-10-27 2023-06-16 新疆品宣生物科技有限责任公司 一种计算机混合程序语言源代码辅助编写方法及系统
CN117555811B (zh) * 2024-01-11 2024-03-19 北京邮电大学 基于静态符号执行的嵌入式软件分析方法、装置及存储介质

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2143145C (en) 1994-04-18 1999-12-28 Premkumar Thomas Devanbu Determining dynamic properties of programs
US5815719A (en) * 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
US6134707A (en) * 1996-11-14 2000-10-17 Altera Corporation Apparatus and method for in-system programming of integrated circuits containing programmable elements
US6314562B1 (en) * 1997-09-12 2001-11-06 Microsoft Corporation Method and system for anticipatory optimization of computer programs
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
US6748587B1 (en) * 1998-01-02 2004-06-08 Hewlett-Packard Development Company, L.P. Programmatic access to the widest mode floating-point arithmetic supported by a processor
US6314557B1 (en) * 1998-12-14 2001-11-06 Infineon Technologies Development Center Tel Aviv Ltd Hybrid computer programming environment
US7237233B2 (en) * 2002-12-19 2007-06-26 Texas Instruments Incorporated Assembly directives for the support of multi-language programming
US7571431B2 (en) 2003-04-29 2009-08-04 Microsoft Corporation Processing macro information and displaying via GUI in different tools
US7392514B2 (en) 2003-06-26 2008-06-24 Microsoft Corporation Data flow chasing
US20050015752A1 (en) 2003-07-15 2005-01-20 International Business Machines Corporation Static analysis based error reduction for software applications
US20050273860A1 (en) * 2004-06-04 2005-12-08 Brian Chess Apparatus and method for developing, testing and monitoring secure software
US7788640B2 (en) 2004-12-28 2010-08-31 Microsoft Corporation Using code analysis to generate documentation
US7500230B2 (en) * 2005-03-25 2009-03-03 Microsoft Corporation Raising native software code
US8813047B2 (en) * 2005-09-08 2014-08-19 Alcatel Lucent Yet another transformation language (YATL)
KR20090071596A (ko) * 2006-09-20 2009-07-01 내셔널 아이씨티 오스트레일리아 리미티드 모델 검사를 병용하기 위한 전이 시스템 생성 방법
US8091070B2 (en) * 2007-01-08 2012-01-03 Microsoft Corporation Deep embedding of program languages
JP2009076002A (ja) * 2007-09-25 2009-04-09 Nec Electronics Corp 制御タイミング調整方法、コンパイルプログラム、コンパイル装置、及び情報処理装置
US8689183B2 (en) * 2008-01-28 2014-04-01 Rufeng Liang System and method for effectively processing software changes
US8713514B2 (en) * 2011-05-06 2014-04-29 Microsoft Corporation Heterogeneous language data typing without executable regeneration

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017018644A1 (ko) * 2015-07-30 2017-02-02 삼성전자 주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
US10635421B2 (en) 2015-07-30 2020-04-28 Samsung Electronics Co., Ltd. Electronic device, compiling method and computer-readable recording medium

Also Published As

Publication number Publication date
AU2008328515A1 (en) 2009-05-28
EP2223213A4 (en) 2011-11-30
EP2223213A1 (en) 2010-09-01
EP2223213B1 (en) 2019-09-11
US8869120B2 (en) 2014-10-21
WO2009065168A1 (en) 2009-05-28
AU2008328515B2 (en) 2014-07-24
US20110167410A1 (en) 2011-07-07

Similar Documents

Publication Publication Date Title
KR20100106409A (ko) 다중 언어 소프트웨어 코드 분석
Regehr et al. Eliminating stack overflow by abstract interpretation
US6311324B1 (en) Software profiler which has the ability to display performance data on a computer screen
Schlich Model checking of software for microcontrollers
US9772925B2 (en) Storage access debugging with disassembly and symbol entries
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
US10354069B2 (en) Automated reverse engineering
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
Armstrong et al. Isla: Integrating full-scale ISA semantics and axiomatic concurrency models
Ivančić et al. Scalable and scope-bounded software verification in Varvel
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
Hoenicke et al. Doomed program points
Bardin et al. Binary-level testing of embedded programs
Abate et al. Fully abstract and robust compilation: and how to reconcile the two, abstractly
Sun et al. Atos: Adaptive program tracing with online control flow graph support
Kirner Integration of static runtime analysis and program compilation
Yan et al. Conservative signed/unsigned type inference for binaries using minimum cut
Palmskog et al. Foundations and Tools in HOL4 for Analysis of Microarchitectural Out-of-Order Execution.
Kirner et al. Optimizing compilation with preservation of structural code coverage metrics to support software testing
Fauster et al. Intelligent editor for writing worst-case-execution-time-oriented programs
Momeni et al. LDMBL: An architecture for reducing code duplication in heavyweight binary instrumentations
US9830174B2 (en) Dynamic host code generation from architecture description for fast simulation
Chen et al. A program manipulation middleware and its applications on system security
Hasabnis Automatic Synthesis of Instruction Set Semantics and its Applications

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right