728x90
목차
어셈블리어
기계어
CPU가 이해할 수 있는 언어
CPU 제조사마다 CPU 인식 가능한 전기 신호에 관한 '행동'을 미리 정의해 놓았고,
이 전기신호를 0과 1로 표현한 것을 기계어라고 한다.
어셈블리어는 0과1의 전기신호의 나열(기계어)을 인간이 이해하기 쉽도록 문자에 대응한 언어이다.
어셈블러
기계어를 어셈블리어를 기계어로 변환시켜주는 기계
tools
- ollyDbg : Debug tool (for intel cpu debugger)
방식
명령어 (OpCode < operaton >)
피연산자(Operand)
- 명령어를 통해 피연산자에게 명령을 내리는 방식
명령어 예시
mov
#EAX라는 공간에 1을 이동해라(넣는다, 덮어쓴다)
# Operator, Operand(reg), Operand(val)
MOV EAX, 1
MOV EAX, ECX
- 함수의 호출처럼, MOV라는 func에 ,(콤마)로 구분한 EAX, 1 param를 전달하는 방식처럼 보인다. - EAX는 CPU내에서 사용하는 공간[Register]이라고 생각하면 된다
범용 레지스터 (Intel-32bit)
- CPU 내의 저장공간
- Registry와는 다른개념 (Windows에서 System 설정 값 저장)
공간개념
- EAX (32bit)
- AX (16bit) [AH+AL]
- AH (16bit 중 앞의 1byte 공간)
- AL (16bit 중 뒤의 1byte 공간)
AX
|AH|AL|
|---|---|
|0000 0000|0000 0000|
EAX
|앞의 2byte|AX|
|---|---|
|0000 0000 0000 0000|AH+AL|
E : extended, H: High, L: Low
E[A,B,C,D]X
[A,B,C,D]X
[A,B,C,D]H
[A,B,C,D]L
** MOV AX, EAX 는 불가능하다. EAX (32bit)만큼의 크기를 AX(16bit)에 할당 불가능하다. (그반대는 가능, 앞의 bit는 0으로 채워진다)**
레지스터 종류
데이터 저장
- EAX (Extended Accumulator Register)
- 산술 논리연산을 수행하여 반환값이 저장
- EDX(Extended Data Register)
- 큰 수의 곱셈과 나눗셈 연산에서 EAX 레지스터와 함께 사용(부호 확장 명령등에 사용)
- EBX(Extended Base Register)
- ESI 레디스터나 EDI 레지스터와 결합될 수 있고, 메모리 주소를 저장
- ECX(Extended Count Register)
- 반복 명령어 사용시 반복 카운터로 사용되는 값
주소지정
- ESI(Extended Source Index Regiter)
- 데이터 조작, 복사시에 소스데이터의 주소 저장
- EDI(Extended Destination Index Register)
- 데이터 복사시의 목적지 주소가 저장
- ESP(Extended Stack Point Register)
- 스택프레임에서 스택의 가장 끝지점 주소 저장, Push, Pop 명령에 따라 ESP 값이 4바이트씩 이동
- EBP(Extended Base Point Register)
- 스탬프레임에서 스택의 시작 지점 주소가 저장. 스택프레임이 소멸되지 않는 이상 EBP 레지스터의 값은 변동되지 않는다.