반응형
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
반응형
'리버싱 > 공부' 카테고리의 다른 글
C언어로 작성된 printf함수 분석해보기 (0) | 2023.03.20 |
---|---|
어셈블리어 call, leave, ret 명령어와 스택프레임 (0) | 2022.06.03 |
어셈블리어 and, or, xor, not 명령어 (0) | 2022.06.02 |
어셈블리어 add, sub, inc, dec 명령어 (0) | 2022.06.02 |
test, cmp 그리고 분기문 jmp (0) | 2022.03.15 |