'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


어셈블리어의 구조

- Intel 문법과 AT&T 문법이 있음

- 윈도우에서는 Intel 문법 사용

- 리눅스에서는 AT&T 문법 사용

- Intel 문법에서는 목적지 (destination)가 먼저 오고 원본(source)이 뒤에 오지만, AT&T에서는 반대

- Intel 문법에서 어셈블리어의 명령 형식은 다음과 같음

Label:
라벨
MOV
작동 코드
AX
제 1피연산자
BX
제 2피연산자
; comment
설명

 

• 데이터 타입

- 바이트(Byte) : 1바이트(8비트) 데이터 항목

- 워드(Word) : 2바이트(16비트) 데이터 항목

- 더블워드(Doubleword) : 4바이트(32비트) 데이터 항목

 

어셈블리어의 데이터 타입과 리틀 엔디언 방식

- CPU 종류, 운영체제 종류에 따라 빅 에디언 또는 리틀 에디언 사용이 다름

 

• 리틀 엔디언 방식

- 2개의 번지로 나누어 저장해야 하는 16비트 데이터(워드)의 경우 하위 바이트는 하위 번지에 상위 바이트는 상위 번지에 저장

- 예) hex 값 0x34F3을 1500번지에 저장하려면 하위값 0xF3은 1500번지에, 상위 값 0x34는 1501번지에 저장

주소 1500번지 1501번지
저장된 데이터 F3 34

 

 빅 엔디언 방식

- 일반적인 방식 - 예) hex 값 0x34F3을 1500번지에 저장하려면 0x34은 1500번지에, 0xF3는 1501번지에 저장

 

어셈블리어의 주소 지정 방식

• 레지스터 주소 지정

- 레지스터의 주소 값을 직접 지정 복사

- 처리 속도 가장 빠름

MOV DX, BX

 

• 직접 메모리 주소 지정

- 가장 일반적인 주소 지정 방식

- 보통 피연산자 하나가 메모리 위치를 참조하고, 다른 하나는 레지스터를 참조

- DS:[8088h]와 DS:[1234h]는 각각 ‘세그멘트:오프셋’형식의 메모리에 직접 접근하는 방식

MOV AL, DS:[8088h]
MOV DS:[1234h], DL

 

• 레지스터 간접 주소 지정

- ‘세그멘트:오프셋’형식을 사용, 세그먼트를 명시적으로 적지 않음

MOV AL, [BX]
MOV AL, [BP]

 

- 다음과 같이 기본이 아닌 세그먼트를 강제로 지정할 수도 있음

MOV AL, CS:[BX]
MOV AL, DS:[BP]

 

• 인덱스 주소 지정

- 레지스터 간접 지정 방식에 변위가 더해진 메모리 주소 지정 방식

- 예) 20h만큼 더해 메모리를 참조한 명령

 

- 다음과 같이 바꿔서 표현할 수 있음

MOV AL, 20h [BX]
MOV AL, 20h [BP]

 

• 베이스 인덱스 주소 지정

- 실제 주소 생성 위해 베이스 레지스터(BX 또는 BP)와 인덱스 레지스터(DI 또는 SI)를 결합

- 2차원 배열의 주소 지정에 사용

MOV AL, [BX+SI]
MOV AL, [BP+SI]

 

- 다음과 같이 바꿔서 표현할 수 있음

MOV AL, [BX] [SI]
MOV AL, [BP] [SI]

 

• 변위를 갖는 베이스 인덱스 주소 지정

- 베이스-인덱스의 변형으로 실제 주소 생성 위해 베이스 레지스터, 인덱스 레지스터, 변위 결합

MOV AL, [BX+SI+20h]
MOV AL, [BP+SI+20h]

- 다음과 같이 바꿔서 표현할 수 있음

MOV AL, [BX] [SI] [20h]
MOV AL, [BP] [SI] [20h]

 

+ Recent posts