아래의 내용은 윈도우 종속적 1. 커널 오브젝트란 무엇인가? IOCP와 같은 것들을 실습해보면서 자주 접한 용어 이다. 한마디로 정의하면 '커널에서 관리하는 데이터 블록' 프로세스가 생성이 되면 -> 프로세스를 관리하는 구조체변수가 생기고 -> 초기화 --> '커널 오브젝트' 그 밖에도 스레드를 생성할 때나, 프로세스들간의 통신을 위한 파이프 등을 생성할 때도 커널오브젝트를 생성한다. 이쯤되면 HANDLE 이라는 변수명을 본적이 있지 않나? 그것과 밀접한 연관이 있을 것이다. 2. 커널 오브젝트로 조작을 할 수 있는가? 일반적으로 우리가 직접 구조체의 내용을 변경하거나 하지는 못한다. 다만, 시스템 콜(System Call)을 이용해 간접적으로 조작이 가능하다. 어떻게 조작하나? 가령 프로세스의 우선순위..
1. 프로세스란 ? 아주 쉽게 말해서 실행중인 프로그램. 윈도우에서 .exe 파일을 실행 시켜본 기억은 누구나 있을 것이다. 그게 프로세스다. 2. 어찌 동작하는가? 프로그램을 실행하는 순간. 메모리에 할당이 이루어지고 (윈도우에서 메모리 점유율이 올라간다) 이 메모리 공간으로 바이너리 코드가 올라간다. 3. 무엇으로 이루어져 있는가? c, c++ 을 개발하는 프로그래머의 관점에서 생각해보자 프로세스를 구성하는 요소는 크게 4가지 Data 영역 : 전역변수 , static 변수의 할당 Stack 영역 : 지역변수 할당과 함수 호출 시 파라미터들, Heap 영역 : 동적 할당 (new, malloc) Code 영역 : 나머지 실행파일을 구성하는 명령어들이 올라가는 영역 하나의 프로세스당 저 4가지의 요소를..
레지스터는 cpu에서 사용하는 고속 기억장치이다. 간단한 명령어는 외워두자고 생각했지만 생각보다 익숙하지 않고 용어가 거의 비슷해서 포스팅함. 인텔 x86 cpu의 아키텍쳐(IA-32)에서는 9개의 범용 레지스터를 제공한다. 이것을 두가지로 분류 할 수 있는데, 프로그램에서 사용하는 것 EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESPOS에서 사용하는 것 EIP 물론 다른 레지스터들이 존재하지만 추후에 알아둬야 할 레지스터가 있다면 추가로 올려두겠다. 위의 9가지는 기본이니 알아두는게 좋다. EAX(Extended Accumulator Register)--> 곱셈, 나눗셈 명령에 사용, 함수의 리턴값 저장 EBX(Extended Base Register)--> ESI, EDI 둘중하나..