2022-01-13 · 2분
[해킹] 전용 레지스터
\- 데이터를 일시 정장하는 레지스터이다. 기억장치로부터의 읽어온 데이터와 누산기에 적재되어 있던 데이터가 지정된 연산을 수행한 후 그 결과 값을 다시 누산기에 적재한다. 누산기 내용을 넌부 지워 0으로 만들 수 있으며, 왼쪽이나 오른쪽으로 몇 자리씩 움직일 수도 있다
2021-07-10 · 4분
이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.
레지스터 : CPU의 변수

- 범위 레지스터: CPU에서 사용하는 변수의 일종
- EAX
산술 계산을 하며 리턴값을 전달합니다.
가장 많이 사용하는 변수 입니다.
- EDX
큰 수의 곱셈 또는 나눗셈 연산
- ECX
C : Counter 이다.
반복문에서의 카운터 for문의 i++의 역할이지만 반복문을 돌만큼 값을 저장한 후 감소하는 형태로만 작동합니다.
- EBX
EAX, EDX, ECX와 같은 일정의 변수
- ESI
문자열이나 각종 반복 데이터를 처리 또는 메모리 옮기는 데 사용합니다.
- EDI
일종의 변수
ESI는 시작지 인덱스, EDI는 목적지 인덱스
백준 10828번 스택 문제 : https://www.acmicpc.net/problem/10828 스택이란? 스택(Stack)은 제한적으로 접근할 수 있는 나열 구조이다. 한쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 형식의.. — nabomhalang.tistory.com
스택을 알아야합니다.
- ESP : stack pointer
stack frame의 끝 지점 주소가 담긴 포인터
- EBP : base pointer
stack frame의 첫 시작 주소가 담긴 포인터
- EIP : instruction pointer
다음에 실행해야 할 명령어의 주소 포인터

endian(엔디언)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법에 바이트 순서라 합니다.
엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 합니다.
offset: 특정 메모리 주소를 잠조할 때는 대괄호를 사용합니다.
eax에서 +4만큼 떨어져 있는 메모리 주소를 표기 : [eax+4]
mov a, b : a에 b를 넣어라.(a =b)
mov [ecx],eax : *ecx = eax
add a, b: a를 b만큼 증가시킴(a+=b)
sub a, b: a를 b만큼 감소시킴(a-=b)
mul a : eax(ax, ah, al)*=a
div a: eax(ax, ah,al)/=a
imul a,b : a*=b
idiv a,b : a/=b
lea a, [b] : a에 [b]를 넣어라.(a=[b]}mov와의 차이점- mov는 값을 대입- lea는 주소를 대입
push a: stack에 a를 pusy(esp -=4)
pop x: stack에 있는 값을 a로 pop함(esp+=4)
Inc a : a++
Dec a : a--neg a : -anot a : ~anop : 아무것도 하지 않는 명령어 (eip만 다음으로 증가)
and a, b : a &= b
or a, b : a |=b
xor a, b : a^=b
xor의 경우 xor eax, eax를 하면 eax를 0으로 초기화 시킨다.
shl a, b : a << b
shr a, b : a >> b
레지스터에는 상태레지스터인 flags가 존재합니다.
ZF : 이런 명령어의 연산 결과가 0일 경우 zf플래그는 1이 됨
연산 결과 == 0 -> '거짓' -> ZF : 1
연산 결과 != -> '참' -> ZF : 0
CF : 부호가 없는 연산에서 비트올림이나 비트 내림이 발생하면 CF가 1이 됨
SF : 부호가 있는 연산에서 수행한 결과가 양수일 때, 즉 최상위 비트가 0이면 SF=0 반대면 1이 됨
OF : 부호가 있는 연산에서 CF의 역할(overflow flag)
call location : 함수를 호출하는 명령, func는 함수의 주소
call : push eip; jmp junc
push eip : 함수 호출 이후 복귀할 주소 push 이때의 eip를 (RET)Return address 라고 합니다.
jmp location : location으로 eip를 옮김
스택 프레임을 해제하기 위한 작업
함수가 끝나면 함수를 처음 호출한 지점으로 돌아가기 위한 작업
- leave
mov esp ebp : esp를 ebp와 동일하게 맞춰줌(함수가 시작했을 때의 초기값으로 복원)
pop ebp : 원래의 ebp값으로 바꿈
- ret
pop eip call할 때 push eip를 했던 그 eip를 가져옴
jmp eip call 하기전의 eip 위치로 이동
!> ****](https://nabomhalang.tistory.com/entry/%EB%A6%AC%EB%B2%84%EC%8B%B1-%EC%8A%A4%ED%83%9D%ED%94%84%EB%A0%88%EC%9E%84%EC%9D%B4%EB%9E%80)
추가 : [해킹/리버싱] - [리버싱] 스택프레임이란..? [[리버싱] 스택프레임이란..? 스택 프레임(Stack Frame)이란? What's the stack frame? 스택 프레임(Stack Frame)이란 함수가 호출될 때, 그 함수만의 스택 영역을 구분하기 위하여 생기는 영역이다. 이 공간에는 함수와 관계되는 지역 변 — nabomhalang.tistory.com
출처
https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8
원문: tistory — 2021-07-10 발행, 이 블로그로 이전됨.
…