汇编指令

本文最后更新于:3 years ago

暑假一直在想着入门pwn,询问了一位大佬,指引我怎么入门,这里记录一下汇编指令的一些基础指令。
汇编掌握基本指令还是难度还是不大的。

什么是堆栈?

1)就是一块内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用。
2)和数据结构的堆栈无关
3)查看堆栈

1、mov指令 移动数据
2、add指令 加
3、sub指令 减
4、and指令 与
5、or指令 或
6、xor指令 异或
7、not指令 取反

基础指令

1、movs指令

mov指令:移动数据 内存-内存

byte/word/dword
movs byte ptr es:[edi],byte ptr ds:[esi] 简写为:movsb
movs word ptr es:[edi],word ptr ds:[esi] 简写为:movsw
movs dword ptr es:[edi],dword ptr ds:[esi] 简写为:movsd

2、stos指令

stos指令:将ai/ax/eax的值存储到[edi]指定的内存单元

stos byte ptr es:[edi] 简写为stosb
stos word ptr es:[edi] 简写为stosw
stos dword ptr es:[edi] 简写为stosd

3、rep指令

rep指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令

MOV ECX,10
REP MOVSD

REP STOSD

4、PUSH指令

功能:
<1>向堆栈中压入数据
<2>修改栈顶指针ESP寄存器

5、POP指令

功能:
<1>将栈顶数据存储到寄存器/内存
<2>修改栈顶指针ESP寄存器

修改EIP指令

1、JMP指令

MOV EIP,寄存器/立即数/内存 简写为 JMP 寄存器/立即数/内存

2、CALL指令

PUSH下一行地址
MOV EIP,立即数/寄存器/内存 简写为:CALL 立即数/寄存器/内存

与JMP唯一的区别:
在堆栈中存储CALL指令下一行地址

将call之后的值放到EIP中,再将call前面的下一个地址存到堆栈中

3、RET指令

ADD ESP,4
MOV EIP,[EIP+4] 简写为:RET

把堆栈中的值取出来,存到EIP中,同时将ESP的值加4;
所以一般ret指令与call指令连用










本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!