KR101219874B1 - 코드 모핑 - Google Patents

코드 모핑 Download PDF

Info

Publication number
KR101219874B1
KR101219874B1 KR1020060001231A KR20060001231A KR101219874B1 KR 101219874 B1 KR101219874 B1 KR 101219874B1 KR 1020060001231 A KR1020060001231 A KR 1020060001231A KR 20060001231 A KR20060001231 A KR 20060001231A KR 101219874 B1 KR101219874 B1 KR 101219874B1
Authority
KR
South Korea
Prior art keywords
code
computer system
compilation result
compiler
morphs
Prior art date
Application number
KR1020060001231A
Other languages
English (en)
Other versions
KR20060094457A (ko
Inventor
브랜든 스코트 와드스워쓰
스티븐 크레이그 셰르츠
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060094457A publication Critical patent/KR20060094457A/ko
Application granted granted Critical
Publication of KR101219874B1 publication Critical patent/KR101219874B1/ko

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B24GRINDING; POLISHING
    • B24CABRASIVE OR RELATED BLASTING WITH PARTICULATE MATERIAL
    • B24C9/00Appurtenances of abrasive blasting machines or devices, e.g. working chambers, arrangements for handling used abrasive material
    • B24C9/003Removing abrasive powder out of the blasting machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B24GRINDING; POLISHING
    • B24CABRASIVE OR RELATED BLASTING WITH PARTICULATE MATERIAL
    • B24C7/00Equipment for feeding abrasive material; Controlling the flowability, constitution, or other physical characteristics of abrasive blasts
    • B24C7/0046Equipment for feeding abrasive material; Controlling the flowability, constitution, or other physical characteristics of abrasive blasts the abrasive material being fed in a gaseous carrier
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B24GRINDING; POLISHING
    • B24CABRASIVE OR RELATED BLASTING WITH PARTICULATE MATERIAL
    • B24C9/00Appurtenances of abrasive blasting machines or devices, e.g. working chambers, arrangements for handling used abrasive material
    • B24C9/006Treatment of used abrasive material
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mechanical Engineering (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Medicines Containing Antibodies Or Antigens For Use As Internal Diagnostic Agents (AREA)
  • Investigating Strength Of Materials By Application Of Mechanical Stress (AREA)
  • Special Wing (AREA)
  • Devices For Executing Special Programs (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Storage Device Security (AREA)

Abstract

코드 모핑이 상기 코드의 의도한 콘텍스트에 영향을 미치지 않으면서 공지된 코드의 적어도 하나의 하부 제어 구조를 재기입하는 것을 포함한다.
코드 모핑, 콘텍스트, 하부 제어 구조, 공지 코드, 구문

Description

코드 모핑{CODE MORPHING}
도1은 코드 모핑의 예들이 구현될 수 있는 네트워크 환경을 보여주는 도면.
도2는 코드 모핑의 적어도 하나의 예시적 구현의 처리 흐름도.
도3은 코드 모핑의 적어도 하나의 예시적 구현에 따른 예시적 통계 테이블.
도4는 코드 모핑의 적어도 하나의 예를 구현할 수 있는 시스템의 한 예를 도시한 도면.
<도면의 주요 부분에 대한 부호의 설명>
105: 클라이언트 장치
110: 서버 장치
130: 데이터 소스
120: 코드 모핑
125: 네트워크
210: 생성기
215: 샘플러
220: 모퍼
225: 타깃 컴포넌트
420: 실행 엔진
430: 테스터
본 발명은 코드 모핑에 관한 것인데, 더 자세하게는 콘텍스트가 보존되는 코드 모핑(context-preserving code morphing)에 관한 것이다.
코드 모핑은, 예를 들어, 실제 세계와는 구문적으로 다르나 실제 세계의 코드의 원래 의미의 콘텍스트 또는 의미를 보유한 코드를 생성하기 위해 실제 세계 코드의 적어도 하나의 기초적 제어 구조를 재기입하는 것을 의미한다.
본 발명의 한 과제는 콘텍스트가 보존되도록 하면서 효율적으로 코드 모핑을 하는 것이다.
본 발명에 대한 상세한 설명이 도면들을 참조하여 이뤄질 것이다.
콘텍스트 보존 코드 모핑이 여기서 설명된다.
도1은 콘텍스트가 보존되는 코드 모핑이 구현될 수 있는 예시적 네트워크 환경을 보여준다. 더 특정하게는, 클라이언트 장치(105), 서버 장치(110), 그 외의 장치(115) 및 데이터 소스(130) 중의 임의의 것이 여기서 설명하는 대로 코드 모핑(120)을 실행할 수 있다. 또한, 장치들(105, 110, 115, 및 130)은 네트워크(125)를 통해서 서로 통신가능하게 결합할 수 있다. 따라서, 코드 모핑(120)은, 장치들 (105, 110, 115 및 130) 중의 임의의 것에 의해, 애플리케이션, 프로그램, 메써드(method), 기능, 또는 로컬하게 생성되었거나 장치들(105, 110, 115 및 130) 중의 임의의 다른 것에서 생성된 프로그램 가능하고 실행가능한 코드의 다른 집합체(assemblage)들 중의 적어도 하나를 활용하여 구현될 수 있다.
클라이언트 장치(105)는, 데스크톱 퍼스널 컴퓨터(PC), 워크스테이션, 메인프레임 컴퓨터, 인터넷 응용기기, 셋톱 박스, 및 미디어 장치를 포함하나 이것들에만 국한되지는 않는 다양한 종래의 컴퓨팅 장치 중의 적어도 하나일 수 있다. 또한, 클라이언트 장치(105)는, 유선 및/또는 무선 링크를 통해서 네트워크(125)와 연결될 수 있고, PDA, 랩톱 컴퓨터, 셀룰러 전화기 등을 포함하나 이것에만 국한되지는 않는 임의의 장치들 중의 적어도 하나일 수 있다. 또한, 클라이언트 장치(105)는 앞서 설명한 클라이언트 장치들이 여러 양(quantity)들로 및/또는 이것들의 결합으로 구현된 것을 나타낼 수 있다. 그 외의 장치(115)는 또한 앞의 클라이언트 장치(105)의 예들 중의 임의의 것에 의해 구현될 수 있다.
서버 장치(110)는 코드 모핑(120) 기능을 포함하여, 클라이언트 장치(105) 또는 그외의 장치(115)에게 다양한 데이터 및/또는 기능성 중의 임의의 것을 제공할 수 있다. 코드 모핑(120) 용의 데이터 또는 기능성은, 공개되어 이용될 수도 있고, 대안으로는 제한적으로 제공될 수도 있는데, 예를 들어 단지 특정의 사용자들에게만 제한될 수 있거나 또는 적합한 가입 또는 라이센스 요금이 지불되는 경우에만 사용될 수 있다. 서버 장치(110)는, 네트워크 서버, 애플리케이션 서버, 웹 블레이드 서버, 또는 이것들의 임의의 결합 중의 적어도 하나일 수 있다. 전형적 으로는, 서버 장치(110)는 콘텐츠의 소스인 임의의 장치일 수 있고, 클라이언트 장치(105)는 네트워크(125) 또는 오프라인 매체 중의 어느 하나를 통해서 이런 콘텐츠를 수신하는 임의의 장치일 수 있다. 그러나, 여기 설명된 예시적 구현예들에 따르면, 서버 장치(105) 및 클라이언트 장치(110)는, 서로, 보내는 호스트 또는 수신하는 호스트의 구실을 바꾸어 할 수 있다. 그외의 장치(115)는 또한 서버 장치(110)의 앞의 예들 중의 임의의 것에 의해 구현될 수 있다.
그 외의 장치(115)는, 관리된 실행 환경 또는 테스트 환경 중의 어느 하나에서, 여기 설명된 예들 중의 하나 또는 그 이상의 것에 따라서 코드 모핑(120)을 할 수 있는 임의의 장치일 수 있다. 즉, 그 외의 장치(115)는, 애플리케이션, 프로그램, 메써드, 기능, 또는 이 코드가 대응하는 프로그램 가능하고 실행가능한 그외의 조합들의 콘텍스트를 보존하면서 코드를 모핑할 수 있는 임의의 소프트웨어 인에이블된 컴퓨팅 또는 프로세싱 장치일 수 있다. 따라서, 그 외의 장치(115)는, 운영 체제, 인터프리터(interpreter), 컨버터, 컴파일러, 또는 그 상에서 구현되는 관리된 실행 환경 중의 적어도 하나를 갖는 컴퓨팅 또는 프로세싱 장치일 수 있다. 이런 예들은 어떤 경우에든 제한하기 위한 의도로 제시된 것은 아니며, 그런 식으로 해석해서도 안된다.
네트워크(125)는, 임의의 유선 및/또는 무선 네트워크를 포함할 수 있는, 종래의 다양한 네트워크 토폴로지들 중의 임의의 것을 나타낼 수 있다. 네트워크(125)는 공개 및/또는 독점 프로토콜들을 포함하는 종래의 다양한 네트워크 프로토콜 중의 임의의 것을 활용할 수도 있다. 예를 들어, 네트워크(125)는 인터넷, 인 트라넷, 또는 하나 또는 그 이상의 근거리 통신망들(LAN)의 적어도 일부분들을 포함할 수 있다.
데이터 소스(130)는, 데스크톱 퍼스널 컴퓨터(PC)를 포함하여, 애플리케이션, 프로그램, 메써드, 기능 또는 객체 지향 코드로 기입될 수도 있고 그렇지 않을 수도 있는 프로그램 가능하고 실행가능한 코드의 그외의 집합체와 관련하여 코드 모핑(120)을 할 수 있는 종래의 다양한 컴퓨팅 장치들 중의 임의의 것을 나타낼 수 있다. 대안으로는, 데이터 소스(130)는, 애플리케이션, 프로그램, 메써드, 또는 기능의 적어도 일부분을 또 다른 워크스테이션으로 전달할 수 있는, 워크스테이션, 메인 프레임 컴퓨터, 인터넷 응용기기, 셋톱 박스, 미디어 장치, PDA, 랩톱 컴퓨터, 랩톱 컴퓨터, 셀룰러 전화기 등과 같은 것 중의 임의의 것이 될 수도 있다. 또한, 데이터 소스(130)가 코드 모핑(120)이 그에 대해 술어화(predicated)될 수 있는 애플리케이션, 프로그램, 메써드, 또는 기능을 위한 코드 소스일 수 있기는 하지만, 데이터 소스(130)는 코드 모핑(120)의 구현으로부터 귀결되는 적어도 코드 소스로서 또한 간주할 수 있다. 본 구현과 관계없이, 코드 모핑(120)을 위한 기초로서 쓰일 수 있는 공지된 애플리케이션들, 프로그램들, 메써드들, 또는 기능들이, 데이터 소스(130)로부터 장치들(105, 110, 115) 중의 임의의 것으로, 및 네트워크(125)를 통한 온-라인 통지의 일부로서 또는 오프-라인 통지의 일부로서 전달될 수 있다.
코드 모핑(120)은, 실제 세계와는 구문적으로 다르나(syntactically different) 실제 세계의 코드의 원래의 의미적 콘텍스트 또는 의미(original smantic context or meaning)를 유지하는 코드를 생성하기 위해, (다르게는 이하에서 '고객 애플리케이션'으로도 불리는) 실제 세계 코드의 적어도 하나의 기초적 제어 구조(underlying control structure)를 재기입하는 것을 포함할 수 있다. 그 결과, 예를 들어 테스팅 환경 하에서, 프로세싱 컴포넌트는, 실제 고객 애플리케이션과 구문적으로는 다르나 콘텍스트적으로는 일치하여 컴포넌트에게 실제적 테스트 시나리오를 제공하는 모핑된 코드를 수신하고 및/또는 실행함으로써 테스팅될 수 있다. 즉, 프로세싱 컴포넌트는 실제적이고 이해가능한 테스트 결과를 제공할 수 있는데, 이는 고객 애플리케이션에 대한 처리 결과가 이미 공지되어 있을 수 있고 따라서 모핑된 코드의 처리 결과에 대한 비교 기준으로서 쓰일 수 있기 때문이다. 코드 모핑(120)은, 테스팅 환경뿐만이 아니라, 관리되지 않은 실행 환경에서 또는 관리된 실행 환경에서 구현될 때 추가의 관련성을 가질 수 있다.
코드 모핑은, 앞서 설명한 대로, 고객 애플리케이션의 의도된 콘텍스트를 유지하면서 고객 애플리케이션의 적어도 하나의 기초 제어 구조를 재기입함으로써 구현될 수 있다. 더 특정하게는, 이런 재기입은 하나 또는 그 이상의 '모프(morph)'를 포함할 수 있는데, 이는 고객 애플리케이션의 구문 및 구조 중의 적어도 하나쪽으로 지도될 수 있다. 이런 모프들의 예로서는, 메써드 외부 구조 모프들, 메써드 내부 구조 모프들, 코드 모프들의 축약, 최적화 목표된 모프들, 및 저장 뮤테이션(mutation) 모프들을 포함할 수 있는데, 이것들에만 국한되는 것은 아니다.
도2는 코드 모핑(120)(도1 참조)의 예시적 구현예로서의 처리 흐름도(200)를 도시하였다.
코드(205)는, 적어도, 하나 또는 그 이상의 애플리케이션들, 프로그램들, 메써드들, 기능들, 또는 프로그램 가능하고 실행가능한 코드의 그 외의 집합체들을 가리킬 수 있다. 코드 모핑(120)의 적어도 한 예에 따르면, 코드(205)는 중간 언어(이후 'IL'로 지칭) 또는 어셈블리 언어로 기입된 실제 세계의 코드일 수 있다. IL 및 어셈블리 언어 모두는 하이 레벨 소스 코드 및 타깃(즉, 머신 판독 가능) 코드 간의 매개 언어로서 사용될 수 있다.
그러나, 코드(205)는 IL 및 어셈블리 언어의 예들에만 국한되는 것은 아니다. 그보다는, 코드 모핑(120)을 구현하기 위해서, 코드(205)는 다중 구문 특성들 및 구축 속성들 중의 적어도 하나가 샘플링될 수 있는 다양한 공지 언어 중의 임의의 하나로 기입될 수 있다.
생성기(210)는 그 내에서 코드 모핑(120)의 적어도 일부분들이 구현될 수 있는 컴포넌트 또는 모듈로서 취급될 수 있다. 생성기(210)와 연관된 여러 연산들이, 샘플러(215) 및 모퍼(220)에 의해, 단독적으로 또는 일제히, 실행될 수 있다. 대안으로는, 생성기(210)와 연관된 연산들이 컴포넌트 또는 모듈 자체에 의해, 또는 이 모듈이 그 속에 포함되거나 관련된 네트워크 노드와 공조하여 컴포넌트 또는 모듈에 의해 (즉, 생성기 210 가 포함되거나 관련된 프로세서 또는 프로세서들에 의해) 수행될 수 있다. 그외의 구현예들에서는, 샘플러(215) 및 모퍼(220)의 연산을 포함하여 생성기(210)의 연산들은, 하드웨어, 펌웨어, 또는 하드웨어, 펌웨어 및 소프트웨어의 몇몇 결합으로서, 단독적으로 또는 이것들의 결합으로, 구현될 수 있다.
또한, 생성기(210)의 컴포넌트들 또는 모듈들은, 공통 환경 하에서, 도2에 묘사된 대로, 별개의 컴포넌트들 또는 모듈들로서 제공될 수 있다. 그러나, 생성기(210)의 적어도 하나의 대안 실시예는 대응하는 컴포넌트들 또는 모듈들을 별개의 프로세싱 환경들에 배치할 수도 있다. 또한, 생성기(210)의 컴포넌트들 또는 모듈들은 단일 컴포넌트 또는 모듈로서 제공될 수도 있다.
샘플러(215)는 예를 들어 서버 장치(110) 또는 데이터 소스(130) (도1 참조)로부터 코드(205)를 수신할 수 있다. 앞서 제시된 대로, 코드(205)는 예를 들어 IL 또는 어셈블리 언어 코드로 제공될 수 있다. 전형적으로는, 그러면, 샘플러(215)는 구문적인(syntactic) 특징을 샘플링하고 및/또는 해독할 수 있고 코드(205)가 기입된 언어의 속성들을 구축할 수 있다. 그에 따라, 코드(205)의 부분 또는 부분들의 원래의 콘텍스트 또는 의도를 여전히 유지하면서 코드(205)의 어떤 부분 또는 부분들이 구문적으로 및 구조적으로 하는 것 중의 적어도 하나로 모핑될 수 있는지에 대한 판정이 이뤄질 수 있다. 코드(205)의 모핑이 어떻게 구현되어야 하는지에 대한 추가의 판정이 이뤄질 수 있다.
예를 들어, 코드(205) 또는 이것의 부분들은 샘플러(215)에 의해 판독될 수 있는 데이터를 포함할 수 있다. 이런 데이터는 코드(205)의 어떤 부분 또는 부분들이 구문적으로, 구조적으로, 또는 양쪽 모두로 모핑될 지를 표시할 수 있다. 대안으로는, 샘플러(215)는 그 안에 있는 콘텍스트를 알기 위해 코드(205) 또는 이것의 부분들을 조사할 수 있는데, 이런 콘텍스트(코딩 패턴이 될 수 있음)는 모핑을 위한 후보가 되도록 판정될 수 있다. 이런 콘텍스트 또는 패턴들의 예로서는, 도3 의 예를 참조하여 이하에 설명된다.
모퍼(220)는, 코드(205)의 어떤 부분이 모핑될 것인지와, 코드(205)의 적어도 하나의 하부 제어 구조를 재기입하여 생성기(210)에 이미 입력된 코드(205)와 구문적으로는 다르나 콘텍스트적으로는 일치하는 모핑된 코드를 생성하기 위해 상기 모핑이 어떤 방식으로 구현될 것인지에 관하여, 앞서 언급한 판정들에 대해 영향을 줄 수 있다. 코드(205)의 모핑된 버젼은 예를 들어 테스팅 환경 하에서 활용될 수 있는데, 이런 시나리오는 단지 하나의 예로서 제시된 것일 뿐이고 어떤 식으로든 본 발명을 제한하기 위해 제시된 것은 아니다.
'모프(morph)들'은, 애플리케이션, 프로그램, 메써드, 기능, 또는 프로그램 가능하고 실행가능한 코드의 그외의 집합체의 적어도 일부분에 대응하는 구문 또는 구조(즉, 구성체들) 중의 적어도 하나에 대한 양성적(benign) 조작들로 간주될 수 있다. 더 특정하게는, 모핑된 코드의 다중 순열(multiple permutation)들은 코드(205)의 적어도 일부분을 재 코딩(re-coding)하거나, 대체하거나 또는 다른 식으로 재구성함으로써 생성될 수 있다. 따라서, 테스팅 환경 하에서, 고객 애플리케이션들은 레버리지(leverage)되어서 실제 컴포넌트들 또는 모듈들의 어려운 사용법을 타깃으로 하는 복잡한 테스트 케이스들을 생성할 수 있다.
타깃 컴포넌트(225)는 모핑된 코드(즉, 생성기(210) 특히 모퍼(220)에서 재 코딩되고, 대체되고, 또는 그 외의 식으로 재구성된 하나 또는 그 이상의 부분들을 갖는 코드)의 하나 또는 그 이상의 변형들을 수신하게 될 컴포넌트 또는 모듈일 수 있다.
타깃 컴포넌트(225)는 테스팅 환경 하에서 모핑된 코드를 수신하는 것으로부터 혜택을 입을 수 있다. 즉, 모퍼(220)는, 애플리케이션들, 프로그램들, 메써드들, 기능들, 또는 생성기(210)에서 코드(205)로서 수신된 프로그램 가능하고 실행가능한 코드의 그외의 집합체들의 볼륨에 좌우되어 백만 라인 정도의 또는 10억 라인 정도의 모핑된 코드를 생성할 수 있다. 생성기(210)에서 생성된 모핑된 코드의 변형들의 수에 영향 줄 수 있는 또 다른 요인으로서는 코드(205) 또는 타깃 컴포넌트 (225) 중 어느 하나에 대해 테스팅될 모핑들 자체의 볼륨이 있을 수 있다. 따라서, 타깃 컴포넌트(225)는 그 결과가 알려진 테스팅 코드의 상당한 양에 노출될 수 있고, 따라서 코드(205) 및/또는 타깃 컴포넌트(225)에 대한 모핑들의 버그들 및 그 외의 문제들이 신속하게 식별될 수 있다.
도3은 코드 모핑(120)(도1 참조)의 예를 도시하였다. 더 특정하게는, 본 예는 모퍼(220)(도2 참조)에 의해 구현되는 대로 코드(205)를 모핑된 코드(325)로 변환하는 것을 묘사하였다. 따라서, 도3의 예는 도2에 묘사된 여러 특징들을 참조하여 설명된다.
코드(205)는, 프로그램, 메써드, 연산, 애플리케이션, 기능, 또는 모핑이 구현될 수 있는 프로그램 가능하고 실행가능한 코드의 그외의 집합체의 적어도 일부분을 포함할 수 있다. 도2의 예에서, 코드(205)는 DownloadData(310), ReadData(315) 및 WriteData(320)의 메써드들을 포함할 수 있다.
적어도 하나의 예에 따라서, 코드(205)는 샘플러(215)에 의해 샘플링되어서, 코드의 원래의 콘텍스트 또는 의도를 여전히 유지하면서 구문 또는 구조 또는 이 모두에 관하여 코드(205)의 어떤 부분 또는 부분들이 모핑될 지에 대한 것과 추가로 어떤 모핑 또는 모핑들이 구현될 수 있는지를 판정할 수 있다. 대안 실시예들에 따라서, 코드(205)를 어디에서 어떻게 모핑할지에 관한 판정들이 샘플러(215)의 혜택없이 이뤄질 수 있고, 따라서 코드(205)는 모퍼(220)로 직접 입력될 수 있다.
모핑된 코드(325)는, 모핑된 코드(325) 및 코드(205)가 구문적 의미는 동일하나 구문 및/또는 구조는 다르게 되도록 양성적 방식으로 재기입된 적어도 하나의 하부 제어 구조를 갖는 코드(205)를 포함할 수 있다. 모프 1(330) 및 모프 2(335)는, 코드(205) 내에 삽입되어 모핑된 코드(325)를 생성할 수 있는, 구문적 또는 구조적 모프들 또는 이 모두의 조합일 수 있다. 즉, 모프 1(330) 및 모프 2(335)는, 단독으로든 결합되어서든 어느 하나로, 하나 또는 그 이상의 연산들, 애플리케이션들, 메써드들, 기능들, 또는 코드(205)로서 입력된 프로그램 가능하고 실행가능한 코드의 그 외의 집합체들의 양성적 변환들로서 기능할 수 있다. 또한, 코드(205)가 두개의 모프들에만 제한되지는 않는다는 점을 주의하라. 모프 1(330) 및 모프 2 (335)는 단지 예로서만 주어진 것이다.
도3의 모프 1(330) 및 모프 2(335)로서 단독으로 또는 여러 결합들에 따라 구현될 수 있는 모프들의 제한적이 아닌 예들로서는 이하와 같은 것들이 있다.
메써드 외부 구조 모프들: 코드(205)는, 파라미터들을 메써드들에 부가하고, 프리미티브 타입(promitive type)들의 폭을 확장하고, 또는 파라미터들의 순서를 변경함으로써, (즉 원래의 의도된 콘텍스트를 유지하면서 이것의 적어도 하나의 하 부 제어 구조가 재기입되는 것에 의해) 모핑될 수 있다. 예를 들어, 메써드들에 부가된 파라미터들은 단순 객체 타입들, 단순 타입들, (관리된 실행 환경 하에서의) 불용 정보(garbage) 컬렉션 타입들, 어레이들, 및 값(value) 타입들을 포함할 수 있다.
메써드 내부 구조 모프들: 코드(205)는, 로컬 변수들의 사용 순서를 변경함으로써, 로컬 변수들을 부가함으로써, 외부 변수들을 여분으로 사용함으로써(예를 들어, 외부 정적 필드들을 사용함으로써 또는 외부 메써드들을 사용함으로써, 여기서 양자 모두는 네이티브(native)하고 사이드 효과 없게 관리됨), 여분의 루프들을 부가함으로써, (관리된 실행 환경하에서의) 예외 핸들링을 통해서 제어 흐름에 스티칭(stitch)함으로써, 하나 또는 그 이상의 제약들을 가함으로써, 상수를 메써드로 대체함으로써, 및 폴스 스택 깊이(false stack depth)를 도입함으로써, 모핑될 수 있다.
코드 축약 모프들: 코드(205)는 하나 또는 그 이상의 제약들을 접고(fold), 및 코드를 루프가 되도록 롤링(rolling)함으로써 모핑될 수 있다.
최적화 타깃된 모프들: 코드(205)는, 하나 또는 그 이상의 루프들을 롤링 업(rolling up)하고, 및 하나 또는 그 이상의 공통 하위 표현들을 도입함으로써 모핑될 수 있다.
저장 공간 모프들의 뮤테이션; 코드(205)는, 타입 로컬들을 통해서 변환하고, 및 로컬들을 또 다른 저장 공간 내로 변환함으로써 모핑될 수 있다.
이상 설명한 모프들은 예시적 목적으로만 제공된 것이고, 어떤 식으로든 코드 모핑(120)의 구현들을 제한하기 위한 목적으로 제시된 것은 아니다. 또한, 모프들의 이런 예들과 그 외의 예들은 양성적 방식으로 코드(205)의 적어도 하나의 하부 제어 구조를 재기입하도록 의도된 것이다. 즉, 이 모프들은 타깃 컴포넌트(225)에 대한 코드의 프로세싱 결과에 영향을 끼치지 않고 코드(205)의 적어도 구문 또는 구조 또는 양자 모두를 변화시키는 것으로 의도되었다. 따라서, 코드 모핑(120)을 위해 구현된 특정 모프들은, 양성인 것으로 여겨질 수도 있고, 이 모프들 중의 특정의 것이 사실상 양성인지의 여부를 테스트하기 위한 노력의 일환으로 구현될 수도 있다.
타깃 컴포넌트(225)는 모핑된 코드(325)(즉, 이상 설명한 하나 또는 그 이상에 의해 모프들에 의해 모핑된 코드 205)를 수신하게 될 컴포넌트 또는 모듈일 수 있다. 타깃 컴포넌트(225)는, 메써드들, 애플리케이션들, 프로그램들, 기능들, 또는 생성기(210), 특히 모퍼(220)에 코드(205)로서 수신된 프로그램 가능하고 실행가능한 코드의 그 외의 집합체들의 볼륨에 좌우되어 백만 라인 또는 심지어 10억 라인 정도의 코드(205)의 모핑된 변형들을 발생시키는 모퍼(220)로부터 혜택을 입을 수 있다. 즉, 타깃 컴포넌트(225)는, 타깃 컴포넌트(225)에 대한 코드(205)의 프로세싱 결과가 공지된 것이라고 가정할 수 있기 때문에, 그에 대해 예측된 결과들이 공지되어 있는 거대 크기의 테스트 코드에 노출될 수 있다. 그에 따라, 모프들에 대한, 적어도 타깃 컴포넌트(225)에 대한 버그들 및/또는 그 외의 결함들이 쉽게 검출될 수 있다.
도4는 코드 모핑(120)(도1 참조)이 구현될 수 있는 예시적 시스템(400)을 도시하였다. 더 특정하게는, 시스템(400)은 코드 모핑(120)이 관리된 실행 환경 하에서 어떻게 구현될 수 있는지를 도해하였다. 시스템(400)은 도2 및 도3 모두의 엘리먼트들을 참조하여 이하에서 설명된다. 그러나, 시스템(400)의 이런 구성들 및 컨피규레이션은 오로지 예로서 제시된 것이며, 어떤 식으로든 이것들에만 국한되는 것으로 추정해서는 안 된다.
관리된 실행 환경(415)은, 애플리케이션, 프로그램, 메써드, 기능 또는 프로그램가능하고 실행가능한 코드의 그 외의 집합체가 실행하기 위해서 또 다른 소프트웨어 시스템을 요구할 수 있기 때문에, 애플리케이션 프로그램이 운영 체제에서 적합하게 실행되기 위한 하나 또는 그 이상의 루틴을 제공할 수 있다. 따라서, 이런 코드는, 애플리케이션 프로그램과 운영 체제 간에 소재할 수 있는, 하나 또는 그 이상의 관리된 실행 환경 루틴을 호출할 수 있고, 관리된 실행 환경 루틴들은 적합한 운영 체제 루틴들을 호출할 수 있다.
관리된 실행 환경들이 개발되어서, 서버들, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 및 다수의 모바일 프로세싱 장치들을 포함하는, 점점 더 넓어지는 범위의 프로세싱 장치들 상에서의 소프트웨어 실행의 신뢰성을 향상시켜 왔다. 관리된 실행 환경들은 프로세싱 장치(예를 들어, 도1을 참조하여 앞서 설명한 장치들 105, 110, 115 및 130) 상에서 돌아가는 애플리케이션에게 추상화 층(a layer of abstraction) 및 서비스들을 제공할 수 있다. 관리된 실행 환경들은 에러 핸들링 및 자동 메모리 관리를 포함하여 여러 능력을 갖춘 애플리케이션을 추가로 제공할 수 있다. 관리된 실행 환경들의 예로서는 다음의 것들이 있다: 비쥬얼 베이직 런타임 실행 환경; 예를 들어 Java®루틴들을 가동하는 데에 사용되는 Java® 가상 머신 런타임 실행 환경; 또는 예를 들어 호출 루틴을 실행하기 전에 Microsoft.NET애플리케이션들을 기계어가 되도록 컴파일링하기 위한 공통 언어 런타임(CLR).
코드(205)는, 도2 및 도3을 참조하여 이상 설명한 대로, 적어도 애플리케이션들, 프로그램들, 메써드들, 기능들, 또는 예를 들어 IL 또는 어셈블리어로 기입된 프로그램 가능하고 실행가능한 코드의 그외의 집합체들 중의 하나 또는 그 이상의 것을 나타내는 것일 수 있다.
생성기(210)는, 도2를 참조하여 이상 설명한 대로, 코드 모핑(120)의 적어도 일부분들을 구현하기 위한 하나 또는 그 이상의 컴포넌트를 나타내는 것일 수 있다. 적어도 하나의 예시적 구현에 따르면, 생성기(210)는 관리되지 않은 실행 환경하에서 코드(205)를 수신하기 위해 데이터 소스를 불러낼 수 있다. 대안으로는, 관리된 실행 환경 하에서의 적어도 하나의 예는 코드(205)를 수신하기 위해 실행 엔진(420)을 불러내는 생성기(210)를 포함할 수 있다.
실행 엔진(420)은, 적어도 관리된 실행 환경하에서, 코드(205)가 어떻게 관리되어야 하고 조작되어야 하는 지를 표시하는 코드(205)의 일부분을 참조할 수 있다.
생성기(210)가 어떻게 코드(205)를 수신하는지에 관계없이, 생성기(210)는 그에 의해 모핑된 코드(335)(도3 참조)가 생성되는 예시적 프로세스(200)(도2 참 조)를 구현할 수 있다. 즉, 생성기(210)는, 이전 형태의 코드(205)와 구문적으로는 다르나 콘텍스트적으로는 일치하는 방식으로 코드(205)의 하나 또는 그 이상의 하부 제어 구조들(예를 들어 구문, 구조, 또는 양자 모두)을 재기입할 수 있다. 또한, 생성기(210)는 테스트되었거나 또는 이미 검증된 모프들을 활용하여 모핑된 코드(325)의 다중 순열들을 생성할 수 있다.
테스팅 환경의 적어도 한 예에 따르면, 생성기(210)는 이후 관리된 실행 환경(415) 하에서 모핑된 코드(325)를 컴파일러(425)에 제출할 수 있다. 따라서, 모핑된 코드(325)의 엄청난 순열들에 종속됨으로써, 코드의 다른 결합들을 처리하고 코딩 버그들을 노출시키는 컴파일러(425)의 능력이 테스트될 수 있다.
컴파일러(425)는, 생성기(210)에 의해 생성될 수 있는 모핑된 코드(325)의 순열 스코어(the scores of permutations)용의 타깃 오브젝트의 한 예에 불과한 것으로 여겨질 수 있다. 그러나, 목적하는 바가 있는 코드 모핑은, 완전히 그것만을 위한 것은 아니지만, 테스팅 목적으로 의도되었을 수 있다. 따라서, 도4의 적어도 하나의 대안 예에 따르면, 무작위적으로 생성된 코드의 타깃은, 그에 대해 예측된 결과들이 공지되어 있는 모핑된 코드의 스코어들(적어도 백만 라인 정도)을 수신함으로써 목적이 있는 테스팅이 성취될 수 있는 관리된 실행 환경(415) 내의 임의의 컴포넌트 또는 모듈일 수 있다.
테스터(430)는, 관리되지 않은 실행 환경 하에서 또는 관리된 실행 환경(415) 내에서, 컴파일러(425)의 테스팅 데이터 또는 모핑된 코드의 대안적인 타깃 오브젝트를 수집하는 컴포넌트 또는 모듈을 참조할 수 있다.
그에 따라, 관리되지 않은 실행 환경과 관리된 실행 환경 모두에서의 테스팅은, 재기입된 적어도 하나의 하부 제어 구조(예를 들어, 구문적 특성 또는 구조적 속성)를 갖고, 예측되는 프로세싱 결과들이 공지되어 있는 코드에 의해서, 더욱 목적적이 되고 효율적이 될 수 있다.
도1 내지 도4을 참조하여 이상 설명한 예들은, 하나 또는 그 이상의 프로세서, 시스템 메모리, 및 여러 시스템 컴포넌트들을 결합하는 시스템 버스를 포함하나 이것들에만 국한하여 포함하지는 않는 컴퓨팅 환경에서 구현될 수 있다. 또한, 이 컴퓨팅 환경은 여러 컴포넌트들 중의 임의의 것에 의해 액세스 가능한 다양한 컴퓨터 판독 가능 매체를 포함할 수 있고, 휘발성 또는 비휘발성 매체, 탈착식 또는 비탈착식 매체를 포함한다.
여러 모듈들 및 기술들이, 하나 또는 그외의 컴퓨터 또는 그외의 장치들에 의해 실행되는, 프로그램 모듈들과 같은 컴퓨터 실행 가능 명령어들의 일반적 맥락하에서 여기 설명되었다. 일반적으로, 프로그램 모듈들은 특정 태스크들을 수행하거나 또는 특정 추상적 데이터 유형들을 구현하기 위한, 루틴들, 프로그램들, 객체들, 컴포넌트들, 데이터 구조들 등을 포함한다. 전형적으로는, 프로그램 모듈들의 기능성은 여러 실시예들에서 바라는 대로 결합되거나 또는 배분될 수 있다.
이런 모듈들 및 기술들의 구현은 몇몇 형태의 컴퓨터 판독 가능 매체 상에 저장될 수 있기도 하고 이를 통해서 전송될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스 가능한 임의의 가용 매체일 수 있다. 국한하기 위한 것이 아니라 예를 들기 위한 것으로서, 컴퓨터 판독 가능 매체는 '컴퓨터 저장 매체' 및 ' 통신 매체'를 포함할 수 있다.
'컴퓨터 저장 매체'는, 컴퓨터 판독 가능 명령들, 데이터 구조들, 프로그램 모듈들, 또는 그외의 데이터 등의 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성 또는 비휘발성, 탈착성 또는 비탈착성의 매체를 포함한다. 컴퓨터 저장 매체는, RAM, ROM, EEPROM, 플래시 메모리 또는 그외의 메모리 기술, CD-ROM, DVD 또는 그외의 광 저장 장치, 자기 카세트들, 자기 테이프, 자기 디스크 저장 장치 또는 그 외의 자기 저장 장치들, 또는 바라는 정보를 저장하는 데에 사용될 수 있고 컴퓨터에 의해 액세스 가능한 임의의 그 외의 매체를 포함하나, 이것들에만 국한되는 것은 아니다.
'통신 매체'는 전형적으로는 컴퓨터 판독 가능 명령어들, 데이터 구조들, 프로그램 모듈들, 또는 반송파 또는 그 외의 전송 메커니즘과 같은 변조된 데이터 신호와 같은 그 외의 데이터를 담아둔다. 통신 매체는 또한 임의의 정보 전달 매체를 포함한다. '변조된 데이터 신호' 라는 용어는 정보를 신호가 되도록 인코딩하는 식으로 하여 설정된 또는 변경된 하나 또는 그 이상의 특성들을 갖는 신호를 의미한다. 제한적이 아닌 오직 예시적인 목적으로만 볼 때, 통신 매체는 유선 네트워크 또는 직접 유선(direct-wired) 연결과 같은 유선 매체와, 음향, RF, 적외선 및 그 외의 무선 매체와 같은 무선 매체를 포함한다. 이상의 것들 중의 임의의 것을 조합하는 것도 컴퓨터 판독 가능 매체의 범주 내에 들어가는 것이다.
본 명세서를 통해서, '일 실시예', '실시예' 또는 '예시적 실시예'와 같이 언급이 되고 있는데, 이는 특정하게 기술된 특성, 구조, 또는 특징이 본 발명의 적 어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 이런 문구들의 사용은 단 하나의 실시예 이상의 것을 지칭하는 것일 수 있다. 또한, 기술된 특성들, 구조들, 또는 특징들은, 하나 또는 그 이상의 실시예들에서, 임의의 적합한 방식으로 결합될 수 있다.
당업자는 본 발명이 하나 또는 그 이상의 특정 상세 사항이 없이도, 또는 그외의 방법들, 리소스들, 재료들 등을 가지고서 실시될 수 있다는 점을 알 것이다. 그 외의 경우들에서, 공지된 구조들, 리소스들, 또는 연산들은 단지 본 발명의 요점을 흐리지 않기 위해서 상세하게 보이거나 설명되지 않았다.
본 발명의 예시적 실시예들과 응용들이 이상에서 도해되고 설명되었는데, 본 발명은 이상 설명한 정밀한 부분까지의 구성 및 리소스들에만 국한되는 것이 아님을 알 것이다. 당업자에게 명백한 여러 변경들, 변화들, 및 변형들이, 청구된 발명의 범위를 벗어나지 않고서, 여기 개시된 본 발명의 방법들 및 시스템들의 배치, 동작 및 상세 사항들에 대해 이뤄질 수 있다.
본 발명에 따라서 효율적인 코드 모핑이 획득된다.

Claims (18)

  1. 컴파일러 내의 결함 또는 버그를 테스트하기 위한 하나 이상의 테스트 케이스를 생성하기 위해, 알려진 컴파일 결과(compilation result)를 가지는 코드의 구문(syntax) 및 구조(structure) 중 하나 이상을 양성적으로(benignly) 모핑하여 상기 코드와 구문론적으로(syntactically) 상이하고 시맨틱 문맥은 동일한 모핑된 코드를 생성하고, 상기 모핑된 코드를 컴파일러로 컴파일한 결과와 상기 알려진 컴파일 결과를 비교하는, 하나 이상의 프로세서를 포함하는 컴퓨터 시스템 내에서 구현되는 방법으로서,
    상기 방법은,
    하나 이상의 프로세서를 포함하는 컴퓨터 시스템에 의해, 데이터 소스로부터 코드를 수신하는 단계 - 상기 수신된 코드를 컴파일링한 제1 컴파일 결과는 공지된 것임 -;
    상기 컴퓨터 시스템에 의해, 하나 이상의 구문 또는 구조로 양성적으로 모핑될 상기 수신된 코드의 하나 이상의 부분을 결정하기 위하여 상기 수신된 코드의 구문적 특성 및 구성 속성(syntactical characteristics and construct properties)을 결정하는 단계;
    상기 컴퓨터 시스템에 의해, 상기 수신된 코드의 구문적 특성 및 구성 속성의 결정 결과에 따라 상기 수신된 코드를 양성적으로 모핑하는 단계 - 상기 수신된 코드를 양성적으로 모핑하는 단계는, 상기 수신된 코드의 하나 이상의 결정된 부분에 하나 이상의 선택된 모프(morph)를 주입하는 것을 포함하고, 상기 하나 이상의 선택된 모프는, 프리미티브 타입(primitive type)의 폭을 확장하는 것, 외부 변수를 여분으로 사용하는 것, 메써드(method)를 상수로 대체하는 것, 및 로컬(locals)을 또 다른 저장 공간으로 변환하는 것 중 적어도 하나를 포함하고, 상기 선택된 모프는 상기 수신된 코드의 시맨틱 문맥을 동일하게 유지하면서 상기 수신된 코드의 하나 이상의 구문 또는 구조를 변경함 -;
    상기 컴퓨터 시스템에 의해, 상기 컴파일러를 이용하여 상기 양성적으로 모핑된 코드를 컴파일하여 제2 컴파일 결과를 생성하는 단계; 및
    상기 컴퓨터 시스템에 의해, 상기 알려진 제1 컴파일 결과를 상기 제2 컴파일 결과와 비교하는 것에 의하여 상기 컴파일러 내의 결함 또는 버그를 테스트하는 단계 - 상기 제1 컴파일 결과가 상기 제2 컴파일 결과와 다른 경우, 상기 컴파일러는 상기 하나 이상의 선택된 모프를 컴파일하는 것에 있어 하나 이상의 결함 또는 버그를 가지는 것으로 판정됨 -
    를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 선택된 모프는 프리미티브 타입의 폭을 확장하는 것을 포함하는, 방법.
  3. 제1항에 있어서,
    상기 선택된 모프는 외부 변수를 여분으로 사용하는 것을 포함하는, 방법.
  4. 제1항에 있어서,
    상기 선택된 모프는 로컬(locals)을 또 다른 저장 공간으로 변환하는 것을 포함하는, 방법.
  5. 제1항에 있어서,
    상기 선택된 모프는 폴스 스택 깊이(false stack depth)를 도입하는 것을 포함하는, 방법.
  6. 제1항에 있어서,
    상기 하나 이상의 선택된 모프는 복수의 선택된 모프를 포함하고, 상기 복수의 선택된 모프 각각은 상기 컴파일러에 대한 테스트 케이스를 나타내는, 방법.
  7. 제6항에 있어서,
    상기 복수의 선택된 모프 중 적어도 하나는 무작위로 선택되는, 방법.
  8. 제1항에 있어서,
    상기 수신된 코드는 하이 레벨 소스 코드 언어로 작성된 코드를 포함하고, 상기 제1 컴파일 결과 및 상기 컴파일 결과는 타깃 머신 판독 코드로 구성된, 방법.
  9. 컴퓨터 시스템의 하나 이상의 프로세서에 의해 실행될 때 방법을 구현하는 컴퓨터 실행가능한 명령어를 포함하는 컴퓨터 판독 가능 저장 매체로서, 상기 방법은, 컴파일러 내의 결함 또는 버그를 테스트하기 위한 하나 이상의 테스트 케이스를 생성하기 위해, 알려진 컴파일 결과(compilation result)를 가지는 코드의 구문(syntax) 및 구조(structure)중 하나 이상을 양성적으로(benignly) 모핑하여 상기 코드와 구문론적으로(syntactically) 상이하고 시맨틱 문맥은 동일한 모핑된 코드를 생성하고, 상기 모핑된 코드를 컴파일러로 컴파일한 결과와 상기 알려진 컴파일 결과를 비교하는 방법이며,
    또한 상기 방법은,
    하나 이상의 프로세서를 포함하는 컴퓨터 시스템에 의해, 데이터 소스로부터 코드를 수신하는 단계 - 상기 수신된 코드를 컴파일링한 제1 컴파일 결과는 공지된 것임 -;
    상기 컴퓨터 시스템에 의해, 하나 이상의 구문 또는 구조로 양성적으로 모핑될 상기 수신된 코드의 하나 이상의 부분을 결정하기 위하여 상기 수신된 코드의 구문적 특성 및 구성 속성(syntactical characteristics and construct properties)을 결정하는 단계;
    상기 컴퓨터 시스템에 의해, 상기 수신된 코드의 구문적 특성 및 구성 속성의 결정 결과에 따라 상기 수신된 코드를 양성적으로 모핑하는 단계 - 상기 수신된 코드를 양성적으로 모핑하는 단계는, 상기 수신된 코드의 하나 이상의 결정된 부분에 하나 이상의 선택된 모프(morph)를 주입하는 것을 포함하고, 상기 하나 이상의 선택된 모프는, 프리미티브 타입(primitive type)의 폭을 확장하는 것, 외부 변수를 여분으로 사용하는 것, 메써드를 상수로 대체하는 것, 및 로컬(locals)을 또 다른 저장 공간으로 변환하는 것 중 적어도 하나를 포함하고, 상기 선택된 모프는 상기 수신된 코드의 시맨틱 문맥을 동일하게 유지하면서 상기 수신된 코드의 하나 이상의 구문 또는 구조를 변경함 -;
    상기 컴퓨터 시스템에 의해, 상기 컴파일러를 이용하여 상기 양성적으로 모핑된 코드를 컴파일하여 제2 컴파일 결과를 생성하는 단계; 및
    상기 컴퓨터 시스템에 의해, 상기 알려진 제1 컴파일 결과를 상기 제2 컴파일 결과와 비교하는 것에 의하여 상기 컴파일러 내의 결함 또는 버그를 테스트하는 단계 - 상기 제1 컴파일 결과가 상기 제2 컴파일 결과와 다른 경우, 상기 컴파일러는 상기 하나 이상의 선택된 모프를 컴파일하는 것에 있어 하나 이상의 결함 또는 버그를 가지는 것으로 판정됨 -
    를 포함하는, 컴퓨터 판독 가능 저장 매체.
  10. 제9항에 있어서,
    상기 선택된 모프는 프리미티브 타입의 폭을 확장하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체.
  11. 제9항에 있어서,
    상기 선택된 모프는 외부 변수를 여분으로 사용하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체.
  12. 제9항에 있어서,
    상기 선택된 모프는 메써드를 상수로 대체하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체.
  13. 제9항에 있어서,
    상기 선택된 모프는 로컬(locals)을 또 다른 저장 공간으로 변환하는 것을 포함하는, 컴퓨터 판독 가능 저장 매체.
  14. 제9항에 있어서,
    상기 수신된 코드는 중간 언어(intermediate language) 또는 어셈블리 언어로 작성된 코드를 포함하는, 컴퓨터 판독 가능 저장 매체.
  15. 컴퓨터 시스템으로서,
    하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에 의해 실행될 때 방법을 구현하는 컴퓨터 실행가능한 명령어를 포함하는 하나 이상의 컴퓨터 판독 가능 저장 매체를 포함하고, 상기 방법은, 컴파일러 내의 결함 또는 버그를 테스트하기 위한 하나 이상의 테스트 케이스를 생성하기 위해, 알려진 컴파일 결과(compilation result)를 가지는 코드의 구문(syntax) 및 구조(structure)중 하나 이상을 양성적으로(benignly) 모핑하여 상기 코드와 구문론적으로(syntactically) 상이하고 시맨틱 문맥은 동일한 모핑된 코드를 생성하고, 상기 모핑된 코드를 컴파일러로 컴파일한 결과와 상기 알려진 컴파일 결과를 비교하는 방법이며,
    또한 상기 방법은,
    상기 컴퓨터 시스템에 의해, 데이터 소스로부터 코드를 수신하는 단계 - 상기 수신된 코드를 컴파일링한 제1 컴파일 결과는 공지된 것임 -;
    상기 컴퓨터 시스템에 의해, 하나 이상의 구문 또는 구조로 양성적으로 모핑될 상기 수신된 코드의 하나 이상의 부분을 결정하기 위하여 상기 수신된 코드의 구문적 특성 및 구성 속성(syntactical characteristics and construct properties)을 결정하는 단계;
    상기 컴퓨터 시스템에 의해, 상기 수신된 코드의 구문적 특성 및 구성 속성의 결정 결과에 따라 상기 수신된 코드를 양성적으로 모핑하는 단계 - 상기 수신된 코드를 양성적으로 모핑하는 단계는, 상기 수신된 코드의 하나 이상의 결정된 부분에 하나 이상의 선택된 모프(morph)를 주입하는 것을 포함하고, 상기 하나 이상의 선택된 모프는, 프리미티브 타입(primitive type)의 폭을 확장하는 것, 외부 변수를 여분으로 사용하는 것, 메써드를 상수로 대체하는 것, 및 로컬(locals)을 또 다른 저장 공간으로 변환하는 것 중 적어도 하나를 포함하고, 상기 선택된 모프는 상기 수신된 코드의 시맨틱 문맥을 동일하게 유지하면서 상기 수신된 코드의 하나 이상의 구문 또는 구조를 변경함 -;
    상기 컴퓨터 시스템에 의해, 상기 컴파일러를 이용하여 상기 양성적으로 모핑된 코드를 컴파일하여 제2 컴파일 결과를 생성하는 단계; 및
    상기 컴퓨터 시스템에 의해, 상기 알려진 제1 컴파일 결과를 상기 제2 컴파일 결과와 비교하는 것에 의하여 상기 컴파일러 내의 결함 또는 버그를 테스트하는 단계 - 상기 제1 컴파일 결과가 상기 제2 컴파일 결과와 다른 경우, 상기 컴파일러는 상기 하나 이상의 선택된 모프를 컴파일하는 것에 있어 하나 이상의 결함 또는 버그를 가지는 것으로 판정됨 -
    를 포함하는, 컴퓨터 시스템.
  16. 제15항에 있어서,
    상기 선택된 모프는 프리미티브 타입의 폭을 확장하는 것을 포함하는, 컴퓨터 시스템.
  17. 제15항에 있어서,
    상기 선택된 모프는 외부 변수를 여분으로 사용하는 것을 포함하는, 컴퓨터 시스템.
  18. 제15항에 있어서,
    상기 선택된 모프는 메써드를 상수로 대체하는 것을 포함하는, 컴퓨터 시스템.
KR1020060001231A 2005-02-24 2006-01-05 코드 모핑 KR101219874B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/064,865 2005-02-24
US11/064,865 US8020152B2 (en) 2005-02-24 2005-02-24 Code morphing

Publications (2)

Publication Number Publication Date
KR20060094457A KR20060094457A (ko) 2006-08-29
KR101219874B1 true KR101219874B1 (ko) 2013-01-09

Family

ID=36693571

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060001231A KR101219874B1 (ko) 2005-02-24 2006-01-05 코드 모핑

Country Status (5)

Country Link
US (1) US8020152B2 (ko)
EP (1) EP1696316B1 (ko)
JP (1) JP2006236327A (ko)
KR (1) KR101219874B1 (ko)
CN (1) CN1825277B (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012012861A1 (en) * 2010-07-29 2012-02-02 Irdeto Canada Corporation System and method for efficiently deploying massively diverse program instances to resist differential attacks
US8683452B1 (en) * 2010-12-21 2014-03-25 Emc Corporation Dynamically obfuscated javascript
US10459717B2 (en) * 2013-08-07 2019-10-29 Sap Se Observing evolution of software development artifacts
CN105677318A (zh) * 2015-12-28 2016-06-15 心动网络股份有限公司 一种防止游戏被内存修改器修改的方法
US10248545B2 (en) * 2016-02-17 2019-04-02 Parasoft Corporation Method for tracking high-level source attribution of generated assembly language code
US11200151B1 (en) 2021-03-12 2021-12-14 Sas Institute Inc. Graphical user interface and debugger system for selecting and testing alterations to source code for software applications

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010014094A (ko) * 1997-06-25 2001-02-26 트랜스메타 코포레이션 개선된 마이크로프로세서
US20030221087A1 (en) 2002-03-20 2003-11-27 Seiko Epson Corporation Information processing system
US20040172637A1 (en) 2003-02-28 2004-09-02 Sap Ag Code morphing manager

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU7957998A (en) * 1997-06-09 1999-01-25 Intertrust, Incorporated Obfuscation techniques for enhancing software security
US5903761A (en) * 1997-10-31 1999-05-11 Preemptive Solutions, Inc. Method of reducing the number of instructions in a program code sequence
US7089541B2 (en) * 2001-11-30 2006-08-08 Sun Microsystems, Inc. Modular parser architecture with mini parsers
US20030145190A1 (en) * 2001-12-07 2003-07-31 Paolo Faraboschi Compiler algorithm to implement speculative stores
US7228426B2 (en) * 2002-04-03 2007-06-05 Microsoft Corporation Integrity ordainment and ascertainment of computer-executable instructions with consideration for execution context
US7669188B2 (en) * 2004-12-03 2010-02-23 Palo Alto Research Center Incorporated System and method for identifying viable refactorings of program code using a comprehensive test suite

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010014094A (ko) * 1997-06-25 2001-02-26 트랜스메타 코포레이션 개선된 마이크로프로세서
US20030221087A1 (en) 2002-03-20 2003-11-27 Seiko Epson Corporation Information processing system
US20040172637A1 (en) 2003-02-28 2004-09-02 Sap Ag Code morphing manager

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
논문(2004.01.01) *

Also Published As

Publication number Publication date
JP2006236327A (ja) 2006-09-07
EP1696316B1 (en) 2019-08-07
CN1825277A (zh) 2006-08-30
US8020152B2 (en) 2011-09-13
CN1825277B (zh) 2012-10-10
EP1696316A3 (en) 2006-10-04
KR20060094457A (ko) 2006-08-29
EP1696316A2 (en) 2006-08-30
US20060190937A1 (en) 2006-08-24

Similar Documents

Publication Publication Date Title
US8615750B1 (en) Optimizing application compiling
US10528363B2 (en) Conservative class preloading for real time java execution
KR101944570B1 (ko) 변형 컨텍스트-인식 데이터 소스 관리
US9645912B2 (en) In-place function modification
US20090024986A1 (en) Runtime code modification
US20130167128A1 (en) Application Compiling
US8607203B1 (en) Test automation framework using dependency injection
KR101219874B1 (ko) 코드 모핑
Xu et al. Freedom: Engineering a state-of-the-art dom fuzzer
US6951014B1 (en) Method and apparatus for representation of a JavaScript program for execution by a JavaScript interpreter
US9047100B2 (en) Abstract syntax tree transformation
US20230052827A1 (en) Automated synthesis of reference policies for runtime microservice protection
Niephaus et al. Graalsqueak: toward a smalltalk-based tooling platform for polyglot programming
CN108228312B (zh) 通过解释器执行代码的系统和方法
Binkley et al. Tree-oriented vs. line-oriented observation-based slicing
Sayed et al. If-transpiler: Inlining of hybrid flow-sensitive security monitor for JavaScript
US11537372B2 (en) Generating compilable machine code programs from dynamic language code
Schippers et al. An implementation substrate for languages composing modularized crosscutting concerns
Husák et al. PeachPie: Mature PHP to CLI compiler
Kim et al. Static dalvik bytecode optimization for Android applications
Celada Android Native Library Fuzzing
Lindkvist Runtime Detection of use of Vulnerable Code with a Fine-Grained Resolution
US20060184914A1 (en) Random code generation
Liu Object-sensitive Type Analysis for Python
Zadka Testing

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
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151217

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161220

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171219

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181226

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20191217

Year of fee payment: 8