操作系统-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 内存结构


浙公网安备 33010602011771号