일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- mode함수
- pythonexe
- lob 10번
- 데이터형
- pyinstaller
- orge to troll
- lob 9번
- troll to
- 마크업 언어
- 빅데이터
- argc
- wolfman to darkelf
- 범용레지스터 #레지스터 #어셈블리 #ASM #리버싱 #어셈블리어 #EAX #ESP
- lob 7번
- 자료개방포털
- kosis
- 써니나타스
- 결측치
- kostat
- IS함수
- 서니나타스
- pythoncli
- ultra argv hunter
- 쉘코드
- argv
- 포너블
- R언어
- 써니나타스 1번
- anxi0
- lob
- Today
- Total
ANX1-Z3R0의 불안극복(不安克服)
001. 32bit(Extended) 범용 레지스터 | anxi0 본문
CPU나 RAM에서 연산처리를 하고 데이터들이 돌아다니기 위해선 수송자 역할을 하는 레지스터가 필요하다.
범용적으로 사용되는 레지스터들은 다음과 같다.
레지스터명 | 역할 | 비트 수 |
EAX (Accumulator) | 논리연산 수행 결과를 저장, | 32bit |
EBX (Base) | 메모리 주소를 저장하는 용도 | 32bit |
ECX (Counter) | 반복문 카운트를 저장하는 용도(5까지 저장가능) | 32bit |
EDX (Data) | EAX와 함께 부호확장명령 등에 쓰이고 큰수의 곱셈 또는 나눗셈 등의 연산에 쓰임 | 32bit |
ESI (Source Index) | 데이터 조작이나 복사할때 데이터의 주소가 저장됨 | 16bit |
EDI (Destination Index) | 복사 시 목적지의 주소 | 16bit |
EBP (Base Pointer) | 스택의 첫 주소 | 16bit |
ESP (Stack Pointer) | 스택의 끝 지점 주소 | 16bit |
이것들이 기본 레지스터들이고,
E?X 레지스터들은 모두 다음과 같은 구조로 되어있다.
EAX를 예로들면, E(16bit)+AX{ AH(8bit)+AL(8bit) }이런 구조이다.
똑같이 EBX를 예로들면, E(16bit)+BX{ BH(8bit)+BL(8bit) }이런 구조이다.
엄밀히 말하자면 레지스터들의 역할은 일종의 약속일뿐, 어셈블리어를 사용하면서 자유롭게 용도를 바꿔도 좋지만, 혼란을 야기할 수 있으므로 저 용도를 지키는 것이 낫다.
ESI, EDI, EBP, ESP와 같은 레지스터들이 주소에 집착하는 이유는. 데이터 영역을 중복시키지 않고, 데이터의 값을 재사용하여 메모리 영역을 효율적으로 쓰기 위함이다. (마치 전화번호부 전체를 외우는 것이 아니라 위치만 외워놓고 책을 찾아보는 것 같이)
[명령 포인터 레지스터]
EIP IR Eflags가 있지만,
Eflag는 다음 글에서 알아보고,
간단히 EIP에 대해서만 알아보자.
EIP는 다음 명령이 실행될 주소를 저장하는 곳이다.
프로그램이 실행되고나면 일련의 프로그램된 순서에 따라 함수들이 실행되는데, 이 때 EIP주소를 사용함으로써 함수 마지막에 pop하여 다음 함수로 이동하게 한다.
CONCLUSION
1. 정말 뭐가 뭔지 이해가 안 될 수 있다.
2. 일단 암기하자.
3. 컴퓨터가 원래 그렇지
'HACKING > [SYSTEM HACKING] TECH-BOOK' 카테고리의 다른 글
003. ASM 명령어 | anxi0 (0) | 2020.07.26 |
---|---|
002. ASM 데이터 타입 + 인텔 FLAGS 레지스터 | anxi0 (0) | 2020.07.25 |