KR20080096963A - 메모리 오류 검출 방법 - Google Patents

메모리 오류 검출 방법 Download PDF

Info

Publication number
KR20080096963A
KR20080096963A KR1020070041945A KR20070041945A KR20080096963A KR 20080096963 A KR20080096963 A KR 20080096963A KR 1020070041945 A KR1020070041945 A KR 1020070041945A KR 20070041945 A KR20070041945 A KR 20070041945A KR 20080096963 A KR20080096963 A KR 20080096963A
Authority
KR
South Korea
Prior art keywords
memory
block
identification code
allocated
variable
Prior art date
Application number
KR1020070041945A
Other languages
English (en)
Other versions
KR100890546B1 (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 KR1020070041945A priority Critical patent/KR100890546B1/ko
Priority to US12/036,550 priority patent/US7962832B2/en
Priority to JP2008106833A priority patent/JP2008276763A/ja
Publication of KR20080096963A publication Critical patent/KR20080096963A/ko
Application granted granted Critical
Publication of KR100890546B1 publication Critical patent/KR100890546B1/ko
Priority to US13/053,763 priority patent/US20110173505A1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/76Masking faults in memories by using spares or by reconfiguring using address translation or modifications
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0409Online test
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/44Indication or identification of errors, e.g. for repair

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 발명은 메모리 오류 검출 방법에 관한 것으로, 보다 구체적으로는 소프트웨어 개발 단계에서 메모리를 액세스하거나 할당받은 메모리를 해제하는 경우에 발생할 수 있는 메모리 오류를 용이하게 검출하는 방법에 관한 것이다.
본 발명에 따른 메모리 오류 검출 방법은, (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계, (b) 할당메모리영역을 액세스하기 전에, 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출하는 단계, 및 (c) 검출된 메모리 오류에 관한 정보를 출력하는 단계를 포함한다.
메모리 오류 검출, 동적 메모리, 소프트웨어, 테스트

Description

메모리 오류 검출 방법{THE METHOD OF DETECTING MEMORY ERROR}
도 1은 본 발명에 따른 메모리를 액세스할 때 메모리 오류를 검출하는 방법을 나타낸 순서도이다.
도 2는 본 발명에 따른 메모리 오류 검출 방법을 설명하기 위해 메모리 영역을 모식적으로 나타낸 도면이다.
도 3은 본 발명에 따른 메모리를 해제할 때 메모리 오류를 검출하는 방법을 나타낸 순서도이다.
본 발명은 메모리 오류 검출 방법에 관한 것으로, 보다 구체적으로는 소프트웨어 개발 단계에서 메모리를 액세스(access)하거나 할당받은 메모리를 해제하는 경우에 발생할 수 있는 메모리 오류를 용이하게 검출하는 방법에 관한 것이다.
소프트웨어 프로그래밍 과정에서 가장 빈번하게 발생하는 오류 중의 하나가 메모리 사용상의 오류이다. 소프트웨어가 동작하기 위해서는 통상적으로 수많은 변수가 메모리에 할당되어 사용된다. 프로그램에서 메모리를 부적절하게 액세스하거나 해제하는 경우, 프로그램 실행단계에서 치명적인 오류가 발생할 수 있다. 따라 서, 프로그램 개발자는 프로그래밍 단계에서 부적절한 메모리 오류가 발생하지 않도록 주의해야 하고, 디버깅(debugging) 또는 테스팅(testing)을 통하여 메모리 오류가 발생하지 않도록 프로그램 코드를 수정해야 한다.
그러나, 지금까지는 소프트웨어 개발시의 프로그래밍 과정에서 이러한 메모리 사용상의 오류를 제거하기 위해서는, 프로그래머가 주의해서 코딩을 하고, 코딩 후에도 프로그램 소스 코드를 직접 검토하고, 프로그램을 다양한 수행 환경에서 실행시켜 오류가 발생하는 경우에 그때마다 디버깅하는 방법 등이 사용되어 왔다. 이러한 방법에 의해서는 메모리 사용상의 오류를 검출하기 위하여 수많은 비용과 시간이 투입되어야 하고, 메모리가 부적절하게 사용되더라도 우연히 실행시 오류가 나지 않는 경우 등에는 그러한 메모리 오류를 검출하기 어려우며, 차후에 프로그램 사용단계에서 치명적인 오류가 발생하여 막대한 비용손실을 유발할 수 있는 등의 문제점이 있었다.
본 발명은 전술한 문제점을 해결하기 위한 것으로서, 프로그램 소스코드에서 메모리를 사용할 때마다 메모리 오류를 유발할 가능성은 없는지 확인하는 메모리 오류 검출 방법을 제공하는 것을 목적으로 한다.
본 발명에 따른 메모리 오류 검출 방법은, (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계, (b) 할당메모리영역을 액세스하기 전에, 할당메모리 영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출하는 단계, 및 (c) 검출된 메모리 오류에 관한 정보를 출력하는 단계를 포함한다.
여기서, (b) 단계는, (b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계, 및 (b2) 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단하는 단계, 및 (b2) 타겟블록지시변수가 할당메모리영역 밖의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b)단계 이전에, (d) 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당하는 단계를 더 포함하고, (b1) 단계에서, 식별부호를 이용하여 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단할 수도 있다.
또한, 하나의 할당메모리영역에 포함된 메모리블록 각각에 대응하는 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며, (d) 단계에서, 하나의 식별부호그룹 내의 식별부호는 서로 동일하고, 식별부호맵 영역에서 인접하는 식별부호그룹의 식별부호는 서로 상이하도록 식별부호를 할당하며, (b1)단계는, (b1-1) 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호와 최초블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 동일한지 여부를 판단하는 단계, 및 (b1-2) (b1-1)단계에서 판단결과, 식별부호가 서로 동일하지 않은 경우, 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는 것으로 판단하는 단계를 포함할 수도 있다.
또한, 식별부호그룹의 식별부호는 제1 내지 제3 비트값 중 하나이고, 식별부호맵 영역에서, 식별부호그룹이 형성되지 않은 부분은 제4 비트값이 저장될 수도 있다.
이러한 방법들을 수행하기 위한 컴퓨터 프로그램이 컴퓨터로 읽을 수 있는 기록매체에 저장될 수 있다.
또한, 본 발명의 다른 양태에 따른 메모리 오류 검출 방법은, (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계, (b) 할당메모리영역의 할당을 해제하기 전에, 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영 역의 할당 해제시 발생할 수 있는 메모리 오류를 검출하는 단계, 및 (c) 검출된 메모리 오류에 관한 정보를 출력하는 단계를 포함한다.
여기서, (b) 단계는, (b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계, 및 (b2) 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 타겟블록지시변수가 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는지 여부를 판단하는 단계, 및 (b2) 타겟블록지시변수가 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계, 및 (b2) 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b) 단계는, (b1) 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하는지 여부를 판단하는 단계, 및 (b2) 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 경우 메모리 오류로 판단하는 단계를 포함할 수도 있다.
또한, (b)단계 이전에, (d) 할당메모리영역의 메모리블록 각각에 대하여 식 별부호를 할당하는 단계를 더 포함하고, (b1) 단계에서, 식별부호를 이용하여 할당메모리영역 중 최초의 메모리 블록을 지시하는지 여부를 판단할 수도 있다.
또한, 하나의 할당메모리영역에 포함된 메모리블록 각각에 대응하는 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며, (d) 단계에서, 하나의 식별부호그룹 내의 식별부호는 서로 동일하고, 식별부호맵 영역에서 인접하는 식별부호그룹의 식별부호는 서로 상이하도록 식별부호를 할당하며, (b1)단계는, (b1-1) 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 식별부호맵 영역에서 바로 선행하는 식별부호와 동일한지 여부를 판단하는 단계, 및 (b1-2) (b1-1)단계에서 판단결과, 식별부호가 서로 동일한 경우, 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 것으로 판단하는 단계를 포함할 수도 있다.
또한, 식별부호그룹의 식별부호는 제1 내지 제3 비트값 중 하나이고, 식별부호맵 영역에서, 식별부호그룹이 형성되지 않은 부분은 제4 비트값이 저장될 수도 있다.
이러한 방법들을 수행하기 위한 컴퓨터 프로그램이 컴퓨터로 읽을 수 있는 기록매체에 저장될 수 있다.
이하, 첨부된 도면을 참조하여 본 발명을 당업자가 용이하게 이해하고 재현할 수 있도록 설명한다.
우선, 본 발명이 적용될 수 있는 메모리 오류의 종류에 관해서 설명한다. 메 모리를 액세스하는 경우에 발생 가능한 메모리 오류에는 널 포인터 액세스 오류(Null pointer access error), 무효 포인터 액세스 오류(invalid pointer access error), 영역외 액세스 오류(out of bound access error) 등이 있다.
널 포인터 액세스 오류는 메모리를 액세스하기 위한 포인터 변수의 값이 널(NULL)값인데도 불구하고 그 포인터 변수를 이용하여 메모리를 액세스하는 명령을 실행하는 경우에 발생하는 오류이다. 무효 포인터 액세스 오류는, 아직 할당되지 않은 메모리를 액세스하는 경우에 발생하는 메모리 오류, 및 액세스하려는 메모리가 이미 할당 해제된 메모리인 경우 발생하는 메모리 오류를 포함한다. 다음으로, 영역외 액세스 오류는 특정 변수에 대한 연산을 위해 메모리를 액세스 하면서 해당 변수에 할당된 메모리 영역을 벗어난 메모리를 액세스하는 경우에 발생하는 메모리 오류를 의미한다.
또한, 메모리를 해제하는 경우에 발생 가능한 메모리 오류는 크게 부적법 해제 오류(illegal free error), 중복 해제 오류(duplicate free error)로 분류할 수 있다.
부적법 해제 오류에는, 할당 해제하려는 메모리를 지시하는 포인터 변수의 값이 널값인 경우에 발생하는 메모리 오류, 할당되지 않은 메모리를 해제하는 경우에 발생하는 메모리 오류, 할당 해제하려는 메모리가 힙 메모리 영역 밖의 메모리인 경우에 발생하는 메모리 오류, 할당 해제하려는 메모리를 지시하는 포인터 변수가 해당 메모리의 최초 메모리 블록을 지시하지 않는 경우에 발생하는 메모리 오류 등이 포함된다.
중복 해제 오류는 이미 해제된 메모리를 다시 해제하는 경우에 발생하는 오류이다.
이하에서는, 본 발명에 따라 전술한 각 메모리 오류를 검출하는 방법을 첨부된 도면을 참조하여 설명한다.
도 1을 참조하면, 우선, 프로그램에 포함된 변수에 관하여 메모리를 할당받는 경우, 그 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성한다(S102). 즉, 프로그램 소스코드에서 메모리 할당이 발생하는 곳마다 최초블록지시변수를 정의하고 초기화한다. 이러한 과정은 프로그램 코딩시에 개발자에 의해 수동으로 입력되거나 프로그램 코딩 완료 후 자동으로 수행될 수도 있다.
다음으로, 해당 변수에 관하여 그 할당받은 할당메모리영역을 액세스할 때마다, 할당메모리영역의 액세스 대상 메모리 블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출한다(S104). 즉, 프로그램 소스코드에서 메모리 액세스의 발생이 예상되는 곳마다 메모리 액세스 발생전 이 연산이 수행되도록 API함수를 호출하는 소스코드를 추가한다. 이러한 소스코드의 추가는 프로그램 코딩시에 개발자에 의해 수동으로 입력되거나 프로그램 코딩 완료 후 자동으로 수행될 수도 있다.
검출 결과 메모리 오류가 예상되는 경우에 검출된 메모리 오류에 관한 정보를 출력한다(S106).
전술한 바와 같이, 수동 또는 자동으로 프로그램 소스코딩을 수정하고, 수정된 프로그램을 실행하여 메모리 오류 관련 정보를 출력 받아 메모리 오류가 발생하지 않도록 프로그램을 수정하여야 한다. 프로그램 개발이 완료된 이후에는 프로그램 소스코드에 추가된 내용들은 삭제되는 것이 바람직하며, 이러한 삭제는 개발자에 의해 수동으로 진행되거나 자동으로 수행될 수도 있다.
예를 들어, 프로그램에서 malloc()을 호출하는 경우 사용자가 원하는 크기만큼 메모리를 할당하고 메모리 어드레스를 반환하게 되는데, malloc()을 호출하여 메모리를 할당받을 때, 할당받은 할당메모리영역의 메모리 어드레스를 반환받는 변수가 타겟블록지시변수이고, 할당메모리영역의 최초 메모리블록을 지시하는 변수가 최초블록지시변수이다. malloc() 함수 외에도 메모리를 할당하거나 액세스하는 임의의 함수에 대해 본 발명이 적용될 수 있다. 나아가 본 발명은 특정 프로그래밍 언어에서만 적용되는 것이 아니라, 메모리 또는 이와 등가의 저장수단을 포함하는 임의의 시스템에서 그러한 저장수단을 액세스 또는 해제하는 임의의 경우에 적용될 수 있음은 당업자에게 자명하다. 이하, 메모리 오류를 검출하는 방법을 메모리 오류의 종류에 따라 상세히 설명한다.
할당메모리영역을 액세스할 때, 널 포인터 액세스 오류(Null pointer access error)를 검출하기 위하여, 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하고, 그 결과 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단한다(S201).
또한, 할당메모리영역을 액세스할 때, 아직 할당되지 않은 메모리를 액세스 하는 경우에 발생하는 메모리 오류를 검출하기 위하여, 최초블록지시변수의 값이 초기화되었는지 여부를 판단하고, 최초블록지시변수의 값이 초기화되지 않은 경우 무효 포인터 액세스 오류로 판단한다(S202).
또한, 액세스하려는 메모리가 이미 할당 해제된 메모리인 경우 발생하는 메모리 오류를 검출하기 위하여, 최초블록지시변수의 값이 널값인지 여부를 판단하고, 최초블록지시변수의 값이 널값인 경우, 무효 메모리 액세스 오류로 판단한다(S203).
또한, 영역외 액세스 오류를 검출한다(S204). 영역외 액세스 오류를 검출하는 방법은 도 2를 참조하여 상세히 설명한다.
우선 전술한 바와 같이, 영역외 액세스 오류는 특정 변수에 대한 연산을 위해 메모리를 액세스 하면서 해당 변수에 할당된 메모리 영역을 벗어난 메모리를 액세스하는 경우에 발생하는 메모리 오류를 의미한다. 따라서, 영역외 액세스 오류를 검출하기 위하여, 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단한다. 본 발명에 따른 오류 검출 방법에서는, 영역외 액세스 오류를 검출하기 위하여 비트맵 컬러링을 이용한다. 이하, 그 방식을 설명한다.
예를 들어, 컴퓨터 프로그램에 포함된 변수 각각에 대해 할당메모리영역(112, 114 및 116)을 할당받은 경우, 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당한다. 예를 들어, 할당메모리영역(116)의 메모리 블록(116a 및 116b)에 대해 식별부호를 할당한다. 이때, 동일한 할당메모리 영역에 속하는 메모리블록은 동일한 식별부호를 할당받는다.
하나의 할당메모리영역(112, 114, 116)에 포함된 메모리블록(예를 들어, 116a 및 116b) 각각에 대응하는 식별부호는 컴퓨터 메모리의 식별부호맵 영역(120)에 연속적으로 저장되어 하나의 식별부호그룹(122, 124 및 126)을 형성한다. 예를 들어, 프로그램에서 변수 a, b, c가 순차적으로 메모리를 할당받은 경우, 변수 a에 대한 할당메모리영역(112)의 5개의 메모리블록에 대응하는 식별부호 "11"이 식별부호맵 영역(120)에 연속적으로 저장되어 식별부호그룹(122)를 형성하고, 변수 b에 대한 할당메모리영역(114)의 4개의 메모리블록에 대응하는 식별부호 "10"이 식별부호맵 영역(120)에 연속적으로 저장되어 식별부호그룹(124)를 형성한다. 식별부호맵 영역(120)은 식별부호그룹이 형성되기 전에는 "00"값으로 모두 초기화 되어 있다.
"11", "10", "01"의 순서는 임의로 할당될 수 있으며, 하나의 식별부호그룹 내의 식별부호는 서로 동일하고, 식별부호맵 영역에서 인접하는 식별부호그룹의 식별부호는 서로 상이하도록 식별부호를 할당한다. 인접하는 식별부호그룹의 식별부호에 서로 다른 식별부호를 할당하기 위해 3개의 식별부호가 필요하다. 또한, 식별부호맵 영역의 초기화상태를 나타내는 식별부호가 필요하다. 본 실시예에서는, 2-비트의 비트값을 식별부호로 이용하여, 이러한 4개의 식별부호를 표현하였으나, 이는 예시적인 것으로서, 비트값은 임의의 비트수를 가질 수 있으며, 나아가 식별부호는 서로 다른 4개의 식별부호이면 족하다. 각 식별부호에 대하여 컬러값을 할당하여 메모리 할당 및 이용상태를 사용자에게 디스플레이할 수도 있다. 또한, 식별부호맵 영역(120)은 식별부호를 반드시 물리적으로 연속적으로 저장할 필요는 없으므로, 논리적으로 연속적인 임의의 데이터 저장 구조를 가질 수 있다.
이러한 비트맵 컬러링을 이용하여 영역외 액세스 오류를 검출하는 방법은, 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호와 최초블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 동일한지 여부를 판단하는 방식을 이용한다. 식별부호가 서로 동일하지 않은 경우, 해당 변수에 대한 타겟블록지시변수가 할당메모리영역 밖의 메모리블록을 지시하는 것이므로 영역외 액세스 오류임을 검출할 수 있다.
이상의 각 메모리 오류 종류에 따른 오류 검출 방법 중 하나 이상의 방법이 순서에 무관하게 수행되어 메모리 오류를 검출할 수 있다.
다음으로, 도 3을 참조하여, 메모리를 해제하는 경우에 발생 가능한 메모리 오류를 검출하는 방법을 설명한다. 이 방법은, 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계(S302), 할당메모리영역의 할당을 해제하기 전에, 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 최초블록지시변수를 이용한 소정의 연산을 수행하여, 할당메모리영역의 할당 해제시 발생할 수 있는 메모리 오류를 검출하는 단계(S304), 및 검출된 메모리 오류에 관한 정보를 출력하는 단계(S306)를 포함한다.
우선, 널값을 갖는 포인터 변수를 이용하여 메모리를 해제하는 경우를 검출하기 위하여, 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하고, 널값과 동일한 경우 부적법 해제 오류로 판단한다(S401).
다음으로, 할당되지 않은 메모리를 해제하는 경우를 검출하기 위하여, 최초 블록지시변수의 값이 초기화되었는지 여부를 판단하고, 초기화되지 않은 경우 부적법 해제 오류로 판단한다(S402). 이 방법이 유효하기 위해서는, 메모리를 할당받을 때마다 최초블록지시변수를 생성하고 그 값을 초기화하는 것이 필요하다. 따라서, 최초블록지시변수가 초기화되지 않은 경우라면, 메모리를 할당받지 않은 것으로 판단할 수 있다.
다음으로, 할당 해제하려는 메모리가 힙 메모리 영역 밖의 메모리인 경우 치명적인 메모리 오류를 유발하게 되므로, 타겟블록지시변수가 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는지 여부를 판단하고, 힙메모리 외부의 메모리 블록을 지시하는 경우 부적법 해제 오류로 판단한다(S403).
다음으로, 할당 해제하려는 메모리를 지시하는 포인터 변수가 적합한 값을 가지고 있는지 여부를 판단하여 메모리 오류 여부를 검출한다. 예를 들어, free() 함수를 호출하여 메모리를 해제하는 경우, 입력 포인터 변수는 해제하고자 하는 할당메모리영역의 최초블록을 지시하고 있어야 한다. 이와 관련된 메모리 오류를 검출하기 위하여, 앞서 설명한 비트맵 컬러링 방식을 이용한다. 이를 도 2를 다시 참조하여 설명하면, 변수 b에 관련된 할당메모리영역(114)을 해제하기 위하여, 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호(T_ADDR의 식별부호; 식별부호그룹(124)의 최초 식별부호 "10")가 그 바로 이전 식별부호(T_ADDR-1의 식별부호)와 동일한지 여부를 판단하여, 식별부호가 서로 동일한 경우, 타겟블록지시변수가 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 것이므로 부적법 해제 오류임을 검출할 수 있다(S404).
다음으로, 메모리할당영역을 중복으로 해제하는 경우를 검출하기 위하여, 최초블록지시변수의 값이 널값인지 여부를 판단하고, 최초블록지시변수의 값이 널값인 경우 중복 해제 오류임을 검출한다. 이 방법이 유효하기 위해서는, 메모리할당영역을 적법하게 해제하는 경우, 그 최초블록지시변수에 널값을 할당하는 것이 필요하다(S405). 이상의 각 메모리 오류의 종류에 따른 오류 검출 방법 중 하나 이상의 방법이 순서에 무관하게 수행되어 메모리 오류를 검출할 수 있다.
이상 설명한 본 발명에 따른 메모리 오류 검출 방법에 의해 검출되는 메모리 오류의 종류는 예시적인 것으로서, 메모리 할당시 최초블록지시변수를 생성하여 그 변수에 대한 연산을 통해 발생 가능한 메모리 오류를 검출하거나, 또는 전술한 비트맵 컬러링 방식을 이용하여 메모리 오류를 검출하는 본 발명의 사상을 이용하여 더욱 다양한 메모리 오류를 검출할 수 있음이 당업자에게 자명하다.
본 발명에 의해, 컴퓨터 프로그램의 프로그래밍 과정, 컴퓨터 프로그램의 실행과정 등 메모리를 액세스 하거나 해제하는 경우에 발생가능한 메모리 오류를 자동적이고 확실하게 검출할 수 있다.

Claims (19)

  1. (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계;
    (b) 상기 할당메모리영역을 액세스(access)하기 전에, 상기 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 상기 최초블록지시변수를 이용한 소정의 연산을 수행하여, 상기 할당메모리영역의 액세스시 발생할 수 있는 메모리 오류를 검출하는 단계; 및
    (c) 검출된 상기 메모리 오류에 관한 정보를 출력하는 단계;
    를 포함하는, 메모리 오류 검출 방법
  2. 제1항에 있어서,
    상기 (b) 단계는,
    (b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계; 및
    (b2) 상기 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  3. 제1항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계; 및
    (b2) 상기 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  4. 제1항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계; 및
    (b2) 상기 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  5. 제1항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단하는 단계; 및
    (b2) 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  6. 제5항에 있어서,
    상기 (b)단계 이전에,
    (d) 상기 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당하는 단계를 더 포함하고,
    상기 (b1) 단계에서, 상기 식별부호를 이용하여 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리블록을 지시하는지 여부를 판단하는, 메모리 오류 검출 방법.
  7. 제6항에 있어서,
    하나의 상기 할당메모리영역에 포함된 상기 메모리블록 각각에 대응하는 상기 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며,
    상기 (d) 단계에서,
    상기 하나의 식별부호그룹 내의 상기 식별부호는 서로 동일하고, 상기 식별부호맵 영역에서 인접하는 상기 식별부호그룹의 식별부호는 서로 상이하도록 상기 식별부호를 할당하며,
    상기 (b1)단계는,
    (b1-1) 상기 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호와 상기 최초블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 동일한지 여부를 판단하는 단계; 및
    (b1-2) 상기 (b1-1)단계에서 판단결과, 상기 식별부호가 서로 동일하지 않은 경우, 상기 타겟블록지시변수가 상기 할당메모리영역 밖의 메모리블록을 지시하는 것으로 판단하는 단계를 포함하는, 메모리 오류 검출 방법.
  8. 제7항에 있어서,
    상기 식별부호그룹의 식별부호는 제1 내지 제3 비트값 중 하나이고,
    상기 식별부호맵 영역에서, 상기 식별부호그룹이 형성되지 않은 부분은 제4 비트값이 저장되는, 메모리 오류 검출 방법.
  9. 제1항 내지 제8항 중 어느 한 항에 기재된 메모리 오류 검출 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한, 컴퓨터로 읽을 수 있는 기록매체.
  10. (a) 컴퓨터 프로그램에 포함된 변수에 대해 할당받은 할당메모리영역 중 최초의 메모리블록을 지시하기 위한 최초블록지시변수를 생성하는 단계;
    (b) 상기 할당메모리영역의 할당을 해제하기 전에, 상기 할당메모리영역의 액세스 대상 메모리블록을 지시하는 타겟블록지시변수, 및/또는 상기 최초블록지시변수를 이용한 소정의 연산을 수행하여, 상기 할당메모리영역의 할당 해제시 발생할 수 있는 메모리 오류를 검출하는 단계; 및
    (c) 검출된 상기 메모리 오류에 관한 정보를 출력하는 단계;
    를 포함하는, 메모리 오류 검출 방법
  11. 제10항에 있어서,
    상기 (b) 단계는,
    (b1) 타겟블록지시변수의 값이 널(NULL)값과 동일한지 비교하는 단계; 및
    (b2) 상기 타겟블록지시변수의 값이 널값과 동일한 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  12. 제10항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 최초블록지시변수의 값이 초기화되었는지 여부를 판단하는 단계; 및
    (b2) 상기 최초블록지시변수의 값이 초기화되지 않은 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  13. 제10항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 타겟블록지시변수가 상기 할당메모리영역이 속하는 힙메모리 외부 의 메모리 블록을 지시하는지 여부를 판단하는 단계; 및
    (b2) 상기 타겟블록지시변수가 상기 할당메모리영역이 속하는 힙메모리 외부의 메모리 블록을 지시하는 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  14. 제10항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 최초블록지시변수의 값이 널값인지 여부를 판단하는 단계; 및
    (b2) 상기 최초블록지시변수의 값이 널값인 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  15. 제10항에 있어서,
    상기 (b) 단계는,
    (b1) 상기 타겟블록지시변수가 상기 할당메모리영역 중 최초의 메모리블록을 지시하는지 여부를 판단하는 단계; 및
    (b2) 상기 타겟블록지시변수가 상기 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 경우 메모리 오류로 판단하는 단계;
    를 포함하는, 메모리 오류 검출 방법.
  16. 제15항에 있어서,
    상기 (b)단계 이전에,
    (d) 상기 할당메모리영역의 메모리블록 각각에 대하여 식별부호를 할당하는 단계를 더 포함하고,
    상기 (b1) 단계에서, 상기 식별부호를 이용하여 상기 할당메모리영역 중 최초의 메모리 블록을 지시하는지 여부를 판단하는, 메모리 오류 검출 방법.
  17. 제16항에 있어서,
    하나의 상기 할당메모리영역에 포함된 상기 메모리블록 각각에 대응하는 상기 식별부호는 컴퓨터 메모리의 식별부호맵 영역에 연속적으로 저장되어 하나의 식별부호그룹을 형성하며,
    상기 (d) 단계에서,
    상기 하나의 식별부호그룹 내의 상기 식별부호는 서로 동일하고, 상기 식별부호맵 영역에서 인접하는 상기 식별부호그룹의 식별부호는 서로 상이하도록 상기 식별부호를 할당하며,
    상기 (b1)단계는,
    (b1-1) 상기 타겟블록지시변수가 지시하는 메모리블록에 대응하는 식별부호가 식별부호맵 영역에서 바로 선행하는 식별부호와 동일한지 여부를 판단하는 단계; 및
    (b1-2) 상기 (b1-1)단계에서 판단결과, 상기 식별부호가 서로 동일한 경우, 상기 타겟블록지시변수가 상기 할당메모리영역 중 최초의 메모리블록을 지시하지 않는 것으로 판단하는 단계;를 포함하는, 메모리 오류 검출 방법.
  18. 제17항에 있어서,
    상기 식별부호그룹의 식별부호는 2-비트로 표현되는 제1 내지 제3 비트값 중 하나이고,
    상기 식별부호맵 영역에서, 상기 식별부호그룹이 형성되지 않은 부분은 2-비트로 표현되는 제4 비트값이 저장되는, 메모리 오류 검출 방법.
  19. 제10항 내지 제18항 중 어느 한 항에 기재된 메모리 오류 검출 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한, 컴퓨터로 읽을 수 있는 기록매체.
KR1020070041945A 2007-04-30 2007-04-30 메모리 오류 검출 방법 KR100890546B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020070041945A KR100890546B1 (ko) 2007-04-30 2007-04-30 메모리 오류 검출 방법
US12/036,550 US7962832B2 (en) 2007-04-30 2008-02-25 Method for detecting memory error
JP2008106833A JP2008276763A (ja) 2007-04-30 2008-04-16 メモリエラーの検出法
US13/053,763 US20110173505A1 (en) 2007-04-30 2011-03-22 Method for detecting memory error

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070041945A KR100890546B1 (ko) 2007-04-30 2007-04-30 메모리 오류 검출 방법

Publications (2)

Publication Number Publication Date
KR20080096963A true KR20080096963A (ko) 2008-11-04
KR100890546B1 KR100890546B1 (ko) 2009-03-27

Family

ID=39888489

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070041945A KR100890546B1 (ko) 2007-04-30 2007-04-30 메모리 오류 검출 방법

Country Status (3)

Country Link
US (2) US7962832B2 (ko)
JP (1) JP2008276763A (ko)
KR (1) KR100890546B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013100476A1 (ko) * 2011-12-30 2013-07-04 (주)네오위즈게임즈 클라이언트 단말, 감시 서버, 및 감시 영역 변조 방지 방법
WO2019231194A1 (ko) * 2018-05-28 2019-12-05 삼성전자 주식회사 메모리 오류를 검출하는 방법 및 시스템

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010057459A1 (de) * 2008-11-24 2010-05-27 Luk Lamellen Und Kupplungsbau Beteiligungs Kg Verfahren zur inbetriebnahme und computerprogrammprodukt und vorrichtung
CN102385533A (zh) * 2010-08-30 2012-03-21 鸿富锦精密工业(深圳)有限公司 计算机及其内存运行错误时的重启方法
WO2012148841A1 (en) * 2011-04-29 2012-11-01 Google Inc. Method and apparatus for detecting memory access faults
US9113164B1 (en) 2012-05-15 2015-08-18 Google Inc. Constant bit rate control using implicit quantization values
US9510019B2 (en) 2012-08-09 2016-11-29 Google Inc. Two-step quantization and coding method and apparatus
US9407915B2 (en) 2012-10-08 2016-08-02 Google Inc. Lossless video coding with sub-frame level optimal quantization values
US9904586B2 (en) 2015-10-28 2018-02-27 Intel Corporation Interfacing with block-based storage in a processor
US9892253B1 (en) 2016-06-20 2018-02-13 Amazon Technologies, Inc. Buffer overflow exploit detection
KR101850303B1 (ko) * 2016-09-13 2018-05-31 슈어소프트테크주식회사 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
KR20180126921A (ko) * 2017-05-19 2018-11-28 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US10324659B2 (en) 2017-05-24 2019-06-18 International Business Machines Corporation Detection of over-access of memory shared among multiple processes
CN112486803A (zh) * 2020-11-12 2021-03-12 珠海格力电器股份有限公司 一种错误处理方法、装置及设备
CN112331254B (zh) * 2020-11-24 2024-08-06 北京泽石科技有限公司 非易失性存储器的试错表的生成方法及装置
US11720674B2 (en) * 2021-01-28 2023-08-08 Northrop Grumman Systems Corporation Systems and methods for malware detection

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4949326A (en) * 1986-12-10 1990-08-14 Matsushita Electric Industrial Co., Ltd. Optical information recording and reproducing system using optical disks having an error correction function
US4710934A (en) * 1985-11-08 1987-12-01 Texas Instruments Incorporated Random access memory with error correction capability
US5557622A (en) * 1990-10-01 1996-09-17 Digital Equipment Corporation Method and apparatus for parity generation
JPH06282463A (ja) * 1993-03-26 1994-10-07 Matsushita Electric Ind Co Ltd プログラムテストにおけるメモリ管理方法
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
US5644709A (en) * 1994-04-21 1997-07-01 Wisconsin Alumni Research Foundation Method for detecting computer memory access errors
US5628016A (en) * 1994-06-15 1997-05-06 Borland International, Inc. Systems and methods and implementing exception handling using exception registration records stored in stack memory
US5819252A (en) * 1996-04-10 1998-10-06 Digital Equipment Corporation Method and apparatus for handling and detecting an invalid use of a data structure
US6243845B1 (en) * 1997-06-19 2001-06-05 Sanyo Electric Co., Ltd. Code error correcting and detecting apparatus
US6035432A (en) * 1997-07-31 2000-03-07 Micron Electronics, Inc. System for remapping defective memory bit sets
TW333648B (en) * 1997-10-30 1998-06-11 Key Technology Corp The connection structure and algorithm for flash memory
US6671771B2 (en) * 1999-12-21 2003-12-30 Intel Corporation Hash CAM having a reduced width comparison circuitry and its application
US7051264B2 (en) * 2001-11-14 2006-05-23 Monolithic System Technology, Inc. Error correcting memory and method of operating same
JP2005070950A (ja) * 2003-08-21 2005-03-17 Sanyo Electric Co Ltd プログラム処理装置
KR100524992B1 (ko) * 2003-11-11 2005-10-31 삼성전자주식회사 Cd 데이터의 프레임마다 포인터를 할당하고 이를메모리에 저장하는 디스크 플레이어 및 디스크 플레이어의재생 데이터 처리 방법
US7370260B2 (en) * 2003-12-16 2008-05-06 Freescale Semiconductor, Inc. MRAM having error correction code circuitry and method therefor
KR100580071B1 (ko) * 2004-10-05 2006-05-16 주식회사 팬택앤큐리텔 메모리 오류 검출방법
JP4734003B2 (ja) * 2005-03-17 2011-07-27 富士通株式会社 ソフトエラー訂正方法、メモリ制御装置及びメモリシステム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013100476A1 (ko) * 2011-12-30 2013-07-04 (주)네오위즈게임즈 클라이언트 단말, 감시 서버, 및 감시 영역 변조 방지 방법
WO2019231194A1 (ko) * 2018-05-28 2019-12-05 삼성전자 주식회사 메모리 오류를 검출하는 방법 및 시스템
KR20190135337A (ko) * 2018-05-28 2019-12-06 삼성전자주식회사 메모리 오류를 검출하는 방법 및 시스템

Also Published As

Publication number Publication date
US7962832B2 (en) 2011-06-14
JP2008276763A (ja) 2008-11-13
KR100890546B1 (ko) 2009-03-27
US20080270855A1 (en) 2008-10-30
US20110173505A1 (en) 2011-07-14

Similar Documents

Publication Publication Date Title
KR100890546B1 (ko) 메모리 오류 검출 방법
US8245209B2 (en) Detecting dangling pointers and memory leaks within software
US5355469A (en) Method for detecting program errors
US9535613B2 (en) Hardware and software methodologies for detecting illegal memory address of a memory access operation
US8434064B2 (en) Detecting memory errors using write integrity testing
US8555255B2 (en) Method of tracing object allocation site in program, as well as computer system and computer program therefor
US8073673B2 (en) Emulated memory management
JP2005032259A (ja) 共有ライブラリーシステム及び前記システム構築方法
US10042752B2 (en) Object descriptors
US7434020B2 (en) Overwrite detection diagnostic for memory heap
US9734620B2 (en) Apparatus and method for graphics state management
US20240095174A1 (en) Method for detecting error of operating system kernel memory in real time
CN111506500B (zh) 内存泄露检测方法、装置、电子设备及可读存储介质
US10445020B2 (en) Computer-implemented method and a system for encoding a stack application memory state using shadow memory
US20040015864A1 (en) Method and system for testing memory operations of computer program
CN117785540A (zh) 内存错误检测方法、装置、设备及介质
US7350045B2 (en) Dynamic memory heap tagging
US20070136547A1 (en) Runtime detection for invalid use of zero-length memory allocations
US10229070B2 (en) Computer-implemented method and a system for encoding a heap application memory state using shadow memory
KR100580071B1 (ko) 메모리 오류 검출방법
KR20220095986A (ko) 임베디드 프로세서의 소스 코드의 컴파일링 방법 및 컴파일러
CN109923527B (zh) 可变类型建立器
Schemmel et al. KDAlloc: The KLEE Deterministic Allocator: Deterministic Memory Allocation during Symbolic Execution and Test Case Replay
CN113157513B (zh) 一种堆内存破坏检测方法、装置、电子设备及存储介质
CN117667539A (zh) 内存检测方法、装置及控制系统

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

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140319

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160203

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170316

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20200204

Year of fee payment: 12