본문 바로가기

Windows

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에서의 문자셋(Character Sets) 1. 문자셋의 종류와 특성 SBCS(Single Byte Character Set) : 1바이트로 문자를 표현한다. 대표적으로 아스키 코드(ASCII CODE)가 있다. MBCS(Multi Byte Character Set) : 문자를 표현 하는데 있어서 ASCII CODE 는 1바이트로 그 외에는 2바이트로 처리한다. WBCS(Wide Byte Character Set) : 모든 문자를 2바이트로 표현한다. 대표적으로 유니코드(UNICODE)가 있다. 2. WBCS 기반 프로그래밍 기본적으로 운영체제에서는 문자열을 MBCS 기반으로 처리한다. 예) #include #include int main() { char str[] = "AB가나"; int len = strlen(str); printf("%d",.. 더보기
시스템 프로그래밍(System Programming)의 시작 시스템 프로그램(System Program) : 컴퓨터 시스템을 동작시키거나 하드웨어를 사용할 수 있도록 도와주는 프로그램 1. 컴퓨터 시스템의 주요 구성요소(Main Components) 컴퓨터 구조(Computer Architecture) : CPU 캐쉬(Cache) ↕ 운영체제(Operating System) : 메인 메모리(Main Memory) 하드디스크(Hard Disk) 2. 컴퓨터 구조 : 1) CPU : 중앙처리장치(Central Processing Unit) ALU(Arithmetic Logic Unit) : CPU 내부에 실제 연산을 담당하는 부분. 산술연산(+, -)과 논리연산(AND, OR)을 수행 컨트롤 유닛(Control Unit) : CPU 내부로 들어온 명령어를 해석해서 A.. 더보기
Mstsc(원격) 사용하기 자신의 데스크톱을 다른 컴퓨터에서 사용할수는 없을까? 이걸 가능하게 해주는 것이 원격 프로그램이다. 그중에서 윈도우를 설치하면 자동으로 설치되는 간단한 설정만 하면 바로 사용할수 있는 Mstsc에 대해서 설명을 하려고 한다. 내컴퓨터를 우클릭하여 속성을 선택한다. 원격탭을 누른다. 원격 지원에 이 컴퓨터에서 원격 지원 초대를 보낼 수 있도록 허용(R)에 체크를 하고 고급(V)을 눌러 이컴퓨터에 대한 원격 제어 허용에 체크를 한다. 밑에 초대를 수락할 수 있는 시간은 원격으로 연결하고 얼마나 오래 있을것이냐 하는건데 적당히 설정해주고 넘어가자. 그다음에 원격 데스크톱에서 사용자가 이 컴퓨터에 원격으로 연결할 수 있음에 체크를 하고 넘어간다. 그리고 원격 제어를 쓰기위해서는 암호 설정이 필요한데 저 같은 경.. 더보기
윈도우 파일시스템(File System) 파일시스템(File System) : 운영체제(OS)가 하드디스크에 데이터를 읽고, 쓰고 찾는, 파일을 관리하기 위한 규칙 FAT32 : File Allocation Table 32 (파일 할당 테이블) Sector(섹터)를 몇개의 최소 단위로 묶어서 각각의 묶음(클러스터 : Cluster)을 기본단위로 파일을 저장한다. 예를 들어 1MB의 디스크가 있다고 하면 1 Sector = 4096 byte (4kb) 1MB = 1024KB = 4KB*256 즉 섹터수는 256개이다. FAT32 시스템은 이 256섹터를(2섹터 = 1클러스터로 가정) 클러스터로 묶어서 128 클러스터로 나타낸다. 이 클러스터들에 번호를 붙여서 파일을 저장하고 검색하는 기준으로 삼는다. (색인이라고 보시면 됩니다) 클러스터 수의 효.. 더보기
파티션(Partition)의 개념 파티션(Partition)이란 쉽게 말하면 방입니다. 하나의 집에(물리적인 하드디스크) 여러개의 방(partition 파티션)을 만드는 것이죠. 방에는 2 종류가 있습니다. 1. 살림을 차릴수 있는 원룸(Primary 주파티션) 2. 잠만 잘수 있는 방(Logical 논리드라이브) 하드디스크(Hard Disk)의 구조를 대략적으로 표현한 그림입니다. 1. MBR : Master Boot Recoder 하드에서 가장 먼저 읽히는 부분이다. 하드디스크의 전체적인 관리를 한다고 볼수 있다. 4개의 파티션을 관리할수 있다. (참고 : 최대 나눌수 있는 파티션은 주파티션 3 + 확장파티션(논리 4개) = 7개입니다) 또 주파티션마다 각각의 부트섹터(BootSector)가 할당되는데 이럴 경우 컴퓨터가 어느곳의 부.. 더보기
리소스(Resource) 리소스(Resouce) : 코드의 논리와 무관한 데이터 메뉴, 비트맵, 액셀러레이터, 문자열, 아이콘, 커서 등이 속한다. 1. 리소스의 분리 : 프로그램은 코드와 데이터로 구성된다. 데이터는 프로그램의 처리 대상이며 코드는 데이터를 처리하는 수단이다. 도스 프로그래밍과 달리 윈도우즈 프로그래밍에서는 이러한 데이터를 만들고 관리하는 것이 별도의 작업으로 분리되어 있다. 이 데이터들 중에 코드와 무관한 것들을 리소스(Resource)라 하며 별도의 편집기로 만들어져 컴파일되며 링크시에 실행파일에 결합된다. 윈도우즈 프로그래밍에서 리소스와 코드가 분리되어 있어 다음과 같은 장점이 있다. 1. 디자이너와 프로그래머가 분담하여 작업을 하기가 편하다. 2. 리소스를 수정하더라도 리소스만 컴파일 하면 되므로 컴파일.. 더보기
윈도우 프로그램 기본 틀 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; HWND hwnd; LPCTSTR lpszClass=TEXT("Formality"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst=hInstance; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH.. 더보기
윈도우 관리 메시지 입력 처리의 중심에는 메시지가 있다. 이런 명시적인 입력 외에 윈도우에 관한 기본적인 관리도 메시지로 한다. 윈도우의 상황 변화시에 보내지는 메시지들도 응용 프로그램의 입장에서 보면 일종의 입력이며 프로그램은 이를 적절하게 처리해야 한다. 1. 생성 및 파괴 : 윈도우와 관련된 메시지중 가장 간단한 메시지는 윈도우가 생성될 때 보내지는 WM_CREATE 와 파괴될 때 보내지는 WM_DESTROY 두 가지가 있다. WM_CREATE 는 윈도우가 생성될 때 보내지므로 각종 초기화를 하기에 적합하며 WM_DESTROY 는 종료처리를 하기에 적합하다. 이 메시지들 대신해 사용할 수 있는 방법은 WinMain 에서 직접 초기화와 종료처리를 하는 것이다. WM_CREATE 메시지는 CreateWindow 함수에 의.. 더보기
타이머(Timer) 타이머 : 한 번 지정해 놓기만 하면 일정한 시간 간격을 두고 연속적으로 게속 발생한다. 주기적으로 같은 동작을 반복해야 한다거나 여러 번 나누어 해야 할 일이 있을 때 이 메시지를 이용한다. 타이머 메시지를 사용한 예제이다. (윈도우 프로그램 기본틀에 수정을 하면 된다 http://dakuo.tistory.com/entry/1) LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static HANDLE hTimer; SYSTEMTIME st; static char sTime[128]; switch(iMessage) { case WM_CREATE: hTimer =.. 더보기
입력하기 1. 키보드 입력 WM_CHAR 메시지 : 문자키 메시지 키보드로부터 입력이 발생했을 경우 윈도우즈는 포커스를 가진 프로그램에게 키보드 메시지(WM_CHAR, WM_KEYDOWN)를 보내주며 프로그램은 이 메시지를 받아 키보드 입력을 처리한다. (참조 : 포커스(Focus)란 입력초점이라는 뜻 즉 포커스를 가진 프로그램 = 활성화된 윈도우 오직 하나의 프로그램만이 활성화 될 수 있다) 키보드로부터 입력된 키값들을 화면으로 출력해주는 예제이다. (윈도우 프로그램 기본틀에 수정을 하면 된다 http://dakuo.tistory.com/entry/1) LRESULT CALLBACK WndProc(HWND hWnd, iMessage, WPARAM wParam, LPARAM lPara) { HDC hdc; PAI.. 더보기
출력하기 1. DC(Device Context) 윈도우즈는 세 가지 동적 연결 라이브러리(DLL) 로 구성되어 있는데 KERNEL : 메모리를 관리하고 프로그램을 실행시킨다. USER : 유저 인터페이스와 윈도우를 관리한다. GDI : 화면 처리와 그래픽을 담당한다. 윈도우즈 API 함수의 대부분은 이 세 DLL에 의해 제공된다. 특히 화면으로 출력되는 모든 글자와 그림은 GDI 를 통해야 한다. DC(Device Context)란 출력에 필요한 '모든 정보'를 가지는 데이터 구조체이며 GDI 모듈에 의해 관리된다.(ex. 폰트, 선의 색상과 굵기, 허가된 영역에만 출력하게 하기, 출력 방법 등등) 2. 기본 출력 예제 DC를 사용하여 문자열을 출력해보자. 마우스 왼쪽 버튼(WM_LBUTTONDOWN)을 누르면 .. 더보기
윈도우 기초 프로그래밍 #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; LPCTSTR lpszClass=TEXT("Sample"); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst=hInstance; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCursor.. 더보기
윈도우즈(Windows) 프로그래밍의 기초 윈도우즈(Windows)의 장점 : 1. 그래픽 기반의 운영체제이다. 2. 멀티 태스킹이 가능하다. 3. 장치에 영향을 받지 않는다. 4. 일관성 개발툴의 선택 : 1. API : API(Application Programming Interface) : 운영체제가 응용 프로그램을 위해 제공하는 함수의 집합 2. SDK : SDK(Software Development Kit) : 윈도우즈를 만든 Microsoft에서 제공하는 윈도우즈용 프로그램 개발 킷이다. API 함수들을 사용하여 프로그램을 작성하며 가장 원론적이고 먼저 발표된 개발방법이다. 섬세하고 막강하며 속도가 빠르고 크기에 유리하나 방대한 API 함수를 알아야 하며 코드가 길어지고 생산성도 낮다. 3. 클래스 라이브러리 API 함수들을 좀 더 쉽.. 더보기
.xxx 파일 만들기 윈도우에서 파일이름을 .txt 이런식으로 넣으면 파일이름을 입력해달라며 생성되지 않는다. 하지만 EditPlus 를 쓰면 이 문제를 해결하여 .txt 이런식의 파일을 만들수 있다.(다른 방법도 분명히 존재한다) 이런 파일을 만들었을시 여러 경우에 유용하게 쓰이지만 예를 들면 제로보드의 파일 업로드 취약점을 이용하여 웹쉘을 업로드하려고 할때 확장자가 .php 인 파일을 필터링 하는 경우가 있다. 이때 .htaccess 파일을 생성하여 이를 우회하는 공격기법이 있는데 이때 .htaccess 파일을 윈도우에서 생성할수 없다(파일명에러) 이 때 EditPlus를 사용하면 이 문제가 해결되어 .htaccess 파일을 생성하여 공격이 가능하다. 위와 같이 오류가 뜨던것이 EditPlus 로 열어서 다른이름으로 저장.. 더보기
Windows PE 구조 PE 포맷이란 윈도우 OS가 파일을 실행시키기 위해서 Portable Executable 포맷 (확장자 : .exe와 .dll)을 동적 라이브러리를 링킹하기 위한 참조 값과 API export and import tables, 리소스 데이터와 TLS 데이터를 캡슐화한 것이다. 소스 코드를 컴파일하고 링크를 하여 PE 구조의 실행 파일이 생성되는 과정을 순서도로 보면 실행 파일에는 어떤 내용들이 들어있는지 윈도우 Notepad.exe를 메모장으로 열어보겠다. MZ는 PE를 만든 Mark Zbikowski의 이니셜로써, MS-DOS 헤더의 시작을 알리는 문자이다. "This program cannot be run in DOS mod" 문자열은 DOS 에서 윈도우 프로그램이 실행되면 출력하는 문자열이다. PE.. 더보기