汇编指令“REPNE SCAS BYTE PTR ES:[EDI]”是什么?

逆向工程 部件 ollydbg
2021-06-25 02:43:37

我用 OllyDbg 反汇编了一个文件,它有以下指令:

REPNE SCAS BYTE PTR ES:[EDI]

这究竟是什么意思?

1个回答

SCAS指令用于扫描字符串(SCAS= SCan A String)。它将累加器(ALAX、 或EAX)的内容与 指向的当前值进行比较ES:[EDI]

当与REPNE前缀(REPeat while Not Equal一起使用SCAS扫描字符串,搜索与累加器中的值相等的第一个字符串元素。

英特尔手册(第 1 卷,第 231 页)说:

SCAS 指令从 EAX、AX 或 AL 寄存器(取决于操作数长度)的内容中减去目标字符串元素,并根据结果更新状态标志。字符串元素和寄存器内容不会被修改。SCAS 指令的以下“短格式”指定操作数长度:SCASB(扫描字节串)、SCASW(扫描字串)和 SCAD(扫描双字串)。

所以,基本上,这条指令扫描一个字符串并寻找与存储在EAX. 除了ECX(计数器)和EDI(地址)之外,它不会触及任何寄存器,但会根据结果显示状态标志。