어셈블리어란?
프로그래밍 언어중 하나이며, 기계어에서 한단계 위인 저급언어이다
어셈블리어의 구조
어셈블리어의 기본적인 형태는 명령어(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문법을 많이 볼 수 있다
'Study > reversing' 카테고리의 다른 글
어셈블리어 명령어에 대해 알아보자 (0) | 2017.08.22 |
---|---|
레지스터에 대해 알아보자 (0) | 2017.08.21 |
올리디버거(OllyDBG)에 대해 알아보자 (2) | 2017.08.20 |
리버싱에 대해 알아보자 (0) | 2017.08.19 |
리턴코드 분석 (0) | 2017.06.16 |