목록전체 글 (347)
Hacking Arts
resource란? 전장에서 전투를 하려면 무기와 같은 자원이 있어야 한다. 무기를 리소스라 하고 지휘관을 소스코드라고 할 수 있다. 즉 리소스는 기능보다는 GUI환경에서 아이콘,커서,비트맵과 같은 그래픽 요소를 활용하는 것이다. [그림 1] *.rc와 *.obj 리소스는 위 그림과 같이 컴파일이 되면 소스코드는 obj로 리소스는 rc 파일이 되고 최종적으로 exe파일이 된다. 비쥬얼 스튜디오 보기에 리소스 뷰를 킨뒤 resource마우스 오른쪽클릭을 하여 추가 리소스하면 된다. [그림 2] 리소스 추가 [그림 3] 아이콘과 커서 리소스 [그림 4] 아이콘 그림 기본 그림이다. [그림 5] 커서 그림이다 조금 수정했다. [그림 6] 커서와 아이콘 모양이 적용된 모습] HWND hWnd; MSG Messa..
- 타이머 메시지란 알람과 같이 1초, 1분 등의 일정 시간이 되었을 때마다 임의의 어떤 작업을 수행하도록 해준다. [ 그림 1 SetTimer 정의 ]- 인자 값으로 윈도우 핸들 , 그리고 타이머 식별 번호가 들어가게 되는데 여러개의 타이머를 사용 할 수 있기 때문이다. 그 다음 인자값이 시간 주기이다. msec 단위라서 10000 값이 1분을 뜻한다. 그리고 그다음 콜백 함수 인자 값이 들어가게 된다. 아래 그림 과 같은 과정을 거친다.[ 그림 2 타이머 단계 ][ 그림 3 타이머 구현 ] - 아래 소스를 이용해서 위 타이머를 구현 할 수 있다 #include #include #include #pragma warning(disable:4996) LRESULT CALLBACK WndProc(HWND, ..
- 키보드 입력 이벤트는 간단하게 WM_KEYDOWN,WM_KEYUP, WM_CHAR 이렇게다. - WM_KEYDOWN : 키보드의 어느 키가 눌러지든 발생한다. - WM_KEYUP : 키보드의 어느 키가 눌렸다가 떼는 과정에서 발생한다. 이 두개는 한쌍으로 발생한다. - 가상 키코드 wParam으로 가상 키코드가 들어오게 되는데 카상키코드표 여기에 들어가면 볼 수 있다. 표에는 숫자와 영문자가 정의되어 있지 않은데 문자 키의 식별은 아스키 코드를 비교하여 식별 하면 되고, 그 외의 키는 정의된 가상 키 코드를 가지고 식별하면 된다. [ 그림 1 key 이벤트 발생 ] -아래 와 같은 소스를 통해 위 그림 1의 이벤트 발생 시킬 수 있다 case WM_KEYDOWN: switch (wParam) { ca..
- 마우스 이벤트이전에 WM_LBUTTONDOWN 같은 프로시져에 이벤트를 봤을 것이다. 여러가지 종류가 있다. 근데 이벤트만 발생시키면 너무 정보가 부족하다. 그리고 우리는 윈 프로시져에 lParam이라는 요소가 무엇을 하는지 궁금했을 것인데 이거에 대해 말해 보겠다. [ 그림 1 lParam ]- lParam은 그림과 같은 구조를 가졌다. 이 좌표가 이벤트가 발생한 지역의 포인터를 가지고 있는다. 그다음은 wParam 값 이다. wParam은 키조합 이벤트를 관리하는데. ctrl 키나 shift키를 누르면서 동시에 다른 것을 할때 복합적으로 정보를 가지게 된다. [ 그림 2 마우스 이벤트 결과 ] - 위 그림 2와 같이 출력이 되게 하는 함수 소스 LRESULT CALLBACK WndProc(HWND..
TextOut함수는 기본적이고 많이 사용되는 함수다.[ 그림 1 TextOut 함수 사용] [ 그림 2 TextOut 함수 정의]- 첫번째 인자는 DC의 핸들, 두번째와 세번째는 출력될 시작 좌표,네번째는 출력할 문자열을 담고 있는 문자열 포인터, 마지막 인수는 문자열의 길이를 나타낸다. [ 그림 3 DrawText 사용 ] [ 그림 4 DrawText 함수 정의 ][ 그림 5 Rect 구조체 ]- 첫번째 인자는 DC핸들, 두번째는 출력할 문자열 포인터, 그리고 글자수, rect구조체인데 위와 같이 좌표를 가지고 있는다.그다음 마지막 uFormat인데 사각형의 옵션을 정해주는 것이다. 종류는 MSDN에 나온다. [ 그림 6 SetPiexel 사용]- 위 그림에 저거 이 물질 아닙니다. 점이 찍힌 겁니다...
- 윈도우즈 운영체제 구성 요소1) 커널 - 운영체제의 두뇌 역할2) 유저 - 사용자 인터페이스 및 윈도우를 관리하는 역할3) GDI(Graphic Device Interface) - 그래픽을 담당 -GDI란?그래픽 장치와 인터페이스를 하는 모듈이다. 윈도우즈 내부에 설정되어 있는 그래픽 장치와 연결하여 제어하겠다는 의미이다. 그래픽 카드가 대표적이며 그래픽 카드를 설치하면 우리는 OS에 그에 맞는 드라이버를 설치하게 된다. 이 드라이버를 통해 윈도우와 그래픽 카드와 정보 교환이 이루어지며 윈도우 입장에서는 디바이스 드라이버를 통해서 현재 화면의 크기 및 컬러 수와 같은 정보를 얻어오기도 하고 반대로 디바이스 드라이버를 통해 그래픽 출력에 관한 옵션을 설정도 가능하다. 즉, 운영체제와 그래픽 카드 사이에..
-각각의 프로세스는 프로세스 제어 블록(Process Control Block) 이하 PCB를 가진다. 아래 그림처럼 생긴게 PCB구조다.[그림 1 PCB] - 프로세스 상태 : 상태는 새로운(new), 준비완료(ready), 실행(running), 대기(waiting)또는 정지(halted) 상태 등이다. 아래 그림2가 상태도이다. - 프로그램 카운터 : 프로그램 카운터는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다. - CPU 레지스터들 : CPU 레지스터는 컴퓨터의 구조에 따라 다양한 개수와 타입을 가진다. 레지스터로는 누산기,인덱스,스택,범용 레지스터 와 상태코드 정보가 포함된다. 이 상태 정보는 인터럽트가 발생되면 프로그램 카운터와 함께 저장되어야 한다. 인터럽트 처리 후 흐로세스가 중..
-EPROCESS : 프로세스가 생성되면 해당 프로세스의 정보를 가지고 있는 EPROCESS 라는 구조체가 커널 메모리에 생성된다. 모든 프로세스는 각자의 EPROCESS 구조체를 하나씩 가지고 자신의 Thread 수만큼 ETHREAD 구조체를 커널 메모리에 가진다. -EPROCESS가 있는데 왜 PEB가 있을까? PEB는 유저모드에서의 Process 구조체이다. 반대로 EPROCESS 구조체는 커널 모드에서의 Process 구조체인데 나눈 이유는 프로세스가 만약 기본적인 정보인 process id값을 가지러 간다고 했을 때 EPROCESS까지 가려면 커널의 구조체에 접근을 해야된다. 이는 유저모드,에서 접근이 불가능하기때문에 시간이 오래걸리고 빈번하게 갱신되는 프로세스의 정보도 커널에 접근해서 수정해야..