文章转自 http://www.mcany.cn/article/300.htm
博主 没落的残阳
这节来学习一下最后一组处理字符串相关指令。那么今天这组指令是LODSB, LODSW, LODSD。这组指令大家知道就可以了,因为基本我们以后很少用到。今天这组指令是从esi指向的内存位置向al/ ax/ eax装入一个值,同时esi根据方向值增加或者减少。 我们很少把rep前缀同lods指令联用。因为装入到累加器中的每个新值会覆盖掉以前的值,相反,一般仅用lods指令来装入一个值。例如lods指令可以替代下面的两条指令。
mov al, [esi]
inc esi
看到这里我想大家应该很明白了,lods指令其实是将esi寻址到的内存单元的数据传入到al累加器中。
这组指令,我们并不是很常用。因为大家可以从它的用处就可以看出来。
好,那么我简单给出一个例子子。
此时我声明了个数组
dwBuffer dd 1
然后执行:
cld
mov esi , szBuffer
lodsd
此刻其实执行的代码就如以下指令
mov esi, szBuffer
mov eax, [esi]
add esi, 4
由于这节这组指令本来我不准备给大家讲解的,因为它不是很常用,前4组已经够我们在字符串上进行操作了。。 不过还是给大家讲解下吧,毕竟我们是的目的以后还是逆向,免杀等,所以多了解指令集也是很有好处的。