목록Programing (28)
Hacking Arts
- 키보드 입력 이벤트는 간단하게 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에 그에 맞는 드라이버를 설치하게 된다. 이 드라이버를 통해 윈도우와 그래픽 카드와 정보 교환이 이루어지며 윈도우 입장에서는 디바이스 드라이버를 통해서 현재 화면의 크기 및 컬러 수와 같은 정보를 얻어오기도 하고 반대로 디바이스 드라이버를 통해 그래픽 출력에 관한 옵션을 설정도 가능하다. 즉, 운영체제와 그래픽 카드 사이에..
-Visual studio에서 Complie 모드로는 debug 모드와 Release 모드로 나눌 수 있다. - debug 모드 : 실행 파일에 디버그와 관련된 디버깅 정보를 삽입하여 디버깅을 효율적으로 할 수 있도록 도와준다. 프로젝트 디렉토리 밑에 Debug라는 서브 디렉토리가 생겨 이 디렉토리 내에 디버깅 정보가 들어가게 된다. - Release 모드 : 디버깅 정보를 삽입하지 않기 때문에 코드를 최적화 시키고 파일의 크기를 줄이게 된다. 이를 통해서 실행 속도를 증가 시킬 수 있다. -아래는 http://sossms.tistory.com/entry/Debug%EC%99%80-Release%EB%AA%A8%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4에서 퍼왔습니다. 내용이 좋습..
- APIENTRY : APIENTRY 정의를 찾아가면 WINAPI가 나오고 WINAPI를 찾아가면 __stdcall이다. - CALLBACK : CALLBACK 정의를 찾아가면 __stdcall이 나온다. - 왜 둘다 __stdcall인데 나누었을까? API의 경우 수많은 함수들과 해당 함수들이 해야 할 역할이 명백히 나누어진다. 그래서 나누어지는 이유는 프로그래머들의 가독성을 높이기 위한 이유 이다. - CALLBACK이 붙었기 때문에 OS에서 CALLBACK 함수를 호출하는 것이아니다. - WinMain 함수 안에 WNDCLASS를 RegisterClass()함수를 통해 등록한다. OS가 이벤트 발생에 의해 OS가 호출해 주는 함수를 callback이라고 한다. 그러기 위해서는 OS는 함수포인터를 ..
-함수 호출 규약 : 함수를 호출할 때 파라미터를 어떤 식으로 전달하는가?에 대한 약속이다. 함수 호출전에 파라미터를 스택을 통해서 전달된다. 그리고 함수 호출 후에 ESP를 어떻게 정리하는지 에 대한 약속이 바로 함수 호출 규약이다. - Caller 와 Callee : Caller는 함수 호출한 쪽이고 Callee는 함수 호출을 받는 쪽이다. 설명하자면 main함수에서 scanf나 printf함수를 호출하는 경우 Caller는 main함수가 될테고 scanf나 printf는 Callee가 된다. - cdecl : C언어에서 주로 사용되며 Caller에서 스택을 정리하는 특징을 가진다. 그리고 가장 주요 특징은 C언어의 printf같이 가변 길이의 파라미터를 전달할 수 있다는 점이다. C언어에서는 기본적..
-LoadLibrary() [그림 1 함수의 구조] -프로세스에서 사용되는 api나 함수들은 라이브러리라는 dll 실행파일에 구현되어있고 프로세스는 구현되어있는 dll의 함수를 가져와서 사용하게 됩니다. 그때 프로세스에서 dll을 로드 하는데 사용되는 함수가 LoadLibrary입니다. -인자값으로는 간단하게 dll파일의 위치만 알려주면 됩니다. -GetProcAddress() [그림 2 함수의 구조] -GetProcAddress함수는 HMODULE은 모듈핸들로 DLL의 핸들값을 받아온다. 그다음 lpProcName은 모듈안에 찾고자하는 함수의 이름을 넣으면 주소값을 받아온다. -FARPROC -dll을 로드시키는 프로그램 소스코드 #include #include #include typedef int (..