Assembly/basic

Assebmly 기초 [정의, 레지스터]

Tree_Park 2021. 2. 23. 22:18
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으로 채워진다)**

    레지스터 종류

    데이터 저장

    1. EAX (Extended Accumulator Register)
      • 산술 논리연산을 수행하여 반환값이 저장
    2. EDX(Extended Data Register)
      • 큰 수의 곱셈과 나눗셈 연산에서 EAX 레지스터와 함께 사용(부호 확장 명령등에 사용)
    3. EBX(Extended Base Register)
      • ESI 레디스터나 EDI 레지스터와 결합될 수 있고, 메모리 주소를 저장
    4. ECX(Extended Count Register)
      • 반복 명령어 사용시 반복 카운터로 사용되는 값

    주소지정

     

    1. ESI(Extended Source Index Regiter)
      • 데이터 조작, 복사시에 소스데이터의 주소 저장
    2. EDI(Extended Destination Index Register)
      • 데이터 복사시의 목적지 주소가 저장

     

    1. ESP(Extended Stack Point Register)
      • 스택프레임에서 스택의 가장 끝지점 주소 저장, Push, Pop 명령에 따라 ESP 값이 4바이트씩 이동
    2. EBP(Extended Base Point Register)
      • 스탬프레임에서 스택의 시작 지점 주소가 저장. 스택프레임이 소멸되지 않는 이상 EBP 레지스터의 값은 변동되지 않는다.