스택
-
7 스택 프레임리버싱 엔지니어링/리버싱 핵심 원리 2022. 3. 13. 23:36
(흐름상 5->6보다 5->7이 이해에 좋은 것 같아 업로드 순서 수정) 7.1 스택 프레임 ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법 ESP 값은 프로그램 내에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하기 어렵고 CPU가 정확한 위치를 참고하기 어렵다 ESP 값을 EBP에 저장하고 함수 내에서 유지하면, 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다. 스택 프레임의 구조 PUSH EBP ; 함수 시작(기존의 값을 스택에 저장) MOV EBP, ESP ; 현재의 ESP를 EBP에 저장 ... MOV ESP, EBP ; ESP 정리(함수 시작했을 때 값으로 복원) POP EB..
-
5 스택리버싱 엔지니어링/리버싱 핵심 원리 2022. 2. 6. 22:57
5. 스택 5.1.1 스택 메모리의 역할 함수 내의 로컬 변수 임시 저장 함수 호출 시 파라미터 전달 복귀 주소(return address) 저장 5.1.2 스택의 특징 스택 포인터(ESP)의 초기 값은 Stack Bottom에 가깝다 PUSH 명령에 의해 값이 추가되면 스택 포인터는 Stack Top을 향해 움직이고, POP 명령에 의해 스택에서 값이 제거되면 스택 포인터는 Stack Bottom을 향해 움직인다. 5.1.3 스택 동작 예제 1) 초기 상태의 스택 ESP : 19FF74 2) PUSH 100 ESP : 19FF70, 4바이트 줄어듦 ESP가 위쪽 방향으로 이동 ESP가 가리키는 주소 19FF70에 100이 저장됨 3) POP EAX ESP : 19FF74, 4바이트 증가 ESP가 아래 ..