전체 글

· Windows
프로세스 핸들 테이블프로세스별로 독립적인 핸들을 저장하는 테이블프로세스가 핸들을 얻게 되는 경우 프로세스 자신의 핸들 테이블에 해당 커널 오브젝트의 핸들 추가시스템 리소스가 생성되면 커널 오브젝트가 생성해당 커널 오브젝트의 핸들이 핸들 테이블에 추가된 뒤 핸들 값 반환핸들을 통해 커널 오브젝트에 접근 가능핸들 값 256 에 대한 커널 오브젝트가 0x2400 에 존재 핸들의 상속CreateProcess 함수를 통해 자식 프로세스를 생성하면 자식 프로세스의 핸들 테이블도 생성CreateProcess 함수의 인자를 통해 부모 프로세스 핸들 테이블의 핸들을 자식 프로세스가 상속 가능 핸들의 상속 여부자식 프로세스는 부모 프로세스의 핸들 테이블에서 상속 가능한 핸들 상속CreateProcess 함수의 5 번째 인..
· Windows
커널 오브젝트의 상태 (State)리소스에 특정 상황이 발생되었음을 알리기 위한 용도커널 오브젝트를 구성하는 멤버 변수 중 하나는 커널 오브젝트의 상태 정보를 저장커널 오브젝트의 상태 변화 시점은 커널 오브젝트에 종류에 따라 상이 Signaled 상태신호를 받은 상태TRUENon-Signaled 상태신호를 받지 않은 상태FALSE커널 오브젝트가 생성되면 커널 오브젝트의 상태는 Non-Signaled 프로세스 커널 오브젝트의 상태프로세스가 생성될 때 프로세스 커널 오브젝트가 생성 (Non-Signaled)프로세스가 종료되면 Signaled 상태로 변경Windows 운영체제에 의해 변경프로세스 커널 오브젝트가 Non-Signaled 상태인 경우 프로세스가 실행 중인 상태프로세스 커널 오브젝트가 Signale..
· Windows
IPCInter Process Communication둘 이상의 프로세스 간 데이터 송수신 메일 슬롯 (Mail Slot) 원리프로세스는 자신에게 할당된 메모리 공간 외에는 접근 불가능프로세스가 데이터 송수신을 위해 우체통 마련Receiver 는 메일 슬롯 생성Sender 는 Receiver 의 메일 슬롯으로 데이터 전송Receiver 는 메일 슬롯을 통해 데이터 수신 CreateMailslot 함수 winbase.h 헤더는 CreateMailslot 을 UNICODE 전처리기 상수의 정의에 따라,이 함수의 ANSI 또는 UNICODE 버전을 자동으로 선택하는 별칭으로 정의 함수 선언 형태HANDLE CreateMailslot( [in] LPCTSTR lpName, [in] DWORD ..
· Windows
Windows 운영체제는 프로세스, 쓰레드, 파일과 같은 리소스 (Resource) 들을관리하기 위해 필요한 정보를 커널 오브젝트에 저장한다 커널운영체제의 핵심이 되는 소프트웨어운영체제의 가장 아래 계층일반적으로 커널과 운영체제를 같은 의미로 사용 리소스프로세스쓰레드파이프 또는 메일슬롯파일등등 커널 오브젝트커널에서 관리하는 중요한 정보를 저장하는 데이터 블록 (구조체)리소스가 생성될 때마다 커널 오브젝트 구조체 생성리소스의 정보를 구조체에 저장, 참조 및 변경 가능 커널 오브젝트의 구조커널 오브젝트의 종류에 따라 서로 다른 구조체 기반으로 생성 프로세스 커널 오브젝트프로세스는 운영체제가 관리 (생성, 소멸, 상태 변화, 우선순위 변화 등)CreateProcess 함수 호출 시 Windows 는 요구에 맞..
· Windows
표준 검색경로 검색 순서1. 실행 중인 프로세스의 실행파일이 존재하는 디렉토리2. 실행 중인 프로세스의 현재 디렉토리 (Current Directory)3. Windows 시스템 디렉토리 (System Directory)4. Windows 디렉토리 (Windows Directory)5. 환경변수 PATH 에 의해 지정되어 있는 디렉토리Windows 에서는 현재 디렉토리 개념을 제공한다 현재 디렉토리 (Current Directory) 는 특정 파일을 찾을 경우 기본이 되는 디렉토리로,완전 경로 (Full Path) 를 전달하지 않는 경우 현재 디렉토리를 기준으로 작업이 이루어진다 일반적으로 프로세스 생성 시 프로세스의 현재 디렉토리는프로세스 실행 파일이 존재하는 디렉토리로 설정된다 실행..
· Windows
CreateProcess 함수를 통해 프로세스를 생성해보자 processthreadsapi.h 헤더는 CreateProcess를 UNICODE 전처리기 상수의 정의에 따라,이 함수의 ANSI 또는 UNICODE 버전을 자동으로 선택하는 별칭으로 정의하고 있다(ANSI : CreateProcessA / UNICODE : CreateProcessW) CreateProcess 함수를 호출하는 프로세스를 부모 프로세스 (Parent Process),CreateProcess 함수 호출에 의해 생성된 프로세스를 자식 프로세스 (Child Process) 라 한다 함수 선언 형태BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCo..
· Windows
GetLastError 함수를 통해 오류를 확인해보자 많은 Windows 시스템 함수들은 오류 발생 시 NULL 을 반환하지만 원인 확인은 불가능하다 DWORD GetLastError(void); Windows 시스템 함수 호출 과정에서 오류가 발생한 경우,이어서 GetLastError 함수 호출을 통해 오류의 원인에 해당하는 에러코드를 얻을 수 있다 오류 확인#include #include #include int _tmain(void){ SetCurrentDirectory(NULL); _tprintf(_T("error code %d \n"), GetLastError()); return 0;}// 실행 결과// error code 87 SetCurrentDir..
· Windows
64비트와 32비트 컴퓨터의 구분 64비트 컴퓨터32비트 컴퓨터한 번에 처리 가능한 데이터의 크기64 bit32 bit한 번에 송수신 가능한 데이터의 크기64 bit32 bit포인터 (주소값 표현) 크기64 bit32 bit최대 메모리 크기16 TB4 GB LLP6464비트 환경에서 Windows 가 기본 자료형과 포인터를 표현하는 방식 (리눅스의 경우 LP64)char 1 byteshort 2 byteint 4 bytelong 4 bytefloat 4 bytepointer 8 bytelong long 8 bytedouble 8 byte 64비트 기반 프로그래밍 주의사항64비트 시스템에서는 포인터를 8바이트로..
· Windows
Windows 에서 MBCS 와 WBCS 를 동시 지원해보자 문자셋은 크게 세 가지 형태이다 SBCS (Single Byte Character Set)문자를 표현할 때 1바이트만을 사용하는 방식아스키코드 (ASCII) 가 해당 MBCS (Multi Byte Character Set)영문은 1바이트, 한글은 2바이트를 사용하는 방식 WBCS (Wide Byte Character Set)문자를 표현할 때 2바이트만을 사용하는 방식유니코드 (UNICODE) 가 해당MBCS 기반 (코드 링크)// MBCS 기반#include #include int main(int argc, char* argv[]){    char str[] = "ABC가나다";    printf("..
· 알고리즘
A* algorithm / A star algorithm / A* 알고리즘 / A star 알고리즘 A* 알고리즘을 간단하게 구현해보자 다익스트라 알고리즘을 이해 및 구현 가능하다는 것을 전제로 작성한다 https://blog.encrypted.gg/1037 [실전 알고리즘] 0x1D강 - 다익스트라 알고리즘네 반갑습니다. 이번에는 다익스트라 알고리즘을 해보겠습니다. 플로이드 알고리즘이랑 비슷하게 구현과 경로 복원 방법 모두 BOJ에 있는 문제를 가지고 직접 풀어볼거라 별도로 연습 문제 챕터blog.encrypted.gg 다익스트라 알고리즘을 공부하려면 바킹독님의 실전 알고리즘 강좌를 참고하자코드 스타일도 유사하게 작성했다   전체 코드#include #inclu..
PhaRan
게임 서버 개발