操作系统-day05-栈内存结构

栈 stack

  • 栈底:进程初始化时 由操作系统分配 一块连续内存,栈底 位于这块内存的 高地址 端,位置相对固定

  • 栈顶:由 ESP(或 RSP)指向,随着 PUSH、CALL 等操作向 低地址方向 移动(地址减小)。

  • 栈是 LIFO,只能从栈顶弹出。

  • POP 默认获取 ESP 处的数据, 然后 ESP += 4

  • 可以 MOV AX, [ESP+4] 直接取数据 (不改变 ESP)

  • 或者 RET,相当于 POP EIP(弹出返回地址到指令指针),然后 ESP 增加 4

  • 栈溢出:当栈顶(ESP)不断减小,最终超出操作系统为栈分配的虚拟地址范围(例如触及栈的 guard 页,或越过栈底边界),就会触发页故障(#PF)。即 Windows 上表现的蓝屏。
    image

LGDT 汇编函数 栈内存

  • 多字节数据的最低有效字节(LSB) 存放在最低的内存地址(“低位在前”)
  • 例如,32 位数值 0x12345678 在内存中从低地址到高地址依次为 0x78, 0x56, 0x34, 0x12
  • 调用 load_gdtr(0xffff, 0x00270000),栈布局如下(从低地址到高地址):
地址 (相对 ESP) 内容(字节) 说明
ESP+0 ~ ESP+3 返回地址(4字节)
ESP+4 ~ ESP+7 FF FF 00 00 参数 limit = 0x0000ffff
ESP+8 ~ ESP+11 00 00 27 00 参数 base = 0x00270000

段描述结构体 strut SEGMENT_DESCRIPTOR 内存结构

image

posted on 2026-06-03 09:43  中年二班  阅读(6)  评论(0)    收藏  举报