본문 바로가기

프로세스

올리디버거(OllyDBG)의 Executable Modules 을 통한 문제풀이 올리디버거 창들 중에 Executable Modules 창이 있다. 현재 불러온 프로세스에서 실행중인 모듈들을 보여준다. 한 프로그램에서 여러개의 모듈(ex. DLL 등)을 사용할 경우 올리디버거는 하나의 모듈만을 트레싱할 수 있기 때문에 제대로 분석할수가 없다. 따라서 Executable Modules 창을 이용해 실행 가능한 모듈을 골라서 중요한 코드에 BreakPoint 를 걸어놓음으로써 해당 코드가 실행될 때에 제어권을 올리디버거로 받아 문제를 해결할 수 있다. 일단 해당문제를 실행시켜보자. Ezbeat 문제 패스워드 찾기 올바른 패스워를 찾으시오! 난이도 : ★☆☆☆☆ 위의 메시지 박스가 뜨며 확인을 누르면 콘솔창 하나가 뜨며 Input Password : 를 입력하라고 뜬다. 올리디버거로 프로.. 더보기
메모리 컨트롤 메모리 상태 : 페이지의 개수 = 가상 메모리의 크기 / 페이지 하나당 크기 페이지 개수는 가상 메모리의 크기에 비례하며(가상 메모리는 몇 비트 환경인지에 비례 (ex. 32비트 4GB)), 모든 페이지는 Reserve, Commit, Free 세가지 중 하나의 상태를 지닌다. Commit : 물리 메모리에 할당된 상태 Reserve : Free 와 Commit 의 중간상태이다. 해당 번지에 대해 예약을 한다. 다른 메모리 함수가 물리 메모리에 해당 번지에 할당하지 못하도록 한다. 하지만 물리 메모리의 소비는 발생하지 않는다. Free : 물리 메모리 할당이 이뤄지지 않은 상태 메모리 할당의 시작점과 단위 확인 : 가상 메모리 시스템은 페이지 단위로 관리된다. 페이지의 중간 위치에서부터 할당을 시작할수 .. 더보기
라이브러리(Library) 라이브러리(Library) : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일을 의미한다. (참고 : 즉, 함수와 데이터들의 정의가 컴파일된 바이너리 코드로 라이브러리에 존재한다) (ex. C Run - Time Library Characteristics Libcmt.lib Multithreaded, static link Libcmtd.lib Multithreaded, static link (debug) Msvcrt.lib Multithreaded, dynamic link Msvcrtd.lib Multithreaded, dynamic link (debug)---d.lib : 디버그 모드로 컴파일) Static Library : 정적 라이브러리 개념 : 헤더파.. 더보기
쓰레드(Thread)의 생성과 소멸 쓰레드 생성 : HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 보안속성(TRUE : 상속, NULL : 상속제외) SIZE_T dwStackSize, // 쓰레드의 스택 크기 LPTHREAD_START_ROUTINE lpStartAddress, // 쓰레드로 동작하기 위한 함수(쓰레드 main) // 리턴타입 DWORD, 매개변수 타입 LPVOID(void*) LPVOID lpParameter, // 쓰레드 함수에 전달할 인자 지정 DWORD dwCreationFlags, // 쓰레드 생성 및 실행을 조절 LPDWORD lpThreadId // 쓰레드 ID를 전달받기 위한 변수의 주소값 ); 쓰레드 소멸 : 1. return(일반적,.. 더보기
쓰레드(Thread) 쓰레드(Thread) : 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델 1. 독립적인 스택(Stack)을 가진다. 2. 코드 영역을 공유한다. (위와 같이 쓰레드 main 함수는 코드 영역에 존재하는 모든 함수를 호출할 수 있다) 3. 데이터 영역과 힙을 공유한다.(전역변수와 동적 할당된 메모리 공간 공유 가능) 4. 프로세스 핸들 테이블 공유 프로세스 핸들 테이블에 대한 핸들 정보는 프로세스 내의 쓰레드 들에게 공유되어 각 쓰레드가 그 핸들에 대해 접근이 가능하다 (참고 : 같은 프로세스내의 쓰레드들은 스택 이외의 모든 것을 공유한다) 프로세스와 쓰레드 Windows 에서 프로세스는 단순히 쓰레드를 담는 상자다. 실제 프로그램 흐름을 형성하는 것은 쓰레드이다. 따라서 스케줄러(Windo.. 더보기
스케줄링 알고리즘과 우선순위 우선순위(Priority) 스케줄링(Scheduling) 알고리즘 : 각각의 프로세스마다 우선순위를 부여해서 우선순위가 높은 프로세스를 먼저 실행한다. 우선순위가 다른 두 프로세스를 동시 실행할 때, 우선순위가 높은 프로세스가 작업을 마치지 않는다면(블로킹 상태가 되거나 I/O 작업을 하지 않는다면) 우선순위가 낮은 프로세스는 절대로 실행되지 않는다. (기아 상태 : Starvation) 라운드 로빈(Round-Robin) 스케줄링 알고리즘 : 우선순위가 동일한 프로세스들의 형평성 유지를 위해 정해진 시간 간격(타임 슬라이스(Time Slice), 퀀텀(Quantum))만큼만 실행하고 CPU 할당을 넘긴다. 타임 슬라이스 ↑ -> 반응속도 ↓ 타임 슬라이스 ↓ -> 성능 ↓ (잦은 컨텍스트 스위칭 발생으.. 더보기
커널 오브젝트(Kernel Object) - 2 커널 오브젝트의 상태(State) : 리소스에 특정 상황이 발생함에 따라 Signaled 상태(신호를 받은 상태)와 Non-Signaled 상태(신호를 받지 않은 상태)로 나뉜다. (예 : 프로세스 커널 오브젝트의 상태 종료된 프로세스는 다시 살릴수 없다. 따라서 프로세스 커널 오브젝트의 상태는 Signaled -> Non-Signaled 로 변경될 수 없다) 커널 오브젝트의 상태를 확인하는 함수 : DWORD WaitForSingleObject( HANDLE hHandle, // 상태 확인을 원하는 커널 오브젝트의 핸들 DWORD dwMilliseconds // hHandle가 가리키는 커널 오브젝트가 Signaled 상태가 될 때까지 기다릴수 있는 최대 시간(INFINITE 전달 : Signaled .. 더보기
프로세스간 통신(IPC) - 메일 슬롯(MailSlot) IPC (Inter-Process Communication) : 프로세스 사이의 통신 메일 슬롯(Mail Slot)의 원리 : 프로세스는 자신에게 할당된 메모리 공간 이외에는 접근할 수가 없다. 따라서 Mail Slot (우체통)을 이용하여 데이터를 송·수신한다. 데이터를 수신하고자 하는 프로세스 A(Receiver)가 Mail Slot 을 생성한다. 데이터를 송신하고자 하는 프로세스 B(Sender)가 프로세스 A의 Mail Slot 의 주소로 데이터를 송신한다. 프로세스 A가 자신의 Mail Slot 을 통해 데이터를 얻게 된다. 메일 슬롯(Mail Slot) 구성 : Recevier : Mail Slot 를 생성한다. HANDLE CreateMailslot( LPCTSTR lpName, // 메일슬.. 더보기
커널 오브젝트(Kernel Object) 커널 오브젝트 : Windows 운영체제에서 리소스(Resource : 프로세스, 쓰레드, 파일)들을 관리하기 위한 데이터를 저장하는 메모리 블록 Windows에서 관리하는 리소스 특성을 변경하기 위해서는 해당 리소스의 커널 오브젝트를 조작해야한다. 해당 리소스의 정보를 저장하고 있는 커널 오브젝트에 접근하기 위해서는 커널 오브젝트들을 구별하는 커널 오브젝트 핸들(Object Handle)을 얻어야 한다. 커널 오브젝트와 핸들 : 커널 오브젝트는 Windows 운영체제에 종속적이다. 사용자가 리소스 생성을 요청하면 운영체제에서 사용자가 요청한 대로 리소스를 생성하게 되고 이를 관리하기 위해 커널 오브젝트를 생성한다. 즉, 커널 오브젝트는 Windows 운영체제에 의해 생성 및 소멸이 결정된다. 리소스가 .. 더보기
CreateProcess 함수 CreateProcess Process A -------> Process B (부모 프로세스) CreateProcess (자식 프로세스) BOOL CreateProcess( LPCTSTR lpApplicationName, // 생성될 프로세스의 이름 LPTSTR lpCommandLine, // 생성될 프로세스에 인자 전달(변수만 가능) LPSECURITY_ATTRIBUTES lpProcessAttributes, // 프로세스의 보안 속성 지정 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 쓰레드의 보안 속성 지정 BOOL bInheritHandles, // TRUE : 부모 프로세스가 소유하는 상속 가능한 핸들을 상속한다. DWORD dwCreationFlags, // .. 더보기
프로세스(Process) 생성 소스 /* 자식 프로세스(Child Process) */ #include #include #include #include INT_PTR _tmain(INT_PTR argc, TCHAR* argv[]) { _tsetlocale(LC_ALL, _T("Korean")); _tprintf(_T("자식 프로세스(Child Process) \n")); system("pause"); return 0; } /* 부모 프로세스(Parent Process : CreateProcess 이용) */ #include #include #include #include #define DIR_LEN MAX_PATH+1 INT_PTR _tmain(INT_PTR argc, TCHAR* argv[]) { _tsetlocale(LC_ALL, _T.. 더보기
프로세스의 생성과 소멸 프로세스(Process) : 메모리에 로드되어 실행중인 프로그램 1. 프로세스를 구성하는 요소 메모리 구조 : 프로세스 생성시 만들어진다. Register Set : 프로세스 실행을 위해 필요한 데이터들로 채워진다. 2. 프로세스의 스케줄링과 상태 변화 프로세스의 스케줄링(Scheduling) : 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일 (스케줄링 알고리즘(Scheduling Algorithms) : 스케줄링에 사용되는 알고리즘) 스케줄러(Scheduler) : 스케줄링 알고리즘을 적용해서 실제로 프로세스를 관리하는 운영체제 요소(모듈) (참고 : 멀티 프로세스(Multi-Process) 운영체제의 CPU 사용 실행해야 할 프로세스 여러개라면 멀티 프로세스는 모든 프로세스를 일단 실행시킨 후 .. 더보기
시스템 모니터링 툴 파일과 레지스트리 변화와 네트워크 상태, 프로세스의 상태를 분석하는 툴들을 소개한다. (2010. 11. 15. 월요일 확인결과 Filemon 이 없어지고 Process Moniter 가 생겼네요. 사용법은 똑같으니 다운받아서 아래처럼 사용하세요 ㅎㅎ) ProcessMonitor : 어플리케이션이 파일들을 어떻게 사용하는지 실시간으로 모니터링해서 오픈, 읽기, 쓰기, 삭제 등의 상황을 정확히 출력해준다. Filemon.exe를 실행하면 돋보기 모양 : 모니터링(Ctrl+E), 모리시계모양 : 필터링(Ctrl+L) 돋보기 모양의 모니터링 버튼(Ctrl+E)을 이용하여 모니터링 시작 · 중지를 할수 있다. 프로그램을 켜놓기만 하면 이벤트 정보가 로그로 쌓이지만 그 양이 너무 많아서 옵션을 주어야 한다. 먼저.. 더보기