KR100965706B1 - 코드 재기입이 가능한 컴퓨터 장치 및 코드 재기입 방법 - Google Patents

코드 재기입이 가능한 컴퓨터 장치 및 코드 재기입 방법 Download PDF

Info

Publication number
KR100965706B1
KR100965706B1 KR1020050001580A KR20050001580A KR100965706B1 KR 100965706 B1 KR100965706 B1 KR 100965706B1 KR 1020050001580 A KR1020050001580 A KR 1020050001580A KR 20050001580 A KR20050001580 A KR 20050001580A KR 100965706 B1 KR100965706 B1 KR 100965706B1
Authority
KR
South Korea
Prior art keywords
rewrite
code unit
code
delete delete
rewritten
Prior art date
Application number
KR1020050001580A
Other languages
English (en)
Other versions
KR20050087727A (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 KR20050087727A publication Critical patent/KR20050087727A/ko
Application granted granted Critical
Publication of KR100965706B1 publication Critical patent/KR100965706B1/ko

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H39/00Devices for locating or stimulating specific reflex points of the body for physical therapy, e.g. acupuncture
    • A61H39/06Devices for heating or cooling such points within cell-life limits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H7/00Devices for suction-kneading massage; Devices for massaging the skin by rubbing or brushing not otherwise provided for
    • A61H7/002Devices for suction-kneading massage; Devices for massaging the skin by rubbing or brushing not otherwise provided for by rubbing or brushing
    • A61H7/003Hand-held or hand-driven devices
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H2201/00Characteristics of apparatus not provided for in the preceding codes
    • A61H2201/02Characteristics of apparatus not provided for in the preceding codes heated or cooled
    • A61H2201/0221Mechanism for heating or cooling
    • A61H2201/0278Mechanism for heating or cooling by chemical reaction
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61HPHYSICAL THERAPY APPARATUS, e.g. DEVICES FOR LOCATING OR STIMULATING REFLEX POINTS IN THE BODY; ARTIFICIAL RESPIRATION; MASSAGE; BATHING DEVICES FOR SPECIAL THERAPEUTIC OR HYGIENIC PURPOSES OR SPECIFIC PARTS OF THE BODY
    • A61H2201/00Characteristics of apparatus not provided for in the preceding codes
    • A61H2201/12Driving means
    • A61H2201/1253Driving means driven by a human being, e.g. hand driven
    • AHUMAN NECESSITIES
    • A61MEDICAL OR VETERINARY SCIENCE; HYGIENE
    • A61NELECTROTHERAPY; MAGNETOTHERAPY; RADIATION THERAPY; ULTRASOUND THERAPY
    • A61N5/00Radiation therapy
    • A61N5/06Radiation therapy using light
    • A61N2005/0658Radiation therapy using light characterised by the wavelength of light used
    • A61N2005/0659Radiation therapy using light characterised by the wavelength of light used infrared
    • A61N2005/066Radiation therapy using light characterised by the wavelength of light used infrared far infrared

Landscapes

  • Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Rehabilitation Therapy (AREA)
  • Epidemiology (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Pain & Pain Management (AREA)
  • Physical Education & Sports Medicine (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Animal Behavior & Ethology (AREA)
  • General Health & Medical Sciences (AREA)
  • Public Health (AREA)
  • Veterinary Medicine (AREA)
  • Dermatology (AREA)
  • Stored Programmes (AREA)

Abstract

시스템 및 방법은 코드 유닛의 개발, 배치, 및 실행동안 다양한 단계에서 실시될 수 있는 코드 재기입기의 확장가능, 구성가능 세트를 통하여 코드 유닛의 재기입 및 변환을 제공한다. 전술된 시스템 및 방법은 프로그램에 대하여 크게 독립적이고 소스 프로그램, 컴파일러, 또는 실행환경의 복잡도를 크게 증가시키지 않는 프로그램 개발자 및 시스템 운영자가 프로그램의 개발, 배치, 및 실행동안 다양한 단계에서 코드 변환을 실시하도록 하는 강력한 방법을 제공한다.
컴퓨터 판독가능 매체, 재기입 관리자, 코드 재기입

Description

코드 재기입이 가능한 컴퓨터 장치 및 코드 재기입 방법{COMPUTER APPARATUS CAPABLE OF CODE REWRITING AND METHOD FOR CODE REWRITING}
동일한 구성요소 및 특성을 참조하기 위하여 도면을 통하여 동일한 참조부호들이 이용된다.
도 1은 다양한 개발 및 배치 환경에서 발생할 수 있는 코드 재기입을 위한 예시적인 일 프로세스를 도시하는 도면.
도 2는 코드 재기입을 실시하는데 적합한 예시적인 일 계산 환경을 도시하는 도면.
도 3은 코드 재기입을 실시하는데 적합한 또 다른 예시적인 계산 환경을 도시하는 도면.
도 4는 코드 재기입을 용이하게 하는 다양한 구성요소들을 상술하는 개발자 컴퓨터, 중간 컴퓨터, 및 배치 컴퓨터의 예시적인 블럭도.
도 5는 도 1의 코드 재기입을 위한 예시적인 프로세스를 실시하는 구성요소들을 상술하는 예시적인 블럭도.
도 6은 운영 시스템 구성요소의 일부로서 구현될 수 있는 코드 재기입 프로세스를 실시하는 구성요소들을 도시하는 도면.
도 7은 다양한 시스템 구성요소들의 일부 및 독립형 모듈로서 코드 재기입 프로세스를 실시하는 구성요소를 도시하는 도면.
도 8은 다양한 시스템 구성요소들의 일부 및 독립형 모듈로서 코드 재기입 프로세스를 실시하는 구성요소들을 도시하는 도면.
도 9는 코드 유닛 자체 내에 포함된 코드 재기입 프로세스를 실시하는 구성요소들을 도시하는 도면.
도 10은 도 2에 도시된 환경에 부합하는 예시적인 코드 배치 환경을 도시하는 도면.
도 11은 도 2에 도시된 환경에 부합하는 예시적인 코드 배치 환경을 도시하는 도면.
도 12는 애플리케이션 호환성 재기입기로 호칭되는 예시적인 시스템 코드 재기입기를 도시하는 도면.
도 13은 코드 재기입을 실시하는 예시적인 방법의 블럭도.
도 14는 도 2 및 3의 예시적인 환경에 도시된 것들과 같은 개발자 컴퓨터, 중간 컴퓨터, 및 배치 컴퓨터를 실시하는데 적합한 예시적인 계산 환경을 도시하는 도면.
*도면의 주요부분에 대한 부호의 설명*
100, 기본 프로세스 102, 코드 유닛
202, 개발자 컴퓨터 204, 배치 컴퓨터
206, 네트워크 302, 중간 컴퓨터
400, 소스 프로그램 402, 컴파일러
406, 재기입 캐시 500, 재기입 관리자
504, 재기입 리스트 1202, ACR 데이터 베이스
1204, 운영 시스템 1406, 시스템 메모리
본 개시는 코드 재기입, 특히 그 개발로부터 그 실행을 통한, 코드의 라이프 사이클동안 코드를 재기입할 수 있는 재기입기의 구성 가능한 세트에 관한 것이다.
프로그램 개발은 통상적으로 소스코드 기록, 소스코드 편집, 소스코드 컴파일링, 및 그 후 결과적인 바이너리 코드 실행의 일 사이클을 따른다. 개발 사이클은 예를 들면, 개인 개발자 컴퓨터로부터 개발자 컴퓨터, 중간 컴퓨터, 및 하나 이상의 네트워크를 통하여 상호접속되는 배치 컴퓨터들의 일 기업을 포함하는 계산 장치의 시스템에 이르는 다양한 계산 환경에서 발생할 수 있다. 따라서, 상기 사이클은 예를 들면, 최종 배치 컴퓨터 상에서의 프로그램의 설치 및 실행 이전에 중간 컴퓨터 상에서의 프로그램의 설치 및 실행을 포함하는 중간 단계들을 포함할 수도 있다.
그 개발 사이클 동안 어느 포인트에서 프로그램이 변환될 필요가 있을 수 있는 데는 다양한 이유가 있다. 예를 들면, 그 실행을 모니터하고 정확히 동작중인지 여부를 결정하도록 프로그램 내에 코드를 도입할 필요가 존재할 수 있다. 그러한 "워치독(watchdog)" 코드는 특정한 함수(function)가 호출되는 휫수를 카운팅하거나 특정한 함수의 출력을 파일로 보내는 것과 같은 태스크들을 수행할 수 있다. 프로그램 실행시 문제가 발견되면, 문제의 근원을 발견하도록 설계된 추가적인 코드를 포함하도록 프로그램을 더 변환시킬 필요가 존재할 수 있다.
일부 프로그래밍 언어들은 "워치독" 코드의 도입과 같은 어떤 변환을 가능하게 하는 특성들을 지원한다. 그러나, 이 변환 특성들은 보통은 매우 제한된다. 또한, 그러한 특성은 보통은 언어특유의(language-specific) 컴파일러들을 통하여 실시된다. 따라서, 일 프로그래밍 언어는 "워치독" 코드 변환 특성을 지원할 수 있는 한편 또 다른 것은 그렇지 않을 수 있다.
개발동안 일 프로그램을 변환하는 다른 이유들은 프로그램이 배치될 가변하는 실행환경을 포함할 수 있다. 예를 들면, 일 프로그램은 운영 시스템, 데이터 베이스, 또는 애플리케이션 프로그램의 일부로서 실행될 수 있다. 상기 의미론, 또는 정의된 시스템 동작은 환경에 따라 변화할 수 있거나, 환경이 변화하는 경우(예를 들면, 운영 시스템 업그레이드) 환경 내에서 변화할 수 있다. 따라서, 일 프로그램은 상이하고 변화하는 환경에서 상이하게 동작할 수 있다. 따라서, 상이한 환경들에서 일관된 방식으로 프로그램이 수행되는 것을 확실히 하는 것은 프로그램 변환을 필요로 할 수 있다. 그러한 변환은 개발자가 소스에 환경특유의 코드를 도입하거나, 그러한 코드를 컴파일러를 통하여 도입함으로써 성취될 수 있다. 또 다른 옵션은 실행환경을 변환하는 것이다. 이 옵션들 각각은 프로그램, 컴파일러, 또는 실행환경의 복잡도를 크게 증가시키는 단점을 가진다.
따라서, 소스 프로그램, 컴파일러, 또는 실행환경의 복잡도를 크게 증가시키 지 않는 일 프로그램의 개발 및 배치 사이클동안 상이한 단계들에서 코드 변환을 실시하는 방법이 필요하다.
개요
일 시스템 및 방법은 코드 재기입기의 확장 가능, 구성 가능 세트의 이용을 통한 코드 유닛의 재기입 및 변환을 제공한다. 재기입기는 코드 유닛의 개발 및 배치를 통한 다양한 단계들에서 실시되어 적용될 수 있다. 재기입 관리자는 코드 유닛 자체 내의 개발자, 보안 또는 설치 정책과 같은 시스템 정책, 등에 의하여 임베드된 정보를 포함하는 다양한 이유들로 코드 유닛의 재기입을 개시할 수 있다. 재기입 관리자는 하나 이상의 재기입기를 식별하고 코드 유닛에 대해서 재기입기를 실행하며, 재기입된 코드 유닛 또는 재기입된 코드 유닛의 일련의 연속된 버전을 생성한다. 또한 재기입 관리자는 특정 순서로 코드 유닛에서 재기입을 수행하도록 재기입기를 배열할 수 있다. 코드 유닛에 대해서 재기입기를 실행하기 전에, 재기입 관리자는 코드 유닛 및 재기입기 모두의 신뢰성을 검증한다. 재기입된 코드 유닛은 캐시에 기억되어 코드 유닛을 실행하는 후속 호출들은 재기입 프로세스의 반복을 야기하지 않는다. 재기입된 코드 유닛은 캐시로부터 직접 액세스되고 실행될 수 있다.
요약
이하의 논의는 코드 유닛의 개발 및 배치동안의 다양한 단계에서 실시될 수 있는 코드 재기입기의 확장 가능, 구성 가능 세트를 통한 코드 유닛의 재기입 및 변환을 제공하는 시스템 및 방법에 관한 것이다. 설명된 시스템 및 방법의 장점은 소스 프로그램, 컴파일러, 또는 실행환경의 복잡도를 크게 증가시키지 않는 프로그램의 개발 및 배치를 통한 상이한 단계에서의 코드 변환을 프로그램 개발자 및 시스템 운영자가 실시하기 위한 강력한 방법을 제공하는 것을 포함한다.
예시적인 환경
도 1은 다양한 개발 및 배치 환경에서 발생할 수 있는 코드 재기입을 위한 기본 프로세스(100)를 도시한다. 코드 유닛(102)을 재기입하는 프로세스(100)는 코드 유닛(102)이 재기입된 코드 유닛(106)을 생성하도록 코드 유닛(102)에 하나 이상의 코드 재기입기를 적용시키는 재기입 함수(rewrite function, 104)를 만나는 것을 포함한다. 코드 유닛(102)은, 예를 들면, 언어특유의 컴파일러로부터, PC 상에서 실행 준비된 네이티브 코드(native code), 관리된 코드 환경을 위한 중간언어(예를 들면, 추상적 및/또는 기계 독립 언어)로 배치된 실행가능 파일 또는 DLL의 컬렉션, 해석된 언어로 기록된 스크립트 프로그램으로 컴파일된 오브젝트 모듈을 포함할 수 있다.
코드 유닛(102)은 개발 및 배치의 다양한 단계에서 재기입 함수(104)를 만날 수 있다. 따라서, 재기입 함수(104)는 코드 유닛(102)의 개발, 배치 및 실행에 연루된 상이한 컴퓨터들상에서 상이한 시나리오에서 동작 가능할 수 있다. 일반적으로, 재기입 함수(104)는 코드 유닛(102)을 수신하고, 코드 유닛이 재기입되는지 여부를 결정하고, 어느 재기입기가 코드 유닛을 재기입하는데 적용되는지를 식별하고 배열하며 코드 유닛에 대하여 재기입기의 실행을 용이하게 하여, 재기입된 코드 유닛(106)을 야기시킨다. 재기입 함수(104)는 일반적으로 재기입 관리자, 코드 유닛(102)을 재기입하도록 구성된 하나 이상의 코드 재기입기, 및 코드 유닛에 어느 재기입기가 적용되는지 및 어느 순서에 따르는지를 식별하는 정보(예를 들면, 재기입기 리스트)를 수반 및/또는 포함한다.
도 2 및 3은 코드 재기입을 실시하는데 적합한 예시적인 환경을 예시한다. 도 2 및 3의 예시적인 환경은 제한이 아닌 예시로서만 제공된다. 따라서, 여기서 설명된 바와 같은 코드 개발 및 배치의 다양한 단계들 동안 코드 재기입이 실시될 수 있는 많은 다른 계산 환경들이 가능함이 이해된다.
도 2의 예시적인 환경(200)은 비교적 직접적인 분배채널을 통하여 코드가 개발 및 분배되는 코드 재기입을 실시하는데 적합한 개발 및 배치 시나리오를 도시한다. 보통, 코드 유닛(106)은 개발자 컴퓨터(202)에서 개발되고 그것이 설치되고 실행될 수 있는 배치 컴퓨터(204)로 분배된다. 그러나, 컴퓨터(202)상에서 개발된 코드 유닛(106)은 또한 컴퓨터(202) 상에서 설치되고 실행될 수 있고, 코드 재기입 함수(104)는 컴퓨터(202 및 204)의 어느 하나 또는 모두에서 재기입된 코드 유닛(106)을 생성하도록 코드 유닛(102)에 대하여 실시될 수 있는 것이 이해된다.
코드 유닛(102)은 예를 들면, 네트워크(206)를 통하여 개발자 컴퓨터(202)로부터 배치 컴퓨터(204)로 다운로드하거나, 개발자 컴퓨터(202)로부터 다양한 휴대형 미디어(208)(예를 들면, 디스크, 컴팩트 플래시 카드) 상에서 배치 컴퓨터(204)로 전송하는 것을 포함하는 몇가지 수단에 의하여 개발자 컴퓨터(202)로부터 배치 컴퓨터(204)로 전송될 수 있다. 네트워크(206)는 특정한 시스템 구성에 따라 로컬 및 원격 접속 모두를 포함할 수 있다. 따라서, 네트워크(206)는, 예를 들면, 모뎀, 케이블 모뎀, LAN(local area network), WAN(wide area network), 인트라넷, 인터넷, 또는 임의의 다른 적절한 통신링크의 어느 하나 또는 조합을 포함할 수 있다.
도 3은 더욱 복잡한 분배 시스템을 통하여 코드가 개발되고 배치되는 코드 재기입을 실시하는데 적합한 또 다른 예시적인 환경(300)을 도시한다. 환경(300)은 중간 컴퓨터(302)에 더하여, 일반적으로 전술된 바와 같은 개발자 컴퓨터(202) 및 배치 컴퓨터(204)를 포함한다. 배치 컴퓨터(204)는 회사 방화벽 내에서 보호된 회사 인트라넷과 같은 기업 계산 시스템(304) 내에 있다. 도 3의 환경(300)에서, 코드 유닛(102)의 개발 및 배치는 코드 유닛(102)을 배치 컴퓨터(들)(204) 상에 배치하기 전에 네트워크(206)를 통하여 개발 컴퓨터(202)로부터 중간 컴퓨터(302)로 코드 유닛(102)을 전송하는 것을 포함할 수 있다. 보통, 그러한 중간 컴퓨터(302)는 코드 유닛들을 스테이징(staging)하고 그들을 배치 컴퓨터(들)(204)로 분배하는데 이용된다. 중간 컴퓨터(302)상에 발생하는 코드 재기입들은 개발 또는 배치 컴퓨터상에 발생하는 것들과 상이할 수 있다. 예를 들면, 중간 컴퓨터(302)상의 코드 재기입은 기업(304)의 배치 컴퓨터(들)(204)상에 적절한 보안 요건 및/또는 특정한 시스템과 호환 가능하도록 코드를 재기입할 수 있다. 또한, 코드 유닛(102)은 기업(304) 내의 배치 컴퓨터(들)(204)로 이동시키기 전에 그 성능을 검증하기 위하여 그 개발의 일부로서 중간 컴퓨터(302) 상에서 일시적으로 설치 및 실행될 수 있다. 실시예들에 관하여 후술되는 바와 같이, 코드 유닛(102)은 환경(300)의 다양한 컴퓨터(202, 204, 및 302) 상에서의 그 개발, 설치, 및 실행을 통하여 상이한 단계에서 하나 이상의 재기입기에 의하여 재기입될 수 있다.
도 2 및 3의 컴퓨터(202, 204 및 302)는 예를 들면, 데스크탑 PC, 노트북 또는 다른 휴대형 컴퓨터, 워크스테이션, 서버, 메인프레임 컴퓨터, 등을 포함하는 다양한 종래의 계산 장치들중 어느 하나로서 실시될 수 있다. 컴퓨터(202, 204 및 302)는 이메일, 캘린더링, 태스크 조직, 워드 프로세싱, 웹브라우징, 등과 같은 공통의 계산 기능들을 수행할 수 있는 것이 보통이다. 컴퓨터(202, 204 및 302)는 워싱턴, 레드몬드의 마이크로소프트
Figure 112005000928323-pat00001
회사로부터의 윈도우즈
Figure 112005000928323-pat00002
운영 시스템과 같은 운영 시스템을 실행한다. 개발자 컴퓨터(202), 배치 컴퓨터(204), 및 중간 컴퓨터(302)의 일 실시예는 도 14를 참조하여 더욱 상세히 후술된다.
실시예
도 4는 도 3의 예시적인 환경(300) 내에서 코드 재기입을 설명하는데 유용한 다양한 구성요소들을 도시하는 컴퓨터(202, 204, 및 302)의 블럭도이다. 코드 재기입은 컴퓨터(202, 204, 및 302)중 어느 하나 또는 모두에서 발생할 수 있고, 일 컴퓨터상의 코드 재기입은 다른 컴퓨터상의 코드 재기입에 영향을 미칠 수 있다. 예를 들면, 개발 컴퓨터(202)상의 재기입 함수(104)의 실시는 중간 컴퓨터(302)로 전송되는 재기입된 코드 유닛을 야기시킬 수 있다. 개발 컴퓨터(202)로부터의 재기입된 코드 유닛은 중간 컴퓨터(302)에 의하여 다시 재기입되고 그 후 배치 컴퓨터(204)로 전송될 수 있으며, 여기서 또 다시 재기입될 수 있다.
도 4의 개발자 컴퓨터(202)는 C, C++, C#, 자바, 마이크로소프트 비주얼 베이직
Figure 112009075709056-pat00003
, 등과 같은 프로그래밍 언어로 개발자에 의하여 기록된 소스 프로그램(400)을 포함한다. 도 4의 컴퓨터(202, 302, 및 204)의 각각은 다양한 컴파일러(402)를 포함할 수 있다. 컴파일러들(402)은 컴퓨터마다 상이할 수 있으며, 따라서 그들은 각각 개발 컴퓨터(202), 중간 컴퓨터(302), 및 배치 컴퓨터(204) 상에서 참조부호 402(1), 402(2), 및 402(3)으로 나타내어진다. 컴파일러들(402)은 언어특유의 컴파일러들을 포함할 수 있으며, 각각은 특정 언어의 소스 프로그램을 하나 이상의 코드 유닛(102)으로 컴파일하도록 구성된다. 코드 유닛(102)은 예를 들면, PC 상에서 실행 준비된 네이티브 코드, 관리된 코드 환경에서의 실행에 적합한 바이트코드 또는 또 다른 중간 언어(예를 들면, 추상적 및/또는 기계 독립 언어)로서 컴파일된 실행가능 파일 또는 DLL의 컬렉션, 해석된 언어로 기록된 스크립트 프로그램 등으로 컴파일된 오브젝트 모듈을 포함할 수 있다. 따라서, 컴파일러(402)는 소스 언어를 특정한 플랫폼에서 실행하는 네이티브 코드로 컴파일하는 네이티브 코드 컴파일러, 및 소스 언어를 중간 언어 또는 바이트코드와 같은 관리된 코드로 컴파일하는 관리된 코드 컴파일러(예를 들면, 자바 컴파일러, .NET 컴파일러)를 포함할 수 있다.
또한, 컴파일러(402)는 중간 언어 또는 바이트코드와 같은 플랫폼 독립 코드(즉, 관리된 코드)를 특정한 프로세서에서 실행할 수 있는 네이티브 코드로 변환하는 사전실행(pre-execution) 컴파일러를 포함할 수 있다. 따라서, 컴파일러(402)는 또한 관리된 코드(예를 들면, 바이트코드, 중간 언어)를 실행 직전에 네이티브 코드로 컴파일하는 JIT(just-in-time) 컴파일러, 및 관리된 코드를 네이티브 코드로 사전 컴파일하여 설치후 실행을 대비하는 컴파일-온-인스톨(compile-on-install) 컴파일러를 포함할 수 있다.
각각의 컴퓨터(202, 302, 및 204)는 코드 유닛(102)을 수신하고, 코드 유닛이 재기입되는지 여부를 결정하고, 코드 유닛(102)을 재기입하는데 적용될 재기입기를 식별 및 배열하며, 코드 유닛에 대하여 재기입기의 실행을 용이하게 하도록(예를 들면, 프로세서에서의 실행을 위하여 코드 유닛(102) 및 적절한 재기입기를 RAM으로 로드하도록) 구성된 코드 재기입 함수(104)를 포함할 수 있다. 도 5에 도시된 바와 같이, 코드 재기입 함수(104)는 재기입 관리자(500), 코드 유닛(102)을 재기입하도록 구성된 하나 이상의 코드 재기입기(502), 및 어느 재기입기가 코드 유닛으로 적용되고 어느 순서/시퀀스에 따르는지를 식별하는 정보(예를 들면, 재기입 리스트(504))를 수반 및/또는 포함한다.
각각의 컴퓨터(202, 302 및 204)는 또한 운영 시스템(OS), 시스템 정책(예를 들면, 보안정책), 애플리케이션, 툴, 실행환경 등과 같은 다양한 시스템 구성요소(404)를 포함한다. 코드 재기입 함수(104)의 구성요소(즉, 재기입 관리자(500), 재기입기(502), 재기입 리스트(504))중 하나 이상은 다양한 시스템 구성요소(404)의 어느 하나 이상 내에 임베드될 수 있다. 예를 들면, 도 6은 재기입 관리자(500), 재기입기(502), 및 재기입 리스트(504)를 포함하는, 코드 재기입 함수(104)의 모든 구성요소들이 운영 시스템의 일부로서 임베드되는 것을 도시한다. 이 시나리오는 예를 들면, 특정한 애플리케이션이 운영 시스템의 업데이트된 버전과 호환 가능하지 않게 되는 경우에 유용할 수 있다. 업데이트된 운영 시스템 내의 재기입 함수(104)(재기입 관리자(500), 재기입기(502), 및 재기입 리스트(504))의 포함은 업데이트된 운영 시스템과의 호환 가능성을 확실히 하도록 그러한 애플리케이션들을 수정하는데 이용될 수 있다.
도 7 및 8은 코드 재기입 함수(104)의 구성요소들이 독립형 모듈이고/거나 다양한 시스템 구성요소들(404) 사이에 산재될 수 있음을 도시하는 실시예들을 도시한다. 도 7 내의 재기입 관리자(500)는 배치 컴퓨터(204)에서 실행하는 시스템 보안정책(404(3))의 일 구성요소인 한편, 재기입기(502) 및 재기입 리스트(504)는 독립형 모듈이다. 따라서, 배치 컴퓨터(204)상에서 실시되는 보안정책(404(3))의 일부로서, 재기입 관리자(500)는 보안정책과 부합하도록 코드 유닛이 재기입될 필요가 있는지 여부를 결정하는 것을 실행할 것이다. 만일 그렇다면, 재기입 관리자는 재기입 리스트(504)를 이용하여 적절한 재기입기(502)를 식별 및 배열하도록 착수할 것이며, 그 후 코드 유닛에 대하여 상기 식별된 재기입기를 실행할 것이다. 도 8에서, 재기입 관리자(500)는 중간 컴퓨터(302)상의 설치툴(404(2))의 일 구성요소로서 도시되는 한편, 재기입기(502) 및 재기입 리스트(504)는 독립형 모듈이다. 따라서, 코드 유닛(102)의 설치동안, 설치툴(404(2)) 내의 재기입 관리자(500)는 코드 유닛이 재기입될 필요가 있는지 여부를 결정하는 것을 실행할 것이다. 만일 그렇다면, 재기입 관리자는 재기입 리스트(504)를 이용하여 적절한 재기입기(502)를 식별 및 배열하는 것을 착수할 것이고, 그 후 코드 유닛에 대하여 상기 식별된 재기입기를 실행할 것이다.
도 9는 코드 재기입 함수(104)의 구성요소의 일부가 개발자에 의하여 코드 유닛(102) 자체 내에 포함될 수 있는 방법을 도시한다. 도 9에 도시된 바와 같이, 개발자는 코드 유닛(102) 자체 내에 재기입 리스트(504)를 포함하였다. 재기입 관리자(500)는 JIT(just in time) 컴파일러(402)의 일부로서 도시되는 한편, 재기입기(502)는 독립형 모듈에 있다. 따라서, 개발자는 한 세트의 재기입기(502)를 구성하는 방법으로서 코드 유닛(102) 자체를 이용하여 코드 유닛(102)을 재기입할 수 있다. 예를 들면, 개발자는, 새로이 컴파일된 코드 유닛(102)으로 보내지고 재기입기 관리자(500)가 하나 이상의 재기입기를 이용하여 코드 유닛(102)을 재기입하도록 명령하는 소스 프로그램(400) 내의 재기입 명령(예를 들면, 태그, 속성, 스트링, 등)을 임베드할 수 있다. 이 방식으로, 개발자는 코드 유닛의 개발 및 배치동안 다양한 단계에서 실시될 수 있는 한 세트의 코드 재기입기를 구성하는 능력을 가진다. JIT 컴파일러(402)에 의한 코드 유닛(102)의 후속하는 사전실행 컴파일(compilation)시, JIT 컴파일러(402) 내의 재기입 관리자(500)는 코드 유닛에 임베드된 재기입 리스트(504)로부터, 코드 유닛에 대하여 실행하는 재기입기(502)를 결정한다. 따라서, 코드 유닛(102)은 JIT 컴파일러(402)에 의한 네이티브 코드로의 그 컴파일 및 후속하는 실행 직전에 재기입된다.
이 프로세스는 개발자가 각각 순서대로 코드 유닛을 특정한 방식으로 수정할 한 세트의 재기입기를 함께 스트링, 또는 "구성"하는 것을 가능하게 한다. 바람직한 일 실시예에서, 재기입기의 상기 "구성된" 세트 내의 각각의 재기입기에 의하여 코드 유닛이 연속적으로 재기입되므로, 각각의 재기입된 코드 유닛의 포맷은 균일하게 유지된다. 따라서, 재기입기로 입력되는 코드 유닛은 그 재기입기로부터 출력되는 코드 유닛과 동일한 포맷을 가진다. 이것은 개발자가 재기입기의 임의의 세트를 구성하는 것을 허용하며, 그 각각은 일 코드 유닛을 받아들이고 동일한 포 맷 또는 표현으로 일 코드 유닛을 만들어 낸다. 대체 실시예에서, 각각의 재기입기는 입력된 코드 유닛과 상이한 포맷으로 코드 유닛을 출력할 수 있다. 그러나, 이 대체 실시예는 재기입기의 세트를 구성하는데 개발자에게 유연성 및 재량성의 정도를 다소 제한한다.
다시 도 5를 참조하여, 도 4에 도시된 컴퓨터(202, 304, 및 204)중 어느 하나 또는 모두에 대하여 설명될 수 있는 일반적인 코드 재기입 프로세스가 도시된다. 코드 재기입 프로세스는 예를 들면, 컴퓨터(202, 304, 및 204)에서 개발 및 배치동안 코드 유닛에 발생할 수 있는 다양한 변환들을 설명하는데 특히 적합한 트러스트 모델(trust model)의 실시를 포함한다. 따라서, 재기입 관리자(404)는 재기입 전후 코드 유닛의 신뢰성 및 아이덴티티(identity) 검증을 제공하는 트러스트 모델을 지원한다.
전형적인 트러스트 모델에서, 개발자는 코드 유닛에 디지털 서명(digital signature)를 부가한다. 디지털 서명은 그 후 코드 유닛의 아이덴티티를 인증하고 코드 유닛이 그 원래의 분배된 버전으로부터 변경 또는 개조되지 않은 것을 보장하는데 이용될 수 있다. 디지털 서명을 이용하는 기술 및 소프트웨어는 일반적으로 이용 가능하다. 그러한 일 기술에서, 코드 유닛의 해시(hash) 또는 수학적 요약은 적절한 소프트웨어를 이용하여 획득될 수 있다. 그 후, 해시는 공개-개인 키 인가(public-private key authority)로부터 획득된 개인 키를 이용하여 암호화될 수 있다. 암호화된 키는 코드 유닛 내에서 보내질 수 있는 디지털 서명이다. 어셈블리가 보내진 유저(즉, 컴퓨터)는 그 후 코드 유닛의 해시(수학적 요약)를 만들고 공개키(public key)를 이용하여 해시를 해독한다. 해시가 부합하는 경우, 코드 유닛은 인증된다. 따라서, 일반적인 트러스트 원칙은 코드 유닛이 그 원래의 "서명된" 버전으로부터 변경되면, 그 서명은 또한 변경될 것이고, 코드 유닛은 더 이상 신뢰될 수 없다는 것이다.
현재 설명된 코드 재기입 시스템은 코드 유닛의 재기입을 포함하므로, 전술된 전형적인 트러스트 모델은 적절하지 않다. 하나 이상의 코드 재기입기를 통하여 변경된 디지털 "서명된" 코드 유닛은 재기입동안 이루어지는 변화에 기하여 신뢰성 있는 것으로 검증될 수 없을 것이다. 따라서, 도 5에 도시된 일반적인 코드 재기입 프로세스는, 예를 들면, 컴퓨터(202, 304, 및 204)상의 개발 및 배치를 통하여 코드 유닛에 발생할 수 있는 다양한 변환을 설명하는데 특히 적합한 트러스트 모델의 실시를 포함한다.
도 5에 도시된 일반적인 재기입 프로세스에서, 코드 재기입 함수(104)의 재기입 관리자(500)에 의하여 코드 유닛(102)이 수신된다. 코드 유닛은 디지털 서명, "서명 #1"을 포함한다. 재기입 관리자(500)는 초기에 코드 유닛(102)이 재기입될 필요가 있는지 여부를 결정한다. 도 6-9를 참조하여 전술된 바와 같이, 이 결정은 다양한 방식으로 이루어질 수 있다. 예를 들어, 개발자 컴퓨터(202) 상의 소스 프로그램(400)으로부터 (예를 들면, 네이티브 코드, 바이트코드, 중간 언어로) 코드 유닛(102)이 컴파일되는 경우 재기입 관리자(500)는 코드 유닛(102)이 재기입될 필요가 있는 것으로 결정할 수 있다.
그 후, 재기입 관리자(500)는 일 그룹의 재기입기(502)로부터 적절한 재기입기를 식별 및 배열한다. 이것은 재기입 리스트(504)를 참조함으로써 이루어진다. 재기입 리스트(504)는 재기입 관리자(500)에 대한 재기입기를 식별하고 상기 식별된 재기입기가 코드 유닛(102)에 대하여 실행되는 시퀀스를 제공한다. 그 후 재기입 관리자(500)는 하나 이상의 재기입기(502)의 일 그룹으로부터 식별된 재기입기를 액세스하고, 그들을 코드 유닛(102)과 함께 메모리(RAM)로 로드시킨다.
코드 유닛(102)에 대하여 상기 식별된 재기입기를 실행하기 전에, 재기입 관리자(500)는 코드 유닛(102) 및 재기입기의 디지털 서명을 인증하여(예를 들면, 공개키를 이용하여 해시 또는 수학적 요약을 해독함으로써 코드 유닛(102)의 "서명 #1" 및 재기입기(502)의 "서명 #2") 그들의 아이덴티티(identity) 및 신뢰성을 검증한다. 디지털 서명이 인증되면, 재기입 관리자는 상기 식별된 재기입기를 코드 유닛(102)에 대하여 실행하여 재기입된 코드 유닛(106)을 생성한다. 또한, 재기입 관리자는 재기입된 코드 유닛(106)에 대한 디지털 서명을 생성하고(예를 들면, 개인키를 이용하여 암호화된 재기입된 코드 유닛(106)의 해시 또는 수학적 요약인 "서명 #3") 서명과 함께 재기입 캐시(406)에 상기 재기입된 코드 유닛(106)을 기억시킬 수 있다.
일반적으로, 코드 유닛(102)에 대하여 실행된 코드 재기입기(502)는 디스크상의 코드 유닛 파일을 오픈하고(만일 메모리에 이미 있지 않다면), 네이티브 코드, 바이트코드, 중간 언어, 메타 데이터, 등에서 로드하고, 모듈들, 그들의 유형, 그들의 메소드 등의 논리적 구조를 "인메모리(in-memory)" 데이터 구조로 복구할 수 있다. 그 후, 코드 재기입기는 그 데이터 구조를 트래버스하고, 예를 들면, 임의로 코드를 삽입 또는 제거 또는 수정하도록 메소드('함수'로도 알려짐)의 보디(body)를 변경함으로써 메소드 및 유형의 표현에 대한 임의적인 수정을 만들 수 있다. 코드 재기입기는 전체 모듈, 유형, 메소드, 필드 등을 삽입 또는 제거할 수 있다. 코드 유닛 자체 내에서 재기입이 지시되는 곳에서(예를 들면, 상기 도 9; 하기의 도 10 및 11; 태그, 속성, 스트링, 등에 의함) 만들어지는 상기 수정은, 특정한 코드 재기입기가 코드 유닛에 대하여 만드는 변화의 유형을 수정 또는 조정하며, 코드 유닛에 외부적이거나, 코드 유닛 내에 임베드되고, 때로는 코드 유닛 내의 특정 요소 또는 사이트에 관련되는 추가적인 디렉티브(directive), 태그, 속성, 스트링, 등에 의하여 순서대로 가이드될 수 있다.
도 4를 다시 참조하면, 상기 설명된 트러스트 모델은 컴퓨터(202, 304, 및 204)상의 개발 및 배치를 통하여 코드 유닛(102)에 발생할 수 있는 다양한 변환들을 설명한다. 예를 들면, 개발자 컴퓨터(202)상의 재기입된 코드 유닛(106(1))은 코드 유닛(102(2))으로서 중간 컴퓨터(302)로 전송될 수 있다. 개발자 컴퓨터(202)상의 코드 유닛(102(1))의 원래 버전으로부터 코드 유닛(102(2))이 수정(즉, 재기입된 코드 유닛(106(1))으로 수정)되었지만, 코드 유닛(102(2))은 코드 수정 발생 이후에 디지털 서명되는 것이 보통이다. 따라서, 중간 컴퓨터(302)는 동반하는 디지털 서명에 기초하여 코드 유닛(102(2))의 아이덴티티 및 신뢰성을 여전히 인증할 수 있을 것이다.
재기입 캐시(406)는 재기입된 코드 유닛(106)을 기억하는데 이용되어 코드 유닛(102)에 대한 컴파일, 설치, 시행, 등을 위한 후속하는 호출은 재기입 프로세스의 반복을 야기하지 않는다. 따라서, 코드 유닛(102)이 이미 특정 재기입기 또는 재기입기의 세트(502)에 의하여 재기입된 경우, 재기입 관리자(500)는 결과적인 재기입된 코드 유닛(106)을 재기입 캐시(406)에 기억시키며 특정한 재기입기 또는 재기입기의 세트(502)에 관하여 재기입 프로세스의 반복을 피할 필요가 있는 경우 상기 캐시(406)로부터 상기 재기입된 코드 유닛(106)을 액세스한다. 코드 유닛(102)이 재기입되고 재기입된 코드 유닛(106)으로서 재기입 캐시(406)에 기억되면, 캐시(406)로부터 직접 액세스되고 다시 재기입 프로세스를 거치지 않고 실행될 수 있다.
도 10 및 11은 관리된 코드 환경에서 코드에 대하여 실시되는 코드 재기입 함수(104)의 더욱 특정한 예를 도시한다. 관리된 코드 환경은 수개의 지원된 언어들중 어느 하나로 기록된 프로그램의 실행을 관리하며, 상기 프로그램이 상기 언어들중 어느 하나로 기록된 공통 객체지향(object-oriented) 클래스들을 공유하는 것을 허용한다. 관리된 코드환경의 예들은 USA, WA, 레드몬드의 마이크로소프트 회사에 의하여 생성된 .NETTM 플랫폼의 일부인 CLR(Common Language Runtime), 및 자바언어로부터 컴파일된 프로그램을 실행하기 위하여 선마이크로시스템즈가 제공하는 자바 버추얼 머신을 포함한다. 도 10 및 11에 도시된 예는 마이크로소프트의 CLR을 참조하여 여기에 개시된다. .NETTM 프레임워크의 기본에 관한 추가적인 정보는 Pratt 저, 마이크로소프트 .NET 소개, 제3판, 마이크로소프트 출판(Pratt, Introducing Microsoft .NET, Third Edition, Microsoft Press, 2003)과 같은 다수의 소개 텍스트에서 발견될 수 있다.
CLR은 마이크로소프트 .NETTM프레임워크의 중심이고 모든 .NET 코드에 대한 실행환경을 제공한다. 따라서, CLR을 이용하도록 만들어지고, CLR 내에서 실행하는 코드는 "관리된 코드"로서 지칭된다. CLR은 JIT(just-in-time) 컴파일, 메모리 할당 및 관리, 유형 안전 실행, 예외 처리, 스레드(thread) 관리 및 보안을 포함하는, 프로그램 실행을 위하여 요구되는 다양한 함수들 및 서비스들을 제공한다. CLR은 .NETTM 루틴의 제1 호출시 로드된다. 최상의 성능을 위하여, 관리된 코드는 실행 직전에 네이티브 코드로 컴파일되는 것이 보통이다.
관리된 코드 기록시, 배치 유닛은 일 유닛으로서 버전되고 배치되는 하나 이상의 파일들의 컬렉션인 어셈블리로 호칭된다. 어셈블리는 .NETTM 프레임워크 애플리케이션의 주요 구성 블럭이다. 모든 관리된 유형 및 리소스는 일 어셈블리 내에 포함되고 어셈블리 내에서만 액세스 가능하거나 다른 어셈블리들의 코드로부터 액세스 가능한 것으로 마크된다. 일 어셈블리는 DLL 또는 실행가능(EXE) 파일로서 패키지된다. 실행가능(executable)은 단독으로 실행할 수 있는 한편, DLL은 존재하는 애플리케이션에 호스트되어야 한다.
상기 논의를 간략화하기 위하여, 도 10 및 11은 도 2를 참조하여 전술된 환경(200)과 부합하는 예시적인 배치 환경을 도시한다. 따라서, 소스 프로그램(400)은 개발자 컴퓨터(202)에서 개발되고 배치 컴퓨터(204)로 비교적 직접적인 방식(예를 들면, 네트워크(206)를 통하여 다운로드 또는 디스크상에서 전송)으로 분배된다. 또한, 일관성을 위하여, 관리된 코드 환경에서 "어셈블리"로서 지칭될 수도 있는 코드의 배치 유닛은, 도 10 및 11의 코드 재기입 예에서의 코드 유닛으로서 지칭된다.
도 10에서, "hello.cs"로 명칭이 부여된, 예시적인 소스 프로그램(400)은 C# 프로그래밍 언어로 기록되고 특정한 코드 재기입기를 요청하는 "재기입 커스텀 속성", 및 코드 재기입에 특정하지 않은 다른 커스텀 속성을 포함한다. 상기 속성들은 모두 스퀘어 브라킷 "[]" 내에 지정된다. 커스텀 속성들의 그러한 두 형태는 프로그램 소스 코드(400)에 임베드되고 예를 들면, 클래스의 특성을 설명하기 위하여 클래스에 적용된다. 따라서, 도 10의 소스 프로그램(400)에서, 속성 "[Attr]"은 클래스 "T"의 일부 특성을 설명하도록 클래스 "T"에 적용되는 커스텀 속성이다.
커스텀 속성은 소스 프로그램(400)의 컴파일(402)을 통하여 코드 유닛(102(1))으로 전달되어 지는 개발자가 소스 프로그램(400)에 포함할 수 있는 커스터마이즈 가능한 주석이다. 일반적으로, .NET 프레임워크 실시예는 커스텀 속성의 세트의 임의의 확장성을 허용한다. 커스텀 속성의 상기 세트는 고정되지 않는다. 오히려, 임의의 코드는 새로운 유저 정의된 커스텀 속성을 도입할 수 있거나 또는 그러한 것의 타겟일 수 있다. 커스텀 속성은 코드 유닛(102(1)), 유형, 메소드, 등으로 적용될 수 있다. 재기입 커스텀 속성 유형으로부터 그 유형이 유래하는 코드 유닛(102(1))으로 적용되는 커스텀 속성은 "재기입 커스텀 속성"으로 불리운다. 재기입 커스텀 속성은 코드 유닛(102(1))상의 코드 재기입기의 적용(예를 들면, 코드 재기입기(502)의 그룹으로부터)을 트리거할 것이다. 따라서 재기입 커스텀 속성은 코드 유닛(102(1))에 적용될 재기입기를 특정 또는 결정하는 재기입 리스트(504)를 구성할 수 있다. 소스 프로그램(400)에서, 재기입 커스텀 속성 "RCA1" 및 "RCA2"는 각각 브라킷 "[RCA1]" 및 "[RCA2]" 내에서 식별된다. 코드 유닛(102(1))에 대하여 상기 식별된 코드 재기입기가 적용되는 경우 개발자는 재기입 커스텀 속성 내에서 특정할 수 있으므로, 코드 유닛(102(1))에 대하여 식별된 재기입기를 실행하기 위한 시퀀스를 가리킨다.
도 10의 컴파일러(402)는 C# 프로그래밍 언어에 특유한 C# 컴파일러(CSC)이다. CSC 컴파일러(402)는 상이한 언어 특유의 소스 프로그램들을 공통의, 프로세서 독립 중간언어(IL) 및 메타 데이터를 포함하는 코드 유닛들로 컴파일링하기 위하여 개발자 컴퓨터(202)상에 존재할 수 있는 다양한 언어 특유의 .NET 컴파일러들중 하나이다. 제1 패스시, 컴파일러(402)는 소스 프로그램(400)을 컴파일하고, 에러체킹을 수행하며, "hello.exe"로 명칭이 부여된 코드 유닛(102(1))(코드 유닛(102)의 버전 1)을 만든다. 소스 프로그램(400) 내에 재기입 커스텀 속성("[RCA1]" 및 "[RCA2]")을 포함하는 커스텀 속성의 표현은 코드 유닛(102(1))의 메타 데이터로 통과된다.
도 10 및 11의 관리된 코드예의 코드 유닛(102)은 IL 및 메타 데이터를 포함한다. IL은, 추상적인 방식으로, 메소드의 보디에서 발생하는 동작들을 설명한다. 메타 데이터는 코드 유닛의 구조를 설명하는 커스텀 속성 및 테이블을 포함하는데, 코드 유닛은 모듈의 컬렉션으로 구성되며, 각각의 모듈은 유형 정의의 컬렉션으로 구성되고, 각각의 유형 정의는 필드 및 메소드(코드, 함수)의 컬렉션이며, 각각의 메소드는 리턴 유형 및 정규 인수 유형(formal argument type)의 리스트 등을 갖는다. 이 경우, 메타 데이터는 소스 프로그램(400)으로부터 패스된 두개의 재기입 커스텀 속성(RCA1, RCA2)이 존재하고, "T"로 호칭되는 유형 및 T의 메소드를 설명하는 테이블이 존재하는 것을 나타낸다. T의 메소드들 중 하나는 메인으로 호칭된다. 속성 "Attr"과 같은 다른 커스텀 속성들도 존재할 수 있지만, 이들은 재기입기 커스텀 속성이 아니며 어떠한 코드 재기입도 트리거시키지 않는다.
제2 패스시, 컴파일러(402)의 재기입 관리자 구성요소(500)는 제1 패스로부터 만들어진 코드 유닛(102(1))을 검사하도록 구성된다. 검사시, 컴파일러(402)의 재기입 관리자(500)가 코드 재기입기(502)를 요청하는 임의의 재기입 커스텀 속성(예를 들면, RCA1, RCA2)을 찾으면, 재기입 관리자(500)는 메모리(도시하지 않음)로 로드하고 다음으로 코드 유닛(102(1))에 대하여 상기 요청된 코드 재기입기(502)를 실행한다. 일반적으로 전술된 바와 같이, 코드 유닛(102(1))에 대하여 상기 요청된 코드 재기입기(502)를 실행하기 전에, 재기입 관리자(500)는 코드 유닛(102(1)) 및 코드 재기입기(502) 모두에 관련된 디지털 서명들을 추가적으로 인증하여 그들의 아이덴티티(identity) 및 신뢰성을 검증한다.
본 예에서, RCA1 및 RCA2로 호칭되는 두개의 재기입 커스텀 속성들은 각각 코드 유닛(102(1))을 수정하는데 어셈블리 재기입기 CR1 및 CR2가 적용될 것을 요청한다. 그러나, 커스텀 속성 RCA2는 개발자는 개발자 컴퓨터(202)에서 코드 유닛(102(1))에 대하여 CR2 코드 재기입기가 실행되는 것을 원하지 않는다는 표시(예를 들면, 첨자 "T")로 태그된다. 소스 프로그램(400)은 컴파일러(402)가 제1 패스에서 코드 유닛(102(1))으로 운반하는 제2 재기입 커스텀 속성, RCA2 상에 "DeploymentTime=True" 태그를 포함한다. 따라서, 제2 패스시, 컴파일러(402)의 재기입 관리자(500)는 태그된 속성 RCA2에 의하여 요청된 CR2 코드 재기입기는 개발자 컴퓨터(202)에서 코드 유닛(102(1))에 대하여 실행되지 않는 것을 인식한다. 따라서, 본 예에서는, 오직 코드 재기입기 CR1이 개발자 컴퓨터(202)에서 코드 유닛(102(1))에 대하여 실행된다. 이것은 수정된 코드 유닛(102(2))(코드 유닛(102)의 버전 2)을 야기한다. 또한, 컴파일러(402)는 전술된 방식으로 선택적으로 디지털 서명을 생성하고 상기 수정된 코드 유닛(102(2))에 부가한다. 코드 유닛(102(2))의 결과 버전은 설치 및 실행을 위하여 배치 컴퓨터(204)로 분배된다. 도 10 내의 클래스 T의 메소드 "Main1"의 도시는 코드 유닛(102(1)) 내의 클래스 T의 오리지날 메소드 "Main0"이 CR1에 의하여 그 오리지날 버전으로부터 수정된 것을 나타내는 것을 의도한다.
배치 컴퓨터(204)와 같이, 나중의 실시를 위하여 태그된 재기입 커스텀 속성들(예를 들면 RCA2T)은 수정된 코드 유닛(102(2))으로 패스된다. 요청된 코드 재기입기가 개발자 컴퓨터(202)에서 코드 유닛(102(1))에 이미 적용된 다른 재기입 커스텀 속성들(예를 들면, CR1)도 도 10에 도시된 바와 같이, 수정된 코드 유닛(102(2))으로 패스될 수 있다. 그러나, 이것은 이 속성들의 목적은 이미 충족되었으므로 필요하지 않을 것이다.
도 11을 참조하여, 배치 컴퓨터(204)는 예를 들면, 개발자 컴퓨터(202)로부터 분배된 코드 유닛(102(2))과 같은 임의의 수의 애플리케이션 프로그램 코드 유닛을 포함할 수 있다. 전술된 바와 같이, 코드 유닛(102)은 .NET 컴파일러에서 컴파일되고 CLR(common language runtime)(1100)의 관리된 실행환경에서 실행하도록 구성된 IL 코드 및 메타 데이터를 포함한다. 또한, 코드 유닛(102)은 코드 유닛(102)이 배치 컴퓨터(204)상에 설치되는 경우와 같이, 상이한 시간에 코드 유닛(102)을 수정하도록 코드 재기입기에 요청하도록 구성된 RCA1 및 RCA2와 같은 다양한 재기입 커스텀 속성들을 포함할 수도 있다. 또한, 코드 유닛(102)은 코드 유닛(102) 내의 재기입기 커스텀 속성에 의하여 요청되는 임의의 코드 재기입기(502) 및 코드 유닛(102) 자체의 인증성(authenticity)을 검증하기 위하여 하나 이상의 디지털 서명을 포함할 수 있다.
코드 유닛(102(2))이 배치 컴퓨터(204)에서 개시되는 경우, 예를 들면 CLR(1100) 내의 로더(1102)로서 구현된 재기입 관리자(500)는 코드 유닛(102(2))을 메모리로 로드하고 그것을 검사한다. 검사시, CLR(1100)의 재기입 관리자(500)는 코드 유닛(102(2))의 인증성 및 신뢰성을 결정한다. 코드 유닛(102(2)) 내에서 발견된 코드 유닛의 디지털 서명에 기하여 인증성이 검증된다. 공개-개인 키 인증(public-private key authority) 및 수학적 해시를 이용하는 이 검증의 일 예는 간단하게 전술된다. 코드 유닛(102(2))의 신뢰성은, 부분적으로, CLR(1100)의 일부 다른 추가적인 보안정책에 기하여 결정될 수도 있다. 예를 들면, CLR(1100) 보안정책은 특정 분배자 또는 웹사이트로부터 나오는 코드 유닛을 신뢰할 수 있고, 특정한 다른 분배자 또는 웹사이트로부터 나오는 코드 유닛을 거절할 수 있다. 일반적으로, 보안정책은 배치 컴퓨터(204)상에 이전에 설치된 시스템 코드 유닛을 신뢰할 것이다.
코드 유닛(102(2))의 검사시, CLR(1100)의 재기입 관리자(500)는 배치 컴퓨터(204)에서 실행하기 전에 코드 유닛(102(2))을 수정하도록 코드 재기입기(502(2))에 요청하는 RCA2T와 같은 임의의 잠재적(보류) 재기입 커스텀 속성(즉, 실행전 배치 컴퓨터(204)에서 실시하기 위하여 태그된 재기입 커스텀 속성)이 존재하는지 여부를 결정한다. 재기입기가 코드 유닛(102(2))을 수정하도록 요구하는 잠재적 재기입 커스텀 속성 이외에, CLR(1100) 자체는 코드 유닛(102(2))에 대하여 실행될 필요가 있는 것으로 알고 있는 하나 이상의 시스템 코드 재기입기를 개시할 수 있다. 시스템 재기입기의 일 예는 이하에 상술되는 "애플리케이션 호환성 재기입기"이다.
재기입기가 요청되는 경우, CLR(1100)의 재기입 관리자(500)는 존재하는 재기입기(502(2))의 한 세트로부터의 임의의 그러한 재기입기들중 첫번째를 로드하고, 코드 유닛(102(2))상에서 수행된 인증성 및 신뢰성 체크의 동일한 유형을 개시한다. 따라서, 도 11의 예에서, CLR(1100)의 재기입 관리자(500)는 재기입기(502(2))로부터 CR2를 로드하고 CR2의 인증성 및 신뢰성을 검증한다.
재기입기(예를 들면, CR2) 및 코드 유닛(102(2))의 성공적인 검증 이후에, CLR(210)의 재기입 관리자(500)는 코드 유닛(102(2))에 대하여 재기입기 CR2를 실행하고, 수정된 코드 유닛(102(2))을 야기시킨다. 코드 유닛(102(2)) 내의 다른 재기입 커스텀 속성들이 추가적인 재기입기의 이용을 요청하면, CLR(1100)의 재기입 관리자(500)는 동일한 방식으로 코드 유닛(102(2))에 대하여 추가적인 재기입기를 실행한다. 모든 요청된 재기입기들이 코드 유닛(102(2))으로 적용된 후, 최종 수정된 코드 유닛(102(3))은 배치 컴퓨터(204) 상의 재기입 캐시(406)에 기억된다.(재기입 관리자(500)는 단지 최종 재기입된 어셈블리 대신에 하나 이상의 중간 재기입된 어셈블리를 캐시하도록 선택할 수도 있다.) 그 후 CLR(1100)은 JIT(just-in-time) 컴파일러를 이용하여 수정된 코드 유닛(102(3))의 네이티브 기계코드(1104)로의 컴파일을 관리한다. 그 후 네이티브 기계코드(1104)는 프로세서(1106)상에서 실행된다.
대체 실시예에서, 설치후 실행을 위하여 준비되도록 관리된 코드를 네이티브 코드로 사전 컴파일시키는 컴파일-온-인스톨 컴파일러를 이용하여 배치 컴퓨터(204)로 코드 유닛(102(2))을 설치하는 경우, 코드 재기입기로 코드 유닛(102(2))을 코드 유닛(102(3))으로 수정하는 프로세스, 및 코드 유닛(102(3))의 네이티브 기계코드(1104)로의 후속하는 변환(translation)이 발생할 수 있다.
배치 컴퓨터(204)상의 재기입 캐시(406)에 최종 수정된 코드 유닛(102(3))을 기억시키는 것은 CLR(1100)의 재기입 관리자(500)가 코드 유닛(102(3))을 실행하기 위한 모든 후속하는 호출을 위한 코드 재기입 프로세스에 선행하는 것을 허용한다. 따라서, 코드 유닛(102(3))이 장래에 개시되는 경우, CLR(210)의 재기입 관리자(500)는 재기입 캐시(406)로부터 코드 유닛(102(3))의 캐시된 재기입 최종 버전에 액세스하고 프로세서(1106)상에서의 실행을 위하여 코드 유닛(102(3))의 네이티브 기계코드(1104)로의 변환을 관리한다.
캐시 무효화 알고리즘(1108)은 재기입 캐시(406)에 기억된 코드 유닛들이 유효한지 여부를 결정하도록 구성된다. 알고리즘(1108)은 재기입 캐시(406)의 내용의 일부 또는 전부를 무효화 및 폐기하기 위한 소정의 정책을 실시하는 것이 보통이다. 예를 들면, 그러한 정책은 일 코드 유닛이 변경되거나 주어진 코드 재기입기의 파라미터가 변경된 경우 캐시를 무효화시키는 것을 포함할 수 있다.
도 12는 도 11에 대하여 전술된 시스템 코드 재기입기의 일 예를 도시한다. 도 12는 ACR 데이터 베이스(1202), 운영 시스템(1204), 재기입 캐시(406), 및 코드 유닛(102)을 포함하여, 애플리케이션 호환성 재기입기(1200)의 실시 및 검토를 용이하게 하는 다른 구성요소들과 함께, 배치 컴퓨터(204)상의 "애플리케이션 호환성 재기입기"(1200)를 도시한다. 애플리케이션 호환성 재기입기(1200)의 현재 검토는 CLR 및 관리된 코드 환경에 관련되어 있지 않지만, 이 검토는 일반적으로는 관리된 및 비관리된 코드 환경 모두에 적용되는 것이 이해되어야 한다.
일반적으로, 애플리케이션 호환성 재기입기(1200)는 기존의 특정 애플리케이션 프로그램들과 부합하지 않는 플랫폼/운영 시스템에서 만들어지는 변화를 설명하는 코드 재기입기이다. 예를 들면, 도 12의 코드 유닛(102)은 그것이 워드 프로세서 애플리케이션임을 나타내는 한편 운영 시스템(1204)은 그것이 업데이트된 버전임을 나타낸다. 종종, 운영 시스템이 업그레이드되는 경우에, 새로운 운영 시스템 환경에서 적절히 실행하는 것을 계속하기 위하여 특정한 애플리케이션 프로그램이 패치되거나 조정될 필요가 있다.
애플리케이션 호환성 재기입기(1200)는 플랫폼/운영 시스템의 업데이트된 버전으로 다양한 애플리케이션 프로그램의 호환성을 유지한다. 예를 들면, 실행을 위하여 코드 유닛(102)을 로드하는 시도가 이루어지는 경우, 애플리케이션 호환성 재기입기(1200)는 코드 유닛(102)을 조사하고 운영 시스템(1204)의 업데이트된 버전과 호환 가능한지 여부를 결정하도록 구성된다. 애플리케이션 호환성 재기입기(1200)는 코드 유닛(102)(예를 들면, 특정의 워드 프로세싱 애플리케이션)를 식별하고 그 후 업데이트된 운영 시스템(1204)과의 호환성을 위하여 코드 유닛(102)의 어떤 부분이 재기입될 필요가 있는지를 알기 위하여 ACR 데이터 베이스(1202)를 참조한다. 만일 그렇다면, 애플리케이션 호환성 재기입기(1200)는 코드 유닛(102)으로 적절한 픽스(fixes)를 적용한다.
예시적인 방법
코드 재기입을 실시하기 위한 예시적인 방법은 이제 도 13의 흐름도를 주로 참조하여 설명될 것이다. 상기 방법은 도 1-12에 대하여 전술된 실시예들에 적용된다. 흐름도 및 흐름도의 블럭에 관련된 텍스트에 의하여 하나 이상의 방법이 개시되지만, 설명된 방법의 구성요소들은 그들이 제시되는 순서로 수행되어야만 하는 것은 아니며, 대안의 순서들이 유사한 장점들을 야기시킬 수 있다는 점이 이해되어야 한다. 또한, 상기 방법들은 배타적이지 않으며 단독 또는 서로 조합으로 수행될 수 있다. 전술된 방법의 구성요소들은, 예를 들면, ASIC상의 하드웨어 논리블럭 또는 컴퓨터 판독가능 매체상에 정의된 컴퓨터 판독가능 명령의 실행을 포함하는 임의의 적절한 수단에 의하여 수행될 수 있다. 여기서 이용되는 "컴퓨터 판독가능 매체"는 프로세서에 의한 이용 또는 실행을 위한 명령을 포함, 기억, 통신, 전파, 또는 전송할 수 있는 임의의 수단일 수 있다. 컴퓨터 판독가능 매체는,제한 없이, 전자적, 자기적, 광학적, 전자기적, 적외선, 또는 반도체 시스템, 장치, 디바이스, 또는 전파매체일 수 있다. 컴퓨터 판독가능 매체의 더욱 구체적인 예는, 그 중에서도 특히, 하나 이상의 배선을 갖는 전기적 접속(전자적), 포터블 컴퓨터 디스켓(자기적), RAM(random access memory)(자기적), ROM(read-only memory)(자기적), EPROM(erasable programmable-read-only-memory) 또는 플래시 메모리, 광파이버(광학적), 재기입 가능 컴팩트 디스크(CD-RW)(광학적), 및 포터블 CDROM(compact disc read-only memory)(광학적)를 포함한다.
방법(1300)의 블럭(1302)에서, 코드 유닛이 수신된다. 독립형 모듈 또는 컴퓨터 시스템에서 실행하는 일 구성요소(예를 들면, 운영 시스템, 보안정책, 애플리케이션 툴, 등) 내의 모듈인 재기입 관리자에 의하여 코드 유닛이 수신된다. 블럭(1304)에서, 재기입 관리자는 코드 유닛이 재기입될 필요가 있다고 결정한다. 이 결정은, 예를 들면, 코드 유닛이 재기입될 필요가 있는 것을 재기입 관리자에게 알리는 코드 유닛 자체 내의 재기입 명령(예를 들면, 태그, 속성, 스트링, 등)을 판독하는 것에 의하는 것을 포함하는 다양한 방식으로 이루어질 수 있다. 블럭(1306)에서, 재기입 관리자는 코드 유닛을 재기입할 하나 이상의 재기입기를 결정한다. 재기입 관리자는 재기입기를 식별하는 재기입 리스트를 액세스함으로써 코드 유닛을 재기입할 재기입기를 결정한다. 재기입 리스트는 코드 유닛 자체 내의 명령일 수 있거나, 컴퓨터 시스템상의 독립형 모듈이거나 컴퓨터 시스템의 또 다른 구성요소의 일 부분인 파일일 수 있다. 대안적으로, 재기입 리스트는 네트워크(206)와 같은 네트워크를 통하여 액세스 가능한 원격 컴퓨터 장치상에 위치된 파일일 수 있다.
어느 재기입기가 코드 유닛을 재기입할지 여부를 결정한 후, 재기입 관리자는 하나 이상의 재기입기의 일 그룹으로부터 식별된 재기입기를 액세스하고 그들을 코드 유닛과 함께 메모리(RAM)로 로드한다. 재기입기들은 그들이 실행되는 컴퓨터 장치에 존재하는 것으로 논의되는 것이 일반적이지만, 그들은 네트워크(206)와 같은 네트워크를 통하여 액세스 가능한 원격 컴퓨터 장치상에 위치될 수도 있다. 이 시나리오에서, 재기입 관리자는 원격 장치상의 재기입기를 액세스하고 그들을 코드 유닛과 함께 RAM으로 로드할 것이다. 그 후 재기입 관리자는 블럭(1308)에서 도시된 바와 같이 코드 유닛 및 재기입기가 신뢰성 있는 것을 검증한다. 이것은 재기입기 및 코드 유닛의 각각에 관련된 디지털 서명을 인증함으로써 이루어진다. 블럭(1310)에서, 재기입 관리자는 코드 유닛에 대하여 실행하기 위한 특정한 순서로 재기입기들을 배열한다. 코드 유닛에 적용하는 재기입기가 오직 하나일 수 있으며, 이 경우 재기입기들의 배열(sequencing)은 없다. 하나 이상의 재기입기에 대한 시퀀스는 재기입 리스트에 따라 결정된다. 블럭(1312)에서, 재기입 관리자는 적절한 순서로, 한번에 하나씩, 코드 유닛에 대하여 하나 이상의 재기입기를 실행한다. 코드 유닛에 대한 각각의 재기입기의 실행은 고유한 방식으로 코드 유닛을 수정한다. 하나 이상의 재기입기에 의한 재기입의 결과는 재기입된 코드 유닛이다. 블럭(1314)에서, 재기입된 코드 유닛에 대하여 디지털 서명이 생성된다. 디지털 서명은 블럭(1316)에서 도시된 바와 같이 재기입된 코드유닛과 연관된다(예를 들면, 부가됨). 블럭(1318)에서, 상기 재기입된 코드 유닛(및 선택적으로, 연관된 디지털 서명)은 재기입 캐시에 기억된다.
블럭(1320)에서, 코드 유닛을 실행하는 명령이 수신된다. 블럭(1322)에서, 재기입 관리자는 재기입된 코드 유닛이 재기입 캐시에 기억되는 것을 인식한다. 따라서, 재기입 프로세스는 다시 실시될 필요가 없다. 대신, 재기입된 코드 유닛은 블럭(1326)에서 재기입 캐시로부터 직접 로드되고, 블럭(1328)에서 실행된다.
흐름도 및 흐름도의 블럭과 연관된 텍스트에 의하여 하나 이상의 방법들이 개시되었지만, 블럭들은 그들이 제시된 순서로만 수행되어야 하는 것은 아니며, 대안의 순서(들)가 유사한 장점들을 야기할 수 있음이 이해되어야 한다. 또한, 상기 방법들은 배타적이지 않으며 단독으로 또는 서로 조합으로 수행될 수 있다.
예시적인 컴퓨터
도 14는 도 1-13을 참조하여 전술된 바와 같은 개발자 컴퓨터(202), 중간 컴퓨터(302), 및 배치 컴퓨터(204)를 실시하는데 적절한 예시적인 계산 환경을 도시한다. 도 14에 하나의 특정한 구성이 도시되지만, 개발자 컴퓨터(202), 중간 컴퓨터(302), 및 배치 컴퓨터(204)는 다른 계산 구성에서 실시될 수 있다.
계산 환경(1400)은 컴퓨터(1402)의 형태인 범용 계산 시스템을 포함한다. 컴퓨터(1402)의 구성요소들은 하나 이상의 프로세서 또는 프로세싱 유닛(1404), 시스템 메모리(1406), 및 프로세서(1404)를 포함하는 다양한 시스템 구성요소들을 시스템 메모리(1406)로 연결하는 시스템 버스(1408)를 포함할 수 있다(그러나 이에 국한하지는 않음).
시스템 버스(1408)는 메모리 버스 또는 메모리 제어기, 주변장치 버스, 가속 그래픽 포트, 및 다양한 버스 아키텍쳐들중 어느 하나를 이용하는 프로세서 또는 로컬 버스를 포함하는 버스구조의 수개의 유형들중 하나 이상을 나타낸다. 시스템 버스(1408)의 일 예는 PCI(Peripheral Component Interconnects) 버스(메짜닌(Mezzaninie) 버스로도 알려짐)일 것이다.
컴퓨터(1402)는 다양한 컴퓨터 판독가능 매체를 포함한다. 그러한 매체는 컴퓨터(1402)에 의하여 액세스 가능하고 휘발성 및 비휘발성 매체, 제거가능 및 비제거가능 매체 모두를 포함하는 임의의 이용 가능한 매체일 수 있다. 시스템 메모리(1406)는 RAM(random access memory)(1410)과 같은 휘발성 메모리, 및/또는 ROM(read only memory)(1412)와 같은 비휘발성 메모리의 형태인 컴퓨터 판독가능 매체를 포함한다. 예를 들어 스타트업(start-up)동안, 컴퓨터(1402) 내의 요소들 사이에서 정보를 전송하는 것을 돕는 기본 루틴들을 포함하는 BIOS(basic input/output system)(1414)는 ROM(1412)에 기억된다. RAM(1410)은 프로세싱 유닛(1404)에 의하여 직접 액세스 가능하고/거나 현재 동작되는 데이터 및/또는 프로그램 모듈을 포함한다.
또한, 컴퓨터(1402)는 다른 제거가능/비제거가능, 휘발성/비휘발성 컴퓨터 기억 매체를 포함할 수 있다. 예로서, 도 14는 비제거가능, 비휘발성 자기 매체(도시하지 않음)로부터/로 판독 및 기록하는 하드디스크 드라이브(1416), 제거가능, 비휘발성 자기 디스크(1420)(예를 들면, "플로피디스크")로부터/로 판독 및 기록하는 자기디스크 드라이브(1418), 및 CD-ROM, DVD-ROM, 또는 다른 광학적 매체와 같은 제거가능, 비휘발성 광디스크(1424)로부터/로 판독 및/또는 기록하는 광디스크 드라이브(1422)를 도시한다. 하드 디스크 드라이브(1416), 자기 디스크 드라이브(1418), 및 광디스크 드라이브(1422)는 각각 하나 이상의 데이터 매체 인터페이스(1425)에 의하여 시스템 버스(1408)로 접속된다. 대안적으로, 하드 디스크 드라이브(1416), 자기 디스크 드라이브(1418), 및 광디스크 드라이브(1422)는 SCSI 인터페이스(도시하지 않음)에 의하여 시스템 버스(1408)로 접속될 수 있다.
디스크 드라이브 및 그 연관된 컴퓨터 판독가능 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 컴퓨터(1402)에 대한 다른 데이터의 비휘발성 기억을 제공한다. 상기 예는 하드 디스크(1416), 제거가능 자기 디스크(1420), 및 제거가능 광디스크(1424)를 도시하지만, 자기 카세트 또는 다른 자기적 기억장치, 플래시 메모리 카드, CD-ROM, DVD(digital versatile disks) 또는 다른 광학적 기억장치, RAM(random access memories), ROM(read only memories), EEPROM(electrically erasable programmable read-only memory), 등과 같이, 컴퓨터에 의하여 액세스 가능한 데이터를 기억할 수 있는 다른 유형의 컴퓨터 판독가능 매체도 예시적인 계산 시스템 및 환경을 실시하는데 이용될 수 있음이 이해되어야 한다.
예로서, 운영 시스템(1426), 하나 이상의 애플리케이션 프로그램(1428), 다른 프로그램 모듈(1430), 및 프로그램 데이터(1432)를 포함하는 임의의 수의 프로그램 모듈이 하드디스크(1416), 자기디스크(1420), 광디스크(1424), ROM(1412), 및/또는 RAM(1410)에 기억될 수 있다. 그러한 운영 시스템(1426), 하나 이상의 애플리케이션 프로그램(1428), 다른 프로그램 모듈(1430), 및 프로그램 데이터(1432)의 각각(또는 그들의 어떤 조합)은 유저 네트워크 액세스 정보에 대한 캐싱 구조(caching scheme)의 일 실시를 포함할 수 있다.
컴퓨터(1402)는 통신매체로서 식별된 다양한 컴퓨터/프로세서 판독가능 매체를 포함할 수 있다. 통신매체는 반송파나 다른 전송 메커니즘과 같은 변조된 데이터 신호 내의 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 또는 다른 데이터를 구현하고 임의의 정보 전달매체를 포함한다. 용어 "변조된 데이터 신호"는 그 특성 세트의 하나 이상을 가지거나 상기 신호에 정보를 인코딩하는 것과 같은 방식으로 변화되는 신호를 의미한다. 예로서(한정이 아님), 통신매체는 유선 네트워크 또는 직접배선 접속과 같은 유선매체, 및 음향, RF, 적외선, 및 다른 무선매체와 같은 무선매체를 포함한다. 상기의 것들의 임의의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함된다. 유저는 키보드(1434) 및 포인팅장치(1436)(예를 들면, "마우스")와 같은 입력장치를 통하여 컴퓨터 시스템(1402)으로 명령 및 정보를 입력할 수 있다. 다른 입력장치(1438)(특별히 도시하지는 않음)는 마이크로폰, 조이스틱, 게임패드, 위성접시, 시리얼 포트, 스캐너 등을 포함할 수 있다. 이러한 그리고 다른 입력장치들은 시스템 버스(1408)에 연결되는 입력/출력 인터페이스(1440)를 통하여 프로세싱 유닛(1404)으로 접속되지만, 패러렐 포트, 게임 포트, 또는 USB(universal serial bus)와 같은 다른 인터페이스 및 버스 구조에 의하여 접속될 수 있다.
모니터(1442) 또는 다른 유형의 디스플레이 장치는 비디오 어댑터(1444)와 같은 인터페이스를 통하여 시스템 버스(1408)로 접속될 수도 있다. 모니터(1442) 이외에, 다른 출력 주변장치는 입력/출력 인터페이스(1440)를 통하여 컴퓨터(1402) 로 접속될 수 있는 프린터(1446) 및 스피커(도시하지 않음)와 같은 구성요소들을 포함할 수 있다.
컴퓨터(1402)는 원격 계산 장치(1448)와 같은, 하나 이상의 원격 컴퓨터로의 논리적 접속을 이용하여 네트워크된 환경에서 동작할 수 있다. 예로서, 원격 계산 장치(1448)는 퍼스널 컴퓨터, 포터블 컴퓨터, 서버, 라우터, 네트워크 컴퓨터, 피어(peer)장치 또는 다른 공통 네트워크 노드, 등일 수 있다. 원격 계산 장치(1448)는 컴퓨터 시스템(1402)에 관하여 여기에서 설명된 요소 및 특징의 다수 또는 전부를 포함할 수 있는 포터블 컴퓨터로서 도시된다.
컴퓨터(1402)와 원격 컴퓨터(1448) 사이의 논리적 접속은 LAN(local area network)(1450) 및 일반적인 WAN(wide area network)(1452)으로서 묘사된다. 그러한 네트워킹 환경은 사무실, 기업 컴퓨터 네트워크, 인트라넷, 및 인터넷에서 통상적이다. LAN 네트워킹 환경에서 실시되는 경우, 컴퓨터(1402)는 네트워크 인터페이스 또는 어댑터(1454)를 통하여 로컬 네트워크(1450)로 접속된다. WAN 네트워킹 환경에서 실시되는 경우, 컴퓨터(1402)는 광역 네트워크(1452)를 통한 통신을 구축하는 모뎀(1456) 또는 다른 수단을 포함한다. 컴퓨터(1402)에 내부적이거나 외부적일 수 있는 모뎀(1456)은 입력/출력 인터페이스(1440) 또는 다른 적절한 메커니즘을 통하여 시스템 버스(1408)로 접속될 수 있다. 예시된 네트워크 접속은 예시적이며 컴퓨터들(1402 및 1448) 사이에서 통신링크(들)를 구축하는 다른 수단이 이용될 수 있음이 이해되어야 한다.
계산 환경(1400)으로 도시된 바와 같은, 네트워크된 환경에서, 컴퓨터(1402)에 관련하여 묘사된 프로그램 모듈, 또는 그 일부는 원격 메모리 기억장치에 기억될 수 있다. 예로서, 원격 애플리케이션 프로그램(1458)은 원격 컴퓨터(1448)의 메모리 장치에 존재한다. 예시의 목적으로, 운영 시스템과 같은, 애플리케이션 프로그램 및 다른 실행가능 프로그램 구성요소들은 여기에서 이산적인 블럭으로 도시되지만, 그러한 프로그램 및 구성요소는 컴퓨터 시스템(1402)의 상이한 기억 구성요소들에 다양한 시간에 존재하고, 컴퓨터의 데이터 프로세서(들)에 의하여 실행됨이 이해된다.
결론
본 발명이 구조적 특징 및/또는 방법적 행위에 특유한 언어로 설명되었지만, 청구범위에 정의된 본 발명은 개시된 특유의 특징 또는 행위에 제한되어야 하는 것은 아니라는 점이 이해되어야 한다. 오히려, 개시된 특유의 특징 및 행위는 청구된 본 발명을 실시하는 예시적인 형태로서 개시된다.
본 발명에 따라, 소스 프로그램, 컴파일러, 또는 실행환경의 복잡도를 크게 증가시키지 않으면서 프로그램의 개발 및 배치 사이클동안 상이한 단계들에서 코드 변환을 실시할 수 있다.

Claims (47)

  1. 계산 장치 및 메모리를 포함하는 컴퓨터 장치로서, 상기 메모리는,
    코드 유닛;
    재기입기들의 구성 가능한 세트 - 각 재기입기는 고유의 방식으로 상기 코드 유닛을 재기입하도록 구성됨 - ;
    상기 재기입기들의 구성 가능한 세트로부터 하나 이상의 재기입기들을 식별하고 상기 재기입기들을 배열하며 상기 코드 유닛에 대하여 상기 식별된 하나 이상의 재기입기들을 실행하도록 구성되는 재기입 관리자 - 상기 재기입 관리자는 상기 코드 유닛을 재기입하기 위해 적용할 재기입기를 식별하고 상기 재기입기들이 상기 코드 유닛에 적용될 순서를 제공하는 재기입 리스트를 액세스함 - ;
    상기 코드 유닛에 대하여 상기 식별된 하나 이상의 재기입기들을 실행함으로써 생성되는 재기입된 코드 유닛;
    상기 코드 유닛과 연관되는 제1 디지털 서명; 및
    제2 디지털 서명들의 세트 - 각 제2 디지털 서명은 상기 재기입기들의 구성 가능한 세트 중의 특정 재기입기와 연관됨 -
    를 저장하고,
    상기 재기입 관리자는, 상기 코드 유닛이 신뢰되는지 여부를 상기 제1 디지털 서명에 기초하여 결정하고, 상기 식별된 하나 이상의 재기입기들 중의 각 재기입기가 신뢰되는지 여부를 상기 제2 디지털 서명들의 세트 중의 대응하는 제2 디지털 서명에 기초하여 결정하며, 상기 코드 유닛과 상기 식별된 하나 이상의 재기입기들 중의 각 재기입기가 모두 신뢰되는 경우에만 상기 코드 유닛에 대하여 상기 식별된 하나 이상의 재기입기들을 실행하도록 더 구성되는, 컴퓨터 장치.
  2. 제1항에 있어서,
    재기입 캐시를 더 포함하며,
    상기 재기입 관리자는 상기 재기입 캐시에 상기 재기입된 코드 유닛을 기억하도록 더 구성되는, 컴퓨터 장치.
  3. 제1항에 있어서,
    상기 재기입 리스트는,
    상기 코드 유닛 내의 재기입기들의 리스트;
    독립형(stand-alone) 파일 내의 재기입기들의 리스트;
    보안정책(security policy) 내의 재기입기들의 리스트; 및
    설치툴(installation tool) 내의 재기입들기의 리스트
    를 포함하는 그룹으로부터 선택되는 컴포넌트인, 컴퓨터 장치.
  4. 제1항에 있어서,
    상기 메모리는, 상기 재기입 관리자에 의하여 상기 재기입된 코드 유닛과 연관되고 상기 재기입된 코드 유닛이 신뢰되는지를 검증하도록 구성되는 제3 디지털 서명을 더 저장하는, 컴퓨터 장치.
  5. 제1항에 있어서,
    상기 재기입 관리자는,
    독립형 재기입 모듈;
    운영 시스템의 일부로서 구성되는 재기입 모듈;
    설치툴의 일부로서 구성되는 재기입 모듈; 및
    보안정책의 일부로서 구성되는 재기입 모듈
    을 포함하는 그룹으로부터 선택되는 컴포넌트인, 컴퓨터 장치.
  6. 제1항에 있어서,
    상기 컴퓨터 장치는,
    상기 코드 유닛을 개발하도록 구성되는 개발 컴퓨터;
    상기 코드 유닛을 설치하도록 구성되는 중간 컴퓨터; 및
    상기 코드 유닛을 실행하도록 구성되는 배치 컴퓨터
    를 포함하는 그룹으로부터 선택되는, 컴퓨터 장치.
  7. 재기입 관리자에 의해 수행되는 방법으로서,
    코드 유닛을 수신하는 단계;
    상기 코드 유닛이 재기입기에 의하여 재기입될 것임을 결정하는 단계 - 상기 재기입기는, 상기 코드 유닛을 재기입하기 위해 적용할 재기입기를 식별한 재기입 리스트를 액세스하고 상기 재기입기들이 상기 코드 유닛에 적용되는 순서를 제공하는 상기 재기입 관리자에 의해 결정됨 - ;
    상기 코드 유닛 및 상기 재기입기가 신뢰되는지 여부를 결정하는 단계;
    상기 코드 유닛 및 상기 재기입기가 신뢰되는 경우, 재기입된 코드 유닛을 생성하도록 상기 코드 유닛에 대하여 상기 재기입기를 실행하는 단계;
    상기 코드 유닛에 연관되는 제1 디지털 서명을 생성하는 단계;
    제2 디지털 서명들의 세트를 생성하는 단계 - 각 제2 디지털 서명은 상기 재기입 리스트 중의 특정 재기입기와 연관되고, 상기 재기입 관리자는, 상기 코드 유닛이 신뢰되는지 여부를 상기 제1 디지털 서명에 기초하여 결정하고, 상기 식별된 하나 이상의 재기입기들 중의 각 재기입기가 신뢰되는지 여부를 상기 제2 디지털 서명들의 세트 중의 대응하는 제2 디지털 서명에 기초하여 결정하며, 상기 코드 유닛과 상기 식별된 하나 이상의 재기입기들 중의 각 재기입기가 모두 신뢰되는 경우에만 상기 코드 유닛에 대하여 상기 식별된 하나 이상의 재기입기들을 실행하도록 더 구성됨 -;
    상기 제1 디지털 서명을 상기 재기입된 코드 유닛에 부가하는 단계; 및
    상기 재기입된 코드 유닛을 캐시에 기억시키는 단계
    를 포함하는 방법.
  8. 제7항에 있어서, 상기 재기입 관리자에 의해 수행되는,
    상기 코드 유닛을 실행하기 위한 호출을 수신하는 단계;
    상기 코드 유닛이 재기입되었음을 인식하는 단계;
    상기 캐시로부터 상기 재기입된 코드 유닛을 로드하는 단계;
    상기 재기입된 코드 유닛에 부가된 상기 제1 디지털 서명을 검증하는 단계; 및
    상기 검증이 상기 재기입된 코드 유닛이 안전하다고 나타내는 경우 상기 재기입된 코드 유닛을 실행하는 단계
    를 더 포함하는 방법.
  9. 제7항에 있어서,
    상기 재기입기는 애플리케이션 호환성 재기입기(application compatibility rewriter)이고,
    상기 코드 유닛이 재기입될 것임을 결정하는 단계는,
    상기 코드 유닛을 애플리케이션으로서 식별하는 단계; 및
    현재의 실행환경과의 호환성을 위하여 상기 애플리케이션의 임의의 부분이 재기입될 필요가 있는지 여부를 결정하도록 애플리케이션 호환성 재기입 데이터 베이스를 참조하는 단계
    를 포함하는, 방법.
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
  46. 삭제
  47. 삭제
KR1020050001580A 2004-02-27 2005-01-07 코드 재기입이 가능한 컴퓨터 장치 및 코드 재기입 방법 KR100965706B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/789,201 2004-02-27
US10/789,201 US7409675B2 (en) 2004-02-27 2004-02-27 Code rewriting

Publications (2)

Publication Number Publication Date
KR20050087727A KR20050087727A (ko) 2005-08-31
KR100965706B1 true KR100965706B1 (ko) 2010-06-24

Family

ID=34838851

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050001580A KR100965706B1 (ko) 2004-02-27 2005-01-07 코드 재기입이 가능한 컴퓨터 장치 및 코드 재기입 방법

Country Status (5)

Country Link
US (1) US7409675B2 (ko)
EP (1) EP1577767B1 (ko)
JP (1) JP4851096B2 (ko)
KR (1) KR100965706B1 (ko)
CN (1) CN1661551A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160063990A (ko) 2014-11-27 2016-06-07 주식회사 엘지씨엔에스 컴퓨터 수행 가능한 모델 역공학 방법 및 장치

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7901291B2 (en) * 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US7493605B2 (en) * 2004-12-29 2009-02-17 Mainsoft R&D Ltd Method and a software product for adapting a .Net framework compliant reflection mechanism to a java environment
US9286308B2 (en) 2005-12-22 2016-03-15 Alan Joshua Shapiro System and method for metadata modification
WO2007072310A1 (en) * 2005-12-22 2007-06-28 Shapiro Alan J System and method for software delivery
CN101110020B (zh) 2006-07-21 2011-01-26 国际商业机器公司 维护关于可编辑对象中的元素的与原创性有关的信息的方法和系统
US7966599B1 (en) 2006-08-29 2011-06-21 Adobe Systems Incorporated Runtime library including a virtual file system
US9251498B2 (en) * 2006-10-23 2016-02-02 Oracle International Corporation Facilitating deployment of customizations of enterprise applications
CN101187965B (zh) * 2006-11-16 2010-12-15 思科技术公司 用于过滤对数据对象的访问的方法和装置
US8341616B2 (en) * 2007-03-28 2012-12-25 International Business Machines Corporation Updating digitally signed active content elements without losing attributes associated with an original signing user
EP2015561A1 (fr) * 2007-07-10 2009-01-14 Nagracard S.A. Procédé d'envoi d'un code exécutable à un dispositif de réception et procédé d'exécution de ce code
US8024315B2 (en) * 2007-07-20 2011-09-20 International Business Machines Corporation Method of dynamically providing a compound object's source information during its development
US8677141B2 (en) * 2007-11-23 2014-03-18 Microsoft Corporation Enhanced security and performance of web applications
US8359582B2 (en) * 2007-12-31 2013-01-22 Hewlett-Packard Development Company, L.P. Compiling and inserting code snippets at runtime
US20090193392A1 (en) * 2008-01-29 2009-07-30 Michael David Downen Dynamic intermediate language modification and replacement
US8443338B2 (en) * 2008-10-08 2013-05-14 Microsoft Corporation Logical extensions to intermediate code
US8434059B2 (en) * 2009-05-01 2013-04-30 Apple Inc. Systems, methods, and computer-readable media for fertilizing machine-executable code
US8943482B2 (en) 2009-05-15 2015-01-27 International Business Machines Corporation Incrementally constructing executable code for component-based applications
US9185064B2 (en) * 2010-01-15 2015-11-10 Microsoft Technology Licensing, Llc Interactive email
US8955043B2 (en) * 2010-01-27 2015-02-10 Microsoft Corporation Type-preserving compiler for security verification
US9836724B2 (en) 2010-04-23 2017-12-05 Microsoft Technology Licensing, Llc Email views
US9569184B2 (en) * 2012-09-05 2017-02-14 Microsoft Technology Licensing, Llc Generating native code from intermediate language code for an application
KR101490047B1 (ko) * 2013-09-27 2015-02-04 숭실대학교산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
CN104657185B (zh) * 2015-03-12 2017-08-11 东港股份有限公司 一种Java卡的Java代码补丁方法
US10216819B2 (en) 2015-03-20 2019-02-26 International Business Machines Corporation Automated identification of complex transformations and generation of subscriptions for data replication
US10686608B2 (en) * 2018-02-26 2020-06-16 Red Hat, Inc. Secure, platform-independent code signing
CN112905231B (zh) * 2021-02-04 2024-06-11 浪潮电子信息产业股份有限公司 一种业务系统重构方法、系统及相关装置
KR20230049392A (ko) * 2021-10-06 2023-04-13 삼성전자주식회사 멀티 서명된 apk 파일을 처리하는 전자 장치 및 그 동작 방법
US11941382B2 (en) * 2022-02-07 2024-03-26 Red Hat, Inc. User customizable compiler attributes for code checking

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6694505B1 (en) * 1999-11-25 2004-02-17 Kim Seng Holdings Pte. Ltd. Method for using a data flow net to specify and assemble computer software
US7197739B2 (en) * 2000-01-31 2007-03-27 British Telecommunications Public Limited Company Apparatus for automatically generating source code
US20080295069A1 (en) 2007-05-21 2008-11-27 International Business Machines Corporation User-extensible rule-based source code modification

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4553205A (en) 1982-09-21 1985-11-12 Salvatore Porchia Flexible macro expansion process
CA2643234C (en) * 1993-10-29 2012-05-15 Microsoft Corporation Method and system for generating a computer program
US5634114A (en) * 1993-11-18 1997-05-27 Intel Corporation Dynamic link library version negotiation
US6397380B1 (en) * 1994-10-21 2002-05-28 International Business Machines Corporation Computer-program compilers comprising a program augmentation capability
US6055503A (en) * 1997-08-29 2000-04-25 Preview Systems Software program self-modification
US6314562B1 (en) * 1997-09-12 2001-11-06 Microsoft Corporation Method and system for anticipatory optimization of computer programs
US5966541A (en) * 1997-12-04 1999-10-12 Incert Software Corporation Test protection, and repair through binary-code augmentation
US6151708A (en) * 1997-12-19 2000-11-21 Microsoft Corporation Determining program update availability via set intersection over a sub-optical pathway
US6219834B1 (en) * 1998-05-15 2001-04-17 International Business Machines Corporation Extensible compiler and method
US6302010B1 (en) * 1998-08-27 2001-10-16 Christopher A. Holler Utility vehicle for rescue and defense
US6324689B1 (en) * 1998-09-30 2001-11-27 Compaq Computer Corporation Mechanism for re-writing an executable having mixed code and data
US6353887B1 (en) * 1998-11-13 2002-03-05 Unisys Corporation Digital signaturing method and system for re-creating specialized native files out of a container imported from an open network or residing on a CD-ROM
US6457172B1 (en) * 1999-04-13 2002-09-24 International Business Machines Corporation Compiler for supporting multiple runtime data representations
US6978448B1 (en) * 2000-06-12 2005-12-20 Sun Microsystems, Inc. Method and apparatus for rewriting bytecodes to minimize runtime checks

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6694505B1 (en) * 1999-11-25 2004-02-17 Kim Seng Holdings Pte. Ltd. Method for using a data flow net to specify and assemble computer software
US7197739B2 (en) * 2000-01-31 2007-03-27 British Telecommunications Public Limited Company Apparatus for automatically generating source code
US20080295069A1 (en) 2007-05-21 2008-11-27 International Business Machines Corporation User-extensible rule-based source code modification

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Proceedings of the 7th Conference on Software Engineering Research and Practice in Sweden P.13-22 Eriksson, J. Usability Patterns in Design of End-user Tailorable Software(2007.10.24-25)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160063990A (ko) 2014-11-27 2016-06-07 주식회사 엘지씨엔에스 컴퓨터 수행 가능한 모델 역공학 방법 및 장치

Also Published As

Publication number Publication date
EP1577767A3 (en) 2007-11-21
KR20050087727A (ko) 2005-08-31
EP1577767B1 (en) 2018-05-02
US20050193369A1 (en) 2005-09-01
CN1661551A (zh) 2005-08-31
JP4851096B2 (ja) 2012-01-11
US7409675B2 (en) 2008-08-05
EP1577767A2 (en) 2005-09-21
JP2005243004A (ja) 2005-09-08

Similar Documents

Publication Publication Date Title
KR100965706B1 (ko) 코드 재기입이 가능한 컴퓨터 장치 및 코드 재기입 방법
US12008386B2 (en) Conservative class preloading for real time java execution
JP4263476B2 (ja) ハッシュによるアセンブリの完全性の確認のための方法、コンピュータ可読媒体及びプログラム
US7941797B2 (en) Dynamically providing native libraries and their dependencies
JP5663006B2 (ja) ランタイム環境を構築するためのシステムおよび方法
US20200073657A1 (en) Systems And Methods For Software Integrity Validation Using Blockchain
JP6469028B2 (ja) オペレーティング・システム・リソースに対する機械語のネイティブイメージのアクセス制御のシステム及び方法
US20050283622A1 (en) System for managing security index scores
KR20150024842A (ko) 적응식 이식가능 라이브러리
US8387032B1 (en) Captive runtime deployment
US9116770B2 (en) Recipe-based application conversion
JP4698925B2 (ja) 動的に接続可能な実行可能イメージの真正性検証システム及び方法
US9367686B1 (en) System and method for antivirus checking of native images of software assemblies
CN112965731A (zh) 基于Tinker的Flutter热更新方法、装置、设备及存储介质
WO2021009612A1 (en) Method for a container-based virtualization system
CN113168320A (zh) 用类选择性替换遗留加载模块程序以在java虚拟机中执行
US20160085523A1 (en) Selectively loading precompiled header(s) and/or portion(s) thereof
US9612808B1 (en) Memory use for string object creation
Brady et al. Dynamic Repair of Mission-Critical Applications with Runtime Snap-Ins
JP2007128537A (ja) 動的に接続可能な実行イメージの真正性検証システム及び方法
Eisenbach et al. Component adaptation in contemporary execution environments
Tang et al. Analysis of firmware vulnerabilities
Wootton et al. Programming in C Language
van Rossum Python Setup and Usage
RU2258252C2 (ru) Система и способ проверки подлинности динамически подключаемых исполняемых образов

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated 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: 20130521

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140516

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150515

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170522

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190515

Year of fee payment: 10