这段代码如何用于检测XP OS?

时间:2013-08-08 10:25:31

标签: c++ windows callstack

int _tmain(int argc, _TCHAR* argv[])
{
    UINT *ptr = (UINT*) ((((UINT)&ptr) & 0x00FF0000) | 0xfe0c);
    if (*ptr) printf("higher than XP\n"); // It's really amazing!!!!
    else printf("XP\n");
    return 0;
}

我在以下文章中找到了这个技巧:

http://spareclockcycles.org/2012/02/14/stack-necromancy-defeating-debuggers-by-raising-the-dead/

但是我无法弄清楚这个技巧背后的常识和惯例。 感谢您的任何评论。

1 个答案:

答案 0 :(得分:1)

我不了解背景,但它设置了一个指向从堆栈指针计算的地址的指针(在0xFE0C处)。然后读取该地址的值,它是零(XP)或非零(不是XP)。

我非常怀疑这是确定这一点的可靠方法。确定Windows版本的正确方法是使用[GetVersion][1]