안 쓰던 블로그

레지스터와 PE구조 본문

CTF/Reversing

레지스터와 PE구조

proqk 2020. 8. 26. 12:18
반응형

 

주요 레지스터

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
Comments