KR20140061443A - 확장된 데이터를 갖는 메모리 덤프 및 사용자 프라이버시 보호 기법 - Google Patents

확장된 데이터를 갖는 메모리 덤프 및 사용자 프라이버시 보호 기법 Download PDF

Info

Publication number
KR20140061443A
KR20140061443A KR1020147006518A KR20147006518A KR20140061443A KR 20140061443 A KR20140061443 A KR 20140061443A KR 1020147006518 A KR1020147006518 A KR 1020147006518A KR 20147006518 A KR20147006518 A KR 20147006518A KR 20140061443 A KR20140061443 A KR 20140061443A
Authority
KR
South Korea
Prior art keywords
value
data
memory
values
redundant input
Prior art date
Application number
KR1020147006518A
Other languages
English (en)
Other versions
KR101759379B1 (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 KR20140061443A publication Critical patent/KR20140061443A/ko
Application granted granted Critical
Publication of KR101759379B1 publication Critical patent/KR101759379B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6245Protecting personal data, e.g. for financial or medical purposes
    • G06F21/6254Protecting personal data, e.g. for financial or medical purposes by anonymising data, e.g. decorrelating personal data from the owner's identification
    • 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/0706Error 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 the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error 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 the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • 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/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2143Clearing memory, e.g. to prevent the data from being stolen

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Bioethics (AREA)
  • Quality & Reliability (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Medical Informatics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명에서는 하나 이상의 소프트웨어 프로그램의 실행중에 오류를 만난 컴퓨터로부터 유용한 메모리 데이터의 트리아지 덤프를 생성하는 시스템 및 방법이 제공된다. 컴퓨터 시스템은 개인 데이터의 특징인 트리아지 덤프 내의 데이터 값을 식별할 수 있다. 소프트웨어 사용자의 프라이버시를 보호하기 위해, 개인 데이터는 중복입력 값으로 데이터 값을 중복입력함으로써 오염될 수 있다. 데이터 값을 오염하는데에 사용되는 중복입력 값은, 데이터 값 자신에 기초하거나 랜덤으로 선택되어 사전결정될 수 있다. 트리아지 덤프는 분석을 위해 하나 이상의 소프트웨어 프로그램의 개발자와 연관된 외부 서버로 전송될 수 있다. 중복입력 값이 동적으로 선택되었을 때, 사용된 특정한 중복입력 값은 트리아지 덤프와 함께 서버로 전송될 수 있다.

Description

확장된 데이터를 갖는 메모리 덤프 및 사용자 프라이버시 보호 기법{MEMORY DUMP WITH EXPANDED DATA AND USER PRIVACY PROTECTION}
현대의 컴퓨터 소프트웨어 개발자는 소프트웨어가 사용자에게 배포된 후에도 소프트웨어를 지속적으로 향상시키고 업데이트한다. 인터넷과 같은 현존하는 네트워크 인프라구조는, 필요하다면 소프트웨어 개발자가 사용자에게 빠르게 자주 소프트웨어 업데이트를 전송할 수 있게 한다. 또한 인터넷은 사용자로 하여금 소프트웨어 개발자에게 소프트웨어를 실행하는 동안 발생할 수 있는 문제점과 관련된 피드백을 제공할 수 있게 한다. 이러한 피드백은 사용자의 명확한 동작에 의해 전송되는 수동 피드백일 수 있다. 그럼에도, 일부 운영 시스템은 오류 보고 시스템의 에이전트를 포함하며, 이것은 만약 사용자가 사용자의 운영 시스템에 대해 이러한 정보를 전송하도록 동의하였다면 자동화된 피드백을 제공할 수 있다. 이러한 피드백은 소프트웨어 프로그램이 충돌(crash)하거나 단절(hang)할 시에 운영 환경에 대해 유용한 정보를 포함할 수 있으며, 소프트웨어 개발자가 소프트웨어 내의 임의의 버그를 조사하여 수리할 수 있게 한다.
운영 시스템에 의해 피드백이 자동으로 전송되었을 때, 전송된 정보는 충돌하거나 그외의 성능 문제시에 컴퓨터에서 운영 상태를 정의하도록 컴퓨터로부터 수집되는 정보의 "덤프(dump)"일 수 있다. 덤프 내에 메모리의 콘텐츠의 적어도 일부를 포함하는 것이 유용하다. 때때로 메모리 덤프로 지칭되는 이러한 정보는 특정 시간에 작동중인 메모리의 상태를 드러낸다.
메모리 덤프는 소프트웨어 개발자가 충돌 또는 단절의 원인에 대한 조사를 수행할 수 있게 한다. 그러나, 현대의 컴퓨터 시스템에서의 풀 메모리 덤프는 매우 크며, 그 안에 포함된 모든 정보가 소프트웨어 개발자에게 특히 유용한 것은 아니다. 따라서, 오직 메모리 덤프의 일부만이 전송될 수 있다.
서로 다른 양의 메모리로부터의 콘텐츠는 서로 다른 시나리오로 전송될 수 있다. 일부 시나리오에서, 오류 보고는 특정 소프트웨어 애플리케이션이 문제를 가진다고 식별하는 것을 돕기에 충분한 메모리의 콘텐츠를 포함할 수 있다. 소프트웨어는 임의의 다수의 문제를 가질 수 있다. 예를 들어 성능, 신뢰성, 안정성, 보안 또는 호환가능성에 대한 문제들이 존재할 수 있다. 이러한 덤프는 종종 "트리아지 덤프(triage dump)"로 지칭된다. 트리아지 덤프에 대한 분석에 기초하여, 소프트웨어 개발자는 오류 보고에 포함하기 위한 보다 자세한 정보를 수집하기 위해 오류 보고 시스템을 구성할 수 있다.
본 명세서에는 오류 보고 시스템의 일부로서 사용자의 컴퓨터로부터 메모리 덤프 데이터를 전송하는 기술이 개시되었다. 메모리 덤프는, 사용자-특정 개인 정보가 메모리 덤프 데이터 내에 포함되었다는 위험을 감소시키는 동시에 운영 오류의 원인을 식별하는데에 유용한 정보를 포함할 수 있다. 사용자-특정 개인 데이터가 메모리 덤프 내에 포함되어 있다는 위험을 감소시키기 위해, 개인 데이터의 데이터 특징을 포함하는 메모리의 부분은 해당 데이터 값을 중복입력 값(overwrite value)으로 중복입력함으로써 "오염(poison)"된다.
중복입력 값은 오류의 원인을 식별하는 메모리 덤프 데이터의 값을 증가시키도록 선택될 수 있다. 일부 실시예에서, 중복입력 값은
중복입력된 메모리 위치와 중복입력되지 않고 정보가 유지된 메모리 위치 사이의 구별을 가능하게 하도록 선택될 수 있다. 일부 실시예에서, 포인터의 데이터 값 특징은 중복입력되지 않고 메모리 덤프 내에 유지되며, 중복입력 값은 가능한 포인터 값과 상이한 것으로 선택된다. 특정 예시로서, 중복입력 값은 값이 중복입력된 위치와 널 포인터(null pointer)를 저장하는 위치 사이의 구별을 가능하게 하도록 선택될 수 있다.
일부 실시예에서, 중복입력 값은 중복입력되는 데이터 값의 사전결정된 함수로서 선택될 수 있다. 일부 실시예에서, 중복입력 값은 랜덤으로 선택될 수 있다.
일부 실시예에서, 컴퓨터 시스템은 컴퓨터 프로그램 충돌(crash) 또는 단절(hang)에 응답하여 트리아지 덤프를 생성하도록 트리아지 덤핑 엔진을 이용한다. 트리아지 덤핑 엔진의 식별 엔진은 개인 정보의 특징인 복수의 데이터 값을 식별한다. 중복입력 엔진은 각각의 식별된 데이터 값을 중복입력 값으로 중복입력한다. 중복입력 값은 널 포인터 값으로서 컴퓨터 시스템에 의해 사용되는 값과 일치하지 않을 수 있다. 트리아지 덤프가 생성되면, 이것은 외부 서버로 전송될 수 있다.
일부 실시예에서, 중복입력 값은 중복입력되는 데이터에 기초하여 결정될 수 있다. 예를 들어, 만약 중복입력되는 데이터 값이 제 1 사전결정된 범위 내에 포함되면, 중복입력 엔진은 해당 데이터 값을 제 1 중복입력 값으로 중복입력할 수 있다. 반면에, 만약 중복입력되는 데이터 값이 제 2 사전결정된 범위 내에 포함되면, 중복입력 엔진은 해당 데이터 값을 제 2 중복입력 값으로 중복입력할 수 있다.
일부 실시예에서, 선택 엔진은 중복입력 값을 결정한다. 선택 엔진은 다양한 중복입력 값들을 선택하도록 난수 생성기를 이용할 수 있다. 중복입력된 데이터 값과 그에 상응하는 중복입력 값은 데이터 값이 오염된 방식의 맵핑을 추적하는 테이블 내에 저장될 수 있다. 중복입력 값을 포함하는 테이블의 일부는 사용자의 프라이버시를 타협하지 않고 트리아지 덤프를 분석하기 위해 사용되는 추가적인 정보를 제공하도록 외부 서버로 전송될 수 있다.
일부 실시예에서, 서버는 원격 컴퓨터로부터 트리아지 덤프를 수신한다. 트리아지 덤프는 프로그램 충돌 및 단절의 원인을 분석하는데에 유용한 포인터 데이터를 포함한다. 트리아지 덤프는 또한 개인 데이터의 전파를 방지하기 위해 중복입력 값으로 중복입력된 잠재적인 개인 정보를 나타내는 오염된 데이터 값을 포함할 수 있다. 트리아지 덤프는 또한 널 포인터 데이터를 포함할 수 있으며, 데이터 값은 널 포인터 값을 이용하여 절대 오염되지 않기 때문에 오염된 데이터로부터 구별가능하다.
일부 실시예에서, 서버는 트리아지 덤프의 데이터를 오염시키는데에 사용되는 중복입력 값을 포함하는 값들의 리스트를 수신한다. 각각의 중복입력 값은 문제점과 마주친 프로그램의 호출 스택을 통해 추적될 수 있다. 이것은 소프트웨어 개발자로 하여금 소프트웨어 개발자에게 실제 데이터 값을 드러내지 않고 프로그램 내의 함수가 처음에 사용된 데이터 값을 식별할 수 있게 한다. 이는 데이터 값이 개인 정보의 특징이었을 경우, 사용자의 프라이버시를 보호할 수 있다.
트리아지 덤프를 생성, 전송 및 수신하는 일부 방법들이 컴퓨터 판독가능한 저장 디바이스 상에 저장된 명령을 실행하는 컴퓨터 시스템의 프로세서에 의해 실행될 수 있다.
전술된 내용은 본 발명의 비제한적인 요약이며, 본 발명은 첨부된 특허청구범위에 의해서 정의된다.
첨부된 도면은 실제 축척대로 도시되지 않았다. 도면들에서, 다양한 도면에 도시된 각각의 동일한 또는 거의 동일한 구성요소는 동일한 참조번호에 의해 표현된다. 간결성을 위해서, 모든 구성요소가 모든 도면에서 라벨링되지 않았을 수 있다.
도 1은 트리아지 덤프가 소프트웨어 개발자에게 전송될 수 있는 예시적인 네트워크 환경의 단순화된 블록도;
도 2는 본 발명의 실시예가 동작할 수 있는 예시적인 컴퓨팅 환경의 블록도;
도 3은 도 2의 운영 시스템의 단순화된 블록도;
도 4는 본 발명의 실시예를 구현할 수 있는 컴퓨터 시스템의 예시적인 메모리의 개략도;
도 5a는 도 4의 예시적인 메모리를 테이블에 도시한 도면;
도 5b는 본 발명의 일 실시예에 따라 개인 정보를 포함했을 수 있는 데이터 값을 오염한 후의 도 4의 예시적인 메모리를 도시한 도면;
도 5c는 본 발명의 일 실시예에 따라 개인 정보를 포함했을 수 있는 데이터 값을 오염한 후의 도 4의 예시적인 메모리를 도시한 도면;
도 6은 트리아지 덤프를 생성하는 일 실시예의 개략적인 순서도;
도 7은 난수 생성기를 사용하여 트리아지 덤프를 생성하는 일 실시예의 개략적인 순서도.
본 발명인은 오류 보고 시스템의 일부로서 메모리 덤프를 수집하는 개선된 기술이, 사용자의 프라이버시 및 개인 정보에 대한 위험을 증가시키지 않고 오류를 진단하는 상당한 추가 정보를 제공할 수 있음을 인식하였으며 이해하였다. 프라이버시를 보호하기 위해서, 만약 오류 보고 시스템에 의해 전송된 메모리 덤프의 소정의 데이터 값이 개인 정보의 특징이라면, 이 데이터 값은 오염되어야 할 수 있다. "오염(poisoning)"은 중복입력 값으로 데이터 값을 중복입력하는 것을 포함할 수 있다. 패스워드 또는 신용카드 정보와 같은 개인 데이터를 오염시키는 것은, 개인 정보가 오류 분석과 거의 관련이 없기 때문에, 메모리 덤프 데이터를 분석하는 소프트웨어 개발자 능력에 영향을 미치지 않을 가능성이 높다. 통상적인 오류 보고 시스템은 특히 트리아지 덤프를 형성하도록 구성되었을 때, 임의의 값의 개인 정보의 특징을 오염시킬 수 있다.
그러나, 발명인은 유지되는 다른 정보를 모호하게 하지 않는 값들로 메모리 덤프가 오염(poison)되는 것이 유용함을 추가로 인식하였다. 따라서, 중복입력 값이 유지되는 임의의 값과는 상이하게 선택될 수 있다. 특정 예시로서, 중복입력 값은 널 포인터 값과 오염된 데이터 값 사이를 구별하도록 선택될 수 있다. 따라서 일부 실시예에서, 널 포인터 값은 데이터 값을 오염시키기 위한 중복입력 값으로 사용되지 않는다. 그러나 다른 실시예에서는, 포인터 또는 값이 유지되는 다른 유형의 데이터의 의미있는 값이거나 그럴 가능성이 높은 임의의 값과 상이하게 중복입력 값이 선택될 수 있다.
발명인은 중복입력된 값들이 메모리 덤프로부터 복구될 수 없다고 할지라도 중복입력된 값들에 대한 정보를 유지하는 방식으로 오염되는 것이 메모리 덤프에 유용하다고 추가로 인식하였다. 따라서, 중복입력 값은 중복입력된 값에 부분적으로 기초하여 선택될 수 있다. 그러나, 중복입력된 값이 중복입력 값으로부터 복구가능하지 않은 방식으로 선택이 이루어질 수도 있다. 일부 실시예에서, 중복입력된 값과 중복입력 값 사이의 다 대 일(many to one) 관계로 인해, 중복입력된 값은 복구가능하지 않을 수도 있다. 이러한 시나리오는, 예를 들어 중복입력 값이 각각의 값들의 범위와 연관되고, 각 범위 내의 임의의 값을 중복입력하도록 동일한 값이 사용되었을 때 발생할 수 있다. 특정 예시로서, 서로 다른 중복입력 값은 큰 음의 수, 큰 양의 수 및 다른 값을 식별하도록 사용될 수 있다. 이러한 중복입력 값 할당 방안은, 예를 들어 오버런(overrun) 또는 언더런(underrun) 오류를 나타내는 값들을 식별하기 위한 충돌 덤프에 대한 분석일 수 있다.
일부 실시예에서, 중복입력된 값과 중복입력 값 사이의 랜덤한 관계로 인해, 중복입력된 값이 복구가능하지 않을 수도 있다. 이러한 시나리오는 값들과 중복입력 값들 사이의 랜덤 맵핑(random mapping)이 생성되었을 때 발생할 수 있다. 이러한 맵핑은 메모리 덤프 내의 동일한 값의 복수의 인스턴스를 식별하는데에 유용할 수 있으며, 예를 들어 해당 변수의 값을 드러내지 않고 호출 스택 상의 함수를 통과한 특정 변수를 추적하도록 사용될 수 있다.
중복입력 값이 동적으로 결정되는 시나리오에서, 선택된 중복입력 값 또는 값들이 오류 보고의 분석을 용이하게 하도록 오류 보고의 일부로서 또는 그와 결합하여 전달될 수 있다. 예를 들어, 랜덤 맵핑에서 랜덤으로 선택된 값들의 세트가, 이들이 중복입력하는 연관된 값들 없이 전달될 수 있다.
도 1은 트리아지 덤프(triage dump)가 소프트웨어 사용자(115)로부터 소프트웨어 개발자(135)로 전송될 수 있는 예시적인 네트워크 환경(100)을 도시한다. 소프트웨어 사용자(115)와 연관된 컴퓨터 시스템(110)은 충돌(crash)하거나 단절(hang)하는 프로그램을 실행할 수 있다. 프로그램은 임의의 유형의 컴퓨터 프로그램일 수 있다. 예를 들어, 이것은 애플리케이션 프로그램 또는 운영 시스템 프로그램일 수 있다. 일부 경우에서, 이것은 운영 시스템의 커널(kernel)과 연관된 프로그램일 수 있다. 그럼에도, 오류 정보가 수집된 특정 구성요소가 본 발명에서는 중요하지 않다.
정보가 수집된 오류의 유형 또한 본 발명에서 중요하지 않다. 예를 들어, 충돌은 예상치 않게 종료하는 프로그램을 지칭한다. 만약 프로그램 내의 오류가 커널의 중요 구성요소를 방해한다면, 프로그램 충돌은 전체 컴퓨터 시스템(110)의 충돌을 발생시킬 수 있다. 다른 한편으로, 단절은 프로그램이 계속 구동하지만 사용자 입력에 응답하는데에 실패하고 프리즈(freeze)된 것으로 나타나는 경우이다. "단절(hang)" 및 "프리즈"와 같은 용어들은 때대로 상호교환적으로 사용된다. 오류 정보는 충돌, 단절 및 임의의 다른 적절한 유형의 오류에 응답하여 수집될 수 있다. 이러한 오류들은 당업계에서 알려진 기술을 이용하는 것을 포함하여 임의의 적절한 방식으로 검출될 수 있다. 일부 실시예에서, 정보가 수집되게 하는 오류는 임의의 예상치 못한 또는 의도하지 않은 결과일 수 있다. 예를 들어, 오류는 프로그램이 수행 관련 문제에 맞닥뜨리거나 적절하게 응답하지 않을 때 발생할 수 있다.
프로그램 충돌 및 단절은 다양한 원인으로 발생할 수 있다. 예를 들어, 개발자에 의해 고려되지 않은 부적절한 데이터 값이 충돌 또는 단절을 발생시킬 수 있다. 예를 들어, 널 포인터(null pointer)의 전달이 충돌을 발생시킬 수 있다. 값이 자신의 가변 유형에 대해 허용된 최대값을 능가하며 음의 값으로서 해석되는 오류 둘레의 랩핑(wrap)이 충돌 또는 단절의 원인일 수 있다. 본 발명의 실시예는 충돌 또는 단절에 대한 임의의 특정한 원인으로 한정되지 않는다.
프로그램이 충돌 또는 단절할 때, 컴퓨터 시스템(110)은 트리아지 덤프(140)의 생성을 개시할 수 있다. 트리아지 덤프(140)는 충돌 또는 단절의 원인을 분석하기 위해 소프트웨어 개발자(135)에 의해 사용될 수 있는 컴퓨터 시스템(110)의 메모리의 작은 부분의 덤프이다. 덤프된 메모리의 특정 부분은 호출 스택(call stack)을 홀딩하도록 사용되는 메모리를 포함할 수 있다. 예를 들어, 트리아지 덤프(140)는 50KB보다 작은 크기일 수 있다. 일부 실시예에서, 트리아지 덤프(140)는 10-20KB일 수 있다. 트리아지 덤프 내에 포함된 메모리의 특정 부분은 당업계에서 알려져 있는 기술을 이용하는 것을 포함하는 임의의 적절한 방식으로 선택될 수 있으며, 임의의 적절한 크기일 수 있다.
작은 트리아지 덤프 크기는 트리아지 덤프(140)가 네트워크(120) 상에서 빠르고 쉽게 전송될 수 있게 한다. 컴퓨터 네트워크(120)는 임의의 유형의 네트워크일 수 있다. 일부 실시예에서, 네트워크(120)는 인터넷이다.
트리아지 덤프는 이 예시에서 네트워크(120)에 접속된 서버(150)인 임의의 적절한 위치에서 수신될 수 있다. 서버(150)는 복수의 사용자로부터 트리아지 덤프를 수신하도록 구성될 수 있다. 이러한 정보는 컴퓨터(110) 및 유사한 오류를 보고하는 다른 유사한 컴퓨터들 상에서 실행할 수 있는 구성요소가 갖는 하나 이상의 가능한 문제점을 식별하도록 종합되어 프로세싱될 수 있다. 오류가 특정한 소프트웨어 구성요소와 연관되었을 때, 오류 정보는 해당 구성요소의 개발자에게 제공될 수 있다.
따라서, 소프트웨어 개발자(135)는 서버(150)로부터 오류의 표시를 수신할 수 있다. 소프트웨어 개발자(135)는 오류의 원인을 조사하기 위해서 서버(150)에 저장된 데이터에 액세스하도록 컴퓨터(130)를 사용할 수 있다. 예를 들어, 소프트웨어 개발자(135)는 트리아지 덤프(140)의 생성을 발생시킨 충돌 또는 단절의 원인을 식별하기 위해서 소프트웨어의 하나 이상의 사용자(115)에 의해 전송된 하나 이상의 트리아지 덤프(140)를 분석할 수 있다.
일부 실시예에서, 소프트웨어 개발자(135)는 추가의 정보 및 더욱 자세한 분석을 요구하는 소프트웨어의 문제가 존재한다고 결정할 수 있다. 소프트웨어 개발자(135)는, 만약 유사한 충돌 또는 단절이 발생한다면 컴퓨터(110)가 보다 자세한 메모리 덤프를 소프트웨어 개발자(135)에게 보내기 위한 승인을 사용자(115)에게 요청할 수 있다고 사용자의 컴퓨터(110)에 통지할 수 있다. 예를 들어, 사용자(115)에게 개인 정보를 포함할 수 있는 더욱 큰 메모리 덤프를 전송하기 위한 승인이 요청될 수 있다. 만약 사용자가 거부하면, 더 큰 메모리 덤프는 전송되지 않는다. 본 발명의 실시예는 트리아지 덤프(140) 또는 더 큰 메모리 덤프의 특정한 구현으로 한정되지 않는다.
도 2는 본 발명이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(200)의 예시를 도시한다. 예를 들어, 컴퓨팅 환경(200)은 사용자의 컴퓨터(110), 소프트웨어 개발자의 컴퓨터(130) 또는 오류 보고 시스템의 서버(150)일 수 있는 컴퓨터(210)를 포함한다.
컴퓨팅 시스템 환경(200)은 단지 적절한 컴퓨팅 환경의 일 예시이며 본 발명의 용도 또는 기능의 범주와 관련된 어떠한 제한을 제안하기 위한 것은 아니다. 컴퓨팅 환경(200)이 예시적인 운영 환경(200)에 도시된 임의의 하나의 구성요소 또는 구성요소들의 조합과 관련한 임의의 종속성 또는 필요조건을 갖는 것으로 해석되어서는 안된다.
본 발명은 다수의 다른 범용 또는 전용 컴퓨팅 시스템 환경 또는 구성과 동작가능하다. 본 발명과 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 구성의 예시는, 개인 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 디바이스, 태블릿, 모바일폰, 멀티프로세서 시스템, 마이크로프로세서-기반 시스템, 셋톱박스, 프로그램가능한 소비자 전자기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 전술된 임의의 시스템 또는 디바이스를 포함하는 분산 컴퓨팅 환경 등을 포함하지만, 이것으로 한정되는 것은 아니다.
컴퓨팅 환경은 프로그램 모듈과 같은 컴퓨터 실행가능한 명령을 실행할 수 있다. 일반적으로, 프로그램 모듈은 특정한 태스크를 수행하거나 또는 특정한 추출 데이터 유형을 구현하는 루틴, 프로그램, 객체, 구성요소, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크를 통해 링크된 원격 프로세싱 디바이스에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시될 수도 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 디바이스를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치될 수 있다.
도 2를 참조하면, 본 발명을 구현하는 예시적인 시스템이 컴퓨터(210)의 형태인 범용 컴퓨팅 디바이스를 포함한다. 컴퓨터(210)의 구성요소는 프로세싱 유닛(220), 시스템 메모리(230) 및 시스템 메모리를 포함하는 다양한 시스템 구성요소들을 프로세싱 유닛(220)에 연결하는 시스템 버스(221)를 포함할 수 있지만, 이것으로 제한되는 것은 아니다. 시스템 버스(221)는 메모리 버스 또는 메모리 컨트롤러, 주변기기 버스 및 임의의 다양한 버스 아키텍처를 이용하는 로컬 버스를 포함하는 다수의 유형의 임의의 버스 구조일 수 있다. 예시로서, 이러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 개선된 ISA(EISA) 버스, 비디오 전자기기 표준 협회(VESA) 로컬 버스 및 메자닌(Mezzanine) 버스로도 알려진 주변기기 구성요소 상호접속(PCI) 버스를 포함하지만, 이것으로 한정되는 것은 아니다. 또한 예시적인 시스템은 시스템 온 칩(SoC)을 이용하여 구현될 수도 있다.
컴퓨터(210)는 전형적으로 다양한 컴퓨터 판독가능한 매체를 포함한다. 컴퓨터 판독가능한 매체는 컴퓨터(210)에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있으며, 휘발성 및 비휘발성 매체, 제거가능 및 제거불가능 매체를 모두 포함한다. 예시로서, 컴퓨터 판독가능한 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있지만, 이것으로 한정되지 않는다. 컴퓨터 저장 매체는 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 제거가능 및 제거불가능 매체 모두를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD 또는 다른 광학 디스크 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 다른 자기 스토리지 디바이스, 또는 원하는 정보를 저장하도록 사용될 수 있고 컴퓨터(210)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이것으로 한정되는 것은 아니다. 통신 매체는 전형적으로 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈 또는 반송파 또는 다른 수송 메커니즘과 같은 변조된 데이터 신호 내의 다른 데이터를 구현하며, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호(modulated data signal)"이라는 용어는 신호 내의 정보를 인코딩하는 것과 같은 방식으로 자신의 하나 이상의 특징이 설정 또는 변경된 신호를 의미한다. 예시로서, 통신 매체는 유선 네트워크 또는 다이렉트-유선 접속과 같은 유선 매체 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함하지만, 이것으로 한정되는 것은 아니다. 전술된 것들의 임의의 조합 역시 컴퓨터 판독가능한 매체의 범주 내에 포함되어야만 한다.
시스템 메모리(230)는 판독 전용 메모리(ROM)(231) 및 랜덤 액세스 메모리(RAM)(232)와 같은 휘발성 및/또는 비휘발성 메모리의 형태인 컴퓨터 저장 매체를 포함한다. 트리아지 덤프(140)는 ROM(231) 또는 RAM(232), 또는 둘 모두 내에 저장된 데이터를 포함할 수 있다. 예컨대 스타트업(start-up) 동안 컴퓨터(210) 내의 요소들 사이에서 정보를 전달하는 것을 돕는 베이직 루틴을 포함하는 베이직 입력/출력 시스템(233)(BIOS)은 전형적으로 ROM(231) 내에 저장된다. RAM(232)은 전형적으로 프로세싱 유닛(220)에 즉시 액세스가능하고 및/또는 프로세싱 유닛(220)에 의해 현재 동작되는 데이터 및/또는 프로그램 모듈을 포함한다. 예시로서, 도 2는 운영 시스템(234), 애플리케이션 프로그램(235), 다른 프로그램 모듈(236) 및 프로그램 데이터(237)를 도시하며, 이들은 충돌 또는 단절할 수 있고 컴퓨터(210)가 트리아지 덤프를 생성하게 할 수 있다. 운영 시스템(OS)(234)의 추가적인 측면들이 도 3과 관련하여 논의될 것이다.
컴퓨터(210)는 또한 다른 제거가능/제거불가능, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 단지 예시로서, 도 2는 제거 불가능한 비휘발성 자기 매체로 또는 그로부터 입력 또는 판독하는 하드 디스크 드라이브(241), 제거가능한 비휘발성 자기 디스크(252)로 또는 그로부터 입력 또는 판독하는 자기 디스크 드라이브(251) 및 CD-ROM 또는 다른 광학적 매체와 같은 제거가능한 비휘발성 광학적 디스크(256)로 또는 그로부터 입력 또는 판독하는 광학적 디스크 드라이브(255)를 도시한다. 예시적인 운영 환경에서 사용될 수 있는 다른 제거가능/제거 불가능, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고체 상태 RAM, 고체 상태 ROM 등을 포함하지만, 이것으로 한정되는 것은 아니다. 하드 디스크 드라이브(241)는 전형적으로 인터페이스(240)와 같은 제거 불가능한 메모리 인터페이스를 통해 시스템 버스(221)로 접속되며, 자기 디스크 드라이브(251) 및 광학 디스크 드라이브(255)는 전형적으로 인터페이스(250)와 같은 제거가능한 메모리 인터페이스에 의해 시스템 버스(221)로 접속된다.
전술되고 도 2에 도시된 드라이브 및 그와 연관된 컴퓨터 저장 매체는 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈 및 컴퓨터(210)를 위한 다른 데이터의 저장을 제공한다. 도 2에서, 예를 들어 하드 디스크 드라이브(241)가 운영 시스템(244), 애플리케이션 프로그램(245), 다른 프로그램 모듈(246) 및 프로그램 데이터(247)를 저장하는 것으로 도시되었다. 이러한 구성요소들은 운영 시스템(234), 애플리케이션 프로그램(235), 다른 프로그램 모듈(236) 및 프로그램 데이터(237)와 동일하거나 또는 상이할 수 있다. 운영 시스템(244), 애플리케이션 프로그램(245), 다른 프로그램 모듈(246) 및 프로그램 데이터(247)에는 최소한 이들이 서로 다른 카피들이라는 것을 예시하기 위해서 본 명세서에서 서로 다른 참조번호가 주어졌다. 사용자는 키보드(262) 및 흔히 마우스, 트랙볼 또는 터치패드로 지칭되는 포인팅 디바이스(261)와 같은 입력 디바이스를 통해 컴퓨터(210)에 커맨드 및 정보를 입력할 수 있다. (도시되지 않은) 다른 입력 디바이스는 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너 등을 포함할 수 있다. 이러한 입력 디바이스와 다른 입력 디바이스가 종종 시스템 버스에 연결된 사용자 입력 인터페이스(260)를 통해 프로세싱 유닛(220)에 접속되지만, 병렬 포트, 게임 포트 또는 USB와 같은 버스 구조 및 다른 인터페이스에 의해서 접속될 수도 있다. 모니터(291) 및 다른 유형의 디스플레이 디바이스 또한 비디오 인터페이스(290)와 같은 인터페이스를 통해서 시스템 버스(221)로 접속된다. 모니터에 더하여, 컴퓨터는 출력 주변기기 인터페이스(295)를 통해 접속될 수 있는 스피커(297) 및 프린터(296)와 같은 다른 주변기기 출력 디바이스도 포함할 수 있다.
컴퓨터(210)는 원격 컴퓨터(280)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 이용하여 네트워킹된 환경에서 동작할 수 있다. 원격 컴퓨터(280)는 개인 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 디바이스 또는 다른 공동 네트워크 노드일 수 있으며, 전형적으로 컴퓨터(210)와 관련하여 전술된 요소들 전부 또는 다수를 포함하지만, 도 2에는 오직 메모리 저장 디바이스(281)만이 도시되었다. 도 2에 도시된 논리적 접속은 로컬 영역 네트워크(LAN)(271) 및 광역 네트워크(WAN)(273)를 포함하지만, 다른 네트워크도 포함할 수 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔하게 사용된다. 도 1에 도시된 바와 같이, 원격 컴퓨터(280)는 소프트웨어 개발자의 컴퓨터(130) 또는 서버(150)일 수 있다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(210)는 네트워크 인터페이스 또는 어댑터(270)를 통해 LAN(271)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(210)는 전형적으로 모뎀(272) 또는 인터넷과 같이 WAN(273) 상에서 통신을 확립하기 위한 다른 수단을 포함한다. 내부에 있을 수 있거나 외부에 있을 수 있는 모뎀(272)은 사용자 입력 인터페이스(260) 또는 다른 적절한 메커니즘을 통해 시스템 버스(221)에 접속될 수 있다. 네트워킹된 환경에서, 컴퓨터(210)와 관련하여 도시된 프로그램 모듈 또는 그의 일부분이 원격 메모리 저장 디바이스 내에 저장될 수 있다. 예시로서, 도 2는 메모리 디바이스(281) 상에 존재하는 것으로서 원격 애플리케이션 프로그램(285)을 도시한다. 도시된 네트워크 접속이 예시적인 것이며 컴퓨터들 사이의 통신 링크를 확립하기 위한 다른 수단이 사용될 수 있음을 이해할 것이다.
도 3은 오류 보고 시스템의 일부 실시예에서 사용될 수 있는 운영 시스템(OS)(234)의 일부 구성요소를 도시한다. 예를 들어, 운영 시스템(OS)(234)은 애플리케이션 프로그램(235)과 같은 소프트웨어가 RAM(232)과 상호작용하고 RAM(232)을 이용하는 방식을 제어할 수 있는 메모리 관리자(390)를 구비할 수 있다. 메모리 관리자(390)는 RAM(232)의 어느 부분이 주어진 애플리케이션 프로그램(235)에 할당되는지를 제어할 수 있다. OS(234)는 또한 트리아지 덤프를 생성하기 위한 트리아지 덤핑 엔진(triage dumping engine)(310)을 구비할 수 있다. 일부 실시예에서, 트리아지 덤핑 엔진(310)은 메모리 매니저(390)의 일부일 수 있다.
일부 실시예에서, 트리아지 덤핑 엔진(310)은 프로세싱 유닛(220) 상에서 실행하는 하나 이상의 소프트웨어 프로그램의 실행중에 마주친 문제점에 기초하여 트리아지 덤프의 생성을 개시한다. 본 발명의 실시예는 임의의 특정 유형의 문제로 제한되지 않는다. 예를 들어, 프로그램이 갖는 문제점은 프로그램이 예기치 않게 실행을 종료하는 프로그램 충돌에 의한 것일 수 있다. 일부 실시예에서, 프로그램이 갖는 문제점은 프로그램이 계속 실행하고 있지만 사용자(115)로부터의 커맨드에 대한 응답을 중지하는 프로그램 단절일 수 있다. 일부 실시예는 충돌 또는 단절보다 덜 심각한 문제점들에 기초하여 트리아지 덤프의 생성을 시작할 수 있다. 예를 들어, OS(234)의 구성요소, 애플리케이션 프로그램(235), 또는 다른 프로그램 모듈(236)과 같이 컴퓨터(210) 상에서 실행하는 프로그램은 트리아지 덤핑 엔진(310)에 임의의 사전-프로그램된 상태에 기초하여 덤프를 시작하도록 명령할 수 있다.
트리아지 덤핑 엔진(310)은 개인 정보의 특징인 시스템의 메모리 내의 데이터 값을 식별하기 위한 식별 엔진(320)을 포함할 수 있으며, 따라서 오염(poison) 되어야만 한다. 프라이버시에 대한 우려 없이 데이터 값이 개인 정보 또는 데이터인지 여부에 대해 명확해지는 것은 어려울 수 있다. 일부 실시예에서, 이것은 메모리 덤프의 프로세싱이 수행되지 거의 또는 전혀 수행되지 않기 때문이다. 사용자의 컴퓨터(110) 상의 메모리 덤프를 분석하는 것은 상당한 리소스를 필요로 할 수 있고 그 결과 감소된 성능을 나타낼 수 있다. 따라서, 프로세싱 및 분석은 소프트웨어 개발자의 컴퓨터(130)로 오프로드(offloaded)된다. 그러나 메모리 덤프 데이터의 프로세싱을 오프로드하는 것은 사용자의 컴퓨터(110)가 맥락에 대한 고려 없이 기본적으로 숫자열(string of numbers)만 보게 할 수 있다. 이러한 숫자열로부터, 특정한 데이터 값이 개인 정보인지를 식별 엔진(320)이 명확하게 확인할 수 없을 수도 있다. 그러나, 식별 엔진(320)은 특정 데이터 값이 개인 정보의 특징을 갖는다는 결정을 할 수 있다. 적절한 기준이 개인 정보의 특징을 정의하는데에 사용될 수 있다. 일부 실시예에서, 개인 정보가 다른 식별가능한 유형을 갖지 않는 값들과는 다른 값들에 의해서 특징화될 수 있다. 예를 들어 일부 실시예에서, 포인터일 가능성이 높은 값들은 자신이 포인터가 유효하게 포인팅할 수 있는 메모리 어드레스의 범위 내에 있는지 여부에 기초하여 식별될 수 있다. 다른 값들은 특징화 개인 정보로서 처리될 수 있다. 그러나, 개인 정보의 특징인 데이터 값을 식별하는 일부 실시예가 컴퓨터(110)의 예시적인 메모리(400)를 도시하는 도 4와 관련하여 기술될 것이다.
일부 실시예에서, 메모리(400)는 각각의 어드레스(450) 및 데이터 값(440)과 연관된 복수의 메모리 위치를 포함한다. 메모리 위치의 오직 일부만이 도 4에 도시되었으며, 메모리의 구현은 설명을 간단하게 하기 위해 단순화되었다. 예를 들어, 각각의 메모리 위치는 범위 000부터 999까지의 어드레스와 연관된다. 당업자는 실제 메모리(400) 내에 훨씬 더 큰 수의 메모리 위치가 존재할 수 있으며 메모리 위치는 임의의 적절한 방식으로 어드레스될 수 있음을 인식할 것이다. 예를 들어, 메모리 위치는 32비트 또는 64비트 어드레스인 어드레스를 가질 수 있다. 당업자는 또한 메모리(400)가 OS(234)의 메모리 관리자(390)에 의해 구현되는 가상 메모리일 수 있음을 인식할 것이다.
설명을 위해서, 도 4는 범위 000에서부터 999까지의 십진수로서의 각각의 메모리 위치 내에 가지고 있는 데이터 값(440)을 도시한다. 그러나, 본 발명의 실시예가 이렇게 한정되는 것은 아니며, 데이터 값(440)은 임의의 적절한 값의 범위를 갖는 임의의 적절한 방식으로 구현될 수 있다. 예를 들어, 데이터 값(440)은 32비트 또는 64 비트 어드레스일 수 있다. 일부 실시예에서, 때때로 "워드 사이즈(word size)"로 지칭되는 데이터 값(440)의 크기는 메모리 위치 어드레스(450)의 크기와 동일하다.
단순화를 위해서, 모든 데이터 값(440)이 모든 메모리 위치에 대해서 도시되지는 않았다. 그러나, 데이터 값(440)의 일부가 어드레스 500 내지 507을 갖는 메모리 위치 내에 도시되었다. 예를 들어, 어드레스 502를 갖는 메모리 위치는 데이터 값 203을 갖는다.
덤프된 메모리(400)의 메모리 위치는 트리아지 덤프의 크기를 감소시키기 위해서 크기가 제한될 수 있다. 어떤 메모리 위치가 덤프되는지에 대한 제한이 임의의 방식으로 구현될 수 있으며, 본 발명의 실시예는 임의의 특정한 기술로 한정되지 않는다. 예를 들어 일부 실시예에서, 오직 충돌되거나 단절된 프로그램과 연관된 메모리만이 덤프된다. 일부 실시예에서, 트리아지 덤프는 프로그램의 호출 스택(call stack)(430)을 보유하는 메모리(400)의 부분 또는 트리아지 덤프의 생성을 시작하게 하는 문제점에 부딪힌 프로그램에 대한 데이터를 보유하는 호출 스택의 일부만으로 제한될 수 있다. 그럼에도, 덤프된 메모리의 양과 이것이 선택되는 방식이 본 발명에 있어서 중요하지 않으며, 당업자에게 알려진 기술을 이용하여, 또는 임의의 다른 적절한 방식으로 결정될 수 있다.
트리아지 덤프를 생성하도록 덤프된 메모리의 양과 무관하게, 개인 정보로서 특징화된 값이 식별 엔진(320)에 의해 식별될 수 있다. 일부 실시예에서, 식별 엔진(320)은 포인터의 특징을 갖는 데이터 값(440)을 식별할 수 있다. 포인터인 데이터 값은 트리아지 덤프를 분석하는 프로세스에서 유용하다. 따라서, 포인터의 데이터 값(440) 특징은 트리아지 덤핑 엔진(310)에 의해 오염되지 않아야 한다. 전술된 바와 같이, 사용자의 컴퓨터(110)는 메모리 덤프의 철저한 분석을 수행하지 않으며, 따라서 맥락에 대한 고려 없이 덤프를 단지 정수열로서 볼 뿐이다. 따라서, 식별 엔진(320)은 특정한 데이터 값이 포인터라는 것을 명확하게 식별할 수 없지만, 특정한 데이터 값이 포인터의 특징이라는 것을 결정할 수 있다.
데이터 값이 포인터의 특징이라는 결정은 임의의 적절한 방식으로 수행될 수 있다. 예를 들어, 데이터 값은 이것이 포인터인 것처럼 처리될 수 있으며, 데이터 값이 포인팅하는 메모리 위치가 조사될 수 있다. 예를 들어, 만약 데이터 값이 프로그램 코드(410), 라이브러리 코드(420), 또는 호출 스택(430)과 연관된 메모리 위치를 포인팅하면, 데이터 값이 유지될 수 있으며 중복입력되지 않는다. 일부 실시예에서, 만약 데이터 값이 프로그램 코드, 라이브러리 코드, 또는 호출 스택과 연관된 메모리 위치를 포인팅하면, 데이터 값이 유지될 수 있으며 중복입력되지 않는다. 일부 실시예에서, 관련 데이터는 이와 다르게 또는 추가적으로 커널-모드 객체 또는 힙 데이터(heap data)에 대한 핸들과 같은 다른 유형의 포인터를 포함할 수 있다. 이러한 기술을 이용하여 보관되는 모든 데이터 값이 반드시 포인터여야만 할 필요는 없으며, 메모리 위치가 포인터를 보유하는지 여부가 수용가능한 레벨의 정확도로 결정될 수 있다. 그럼에도, 아마도 덤프 데이터에 대한 보다 철저한 분석을 수행하기 위해, 트리아지 덤프 내에서 유지될 값인지 그리고 반대로 어떤 값이 중복입력될지를 결정하기 위해 다른 실시예에서 다른 기술이 사용될 수 있음이 이해되어야만 한다.
일부 실시예에서, 개인 정보가 아닌 것으로 알려진 변수가 오염되지 않은 채로 남을 수 있다. 예를 들어, 글로벌 변수 및/또는 동적으로 생성된 모듈이 트리아지 덤프를 분석하는데에 유용할 수 있지만, 개인 데이터를 포함할 가능성은 낮다.
예시로서, 도 4는 어드레스 501을 갖는 메모리 위치 내의 데이터 값이 "003"임을 도시한다. 만약 이러한 값이 포인터라면, 이것은 어드레스 003을 갖는 메모리 위치로 포인팅한다. 어드레스 003을 갖는 메모리 위치는 프로그램 코드(410)와 연관된다. 따라서, 식별 엔진은 어드레스 501을 갖는 메모리 위치를 포인터의 특징으로서 식별할 수 있다.
어드레스 502를 갖는 메모리 위치 내의 데이터 값은 "203"이다. 만약 이 값이 포인터라면, 이것은 어드레스 203을 갖는 메모리 위치로 포인팅한다. 어드레스 203을 갖는 메모리 위치는 라이브러리 코드(420)와 연관된다. 따라서, 식별 엔진은 어드레스 502를 갖는 메모리 위치를 포인터의 특징으로서 식별할 것이다.
어드레스 504를 갖는 메모리 위치 내의 데이터 값은 "502"이다. 만약 이 값이 포인터라면, 이것은 어드레스 502를 갖는 메모리 위치로 포인팅한다. 어드레스(502)를 갖는 메모리 위치는 호출 스택(430)과 연관된다. 따라서, 식별 엔진은 어드레스 502를 갖는 메모리 위치를 포인터의 특징으로서 식별할 것이다.
다른 한편으로, 어드레스 505를 갖는 메모리 위치 내의 데이터 값은 "156"이다. 만약 이 값이 포인터라면, 이것은 어드레스 156을 갖는 메모리 위치로 포인팅한다. 어드레스 156을 갖는 메모리 위치는 소프트웨어 개발자(135)가 관심 있는 메모리 위치와 연관되지 않는다. 따라서, 식별 엔진은 어드레스 505를 갖는 메모리 위치를 포인터의 특징으로서 식별하지 않을 것이다.
일부 실시예에서, 포인터의 특징이 아닌 메모리 위치는 개인 정보의 특징인 메모리 위치로서 해석될 수 있다. 따라서, 식별 엔진은 어드레스 505를 갖는 메모리 위치를 개인 정보로서 식별할 수 있으며, 이것은 오염될 수 있다.
일부 실시예에서, 트리아지 덤핑 엔진(310)은 식별 엔진(320)에 의해 개인 정보의 특징인 것으로 결정된 데이터 값을 오염하기 위한 중복입력 값을 선택하는 선택 엔진(330)을 포함한다. 선택 엔진은 임의의 적절한 방식으로 중복입력 값을 선택할 수 있다. 일부 실시예에서, 단일 중복입력 값은 모든 데이터 값에 대해 사용될 수 있다. 예를 들어, 도 4의 단순화된 메모리(400)에서, 개인 정보의 특징으로 식별된 각각의 데이터 값이 중복입력 값 999로 중복입력될 수 있다. 이 특정 예시에서, 이러한 중복입력 값은 이것이 포인터에 대한 값 또는 널 포인터(null pointer)의 값에 해당하지 않기 때문에 선택될 수 있다.
도 5a는 메모리 어드레스(510) 및 도 4의 어드레스 501-507을 갖는 메모리 위치와 연관된 데이터 값(520)을 테이블(500)로 도시한다. 어드레스 503, 505 및 506을 갖는 메모리 위치에 대한 데이터 값이 식별 엔진에 의해서 개인 정보의 특징인 것으로 식별되었음을 나타내도록 밑줄이 그어졌다. 도 5b는 만약 개인 정보의 데이터 값 특징이 단일 중복입력 값 "999"로 오염되면 데이터 값(550)이 트리아지 덤프 내에 나타나는 것과 같은 값들을 갖는 테이블(530)을 도시한다.
당업자는 임의의 중복입력 값이 사용될 수 있음을 이해할 것이다. 일부 실시예에서, 중복입력 값은 널 포인터 값이 아닌 임의의 값일 수 있다. "널 포인터 값(null pointer value)"은 데이터의 부재를 나타내기 위해 컴퓨터 시스템(210)이 사용하는 값이다. 널 포인터 값은 컴퓨터 시스템에 의해 결정된 임의의 값일 수 있으며 임의의 특정한 수량으로 한정되지 않는다. 예를 들어, 도 4 및 도 5a의 예시에서, 어드레스 507을 갖는 메모리 위치는 값 000을 포함한다. 이러한 예시에서, 000은 널 포인터 값이다. 따라서, 다른 데이터 값을 오염하는데에 사용된 중복입력 값이 000이 아닐 수 있다. 소프트웨어 개발자(135)가 원래 널 포인터 값이었던 데이터 값을 식별하도록 하는 것은 오염된 데이터 값으로부터 제한한다.
당업자는 본 발명의 실시예가 32비트 또는 64비트 워드인 데이터 값을 사용할 수 있으며 이것이 각각 8 또는 16진수로 16진수 값에 의해 표현될 수 있음을 인지할 것이다. 예를 들어, 32비트 시스템에서, "1"이 되는 모든 32비트가 16진수 0xFFFFFFFF에 의해 표현될 것이다. 일부 실시예에서, 오염될 모든 데이터 값에 대한 중복입력 값이 동일한 16진수일 수 있다. 예를 들어, 0xCCCCCCCC가 모든 오염을 사용하기 위한 사전결정된 중복입력 값일 수 있다.
일부 실시예에서, 선택된 중복입력 값이 중복입력되는 데이터 값의 함수일 수 있다. 이러한 방식으로, 더 많은 정보가 임의의 개인 정보를 전송하지 않고 소프트웨어 개발자(135)에게 전달될 수 있다. 예를 들어, 제 1 범위 내의 모든 데이터 값이 제 1 중복입력 값으로 중복입력될 수 있는 반면, 제 2 범위 내의 모든 데이터 값은 제 2 중복입력 값으로 중복입력될 수 있다. 이러한 기술을 이용하는 실시예가 도 5c의 테이블(570)에 의해 도시되었다. 이러한 예시에서, 오염될 범위 1-149 내의 데이터 값이 중복입력 값 999로 중복입력되었고, 오염될 범위 150-299 내의 데이터 값이 중복입력 값 998로 중복입력되었으며, 오염될 범위 850-999 내의 데이터 값이 중복입력 값 997로 중복입력되었다. 이러한 중복입력 값들(590)이 테이블(570) 내에 도시되었다.
일부 실시예에서, 만약 음의 수 또는 큰 음의 수를 나타내는 데이터 값이 특정 값으로 오염되면, 소프트웨어 개발자(135)에 의해 수행되는 분석을 도울 수 있다. 이것은 소프트웨어 내의 랩 어라운드(wrap around) 오류를 식별하는 것을 도울 수 있다. 큰 음의 수를 식별하도록 사용되는 특정 기준은 워드 크기 및 다른 요소에 의존할 수 있다. 그럼에도, 예시로서 특정한 중복입력 값과 연관되는 큰 음의 수는 문턱값보다 큰 크기를 갖는 것으로 식별될 수 있다. 이러한 문턱값은 임의의 적절한 방식으로 선택될 수 있다. 그럼에도, 특정 예시로서 문턱값은 컴퓨터 시스템이 표현할 수 있는 가장 큰 음의 숫자의 15% 내에 있는 것으로 선택될 수 있거나, 또는 일부 실시예에서는 10% 내에 있는 것으로 선택될 수 있다. 유사한 기술이 큰 양의 값을 식별하도록 사용될 수 있고 큰 양의 값을 갖는 서로 다른 중복입력 값을 연관시킬 수 있다.
일부 실시예에서, 선택된 중복입력 값은 메모리 위치와 연관된 메모리 보호 옵션의 함수일 수 있다. 예를 들어, 메모리 위치는 판독 전용, 실행 전용, 실행 및 판독, 또는 임의의 다른 메모리 보호 옵션인 메모리 페이지 내에 저장될 수 있다. 일 예시로서, 32비트 시스템이 판독 전용 메모리에 저장된 개인 정보로 결정된 모든 데이터 값을 오염하기 위해서 중복입력 값 0x00000010을 사용할 수 있다. 동일한 시스템이 실행 전용 메모리 내에 저장된 개인 정보로 결정된 모든 데이터 값을 오염하도록 중복입력 값 0x00000020을 사용할 수 있으며, 덤프된 자신의 데이터 값을 갖는 메모리 위치의 수는 총 메모리의 작은 부분으로 제한된다.
일부 실시예에서, 선택 엔진은 런타임에 중복입력 값을 생성하기 위한 난수 생성기(335)를 이용할 수 있다. 당업자는 난수 생성기(335)가 당업계에서 알려진 기술을 이용하는 임의의 적절한 방식으로 구현될 수 있음을 이해할 것이다. 예를 들어, 난수 생성기(335)는 선택 엔진(330)의 구성요소일 수 있거나 또는 난수를 제공하기 위해 선택 엔진에 의해 호출된 OS(234)의 구성요소일 수 있다. 당업자는 난수 생성기(335)가 의사(pseudo)-난수 생성기 또는 의사-난수 결과를 제공하는 임의의 구성요소일 수 있음을 이해할 것이다.
일부 실시예에서, 서로 다른 난수가 오염된 각각의 데이터 값에 대해 선택된다. 난수를 특정한 범위의 값으로 한정하는 것 또한 유용할 수 있다. 예를 들어, 도 4의 예시에서, 중복입력 값은 범위 900-999로 제한될 수 있다. 따라서, 오염되는 각각의 데이터 값에 대해서, 선택 엔진(330)은 중복입력 값으로 사용하기 위한 특정 범위 내의 값을 랜덤으로 생성한다. 이것은 일부 실시예에 대해 중복입력 값이 트리아지 덤프 생성 프로세스에서 오염되지 않은 임의의 데이터 값과 일치하지 않음을 보장할 수 있게 한다. 중복입력 값이 오염되지 않은 트리아지 덤프 내의 임의의 데이터 값과 일치하지 않음을 보장하는 것은 임의의 적절한 방식으로 수행될 수 있다. 예를 들어, 난수 생성기로부터의 값은 오염되지 않은 임의의 트리아지 덤프 값과의 충돌을 방지하도록 필터링될 수 있다.
더 많은 정보가 동일한 데이터 값의 각각의 사례에 대해 동일한 랜덤 중복입력 값을 사용함으로써 소프트웨어 개발자(135)에게 제공될 수 있다. 예를 들어, 이러한 방식으로 생성된 정보는 소프트웨어 개발자(135)가 호출 스택을 통해 데이터의 조각을 추적하고 소스에서의 문제점을 식별하는 것을 도울 수 있다. 동일한 랜덤 중복입력 값이 오염된 데이터 값들 및 데이터 값이 중복입력된 랜덤 중복입력 값의 추적을 유지함으로써 선택될 수 있다. 이러한 정보는 임의의 적절한 방식으로 맵핑될 수 있다. 예를 들어, 데이터 값 및 랜덤 중복입력이 테이블 내에 저장될 수 있다. 따라서, 선택 엔진(330)이 오염할 다음 데이터 값과 마주쳤을 때, 선택 엔진은 데이터 값이 이전에 오염되었는지를 결정하기 위해 먼저 테이블을 검사한다. 만약 그렇다면, 테이블 내에 표시된 동일한 랜덤 중복입력 값이 다음 데이터 값을 오염하도록 사용된다. 만약 그렇지 않다면, 새로운 랜덤 데이터 값이 선택되어 테이블에 추가된다. 전체 맵핑 정보를 갖는 것은 사용자의 컴퓨터(110)뿐이므로, 사용자(115)의 프라이버시는 이러한 방법으로 여전히 유지된다. 트리아지 덤프가 외부 서버(150)에 전송되었을 때, 오리지널 데이터 값이 아닌 중복입력 값만이 전송된다. 따라서, 소프트웨어 개발자(135)는 임의의 사용자의 개인 정보를 드러내지 않고 트리아지 덤프의 어떤 값이 오염되었는지를 인식하게 된다.
트리아지 덤핑 엔진(310)은 선택 엔진(330)에 의해 선택된 중복입력 값을 갖는 개인 정보의 특징으로 결정된 데이터 값의 실제 중복입력을 수행하기 위한 중복입력 엔진(340)을 포함할 수 있다. 중복입력 데이터 값은 임의의 적절한 방식으로 수행될 수 있다. 예를 들어, 데이터 값은 먼저 개별 파일로 덤핑될 수 있으며 그 다음 파일 내에 중복입력된다. 그러나, 다른 접근법이 사용될 수도 있다. 일부 실시예에서, 예를 들어 중복입력은 메모리(400) 내에서 직접 발생할 수 있거나 또는 데이터 값이 파일에 카피될 때 발생할 수 있다. 전술된 바와 같이, 널 포인터 값과 동일한 값을 갖는 데이터 값을 유지하는 것이 유용할 수 있다. 따라서, 그와 다르게 널 포인터 값이 포인터의 특징을 만족시키는 것으로 다루어지지 않는다고 할지라도, 컴퓨터 OS(234)에 의해 정의된 바와 같이, 널 포인터 값이 유지될 수 있다. 예를 들어, 32비트 시스템에서, 널 포인터 값은 0x00000000일 수 있다.
트리아지 덤핑 엔진(310)은 컴퓨터 시스템(110)의 밖에 있는 위치로 트리아지 덤프를 전송하기 위한 통신 엔진(350)을 포함할 수 있다. 통신 엔진은 임의의 적절한 방식으로 동작할 수 있다. 예를 들어, 통신 엔진은 당업계에서 알려진 바와 같은 보고 기술을 이용하여 외부 서버(150)로 트리아지 덤프를 전송할 수 있다. 서버(150)는 소프트웨어 개발자(135)와 연관될 수 있다.
도 6을 참조하면, 트리아지 덤프를 생성하는 방법 실시예의 순서도가 도시되었다. 이러한 방법은 트리아지 덤핑 엔진(310) 또는 임의의 다른 적절한 구성요소에 의해 수행될 수 있다. 방법(600)은 단계(602)에서 트리아지 덤프의 생성을 개시함으로써 시작된다. 트리아지 덤프의 생성은 임의의 적절한 방식으로 시작될 수 있다. 일부 실시예에서, 시작은 컴퓨터 시스템(110) 내에서 발생하는 것과 동일한 조건에 응답한다. 예를 들어, 조건은 프로세싱 유닛(220) 상에서 실행중인 소프트웨어가 갖는 문제점의 일부 종류일 수 있다. 문제점은 프로그램 충돌 또는 단절일 수 있다. 이러한 조건은 당업계에서 알려진 것과 같은 기술을 이용하여 검출될 수 있다. 그러나, 본 발명의 실시예는 임의의 특정한 개시 단계로 제한되지 않는다.
방법(600)은 동작(604)에서 계속될 수 있으며, 여기에서 식별 엔진이 메모리에 저장된 유지될 데이터 값을 식별한다. 이러한 예시에서, 값이 포인터의 특징을 갖는지 여부에 기초하여 식별된다. 포인터인 데이터 값은 트리아지 덤프에 대한 이후의 분석에 유용하며, 따라서 이러한 예시에서 오염되지 않을 수 있다. 임의의 적절한 식별 방법이 사용될 수 있다. 예를 들어, 만약 데이터 값이 포인터였다면 이 데이터 값이 어느 곳을 포인팅하는지에 대한 전술된 테스트 기술이 사용될 수 있다. 일부 실시예에서, 만약 데이터 값이 포인터로서 해석되었을 때 데이터 값이 트리아지 덤프 생성이 개시된 소프트웨어 프로그램의 현재 상태와 관련된 것으로 결정된 메모리의 부분을 포인팅하면, 데이터 값은 포인터의 특징으로서 식별될 수 있다. 관련 데이터 값이 프로그램 코드, 라이브러리 코드, 또는 호출 스택과 연관된 데이터일 수 있다. 일부 실시예에서, 관련 데이터는 다른 포인터, 커널-모드 객체 또는 힙 데이터에 대한 핸들을 포함할 수 있다.
방법(600)은 동작(606)에서 계속될 수 있으며, 식별 엔진(320)이 개인 데이터의 특징인 메모리 내에 저장된 데이터 값을 식별한다. 개인 정보인 데이터 값은 이후의 분석에 유용하지 않을 것이며, 사용자의 프라이버시를 보장하도록 오염될 수 있다. 임의의 적절한 식별 방법이 사용될 수 있다. 예를 들어, 동작(604)에서 포인터의 특징으로서 식별되지 않은 데이터 값, 또는 유지되는 것으로 식별되지 않은 데이터 값이 개인 데이터의 특징으로서 식별될 수 있다.
방법(600)은 동작(608)에서 계속될 수 있으며, 선택 엔진(330)은 식별된 데이터 값이 오염될 중복입력 값을 선택한다. 중복입력 값을 선택하는 임의의 적절한 법이 사용될 수 있다. 예를 들어, 중복입력 값을 선택하기 위한 전술된 기술이 사용된다. 일부 실시예에서, 동일한 중복입력 값이 모든 데이터 값에 대해서 사용될 수 있다. 다른 실시예에서, 중복입력 값은 중복입력된 데이터 값에 기초할 수 있다. 일부 실시예에서, 중복입력 값은 난수 생성기를 이용하여 랜덤으로 선택된다.
방법(600)은 동작(610)에서 계속될 수 있으며, 중복입력 엔진(340)은 개인 데이터의 특징인 것으로 식별된 각각의 데이터 값을 동작(608)에서 선택된 중복입력 값으로 중복입력한다. 임의의 적절한 중복입력 방법이 사용될 수 있다. 예를 들어, 전술된 바와 같이, 중복입력은 별개의 트리아지 덤프 파일에서 또는 메모리(400) 자체 내에서 발생할 수 있다.
방법(600)은 동작(612)에서 계속될 수 있으며, 통신 엔진이 생성된 트리아지 덤프를 외부 서버로 전송한다. 임의의 적절한 전송 방법이 사용될 수 있다. 예를 들어, 전술된 바와 같이, 트리아지 덤프는 컴퓨터 네트워크(120) 상에서 전송될 수 있다. 일부 실시예에서, 트리아지 덤프는 디스크 상에 배치되어 임의의 적절한 방식으로 개발자에게 전달될 수 있다. 다른 예시에서, 트리아지 덤프는 소프트웨어 개발자에 의해 사용되는 컴퓨터 상에서 생성될 수 있으며, 따라서 트리아지 덤프가 생성된 동일한 컴퓨터 상에 직접 저장될 수 있다. 방법(600)은 트리아지 덤프가 소프트웨어 개발자에게 전송된 후에 동작(614)에서 종료된다.
도 6이 트리아지 덤프 파일을 생성하도록 사용될 수 있는 방법의 예시이지만, 다른 방법들도 사용될 수 있음이 이해되어야만 한다. 트리아지 덤프를 생성하기 위한 다른 예시적인 방법(700)이 도 7의 순서도에 도시되었다. 동작(702)에서, 식별 엔진은 데이터 값을 중복입력하도록 결정할 수 있다. 전술된 바와 같이, 이러한 동작(702)은 임의의 적절한 방식으로 구현될 수 있다.
방법(700)은 동작(704)에서 계속될 수 있으며, 식별된 데이터 값이 앞서 중복입력된 데이터 값에 대해 비교된다. 만약 식별된 데이터 값이 이전에 오염되었던 값을 갖지 않으면, 단계(706)에서 중복입력 값이 데이터 값에 대해 결정된다. 이러한 결정(706)은 임의의 적절한 방식으로 구현될 수 있다. 예를 들어, 난수 생성기는 랜덤 중복입력 값을 생성하도록 사용될 수 있다. 일부 실시예에서, 랜덤 중복입력 값이 사전결정된 값의 범위 내에 포함되도록 제한될 수 있고/있거나 각각의 중복입력 값이 중복입력되는 오직 하나의 값에 해당하는 것을 보장하는 것과 같은 다른 방식으로 제한될 수 있다.
중복입력 값이 동작(706)에서 결정되면, 방법(700)은 결정된 중복입력 값이 데이터 값과 함께 테이블 내에 저장되는 동작(708)에서 계속될 수 있으며, 그에 따라 트리아지 덤핑 엔진(310)이 아래에서 설명되는 바와 같이 동작(704)을 구현하는 차후의 반복에서 데이터 값을 검색할 수 있다.
만약 동작(704)에서 이전에 데이터 값이 트리아지 덤핑 엔진(310)에 의해 오염되었다고 결정되면, 방법(700)은 특정한 데이터 값에 대해 이전에 사용된 중복입력 값이 컴퓨터의 메모리에 저장된 테이블 내에서 검색되고 트리아지 덤핑 엔진(310)에 의해 유지되는 동작(710)에서 계속된다.
데이터 값이 이전에 오염되지 않은 동작(708) 또는 데이터 값이 이전에 오염된 동작(710) 후에, 방법(700)은 동작(712)에서 계속된다. 동작(712)에서, 중복입력 엔진(340)은 동작(710)에서 테이블로부터 결정되거나 동작(706)에서 새로운 중복입력 값을 생성함으로써 결정된 중복입력 값으로 데이터 값을 중복입력한다.
방법(700)은 동작(714)에서 계속되며, 여기에서 더 많은 데이터 값이 오염에 필요한지 여부가 결정된다. 만약 트리아지 덤프의 생성이 완료되기 이전에 중복입력이 필요한 보다 더 많은 데이터 값이 존재한다고 결정되면, 방법(700)은 전술된 동작들에 대한 추가적인 반복을 수행하도록 동작(702)으로 복귀한다. 만약 동작(714)에서 오염이 필요한 데이터 값이 더 존재하지 않는다고 결정되면, 방법은 동작(716)으로 계속되며, 생성된 트리아지 덤프가 소프트웨어 개발자에 의한 분석을 위해 외부 서버로 전송된다. 이후에 이 방법은 동작(718)에서 종료된다.
도 6 및 7과 관련하여 기술된 방법들의 실시예는 본 명세서에 기술된 각각의 그리고 모든 단계를 수행하는 것으로 한정되지 않는다. 또한 방법의 모든 동작들이 전술된 정확한 순서대로 수행되어야만 하는 것은 아니다. 예를 들어, 일부 실시예는 동작(604)에 앞서 동작(606)에서 개인 데이터의 데이터 값 특징을 식별한 후에 포인터의 데이터 값 특징을 식별할 수 있다. 다른 실시예에서, 포인터의 데이터 값 특징을 식별하는 동작(604)이 전혀 수행되지 않을 수도 있다. 당업자는 전술된 실시예가 본 발명의 측면들을 이용하는 방법의 특정한 예시일 뿐임을 이해할 것이다.
또한 전술된 바와 같이, 데이터 값을 오염하는 목적은 트리아지 덤프의 크기를 감소시키기 위한 것이 아닌 소프트웨어 사용자의 프라이버시를 보호하기 위한 것임을 인지해야만 한다. 그러나 트리아지 덤프의 오염은 압축이 사용되는 경우 트리아지 덤프의 크기를 감소시킬 수 있다. 트리아지 덤프는 당업계에서 알려진 임의의 적절한 방식으로 압축될 수 있다.
본 발명의 적어도 하나의 실시예의 기술된 몇몇 측면들로부터, 당업자에게 다양한 변경, 수정 및 개선이 쉽게 발생할 것이라는 점이 이해될 것이다.
이러한 변경, 수정 및 개선은 본 발명의 일부이며 본 발명의 사상 및 범주 내에 포함되는 것이다. 또한, 본 발명의 장점이 표시되었지만, 본 발명의 모든 실시예가 기술된 모든 장점을 포함하는 것은 아님을 이해해야만 한다. 일부 실시예는 본 명세서 및 일부 예시에서 장점으로서 기술된 임의의 특징들을 구현하지 않을 수 있다. 따라서, 전술된 설명 및 도면은 단지 예시적인 것이다.
전술된 본 발명의 실시예는 다수의 방식으로 구현될 수 있다. 예를 들어, 실시예는 하드웨어, 소프트웨어 또는 그 조합을 이용하여 구현될 수 있다. 소프트웨어에서 구현되었을 때, 소프트웨어 코드는 단일 컴퓨터 내에 또는 분산된 복수의 컴퓨터들 사이에서 제공되는 임의의 적절한 프로세서 또는 프로세서들의 집합 상에서 실행될 수 있다. 이러한 프로세서는 집적 회로 구성요소 내에 하나 이상의 프로세서를 갖는 집적 회로로서 구현될 수 있다. 그러나, 프로세서는 임의의 적절한 포맷의 회로를 이용하여 구현될 수 있다.
또한, 본 명세서에 언급된 다양한 방법 또는 프로세스는 임의의 다양한 운영 시스템 또는 플랫폼을 이용하여 하나 이상의 프로세서 상에서 실행가능한 소프트웨어로서 코딩될 수 있다. 또한, 이러한 소프트웨어는 임의의 수의 적절한 프로그래밍 언어 및/또는 프로그래밍 또는 스크립팅 도구를 이용하여 기록될 수 있으며, 또한 프레임워크 또는 가상 머신 상에서 실행되는 중간 코드 또는 실행가능한 머신 언어 코드로서 컴파일될 수 있다.
본 명세서에서 사용되는 "프로그램" 또는 "소프트웨어"와 같은 용어는 전술된 바와 같이 본 발명의 다양한 측면들을 구현하기 위해 컴퓨터 또는 다른 프로세서를 프로그래밍하도록 사용될 수 있는 컴퓨터 실행가능한 명령들의 세트 또는 임의의 유형의 컴퓨터 코드를 지칭하기 위해 사용된다. 또한, 실시예의 일 측면에 따라, 실행시에 본 발명의 방법들을 수행하는 하나 이상의 컴퓨터 프로그램이 단일 컴퓨터 또는 프로세서상에 존재할 필요가 없으며, 본 발명의 다양한 측면들을 구현하기 위한 다수의 서로 다른 컴퓨터 또는 프로세서 사이에서 모듈 방식으로 분산될 수 있음이 이해해야만 한다.
컴퓨터 실행가능한 명령은 하나 이상의 컴퓨터 또는 다른 디바이스에 의해 실행되는 프로그램 모듈과 같은, 다수의 형태일 수 있다. 일반적으로, 프로그램 모듈은 특정한 태스크를 수행하거나 특정한 추출 데이터 유형을 구현하는 루틴, 프로그램, 객체, 구성요소, 데이터 객체 등을 포함한다. 전형적으로 프로그램 모듈의 기능이 다양한 실시예에서 원하는 바와 같이 결합되거나 분산될 수 있다.
또한, 데이터 구조가 임의의 적절한 형식으로 컴퓨터 판독가능한 매체 내에 저장될 수 있다. 설명의 단순화를 위해서, 테이블과 같은 데이터 구조가 데이터 구조 내의 위치를 통해서 관련된 필드를 갖도록 도시될 수 있다. 이러한 관계는 필드들 사이에서 관계를 전달하는 컴퓨터 판독가능한 매체 내의 위치를 갖는 필드들에 대해 스토리지를 할당함으로써 획득될 수 있다. 그러나, 포인터, 태그 또는 데이터 요소들 간의 관계를 확립하는 다른 메커니즘의 사용을 포함하는 임의의 적절한 메커니즘이, 데이터 구조의 필드 내의 정보 사이에서 관계를 확립하도록 사용될 수 있다.
본 발명의 다양한 측면들은 단독으로, 결합하여, 또는 앞서 기술된 실시예에서 특별히 논의되지 않은 다양한 구성으로 사용될 수 있으며, 따라서 위의 설명에서 개진되거나 도면에서 도시된 구성요소들의 세부사항 및 구성으로 그 응용이 한정되지 않는다. 예를 들어, 일 실시예에서 기술된 측면들이 다른 실시예에서 기술된 측면들과 임의의 방식으로 결합될 수 있다.
또한, 본 발명은 적어도 하나의 예시가 제공되는 방법으로서 구현될 수 있다. 방법의 일부로서 수행되는 동작들은 임의의 적절한 방식으로 순서화될 수 있다. 따라서, 실시예는 실시예의 동작들이 도시된 것과 다른 순서로 수행될 수 있다고 해석될 수 있으며, 이는 도시된 실시예에서 순차적인 동작들로서 도시되었다고 하더라도 일부 동작을 동시에 수행하는 것을 포함할 수 있다.
특허청구범위 요소를 수정하기 위해 특허청구범위에서 "제 1," "제 2," "제 3," 등과 같은 서수 표현을 이용하는 것이 우선권, 우선순위, 또는 하나의 특허청구범위 요소의 다른 특허청구범위 요소에 대한 순서, 또는 방법의 동작들이 수행되는 시간적 순서를 의미하는 것은 아니며, 단지 특허청구범위 요소들을 구별하기 위해 소정의 이름을 갖는 (그러나 서수 표현이 사용된) 다른 요소로부터 동일한 이름을 갖는 하나의 특허청구범위 요소를 구별하기 위한 라벨로서 사용되는 것이다.
또한, 본 명세서에서 사용되는 어법 및 전문용어는 설명을 위한 것으로, 제한을 두기 위한 것이 아니다. 본 명세서 "포함하는," "내재하는," 또는 "구비하는," "함유하는," "포괄하는," 및 이들의 변형어의 사용은, 이후에 나열된 아이템들 및 이들의 동등물뿐 아니라 추가적인 아이템들을 포함하기 위한 것이다.

Claims (10)

  1. 프로세서 및 데이터를 저장하고 복수의 메모리 위치를 포함하는 적어도 하나의 메모리를 포함하는 컴퓨터 시스템 내에 트리아지 덤프(triage dump)를 생성하는 방법으로서,
    상기 복수의 메모리 위치 내에 저장된 제 1 복수의 데이터 값을 식별하는 단계 -각각의 상기 제 1 복수의 데이터 값은 개인 정보의 특징(chracteristic of personal information)임- 와,
    각각의 상기 제 1 복수의 데이터 값을 하나 이상의 중복입력 값(overwrite value)으로 중복입력하는 단계를 포함하되,
    상기 하나 이상의 중복입력 값은 널 포인터(null pointer)의 값과 일치하지 않는
    방법.
  2. 제 1 항에 있어서,
    상기 복수의 메모리 위치 내에 저장된 제 2 복수의 데이터 값을 식별하는 단계 -각각의 상기 제 2 복수의 데이터 값은 포인터의 특징(chracteristic of pointer)임- 와,
    상기 제 2 복수의 데이터 값을 수정되지 않은 채 남겨두는 단계를 더 포함하는
    방법.
  3. 제 2 항에 있어서,
    포인터의 특징인 상기 제 2 복수의 데이터 값 중 제 1 데이터 값은 제 1 메모리 위치의 어드레스에 상응하고,
    상기 제 1 메모리 위치는 프로그램 코드, 라이브러리 코드, 또는 호출 스택(call stack)과 연관되는
    방법.
  4. 제 1 항에 있어서,
    상기 복수의 데이터 값의 제 1 데이터 값에 대한 중복입력 값은 상기 제 1 데이터 값에 의존하는
    방법.
  5. 제 4 항에 있어서,
    상기 제 1 데이터 값이 제 1 값의 범위 내에 있을 때, 상기 제 1 데이터 값에 대한 상기 중복입력 값은 제 1 중복입력 값이고,
    상기 제 1 데이터 값이 제 2 값의 범위 내에 있을 때, 상기 제 1 데이터 값에 대한 상기 중복입력 값은 제 2 중복입력 값인
    방법.
  6. 컴퓨팅 디바이스로서,
    하나 이상의 컴퓨터 프로그램을 실행하는 적어도 하나의 프로세서와,
    상기 하나 이상의 컴퓨터 프로그램에 의해 사용되는 데이터를 저장하는 적어도 하나의 메모리 -상기 적어도 하나의 메모리는 복수의 메모리 위치를 포함함- 와,
    트리아지 덤프를 생성하는 트리아지 덤핑 엔진을 포함하며,
    상기 트리아지 덤핑 엔진은,
    상기 복수의 메모리 위치 내에 저장된 복수의 데이터 값을 식별하는 식별 엔진 -각각의 상기 복수의 데이터 값은 개인 정보의 특징임- 과,
    복수의 잠재적 중복입력 값들로부터 상기 식별된 복수의 데이터 값 각각에 대한 중복입력 값을 선택하는 선택 엔진과,
    상기 식별된 복수의 데이터 값 각각을 상기 선택된 중복입력 값으로 중복입력하는 중복입력 엔진
    을 포함하는
    컴퓨팅 디바이스.
  7. 제 6 항에 있어서,
    상기 선택 엔진은 상기 복수의 데이터 값의 제 1 데이터 값에 대한 중복입력 값을 상기 제 1 데이터 값에 기초하여 선택하는
    컴퓨팅 디바이스.
  8. 제 7 항에 있어서,
    상기 선택 엔진은 상기 제 1 데이터 값이 제 1 값의 범위 내에 있을 때, 상기 제 1 데이터 값에 대해 제 1 중복입력 값을 선택하고,
    상기 선택 엔진은 상기 제 1 데이터 값이 제 2 값의 범위 내에 있을 때, 상기 제 1 데이터 값에 대해 제 2 중복입력 값을 선택하는
    컴퓨팅 디바이스.
  9. 제 8 항에 있어서,
    상기 제 1 데이터 값의 범위는 음의 수를 포함하는
    컴퓨팅 디바이스.
  10. 제 8 항에 있어서,
    상기 선택 엔진은 상기 복수의 데이터 값의 제 2 데이터 값에 대한 중복입력 값을 상기 제 2 데이터 값에 기초하여 선택하고,
    상기 선택 엔진은 상기 제 2 데이터 값이 상기 제 1 값의 범위 내에 있을 때 상기 제 1 중복입력 값을 선택하며,
    상기 선택 엔진은 상기 제 2 데이터 값이 상기 제 2 값의 범위 내에 있을 때 상기 제 2 중복입력 값을 선택하는
    컴퓨팅 디바이스.
KR1020147006518A 2011-09-12 2011-10-09 확장된 데이터를 갖는 메모리 덤프 및 사용자 프라이버시 보호 기법 KR101759379B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/230,588 2011-09-12
US13/230,588 US8645763B2 (en) 2011-09-12 2011-09-12 Memory dump with expanded data and user privacy protection
PCT/US2011/055517 WO2013039519A1 (en) 2011-09-12 2011-10-09 Memory dump with expanded data and user privacy protection

Publications (2)

Publication Number Publication Date
KR20140061443A true KR20140061443A (ko) 2014-05-21
KR101759379B1 KR101759379B1 (ko) 2017-07-18

Family

ID=47445839

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147006518A KR101759379B1 (ko) 2011-09-12 2011-10-09 확장된 데이터를 갖는 메모리 덤프 및 사용자 프라이버시 보호 기법

Country Status (6)

Country Link
US (1) US8645763B2 (ko)
EP (1) EP2756400B1 (ko)
JP (1) JP5875690B2 (ko)
KR (1) KR101759379B1 (ko)
CN (1) CN102866961B (ko)
WO (1) WO2013039519A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013160763A2 (en) * 2012-04-27 2013-10-31 Marvell World Trade Ltd. Memory dump and analysis in a computer system
CN103530199B (zh) * 2012-07-02 2015-12-02 腾讯科技(深圳)有限公司 一种修复软件运行错误的方法、装置及系统
US9043653B2 (en) * 2012-08-31 2015-05-26 International Business Machines Corporation Introspection of software program components and conditional generation of memory dump
US9825884B2 (en) 2013-12-30 2017-11-21 Cavium, Inc. Protocol independent programmable switch (PIPS) software defined data center networks
CN104750605B (zh) * 2013-12-30 2018-08-14 伊姆西公司 将内核对象信息包括在用户转储中
DK2911083T3 (en) * 2014-02-24 2017-01-16 Nagravision Sa A method of accessing at least one physical or legal person or object's data
US10616380B2 (en) 2014-06-19 2020-04-07 Cavium, Llc Method of handling large protocol layers for configurable extraction of layer information and an apparatus thereof
US9473601B2 (en) * 2014-06-19 2016-10-18 Cavium, Inc. Method of representing a generic format header using continuous bytes and an apparatus thereof
US9635146B2 (en) 2014-06-19 2017-04-25 Cavium, Inc. Method of using bit vectors to allow expansion and collapse of header layers within packets for enabling flexible modifications and an apparatus thereof
CN104834868A (zh) * 2015-04-28 2015-08-12 一铂有限公司 电子数据保护方法、装置及终端设备
US9727242B2 (en) 2015-06-10 2017-08-08 International Business Machines Corporation Selective memory dump using usertokens
CN106326022B (zh) * 2015-06-26 2019-05-10 伊姆西公司 转储的自动分配方法和设备
US10067919B2 (en) * 2015-12-04 2018-09-04 Verizon Patent And Licensing Inc. Feedback tool
US10242078B2 (en) * 2016-03-23 2019-03-26 International Business Machines Corporation Data dump formatting utilizing dynamically created control structures
JP2017220112A (ja) * 2016-06-09 2017-12-14 キヤノン株式会社 データ管理システム、制御方法、およびプログラム
US20170364400A1 (en) * 2016-06-15 2017-12-21 International Business Machines Corporation Method for debugging static memory corruption
JP6880766B2 (ja) * 2017-01-23 2021-06-02 富士通株式会社 情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラム
JP6919338B2 (ja) * 2017-05-30 2021-08-18 オムロン株式会社 プログラム開発支援装置、プログラム開発支援システム、プログラム開発支援方法、および、プログラム開発支援プログラム
US10514972B2 (en) * 2018-04-27 2019-12-24 Dell Products L. P. Embedding forensic and triage data in memory dumps
TWI688861B (zh) * 2018-09-18 2020-03-21 新唐科技股份有限公司 資料處理裝置及其資料保護方法
CN111190833B (zh) * 2019-11-26 2023-03-24 腾讯云计算(北京)有限责任公司 敏感数据检测方法、装置、存储介质及设备
US11638040B2 (en) 2020-08-24 2023-04-25 Schmied Enterprises LLC Eco-friendly codec-based system for low latency transmission
CN114064132B (zh) * 2021-09-30 2023-07-21 中科创达软件股份有限公司 一种系统宕机恢复方法、装置、设备和系统

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0586767A1 (en) 1992-09-11 1994-03-16 International Business Machines Corporation Selective data capture for software exception conditions
JPH07210429A (ja) 1994-01-11 1995-08-11 Hitachi Ltd ダンプ取得方法および制御装置および情報処理システム
US6321295B1 (en) 1998-03-19 2001-11-20 Insilicon Corporation System and method for selective transfer of application data between storage devices of a computer system through utilization of dynamic memory allocation
US6553347B1 (en) 1999-01-25 2003-04-22 Active Point Ltd. Automatic virtual negotiations
US7028056B1 (en) 2000-04-14 2006-04-11 Microsoft Corporation Method and arrangements for generating debugging information following software failures
JP2003186749A (ja) * 2001-12-19 2003-07-04 Fujitsu Ltd コンピュータ、メモリダンプ方法およびメモリダンププログラム
US20070011450A1 (en) 2004-09-14 2007-01-11 Mccreight Shawn System and method for concurrent discovery and survey of networked devices
US7290175B1 (en) 2002-08-26 2007-10-30 Unisys Corporation Forcing a memory dump for computer system diagnosis
US7062681B2 (en) 2002-12-03 2006-06-13 Microsoft Corporation Method and system for generically reporting events occurring within a computer system
JP2004213216A (ja) 2002-12-27 2004-07-29 Renesas Technology Corp 情報セキュリティマイクロコンピュータ、そのプログラム開発装置およびそれらを含んだプログラム開発システム
JP2005071196A (ja) 2003-08-27 2005-03-17 Hitachi Ltd ディスクアレイ装置、及びその障害情報の制御方法
US20080294839A1 (en) 2004-03-29 2008-11-27 Bell Michael I System and method for dumping memory in computer systems
US7490268B2 (en) * 2004-06-01 2009-02-10 The Trustees Of Columbia University In The City Of New York Methods and systems for repairing applications
US7607123B2 (en) 2004-09-21 2009-10-20 Hewlett-Packard Development Company, L.P. Systems and methods for validating debug information for optimized code
US7380171B2 (en) * 2004-12-06 2008-05-27 Microsoft Corporation Controlling software failure data reporting and responses
US7693849B2 (en) 2005-05-19 2010-04-06 International Business Machines Corporation Masking object data based on user authorization
US7702959B2 (en) 2005-08-02 2010-04-20 Nhn Corporation Error management system and method of using the same
JP2007172414A (ja) * 2005-12-23 2007-07-05 Fuji Soft Inc 組込機器向けのコンパクトコアダンププログラム及びコンパクトコアダンプを用いた方法
US8639896B2 (en) 2006-08-02 2014-01-28 International Business Machines Corporation Locating and altering sensitive information in core dumps
JP4846493B2 (ja) 2006-09-05 2011-12-28 富士通セミコンダクター株式会社 デバッグシステム及びデバッグ回路
US9251339B2 (en) * 2007-12-29 2016-02-02 International Business Machines Corporation Core dump privacy during application failure
US8122517B2 (en) * 2008-04-02 2012-02-21 International Business Machines Corporation Mediated access of software dumped data through specialized analysis modules
US8166313B2 (en) 2008-05-08 2012-04-24 Fedtke Stephen U Method and apparatus for dump and log anonymization (DALA)
US20090327809A1 (en) 2008-06-26 2009-12-31 Microsoft Corporation Domain-specific guidance service for software development
US7930597B2 (en) 2008-09-18 2011-04-19 Alcatel-Lucent Usa Inc. Method and apparatus for validating system properties exhibited in execution traces
US10102398B2 (en) * 2009-06-01 2018-10-16 Ab Initio Technology Llc Generating obfuscated data
US9383970B2 (en) * 2009-08-13 2016-07-05 Microsoft Technology Licensing, Llc Distributed analytics platform
US8713350B2 (en) 2009-12-08 2014-04-29 Hewlett-Packard Development Company, L.P. Handling errors in a data processing system
JP2012118884A (ja) 2010-12-02 2012-06-21 Toshiba Corp プロセッサ及び半導体装置
JP5225412B2 (ja) 2011-03-03 2013-07-03 株式会社東芝 通信装置および通信方法
CN103067918B (zh) * 2012-12-25 2017-04-12 华为技术有限公司 一种通信网络中隐私数据匿名化方法、装置及系统

Also Published As

Publication number Publication date
EP2756400B1 (en) 2020-12-23
EP2756400A4 (en) 2015-05-20
US20130067285A1 (en) 2013-03-14
WO2013039519A1 (en) 2013-03-21
CN102866961A (zh) 2013-01-09
US8645763B2 (en) 2014-02-04
KR101759379B1 (ko) 2017-07-18
CN102866961B (zh) 2016-06-22
JP5875690B2 (ja) 2016-03-02
JP2014530392A (ja) 2014-11-17
EP2756400A1 (en) 2014-07-23

Similar Documents

Publication Publication Date Title
KR101759379B1 (ko) 확장된 데이터를 갖는 메모리 덤프 및 사용자 프라이버시 보호 기법
US8510523B2 (en) Memory dump with expanded data and user privacy protection
Kawakoya et al. Memory behavior-based automatic malware unpacking in stealth debugging environment
JP4518564B2 (ja) 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体
US9411743B2 (en) Detecting memory corruption
US7398430B2 (en) System and method for self-diagnosing system crashes
CN109583200B (zh) 一种基于动态污点传播的程序异常分析方法
US9804948B2 (en) System, method, and computer program product for simulating at least one of a virtual environment and a debugging environment to prevent unwanted code from executing
US9262283B2 (en) Method for reading kernel log upon kernel panic in operating system
KR20020046921A (ko) 전체 덤프 파일로부터의 미니 파일 생성
US20130096880A1 (en) System test method
US10228993B2 (en) Data dump for a memory in a data processing system
CN104520820A (zh) 使用轻量进程快照的功能评估
US8752025B2 (en) Protecting breakpoints in a software debugger
US10311233B2 (en) Generic unpacking of program binaries
US7231634B2 (en) Method for determining scope and cause of memory corruption
EP3769222B1 (en) Testing kernel mode computer code by executing the computer code in user mode
CN104680043A (zh) 一种可执行文件的保护方法及装置
US20210011717A1 (en) Verified Stack Trace Generation And Accelerated Stack-Based Analysis With Shadow Stacks
EP2360591A1 (en) Volatile memory content capturing method and processing system
CN116414722B (zh) 模糊测试处理方法、装置、模糊测试系统及存储介质
Adhikari et al. Survey of Techniques to Detect Common Weaknesses in Program Binaries
CN116569166A (zh) 利用影子堆栈的已验证堆栈跟踪生成和加速的基于堆栈的分析
CN117573403A (zh) 一种系统级芯片的异常的处理方法、装置、设备及介质
CN114547559A (zh) 符号混淆方法、装置、介质和计算设备

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant