'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.
• 어셈블리어의 구조
- 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]
'System > Hacking and Security' 카테고리의 다른 글
시스템 해킹과 보안 - 어셈블리어의 기본 문법과 명령 2 (0) | 2022.09.27 |
---|---|
시스템 해킹과 보안 - 80×86 시스템 CPU와 레지스터 (0) | 2022.09.27 |
시스템 해킹과 보안 - 운영체제 (0) | 2022.09.27 |