博客
关于我
探讨STOS指令
阅读量:427 次
发布时间:2019-03-06

本文共 848 字,大约阅读时间需要 2 分钟。

下面是一段win32 console程序(Debug版)的反汇编代码,很程式化的东西。本文不讨论这段码的具体作用,而是来学习下stos指令。

stos((store into String),意思是把eax的内容拷贝到目的地址。

用法:stos dst,dst是一个目的地址,例如:stos dword ptr es:[edi]。dword ptr前缀告诉stos,一次拷贝双字(32个字节)的数据到目的地址。为什么一次非要拷贝双字呢?这和eax寄存器有关,到底神马关系,慢慢道来。。

执行stos之前必须往eax(32为寄存器)放入要拷贝的数据。上图中,eax的内容是cccccccc,不用说都明白int3中断。

这段代码是初始化堆栈和分配局部变量用的,往分配好的局部变量空间放入int3中断的原因是:防止该空间里的东东被意外执行。用OD看下堆栈,是否如此?

很直接滴看到,从ebp-40往下40个的空间全部被cc覆盖。

有个疑点,循环拷贝的时候是从起始地址(ebp-40)往栈底方向拷贝的,难不成stos知道我们分配的局部变量空间在ebp-40之下?非也,机器还没这么聪明。到底往上(低址)还是往下(高址)由标志寄存器的D位决定,注意dst只是一个起始地址。本例中是往下拷贝,我们来瞧瞧D位的值。

是不是意味着把D位置为1就往上(低址)拷贝呢?光说不练空把式,来试验下!

如果D位不为0,使用CLD指令清除方向标志(置0),下次见到别说不认识哦!

重复执行后面的指令
rep stos dword ptr [edi]
是将edi指向的区域初始化为0CCCCCCCCh 
补充一下:上述初始化堆(esp-40)h~esp段的一段存储单元,edi初始指向(esp-40)h处,dword ptr [edi]每次指向一处,每执行一次stos dword ptr [edi], 初始化一个存储单元,内容在eax中(参考stos指令),然后edi自增,重复执行上述指定直到ecx计数减为0,这里为12h。
 

转载地址:http://hlpuz.baihongyu.com/

你可能感兴趣的文章
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中使用range范围节点实现从一个范围对应至另一个范围
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
查看>>
Node-RED中建立TCP服务端和客户端
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中建立静态网页和动态网页内容
查看>>
Vue3+Element-ul学生管理系统(第二十二课)
查看>>
Node-RED中根据HTML文件建立Web网站
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中连接Mysql数据库并实现增删改查的操作
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
查看>>
Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
查看>>
Node-RED怎样导出导入流程为json文件
查看>>
Node-RED订阅MQTT主题并调试数据
查看>>
Node-RED通过npm安装的方式对应卸载
查看>>