본문으로 바로가기

어셈블리어에 대해 알아보자

category Study/reversing 2017. 8. 21. 16:31

어셈블리어란?


프로그래밍 언어중 하나이며, 기계어에서 한단계 위인 저급언어이다




어셈블리어의 구조


어셈블리어의 기본적인 형태는 명령어(OpCode)와 오퍼랜드(Operand : 피연산자)로 이루어져 있으며 콤마(,)로 오퍼랜드를 구분한다

명령어를 오퍼레이터(Operator : 연산자)라고 부르며 이러한 오퍼레이터의 종류에 따라 오퍼랜드의 개수가 다르다



어셈블리어 문법의 종류


어셈블리어는 사용하는 어셈블러가 어떤 문법을 따르냐에 따라 사용하는 문법이 달라진다.

크게 인텔(Intel)방식과 AT&T방식이 있는데 차이점을 알아보자


1. Oprand 기입 순서

Intel문법은 오퍼랜드가 Destination, Source 순이며

AT&T문법은 순서가 반대이다


2. 레지스터 표현방법

Intel문법은 레지스터 이름을 eax 처럼 그냥 적지만

AT&T 문법은 레지스터이름 앞에 %를 붙여 %eax와 같이 표현한다


3. 상수 표현방법

Intel문법은 상수를 있는 그대로 적지만

AT&T문법은 상수 앞에 $를 붙여 $10과 같이 표현한다


4. 주소참조

Intel문법은 대괄호([]) 안에 주소를 넣어 [eax+10]이렇게 표현할 수 있지만

AT&T문법은 소괄호(())를 사용하여 10(%eax)과 같이 표현한다



보통 윈도우 환경에서 Intel문법을, 리눅스 환경에서 AT&T문법을 많이 볼 수 있다