rep stos 指令(Intel汇编)
来源:互联网 发布:农业国家数据库查询 编辑:程序博客网 时间:2024/05/19 18:37
在网上查了相关资料显示:
/************************************************************/
lea edi,[ebp-0C0h]
mov ecx,30h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
rep指令的目的是重复其上面的指令.ECX的值是重复的次数.
STOS指令的作用是将eax中的值拷贝到ES:EDI指向的地址.
如果设置了direction flag, 那么edi会在该指令执行后减小,
如果没有设置direction flag, 那么edi的值会增加.
REP可以是任何字符传指令(CMPS, LODS, MOVS, SCAS, STOS)的前缀.
REP能够引发其后的字符串指令被重复, 只要ecx的值不为0, 重复就会继续.
每一次字符串指令执行后, ecx的值都会减小.
stos((store into String),意思是把eax的内容拷贝到目的地址。
用法:stos dst,dst是一个目的地址,例如:stos dword ptr es:[edi]。dword ptr前缀告诉stos,一次拷贝双字(4个字节)的数据到目的地址。为什么一次非要拷贝双字呢?这和eax寄存器有关,到底神马关系,慢慢道来。。
执行stos之前必须往eax(32为寄存器)放入要拷贝的数据。上图中,eax的内容是cccccccc,不用说都明白int3中断。
这段代码是初始化堆栈和分配局部变量用的,往分配好的局部变量空间放入int3中断的原因是:防止该空间里的东东被意外执行。
/************************************************************/
想了想,没怎么明白,于是直接写了个函数,来加深一下印象:
/************************************************************/
#include <stdio.h>
int main()
{
int i;
int result=0;
_asm{
mov edi,edi
mov edi,edi
}
for (i=0;i<20;++i)
result+=2;
return result;
}
/************************************************************/
其中,
_asm{
mov edi,edi
mov edi,edi
}
是没有任何作用的,只是为了让我们在反汇编时好定位代码的位置。
然后用OD打开,找到我们的代码处:
/************************************************************/
/************************************************************/
LEA: 目标地址传送指令: 将一个近地址指针写入到指定的寄存器。
区别MOV传送指令:MOV传送的是地址所指的内容,而LEA只是地址。
另外,在二进制中,0xCC 对应的就是汇编的:int 3指令(中断).
- rep stos 指令(Intel汇编)
- rep stos 指令(Intel汇编) .
- rep stos 指令(Intel汇编)
- rep stos 指令(Intel汇编)
- rep stos 指令(Intel汇编)
- rep stos 指令(Intel汇编)
- rep stos 指令(Intel汇编)
- 汇编指令:rep stos
- rep stos 指令
- rep stos
- rep汇编指令
- rep汇编指令
- rep 汇编指令
- 汇编指令prefix rep:
- stos串存储指令 以及rep重复执行指令
- 汇编指令:CLD STD MOVS LODS STOS
- rep movs loads stos
- INTEL 汇编指令集
- Centos下防火墙的操作
- KMP算法理解
- 水仙花数&素数&质因数分解的C语言实现
- 双链表以及循环链表的基本操作
- 信号浅析(二)
- rep stos 指令(Intel汇编)
- 理解 bashrc 和 profile
- 搞明白mysql的jion,union
- 与hamachi齐名的Remobo已于2014年7月29日暂停服务
- Android应用中保存网络图片功能实现详解
- 警惕缓冲区溢出(C中那些不安全的库函数)
- POJ2342 Anniversary party(树形DP)
- 审查合同的签约主体不可流于形式
- mac os 10.9及unix/linux 64位编译curses函数失败