KR100403983B1 - 응용 프로그램의 관리방법 - Google Patents

응용 프로그램의 관리방법 Download PDF

Info

Publication number
KR100403983B1
KR100403983B1 KR10-2000-0020617A KR20000020617A KR100403983B1 KR 100403983 B1 KR100403983 B1 KR 100403983B1 KR 20000020617 A KR20000020617 A KR 20000020617A KR 100403983 B1 KR100403983 B1 KR 100403983B1
Authority
KR
South Korea
Prior art keywords
module
patch
fix
opcode
location
Prior art date
Application number
KR10-2000-0020617A
Other languages
English (en)
Other versions
KR20010006995A (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 KR20010006995A publication Critical patent/KR20010006995A/ko
Application granted granted Critical
Publication of KR100403983B1 publication Critical patent/KR100403983B1/ko

Links

Classifications

    • 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/268Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs
    • 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/46Multiprogramming arrangements
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • G06F9/44542Retargetable

Landscapes

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

Abstract

본 발명은 컴퓨터 응용 프로그램의 관리에 관한 것으로, 좀 더 상세하게는 한 개 이상의 컴퓨터 플랫폼에서 사용하는 응용 프로그램의 최적화에 관한 것이다.
본 발명에는 컴퓨터 플랫폼에서 프로그램 코드 모듈(DLL등)을 분해하는 방법 및 장치, 그리고 프로그램 코드가 제시되어 있는데 상기 방법은 모듈을 메모리에 로드하는 단계; 모듈내의 수정할 연산 코드의 위치를 판별하는 단계; 이 연산 코드에 대한 패치를 선정하는 단계; DLL 방법에 따라 이 패치를 이용하여 연산 코드를 수정하는 단계를 포함한다. 본 발명의 운영 시스템은 그 운영 시스템이나 플랫폼에 맞게 응용 프로그램을 최적화시키기 위해 연산 코드를 응용 프로그램에 패치할 때 동적 모듈 로더를 사용한다. 이것을 통해 사용환경이 달라짐에 따라 각각에 맞도록 별도의 프로그램을 만들어야 하는 번거로움을 감소시킬 수 있다. 연산 코드는 모듈 헤더 픽스 업 위치 포인터에 의해 지정되어 진다. 상기와 같은 방법은 코드가 로드 시간에 패치되며 운영 시스템 자체에 의해 패치되는 장점이 있다. 모든 응용 프로그램은 각각 이에 대해서 정확한 인스트럭션 시퀀스를 추출할 수 있는 적절한 DLL 파일들이 같이 설치되어 있어야 한다. 추가적인 장점은 연산 코드가 기록 불가능 영역에 있으므로 불측의 훼손을 방지할 수 있고 또한 호출-복귀의 오버헤드가 없다는 것이다. 더구나 단일 프로세서의 경우, 유일한 오버헤드는 무연산 인스트럭션밖에 없으므로 대단히 고속으로 연산실행이 가능하다.

Description

응용 프로그램의 관리방법{APPLICATION MANAGEMENT}
본 발명은 컴퓨터 응용 프로그램의 관리 방법에 관한 것으로, 좀 더 상세하게는 한 개 이상의 플랫폼에서 사용되는 응용 프로그램의 최적화에 관한 것이다.
일부 컴퓨터 프로그램은 하드웨어나 운영 시스템이 달라지면 그에 따른 각각의 다른 인스트럭션 시퀀스가 필요하다. 예를 들어, 인텔 x86 계열의 프로세서에 따라 프로그램은 최소 단위로 기억장소를 다시 갱신해야 할 필요가 발생할 수 있다. 단일 프로세서만을 가진 컴퓨터인 경우, 인스트럭션 계수기(counter)는 계수기의 기억장소를 판독하여, 검색된 값에 1을 더한 다음, 그 결과치를 다시 기억장소에 저장하게 된다. 이 모든 일은 한 개의 기계적 인스트럭션에 의해 이루어지며, 그 동안에는 인터럽트가 발생할 수 없으므로 프로그램의 다른 쓰레드(thread)는 동일한 시간에 그 기억 장소를 갱신 할 수 없다. 다수개의 프로세서를 가진 컴퓨터에서는 처음의 프로세서가 기억장소에 대한 판독를 한 후 그 결과치를 저장하기 전에 다른 프로세서가 그 기억장소를 판독할 수 있는데, 그 경우 두 번째 프로세서가 기억장소에 증가된 값을 저장하려 할 때, 앞의 증가분은 소실되게 된다. 이런 현상을 방지하기 위해 인텔의 인스트럭션 세트는 잠금 전위(lock prefix)를 제공하는데, 이것은 첫번째 프로세서가 판독하고 수정해서 저장하는 과정이 끝나기 전에 다른 프로세서가 동일 기억장소에 접근하는 것을 막는 역할을 한다. 그러나 이 잠금 전위(lock prefix)가 단일 프로세서를 가진 시스템에서 사용될 경우, 메모리 캐시 시스템을 우회(bypass)할 수 있어 시스템 성능의 저하를 가져올 단점이 있다. 따라서 단일 프로세서를 가진 시스템에서는 선별적으로 잠금 전위를 사용하여야 한다.
지금까지는 각각의 사용환경에 따라 그에 맞는 서로 다른 소프트웨어 버전을 사용해야 했다. 이것은 결국 프로그램 코드의 크기를 배증시키게 되며 각각의 환경에 따라 그에 맞도록 프로그램을 수정하는 등의 유지 보수 작업을 복잡하게 만든다.
또 다른 문제점은 응용 프로그램에 대한 패치(patch)는 항상 프로그램의 실행 시간(run time)동안에 적용되어야 한다는 것이다. 이 경우 프로그램 코드는 메모리의 기록 가능 영역에 있어야 하는데 사고나 또는 고의적으로 프로그램 코드가 훼손될 염려가 있다. 그래서 몇 몇 운영 시스템이나 프로세서는 기록 가능한 코드 메모리를 인정하지 않거나 또는 기록 과정을 대단히 복잡하게 해 놓았는데, 예를 들면 인텔의 x86 계열 프로세서는 판독은 가능하지만 쓸 수는 없는 실행 코드 세그먼트를 갖고 있다. 따라서 여기에 패치를 할 경우에는 기록 가능 데이터 세그먼트로 다시 변환시켜야 한다. 이 경우 서브루틴을 사용하는 것도 가능하지만 호출(call)과 복귀(return)의 오버헤드가 발생하는 단점이 있다.
본 발명은 상기와 같은 문제점을 해결하기 위해 컴퓨터 플랫폼에서 프로그램 코드 모듈을 수정하는 방법에 관한 것으로, 모듈을 메모리에 로드(load)하고 모듈내의 연산 코드의 위치를 판별한 다음, 연산 코드의 패치를 선택하고 그 패치로 연산 코드를 변환시키는 단계로 구성되어 있다.
본 발명의 운영 시스템은 그 운영 시스템이나 플랫폼에 적용될 수 있도록 응용 프로그램을 최적화하기 위해 프로그램 연산 코드의 패치를 실행할 때 동적 모듈 로더(Dynamic module loader)를 사용한다. 이것은 각각의 운영 시스템과 플랫폼에 따라 서로 다른 응용 프로그램을 만들어야 하는 단점을 줄일 수 있다. 연산 코드의 위치는 모듈 헤더 픽스 업 위치 포인터(module header fix up location pointer)가 가리킨다. 이 같은 방법은 코드의 패치가 로드 타임(load time)에 이루어질 수 있게 하며 또한 운영 시스템 자체가 이를 직접 수행하는 장점이 있다. 본 발명에서는 응용 프로그램이 해야 하는 일은 올바른 인스트럭션 시퀀스를 내보낼 수 있는(export) 적절한 다이나믹 링크 라이브러리(dynamic link library, 이하 DLL이라 함)가 설치되어 있는지 확인하는 것뿐이다. 본 발명의 또 다른 장점은 코드가 기록 불가능 상태로 있으므로 훼손을 염려할 필요가 없고 또한 호출과 복귀의 오버헤드가 발생하지 않는다는 점이다. 또한 단일 프로세서 시스템에서는 실행속도가 빠르며 유일한 오버헤드는 무연산(No Operation; NOP) 인스트럭션밖에는 없다.
각 모듈은 수정할 하나 이상의 연산 코드 로케이션(operation code location)을 가질 수 있다. 각 픽스 업 위치(fix up location)은 같거나 또는 서로 다른 연산 코드들로 이루어질 수 있으며, 각각 같거나 또는 서로 다른 패치들에 연결될 수 있다. 연산 코드와 패치간의 연결관계는 헤더(header)에서 정의된다.
픽스 업 연산 코드(fix up operation code)는 모듈 헤더의 표(table)에 있는 픽스 업 레퍼런스(fix up reference)를 참조함으로써 모듈내의 위치가 판별된다. 동일한 헤더가 사용할 패치의 이름을 지정할 수 있다.
플랫폼은 픽스 업 연산 코드(fix up operation code)를 위한 적어도 하나 이상의 패치를 포함할 수 있는 운영 시스템을 가지고 있다. 패치들은 운영 시스템에 미리 로드되어 반영구적으로 존재할 수도 있고 또는 응용 프로그램이 초기화될 때 미리 로드될 수도 있다. 또는 응용 프로그램과 동일한 소스(source)로부터의 요청에 의해 패치들이 로드되는 방식도 가능하다.
패치는 해당 기억장소에 직접 로드되어 픽스 업 연산 코드(fix up operationcode)위에 중첩되어 질 수도 있다.
패치는 DLL로부터 내보내질 수(export) 있는 것이 좋다. 패치자체가 다이나믹 링크 라이브러리가 되어 DLL처럼 사용되어 질 수도 있다. 패치에 인스트럭션들을 덧붙이는(overlay) 방법은 일반적으로 알려져 있는 동적 연결과 동일하며 운영 시스템에 적용시키기 위해 특별한 다른 작업은 필요하지 않다.
DLL을 처리할 수 있는 기능을 가진 운영 시스템이라면 본 발명을 가능하게 하기 위해 별도의 수정을 할 필요가 없다. 따라서 동적 연결을 할 수 있는 수 많은 운영 시스템에 본 발명의 실시예가 적용되어 질 수 있다.
픽스 업 연산(fix up operation)인스트럭션은 무연산 인스트럭션(no operation instructions)일 수도 있는데 이 때는 뒤따라 오는 연산에 대한 전위 연산(prefix operation)을 중첩할 것인가를 선택할 수 있다. 전위 연산을 필요로 하지 않는 플랫폼에서는 무연산 인스트럭션이 최소한의 오버헤드를 가진 채로 머물러 있다. 이 시스템에 패치가 로드되면 패치는 그 효과를 무효화(negate)시키기 위한 무연산 인스트럭션을 포함할 것이다. 전위 연산이 필요한 플랫폼이라면, 패치는 그 전위들을 갖고 있어 앞뒤의 코드를 훼손시키지 않고도 그 무연산 인스트럭션을 교체할 수 있다.
플랫폼이 다중 프로세서를 가진 시스템이라면 이 전위 연산은 판독-수정-기록 연산동안 다른 프로세서가 메모리에 접근하는 것을 방지하는 잠금 연산(rock operation)이 되는 유리한 점이 있다. 이것은 단일 목적 코드 응용 프로그램(single object code application)을 단일 프로세서 플랫폼과 다중 프로세서 플랫폼에서 사용 가능하게 한다.
본 발명 실시예의 또 다른 장점은 픽스 업 위치(fix up location)이 서브루틴 호출 인스트럭션이고 패치가 그 서브루틴 호출 인스트럭션을 수정할 때이다. 예를 들어, 서로 다른 플랫폼에서는 서브루틴 사용 여부가 선택적인 것이 될 수 있거나, 또는 응용 프로그램 개발중이나 그 후에 가끔 사용하는 추적 프로그램(trace)일 수 있다.
본 발명의 또 다른 장점은 픽스 업 위치이 구조(structure)에 대한 오프셋(offset)이고 패치가 그 오프셋을 수정할 때이다. 일반적으로 구조의 크기는 호환성을 갖기 위해 DLL 버전 모두에 걸쳐 동일하게 유지되어야 한다. 만약 오프셋이 동적값(dynamic value)으로 제공된다면 오프셋은 프로그램에 대해 독립적으로 변경될 수 있다.
픽스 업 위치은 연산 코드를 지정하거나 또는 동적 연결(dynamic linking)을 위한 주소(addresses)들을 지정하기도 한다.
본 발명의 운영 시스템은 모듈을 메모리에 로드하는 수단; 모듈내의 지정된 연산 코드를 판별하는 수단; 연산 코드에 대해 패치를 선정하는 수단 및 연산 코드를 패치를 이용하여 수정하는 수단을 포함할 수 있다.
본 발명은 컴퓨터 플랫폼에 로드되는 프로그램 모듈을 제공하는데, 상기 프로그램 모듈은 코드 세그먼트와 픽스 업 포인터(fix up pointer)로 이루어지며 상기 포인터는 코드 세그먼트내의 연산 코드 필드의 주소값을 가지면서 또 다른 모듈과 연결되어 있다. 상기 연산 코드는 컴퓨터 플랫폼에 로드되는 동안 연결된 모듈에 의해 패치된다.
컴퓨터 응용 프로그램은 과거에 비해 더 많은 연산 메모리를 사용하고 있다. 이 추세의 한 가지 요인은 객체 지향적 프로그래밍 기술 때문인데 이것은 과거처럼 연속적인 한 조각의 코드가 아니라 별도로 존재하는, 독립적인 다수개의 모듈로 응응 프로그램을 쪼개는 기술이다. 각각의 모듈은 어느 정도의 자유도를 갖고 있어 다른 모듈에 의해 참조될 때만 메모리에 로드된다. 참조된 모듈이 메모리에 로드되면 응용 프로그램에 연결된다. 즉, 응용 프로그램으로부터 모듈로의 이동에 대한 레퍼런스는 프로세서가 모듈과 응용 프로그램 사이를 지장없이 점프(jump)할 수 있도록 코딩되어 있다. 로드와 연결을 할 수 있는 공지된 모듈로는 DLL 이 있다. DLL 파일에 연결된 점프나 호출 명령은 연산 코드에 대한 인스트럭션 필드와 참조된 DLL 파일에 연결된 비어 있는 주소 필드를 가진다. 동적 연결 분해기 (dynamic link resolver)는 모듈 헤더에 있는 참조표(reference table)를 찾아서 모듈내에 있는 DLL 파일의 이름을 알아낸다. 그 DLL 파일은 특정한 메모리 장소에 로드되며 분해기는 그 특정한 메모리 장소의 상대적인 주소에 인스트럭션의 주소 필드를 연결시키거나 또는 절대값으로 인스트럭션의 주소 필드를 갱신한다.
본 발명은 연결된 루틴의 오프셋이나 주소보다는 인스트럭션 시퀀스를 패치하기 위해 운영 시스템의 동적 연결 장치를 이용하는 것에 관한 것이다. 즉, 이것은 컴퓨터의 서로 다른 프로세서 버전이나 서로 다른 운영 시스템에 따라 동적 연결을 이용하여 인스트럭션 시퀀스를 패치하는 것에 관한 것이다. 응용 프로그램이나 운영 시스템이 DLL을 제공하는데, 이것은 진입점의 주소(entry point address)를 추출하기 보다는 실제 인스트럭션 시퀀스를 추출한다. 그러면 서로 다른 DLL 버전들이 만들어지는데 이것은 루틴의 진입점 주소이었던 4 바이트 이내의 데이터로 이루어진 서로 다른 인스트럭션 시퀀스를 추출한다. 그 후 이들은 호출 루틴에 의해 불러들여지며 실제 인스트럭션 연산 코드로 취급된다.
도 1은 본 발명의 실시예가 동작하게 되는 플랫폼의 개략도.
도 2는 본 발명의 실시예에 따른 방법 단계를 도시한 도면.
도 3a는 선행기술에 따른 코드 조작도.
도 3b와 도 3c는 본 발명의 실시예에 따른 코드 조작도
<도면의 주요부분에 대한 부호의 설명>
10: 플랫폼
12:디스크 메모리
14: 램(RAM)
16:운영체제
18: 응용 프로그램
이하 도면을 참조하여 본 발명을 상세히 설명한다.
도 1은 운영 시스템(16)이 램(14;이하 RAM 이라 함)에 로드된 후의 디스크 메모리(12)와 RAM(14)를 가진 프로세서(미도시)로 이루어진 컴퓨터 플랫폼을 나타낸 것인데, 응용 프로그램(18)은 완전히 로드되지 않았다. 디스크 메모리(12)는 사전에 로드된 응용 프로그램을 구성하는 동적 링크 라이브러리(DLL) 파일 형태인 모듈 20A, 20B를 저장하고 있다. RAM(14)에 로드된 응용 프로그램(18)은 모듈 20A, 20B에 대응되는 구성요소 24A, 24B 로 이루어진다. 구성요소들은 코드 시퀀스 32A, 32B 를 포함하는데, 이들은 운영 시스템이나 플랫폼의 형태 또는 단일 프로세서를 가지는 플랫폼인지 다중 프로세서를 가지는 플랫폼인지등의 여러 환경들에 따라 수정되어야 할지도 모른다. 운영 시스템에는 기본적인 운영 시스템의 기능들에 더하여 다이나믹 모듈 로드 캐패서티(dynamic module loading capacity)를 갖고 있다. 본 실시예에 있어서 다이나믹 모듈 로드 캐패서티는 모듈 로더(22; module loader), 픽스 업 코드 로케이터(24; fix up code locator), 픽스 업 패치 로더(26; fix up patch loader), 픽스 업 코드 수정기(28; fix up code modifier)와 픽스 업 패치인 30A, 30B 로 구성되어 진다. 예를 들면, 플랫폼은 OS/2 나 윈도우를 운영 시스템으로 하는 펜티엄급 프로세서일 수 있다. 그러나 본 발명의 실시예는 다이나믹 링크 로드가 가능한 임의의 플랫폼이나 운영 시스템, 또는 실시예에서 설명한 방법처럼 동적으로 모듈을 로드할 수 있도록 만들어진 어떤 운영 시스템에도 적용 가능하다.
도 2를 참조하면 모듈 로더(22)는 응용 프로그램의 구성요소 24A 를 형성하기 위해 디스크 메모리내의 모듈 20A 를 응용 프로그램(18)에 로드한다(단계 1). 픽스 업 코드 로케이터(24)는 모듈 20A 에서 픽스 업 인스트럭션 코드의 위치를 설정하고 구성요소 24A 로부터 32A 나 32B같은 픽스 업 코드를 파싱(parsing)한다.(단계 2). 픽스 업 패치 로더(26)는 30A 나 30B같은 이용 가능한 픽스 업 패치들을 픽스 업 코드에 대응시킨다(단계 3). 도 1에서는 픽스 업 패치 로더(26)가 픽스 업 코드 32A에 DLL인 픽스 업 패치 30A를 대응시켰다. 픽스 업 코드 수정기(28)는 픽스 업 코드 32A에 덮어쓰기 위해 픽스 업 패치 30A를 사용하였다(단계 4). 픽스 업 코드 32B와 DLL인 픽스 업 패치 30B에도 동일한 단계들이 반복된다.
이 실시예에서는 각 모듈들이 한 번에 하나씩 로드되어 모듈 20B 에 대해 단계 1을 반복한 후, 이어지는 단계들이 끝난 다음에 메모리 디스크(12)에 있는 다른 모듈에 대해 다시 단계들이 반복되지만, 또 다른 실시예로는 모든 모듈들이 단계 2가 실시되기 전에 동시에 로드될 수도 있다. 이 때 픽스 업 코드 로케이터(24)는 플랫폼의 특정 부분을 검색하여 한 번에 한 파트(part)씩 찾을 때마다(단계 2) 매번 단계 3으로 넘어간다. 그러나 또 다른 실시예로는 단계 3이 실시되기 전에 픽스 업 코드 로케이터(24)가 플랫폼의 모든 특정 부분를 판별하고 각 파트들과 이들의 로케이션에 대한 표를 생성할 수 있다. 이 실시예에서 하나의 픽스 업 위치에 하나의 패치를 대응시킨 후 단계 4로 넘어가 수정이 이루어 진다. 그러나 또 다른 실시예로는 픽스 업 패치 로더가 테이블에 있는 모든 픽스 업 위치들에 대해 패치들을 대응시킬 수 있다. 여기서는 다른 모듈이 판별되기 전에(단계 2) 각 픽스 업 위치들이 대응되는 패치에 의해 수정되어 진다(단계 4). 그러나 또 다른 실시예로는 코드 수정기가 테이블에 있는 많은 플랫폼의 특정 파트들을 대응되는 패치에 의해 수정할 수 있다.
실시예에서 실제 잠금 전위 인스트럭션(actual lock prefix instruction)은 다른 DLL 로부터 제공된다.
EXTERN LOCKOPC:ABS ; LOCKOPC"라는 기호가 외부 값(EXTERNAL VALUE)을 가진 상수임을 선언한다.
db LOCKOPC ; LOCKOPC는 NOP나 LOCK중 하나에 패치되는 외부참조이다. 'db'는 LOCKOPC의 값을 갖는 바이트임을 정의한다.
inc [counter] ; 계수기
LOCKOPC는 다른 DLL에 의해 정의된다. 두 버전이 있는데, 하나는 단일 프로세서에 적용되는 것으로 NOP 인스트럭션으로 해석되며(도 3c), 다른 하나는 다중 프로세서에 적용되는 것으로 잠금 인스트럭션으로 해석된다(도 3b).
단일 프로세서에서는
LOCKOPC EQU 090h ; 어셈블러의 관점에서 LOCKOPC는 무연산(NOP)를 위한 연산코드(OP CODE)이며 헥사값으로 90 임을 정의한다.
PUBLIC LOCKOPC ; LOCKOPC파일을 소스파일의 밖에서 접근할 수 있도록 한다.
다중 프로세서에서는
LOCK1 EQU 0F0h ; 잠금 인스트럭션 프리픽스
PUBLIC LOCK1
두 버전 모두 같은 이름의 DLL에 형성된다. 단일 프로세서 버전이 요구되는냐, 아니면 다중 프로세서 버전이 요구되느냐에 따라 적합한 버전이 설치되거나 또는 운영 시스템에 의해 이용된다.
응용 프로그램이 수행될 때는 프로그램 코드가 로드된 후 다른 DLL에 연결된 외부 레퍼런스(reference)가 호출된다. 일반적으로 이것들은 다른 DLL에 있는 루틴(routine)들의 주소에 대한 레퍼런스들인데 이 주소들이 프로그램에 패치된다. 예를 들어,
EXTERN func1 : proc
call proc
라는 코드의 경우에 'proc'라는 프로시저(procedure)는 다른 파일에 정의되어 있으며 컴파일(compile)되어 DLL 로 만들어진다. 운영 시스템이 응용 프로그램을 실행하기 위해 로드되면 'proc'에 대한 외부 레퍼런스가 호출되는데 이 때 'proc' 루틴을 가진 DLL이 로드되어 응용 프로그램내에 있는 'proc'에 대한 모든 레퍼런스들을 'proc' 루틴이 자리잡은 메모리의 주소에 패치하게 된다.
때때로 DLL로부터 절대값들이 제공될 수 있다. 이 절대값들은 로드된 DLL 내에서의 주소들이 아니라 DLL이 메모리 어디에 존재하는지에 상관없이 고정된 형태의 DLL에 내장된 절대값이다. 예를 들면, OS/2에서 상수 DOSHUGESHIFT이 DOSCALLS.DLL로부터 제공되는 경우는 다음과 같다(도 3a).
EXTRN DOSHUGESHIFT: abs ; 외부 절대값 DOSHUGESHIFT를 선언한다.
mov ecx, DOSHUGESHIFT ; DOSHUGESHIFT의 값을 레지스터 ecx로 옮긴다.
shl eax, c1 ; 레지스터 c1에 있는 계수에 의해 레지스터 eax값을 이동시킨다.
실시예에서 인스트럭션 시퀀스가 패치되면, 32비트 주소를 패치하는 로더 대신에, DLL이 절대값 (DLL내의 루틴의 주소 대신)을 전송하면 로더는 이 절대값을 프로그램 메모리에 있는 8비트-바이트에 패치시키며 이것이 인스트럭션으로 취급된다.
동적연결에서 A라는 DLL이 응용 프로그램의 로드시 그 일부분으로 로드되면 DLL내의 주소 레퍼런스중 일부분들은 완전히 판별되지 않으며 DLL내의 재배치표는 코드인 어떤 호출 주소들이 다른 DLL인 B에 존재하는 루틴의 실제 주소에 의해 대체되어야 함을 지정하는데, 이 패치는 DLL A와 DLL B 모두가 응용 프로그램을 위해 메모리에 로드될 때 일어난다. 이제 호출 인스트럭션은 DLL B에 있다고 지정된 서브루틴에 대한 호출이 DLL B에 있는 코드를 호출함으로써 생겨나는 방식으로 수행된다.
어떤 상황에서는(도 3a) 목적지 주소(destination adress)를 패치하기보다는 데이터의 절대값이 동적으로 패치된다. 예를 들면, DOSHUGESHIFT는 OS/2 커널(kernel) DLL 에 의해 추출된 기호로, 어떤 운영 시스템에서는 십진수로 123의값을 가지고 다른 운영 시스템에서는 십진수로 3의 값을 가진다. 이 커널 DLL이 도 3a에서는 DLL B로 불리는 것이다. 운영 시스템의 버전이 다르면 DLL B도 서로 다른 버전이 존재하는데, 전체 운영 시스템이 설치될 때 적절한 DLL B의 버전이 같이 설치된다. 만약 DLL A가 기호 DOSHUGESHIFT를 불러 들이면 로드시에 운영 시스템 버전에 맞는 정확한 값이 DLL를 위해 코드형태의 인스트럭션인 데이터 필드에 패치된다.
본 발명의 구현을 위한 실시예들을 도3b와 도 3c를 참조하여 설명한다.
본 발명의 실시예중 하나가 도 3b에 나타나 있다. 코드 세그먼트와 모듈 20A가 메모리에 로드된다. 모듈 20A의 재배치표는 모듈 30A의 기호 'LOCKOPC'의 재배치가 모듈 20A의 코드 세그먼트 위치 3과 위치 6에 적용되어야 함을 지정한다. 그러면 로드된 운영 시스템은 모듈 20B를 로드하여 기호 'LOCKOPC'의 레퍼런스를 모듈내의 절대값으로 결정한다. 도 3b의 운영 시스템 버전에서 그 값은 0xF0 이다. 이 절대값은 모듈 20A의 위치 3과 위치 6에 패치되어 'INC'와 'DEC' 인스트럭션을 위한 연산 코드(opcode)인 잠금 전위로 작동한다. 이것은 다중 프로세서 시스템의 다중 쓰레드에서 인스트럭션 사용을 안전하게 만들어 준다. 이 잠금 전위는 시스템의 메모리 버스가 인스트럭션의 수행중에는 잠금이 되어 판독-계수의 증가/ 감소-기록 중 다른 프로세서가 메모리 위치를 수정하는 것을 방지해 준다.
단일 프로세서 시스템에서는 잠금 전위가 시스템 버스를 잠궈 메모리 서브시스템의 데이터 캐시(cache)를 우회(bypass)하도록 하는 문제가 있다. 따라서 단일 프로세서 시스템에서는 이 전위가 작동하지 않는 것이 바람직하지만 두 개 버전의프로그램을 운영하는 것은 복잡한 일인데다가 실행시간(run -time)에 코드를 패치하는 것은 코드 세그먼트가 기록 가능 상태에 있다는 의미로, 이 경우 잘못하면 훼손될 수 있다. 본 발명을 단일 프로세서 시스템에 사용하면 모듈 30A의 다른 버전이 설치되어 기호 'LOCKOPC'는 0x90값을 가지게 된다(도 3c). 인텔 286, 386, 486 이나 펜티엄과 펜티엄 2에서 이것은 NOP, 즉 무연산 인스트럭션이 된다. 프로세서는 NOP 인스트럭션을 수행하며 실제 'INC' 나 'DEC' 인스트럭션은 별개의 인스트럭션으로 수행된다. 'INC' 나 'DEC' 인스트럭션은 잠금 전위를 갖고 있지 않으므로 데이터 캐시를 사용할 수 있어 연산이 상대적으로 빨라지며 이 속도 증가의 장점은 잠금 전위를 갖지 않은 상태인 프로그램의 공백 부분을 채우는데만 필요한 NOP 인스트럭션을 수행하는데 드는 낭비요인을 충분히 보상할 수 있다. 만약 운영 시스템이 모듈 30A를 제공하지 않는다면 응용 프로그램이 단일 프로세서에 설치 되었느냐, 아니면 다중 프로세서에 설치되었느냐에 따라 30A의 한 개 또는 두 개의 버전을 설치할 수 있다.
윈도우스(Windows)는 마이크로소프트사(Microsoft Corporation)의 상표이다.
펜티엄(Pentium)은 인텔사(Intel Corporation)의 상표이다.
OS/2 는 아이비엠사(IBM Corporation)의 상표이다.
다음은 운영 시스템이 OS/2인 경우의 응용 프로그램으로부터 추출된 예이다.
app1.asm: ; 응용소스파일의 이름
EXTERN LOCKOPC : ABS
db LOCKOPC ; LOCKOPC는 외부 레퍼런스로 로드중 NOP나 잠금에 패치된다.
inc [counter]
app1.def: ; 모듈 정의파일(모듈 20A의 헤더를 형성)
NAME app1 ; 모듈 이름
CODE SHARED
DATA MULTIPLE NONSHARED
IMPORTS
LOCK.LOCKOPC
lockuni.asm ; 단일 프로세서 환경에서의 첫 번째 DLL.
LOCKOPC EQU 090h ; 무연산 인스트럭션
PUBLIC LOCKOPC ; 어셈블러 파일 밖에서도 LOCKOPC에 접근가능.
lockuni.def
LIBRARY LOCK ; LOCK이란 이름이 붙은 DLL을 정의.
CODE SHARED
DATA NONE
EXPORTS
LOCKOPC ; LOCK인 DLL로부터 LOCKOPC를 추출하기 위해 LOCKOPC를 정의.
lockmulti.asm ; 다중프로세서 환경에서의 두 번째 DLL
LOCKOPC EQU 0F0h ; 잠금 인스트럭션 프리픽스
PUBLIC LOCK1
lockmulti.asm:
LIBRARY LOCK
CODE SHARED
DATA NONE
EXPORTS
LOCK1
설치중에 LOCKUNI.DLL 이나 LOCKMULTI.DLL 은 적절히 LOCK.DLL로 이름이 변경되어 설치된다.
잠금 프리픽스와 마찬가지로 패치되어야 할 다른 인스트럭션은 디버깅(debugging)을 위한 호출 인스트럭션이다. 예를 들면 다음과 같다.
call subroutine1
test eax, OFFSET FLAT:subroutine1 ; 이것은 주소를 갖고 있으나 5 바이트에서는 실질적인 무연산으로 레지스터 값이 변하지 않는다.
호출 인스트럭션의 0A9h를 0E8h에 패치하면 호출 인스트럭션은 시험 인스트럭션으로 전환되어 서브루틴 호출을 우회하므로써 어떤 레지스터에도 영향을 미치지 않고 다만 플래그(flag)에만 영향을 주게 된다. 이것은 제품 전체의 제조가 아니라 디버그 작업에서 선별적으로 추적 프로그램을 이용하는데 사용가능하다.
절대값을 패치하므로써 유용하게 사용할 수 있는 또 다른 인스트럭션들로는 구조의 오프셋(offset)을 포함한다. 일반적으로 구조의 크기들은 호환성을 유지하기 위해 DLL의 버전들에 걸쳐 동일하게 유지되어야 한다. 만약 오프셋이 동적값(dynamic value)으로 추출될 경우, 오프셋은 응용 프로그램에 대해 독립적으로 변경될 수 있다.
EXTRN dataoffset3:ABS
mov eax, [esi + dataitem3]
그러면 다른 모듈에서는
version 1
dataitem1 STRUC
item1 DB ? ; 구조내에서 미지수 "?" 에 대한 바이트 필드를 선언
item2 DW ? ; 2 바이트 필드를 선언
dataitem3 DD ? ; 4 바이트 필드를 선언
dataitem1 ENDS
PUBLIC dataitem3
만약 구조에 대한 정의가 아래처럼 변하게 되면 로드때 오프셋이 정확한 값으로 패치되므로 응용 프로그램은 재컴파일이나 정적 연결(static linking)이 없어도 계속 동작하게 된다.
Version 2
dataitem1 STRUC
item1 DB ?
extraitem DD ? ; 뒤따르는 아이템들은 엑스트라 필드에 의해 대치된다.
item2 DW ?
dataitem3 DD ?
dataitem1 ENDS
전체 구조들 역시 그 크기면에서 운영 시스템의 로더가 패치할 수 있는 패치 타입의 사이즈에 대응하는 크기인 1,2 또는 4 바이트라면 패치가 가능하다.
EXTRN INCEAX:abs
db INCEAX
그리고 INCEAX는 다음에 대응하여 00400FF90h 나 0040FFF0h로 정의될 수 있다.
NOP
INC DWORD PTR [EAX+0] ; 레지스터 EAX+0에 의해 지정된 장소에서 4 바이트의 증가
또는
LOCK INC DWORD PTR [EAX+0]
본 발명은 바람직한 실시예를 통해 설명되었지만 여러 가지 다양한 변형이나 개선이 당업자에게 용이하게 발생할 수 있다. 따라서 본 바람직한 실시예들은 단지 예시로서만 제공되었을 뿐, 본 발명을 한정하는 것은 아니다.
전술한 바와 같이 본 발명의 운영 시스템은 그 운영 시스템이나 플랫폼에 적용될 수 있도록 응용 프로그램을 최적화하기 위해 프로그램 연산 코드의 패치를 실행할 때 동적 모듈 로더(Dynamic module loader)를 사용하므로써 각각의 운영 시스템과 플랫폼에 따라 서로 다른 응용 프로그램을 만들어야 하는 단점을 줄일 수 있다. 본 발명의 또 다른 장점은 상기 패치시 코드가 여전히 기록 불가능상태로 있으므로 훼손을 염려할 필요가 없고 또한 호출과 복귀의 오버헤드가 발생하지 않는다는 점이다.

Claims (17)

  1. 컴퓨터 플랫폼에서 프로그램 코드 모듈을 해결(resolve)하는 방법에 있어서,
    제1 모듈을 메모리로 로드하는 단계로서, 상기 제1 모듈은 명기된(specified) 연산 코드에 대한 상기 제1 모듈 내의 픽스 업 위치(fix up location)를 정의하고, 제2 모듈을 식별하는, 상기 제1 모듈 로드 단계와,
    상기 명기된 연산 코드에 대한 패치를 포함하는 상기 제2 모듈의 위치를 찾아내는 단계와,
    상기 제1 모듈의 픽스 업 위치에 상기 제2 모듈의 패치를 로드함으로써, 상기 명기된 연산 코드를 상기 패치로 수정하는 단계를 포함하는 프로그램 코드 모듈 해결 방법.
  2. 제1항에 있어서, 상기 제1 모듈은 수정을 위한 하나 이상의 연산 코드 위치를 포함하는 프로그램 코드 모듈 해결 방법.
  3. 제1항에 있어서, 각 픽스 업 위치는 동일하거나 또는 상이한 연산 코드들을 포함하고, 각각 동일하거나 상이한 패치에 관련되어 있으며, 상기 연산 코드와 상기 패치와의 관계는 헤더 내에 정의되어 있는 프로그램 코드 모듈 해결 방법.
  4. 제1항에 있어서, 상기 픽스 업 위치는 모듈 헤더 내에 있는 픽스 업 레퍼런스를 참조함으로써 상기 모듈 내에서 발견되는 프로그램 코드 모듈 해결 방법.
  5. 제1항에 있어서, 상기 컴퓨터 플랫폼은 픽스 업 연산 위치를 위한 적어도 하나의 패치를 포함하는 운영 시스템을 가지는 프로그램 코드 모듈 해결 방법.
  6. 제1항에 있어서, 제2 모듈이 상기 컴퓨터 플랫폼으로 미리 로드되어(preloaded) 남아 있거나, 상기 제1 모듈 애플리케이션의 초기화와 함께 미리 로드될 수 있는 프로그램 코드 모듈 해결 방법.
  7. 제1항에 있어서, 상기 제2 모듈은 상기 제1 모듈과 동일한 소스로부터 요구가 있을 때 로드되는 프로그램 코드 모듈 해결 방법.
  8. 제1항에 있어서, 상기 패치는 상기 메모리 위치에 직접 로드함으로써 상기 픽스 업 연산 위치 위에 중첩되는(superimposed) 프로그램 코드 모듈 해결 방법.
  9. 제1항에 있어서, 상기 패치는 동적 링크 라이브러리로부터 내보내지는(exported) 프로그램 코드 모듈 해결 방법.
  10. 제9항에 있어서, 상기 제1 모듈과 제2 모듈은 동적 링크 라이브러리 파일인 프로그램 코드 모듈 해결 방법.
  11. 제1항에 있어서, 상기 픽스 업 위치에서의 인스트럭션은 무연산(no operation) 인스트럭션이며, 뒤이은 연산에 대한 전위 연산(prefix operation)의 중첩 여부를 선택할 수 있는 프로그램 코드 모듈 해결 방법.
  12. 제11항에 있어서, 상기 전위 연산은 수정, 판독, 기록 인스트럭션 동안에 메모리에 다른 프로세서가 접근하지 못하도록 잠그는 역할을 하는 잠금(lock) 연산인 프로그램 코드 모듈 해결 방법.
  13. 제1항에 있어서, 상기 픽스 업 위치에서의 인스트럭션은 호출(call) 서브루틴 인스트럭션이며, 상기 패치가 상기 호출 서브루틴 인스트럭션을 취소시키는 프로그램 코드 모듈 해결 방법.
  14. 제1항에 있어서, 상기 픽스 업 위치는 구조에 대한 오프셋이며, 상기 패치가 상기 오프셋을 수정하는 프로그램 코드 모듈 해결 방법.
  15. 컴퓨터 플랫폼에서 프로그램 코드 모듈을 해결하는 운영 시스템을 기록한 컴퓨터로 판독가능한 기록 매체에 있어서, 상기 운영 시스템은
    제1 모듈을 메모리로 로드하는 수단으로서, 상기 제1 모듈은 명기된(specified) 연산 코드에 대한 상기 제1 모듈 내의 픽스 업 위치를 정의하고, 제2 모듈을 식별하는, 상기 제1 모듈 로드 수단과,
    상기 명기된 연산 코드에 대한 패치를 포함하는 상기 제2 모듈의 위치를 찾아내는 수단과,
    상기 제1 모듈의 픽스 업 위치에 상기 제2 모듈의 패치를 로드함으로써, 상기 명기된 연산 코드를 상기 패치로 수정하는 수단을 포함하는 기록 매체.
  16. 컴퓨터 플랫폼에 로드하기 위한 프로그램 모듈을 기록한 컴퓨터로 판독가능한 기록 매체에 있어서, 상기 프로그램 모듈은
    명기된 연산 코드에 대한 제1 모듈 내의 픽스 업 위치를 포함하고,
    상기 제1 모듈은 제2 모듈을 식별하고,
    상기 제2 모듈은 상기 명기된 연산 코드에 대한 패치를 포함하고,
    상기 제2 모듈의 패치는 상기 제1 모듈의 픽스 업 위치에 로드됨으로써 상기 패치로 상기 명기된 연산 코드를 수정할 수 있는 기록 매체.
  17. 컴퓨터 플랫폼에 로드하기 위한 응용 프로그램을 기록한 컴퓨터로 판독가능한 기록 매체에 있어서, 상기 응용 프로그램은 하나 이상의 프로그램 모듈을 포함하고, 상기 모듈은
    명기된 연산 코드에 대한 제1 모듈 내의 픽스 업 위치를 포함하고,
    상기 제1 모듈은 제2 모듈을 식별하고,
    상기 제2 모듈은 상기 명기된 연산 코드에 대한 패치를 포함하고,
    상기 제2 모듈의 패치는 상기 제1 모듈의 픽스 업 위치에 로드됨으로써 상기 패치로 상기 명기된 연산 코드를 수정할 수 있는 기록 매체.
KR10-2000-0020617A 1999-04-23 2000-04-19 응용 프로그램의 관리방법 KR100403983B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB9909274A GB2349485B (en) 1999-04-23 1999-04-23 Application management
GB9909274.4 1999-04-23

Publications (2)

Publication Number Publication Date
KR20010006995A KR20010006995A (ko) 2001-01-26
KR100403983B1 true KR100403983B1 (ko) 2003-11-03

Family

ID=10852066

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2000-0020617A KR100403983B1 (ko) 1999-04-23 2000-04-19 응용 프로그램의 관리방법

Country Status (4)

Country Link
US (1) US6718546B1 (ko)
JP (1) JP3962198B2 (ko)
KR (1) KR100403983B1 (ko)
GB (1) GB2349485B (ko)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US6966055B2 (en) * 2001-03-02 2005-11-15 International Business Machines Corporation Optimizing post-link code
US7757225B2 (en) * 2001-06-29 2010-07-13 Microsoft Corporation Linktime recognition of alternative implementations of programmed functionality
US9554268B2 (en) 2001-07-26 2017-01-24 Kyocera Corporation System and method for updating persistent data in a wireless communications device
US7143407B2 (en) 2001-07-26 2006-11-28 Kyocera Wireless Corp. System and method for executing wireless communications device dynamic instruction sets
US7027806B2 (en) 2001-07-26 2006-04-11 Kyocera Wireless, Corp. System and method for field downloading a wireless communications device software code section
US7184759B2 (en) 2001-07-26 2007-02-27 Kyocera Wireless Corp. Modular software components for wireless communication devices
US7159214B2 (en) 2001-07-26 2007-01-02 Kyocera Wireless Corp. System and method for compacting field upgradeable wireless communication device software code sections
US7386846B2 (en) 2001-07-26 2008-06-10 Kyocera Wireless Corp. System and method for the management of wireless communications device system software downloads in the field
US7184793B2 (en) 2001-07-26 2007-02-27 Kyocera Wireless Corp. System and method for over the air area code update
US7328007B2 (en) 2001-07-26 2008-02-05 Kyocera Wireless Corp. System and method for organizing wireless communication device system software
KR100940180B1 (ko) * 2001-07-26 2010-02-04 키오세라 와이어리스 코포레이션 무선 통신 장치의 업데이트 명령 실행 방법 및 시스템
US7254386B2 (en) 2001-08-10 2007-08-07 Kyocera Wireless Corp. System and method for improved security in handset reprovisioning and reprogramming
US6961537B2 (en) 2001-08-10 2005-11-01 Kyocera Wireless Corp. System and method for peer-to-peer handset communication
US20030056206A1 (en) * 2001-09-17 2003-03-20 Engo Frank Joseph Cross-barrier programming language
US7765284B2 (en) * 2002-10-24 2010-07-27 Hewlett-Packard Development Company, L.P. Dynamically modified, multiple-platform computer programs, and methods and apparatus utilizing same
US7359698B2 (en) 2003-09-08 2008-04-15 Kyocera Wireless Corp. Systems and methods for enhanced over-the-air programming
US7318226B2 (en) * 2003-10-16 2008-01-08 International Business Machines Corporation Distributed autonomic solutions repository
US7506241B2 (en) * 2003-10-16 2009-03-17 International Business Machines Corporation Method and apparatus for a self healing agent
KR100871778B1 (ko) * 2003-10-23 2008-12-05 이노패스 소프트웨어, 아이엔시. 중앙집중형 동적 어드레싱 매니저를 이용한 동적 어드레싱방법 및 장치
FR2871590B1 (fr) * 2004-06-15 2006-08-04 Gemplus Sa Procede de chargement d'un logiciel en langage intermediaire oriente objet dans un appareil portatif.
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
US7975256B2 (en) * 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining
US7516451B2 (en) 2004-08-31 2009-04-07 Innopath Software, Inc. Maintaining mobile device electronic files including using difference files when upgrading
US20070234345A1 (en) * 2006-02-22 2007-10-04 Microsoft Corporation Integrated multi-server installation
US7596615B2 (en) * 2006-02-22 2009-09-29 Microsoft Corporation Multi-server automated redundant service configuration
US7853945B2 (en) * 2006-02-22 2010-12-14 Michael Kramer Integrated computer server imaging
US7996830B2 (en) * 2006-06-05 2011-08-09 International Business Machines Corporation Programming model generic application deployment
US20080005728A1 (en) * 2006-06-30 2008-01-03 Robert Paul Morris Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment
US20080005727A1 (en) * 2006-06-30 2008-01-03 Robert Paul Morris Methods, systems, and computer program products for enabling cross language access to an addressable entity
US20090113403A1 (en) * 2007-09-27 2009-04-30 Microsoft Corporation Replacing no operations with auxiliary code
US9102962B2 (en) * 2007-10-16 2015-08-11 Shiu Nan Chen Production method for solid cultured active mushroom mycelium and fruit-body metabolites (AMFM) products thereof
FR2932905B1 (fr) * 2008-06-24 2010-08-27 Mobile Distillery Dispositif de configuration adaptative
US20100088690A1 (en) * 2008-10-03 2010-04-08 Microsoft Corporation Replacing the identity of an activex control
US20100088689A1 (en) * 2008-10-03 2010-04-08 Microsoft Corporation Branding binary modules using resource patching
US8683455B1 (en) 2011-01-12 2014-03-25 Google Inc. Method and system for optimizing an executable program by selectively merging identical program entities
US8689200B1 (en) * 2011-01-12 2014-04-01 Google Inc. Method and system for optimizing an executable program by generating special operations for identical program entities
CN102819439B (zh) * 2011-06-10 2017-09-29 中兴通讯股份有限公司 一种基于重定位的多制式应用程序的动态加载方法和装置
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US8615745B2 (en) * 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8789034B1 (en) * 2011-12-31 2014-07-22 Parallels IP Holdings GmbH Method for updating operating system without memory reset
US20140282461A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Concurrent patching of shared libraries
US11720374B1 (en) 2022-02-11 2023-08-08 Microsoft Technology Licensing, Llc Dynamically overriding a function based on a capability set
WO2023154092A1 (en) * 2022-02-11 2023-08-17 Microsoft Technology Licensing, Llc Dynamically overriding a function based on a capability set during load time

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02224122A (ja) * 1989-02-27 1990-09-06 Nec Corp メモリパッチデータのダイナミックリンク方式
JPH05189225A (ja) * 1992-01-13 1993-07-30 Kyushu Nippon Denki Software Kk パッチ修正装置
US5493674A (en) * 1992-10-23 1996-02-20 Sony Corporation Electronic apparatus
US5694566A (en) * 1993-02-12 1997-12-02 Fujitsu Limited Memory patching device
KR19980086597A (ko) * 1997-05-28 1998-12-05 제프리 엘. 포맨 논리적으로 구획화된 시스템의 논리 구획 매니저로의 병행 패치
KR19990010053A (ko) * 1997-07-14 1999-02-05 윤종용 급지장치

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6324326A (ja) * 1986-07-16 1988-02-01 Nec Corp パツチ登録方式
JPS6345636A (ja) * 1986-08-12 1988-02-26 Nec Corp プログラムロ−ド方式
US4831517A (en) * 1986-10-10 1989-05-16 International Business Machines Corporation Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system
JPS642139A (en) 1987-06-25 1989-01-06 Nec Corp Shared program utilizing system at program execution time
JPH04361328A (ja) * 1991-06-10 1992-12-14 Fujitsu Ltd 処理モード切り替え方式
JPH0546378A (ja) * 1991-08-12 1993-02-26 Fujitsu Ltd プログラムの修正処理方法
US5481713A (en) * 1993-05-06 1996-01-02 Apple Computer, Inc. Method and apparatus for patching code residing on a read only memory device
US5675803A (en) 1994-01-28 1997-10-07 Sun Microsystems, Inc. Method and apparatus for a fast debugger fix and continue operation
JP3437284B2 (ja) 1994-09-21 2003-08-18 株式会社エヌ・ティ・ティ・データ サ−ビス処理システム
US5699275A (en) * 1995-04-12 1997-12-16 Highwaymaster Communications, Inc. System and method for remote patching of operating code located in a mobile unit
US5619698A (en) * 1995-05-05 1997-04-08 Apple Computer, Inc. Method and apparatus for patching operating systems
US5790856A (en) * 1995-05-08 1998-08-04 Apple Computer, Inc. Methods, apparatus, and data structures for data driven computer patches and static analysis of same
JP4215286B2 (ja) 1995-05-18 2009-01-28 セイコーエプソン株式会社 記憶装置内容整理システムおよび記憶装置内容整理方法
US5796974A (en) * 1995-11-07 1998-08-18 Advanced Micro Devices, Inc. Microcode patching apparatus and method
FR2764716B1 (fr) * 1997-06-13 2001-08-17 Bull Cp8 Procede de modification de sequences de code et dispositif associe

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02224122A (ja) * 1989-02-27 1990-09-06 Nec Corp メモリパッチデータのダイナミックリンク方式
JPH05189225A (ja) * 1992-01-13 1993-07-30 Kyushu Nippon Denki Software Kk パッチ修正装置
US5493674A (en) * 1992-10-23 1996-02-20 Sony Corporation Electronic apparatus
US5694566A (en) * 1993-02-12 1997-12-02 Fujitsu Limited Memory patching device
KR19980086597A (ko) * 1997-05-28 1998-12-05 제프리 엘. 포맨 논리적으로 구획화된 시스템의 논리 구획 매니저로의 병행 패치
KR19990010053A (ko) * 1997-07-14 1999-02-05 윤종용 급지장치

Also Published As

Publication number Publication date
GB2349485B (en) 2003-12-10
KR20010006995A (ko) 2001-01-26
GB2349485A (en) 2000-11-01
GB9909274D0 (en) 1999-06-16
US6718546B1 (en) 2004-04-06
JP3962198B2 (ja) 2007-08-22
JP2000322251A (ja) 2000-11-24

Similar Documents

Publication Publication Date Title
KR100403983B1 (ko) 응용 프로그램의 관리방법
US5999732A (en) Techniques for reducing the cost of dynamic class initialization checks in compiled code
US7353504B2 (en) System and method for efficiently generating native code calls from byte code in virtual machines
US5574873A (en) Decoding guest instruction to directly access emulation routines that emulate the guest instructions
KR100466722B1 (ko) 어레이경계검사방법및장치와,이를포함하는컴퓨터시스템
US9063759B2 (en) Optimizing subroutine calls based on architecture level of called subroutine
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US6507946B2 (en) Process and system for Java virtual method invocation
KR100463810B1 (ko) 어드레스되는 구성요소의 물리적 특성에 관한 추측 실패를 검출하는 마이크로프로세서용 메모리 제어기
US6161217A (en) Accurate method for inlining virtual calls
US7412710B2 (en) System, method, and medium for efficiently obtaining the addresses of thread-local variables
US6934943B2 (en) Optimization of control transfers to dynamically loaded modules
JP2001504957A (ja) 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置
CN110088736B (zh) 自调试方法和系统
WO1994027214A1 (en) Method for decoding sequences of guest instructions for a host computer
JP2001519953A (ja) マイクロプロセッサの改良
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
WO2015049578A1 (en) System and method for run-time reloading of synthetically generated inner classes and methods
Popa Binary code disassembly for reverse engineering
US20040123308A1 (en) Hybird of implicit and explicit linkage of windows dynamic link labraries
US8291401B2 (en) Processing symbols associated with shared assemblies
KR100421687B1 (ko) 개선된 마이크로프로세서를 위한 변환 메모리 보호 장치
Markstedter Blue Fox: Arm Assembly Internals and Reverse Engineering
Bruening et al. Building Dynamic Tools with DynamoRIO on x86 and ARM
Krause et al. C for a tiny system

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: 20100824

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee