源代码
int _tmain(int argc, _TCHAR* argv[])
{
char *s1 = "s123456" , *s2 = "s2abcdef2222" ;
strcmp(s1 , s2);
return 0;
}
OD下的汇编代码
7855B580 > 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]
7855B584 8B4C24 08 MOV ECX,DWORD PTR SS:[ESP+8]
7855B588 F7C2 03000000 TEST EDX,3
7855B58E 75 3C JNZ SHORT MSVCR90.7855B5CC
7855B590 8B02 MOV EAX,DWORD PTR DS:[EDX]
7855B592 3A01 CMP AL,BYTE PTR DS:[ECX]
7855B594 75 2E JNZ SHORT MSVCR90.7855B5C4
7855B596 0AC0 OR AL,AL
7855B598 74 26 JE SHORT MSVCR90.7855B5C0
7855B59A 3A61 01 CMP AH,BYTE PTR DS:[ECX+1]
7855B59D 75 25 JNZ SHORT MSVCR90.7855B5C4
7855B59F 0AE4 OR AH,AH
7855B5A1 74 1D JE SHORT MSVCR90.7855B5C0
7855B5A3 C1E8 10 SHR EAX,10
7855B5A6 3A41 02 CMP AL,BYTE PTR DS:[ECX+2]
7855B5A9 75 19 JNZ SHORT MSVCR90.7855B5C4
7855B5AB 0AC0 OR AL,AL
7855B5AD 74 11 JE SHORT MSVCR90.7855B5C0
7855B5AF 3A61 03 CMP AH,BYTE PTR DS:[ECX+3]
7855B5B2 75 10 JNZ SHORT MSVCR90.7855B5C4
7855B5B4 83C1 04 ADD ECX,4
7855B5B7 83C2 04 ADD EDX,4
7855B5BA 0AE4 OR AH,AH
7855B5BC ^ 75 D2 JNZ SHORT MSVCR90.7855B590
7855B5BE 8BFF MOV EDI,EDI
7855B5C0 33C0 XOR EAX,EAX
7855B5C2 C3 RETN
用OD查看的汇编代码 TEST EDX,3这里我搞不明白是怎样判断跳转的目的是什么 求高人指点 为什么用这句 为什么是3 后面还有一句TEST EDX,1 不知道这么使用是什么目的 下面跟着跳转语句 应该是判断指令 但是要判断的是什么 为什么这么做我是搞不懂了 憋了好几天了 求高人指点啊 百度上只是说用这指令改变标志位 实现跳转 **** 但是在这里为什么这么做 是个什么样的思路呢****????
谢谢大家的指点 但是我最想知道的是在这段代码的汇编代码中 在这个位置用这句汇编想要实现的思路是什么 后面还有个TEST EDX,1 难不成是仅仅就是改变标志位么 目的不是判断 跳转么
既然是判断跳转 为的是判断什么呢 这才是我最困惑的地方
另外 如果是仅仅是想改变标志位 为什么和0x3 0x1 做与运算 为什么不是别的数字呢 期望大家能给我详细的指点 感激不尽
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课