KR100727627B1 - 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템 - Google Patents

동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템 Download PDF

Info

Publication number
KR100727627B1
KR100727627B1 KR1020050108051A KR20050108051A KR100727627B1 KR 100727627 B1 KR100727627 B1 KR 100727627B1 KR 1020050108051 A KR1020050108051 A KR 1020050108051A KR 20050108051 A KR20050108051 A KR 20050108051A KR 100727627 B1 KR100727627 B1 KR 100727627B1
Authority
KR
South Korea
Prior art keywords
library
function
address value
dynamic
module
Prior art date
Application number
KR1020050108051A
Other languages
English (en)
Other versions
KR20070050625A (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 벨록스소프트(주)
Priority to KR1020050108051A priority Critical patent/KR100727627B1/ko
Publication of KR20070050625A publication Critical patent/KR20070050625A/ko
Application granted granted Critical
Publication of KR100727627B1 publication Critical patent/KR100727627B1/ko

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 동적링킹 지원방법에 관한 것으로서, 더욱 상세하게는 동적링킹을 지원하지 않는 운영체제 하에서 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는 방법 및 이를 수록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다. 본 발명에 따른 동적링킹 지원방법은 (1)복수의 어플리케이션 실행코드, 라이브러리 및 라이브러리 함수 테이블을 생성하는 단계; (2)스텁생성기가 라이브러리 스텁모듈과 라이브러리 초기화모듈을 생성하는 단계; (3)컴파일러가 어플리케이션 바이너리와 라이브러리 바이너리를 생성하는 단계; (4)상기 어플리케이션 바이너리를 실행하는 단계; (5)상기 어플리케이션을 실행하는 명령이 동적링킹 라이브러리를 필요로 하는 함수의 호출이면, 상기 라이브러리 스텁모듈을 실행하는 단계; (6)함수의 메모리 상 주소값을 요청하는 단계; (7)상기 동적링커가 호출된 함수를 포함하는 라이브러리 바이너리를 실행하는 단계; (8)라이브러리 초기화모듈이 실행되는 단계; (9)상기 함수의 목록과 주소값을 상기 동적링커가 참조하는 메모리 영역에 저장하는 단계; (10)상기 동적링커가 상기 함수의 주소값을 독출하여 라이브러리 스텁모듈로 반환하는 단계; 및 (11)상기 함수를 실행되는 단계;를 포함한다.
동적링킹, 라이브러리, 스텁, 운영체제

Description

동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는 방법 및 이를 이용한 시스템{Method for supporting application using dynamic linking library and system using the method}
본 명세서에 첨부되는 다음의 도면들은 본 발명의 바람직한 실시예를 예시하는 것이며, 후술하는 발명의 상세한 설명과 함께 본 발명의 기술사상을 더욱 이해시키는 역할을 하는 것이므로, 본 발명은 그러한 도면에 기재된 사항에만 한정되어 해석되어서는 아니된다.
도 1은 종래기술에 따른 동적링킹방식의 구성을 나타내는 개념도이다.
도 2는 본 발명의 바람직한 실시예에 따라 소스파일이 컴파일되는 과정을 도시한 개념도이다.
도 3은 본 발명의 바람직한 실시예에 따른 라이브러리 함수 테이블의 소스코드를 나타내는 도면이다.
도 4는 본 발명의 바람직한 실시예에 따른 라이브러리 초기화모듈의 소스코드를 나타내는 도면이다.
도 5는 본 발명의 바람직한 실시예에 따른 라이브러리 스텁모듈의 소스코드를 나타내는 도면이다.
도 6은 본 발명의 바람직한 실시예에 따른 동적링킹 지원방법의 구성을 나타 낸 개념도이다.
도 7은 본 발명의 바람직한 실시예에 따른 동적링커의 기능 블록도이다.
도 8은 본 발명의 바람직한 실시예에 따른 동적링킹 지원방법의 흐름을 나타내는 순서도이다.
도 9는 본 발명의 바람직한 실시예에 따른 어플리케이션 바이너리와 라이브러리 바이너리를 생성하는 세부 단계의 흐름을 도시하는 순서도이다.
본 발명은 동적링킹 지원방법 및 동적링킹 지원 시스템에 관한 것으로서, 더욱 상세하게는 동적링킹을 지원하지 않는 운영체제 하에서 스텁모듈을 이용하여 동적링킹을 지원하는 방법 및 이를 이용한 동적링킹 지원 시스템에 관한 것이다.
어플리케이션 프로그램의 각종 기능들은 소스코드 레벨에서 함수의 형태로 작성되고 실행된다. 함수의 실행방식은, 프로그램 실행에 필요한 각종 함수를 포함하고 있는 정적 라이브러리를 실행파일 자체에 포함시키는 정적링킹(Static linking)방식과, 프로그램 실행에 필요한 각종 함수를 별도로 라이브러리화하고, 프로그램 실행에 필요한 시점에서 외부의 라이브러리에서 함수를 호출하여 사용하는 동적링킹(Dynamic linking)방식으로 구분된다.
상기 정적링킹 방식은 복수의 어플리케이션에서 동일한 함수를 사용할 경우, 각각의 어플리케이션에 동일한 함수를 포함하게 된다. 예컨대, 복수의 어플리케이 션에서 printf나 scanf와 같은 함수를 사용한다고 가정하였을 때, 각각의 어플리케이션에는 printf나 scanf의 실행을 위한 모듈이 존재하게 된다. 따라서, 정적링킹방식은 동일한 함수의 실행을 위해 메모리의 소모가 과도하다는 문제가 있으며, 이러한 문제 때문에 정적링킹 방식보다는 동적링킹방식이 더 선호된다.
도 1은 종래기술에 따른 동적링킹을 지원하는 운영체제에서 동적링킹방식의 구성을 나타내는 개념도이다. 도 1을 참조하면, 종래기술에 따른 운영체제(20)는 동적링커(30)를 포함한다. 나아가, 동적링커(30)는 라이브러리(D10)의 함수 저장정보를 포함하는 라이브러리 링크리스트DB(31) 및 이(라이브러리 링크리스트DB(31))를 관리하는 라이브러리 관리부(32)를 구비한다.
동적링킹을 지원하는 운영체제 하에서 동적링커(30)의 동작을 살펴보면, 우선, 컴파일 과정에서 라이브러리 바이너리(예컨대, MS(Microsoft) 윈도우 시리즈 운영체제의 DLL, UNIX/LINUX 운영체제의 shared library)에는 라이브러리에 포함되는 함수의 목록이 수록되고, 어플리케이션 바이너리에는 어플리케이션 실행에 필요한 함수를 요청하여 반환받기 위한 정보가 수록된다. 그리고, 컴파일된 라이브러리 바이너리 및 어플리케이션 바이너리는 저장매체(10)에 저장된다.
운영체제(20)의 메모리에 라이브러리(D10)가 로드되면, 동적링커(30)의 라이브러리 관리부(32)는 라이브러리(D10)의 함수 목록을 라이브러리 링크리스트DB(31)에 등록한다.
한편, 어플리케이션(D21, D22, D23)이 실행되면, 어플리케이션(D21, D22, D23)은 동적링커(20)를 호출하여 명령실행에 필요한 함수를 요청한다.
이에 따라, 라이브러리 관리부(32)는 라이브러리 링크리스트DB(31)를 검색하여 어플리케이션(D21, D22, D23)에서 요청하는 함수가 존재하는 지를 확인하고, 함수의 주소값을 반환한다. 만약, 라이브러리 링크리스트DB(31)에 어플리케이션(D21, D22, D23)에서 요청하는 함수가 존재하지 않을 경우, 라이브러리 관리부(31)는 라이브러리가 저장된 저장매체(10)로부터 상기 함수를 포함하는 라이브러리를 운영체제 상의 메모리로 읽어들인다.
전술한 동적링킹방식은 복수의 어플리케이션에서 공통적으로 사용하는 함수를 공유할 수 있으므로 어플리케이션 바이너리의 크기를 감소시킬 수 있는 장점이 있다.
그러나, 전술한 동적링킹방식은 운영체제가 동적링커를 포함하고 있는 경우에 한하여 구현이 가능하다. 따라서, 동적링킹을 지원하지 않는 컴파일러와 운영체제를 사용하는 환경에서는 동적링킹방식을 적용할 수 없다는 한계가 있다.
본 발명은 상술한 종래기술의 문제를 해결하기 위하여 창안된 것으로서, 컴파일러와 운영체제가 동적링킹을 지원하지 않는 소규모의 내장형 시스템에서 컴파일러와 운영체제의 변경이나 수정없이 동적링킹을 지원하는 방법 및 이를 이용한 동적링킹 지원 시스템을 제공하는데 그 목적이 있다.
또한, 본 발명은 라이브러리 함수가 호출되면 함수의 메모리 상 참조주소를 라이브러리 스텁모듈에 수록하여 차후의 함수 호출시에는 어플리케이션 레벨에서 직접적으로 함수에 접근할 수 있는 방법 및 이를 이용한 동적링킹 지원 시스템을 제공하는데 또 다른 목적이 있다.
상기와 같은 목적을 달성하기 위하여 본 발명의 일 측면에 따른 동적링킹 지원방법은 동적링크를 지원하지 않는 시스템 운영환경에서 동적링킹 라이브러리를 사용하는 어플리케이션의 실행을 지원하는 방법에 있어서, (1)복수의 어플리케이션 실행코드, 상기 어플리케이션 실행에 필요한 라이브러리 및 상기 라이브러리 내에 저장된 함수의 목록을 나열한 라이브러리 함수 테이블을 생성하는 단계; (2)스텁생성기가 상기 라이브러리 함수 테이블을 입력받아 라이브러리 스텁모듈 및 라이브러리 초기화모듈을 생성하는 단계; (3)컴파일러가 상기 어플리케이션 실행코드와 상기 라이브러리 스텁모듈을 입력받아 어플리케이션 바이너리를 생성하고, 상기 동적링킹 라이브러리와 라이브러리 초기화모듈을 입력받아 라이브러리 바이너리를 생성하는 단계; (4)어플리케이션 실행요청에 따라 상기 어플리케이션 바이너리를 읽어들여 실행하는 단계; (5)상기 어플리케이션을 실행하는 명령이 동적링킹 라이브러리를 필요로 하는 함수의 호출이면, 상기 라이브러리 스텁모듈을 실행하는 단계; (6)상기 라이브러리 스텁모듈이 동적링커를 호출하여 함수의 메모리 상 주소값을 요청하는 단계; (7)상기 동적링커가 호출된 함수를 포함하는 라이브러리 바이너리를 실행하는 단계; (8)상기 라이브러리 바이너리가 실행됨에 따라 라이브러리 초기화모듈이 실행되는 단계; (9)상기 라이브러리 초기화모듈이 라이브러리에 포함된 함수의 목록과 주소값을 상기 동적링커가 참조하는 메모리 영역에 저장하는 단계; (10)상기 동적링커가 상기 메모리 영역을 참조하여 호출된 함수의 주소값을 독출한 후 라이브러리 스텁모듈로 반환하는 단계; 및 (11)반환된 함수의 주소값에 기해 해당하는 함수가 실행되는 단계;를 포함한다.
바람직하게, 상기 (7)단계에 앞서, 상기 동적링커가 메모리 영역에 호출된 함수의 주소값이 수록되어 있는지 판단하는 단계; 및 함수의 주소값이 있으면, 상기 동적링커가 해당함수의 주소값을 독출하여 라이브러리 스텁모듈로 반환하는 단계;를 더 진행할 수 있다.
상기 라이브러리 바이너리는 함수의 주소값을 상기 라이브러리 스텁모듈로 요청하여 반환받은 후 해당 주소값을 참조하여 함수를 실행하는 스텁호출함수를 포함하는 것이 바람직하다.
또한, 상기 라이브러리 스텁모듈이 동적링커로부터 반환받은 함수의 주소값을 미리 정해진 메모리 영역에 수록하는 단계;를 더 포함하여 진행하고, 상기 (6) 단계를 진행하기에 앞서, 라이브러리 스텁모듈이 호출된 함수의 주소값이 상기 미리 정해진 메모리 영역에 수록되어 있는지를 판단하는 단계; 및 판단결과 함수의 주소값이 수록되어 있으면, 라이브러리 스텁모듈이 동적링커를 호출하지 않고 수록된 함수의 주소값을 직접적으로 참조하는 단계;를 포함하는 것이 바람직하다.
본 발명의 다른 측면에 따른 동적링킹 지원 시스템은 라이브러리 코드와 스텁생성기에 의해 생성된 라이브러리 초기화모듈이 통합되어 컴파일된 라이브러리 바이너리 및 어플리케이션 코드와 스텁생성기에 의해 생성된 라이브러리 스텁모듈이 통합되어 컴파일된 어플리케이션 바이너리를 저장하는 저장매체; 상기 저장매체로부터 상기 어플리케이션 바이너리와 상기 라이브러리 바이너리를 메모리에 로드 하는 운영체제; 및 상기 어플리케이션 바이너리에 포함된 라이브러리 스텁모듈로부터 동적링킹의 대상이 되는 라이브러리의 함수를 호출받아 상기 함수의 주소값이 메모리에 존재하는 지를 확인하고, 메모리에 함수의 주소값이 존재하지 않을 경우, 해당 라이브러리를 메모리로 로드하여 라이브러리 바이너리에 포함된 라이브러리 초기화모듈로부터 함수의 목록 및 각 함수의 메모리 상 주소값을 획득한 후 호출된 함수의 주소값을 상기 라이브러리 스텁모듈로 반환하고, 메모리에 함수의 주소값이 존재하면 해당함수의 주소값을 상기 라이브러리 스텁모듈로 반환하는 동적링커;를 포함한다.
상기 라이브러리 스텁모듈은 상기 동적링커로부터 함수의 주소값을 반환받으면 자신이 별도로 참조하는 메모리 영역에 반환받은 함수의 주소값을 저장하는 것이 바람직하다.
상기 동적링커는 라이브러리에 저장된 함수의 함수명 및 함수저장영역의 주소값이 적재된 링크리스트DB; 상기 링크리스트DB에 저장된 함수를 검색하는 링크리스트 검색부; 상기 링크리스트 검색부에 의해 검색된 함수의 주소값을 라이브러리 스텁모듈로 반환하는 함수 주소값 반환 처리부; 및 상기 링크리스트DB, 링크리스트 검색부, 및 함수 주소값 반환 처리부를 관리하는 라이브러리 관리부;를 포함한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다. 이에 앞서, 본 명세서 및 청구범위에 사용된 용어나 단어는 통상적이거나 사전적인 의미로 한정해서 해석되어서는 아니되며, 발명자는 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원 칙에 입각하여 본 발명의 기술적 사상에 부합하는 의미와 개념으로 해석되어야만 한다. 따라서, 본 명세서에 기재된 실시예와 도면에 도시된 구성은 본 발명의 가장 바람직한 일 실시예에 불과할 뿐이고 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형예들이 있을 수 있음을 이해하여야 한다.
도 2는 본 발명의 바람직한 실시예에 따라 소스파일이 컴파일되는 과정을 도시한 개념도이다.
도 2를 참조하면, 본 발명에 따른 동적링킹 지원 시스템은 동적링킹 지원 프로그램에 적용가능한 어플리케이션 바이너리(D310)와 라이브러리 바이너리(D210)를 생성하기 위한 스텁생성기(100) 및 컴파일러(200)를 포함한다.
스텁생성기(100)는 라이브러리에 수록된 함수의 목록으로 구성된 라이브러리 함수 테이블(D100)을 입력받아 라이브러리 초기화모듈(D110)과 라이브러리 스텁모듈(D120)를 생성한다.
도 3은 본 발명의 바람직한 실시예에 따른 라이브러리 함수 테이블(D100)의 소스코드를 나타내는 도면이고, 도 4는 본 발명의 바람직한 실시예에 따른 라이브러리 초기화모듈(D110)의 소스코드를 나타내는 도면이고, 도 5는 본 발명의 바람직한 실시예에 따른 라이브러리 스텁모듈(D120)의 소스코드를 나타내는 도면이다.
본 발명의 실시예에 따라 제시되는 소스코드는 본 발명의 기술적 사상을 뒷받침하기 위하여 예시되는 것으로서, 본 발명이 이에 한정되는 것은 아니며, 상기 라이브러리 함수 테이블은 라이브러리에 수록된 함수들의 목록을 포함할 수 있는 데이터 구조라면, 어떠한 형태도 가능하다. 또한, 스텁생성기(100)를 통해 생성되는 상기 라이브러리 초기화모듈은 라이브러리가 메모리에 로딩되는 과정에서 상기 라이브러리 함수 테이블을 메모리에 적재할 수 있는 코드를 포함하면 충분하다. 마찬가지로, 스텁생성기(100)를 통해 생성되는 상기 라이브러리 스텁모듈은 어플리케이션의 실행과정에서 상기 라이브러리 함수 테이블에 포함된 함수가 호출되었을 경우 동적링커를 통해 해당 함수의 메모리 상 주소를 넘겨받을 수 있는 코드를 포함하면 충분하다.
도 3 내지 도 5를 참조하면, 라이브러리 함수 테이블(D100)은 라이브러리 내에 포함된 동적링킹의 대상이 되는 함수의 목록(예컨대, 함수명, 식별번호)을 포함한다. 라이브러리 초기화모듈(D110)은 라이브러리가 메모리에 로딩되는 과정에서 상기 라이브러리 함수 테이블을 동적링커가 참조하는 메모리 영역에 적재한다. 라이브러리 스텁모듈(D120)은 어플리케이션의 실행과정에서 동적링킹의 대상이 되는 라이브러리의 함수가 호출되었을 경우 실행되며, 동적링커를 통해 해당함수가 수록된 메모리의 주소값을 넘겨받아 어플리케이션으로 전달함으로써 어플리케이션이 해당 함수를 실행할 수 있도록 한다.
도 6은 본 발명의 바람직한 실시예에 따른 동적링킹 지원 시스템의 구성도이다. 도 6을 참조하면, 본 발명의 실시예에 따른 동적링킹 지원 시스템은 저장매체(300), 운영체제(OS;400) 및 동적링커(500)를 포함한다.
저장매체(300)는 컴파일된 상기 라이브러리 바이너리(D210) 및 어플리케이션 바이너리(D310, D320, D330)를 저장한다.
운영체제(400)는 예컨대, REX와 같은 동적링킹을 지원하지 않는 운영체제로서, 어플리케이션 바이너리리(D310, D320, D330) 또는 라이브러리 바이너리(D210)를 저장매체(300)로부터 메모리로 로드한다.
동적링커(500)에는 상기 메모리에 로드된 라이브러리의 함수목록이 적재된 DB가 별도로 구비된다. 동적링커(500)는 어플리케이션 바이너리(D310, D320, D330)에 포함되는 라이브러리 스텁모듈(D120)의 요청에 따라, 어플리케이션 바이너리(D310, D320, D330)의 실행에 필요한 함수를 상기 DB로부터 검색하고, 검색된 함수 주소값을 라이브러리 스텁모듈로 반환한다. 만약, 상기 DB에 상기 함수(어플리케이션 바이너리(D310, D320, D330)의 실행에 필요한 함수)가 존재하지 않을 경우, 동적링커(500)는 저장매체(300)에 수록된 해당하는 라이브러리 바이너리(D210)를 상기 메모리로 로딩한다. 이때, 라이브러리(D210)에 포함된 라이브러리 초기화모듈이 실행된다. 라이브러리 초기화모듈은 라이브러리 바이너리(D210)에 포함된 함수의 목록과 메모리 상의 주소값을 상기 DB에 등록한다. 라이브러리 초기화모듈에 의해 함수의 주소값이 상기 DB에 등록되면, 동적링커(500)는 DB로부터 해당 함수의 주소값을 독출하여 라이브러리 스텁모듈로 반환한다.
도 7은 본 발명의 바람직한 실시예에 따른 동적링커(500)의 기능 블록도이다. 도 7을 참조하면, 본 발명의 실시예에 따른 동적링커(500)는 라이브러리 관리부(510), 링크리스트 DB(520), 링크리스트 검색부(530), 및 함수 주소값 반환 처리부(540)를 포함한다.
라이브러리 관리부(510)는 메모리에 로드된 라이브러리 스텁모듈(D120)로부 터 함수 호출을 요청받아 링크리스트 검색부(530)에 상기 함수의 검색을 요청하고, 그 결과를 반환받는다. 라이브러리 관리부(510)가 링크리스트 검색부(530)로부터 상기 함수의 함수 주소값을 반환받은 경우, 라이브러리 관리부(510)는 함수 주소값 반환처리부(540)를 통해 상기 함수 주소값을 라이브러리 스텁모듈(D120)로 반환한다. 반면, 링크리스트DB(520)에 상기 함수가 존재하지 않는 경우, 저장매체(300)로부터 해당하는 라이브러리 바이너리(D210)를 메모리로 로딩한다. 그러면, 라이브러리 바이너리(D210)가 로드되는 과정에서 라이브러리 바이너리(D210)에 포함된 라이브러리 초기화모듈이 실행된다. 그리고 실행된 라이브러리 초기화모듈은 라이브러리 바이너리(D210)에 포함된 함수의 목록과 메모리 상의 주소값을 링크리스트 DB(520)에 적재한다. 그러면, 링크리스트 검색부(530)는 링크리스트DB(520)로부터 해당하는 함수의 주소값을 독출하여 라이브러리 관리부(510)로 반환한다.
함수 주소값 반환 처리부(540)는 라이브러리 관리부(510)의 호출을 통해 실행되며, 링크리스트 검색부(530)를 통해 검색된 함수의 주소값을 라이브러리 스텁모듈(D120)로 반환한다.
이하, 전술한 동적링킹 지원 시스템의 구성을 참조하여 동적링킹 지원 시스템의 작동에 대하여 설명한다.
우선, 컴파일 과정에서 스텁생성기(도 2, 100)는 라이브러리 초기화모듈(도 2, D110)과 라이브러리 스텁모듈(도 2, D120)을 생성하고, 컴파일러(도 2, 200)는 라이브러리 바이너리(도 2, D210)와 어플리케이션 바이너리(도 2, D310)를 생성한다. 이때, 라이브러리 초기화모듈(D110)은 라이브러리 바이너리(D210)에, 라이브러 리 스텁모듈(D120)은 어플리케이션 바이너리(D310)에 포함된다. 생성된 라이브러리 바이너리(D210)와 어플리케이션 바이너리(D310)는 저장매체(도 2, 300)에 적재된다.
운영체제(도 6, 400)가 어플리케이션 바이너리(도 6; D310, D320, D330)의 실행을 명령함에 따라, 어플리케이션 바이너리((D310, D320, D330))가 메모리로 로드되고, 어플리케이션 바이너리((D310, D320, D330))에 수록된 명령코드가 실행된다. 명령코드의 실행시 동적링킹의 대상이 되는 라이브러리의 함수(예컨대, "A"함수)가 호출되는 경우, 스텁호출함수가 실행된다.
스텁호출함수는 어플리케이션 바이너리((D310, D320, D330))에 수록된 라이브러리 스텁모듈을 호출하여 실행하고, 라이브러리 스텁모듈이 함수의 주소값을 반환하는 경우 주소값을 참조하여 해당 함수를 실행하는 기능을 수행한다.
스텁호출함수의 실행으로 라이브러리 스텁모듈이 호출되고, 호출된 라이브러리 스텁모듈은 동적링커에 상기 명령코드의 실행에 필요한 상기 함수(예컨대, "A" 함수)가 적재된 메모리의 주소값을 요청한다.
이에 따라, 우선, 동적링커의 라이브러리 관리부(도 7, 510)는 링크리스트 검색부(도 7, 530)를 호출한다. 그러면, 링크리스트 검색부(530)는 링크리스트DB(도 7, 520)에 상기 함수(예컨대, "A" 함수)가 존재하는지를 확인한다. 만약, 링크리스트DB(520)에 상기 함수(예컨대, "A" 함수)가 존재하지 않을 경우, 라이브러리 관리부(510)는 상기 함수(예컨대, "A" 함수)를 수록한 해당하는 라이브러리 바이너리(도 6, D210)를 메모리로 로딩한다. 이때, 라이브러리 바이너리에 포함된 라이브 러리 초기화모듈이 실행되고, 라이브러리 바이너리에 포함된 함수의 목록과 메모리 상의 주소값은 링크리스트DB(520)에 적재된다.
반면, 링크리스트DB(520)에 상기 함수(예컨대, "A" 함수)가 존재할 경우, 링크리스트 검색부(520)는 상기 함수(예컨대, "A" 함수)의 주소값을 라이브러리 관리부(510)에 반환한다. 라이브러리 관리부(510)는 상기 함수(예컨대, "A" 함수)의 주소값을 반환받음에 따라, 함수 주소값 반환 처리부(도 7, 550)를 호출한다.
함수 주소값 반환 처리부(540)가 실행되면, 상기 함수(예컨대, "A" 함수)의 주소값은 라이브러리 스텁모듈로 반환된다. 이때, 라이브러리 스텁모듈은 반환받은 상기 함수(예컨대, "A" 함수)의 주소값을 스텁호출함수로 반환한다. 아울러, 라이브러리 스텁모듈에 할당된 메모리에, 반환받은 상기 함수(예컨대, "A" 함수)의 주소값을 별도로 적재한다. 따라서, 동일한 어플리케이션 실행시 적어도 한번 이상 호출된 함수에 대한 주소값은 라이브러리 스텁모듈에 적재되어 차후의 함수 호출시에는 라이브러리 스텁모듈에서 기 적재된 함수의 주소값을 직접 참조할 수 있게된다.
도 8은 본 발명의 바람직한 실시예에 따른 동적링킹 지원방법의 흐름을 나타내는 순서도 이고, 도 9는 본 발명의 바람직한 실시예에 따른 어플리케이션 바이너리와 라이브러리 바이너리를 생성하는 세부 단계의 흐름을 도시하는 순서도 이다.
도 8을 참조하면, 본 발명에 따른 동적링커 지원방법은 대략적으로 어플리케이션 바이너리와 라이브러리 바이너리를 생성하여 어플리케이션 실행을 준비하는 단계(S100), 어플리케이션을 실행하는 단계(S200) 및 어플리케이션 실행에 따른 명 령코드를 실행하는 단계(S300)를 포함한다.
도 9를 참조하면, 단계 S100에서는, 프로그램 설계자에 의하여 어플리케이션 실행코드, 라이브러리 코드 및 라이브러리 함수 테이블이 생성된다(S110). 생성된 라이브러리 함수 테이블은 스텁생성기에 입력되고, 상기 스텁생성기에 입력된 라이브러리 함수 테이블은 라이브러리 초기화모듈과 라이브러리 스텁모듈로 변환된다(S120). 다음으로, 컴파일러가 상기 라이브러리 코드와 라이브러리 초기화모듈을 입력받아 조합/컴파일하여 라이브러리 바이너리를 생성하고, 상기 어플리케이션 실행코드와 상기 라이브러리 스텁모듈을 입력받아 조합/컴파일하여 어플리케이션 바이너리를 생성한다(S130).
어플리케이션을 실행하는 단계 S200에서는 명령코드의 실행에 앞서 동적링킹 라이브러리를 필요로 하는 명령코드 인지 아닌지를 판단한다. 만약, 상기 명령코드가 동적링킹 라이브러리를 필요로 하지 않는 명령코드이면, 상기 명령코드를 실행한다(S300).
반면, 상기 명령코드가 동적링킹 라이브러리를 필요로 하는 명령코드이면, 스텁호출함수와 라이브러리 스텁모듈을 통해 동적링커를 호출한다(S210). 우선, 호출된 상기 동적링커는 명령코드의 실행에 필요한 함수를 포함하는 라이브러리가 메모리에 적재되었는지를 검색한다(S220).
한편, 라이브러리가 저장매체로부터 운영체제의 메모리로 로드될 때, 상기 동적링커에 라이브러리에 포함되는 함수의 목록과 메모리 상의 주소값은 동적링커가 참조하는 메모리의 링크리스트DB에 저장된다. 따라서, 상기 동적링커는 상기 링 크리스트 DB의 함수 정보를 검색함으로써, 어플리케이션 실행에 필요한 함수를 포함하는 상기 라이브러리가 운영체제의 메모리에 존재하는지를 확인할 수 있다.
링크리스트DB를 검색하여 상기 함수가 검색되면, 동적링커는 상기 함수의 주소값을 라이브러리 스텁모듈에 반환(S230)하고, 어플리케이션은 반환된 상기 함수의 주소값을 참조(S250)하여 상기 명령코드를 실행(S300)한다.
여기서, 함수의 주소값을 참조로 한 함수의 실행과는 별도로, 라이브러리 스텁모듈이 참조하는 메모리 영역에 상기 함수의 주소값을 수록(S240)해 두는 것이 바람직하다. 그러면, 상기 어플리케이션의 실행시 동일한 함수가 호출될 경우, 라이브러리 스텁모듈은 동적링커의 호출없이 메모리에 수록된 함수의 주소값을 직접 참조할 수 있다.
반면, 링크리스트DB를 검색하여 상기 함수가 검색되지 않으면, 동적링커는 저장매체의 라이브러리 바이너리를 운영체제의 메모리로 로드한다(S221). 이때, 상기 라이브러리 바이너리에 포함된 라이브러리 초기화모듈이 실행된다(S222). 상기 라이브러리 초기화모듈의 실행으로 라이브러리에 포함되는 함수의 저장정보는 링크리스트에 등록(S223)된다.
이상에서 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 이것에 의해 한정되지 않으며 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 본 발명의 기술사상과 아래에 기재될 특허청구범위의 균등범위 내에서 다양한 수정 및 변형이 가능함은 물론이다
본 발명에 따르면, 동적링킹을 지원하지 않는 운영체제 하에서 동적링킹을 이용하는 어플리케이션의 실행을 지원할 수 있다.
또한, 어플리케이션에서 최초에 호출된 함수의 주소값을 라이브러리 스텁모듈이 참조하는 메모리 영역에 저장하여 둠으로써, 한번 호출했던 함수를 재호출할 때, 동적링커의 호출없이 상기 함수가 저장된 메모리에 직접 접근할 수 있다.
또한, 용량이 적은 시스템 상에서 소용량의 운영체제와 동적링커를 이용함으로써, 메모리의 불필요한 사용을 최소화하여 메모리를 효율적으로 사용할 수 있다.

Claims (7)

  1. 동적링크를 지원하지 않는 시스템 운영환경에서 동적링킹 라이브러리를 사용하는 어플리케이션의 실행을 지원하는 방법에 있어서,
    (1)복수의 어플리케이션 실행코드, 상기 어플리케이션 실행에 필요한 라이브러리 및 상기 라이브러리 내에 저장된 함수의 목록을 나열한 라이브러리 함수 테이블을 생성하는 단계;
    (2)스텁생성기가 상기 라이브러리 함수 테이블을 입력받아 라이브러리 스텁모듈 및 라이브러리 초기화모듈을 생성하는 단계;
    (3)컴파일러가 상기 어플리케이션 실행코드와 상기 라이브러리 스텁모듈을 입력받아 어플리케이션 바이너리를 생성하고, 상기 동적링킹 라이브러리와 라이브러리 초기화모듈을 입력받아 라이브러리 바이너리를 생성하는 단계;
    (4)어플리케이션 실행요청에 따라 상기 어플리케이션 바이너리를 읽어들여 실행하는 단계;
    (5)상기 어플리케이션을 실행하는 명령이 동적링킹 라이브러리를 필요로 하는 함수의 호출이면, 상기 라이브러리 스텁모듈을 실행하는 단계;
    (6)상기 라이브러리 스텁모듈이 동적링커를 호출하여 함수의 메모리 상 주소값을 요청하는 단계;
    (7)상기 동적링커가 호출된 함수를 포함하는 라이브러리 바이너리를 실행하는 단계;
    (8)상기 라이브러리 바이너리가 실행됨에 따라 라이브러리 초기화모듈이 실행되는 단계;
    (9)상기 라이브러리 초기화모듈이 라이브러리에 포함된 함수의 목록과 주소값을 상기 동적링커가 참조하는 메모리 영역에 저장하는 단계;
    (10)상기 동적링커가 상기 메모리 영역을 참조하여 호출된 함수의 주소값을 독출한 후 라이브러리 스텁모듈로 반환하는 단계; 및
    (11)반환된 함수의 주소값에 기해 해당하는 함수가 실행되는 단계;를 포함하는 것을 특징으로 하는 동적링킹 지원방법.
  2. 제 1항에 있어서,
    상기 (7)단계에 앞서,
    상기 동적 링커가 메모리 영역에 호출된 함수의 주소값이 수록되어 있는지 확인하고,
    함수의 주소값이 있으면, 상기 (7) 내지 (10)단계를 생략하고, 상기 동적링커가 확인된 함수의 주소값을 독출하여 라이브러리 스텁모듈로 반환하는 단계를 진행하는 것을 특징으로 하는 동적링킹 지원방법.
  3. 제 1항 또는 제 2항에 있어서,
    상기 라이브러리 바이너리는 상기 (10)단계에서 반환된 함수의 주소값을 상기 라이브러리 스텁모듈로부터 전달받아 상기 함수의 주소값을 참조하여 해당 함수를 실행하는 스텁호출함수를 포함하는 것을 특징으로하는 동적링킹 지원방법.
  4. 제 1항에 있어서,
    상기 라이브러리 스텁모듈이 동적링커로부터 반환받은 함수의 주소값을 미리 정해진 메모리 영역에 수록하는 단계;를 더 포함하여 진행하고,
    상기 (6) 단계를 진행하기에 앞서,
    라이브러리 스텁모듈이 호출된 함수의 주소값이 상기 미리 정해진 메모리 영역에 수록되어 있는지를 판단하고, 판단결과 함수의 주소값이 수록되어 있으면, 상기 (6) 내지 (10)단계를 수행하지 않고, 라이브러리 스텁모듈이 동적링커의 호출없이 수록된 함수의 주소값을 직접적으로 참조하는 단계;를 수행하는 것을 특징으로 하는 동적링킹 지원방법.
  5. 라이브러리 코드와 스텁생성기에 의해 생성된 라이브러리 초기화모듈이 통합되어 컴파일된 라이브러리 바이너리 및 어플리케이션 코드와 스텁생성기에 의해 생성된 라이브러리 스텁모듈이 통합되어 컴파일된 어플리케이션 바이너리를 저장하는 저장매체;
    상기 저장매체로부터 상기 어플리케이션 바이너리와 상기 라이브러리 바이너리를 메모리에 로드하는 운영체제; 및
    상기 어플리케이션 바이너리에 포함된 라이브러리 스텁모듈로부터 동적링킹의 대상이 되는 라이브러리의 함수를 호출받아 상기 함수의 주소값이 메모리에 존재하는 지를 확인하고,
    메모리에 함수의 주소값이 존재하지 않을 경우, 해당 라이브러리를 메모리로 로드하여 라이브러리 바이너리에 포함된 라이브러리 초기화모듈로부터 함수의 목록 및 각 함수의 메모리 상 주소값을 획득한 후 호출된 함수의 주소값을 상기 라이브러리 스텁모듈로 반환하고,
    메모리에 함수의 주소값이 존재하면 해당함수의 주소값을 상기 라이브러리 스텁모듈로 반환하는 동적링커;를 포함하는 것을 특징으로 하는 동적링킹 지원 시스템.
  6. 제 5항에 있어서,
    상기 라이브러리 스텁모듈은 상기 동적링커로부터 함수의 주소값을 반환받으면 자신이 별도로 참조하는 메모리 영역에 반환받은 함수의 주소값을 저장하는 것을 특징으로 하는 것을 특징으로 하는 동적링킹 지원 시스템.
  7. 제 5항에 있어서, 상기 동적링커는
    라이브러리에 저장된 함수의 함수명 및 함수저장영역의 주소값이 적재된 링크리스트DB;
    상기 링크리스트DB에 저장된 함수를 검색하는 링크리스트 검색부;
    상기 링크리스트 검색부에 의해 검색된 함수의 주소값을 라이브러리 스텁모듈로 반환하는 함수 주소값 반환 처리부; 및
    상기 링크리스트DB, 링크리스트 검색부, 및 함수 주소값 반환 처리부를 관리 하는 라이브러리 관리부;를 포함하는 것을 특징으로 하는 동적링킹 지원 시스템.
KR1020050108051A 2005-11-11 2005-11-11 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템 KR100727627B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020050108051A KR100727627B1 (ko) 2005-11-11 2005-11-11 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050108051A KR100727627B1 (ko) 2005-11-11 2005-11-11 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템

Publications (2)

Publication Number Publication Date
KR20070050625A KR20070050625A (ko) 2007-05-16
KR100727627B1 true KR100727627B1 (ko) 2007-06-13

Family

ID=38274099

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050108051A KR100727627B1 (ko) 2005-11-11 2005-11-11 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템

Country Status (1)

Country Link
KR (1) KR100727627B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101273914B1 (ko) * 2006-10-31 2013-06-12 에스케이플래닛 주식회사 플랫폼 라이브러리 다이나믹 링킹기능이구비된 단말장비 및 그 제어방법
KR101991687B1 (ko) 2012-11-23 2019-06-24 삼성전자 주식회사 동적 라이브러리 프로파일링 방법, 이를 기록한 컴퓨터로 읽을 수 있는 기록 매체 및 동적 라이브러리 프로파일링 시스템

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5659751A (en) 1990-01-05 1997-08-19 Apple Computer, Inc. Apparatus and method for dynamic linking of computer software components
KR19990042699A (ko) * 1997-11-27 1999-06-15 이계철 칠-96을 위한 객체지향/함수형 혼합형 라이브러리의 생성 방법
KR20040048246A (ko) * 2002-12-02 2004-06-07 삼성전자주식회사 자바 실행 장치 및 자바 실행 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5659751A (en) 1990-01-05 1997-08-19 Apple Computer, Inc. Apparatus and method for dynamic linking of computer software components
KR19990042699A (ko) * 1997-11-27 1999-06-15 이계철 칠-96을 위한 객체지향/함수형 혼합형 라이브러리의 생성 방법
KR20040048246A (ko) * 2002-12-02 2004-06-07 삼성전자주식회사 자바 실행 장치 및 자바 실행 방법

Also Published As

Publication number Publication date
KR20070050625A (ko) 2007-05-16

Similar Documents

Publication Publication Date Title
US6876996B2 (en) Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
US8612930B2 (en) Methods and apparatus for dynamic class reloading and versioning
US5708811A (en) System and method for lazy loading of shared libraries
US5774722A (en) Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems
US5634058A (en) Dynamically configurable kernel
US10089119B2 (en) API namespace virtualization
US5414854A (en) Object-oriental system for managing shared libraries
US6112025A (en) System and method for dynamic program linking
US7805582B2 (en) Method of managing memory in multiprocessor system on chip
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
US20080320282A1 (en) Method And Systems For Providing Transaction Support For Executable Program Components
JP2006092544A (ja) プリオペレーティングシステム環境におけるモジュールの動的リンク
US7162626B2 (en) Use of common language infrastructure for sharing drivers and executable content across execution environments
JP2005509194A (ja) プレインターナライズ済プログラムファイルの作成及び使用のための方法並びに装置
KR101059633B1 (ko) 멀티태스킹 가상 머신을 위한 힙 구성
US7426720B1 (en) System and method for dynamic preloading of classes through memory space cloning of a master runtime system process
US20040083467A1 (en) System and method for executing intermediate code
JPH06290056A (ja) 異なるコンピュータ上でのソフトウェアの実行を最適化するための方法および装置
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
US7065676B1 (en) Multi-threaded memory management test system with feedback to adjust input parameters in response to performance
KR100727627B1 (ko) 동적링킹 라이브러리를 사용하는 어플리케이션을 지원하는방법 및 이를 이용한 시스템
US7194736B2 (en) Dynamic division optimization for a just-in-time compiler
US20070245328A1 (en) Method of calling a method in virtual machine environment and system including a virtual machine processing the method
JP2000047879A (ja) コンパイル方法及び装置、実行方法、及びプログラム実行装置
CN114428653B (zh) 使用不同编译设置的代码的即时jit编译实例

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

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140603

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150602

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20160607

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20170605

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20180605

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20190604

Year of fee payment: 13