새소식

공부/시스템

어셈블리 핸드레이 및 함수 구조

  • -

어셈블리 핸드레이 및 함수 구조


어셈블리 핸드레이란?

어셈블리 핸드레이(assembly handray)는 어셈블리어를 C언어로 복원시키는 작업을 의미한다.

일반적으로 바이너리를 디버거로 디컴파일을 하면 바이너리에 대한 어셈블리 코드를 볼 수 있다. 이때 이 어셈블리 코드는 숙련자가 아니고서는 명시적으로 의미를 알아보기 힘들다. 그러므로 어셈블리 핸드레이 실습 통해 프로그램의 구조에 대해 자세히 배울 수 있다.


함수 프롤로그란?

어셈블리 코드에서 함수 프롤로그란 함수가 호출될 때 그 함수의 영역을 설정하는 일련의 어셈블리 코드를 뜻한다.

아래의 명령어와 같은 구조로 이루어져 있다. 

push ebp // 이때 push 되는 ebp는 함수가 호출되기 전 함수의 ebp다.
mov ebp, esp // 전 함수의 stack pointer을 현재 함수의 base pointer로 저장한다.

함수 에필로그란?

어셈블리 코드에서 함수 에필로그란 함수의 동작이 끝나고 return될 때 나를 호출한 함수로 돌아갈 때 스택을 정리하는 과정이다. 아래와 같이 이루어져 있다.

leave
ret

 

leave 어셈블리 코드

아래는 leave 어셈블리어가 동작하는 어셈블리 코드다. 

mov esp, ebp // 스택 포인터를 현재 베이스 포인터로 설정한다.
pop ebp // 나를 호출하기전 함수의 베이프 포인터를 pop 하고 ebp 레지스터에 저장한다.

ret 어셈블리 코드

아래는 ret 어셈블리어가 동작하는 어셈블리 코드다. 

pop eip // eip에 나를 호출했던 전 함수의 위치를 넣는다.
jmp eip // 현재 실행 순서를 변경하여 eip로 설정한다.

 

'공부 > 시스템' 카테고리의 다른 글

x86 환경 어셈블리어 정리  (0) 2023.03.12
DLL 이란?  (0) 2023.03.09
gcc 컴파일러란?  (0) 2023.03.09
컴퓨터 메모리 구조  (0) 2023.03.09
아키텍처의 정의와 종류 별 특징  (0) 2023.03.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.