寻址模式

寄存器

在 x86 汇编中,有八个 16 位通用寄存器,它们分别是:

  1. 累加器寄存器 (AX):用于算术运算。将常数与累加器相结合的操作码为 1 字节。
  2. 基址寄存器 (BX):作为数据指针使用(在分段模式下位于段寄存器 DS 中)。
  3. 计数器寄存器 (CX):用于移位/旋转指令和循环。
  4. 栈指针寄存器 (SP):指向堆栈顶部。
  5. 堆栈基址寄存器 (BP):用于指向堆栈基址。
  6. 目标索引寄存器 (DI):用作流操作中的目标指针。
  7. 源索引寄存器 (SI):用作流操作中的源指针。
  8. 数据寄存器 (DX):用于算术和 I/O 操作。 在 32 位模式下,这个缩写前面加上 ‘E’(扩展)。例如,‘EAX’ 是一个 32 位值的累加器寄存器。类似地,在 64 位版本中,‘E’ 被替换为 ‘R’(寄存器),因此 64 位版本的 ‘EAX’ 称为 ‘RAX’。

pchunter

汇编基础

  • eax:累加器寄存器,通常用于算术运算。
  • ebx:基址寄存器,可用作通用寄存器。

if

switch

while

for

三种函数调用方式

  • ret 使用:地址+8

函数栈帧布局

参数,局部变量的寻址,都是通过EBP栈基地址寄存器的加减操作寻址

  • esp 指向系统栈的最上面一个栈帧的栈顶。
  • 在函数执行期间,esp 会自动更新,以适应局部变量、参数和其他栈操作。 默认用exa寄存器返回

最后由调用者负责平衡,也就是 esp + 8,指针指回最底部(图错了),3,4自动销毁

结构体用于c++对象内存布局

受字节对齐规则影响,看类内数据类型

若包含虚函数,则有一个虚表指针指向一个虚函数表,表中的每一项都是虚函数的地址,若增加虚函数,则只会影响表中的大小

构造函数,析构函数,虚函数的汇编