Programming/Windows System 26

[Windows System] Win32 실행파일(PE)의 구조

지금부터 우리가 흔히 실행 파일 또는 응용 애플리케이션이라고 부르는 EXE파일과 EXE 실행 시에 함께 로드되는 동적 라이브러리 파일인 DLL의 구조와 포맷에 대하여 상세하게 알아본다. 마이크로소프트는 이러한 EXE나 DLL 파일을 Win32 운영체제가 탑재된 플랫폼이라면 어떤 플랫폼에도 관계없이 실행된다는 의미에서 PE(Portable Executable)라고 부른다.따라서 마이크로소프트에서 Excutable이라고 할 때 이것은 EXE 파일뿐만 아니라 DLL까지 포함하는 의미이다. 즉, 인텔 프로세서(CPU) 기반의 윈도우가 탑재된 시스템에서 돌아가는 PE 프로그램은 DEC_ALPHA 프로세서를 탑재한 시스템 상에 인스톨된 Win32 운영체제 하에서도 실행 가능하다는 것이다. 사실 사용자가 식별할 수 ..

[MASM] VisualStudio2010에서 어셈블리 프로그래밍 하자...

nasm 공부를 대충 훑어보고, masm으로 넘어오면서 어셈프로그램 환경설정 때문에 시간이 많이 소모됐다. 비쥬얼로 하려는데 관련자료가 엉망진창...;; 영어문서 보고 대충대충 하긴했는데... 정리해놔야 겠다. 1. irvine 라이브러리 다운... http://kipirvine.com/asm/gettingStartedVS2010/index.htm#batch irvine 라이브러리를 제공하는 사이트에 들어가서 다운받는다. 일단은 C드라이브에 Irvine 폴더 하나 만들어 놓고 압축풀었다. 뭐 대충 관련 라이브러리와 이에 따른 예제 폴더가 들어있다. 관련 자료를 받았으니 이제부터 masm 프로젝트를 생성한다. 2. VisualStudio 2010을 실행하여 새로운 프로젝트를 생성한다. 프로젝트 생성은 [W..

[Windows System] 메모리 컨트롤

메모리 상태 : 페이지의 개수 = 가상 메모리의 크기 / 페이지 하나당 크기 페이지 개수는 가상 메모리의 크기에 비례하며(가상 메모리는 몇 비트 환경인지에 비례 (ex. 32비트 4GB)), 모든 페이지는 Reserve, Commit, Free 세가지 중 하나의 상태를 지닌다. Commit : 물리 메모리에 할당된 상태 Reserve : Free 와 Commit 의 중간상태이다. 해당 번지에 대해 예약을 한다. 다른 메모리 함수가 물리 메모리에 해당 번지에 할당하지 못하도록 한다. 하지만 물리 메모리의 소비는 발생하지 않는다. Free : 물리 메모리 할당이 이뤄지지 않은 상태 메모리 할당의 시작점과 단위 확인 : 가상 메모리 시스템은 페이지 단위로 관리된다. 페이지의 중간 위치에서부터 할당을 시작할수 ..

[Windows System] 메모리 계층(Memory Hierarchy)

메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등 메모리 계층 구조(Memory Hierarchy) : 메모리들은 프로그램이 실행하는 동안 데이터의 입력 및 출력을 담당한다. 메모리들의 차이는 CPU 와의 거리에서 온다. CPU와의 거리가 가까울수록 빠르고 용량이 작으며 멀수록 느리고 용량이 크다.(기술과 돈의 문제) 하드디스크에 있는 내용은 프로그램의 실행을 위해 메인 메모리로 이동한다. 메인 메모리에 있는 일부 데이터도 실행을 위해 L2 캐..

[Windows System] MMF(Memory Mapped File)

개념 : File 을 Memory 에 Mapping(연결) 가상 메모리 중 파일에 연결되어 있는 영역에 데이터를 저장한다. 이렇게 메모리에 저장된 데이터는 실제 파일에도 영향을 미친다. 즉, 데이터가 메모리뿐만 아니라 메모리에 연결된 파일에도 저장되는 것이다. 장점 : 1. 프로그래밍 편리 : 메모리상에 저장된 데이터를 조작하는 방식으로 파일 내 데이터를 조작할 수 있다. 2. 성능 향상 : 메모리는 중간에서 파일과 데이터의 캐쉬 역할을 하여 성능을 향상시킨다. MMF 구현 : 1. 파일 개방 : CreateFile() 2. 파일 연결 오브젝트 생성 : CreateFileMapping() HANDLE CreateFileMapping( HANDLE hFile, // 메모리에 연결할 파일의 핸들 LPSECU..

[Windows System] 라이브러리

라이브러리(Library) : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일을 의미한다. (참고 : 즉, 함수와 데이터들의 정의가 컴파일된 바이너리 코드로 라이브러리에 존재한다) C Run - Time Library Characteristics Libcmt.lib Multithreaded, static link Libcmtd.lib Multithreaded, static link (debug) Msvcrt.lib Multithreaded, dynamic link Msvcrtd.lib Multithreaded, dynamic link (debug)(ex. ---d.lib : 디버그 모드로 컴파일) Static Library : 정적 라이브러리 개념 : 헤더파..

[Windows System] 비동기 I/O 와 APC

개념 : 동기 I/O : I/O 작업의 수행을 위해 호출된 함수가 블로킹 상태에 놓이기 때문에 CPU는 블로킹 상태에서 반환될 때까지 일을 하지못한다. 비동기 I/O : I/O 작업의 수행을 위해 함수를 호출하자마자 반환한다. 따라서 CPU는 그다음 작업을 진행한다. 중첩(Overlapped) I/O : 넌블로킹(Non-Blocking) 함수를 이용하여 여러작업을 동시에 진행한다. 함수가 바로 반환되므로 계속 중첩해서 I/O 요청을 할수가 있다. (참고 : 동기 방식(블로킹) I/O 에서는 전송을 위해 할당된 내부 메모리 버퍼에 데이터가 복사가 되면 함수가 반환된다. (데이터 전송이 완료될 때 반환되는 것이 아니다) OVERAPPED 구조체 typedef struct _OVERLAPPED { ULONG_..

[Windows System] 디렉터리 컨트롤

디렉터리의 생성과 소멸 : BOOL CreateDirectory( LPCTSTR lpPathName, // 생성하려는 디렉터리 이름 LPSECURITY_ATTRIBUTES lpSecurityAttributes // 보안속성 ); BOOL RemoveDirectory( LPCTSTR lpPathName // 소멸하려는 디렉터리 이름 ); (참고 : 절대경로 지정시 마지막 디렉터리만 생성한다. 즉, C:\\AAA\BBB 일때 (AAA 디렉터리는 존재하지 않는다) 컴퓨터는 절대로 AAA 디렉터리를 만들어 주지 않는다. 따라서 BBB 디렉터리도 만들어지지 않는다. AAA 디렉터리가 존재해야 BBB 디렉터리가 생성된다. 현재 디렉터리, 시스템 디렉터리, Windows 디렉터리 : 현재 디렉터리(Current Di..

[Windows System] 파일 입출력(File Input/Output)

파일 열기 : HANDLE CreateFile( LPCTSTR lpFileName, // 개방(open)할 파일 이름 DWORD dwDesiredAccess, // 읽기/쓰기 모드를 지정한다.(or (l) 연산으로 결합) GENERIC_READ : 읽기 모드 GENERIC_WRITE : 쓰기 모드 DWORD dwShareMode, // 파일 공유방식 0 : 다른 프로세스에 절대 공유 불가. 중복 개방 불가 FILE_SHARE_READ : 다른 프로세스에서 동시 읽기 접근 가능 FILE_SHARE_WRITE : 다른 프로세스에서 동기 쓰기 접근 가능 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 보안 속성 DWORD dwCreationDisposition, // 파일의..

[Windows System] 가상 메모리(Virtual Memory)

개념 : (가정 : 16비트 시스템(0 ~ 64K -1 주소), 프로세스별로 64KB의 가상 메모리 할당, 메인 메모리 16KB) MMU(Memory Management Unit) : 실제로 존재하는 메모리 크기를 가상 메모리 크기만큼 존재하는 것처럼 CPU가 느끼도록 컨트롤 한다.(ex. 1GB 램의 메모리를 4GB의 메모리가 존재하는 것처럼 CPU가 느끼도록 한다) 가상 메모리 구성에 필요한 시스템의 기본 기능(메모리 할당 및 변환)을 제공한다. (CPU와 함께 하나로 패키징(Packaging) 되있다) CPU - > MMU : 메인 메모리에서 사용되지 않는 메모리 블록 하나를 골라서 할당 (1K부터 20바이트 할당요청) 20바이트를 할당 요청했음에도 메모리 블록은 4K 바이트 단위라서 4 K 를 할..