首页
社区
课程
招聘
[求助]获取操作系统版本..
发表于: 2006-10-12 13:40 4545

[求助]获取操作系统版本..

2006-10-12 13:40
4545
代码如下:

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

.data
szWin db '不是2000系统',0
szWin2000 db '是2000系统',0
.data?
osVersion   OSVERSIONINFO <?>
.code
start:
  invoke GetVersionEx,addr osVersion
  .if eax == 5
  invoke MessageBox,NULL,addr szWin2000,addr szWin2000,MB_OK
  .elseif
  invoke MessageBox,NULL,addr szWin,addr szWin,MB_OK
  invoke ExitProcess,NULL
   .endif
end start

只对2000进行检测,不知道代码写得对不对,
另外,eax == 5 的时候是2000,那么 XP,2003的时候,eax又等于什么?请指教....

注:好象5.01是XP的,可是我 .if eax == 5.01的时候,就报错了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2
另外,判断当前程序路径的函数代码怎么写,

我打算判断出来后,利用CopyFile函数将它复制到系统目录,

.data
szDirectory db 'c:\windows\system32\server.exe',0
.
.
.code
start:
     ;这里开始判断程序的路径,好象是利用GetCurrentProcess,我不懂
  invoke CopyFile,****,addr szDirectory,FALSE ;lpExistingFileName的值我不懂
.
.
end start

****************************
好象病毒一样吧,先判断自己的路径,然后将自己复制到系统目录..这样子说估计明显一些...
2006-10-12 14:11
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
typedef struct _OSVERSIONINFO{  
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    TCHAR szCSDVersion[ 128 ];
} OSVERSIONINFO;

GetVersionEx返回1表示成功调用,dwMajorVersion是主版本号,dwMinorVersion是子版本,szCSDVersion可以让你知道这个WINDOWS是Service Pack几的

取得路径用GetModuleFileName

楼主你一定要先学一下WIN32API和ASM基础才行……
2006-10-12 14:38
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
4
谢谢大哥的提醒.....
2006-10-12 14:42
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
5
搞定....嘎嘎...

我的学习方法是,在不断的学习和提问和找资料中积累经验
2006-10-12 14:52
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
凭CS寄存器的值就可以判断是9x系统还是NT系统
2006-10-12 17:49
0
雪    币: 440
活跃值: (692)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
7
最初由 thebutterfly 发布
凭CS寄存器的值就可以判断是9x系统还是NT系统


shoooo的小小anti里有is98()函数,就是用CS来判断的

向shoooo和thebutterfly学习
2006-10-12 20:23
0
雪    币: 440
活跃值: (692)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
8
最初由 thebutterfly 发布
凭CS寄存器的值就可以判断是9x系统还是NT系统


shoooo的小小anti里有is98()函数,就是用CS来判断的

向shoooo和thebutterfly学习
2006-10-12 20:39
0
雪    币: 253
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
俺MSN空间收藏的一篇文章,希望对你有所帮助.
转化为ASM版也好办,基本的都列出来了.
俺就曾经用过..

原文来自:
http://blog.gameres.com/thread.asp?BlogID=155&threadid=20286
//判断操作系统版本
#include <windows.h>
/*++------------------------------------------------------------------------
Function:
IsWin9x
Modification History:
Jurassic 03/17/2003 Created.
--------------------------------------------------------------------------*/
bool
__stdcall
IsWin9x(
    void
    )
{
  OSVERSIONINFO VerInfo;
 bool bRet=false;
  VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 if ( GetVersionEx(&VerInfo))
 {
    if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
    {
      bRet=true;
    }
 }
 return (bRet);
}
/*++------------------------------------------------------------------------
Function:
IsWinNt
Modification History:
Jurassic 03/17/2003 Created.
--------------------------------------------------------------------------*/
bool
__stdcall
IsWinNt(
    void
    )
{
  OSVERSIONINFO VerInfo;
 bool bRet=false;
  VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 if( GetVersionEx(&VerInfo))
 {
    if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT &&
 VerInfo.dwMajorVersion == 4)
    {
      bRet=true;
    }
 }
 return (bRet);
}
/*++------------------------------------------------------------------------
Function:
IsWin2k
Modification History:
Jurassic 03/17/2003 Created.
--------------------------------------------------------------------------*/
bool
__stdcall
IsWin2k(
    void
    )
{
  OSVERSIONINFO VerInfo;
 bool bRet=false;
  VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 if( GetVersionEx(&VerInfo))
 {
    if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT &&
 VerInfo.dwMajorVersion == 5 &&
 VerInfo.dwMinorVersion == 0)
    {
      bRet=true;
    }
 }
 return (bRet);
}
/*++------------------------------------------------------------------------
Function:
IsWinxp
Modification History:
Jurassic 03/17/2003 Created.
--------------------------------------------------------------------------*/
bool
_stdcall
IsWinXp(
    void
    )
{
  OSVERSIONINFO VerInfo;
 bool bRet=false;
  VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
 if( GetVersionEx(&VerInfo))
 {
    if (VerInfo.dwPlatformId==VER_PLATFORM_WIN32_NT &&
 VerInfo.dwMajorVersion == 5 &&
 VerInfo.dwMinorVersion == 1)
    {
      bRet=true;
    }
 }
 return (bRet);
}


2006-10-12 22:50
0
游客
登录 | 注册 方可回帖
返回
//