简单比较中的题
PSTR psTest = "/x89";
0x89 == psTest[0]
是否 成立?
不成立.
我本来很疑惑, PSTR[0] 是一个 byte , 0x89 也是一个byte .
反汇编如下:
003533E7 8B 45 08 mov eax,dword ptr [psTest]
003533EA 0F B6 08 movsx ecx,byte ptr [eax]
003533ED 81 F9 89 00 00 00 cmp ecx,89h
003533F3 75 09 jne xxxxxx (3533FEh)
注意是 movsx
所以 0x89 ----> 0xFFFFFF89
这样就使得 0x89 != psTest[0]
实际上 PSTR 是一个 char *
他似乎被编译器默认转化为一个有符号数, 在32位中, psTest[0] 被有符号扩展为一个 DWORD 大小的数据.
所以0x89 作为有符号数扩展为 DWORD 成为了 0xFFFFFF89 .
这也是为什么会有 movsx
最后,我把语句改为: 0x89 == (BYTE)(psTest[0])
movsx 就被改成了 movzx
最后结果也为 TRUE
P.S: 有时候会发生一些看似异常的问题,需要我们注意 .
codes for comicOnline.download.getFileType