us1s

어셈블리_기초_01 본문

sOFT wARE

어셈블리_기초_01

늑머 2020. 6. 22. 22:10
어셈블리어 (Assembly)
 -기계어 라인 한 줄이 어셈블리어 라인 한 줄에 1:1로 대응하는 저급 언어이다.
 -Low Level Language 이다.
 -프로그램이 가벼워 소형 임베디드 시스템에 활용된다.
 -크게 AT&T와 Intel 두 가지 문법으로 나뉜다. (표기법 차이)

예를 들어 기계어 10000011...1001 은 

             어셈블리어 ADD EAX, 9와 동일하다.


명령어의 구성

OP Code (명령어) Operand1, 2, 3 (피연산자)
  • OP code : 명령어에서 연산 동작을 지정하는 부분으로 명령어의 종류를 표현    ex) ADD, SUB, POP 3
  • Operand : 연산의 대상이 되는 데이터의 위치, 값을 나타내는 부분

 

  1. Intel 문법 (Windows) : Opcode + 목적지(destination), 원본(Source)
    • ex) MOV EAX, 1              → EAX에 1을 넣어라.
  2. AT&T 문법 (Linux) : Opcode + 원본(Source) 목적지(destination)
    • ex) MOV 1 EAX              → EAX에 1을 넣어라.

필수 명령어

  • PUSH : 스택에 값을 넣을 때 사용한다.
  • POP : 스택의 값을 가져올 때 사용한다.
  • MOV : 값을 넣는 명령어이다.   ex) MOV ECX, 1
  • LEA : 주소를 넣는 명령어이다.  ex) LEA EBX, [ESI]
  • ADD : 값을 더하는 명령어이다. (+)
  • SUB : 값을 빼는 명령어이다. (-)
  • INC : 연산 (++)
  • DEC : 연산 (--)
  • CMP : 두 개의 Operand를 비교하는 명령어이다.
  • CALL : 함수를 호출하는 명령어이다.
  • RET : CALL로 호출된 함수를 종료하고, CALL 다음 줄의 명령어로 이동한다.
  • NOP : 아무것도 하지 않는 명령어이다.

레지스터 (Register)

      CPU에서 데이터를 연산을 할 때, 레지스터를 이용한다.

  

범용 레지스터

 - EAX : 연산에 사용된다. 리턴 값을 저장한다.

 - EBX : 연산에 사용된다. 리턴 값을 저장하지 않는다.

 - ECX : Count 하는 값을 저장한다. (탑-다운 방식으로 동작)

 - EDX : EAX, EBX, ECX 가 부족할 때, 사용되는 여분의 레지스터이다.

 

인덱스 레지스터

 - ESI : 데이터를 복사할 때, 복사할 데이터의 주소가 저장된다.

 - EDI : 데이터를 복사할 때, Destination의 주소가 복사된다.

 

포인터 레지스터

 - ESP : 스택 프레임의 끝 지점 주소가 저장된다.

 - EBP : 스택 프레임의 시작 지점 주소가 저장된다.

 

* 레지스터 앞에 E가 붙으면 32bit, R이 붙으면 64bit이다.

 

 

'sOFT wARE' 카테고리의 다른 글

네트워크 기초_02  (0) 2020.06.27
SQL Injection_01  (0) 2020.06.26
MySQL 5.6_dump  (2) 2020.06.26
네트워크 기초_01  (0) 2020.06.25
버퍼 오버 플로우_01  (0) 2020.06.23