汇编指令
本文最后更新于: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 协议 ,转载请注明出处!