【发布时间】:2016-12-01 20:01:36
【问题描述】:
在我正在阅读的一本书中,我们得到了以下 sn-p 和问题:
此函数使用 SCAS 和 STOS 的组合来完成其工作。第一的, 解释第 1 行和第 8 行中 [EBP+8] 和 [EBP+C] 的类型是什么, 分别。接下来解释一下这个sn-p做了什么:
01: 8B 7D 08 mov edi, [ebp+8]
02: 8B D7 mov edx, edi
03: 33 C0 xor eax, eax
04: 83 C9 FF or ecx, 0FFFFFFFFh
05: F2 AE repne scasb
06: 83 C1 02 add ecx, 2
07: F7 D9 neg ecx
08: 8A 45 0C mov al, [ebp+0Ch]
09: 8B AA mov edi, edx
10: F3 AA rep stosb
11: 8B C2 mov eax, edx
在使用在线解决方案 (https://johannesbader.ch/2014/05/practical-reverse-engineering-exercises-page-11/) 进行检查后,我几乎想通了一切,但是,这个 sn-p 中的一步对我来说仍然没有意义。
根据网上的解决方案,当我们在第4行运行命令or ecx, 0FFFFFFFFh时,它说
我们 [现在] 将 ECX 解释为有符号整数 -1
为了知道or 命令的结果是什么,难道我们不需要事先知道ECX 的值是什么吗?为什么值是-1?
谢谢
【问题讨论】:
-
如果它是一个 OR 与其他任何东西,那么之前的值就会很重要。
-
@JoseManuelAbarcaRodríguez 我现在明白了,谢谢。我知道二进制补码,并且之前已经阅读过它。我只是没有意识到用全 1 表示的任何字节都会导致 -1。