1. x86 Assembly: Essential Part(1)

어셈블리어와 x86-64

어셈블리어

어셈블리어란 쉽게 말하면 기계어와 거의 1:1로 대응되는 저수준의 언어이다.

다만 CPU마다 쓰는 명령어 집합(ISA)이 달라서 어셈블리어도 아키텍처별로 종류가 다른데, 이 강의에서는 x64 아키텍처 기준으로 어셈블리어를 다룬다.

어셈블리어의 기본 규칙

같은 x86 계열에서도 대표적으로 Intel 문법과 AT&T 문법 두 가지가 있다.

따라서 실무/리버싱/시스템 해킹 공부를 위해서는 Intel 문법을 익힌 뒤 AT&T와 차이도 비교해두면 좋을 것이다.


x86-64 어셈블리어

어셈블리어 역시 특정한 문법 구조를 가지고 있고, 이 문법 구조는 아키텍처별로 다르다.

본 유닛에서는 x86-64 아키텍처를 기준으로 한다.

기본 구조

image.png

x86-64 어셈블리어 문법 구조

x64 어셈블리 언어는 우리가 사용하는 한국어보다는 훨씬 단순한 문법 구조를 지닌다.

이들의 문장은 동사에 해당하는 **명령어(Operation Code, Opcode)**와 목적어에 해당하는 **피연산자(Operand)**로 구성된다.

피연산자는 해당 연산의 입력 값(레지스터, 상수, 메모리 주소 등)이 된다. 이때 피연산자의 개수는 0개 혹은 그 이상이 될 수 있으며, 이는 명령어에 따라 다르다.