리버싱/공부

어셈블리어 push, pop 명령어

Goblebin 2022. 6. 3. 01:00
반응형

STACK : LIFO(Last In First Out)구조로 마지막에 들어간 값이 먼저 나오는 구조이다.

디버깅을 하다보면 함수를 호출할 때 일시적으로 값을 저장하는 용도로 쓰이거나 연산을 할 때 사용된다.

STACK

아래에서 위로 값이 올라가지만 주소를 확인해보면 주소값은 감소하는 것을 알 수 있다.


push 명령어는 stack에 값을 넣는 것이다.

push operand

예를 들어 위 사진에 있는 검정색으로 표시된 부분이 RSP라고 하자.(RSP = 0x000000000062F498)

push 명령어는 현재 RSP가 가르키는 스택에 값을 넣는 것이 아니라 RSP의 값을 8만큼 빼고 그 위치에 값을 넣는다.

쉽게 정리하면

sub rsp, 0x08   ←   RSP의 값을 8만큼 뺀다.(RSP = 0x000000000062F490)

mov qword ptr [rsp], operand 가 된다.


pop 명령어는 stack에서 값을 빼는 것이다.

pop register  ←   pop 명령어 뒤에는 값을 저장할 레지스터가 들어간다.

풀어쓰면

mov qword ptr [rsp], register(ex. rax, rbx, rcx 등)

add rsp, 0x08

반응형