리버싱/공부
어셈블리어 push, pop 명령어
Goblebin
2022. 6. 3. 01:00
반응형
STACK : LIFO(Last In First Out)구조로 마지막에 들어간 값이 먼저 나오는 구조이다.
디버깅을 하다보면 함수를 호출할 때 일시적으로 값을 저장하는 용도로 쓰이거나 연산을 할 때 사용된다.
아래에서 위로 값이 올라가지만 주소를 확인해보면 주소값은 감소하는 것을 알 수 있다.
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
반응형