-
-
VC6编译器的BUG?
-
发表于:
2012-7-26 13:29
4420
-
如下的代码,在VC6 debug/Release、VS2008 debug/Release 四种配置下编译出4个EXE文件(配置为控制台程序,工程属性全部取默认值),EXE的运行结果不同——VC6 Release的结果与其他3个不同。
经过反汇编分析,我很怀疑是VC6编译器有BUG。
希望论坛的童鞋来分析分析。
#include <stdio.h>
#include <tchar.h>
#if 0
__inline unsigned long ROL(unsigned long x, unsigned long count)
{
__asm
{
mov ecx, [count];
rol [x], cl;
mov eax, [x];
}
}
#else
#define ROL(X, cnt) ( ( (X)<<((cnt)&31) ) | ( (X)>>(32-((cnt)&31)) ) )
#endif
#define P0(X) ( (X) ^ ROL((X), 9) ^ ROL((X), 17))
#define P1(X) ( (X) ^ ROL((X), 15) ^ ROL((X), 23))
void TestVc6()
{
unsigned int a, b, c, f;
scanf("%d %d %d", &a, &b, &c);
a = ROL(c, 15);
printf("a = %08X\n", a);
f = P1(a ^ b ^ ROL(c, 15) );
printf("f = %08X\n", f);
}
int _tmain(int argc, _TCHAR* argv[])
{
TestVc6();
return 0;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)