In Computer/Dreamhack

[Hack] 어셈블리어와 x86-64 Part.2

2023. 4. 8. 21:27
목차
  1. Opcode: 스택
  2. push val : val을 스택 최상단에 쌓음
  3. pop reg : 스택 최상단의 값을 꺼내서 reg에 대입
  4. Opcode: 프로시저
  5. call addr : addr에 위치한 프로시져 호출
  6. leave: 스택프레임 정리
  7. ret : return address로 반환
  8. 요약

Opcode: 스택

push val : val을 스택 최상단에 쌓음

연산
rsp -= 8
[rsp] = val

#예제
[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

Opcode: 프로시저

call addr : addr에 위치한 프로시져 호출

연산
push return_address
jmp addr

#예제
[Register]
rip = 0x400000
rsp = 0x7fffffffc400 

[Stack]
0x7fffffffc3f8 | 0x0
0x7fffffffc400 | 0x0 <= rsp

[Code]
0x400000 | call 0x401000  <= rip
0x400005 | mov esi, eax
...
0x401000 | push rbp
#결과
[Register]
rip = 0x401000
rsp = 0x7fffffffc3f8

[Stack]
0x7fffffffc3f8 | 0x400005  <= rsp
0x7fffffffc400 | 0x0

[Code]
0x400000 | call 0x401000
0x400005 | mov esi, eax
...
0x401000 | push rbp  <= rip

leave: 스택프레임 정리

연산
mov rsp, rbp
pop rbp

#예제
[Register]
rsp = 0x7fffffffc400
rbp = 0x7fffffffc480

[Stack]
0x7fffffffc400 | 0x0 <= rsp
...
0x7fffffffc480 | 0x7fffffffc500 <= rbp
0x7fffffffc488 | 0x31337 

[Code]
leave
#결과
[Register]
rsp = 0x7fffffffc488
rbp = 0x7fffffffc500

[Stack]
0x7fffffffc400 | 0x0
...
0x7fffffffc480 | 0x7fffffffc500
0x7fffffffc488 | 0x31337 <= rsp
...
0x7fffffffc500 | 0x7fffffffc550 <= rbp

ret : return address로 반환

연산
pop rip

#예제
[Register]
rip = 0x401008
rsp = 0x7fffffffc3f8

[Stack]
0x7fffffffc3f8 | 0x400005    <= rsp
0x7fffffffc400 | 0

[Code]
0x400000 | call 0x401000
0x400005 | mov esi, eax
...
0x401000 | mov rbp, rsp  
...
0x401007 | leave
0x401008 | ret  <= rip
#결과
[Register]
rip = 0x400005
rsp = 0x7fffffffc400

[Stack]
0x7fffffffc3f8 | 0x400005
0x7fffffffc400 | 0x0    <= rsp

[Code]
0x400000 | call 0x401000
0x400005 | mov esi, eax   <= rip
...
0x401000 | mov rbp, rsp  
...
0x401007 | leave
0x401008 | ret

요약

  • 스택
    • push val : rsp를 8만큼 빼고, 스택의 최상단([주소])에 val을 저장.
    • pop reg: 스택 최상단([주소])의 값을 reg에 넣고, rsp를 8만큼 증가.
  • 프로시저
    • call addr: addr의 프로시저를 호출.
    • leave: 스택 프레임을 정리.
    • ret: 호출자의 실행 흐름으로 복귀.
  • 시스템 콜:
    • syscall: 커널에게 필요한 동작을 요청
  1. Opcode: 스택
  2. push val : val을 스택 최상단에 쌓음
  3. pop reg : 스택 최상단의 값을 꺼내서 reg에 대입
  4. Opcode: 프로시저
  5. call addr : addr에 위치한 프로시져 호출
  6. leave: 스택프레임 정리
  7. ret : return address로 반환
  8. 요약
'In Computer/Dreamhack' 카테고리의 다른 글
  • [Hack] gdb 및 pwndbg 명령어
  • [Hack] 어셈블리어와 x86-64 Part.1
  • [Hack] 컴퓨터 구조 x86-64 아키텍처: 레지스터
  • [Hack] 컴퓨터 구조 | Computer Architecture
팽이리
팽이리
Study_Blog
팽이리
Pang_ Study
팽이리
전체
오늘
어제
  • All Study (67)
    • In Computer (66)
      • 컴퓨터구조 (21)
      • 컴퓨터네트워크 (39)
      • Dreamhack (6)
    • Cording (1)
      • C∕C++ (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Virtual-Circuit Approach
  • 컴퓨터 네트워크
  • open loop
  • 문자열 복사 예제
  • ip datagram
  • 계층화된 작업
  • 프로토콜 모음
  • 컴퓨터네트워크
  • 혼잡제어
  • 네트워크 지연
  • Network Layer
  • closed loop
  • header format
  • 처리율
  • TCP/IP
  • Little Endian
  • Big Endian
  • Datagram Approach
  • routing protocol
  • ipv4 options
  • 네트워크 혼잡 제어
  • 어셈블리어
  • 네트워크 성능
  • CPU time
  • 논리 설계 기본
  • 처리량
  • 패킷 스위치 기법
  • 데이터를 처리하는 논리 회로
  • 프로토콜
  • 컴퓨터구조

최근 댓글

최근 글

hELLO · Designed By 정상우.
팽이리
[Hack] 어셈블리어와 x86-64 Part.2
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.