레지스터, 스택과 어셈블리어 명령어
레지스터
레지스터 : cpu 내부 존재하는 다목적 저장 공간, CPU가 고속으로 데이터를 처리하는 것을 가능하게 한다.
메모리스택 : 중앙 처리 장치와 붙어 있는 RAM의 일부분
CPU(마이크로 프로세서)의 구성 : 레지스터, 연산장치, 제어장치
- 레지스터의 종류
- General Purposer Registers
레지스터 | 용도 |
EAX | 산술연산에 사용, 함수 리턴값 저장 하는 변수의 용도로 사용 |
ECX | 반복 카운트 |
EDX | 자료보관용 |
EBX | 자료임시보관시 사용 |
ESP | 스택 포인터(주소를 가리킴) |
EBP | 스택 프레임의 기준점 |
ESI | 자료임시보관시 사용 |
EDI | 자료임시보관시 사용 |
스택
LIFO(Last In First Out)
자료구조에서 기억 장치에 데이터를 일시적으로 겹쳐 쌓아 두었다가 필요할 때 꺼내 사용할 수 있도록 주기억장치나 레지스터의 일부를 할당해 사용하는 기억장치
EBP : 스택의 바닥은 몇 번지니?
ESP : 현재의 탑은 몇 번지니?
EAX : 함수리턴값, 데이터 저장(POP이 일어나면 EAX에 데이터를 넣음)
스택의 구조의 이해를 돕기 위해 ollydbg로 실습한 화면이다.
EAX, ECX, EDX, EBP 등 레지스터들이 사용되는 모습을 볼 수 있으며 EBP와 ESP가 나타내는 주소를 보면 스택의 TOP과 BOTTOM 또한 확인이 가능하다.
어셈블리어명령어
어셈블리어: 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어
형식 : ADD [operand1] [operand2]
의미 : operand1 = operand1 + operand2
(operand1 과 operand2 를 더한 값을 operand1에 저장)
형식 : SUB [operand1] [operand2]
의미 : operand1 = operand1 - operand2
(operand1 과 operand2 를 뺀 값을 operand1에 저장)
e.g. SUB EAX,5 => EAX = EAX-5
e.g. ADD EAX,10 => EAX = EAX+10
2000000 | JMP 2000024 |
2000004 | ADD EAX,50 |
2000008 | RTN |
형식 : CMP A,B
JNZ [code address] //Z Flag의 값이 0인 경우
의미 : A와 B의 값이 다른 경우 code address로 이동한다.
e.g.
ECX | 00000050 |
EAX | 00000050 |
20000000 | CMP ECX, EAX |
20000004 | JNZ 2000000C |
20000008 | ADD EAX, ECX |
2000000C | RTN |
e.g.
ECX | 00000050 |
EAX | 00000050 |
20000000 | CMP ECX, EAX |
20000004 | JE 2000000C |
20000008 | DEC ECX |
2000000C | RTN |
6.NOP(코드 이동)
NO OPERATION : 실행하지 않음!
참고 : 정보보안(22년-1학기) 고수정 교수님 강의 및 강의 자료 변형, 요약