보안_기타

레지스터 및 어셈블리 기초

정지홍 2024. 8. 3. 03:12

bit

  • 가장작은단위. 0 or 1만표현가능하다.

byte

  • 8bit = 1 byte. 최대 255까지 표현 가능. 최대 0xFF

word

  • 2byte를 합쳐서 word라고 함. Word는 최대 65535까지 표현 가능. 최대 0xFFFF (2byte이니)

double word

  • 2word를 합쳐서 double word라고 함. 최대 0xffffffff까지 표현 가능하다. 최대 0xFFFFFFFFF

kbyte

  • 1024 byte = kbyte

MEGA BYTE

  • 1024Kbyte = 1Mbyte

 


EIP 

  • instruction pointer
  • cpu가 처리할 명령어의 주소를 나타내는 레지스터
  • cpu는 eip가 가르키는 memory address의 instruction을 하나 수행 후, 자동으로 해당 instruction 길이만큼 eip증가
  • sw는 이를 조작 못하며, CALL,JMP,RET같은 명령어로만 조작 가능


EAX

  • Accumulator Register
  • 산술 연산을 할 떄 사용 or 함수의 리턴 값을 전달할때 사용.
  • 32비트 표현. 하휘 16비트는 AX라고도 함.
  • AX의 상위 8비트는 AH (15 ~ 8) , 하위 8비트는 AL (0 ~ 7)이라고 함.

EBX

  • Base Register
  • 메모리 주소 지정용 DS세그먼트에 저장된 데이터를 가르킴
  • 메모리 주소 계산에서 자주 사용
  • BX의 상위 8비트는 BH (15 ~ 8) , 하위 8비트는 BL (0 ~ 7)이라고 함.

ECX

  • Count Register
  • 반복문에서 카운트로 사용.

EDX

  • Data Register
  • EAX의 확장 개념이며, mul or div할때 사용
  • IN 및 OUT 명령어에서 포트 번호를 지정하는 데 사용
  • 범용 데이터 저장

EBP

  • Base Pointer Register
  • 스택 프레임의 처음(기준) 지점의 주소를 저장
  • main함수 실행시 가장 처음 부분 주소.
  • main()함수 있고 function()함수 실행되면 function()의 처음주소.
  • 즉, ss register가 가르키는 스텍상의 한 데이터를 가르킴

ESP

  • stack pointer register
  • stack의 끝 지점 주소를 가르킴
  • 즉, ss register가 포인터하는 stack segment의 꼭대기를 가르킴

ESI

  • Source index register
  • DS register가 가르키는 data segment내 어느 데이터를 가르키는 포인터. 데이터 주소를 가르킴.

EDI

  • Destination Index Register
  • ES register가 가르키는 data segment내 어느 데이터를 가르키는 포인터. 목적지의 주소를 가르킴. 사용가능


CS 레지스터

  • code segment의 시작 주소를 가르킴

DS 레지스터

  • data segment의 시작주소를 가르킴
  • 프로그램에서 정의된 데이터, 상수, 작업 영역 메모리 주소를 지정

SS 레지스터

  • stack segment의 시작주소를 가르킴.

ES 레지스터

  • 추가로 사용된 data segment주소를 가르킴.

FS, GS 레지스터

  • 문자 연산과 추가 메모리를 지정하는데 사용하는 여분의 레지스터임
  • 특수한 용도로사용가능

 


2. 어셈블리 명령어 구조 set disassembly-flavor intel

 

|  Label  |  작동코드 |  op1 | op2 | 설명문 |

 

 


 

3. 주소지정 방식 Addressing Mode

3-1. 즉시 지정방식( immediate addressing)

  • ex) mov eax, 0x1
    • eax에 1을 넣는다. (16진수)
    • 위와 같이 메모리의 주소의 내용을 꺼내지 않고 직접 값을 대응 시키는 방법을 즉시 지정방식이라고 함

3-2. 레지스터 지정방식( register addressing)

  • ex) mov ebp, esp
    • ebp레지스터에 esp의 값을 넣는다. (할당). 즉, 새로운 스택 프레임 시작
    • register에서 register로 값을 대응시키는 register 지정방식이라고 함
    • 속도는 빠르지만, register크기(32bit)로 인해서 크기가 제한

3-3. 직접 주소 지정방식(directly addressing)

  • ex) mov eax 0x70456fa1
    • eax에 0x70456fa1을 저장
    • 메모리의 주소를 직접 저정해서 바로 찾아오는 방식. 로드load라고 생각.

3-4. 변위를 갖는 베이스 인덱스 주소 지정 (변위: 물체가 위치를 바꾸는 일 or 양)

  • ex) MOV AL, [BX+SI+0x20]
    • BX레지스터와 SI레지스터 값을 더한 후, 여기에 0x20을 더한다.
    • 그리고 이를 AL에 저장한다. (X = H L )

3-5. 베이스 상대주소지정방식

  • ex) move eax, [esi+0x4]
    • esi레지스터에서 4byte를 더한 주소 값을 eax에 할당
    • 문자열 연산 or 메모리 블록 전송에서 주로 사용