본문 바로가기

Computer9

유저 모드 디버깅 유저 모드 - 일반적인 응용 프로그램이 동작하는 환경을 의미 응용 프로그램들은 이런 환경에서 각 프로세스로 실행 프로세스마다 2GB의 별도의 메모리 공간을 가지고 있다 프로세스들은 서로의 메모리를 침범할 수 없다 오직 자신의 메모리 공간만 사용할 수 있다 물론 많은 응용 프로그램이 잘못된 메모리에 접근해 중지 계산을 잘못해 중지 프로세스마다 별도의 메모리 공간을 사용하므로 하나의 프로세스가 잘못해 자신의 메모리 공간을 망치더라도 다른 프로세스에는 영향을 미치지 않는다. 유저모드에서 실행되는 프로세스에 문제가 발생하더라도 운영체제가 동작하는 커널모드에는 영향을 미치지 않는다. 유저 모드의 프로세스만 중지된다. 유저 모드 디버깅 - 유저모드에서 실행된 프로세스를 대상으로 디버깅하는 것 디버거가 응용 프로그램.. 2018. 6. 5.
WinDbg 디버깅 종료 - 윈도우용 응용 프로그램 디버깅 - 커널 모드 드라이버 디버깅 - 프로그램이 동작하는 중에 WinDbg 붙여서 디버깅 - 프로그램이 동작하다가 문제가 발생해 덤프 파일을 WinDbg로 열어서 디버깅 - 사실 이 모든 기능을 제공하는 디버거는 WinDbg 밖에 없음 따라서 WinDbg 하나만 잘 활용할 줄 알아도 많은 문제 해결 가능 2018. 6. 5.
프로세스 핸들 잘 알다시피 윈도우즈는 GDI, USER, KERNEL의 세 가지 주요 DLL로 구성되어 있다 각 모듈은 여러 종류의 객체를 관리하며 관리의 편의를 위해 핸들을 사용한다 객체는 시스템 리소스를 나타내는 일종의 데이터 구조체이 구조체들은 보통 덩치가 크기 때문에 좀 더 간단한 323비트 정수값의 핸들로 관리 프로세스가 한정적이다 2016. 10. 14.
스레드를 이용한 다중작업 스레드- 프로세스 내에 존재하는 실행 경로, 일련의 실행코드 프로세스는 단지 존재하기만 하는 껍데기, 실제 작업은 스레드가 담당 프로세스 생성 시 하나의 주 스레드가 생성 프로세스 생성 시 하나의 주 스레드가 생성되며 대부분의 경우주 스레드가 모든 작업을 처리하고 주 스레드가 종료되면 프로세스도 같이 종료 운영체제는 스레드 별로 골고루 CPU 시간을 분배하므로 한 스레드가 시간을 지나치게 오래 끌더라도다른 스레드가 이에 영향을 받지 않고 실행 하나의 운영체제에 여러 개의 프로세스가 동시에 실행되는 환경을 멀티 태스킹 멀티 스레드 - 하나의 프로세스에서 여러 개의 스레드가 동시에 실행되는 환경 운영체제 차원에서 지원되며 일부 하드웨어의 지원까지 받으므로 아주 부드럽게 실행되며 신뢰성이 있음 HANDLE C.. 2016. 10. 14.
프로세스 종료 프로세스가 자기 자신을 종료하는 가장 간단한 방법 WM_CLOSE 메시지 보내기DestroyWindow() 로 메인 윈도우 파괴WM_DESTROY 에서 PostQuitMessage 를 호출하여 메시지 루프를 종료 이런 방법들에 의해 WinMain이 리턴되면 다음 함수를 호출하여 정리 작업 수행 VOID ExitProcess( UINT uExitCode ); 이 함수가 호출되면 프로세스는 정리 작업에 들어가 즉각 종료 프로세스가 종료될 때는 다음의 작업이 진행 1, 프로세스와 연결된 모든 DLL을 종료시키기 위해 각 DLL의 DllMain 함수가 호출되며 DLL들은 스스로 정리작업 2. 모든 열려진 핸들을 닫는다 3. 실행중인 모든 스레드를 종료한다 4. 프로세스 커널 객체와 스레드 객체는 신호상태가 되며.. 2016. 10. 13.
ShellExecute 이 함수는 운영체제가 직접 제공하는 함수가 아니라 쉘이 제공하는 탐색기는 항상 설치되므로 언제든지 사용 가능 HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd); 이 함수는 실행 파일 뿐만 아니라 일반 데이터 파일도 실행데이터 파일을 실행하면 보통 연결된 프로그램이 실행되면서 데이터 파일이 같이 열림 예를 들어 확장자가 txt 인 파일을 실행하면 텍스트 파일을 편집할 수 있는 편집기가 열리는데 보통 메모장이 실행그림 파일이나 멀티 미디어 파일도 이 함수로 실행 hwnd - 부모 윈도우의 핸들프로세스 실행 중에 열리는 에러 메시지.. 2016. 10. 13.
CreateProcess 함수 WinAPI 에서 프로세스를 생성하는 기본 함수 - CreateProcess( ) WinExec 등의 함수도 내부적으로는 이 함수를 호출하여 프로세스를 생성 BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreateionFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcess.. 2016. 10. 13.
프로세스의 생성 한 프로그램에서 다른 프로그램을 실행할 때 WinAPI의 프로세스 생성 함수 사용 프로세스를 생성하는 가장 쉽고도 간단한 함수 UINT WinExec( LPCTSTR lpCmdLine, UINT uCmdShow ); lpCmdLine - 실행하고자 하는 프로그램의 이름uCmdShow - 프로그램 실행 직 후 프로그램이 어떻게 보일지 결정 SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOW, SW_HIDE 등 실행 파일만 주어졌을 때 다음 순서대로 실행 파일의 위치 검색하여 발견된 실행 파일을 실행 1. 프로그램이 실행된 디렉토리2. 현재 디렉토리3. 시스템 디렉토리4. 윈도우즈 디렉토리5. PATH 환경 변수가 지정하는 디렉토리들 이 검색 경로에 있는.. 2016. 10. 13.
프로세스와 스레드 프로세스 - 실행중인 프로그램 실행중인 프로그램의 한 인스턴스 예를 들어 사용자가 두 개의 메모장 프로그램을 실행시켰으면 둘 다 같은 프로그램이지만 다른 프로세스 운영체제는 프로그램을 프로세스 단위로 관리 프로세스는 각각 4GB의 주소 공간과 파일, 메모리, 스레드 등의 객체들을 소유프로세스가 종료될 때 프로세스가 소유한 모든 자원은 운영체제에 의해 파괴 모든 것은 프로세스에 의해 소유스레드는 윈도우와 메시지 큐, 스택만 소유 소유 관계는 프로세스 > 스레드 > 윈도우 실제로 작업을 하는 주체는 스레드가 담당 프로세스는 단지 메모리 상에만 존재하기만 할 뿐실행과 동시에 스레드를 하나 만들고 스레드를 호출함으로써 스레드에게 모든 작업을 맡김 정리하면 프로세스는 스레드를 담는 껍데기, 실제 일을 하는 것은 .. 2016. 10. 13.