我用 OllyDbg 反汇编了一个文件,它有以下指令:
REPNE SCAS BYTE PTR ES:[EDI]
这究竟是什么意思?
我用 OllyDbg 反汇编了一个文件,它有以下指令:
REPNE SCAS BYTE PTR ES:[EDI]
这究竟是什么意思?
该SCAS
指令用于扫描字符串(SCAS
= SCan A String)。它将累加器(AL
、AX
、 或EAX
)的内容与 指向的当前值进行比较ES:[EDI]
。
当与REPNE
前缀(REPeat while Not Equal)一起使用时,SCAS
扫描字符串,搜索与累加器中的值相等的第一个字符串元素。
英特尔手册(第 1 卷,第 231 页)说:
SCAS 指令从 EAX、AX 或 AL 寄存器(取决于操作数长度)的内容中减去目标字符串元素,并根据结果更新状态标志。字符串元素和寄存器内容不会被修改。SCAS 指令的以下“短格式”指定操作数长度:SCASB(扫描字节串)、SCASW(扫描字串)和 SCAD(扫描双字串)。
所以,基本上,这条指令扫描一个字符串并寻找与存储在EAX
. 除了ECX(计数器)和EDI(地址)之外,它不会触及任何寄存器,但会根据结果显示状态标志。