안 쓰던 블로그
레지스터와 PE구조 본문
주요 레지스터
EAX: 산술, 논리연산. 함수 반환값 저장
EDX: 곱셈, 나눗셈 연산. EAX레지스터랑 함께 사용
ECX: 반복 명령어 사용시 반복 카운터로 사용되는 값 저장
ESP: 스택 프레임에서 스택 가장 끝 지점 주소 저장. Push, Pop명령에 따라 4바이트씩 이동
EBP: 스택프레임의 스택 시작 지점 주소 저장. 스택 프레임 소멸되기 전까지 값 변화 없다
주요 어셈블리 명령어
MOV: 시작지에서 목적지로 데이터 복사 (대입)
PUSH: 스택에 값을 넣는다 (ESP의 값이 4만큼 줄어들고 새로운 값 들어감)
POP: ESP레지스터가 가리키고 있는 위치의 스택 공간에서 4바이트만큼을 피연산자에 복사 후 ESP레지스터값+4한다
CALL: 함수 호출 시 사용(호출 후 반환된 값은 EAX에 저장)
CMP: 두 피연산자 비교
ADD: 두 피연산자 더함
SUB: 뺌
MUL: 곱함
XOR: 비트가 서로 다르면 1 같으면 0
JNZ(Jump if not zero)/JE(Jump if equal): 0이 아니면/0이 되면 점프 수행한다. 보통 cmp와 같이 나온다
PE구조
PE파일은 옮겨다니면서 실행시킬 수 있는 파일을 뜻함
다른 운영체제와 이식성을 좋게 하기 위해서 만든 파일 포멧
exe, dll, obj 등이 있다
PE구조의 주요 헤더값
Image Base: PE파일이 처음 로딩됨
Address of EntryPoint: 프로그램이 실행되는 상대주소 값
실제 실행 주소: Image Base+Address of EntryPoint
Number of Section: 섹션의 개수를 정의하는 값
.text(섹션): 실행파일의 소스 코드가 들어있음. 변수, import, export테이블 외의 나머지 소스 코드 저장
.data(섹션): 읽기/쓰기가 가능한 일반적인 데이터를 위한 섹션. 정적 변수와 전역 변수 저장
'CTF > Reversing' 카테고리의 다른 글
리버싱-분기문 우회 (0) | 2020.08.26 |
---|---|
리버싱-실행 프로그램 변경 (0) | 2020.08.26 |
리버싱-PE분석 및 수정 (0) | 2020.08.26 |
리버싱-문자열 탐색 (0) | 2020.08.26 |
Jump 문제 풀이 (0) | 2016.07.19 |