汇编基础05:堆栈

Catalogue
  1. 1. 汇编基础05:堆栈
    1. 1.1.
    2. 1.2. 栈操作
      1. 1.2.0.1. 示例:反转字符串

汇编基础05:堆栈

  • 栈是一种后进先出的存储区域,位于堆栈段中,SS段寄存器描述的就是堆栈段的段地址

  • 栈的数据出口位于栈顶,也就是esp寄存器指向的位置

  • 栈顶是低位,也就是地址较小的一侧,由ebp寄存器指向栈底,不会改变

作用:

  • 存储少量数据
  • 保存寄存器环境
  • 传递参数

栈操作

PUSH:压栈指令,32位汇编首先ESP-4,留出一个空间,然后把要压入栈中的内容压入

POP:出栈指令,32位汇编首先将栈顶的数据弹出给指定目标,然后ESP+4,清理空间

pushfd:把eflags压栈

popfd:把eflags出栈

pushad:压栈寄存器

顺序:eax,ecx,edx,ebx,esp,ebp,esi,edi

popad:出栈寄存器

pusha:进16位

popa

示例:反转字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.data
sstr byte "hello world 1234567!",0
sstrsize = ($ - sstr) - 1 ;等号伪指令,类似于EQU,用于定义常量,但定义的变量可以重新定义
.code
main proc
xor esi ,esi
mov ecx ,sstrsize
l1:
movzx eax ,sstr[esi]
push eax
inc esi ;esi作为数组下标使用
loop l1

xor esi ,esi
mov ecx ,sstrsize
l2:
pop eax
mov sstr[esi] ,al
inc esi
loop l2

push 0
call ExitProcess
main endp
END main