리버싱

[드림핵] 6. x86 Assembly🤖: Essential Part(2)

코딩 못하는 공대생 2024. 5. 18. 04:35
728x90

스택

  • push val : val을 스택 최상단에 쌓음
rsp += 8
reg = [rsp-8]

예제

[Register]
rsp = 0x7fffffffc400

[Stack]
0x7fffffffc400 | 0x0  <- rsp
0x7fffffffc408 | 0x0

[Code]
push 0x31337

 

결과

[Register]
rsp = 0x7fffffffc3f8

[Stack]
0x7fffffffc3f8 | 0x31337 <- rsp 
0x7fffffffc400 | 0x0
0x7fffffffc408 | 0x0

 

 

  • pop reg : 스택 최상단의 값을 꺼내서 reg에 대입
rsp += 8
reg = [rsp-8]

예제

[Register]
rax = 0
rsp = 0x7fffffffc3f8

[Stack]
0x7fffffffc3f8 | 0x31337 <- rsp 
0x7fffffffc400 | 0x0
0x7fffffffc408 | 0x0

[Code]
pop rax

결과

[Register]
rax = 0x31337
rsp = 0x7fffffffc400

[Stack]
0x7fffffffc400 | 0x0 <- rsp 
0x7fffffffc408 | 0x0

 

 

프로시저

  • call addr : addr에 위치한 프로시져 호출
push return_address
jmp addr
  • leave: 스택프레임 정리
mov rsp, rbp
pop rbp
  • ret : return address로 반환
pop rip
728x90