어셈블리어란?
어셈블리어는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.
컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기와 개수, 저장된 데이터 형의 표현도 각기 다르다. 모든 범용 컴퓨터는 기본적으로 동일한 기능을 수행하지만, 기능을 어떤 과정을 거쳐 수행할지는 다를 수 있으며, 이런 차이는 어셈블리어에 반영되게 된다.
------------------------------------------------------------------------------------------------------------------------------------------------------------
위의 설명은 위키백과에 나와있는 어셈블리어의 설명이다. 쉽게 말해 기계어(0과 1의 이진수로 프로그래밍함)와 일대일 대응하는 어셈블리어는 컴퓨터의 구조에 따라서 각기 달라진다고 생각하면 된다.
어셈블리어 종류
//intel방식, AT&T방식 두 개의 문법이 서로 호환되지 않음.
1.intel 방식 : 윈도우에서 사용, 접두사/접미사가 붙지않아 대체로 간단함.
**2진수에는 'h', 16진수에서는 'b' 접두사를 지닌다.
2.AT&T 방식 : 리눅스에서 사용, 레지스터에는 '%' 접두사가 붙고, 값들에는 '$' 접두사가 붙음
intel 방식과 AT&T방식의 문법 구조를 비교하기 전에 어셈블리어의 구조를 기본적으로 알고 가자. 어셈블리어는 명령어(OpCode)와 오퍼랜드(Operand)로 이루어져 있다.
**Operand는 명령어의 대상이 되는 레지스터 이름이나 값이 들어간다.
이제 intel방식과 AT&T방식, 두 문법의 차이점을 알아보자.
Intel 방식 | AT&T 방식 | |
명령어 | mov | movb, movw, movl |
인자 순서 | dest, src | src, dest |
레지스터 | eax | %eax |
상수 | 0h | $0x0 |
간접 주소 | [eax] | (%eax) |
'보안 공부 > Reversing' 카테고리의 다른 글
[리버싱] CMP와 TEST 명령어 차이 (0) | 2019.11.01 |
---|---|
[리버싱] MOV와 LEA의 차이 (5) | 2019.09.17 |
[리버싱] 어셈블리 명령어 종류 (0) | 2019.09.17 |
[리버싱] 레지스터란, 레지스터 종류 (0) | 2019.09.15 |
[리버싱] 리버싱이란, 디버그란 (0) | 2019.09.15 |
댓글