컴퓨터 구조
Computer Science/OS
컴퓨터 구조와 명령어 집합 구조컴퓨터 구조(Computer Architecture)컴퓨터 구조란 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하며 이들을 구성하는 방법을 말하고, 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍쳐, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 1. 기능 구조에 대한 설계컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야이다. 대표적으론 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다.2. CPU의 명령어에 대한 설계명령어 집합구조(Instruction Set Architecture, ISA)라고 불리며, CPU가 처리해야하는 명령어를 설계하는 분야이..
Windows Memory Layout
Computer Science/OS
메모리 레이아웃메모리 레이아웃이란 프로세스 가상 메모리의 구성을 말한다. 프로그램을 실행하면 운영체제는 프로세스에게 사용 가능한 메모리 공간을 할당해 주는데 이 공간을 가상 메모리라고 한다. 운영체제는 프로그램의 정보를 참조하여 프로그램에 저장된 데이터가 적절한 영역에 저장되게 한다. 프로세스가 사용할 가상 메모리를 용도별로 구획하고, 프로세스가 사용하는 데이터를 적절한 구획에 저장한다. 유사한 데이터를 모아놓기 때문에 운영체제는 각 구획에 적절한 권한을 부여할 수 있고, 개발자는 프로세스의 메모리를 더 직관적으로 이해할 수 있다. 소프트웨어 리버스 엔지니어링의 핵심은 바이너리를 분석하여 바이너리의 동작을 이해하는 것이다. 바이너리의 동작은 메모리와 굉장히 밀접한 관련이 있으므로 바이너리의 동작을 자세히..
Binary
Computer Science/OS
프로그램과 컴파일CPU가 수행 할 명령들을 프로그래밍 언어(C, C++, Python 등)으로 작성한 것을 소스코드라고 하는데, 이것을 컴퓨터가 이해할 수 있는 기계어의 형식으로 번역하는 것을 컴파일이라고 한다. 컴파일러로는 대표적으로 GCC, Clang, MSVC 등이 있다. 컴파일은 꼭 필요한가?모든 프로그래밍 언어가 컴파일이 필요한 것은 아닌데, Python, Javascript 등의 언어는 컴파일이 필요하지 않다. 이러한 언어들은 사용자의 입력, 혹은 사용자가 작성한 스크립트를 즉시 번역하여 CPU에 전달한다. 이러한 동작은 통역과 비슷하기 때문에 인터프리팅(Interpreting)이라고 한다. 컴파일 과정(리눅스/gcc/C언어)c언어로 작성된 코드는 일반적으로 전처리(Preprocess), 컴파..