리버싱/리버싱 입문
리버싱 입문 1장 6. 어셈블러 기초 지식
상세
2021. 3. 10. 23:32
1. 어셈블러의 개요
어셈블러 : 컴퓨터가 이해할 수 있는 연속적인 비트로 구성된 기계어를 사람이 알아볼수 있도록
만든 일종의 매크로 모음. 어셈블러와 기계어는 1:1로 매칭됨
2. 어셈블러 기본 구조
어셈블러 명령어는 최대 3개까지 인자를 받아들일 수 있음.
1) 2개의 인자를 사용하는 명령어
ADD
예) ADD EAX, EBX -> EAX레지스터의 값에 EBX 레지스터 값을 더해 EAX 레지스터에 다시 저장하는 동작
고급 언어 : EAX = EAX + EBX
헥사 코드 : 01D8
2) 1개의 인자를 사용하는 명령어
INC
INC ESI -> 인자로 오는 ESi 레지스터 값을 1만큼 증가
고급 언어 : ESI = ESI + 1
헥사 코드 : 46
PUSH
뒤에 오는 인자를 스택의 맨 위에 입력함
PUSH 0 -> 스택의 맨 위에 0000_0000을 입력한다.
헥사 코드 : 6A 00 (00은 인자로 오는 0을 그대로 사용함)
고급 언어 : 스택과 관련한 명령어가 따로 없음
3) 인자가 없는 명령어
RETN
단 뒤에 하나의 인자를 입력 받을수도 있음
RETN -> 스택의 맨 위에 있는 값을 EIP 레지스터(다음에 실행할 명령어를 저장하는 역할)에 저장하는 역할을 함
운영체제는 프로그램이 사용하는 EIP 레지스터를 사용해서 다음에 어떤 명령어를 실행할지 결정.
즉 스택의 맨 위 주소에 있는 명령어를 실행