728x90

전체 글 506

DLL

DLL 기본 이론 정적 / 동적 라이브러리 소개 라이브러리는 쉽게 생각해 함수만 따로 모은 실행 파일 함수라는 표현보다 API 라고 부르는 경우가 많고 특정 환경에 맞춘 종합적인 API 묶음을 SDK라 함 정적 라이브러리는 실행파일과 link시 결합되어 한 실행파일로 합성 동적 라이브러리는 실행 파일과 Link시 합쳐지지 않고 독립적인 실행파일 형태로 생성되며 실행파일이 실행 될 때 "동적으로" 결합 동적lib (dll) = 런타임에 바인딩(링크) 된다. Window API LoadLibrary로 로딩하게된다. 묵시적 로딩 DLL 라이브러리 개발 #include "pch.h" #include __declspec(dllexport) void WINAPI DllTestFunction(int); BOOL AP..

프로세스 관리

프로세스 생성 및 제어CreateProcess(), OpenProcess()ExitProcess() = 내가 작성한 내프로세스를 종료시킬때TerminateProcess() = 남의 프로세스를 종료시킬때, 해당 process handle이 있어야함Get/SetProcessAffinityMask() = process 내부의 모든 스레드가 affinity 영향을 받게됨EnumProcessGetModuleFileNameExCreateToolhelp32Snapshot =  enumProcess도 현재 돌고있는 process를 열거하지만 이 방법을 주로 사용해야한다.Process32First, Process32Next실행 중인 프로세스 열거int main(){ _wsetlocale(LC_ALL, L"korean")..

메모리 시스템

Windows 시스템 메모리 운용 방법 가상 메모리 시스템 직접 활용 메모리 맵 File -> char * 로 맵핑해서 쓰는것 (비동기 쓰기) 힙 크기가 작은 데이터 (4kb 이하) 할당 시 매우 우용 할당 단위나 페이지 경계를 고려하지 않음 heap data structure 로 관리되고 있는 메모리를 의미 ram 이 16기가 라 하더라도 32 bit cpu processor 에서 process 는 4gb 정도로 최대로 할당 받기 때문에 4개의 program(process) 만 띄우더라도 꽉차게 된다. process가 할당 받은 VMS(virutal memeroy space) 에서 받은 user , 나머지 반은 kernel 이 가지게 되고 이 작업을 OS 나 compiler가 하게 된다. user sp..

Win32 파일 입/출력

디스크, 디렉토리, 파일열거#include #include #include void LoadDiskInfo(const TCHAR* pszPath){ TCHAR szVolName[MAX_PATH] = { 0 }; TCHAR szFileSys[MAX_PATH] = { 0 }; TCHAR szRoot[MAX_PATH] = { 0 }; DWORD dwSerialNum = 0, dwMaxCompLen = 0, dwSysFlag = 0; memcpy(szRoot, pszPath, sizeof(TCHAR) * 3); ::GetVolumeInformation(szRoot, szVolName, MAX_PATH, &dwSerialNum, &dwMaxCompLen, &dwSysFlag, szFileSys, MAX_PATH..

스레드 동기화

기본 이론임계구간 코드가 여러 스레드에서 동시에 실행되는 일을 막는것연산 시점(혹은 종료) 감지동기화 객체를 이용해 구현Critical Section , Mutext, Semaphore, Event(Set/Reset 상태)Kernel Object라고 부른다. 스레드 실행 시점 동기화T2 스레드에서 어떤 특정 시점 A,B에서 Set Event를 해주면 T1 스레드에서 해당 Event 객체를 WaitForSingleObject 에 넣어주면 Set 되는 순간을 알 수 있게 된다.UINT WINAPI ThreadFunction(LPVOID pParam){ HANDLE hEvent = pParam; std::cout worker thread에서 사용자의 input을 감지하고 event를 set하여서 m..

스레드 생성 및 제어

스레드에 대한 기본 이론 Win32 스레드 생성 한 Process는 최소 1개 이상의 Thread를 갖는다. 젤 처음 생성되는 메인스레드 Thread는 개별화된 흐름(문맥) 과 전용스택을 갖는 실행의 단위이다. 모든 Thread는 자신이 속한 Process의 가상 메모리공간을 공유한다. 개별 ID(부호가 없는 정수)와 핸들 -> 제어 용도 Win32 스레드 속성 ID, Handle 우선순위(highest, above normal) 상태 (run, suspended , terminated) 친화력 (Cpu core) 주로 gui 앱 같은곳에서 event loop 방식으로 해결함 -> gui event thread는 오래걸리는 작업들은 새로운 스레드에서 작업을 진행해서 반응성을 높게 해줌 스레드 생성 및 종..

기본 이론

대전제 (feat. 핸들) 결국 내가 작성하는 코드는 실행 주체이며 Process 이다. 주체가 아닌 나머지는 모두 객체 (대상체) 이다. 모든 객체는 주체가 생성/개방 할 수 있으며 사용 후 삭제하거나 닫는다. 자료형을 재정의 한게 굉장히 많다. F12 를 눌러서 windows.h, winnt.h 로 가서 어떤 자료형을 warpping 한것인지 확인하자 모든 객체 (프로세스 포함) 를 식별하는 것은 핸들(Handle) 이며 핸들의 실체는 결국 포인터이다. 핸들에 대한 토큰은 핸들이 식별하는 대상에 관한 정보를 담은 구조체로 이해한다. 보안 객체와 (보안) 기술자 보안 객체에 대한 정보 (객체의 소유자, 그룹, 보호 속성, 감사 정보) 를 의미 객체 소유자 및 그룹 보호속성 (Protection attr..

VPN과 네트워크 보안 솔루션

PN과 VPN 보안 서비스 기술 = 내부 사설망을 외부로부터 스스로 보호하고, 사용자 인증을 통한 접근통제가 가능해야한다. 데이터 인증 및 암호화 기술 = 사설망 간의 traffic을 무결성과 기밀성을 유지 하기 위해서, 모든 traffic에 인증 메커니즘을 적용하거나, 정보 유출의 방지를 위해서 암호화 할 수 있어야 한다. 터널링 기술 = 기존의 공개 네트워크에서 가상의 사설 망을 구성하기 위해서, 기존 네트워크에서 정보 이동이 가능하도록 정보를 캡슐화 하고 , 다시 풀어 내어 논리적으로 두 네트워크를 연결하는 기술(망연계) 이다. 이미 전세계로 연결되어있는 ISP를 통해서 암호화, 인증 기술을 통해 private하게 쓸 수 있다. IPSec VPN과 터널링 개념 IPSec 은 네트워크 계층에 보안 서..

부하분산 시스템 작동원리

L4 부하분산과 무정지 시스템 client가 LB에 접속을 시도하고 manager가 알려준 server로 접속을 하게된다. manager가 부하율이 어떤 sever가 적은지 감지하고 LB에게 알려주게 된다. server1이 고장나도 manager가 다른것으로 routing 해줄것이기 때문에 server1 을 수리하거나 앱을 재배포해도 문제없다. 하지만 LB가 고장이나면 다 무의미해진다. 그래서 보통 LB가 2개로 있고 이중화 되어 있어서 Single point of failure를 막게 된다. GSLB Global Sever Load Balancing DNS 체계를 활용하는 구조 각 서버들의 콘텐츠는 CDN을 활용해 동기화 하는 것이 대부분 CDN는 별도의 서버들이 글로벌하게 있을 때 content up..

인터넷 공유기 작동원리

공유기 작동원리 및 개요 일반적인 인터넷 공유기는 NAT(Network Address Translation) 기술이 적용된 장치이다. 보통 주소와 포트번호를 모두 제어한다. 인터넷 IP 주소 부족 문제를 해결해준다. 패킷 필터링 방화벽과 비슷한 보안성을 제공한다. 공유기 구조에 따른 분류 Cone NAT Host 단위로 외부포트 지정 Full Cone Restricted Con IP Address restricted Port restricted Symmetric NAT TCP 세션마다 외부 포트 지정 192.168.x.x , 172.16.x.x , 10.x.x.x 인 경우 private ip이다. public internet에서 이 대역의 ip를 쓰는 host가 없다는 것이다. Symmetric NAT ..

728x90