HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📖
공부한 책
/
📒
Computer Systems - A Programmer’s perspective
/
Chap3: Machine-Level Representation of Programs

Chap3: Machine-Level Representation of Programs

Procedures

Stack Frame Structure

notion image
  • procedure P(caller) 가 Q(callee)를 부르는 상황일 때
    • Q에 들어가는 argument들이 P의 stack에 갖고 있게 됨
    • 그리고 Q를 부를 때, P에 돌아와야 하는 return address를 Callers’ frame 제일 위에 넣게 됨
    • Q의 stack frame은 frame pointer를 저장한 값(copy of register %ebp)로부터 시작하게 되고
    • 다른 저장한 register 값들의 복사본이 그 뒤를 따라오게 됨
  • procedure Q는 register에 저장될 수 없는 지역 변수들을 위해 stack을 활용하게 됨
    • local data를 다 보유하기에는 register가 충분치 않음
    • 지역변수 중 일부는 배열 or 구조체여서 array, structure reference로 접근되어야 하기 때문

Transferring Control

notion image
  • %eip 는 program counter(PC)가 갖고 있는 주소
  • %esp 는 stack의 top 주소
  1. main function 에서 함수를 call 하기 직전 — (a)
      • 여기서 %eip는 함수 call 하기 직전 line
  1. main 에서 함수 call — (b)
    1. Stack에 돌아와야 할 return의 주소값(call하고 난 다음 line — 0x080483e1) push
    2. 그 함수 내부의 첫째 줄 주소를 PC(%eip — 0x08048394)에 set
    3. 함수 내부에서 return 보일 때까지 진행
  1. 함수 다 끝나고 나서 main으로 돌아오기 — (c)
    1. stack 에서 pop(돌아가야 할 주소 — 0x080483e1)
    2. 그 주소로 jump & main 함수 계속 진행