KR100928865B1 - 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치 - Google Patents

컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치 Download PDF

Info

Publication number
KR100928865B1
KR100928865B1 KR1020080018164A KR20080018164A KR100928865B1 KR 100928865 B1 KR100928865 B1 KR 100928865B1 KR 1020080018164 A KR1020080018164 A KR 1020080018164A KR 20080018164 A KR20080018164 A KR 20080018164A KR 100928865 B1 KR100928865 B1 KR 100928865B1
Authority
KR
South Korea
Prior art keywords
stack
register
address
base pointer
address space
Prior art date
Application number
KR1020080018164A
Other languages
English (en)
Other versions
KR20090092923A (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 KR1020080018164A priority Critical patent/KR100928865B1/ko
Publication of KR20090092923A publication Critical patent/KR20090092923A/ko
Application granted granted Critical
Publication of KR100928865B1 publication Critical patent/KR100928865B1/ko

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 스택 확장 및 보호 방법과 그 장치에 관한 것이다.
본 발명의 일 실시예에 따른 스택 확장 및 보호 방법은 현재 스택에 관한 CPU 레지스터의 베이스포인터 레지스터(Base Pointer Register) 및 스택 포인터 레지스터(Stack Pointer Register) 값을 백업하는 단계, 확장 스택으로 사용할 별도의 주소 공간을 할당하는 단계, 베이스포인터 값을 비롯하여 현재 스택에 존재하는 정보를 할당된 주소 공간으로 복사하는 단계, 복사하는 단계에서 할당된 주소 공간에 복사된 베이스포인터의 위치 주소를 CPU의 베이스포인터 레지스터에 설정하는 단계, 베이스포인터 레지스터에 설정된 위치 주소 값에서 현재 스택에 저장된 지역 변수가 차지하는 총 크기만큼을 뺀 주소 값을 CPU의 스택 포인터 레지스터에 설정하는 단계, 및 백업된 베이스포인터 레지스터 및 스택 포인터 레지스터 값으로 상기 CPU 레지스터를 복원하는 단계를 포함한다.
바람직하게는 할당된 주소 공간에서 정적인 영역에 대해 쓰기 접근 제어를 추가하는 단계를 더 포함한다.
스택, 스택 확장, 스택 보호, 오버플로우

Description

컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치{Method and Apparatus for extension and prevention stack for computer system}
본 발명은 컴퓨터 시스템에서 스택 확장 및 보호 방법과 그 장치에 관한 것으로서, 더욱 상세하게는, 별도의 영역에 할당 받은 메모리를 스택으로 사용할 수 있도록 하여 통상적인 컴퓨터 시스템에서 그 크기가 한정되어 있는 스택을 확장하여 사용하며, 스택 영역에 보호 영역을 지정함으로써 스택을 보호하는 방법 및 장치 관한 것이다.
스택은 프로세스에서 하나의 스레드(Thread)가 개별적으로 사용하게 되는 공간이며 프로세스 내부의 선형적인 주소 공간에 존재하게 된다. 이 스택은 프로그램이 수행되면서 호출하게 되는 함수들의 정보와 함수들의 내부 데이터를 저장하는데 사용된다. 한편, 스택이 차지하는 공간의 크기는 스레드가 실행되는 시점에 지정되며, 유저 레벨에서는 4MB, 커널레벨에서는 16KB와 같이 고정된 크기를 갖게 된다.
도5는 함수의 스택 구조의 하나의 예를 나타내는 도면이다. 통상적으로 컴퓨터 시스템에서 스택은 LIFO(Last In First Out) 방식을 사용하며 상위 주소부터 하 위 주소로 데이터를 채워 넣는 형식을 취하게 된다. 도5를 참고하면, 스택에는 함수 파라미터(Parameter: PARAM)(510), 복귀 주소(Return Address: RET)(520), 베이스포인터(Base Pointer: BP)(530), 지역 변수(Local Variable: LOCAL)(540) 등이 저장되게 된다. 함수 파라미터(510)는 함수의 파라미터에 관한 정보를 저장하는 공간이다. 복귀 주소(520)는 피호출 함수가 종료한 뒤에 CPU의 인스트럭션이 돌아가야 할 주소를 저장하는 공간이다. 즉, 특정 함수가 수행 중에 서브 루틴으로서 피호출 함수를 수행하게 되는 경우에 피호출 함수의 수행이 종료된 후 다시 이전 상위 함수로 CPU의 인스트럭션이 옮겨갈 주소가 저장되는 곳으로서, 호출 함수가 피호출 함수를 호출할 시에 복귀 주소를 스택 내에 저장하게 된다. 베이스 포인터(530)는 스택의 기준점 역할을 담당하며 일반적으로 CPU가 스택 메모리를 검색할 시에는 베이스 포인터(530)를 기준으로 하여 복귀 주소(520)나 파라미터(510) 등이 저장되어 있는 위치를 검색하게 된다. 예컨대, 도5에서와 같이, 스택 상에서 복귀주소(RET)(520)는 베이스 포인터(BP)(530) 다음에 위치하고 있으므로, 스택 상에 복귀 주소(520)가 저장되어 있는 위치는 "베이스 포인터(530)의 주소 + 4 바이트(byte)"가 되는 것이다. 또한, 베이스 포인터(530) 상에 저장되어 있는 정보는 이전 호출 함수의 베이스 포인터의 주소가 된다. 결국 베이스 포인터(530)는 자신과 관련된 스택 메모리 상에서는 기준점이 되며 그 안에 저장되어 있는 정보는 이전 호출 함수의 베이스 포인터의 주소로서 함수의 호출 관계를 파악하는 정보가 된다. 지역 변수(540)는 함수 실행 중에 필요한 여러 지역 변수의 값을 저장하고 있다.
컴퓨터 시스템은 통상적으로 이러한 스택 구조에 접근하기 위한 CPU 레지스터로 베이스 포인터 레지스터(Base Pointer Register)와 스택 포인터 레지스터(Stack Pointer Register)를 사용한다. 베이스 포인터 레지스터는 베이스 포인터가 저장되어 있는 스택 상의 주소를 저장하고 있다. 따라서, CPU가 스택에 접근할 시에는 이 베이스 포인터 레지스터에 저장되어 있는 주소 값을 읽어 들이게 된다. 스택 포인터 레지스터는 스택의 현재 최상위 위치를 가리키는 레지스터로써, 스택이 이 위치까지에 해당하는 영역에 데이터를 가지고 있음을 나타낸다.
앞서 기술한 바와 같이 스택 공간의 크기는 스레드가 수행되는 시점에 지정되며 고정된 크기를 가지게 된다. 통상적으로 유저 모드에서는 1 내지 4 Mb 이나 커널 모드에서는 16 kb 정도로 매우 작은 크기를 갖기 때문에 함수의 수행을 위한 충분한 공간이 확보되지 못하는 경우가 발생하게 된다. 따라서, 커널 모드로 작업 수행 도중 스택 공간의 부족으로 인한 어려움을 겪는 경우가 존재한다. 또한, 선형적인 주소 공간의 특징을 이용하여 스택의 데이터를 덮어쓰거나 변경시켜 스택 오버플로우(Stack Overflow)를 발생시키는 공격의 대상이 되기도 하는 문제점이 존재한다. 예를 들면, 함수 종료 후 복귀해야 할 주소가 저장되어 있는 복귀주소(RET)를 덮어쓰게 되는 경우, 함수가 종료 이후에 복귀할 주소가 변경되어서 정상적인 동작이 수행되지 못할 수 있다.
본 발명은 상기와 같은 문제점을 해결하기 위한 것으로서, 본 발명이 이루고자 하는 기술적 과제는 별도의 영역에 할당 받은 메모리를 스택으로 사용할 수 있도록 하여 스택 영역의 크기 제한과 상관없이 확장된 주소공간을 사용할 수 있는 스택 확장 방법 및 장치를 제공하는 것이다.
또한, 스택 영역에서 보호 영역을 설정하여 스택을 보호하는 방법 및 장치를 제공하는 것이다.
본 발명의 목적은 이상에서 언급한 목적으로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 목적을 달성하기 위하여 본 발명의 실시예에 따른 스택 확장 및 보호 방법은 현재 스택에 관한 CPU 레지스터의 베이스포인터 레지스터(Base Pointer Register) 및 스택 포인터 레지스터(Stack Pointer Register) 값을 백업하는 단계, 확장 스택으로 사용할 별도의 주소 공간을 할당하는 단계, 베이스포인터 값을 비롯하여 현재 스택에 존재하는 정보를 할당된 주소 공간으로 복사하는 단계, 복사하는 단계에서 할당된 주소 공간에 복사된 베이스포인터의 위치 주소를 CPU의 베이스포인터 레지스터에 설정하는 단계, 베이스포인터 레지스터에 설정된 위치 주소 값에서 현재 스택에 저장된 지역 변수가 차지하는 총 크기만큼을 뺀 주소 값을 CPU의 스택 포인터 레지스터에 설정하는 단계, 및 백업된 베이스포인터 레지스터 및 스택 포인터 레지스터 값으로 상기 CPU 레지스터를 복원하는 단계를 포함한다.
바람직하게는 할당하는 단계는 사용할 주소 공간을 힙(heap) 영역에 동적으로 할당한다.
바람직하게는 할당된 주소 공간을 해제하는 단계를 더 포함한다.
바람직하게는 할당된 주소 공간에서 함수 수행 동안 변하지 않는 정적인 영역에 쓰기 접근에 대한 제어를 추가하는 단계를 더 포함한다.
바람직하게는 상기 정적인 영역은 함수 파라미터, 복귀 주소, 및 베이스 포인터를 포함한다.
바람직하게는 쓰기 접근에 대한 제어가 설정된 영역으로의 쓰기 행위를 감지하고 예외 처리(exception handling) 동작을 수행한다.
바람직하게는 할당된 주소 공간에서 함수 수행 동안 변하지 않는 정적인 영역의 주소를 디버그 레지스터에 등록하는 단계를 더 포함한다.
바람직하게는 디버그 레지스터에 등록된 주소에 접근이 감지되는 경우 예외 처리 동작을 수행한다.
상기 목적을 달성하기 위하여 본 발명의 실시예에 따른 스택 확장 및 보호 장치는 현재 스택에 관한 CPU 레지스터의 베이스포인터 레지스터 및 스택 포인터 레지스터 값을 백업하는 수단, 확장 스택으로 사용할 별도의 주소 공간을 할당하는 수단, 베이스포인터 값을 비롯하여 현재 스택에 존재하는 정보를 할당된 주소 공간으로 복사하는 수단, 복사하는 수단에서 할당된 주소 공간에 복사된 베이스포인터 의 위치 주소를 CPU의 베이스포인터 레지스터에 설정하는 수단, 베이스포인터 레지스터에 설정된 위치 주소 값에서 현재 스택에 저장된 지역 변수가 차지하는 총 크기만큼을 뺀 주소 값을 CPU의 스택 포인터 레지스터에 설정하는 수단, 및 백업된 베이스포인터 레지스터 및 스택 포인터 레지스터 값으로 상기 CPU 레지스터를 복원하는 수단을 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
상술한 바와 같은 본 발명의 스택 확장 및 보호 방법에 따르면 다음과 같은 효과가 있다.
본 발명에 따르면, 별도의 메모리 영역을 할당받아 스택으로 사용할 수 있도록 하기 때문에, 스택 영역의 크기 제한과 상관없이 확장된 주소공간을 사용할 수 있는 장점이 있다.
또한, 스택 영역에서 변하지 않는 데이터가 쓰여져 있는 부분에 보호 영역을 설정하여, 예컨대, 쓰기 권한을 제어함으로써, 스택 오버플로우 등의 공격으로부터 스택을 보호할 수 있는 장점이 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태 로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다. 첨부된 블록도의 각 블록과 흐름도의 각 단계의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수 있음을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 블록도의 각 블록 또는 흐름도의 각 단계에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 블록도의 각 블록 또는 흐름도 각 단계에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 블록도의 각 블록 및 흐름도의 각 단계에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록 또는 각 단계는 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실행예들에서는 블록들 또는 단계들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들 또는 단계들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들 또는 단계들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
도 1은 본 발명에 따른 확장된 스택의 구조를 보여주는 도면이다.
컴파일러에 의해 컴파일된 함수의 최초 수행 부분에는 기본적인 프롤로그 코드가 삽입된다. 스택이 생성되면 스택의 주소에 대한 정보를 저장하고 있는 베이스 포인터 레지스터 값을 별도의 공간, 예컨대 CPU 레지스터에 저장하고, 프롤로그 코드에서 지정한 함수가 사용할 지역변수의 크기에 따라 스택 포인터의 위치가 결정된다. 즉, 베이스 포인터 레지스터는 스택에서 이전 함수의 스택 위치 정보를 저장하고 있는 베이스 포인터의 위치 값을 저장하고 있으며, 스택 포인터 레지스터는 이러한 베이스 포인터의 위치에 함수의 지역 변수의 크기를 고려하여 스택의 끝 부분을 표시한다.
본 발명의 일 실시예에 따른 스택 확장 및 보호 방법에 의하면, 먼저 별도의 주소 공간(110)을 스택으로 사용하고자 하는 크기에 따라 할당 받는다. 예를 들어, 상기 할당 받은 주소 공간(110)은 힙(heap) 영역에 동적으로 할당 받은 메모리 영역일 수 있다. 그리고 할당 받은 주소 공간(110)에 기존 스택(100)의 구조와 동일한 구조로 스택의 정보들, 예를 들어 함수 파라미터, 복귀 주소 및 베이스 포인터 등의 정보를 복사한다. 그리고 기존의 베이스 포인터 레지스터 값을 새롭게 할당 받은 주소 영역에서 베이스 포인터를 저장하고 있는 영역의 주소 값으로 변경하고, 현재 함수가 사용할 지역 변수의 크기를 계산하여 베이스 포인터의 주소 값에서 뺀 값을 스택 포인터 레지스터 값으로 설정한다. 이러한 과정을 통해서 별도로 할당 받은 주소 공간을 스택처럼 사용할 수 있으며, 함수의 동작이 끝난 후에는 할당 받은 주고 공간을 해제하고 CPU 레지스터(120)의 값들을 원래의 값으로 복원하여 줌으로써 정상적인 동작을 수행하도록 한다.
또한 베이스 포인터(EBP), 복귀 주소(RET) 및 함수 파라미터(PARAM) 영역은 한번 주소 공간에 쓰여지고 나면, 스택으로서 사용되는 동안에는 더 이상 변경되지 않으므로 쓰기 작업이 일어나지 않는다. 이러한 영역에 원치 않는 쓰기 작업이 일어나면 스택 오버플로우 등의 동작이 일어날 수 있으므로 읽기 속성(Read Only)으로 지정하고, 읽기 속성 페이지에 대한 접근 오류에 대해서 예외 처리(Exception Handling)를 할 수 있도록 하면 스택을 보호하여 정상적인 동작이 이루어지도록 할 수 있다.
이하에서는 본 발명에 따른 스택 확장 및 보호 방법의 보다 구체적인 실시예를 살펴본다.
도 2는 본 발명의 일 실시예에 따른 스택 확장 및 보호 방법의 처리 흐름도이다.
먼저, 현재 스택의 베이스 포인터 위치를 저장하고 있는 베이스 포인터 레지스터 및 스택 포인터 레지스터의 값을 별도의 공간에 백업(S200)하여 둔다. 이는 확장된 스택의 사용 이후 원래의 값으로 복원하기 위함이다. 데이터를 백업하기 위한 방법 및 수단은 본 발명의 기술분야에 속하는 통상의 백업 방법 및 수단, 예를 들어 별도의 메모리 영역, 레지스터, 하드 디스크 백업 등을 모두 포함할 수 있다.
스택으로 사용할 별도의 주소 공간을 할당(S210)한다. 이는 고정된 스택의 크기를 확장하여 사용하기 위함이므로 기존의 스택보다 큰 영역을 할당받을 수 있지만, 이에 제한되는 것은 아니다. 바람직하게는, 할당 받는 위치는 통상적으로 동적인 메모리 할당을 위해 사용되는 영역인 힙(heap) 영역일 수 있다.
새롭게 스택으로 사용할 주소 공간을 할당한 후, 기존 스택에 있던 정보를 복사(S220)해 온다. CPU가 스택을 처리하기 위한 동작 방식은 가상주소의 높은 주소에서 낮은 주소로 데이터를 저장하고 이용한다. 따라서, 새롭게 할당한 주소 공간의 끝부분의 높은 주소에서부터 한 페이지의 크기만큼 주소 공간의 시작 위치인 낮은 주소 방향으로 이동하여, 그 주소부터 현재 스택에 존재하는 이전 베이스 포인터 주소와 복귀 주소 그리고 함수 파라미터 값을 순차적으로 끝 방향으로 저장하게 되면 함수에서 참조하게 되는 스택의 시작 부분과 동일한 구조를 가지게 된다. 즉, 새롭게 할당한 주소 공간에서도 가장 높은 영역에서부터 함수 파라미터, 복귀 주소, 이전 베이스 포인터, 지역 변수 순으로 정보들이 배열될 수 있도록 복사하여 기존 스택과 동일하게 동작할 수 있도록 한다.
또한, CPU가 스택을 참조하기 위하여 사용하는 레지스터 값들인 베이스 포인터 레지스터 및 스택 포인터 레지스터를 변경(S230)하여 새롭게 할당한 주소 공간을 스택으로 사용할 수 있도록 한다. 즉, 보다 구체적으로 설명하면, 새로 할당된 주소 공간에 (이전 호출 함수의 스택 위치 정보를 포함하는) 베이스 포인터가 저장되어 있는 영역의 주소를 베이스 포인터 레지스터의 값으로 설정하면, 스레드 실행 시 CPU는 기존 주소가 아닌 새롭게 할당된 주소를 찾아가게 되므로, CPU가 기존 스택 영역이 아닌 새롭게 할당된 주소 영역을 실제 스택처럼 사용할 수 있도록 한다. 스택 포인터 레지스터의 경우, 지정된 지역 변수의 크기, 즉 현재 스택 포인터와 베이스 포인터의 크기의 차이를 계산하여 그 차이 값만큼을 새롭게 설정된 베이스 포인터의 주소 값에서 뺀 값을 스택 포인터 레지스터 값으로 설정한다. 즉, 기존의 스택에서, 베이스 포인터의 주소 값과 스택 포인터의 주소 값의 크기 차이는 지역 변수가 저장되어 있는 총 크기에 해당하므로, 이 차이 값을 계산하여 새롭게 설정한 베이스 포인터의 주소 값에서 뺀 값을 새로운 스택 포인터 레지스터 값으로 결정한다. 이와 같이 기존의 스택과 동일하게 동작할 수 있도록 베이스 포인터 레지스터와 스택 포인터 레지스터를 설정한다.
함수의 동작이 종료되는 시점에는 새롭게 할당 받은 주소 공간을 해제(S240)하고, 백업해 두었던 레지스터 값들로 레지스터를 복원(S250)시킴으로써 원래의 스택 상태로 복원되어 정상적인 후속 동작들을 수행하게 된다. 할당 받았던 주소 공 간을 해제하는 단계(S240)는 반드시 복원 단계(S250) 전에 이루어져야 하는 것은 아니며 일반적으로 본 발명의 기술분야에서 통상적으로 이루어지는 방식으로 할당 받은 주소 공간을 해제하는 방식으로 이루어진다.
한편, 새롭게 할당된 주소 공간을 스택 오버플로우 등과 같은 공격으로부터 보호하기 위한 보호영역 설정 및 예외 처리에 관한 방법에 대하여는 아래에서 도 3 및 4를 참조하여 보다 자세하게 설명한다.
도 3은 본 발명의 일 실시예에 따른 스택 보호 방법의 흐름도이다.
상술한 바와 같이 스택으로 사용할 주소 공간을 할당하고 관련 레지스터를 설정하고 기존 스택의 내용을 복사한다.(S310) 이 과정은 앞서 도2를 들어 설명한 단계 S200 내지 S230의 과정과 동일하므로, 자세한 설명은 생략한다. 한편, 스레드의 실행 시 스택 내에는 스택 내의 모든 함수에 대한 실행이 끝날 때까지 더 이상 데이터 쓰기 작업이 필요하지 않은 영역이 존재한다. 이러한 영역은, 예컨대, 함수 파라미터, 복귀 주소 및 베이스 포인터가 기록되어 있는 영역이 될 수 있다. 더 이상 해당 부분에 쓰기 작업이 필요하지 않으며 이 영역에 쓰기 작업이 발생한다면 스택 오버플로우와 같은 동작 오류가 발생할 수도 있다. 따라서, 해당 영역의 쓰기 권한을 제어(S320)하여, 예컨대 읽기 속성(Read Only)으로 지정하고 이 영역으로 쓰기 접근이 있을 경우(S330)에는 읽기 속성 페이지에 대한 접근 오류에 대한 예외로 처리하여 비정상적인 쓰기 접근이 있을지라도 스레드의 실행이 전체적으로 정상적으로 동작할 수 있도록 한다(S340).
보다 구체적으로 설명하면, 새롭게 할당받은 주소 공간의 끝 영역인 높은 주 소에서 낮은 주소로 한 페이지의 크기만큼을 이동하고 그 곳에서부터 주소 공간의 끝까지를 읽기 속성으로 지정하고, 이 부분에 대한 쓰기 접근이 있을 경우 예외 처리를 통해서 제어하는 것이다. 즉, 도 1의 별도 메모리(110) 영역이 경우 베이스 포인터, 복귀 주소, 및 함수 인자가 쓰기 방지 영역에 포함되어 읽기 속성으로 지정되게 되는 것이다. 예컨데, 마이크로소프트사의 윈도우 체제의 경우, 운영 체제에서 한 페이지를 4 kb 단위로 관리하므로 베이스 포인터로부터 4 kb의 영역이 쓰기 방지 영역으로 설정된다.
도 4는 본 발명의 또 다른 일 실시예에 따른 스택 보호 방법의 흐름도이다.
앞선 실시예와 같이 스택으로 사용할 주소 공간을 할당하고 관련 레지스터를 설정하고 기존 스택의 내용을 복사한다(S410). 이 과정은 앞서 도2를 들어 설명한 단계 S200 내지 S230의 과정과 동일하므로, 자세한 설명은 생략한다. 그리고, 디버그 레지스터(Debug Register)에 쓰기 접근을 제어할 주소를 설정(S420)한다. 만약, 상기 설정된 주소 영역에 쓰기 접근이 감지되어 인터럽트가 발생(S430)되면 이 인터럽트를 예외 처리하는 동작을 취한다.(S440) 이로써, 문자열 처리 오류로 인한 스택 오버플로우 등 예기치 못한 동작으로 비정상적인 동작이 발생하는 것을 막을 수 있다.
보다 구체적으로 설명하면, 디버그 레지스터의 디버그 주소 레지스터(Debug Address Register)에 해당하는 D0 내지 D3에 쓰기 접근을 제어하고자 하는 주소를 설정하고, 설정된 영역에 쓰기 접근을 알리는 인터럽트가 발생하면 디버그 예외 처리부(Debug Exception Handler)에서 인터럽트의 발생 원인을 분석하여 정상적으로 동작할 수 있도록 한다. 이를 통해서 앞선 도 3을 통한 실시예와 동일하게 비정상적으로 스택의 데이터가 변경되는 것을 막아 스택을 보호하는 효과를 얻을 수 있다.
이러한 스택 보호 방법은 새롭게 할당 받은 스택에 대해서만 적용가능한 것은 아니며, 기존의 통상적인 스택에 대해서도 스택 오버플로우 등의 공격 상황을 방지하기 위하여 적용할 수도 있다.
본 발명에 따른 스택 확장 및 보호 장치는 레지스터 백업부, 주소 공간 할당부, 스택 정보 복사부, 레지스터 설정부, 쓰기 접근 제어부, 주소 공간 해제부 및 레지스터 복원부로 구성된다.
레지스터 백업부는 베이스 포인터 레지스터 및 스택 포인터 레지스터 등 스택에 접근하는데 사용되는 레지스터 값을 백업하여 두는 역할을 수행한다.
메모리 영역 할당부는 새롭게 스택으로 사용할 영역을 할당하는 역할을 수행한다.
스택 정보 복사부는 기존 스택의 정보를 동일한 구조로 새롭게 할당된 주소 공간으로 복사해 오는 역할을 수행한다.
레지스터 설정부는 새롭게 할당된 주소 공간에 대하여 CPU 레지스터가 스택으로 접근할 수 있도록 베이스 포인터가 저장되어 있는 주소값을 베이스 포인터 레지스터에, 지역 변수의 크기를 고려하여 스택 포인터 레지스터를 설정하는 역할을 수행한다.
쓰기 접근 제어부는 더 이상 쓰기 작업이 일어나지 않는 부분에 대하여 쓰기 접근이 있는 경우 이를 방지하고 예외 처리를 통해 정상적인 동작을 수행할 수 있도록 제어하는 역할을 수행한다.
주소 공간 해제부 및 레지스터 복원부는 각각 할당되었던 별도의 주소 공간을 해제하고 레지스터 값을 레지스터 백업부에서 백업하여 두었던 값으로 복원하는 역할을 수행하여 원래의 상태로 복원하는 역할을 담당한다.
상술한 각 구성요소는 소프트웨어(software) 또는, FPGA(field-programmable gate array)나 ASIC(application-specific integrated circuit)과 같은 하드웨어(hardware)를 의미할 수 있다.  그렇지만 상기 구성요소들은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니며, 어드레싱(addressing)할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 실행시키도록 구성될 수도 있다.  상기 구성요소들 안에서 제공되는 기능은 더 세분화된 구성요소에 의하여 구현될 수 있으며, 복수의 구성요소들을 합하여 특정한 기능을 수행하는 것으로 구현할 수도 있다.  뿐만 아니라, 상기 구성요소들은 시스템 내의 하나 또는 그 이상의 컴퓨터들을 실행시키도록 구현될 수 있다. 또한, 모든 구성요소가 필수 구성요소이지는 않으며, 본 발명의 기술적 사상을 벗어나지 않는 범위에서 포함되지 않거나 복수로 포함될 수도 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것 이며 한정적이 아닌 것으로 이해해야만 한다.
도 1은 본 발명에 따른 확장된 스택의 구조를 보여주는 도면이다.
도 2는 본 발명의 일 실시예에 따른 스택 확장 및 보호 방법의 처리 흐름도이다.
도 3은 본 발명의 일 실시예에 따른 스택 보호 방법의 흐름도이다.
도 4는 본 발명의 또 다른 일 실시예에 따른 스택 보호 방법의 흐름도이다.
도5는 함수의 스택 구조의 하나의 예를 나타내는 도면이다.

Claims (11)

  1. 현재 스택에 관한 CPU 레지스터의 베이스포인터 레지스터(Base Pointer Register) 및 스택 포인터 레지스터(Stack Pointer Register) 값을 백업하는 단계;
    확장 스택으로 사용할 별도의 주소 공간을 할당하는 단계;
    베이스포인터 값을 비롯하여 상기 현재 스택에 존재하는 정보를 상기 할당된 주소 공간으로 복사하는 단계;
    상기 복사하는 단계에서 상기 할당된 주소 공간에 복사된 베이스포인터의 위치 주소를 CPU의 베이스포인터 레지스터에 설정하는 단계;
    상기 베이스포인터 레지스터에 설정된 위치 주소 값에서 상기 현재 스택에 저장된 지역 변수가 차지하는 총 크기만큼을 뺀 주소 값을 상기 CPU의 스택 포인터 레지스터에 설정하는 단계;
    상기 백업된 베이스포인터 레지스터 및 스택 포인터 레지스터 값으로 상기 CPU 레지스터를 복원하는 단계를 포함하는
    스택 확장 및 보호 방법.
  2. 제 1 항에 있어서,
    상기 할당하는 단계는 상기 사용할 주소 공간을 힙(heap) 영역에 동적으로 할당하는
    스택 확장 및 보호 방법.
  3. 제 1 항에 있어서,
    상기 할당된 주소 공간을 해제하는 단계를 더 포함하는
    스택 확장 및 보호 방법.
  4. 제 1 항에 있어서,
    상기 할당된 주소 공간에서 함수 수행 동안 변하지 않는 정적인 영역에 쓰기 접근에 대한 제어를 추가하는 단계를 더 포함하는
    스택 확장 및 보호 방법.
  5. 제 4 항에 있어서,
    상기 정적인 영역은 함수 파라미터, 복귀 주소, 및 베이스 포인터를 포함하는
    스택 확장 및 보호 방법.
  6. 제 4 항에 있어서,
    상기 쓰기 접근에 대한 제어가 설정된 영역으로의 쓰기 행위를 감지하고 예외 처리(exception handling)하는
    스택 확장 및 보호 방법.
  7. 제 1 항에 있어서,
    상기 할당된 주소 공간에서 함수 수행 동안 변하지 않는 정적인 영역의 주소를 디버그 레지스터에 등록하는 단계를 더 포함하는
    스택 확장 및 보호 방법.
  8. 제 7 항에 있어서,
    상기 정적인 영역은 함수 파라미터, 복귀 주소, 및 베이스 포인터를 포함하는
    스택 확장 및 보호 방법.
  9. 제 7 항에 있어서,
    상기 디버그 레지스터에 등록된 주소에 접근이 감지되는 경우 예외 처리를 하는
    스택 확장 및 보호 방법.
  10. 현재 스택에 관한 CPU 레지스터의 베이스포인터 레지스터 및 스택 포인터 레지스터 값을 백업하는 수단;
    확장 스택으로 사용할 별도의 주소 공간을 할당하는 수단;
    베이스포인터 값을 비롯하여 상기 현재 스택에 존재하는 정보를 상기 할당된 주소 공간으로 복사하는 수단;
    상기 복사하는 수단에서 상기 할당된 주소 공간에 복사된 베이스포인터의 위치 주소를 CPU의 베이스포인터 레지스터에 설정하는 수단;
    상기 베이스포인터 레지스터에 설정된 위치 주소 값에서 상기 현재 스택에 저장된 지역 변수가 차지하는 총 크기만큼을 뺀 주소 값을 상기 CPU의 스택 포인터 레지스터에 설정하는 수단;
    상기 백업된 베이스포인터 레지스터 및 스택 포인터 레지스터 값으로 상기 CPU 레지스터를 복원하는 수단을 포함하는
    스택 확장 및 보호 장치.
  11. 제 1 항 내지 제 9 항 중 어느 한 항에 의한 방법을 실행하기 위한 컴퓨터로 읽을 수 있는 프로그램을 기록한 기록매체.
KR1020080018164A 2008-02-28 2008-02-28 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치 KR100928865B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080018164A KR100928865B1 (ko) 2008-02-28 2008-02-28 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080018164A KR100928865B1 (ko) 2008-02-28 2008-02-28 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치

Publications (2)

Publication Number Publication Date
KR20090092923A KR20090092923A (ko) 2009-09-02
KR100928865B1 true KR100928865B1 (ko) 2009-11-30

Family

ID=41301455

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080018164A KR100928865B1 (ko) 2008-02-28 2008-02-28 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치

Country Status (1)

Country Link
KR (1) KR100928865B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210063519A (ko) * 2019-11-22 2021-06-02 현대오트론 주식회사 스택 결함 원인을 진단하는 방법 및 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR960024985A (ko) * 1994-12-27 1996-07-20 빈센트 이. 인그라시아 데이타 프로세싱 시스템내에서 기억확장 스택(memory extension stack)에 대한 장치 및 실현 방법
JP2003271448A (ja) 2002-03-18 2003-09-26 Fujitsu Ltd スタック管理方法及び情報処理装置
KR20070092558A (ko) * 2006-03-10 2007-09-13 삼성전자주식회사 가상 머신에서 스택을 관리하는 장치 및 그 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR960024985A (ko) * 1994-12-27 1996-07-20 빈센트 이. 인그라시아 데이타 프로세싱 시스템내에서 기억확장 스택(memory extension stack)에 대한 장치 및 실현 방법
JP2003271448A (ja) 2002-03-18 2003-09-26 Fujitsu Ltd スタック管理方法及び情報処理装置
KR20070092558A (ko) * 2006-03-10 2007-09-13 삼성전자주식회사 가상 머신에서 스택을 관리하는 장치 및 그 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210063519A (ko) * 2019-11-22 2021-06-02 현대오트론 주식회사 스택 결함 원인을 진단하는 방법 및 장치
KR102300712B1 (ko) 2019-11-22 2021-09-13 현대오트론 주식회사 스택 결함 원인을 진단하는 방법 및 장치

Also Published As

Publication number Publication date
KR20090092923A (ko) 2009-09-02

Similar Documents

Publication Publication Date Title
US5870607A (en) Method and apparatus for selective replay of computer programs
US5991856A (en) System and method for computer operating system protection
KR101110490B1 (ko) 정보 처리 장치, 프로세서 및 메모리 관리 방법
KR101782313B1 (ko) 예외 이벤트 처리 장치 및 방법
TW202011195A (zh) 映射表更新方法
EP1626338A1 (en) System and method for providing exceptional flow control in protected code through watchpoints
US7962832B2 (en) Method for detecting memory error
EP2221830A1 (en) Memory device and wear leveling method thereof
CN107807839B (zh) 一种修改虚拟机内存数据的方法、装置及电子设备
US9026866B2 (en) Method and system for realtime detection of stack frame corruption during nested procedure calls
US20100031084A1 (en) Checkpointing in a processor that supports simultaneous speculative threading
US20220366036A1 (en) An apparatus and method for handling exceptions
JP2022503921A (ja) 遷移無効インジケータ
KR20200002932A (ko) 자격 메타데이터를 관리하는 장치 및 방법
GB2540388A (en) Secure mode state data access tracking
CN109582542B (zh) 一种嵌入式系统核心转储的方法
JP5464226B2 (ja) 情報処理装置、情報処理装置制御方法及び情報処理装置制御プログラム
JP2005063435A (ja) ソフトウェアフォールトを封じ込める方法およびシステム
KR102254159B1 (ko) 운영체제 커널 메모리의 실시간 오류 검출 방법
KR100928865B1 (ko) 컴퓨터 시스템에서의 스택 확장 및 보호 방법과 그 장치
JP2021512405A (ja) メモリ・アクセスにおける保護タグ・チェックの制御
US7814288B2 (en) Protecting memory operations involving zero byte allocations
US7890740B2 (en) Processor comprising a first and a second mode of operation and method of operating the same
KR102145358B1 (ko) 변경된 운영체제 환경에서 디스크의 데이터 무결성을 보호하는 방법 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체
US11550651B2 (en) Execution circuits using discardable state

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121220

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20131120

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20141120

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20151120

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20161121

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20171120

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20181120

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20191120

Year of fee payment: 11