(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)
운영 체제는 프로그램을 실행할 때 프로세스 단위로 관리합니다. 동작 중인 프로그램이 하나의 프로세스가 되는 것입니다. 운영 체제에서는 프로세스를 사용하여 실행 중인 다양한 응용 프로그램을 구분하고 스레드는 운영 체제에서 프로세서 시간을 할당하는 기본 단위가 됩니다.
※ 프로세스 구성 요소(메모리 구조)
- Data 영역: 전역변수나 static 변수의 할당을 위해 존재하는 영역입니다.
- Stack 영역: 지역변수 할당과 함수 호출 시 전달되는 인자 값들의 저장을 위해 존재합니다.
- Heap 영역: 동적할당(malloc, calloc 함수에 의한 할당)을 위해 존재합니다. (프로그래머가 할당.)
- Code 영역: 실행파일을 구성하는 명령어들이 올라가는 메모리 영역입니다.
스레드는 프로세스 내에서 실행되는 흐름의 단위를 말합니다. 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 있지만 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있습니다. 이러한 실행 방식을 멀티 스레드라고 합니다. 스레드가 여러개 실행될 경우 스케줄러는 각 스레드에게 시간을 할당하여 실행함으로써 사용자가 보기에 여러 스레드가 동시에 실행되는 것 처럼 보이게 됩니다.
※ 스레드 특징
- 각 스레드는 독립적인 스택 영역을 가집니다.
- 코드 영역을 공유합니다.
- 데이터 영역 및 힙 영역을 공유합니다.(전역변수와 동적 할당된 메모리 공간도 공유가 가능합니다.)
- 프로세스 핸들 테이블을 공유합니다. 프로세스 핸들 테이블에 대한 핸들 정보는 프로세스 내의 스레드들에게
공유되어 각 스레드가 그 핸들에 대해 접근이 가능합니다.
- 결국 같은 프로세스 내의 스레드들은 스택 이외의 모든 것을 공유하게 됩니다.
출처 : http://securityfactory.tistory.com/59
'Analysis > Theory' 카테고리의 다른 글
Ollydbg_Back To User Mode (0) | 2019.01.06 |
---|---|
Themida 단순 Unpack (0) | 2019.01.06 |
악성코드 'PlugX Dropper'의 설치 방식 (0) | 2019.01.06 |
중복 실행 방지 코드_CreateMutex( ) (0) | 2019.01.06 |