x86 和模拟

先放张 CMU 的 CSAPP 的图

IMG_0035

这张图很好的讲了我们编程和机器即语言处理的东西的不同。我无意介绍 x86 的抽象。这里根据这个 slides 讲讲:https://pdos.csail.mit.edu/6.828/2018/lec/l-x86.pdf

e

一个 x86-64 的 CPU 包含 16个存储64bits的通用寄存器,我们通常拿这 64 bits 拆开了用:

bits name
64 r_x
32 e_x
16 _x
8(高位) _h
8 _l

CSAPP P120 有这个寄存器的表

cs ip 可以表示指令寄存器,call ret jmp 可以改变这几个

eflags 寄存器管理了一堆奇怪的状态,maybe it’s helpful,我有点回忆不起来了

Stacks

  1. grows down
  2. pushl %eax
    1. subl $4, %esp
    2. movl %eax, (%esp)

还有一些 memory 相关的 reg:

  • cs: code segment
  • ss: stack segment
  • ds: data segment

Physics Memory

E9F96E1F-6569-4B36-8C64-5C0A8BBF97DE

call

5ACEEE24-D90A-4882-A527-B182E03412C7

实际上 esp ebp 能够表达 local var. 把结果丢到 %eap。