Programming 29

[Windows System] 환경변수

환경변수 : 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값. 프로세스별로 별도의 메모리 공간에 저장하고 관리하는 데이터. (key = value 의 형태) 윈도우즈의 환경변수 1. 기본 제공 시스템 변수 2. HKEY_LOCAL_MACHINE 하이브에 있는 시스템 변수 3. HKEY_CURRENT_USER 하이브에 있는 로컬 변수 4. 모든 환경 변수 및 Autoexec.bat 파일에서 설정된 경로 5. 모든 환경 변수 및 로그온 스크립트에서 설정된 경로 6. 스크립트 또는 배치 파일과 상호 작용하는 변수 함수를 통한 환경변수 : 환경변수 등록 : BOOL SetEnvironmentVariable( LPCTSTR lpName, // key 에 해당하는 값 LPCTSTR lpValue // value..

[Windows System] 커널 오브젝트(Kernel Objects)_0x02

커널 오브젝트의 상태(State) : 리소스에 특정 상황이 발생함에 따라 Signaled 상태(신호를 받은 상태)와 Non-Signaled 상태(신호를 받지 않은 상태)로 나뉜다. (예 : 프로세스 커널 오브젝트의 상태 종료된 프로세스는 다시 살릴수 없다. 따라서 프로세스 커널 오브젝트의 상태는 Signaled -> Non-Signaled 로 변경될 수 없다) 커널 오브젝트의 상태를 확인하는 함수 : DWORD WaitForSingleObject( HANDLE hHandle, // 상태 확인을 원하는 커널 오브젝트의 핸들 DWORD dwMilliseconds // hHandle가 가리키는 커널 오브젝트가 Signaled 상태가 될 때까지 기다릴수 있는 최대 시간(INFINITE 전달 : Signaled ..

[Windows System] 프로세스간 통신(IPC) 기법_파이프(Pipe) 방식

이름없는 파이프(Anonymous Pipe) : 단방향 통신방식이며, 파이프를 통해서 생성된 핸들을 기반으로 통신하기에 프로세스들 사이에 관계가 있어야 한다. BOOL CreatePipe( PHANDLE hReadPipe, // 데이터를 읽기 위한 파이프 끝 핸들 PHANDLE hWritePipe, // 데이터를 쓰기 위한 파이프 끝 핸들 LPSECURITY_ATTRIBUTES lpPipeAttributtes, // 보안 정보 DWORD nSize // 파이프의 버퍼 사이즈 ); (참고 : 파이프는 두 개의 끝을 가지고 있다. 한쪽 끝에는 데이터가 들어가고 다른 한쪽에서는 들어간 데이터가 흘러 나온다) 이름있는 파이프(Named Pipe) : 주소 정보가 있어 관게없는 프로세스들 사이에서도 통신이 가능하..

[Windows System] 프로세스간 통신(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, // 메일슬..

[Windows System] 커널 오브젝트(Kernel Objects)_0x01

커널 오브젝트 : Windows 운영체제에서 리소스(Resource : 프로세스, 쓰레드, 파일)들을 관리하기 위한 데이터를 저장하는 메모리 블록 Windows에서 관리하는 리소스 특성을 변경하기 위해서는 해당 리소스의 커널 오브젝트를 조작해야한다. 해당 리소스의 정보를 저장하고 있는 커널 오브젝트에 접근하기 위해서는 커널 오브젝트들을 구별하는 커널 오브젝트 핸들(Object Handle)을 얻어야 한다. 커널 오브젝트와 핸들 : 커널 오브젝트는 Windows 운영체제에 종속적이다. 사용자가 리소스 생성을 요청하면 운영체제에서 사용자가 요청한 대로 리소스를 생성하게 되고 이를 관리하기 위해 커널 오브젝트를 생성한다. 즉, 커널 오브젝트는 Windows 운영체제에 의해 생성 및 소멸이 결정된다. 리소스가 ..

[Windows System] 프로세스 생성함수_CreateProcess()

CreateProcess Process A -------> Process B (부모 프로세스) CreateProcess (자식 프로세스) BOOL CreateProcess( LPCTSTR lpApplicationName, // 생성될 프로세스의 이름 LPTSTR lpCommandLine, // 생성될 프로세스에 인자 전달(변수만 가능) LPSECURITY_ATTRIBUTES lpProcessAttributes, // 프로세스의 보안 속성 지정 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 쓰레드의 보안 속성 지정 BOOL bInheritHandles, // TRUE : 부모 프로세스가 소유하는 상속 가능한 핸들을 상속한다. DWORD dwCreationFlags, // ..

[Windows System] 프로세스의 생성과 소멸

프로세스(Process)란 실행 중에 있는 프로그램을 의미한다. 하드디스크에 존재하는 특정 프로그램에 대해서 실행을 요청한 경우, 이 프로그램의 바이너리 코드들이 메모리에 적재되어 명령어를 실행하게 되는데 이를 프로세스라 한다. 프로세스 구성요소 - 메모리 구조 : 프로그램의 실행으로 생성되는 프로세스에 대해 제공되는 메모리 공간은 다음과 같이 나뉜다. 。Data 영역 : 전역변수나 static 변수의 할당을 위한 영역 。Stack 영역 : 지역변수 할당과 함수 호출 시 전달되는 인자값들의 저장을 위한 영역 。Heap 영역 : 동적 할당(malloc, calloc, new에 의한 할당)을 위한 영역 。Code 영역 : 실행파일을 구성하는 명령어들이 올라가는 메모리 영역 위 그림은 프로세스 생성 시 만들어..

[Windows System] 64비트 기반 프로그래밍

1. 64비트와 32비트 구분 : 1. I/O BUS를 통해서 한번에 송 · 수신할 수 있는 데이터 크기 2. 데이터 처리능력 32비트 -> 64비트 : 1. 더 넓은 메모리 공간(가상 메모리) 활용(32비트 : 표현할수 있는 주소 4GB -> 64비트 : 표현할수 있는 주소 16TB) 2. 연산속도의 증가(32비트 : 최대 32비트 데이터 처리 --> 64비트 : 최대 64비트 데이터 처리) 2. 64비트 기반 프로그래밍 1) LLP64, LP64 : 운영체제 모델 char short int long 포이터 Windows LLP64 1바이트 2바이트 4바이트 4바이트 8바이트 UNIX LP64 1바이트 2바이트 4바이트 8바이트 8바이트 Windows에서는 포인터만 8바이트로 표현함으로써 32비트 시스..

[Windows System] 문자셋 (Character Sets)

1. 문자셋(Character Set)의 종류와 특성 SBCS(Single Byte Character Set) : 1바이트로 문자를 표현한다. 대표적으로 아스키 코드(ascii code)가 있다. MBCS(Multi Byte Character Set) : 문자를 표현 하는데 있어서 아스키 코드는 1바이트로, 그 외에는 2바이트로 처리한다. WBCS(Wide Byte Character Set) : 모든 문자를 2바이트로 표현한다. 대표적으로 유니코드(UNICODE)가 있으며, 전세계의 모든 문자를 표현할 수 있다. 2. WBCS 기반 프로그래밍 기본적으로 운영체제에서는 문자열을 MBCS 기반으로 처리한다. 예) #include #include int main() { char str[] = "AB가나"; i..