Vollständige Version anzeigen : [Assembler] Schnell ohne Windows API das OS ermitteln


N0S
27.07.2009, 14:03

Kleiner Sourcecode von mir wie man schnell, ohne eine Windows API zu benutzen, das verwendete Betriebssystem ermittelt. Windows 7 wird unterstützt.

Das Zauberwort heisst Process Environment Block, da steht es drin ;)

MASM Source:
;386
;model flat, stdcall
option casemap :none


include c:\masm32\include\user32;inc
include c:\masm32\include\kernel32;inc

includelib c:\masm32\lib\user32;lib
includelib c:\masm32\lib\kernel32;lib

MessageBox PROTO :DWORD, :DWORD, :DWORD, :DWORD
ExitProcess PROTO :DWORD
Win PROTO :DWORD

assume fs:nothing

;data
XP db "Windows XP",0h
Vista db "Windows Vista",0h
Win7 db "Windows 7",0h
Serv db "Windows Server 2003",0h
W2000 db "Windows 2000",0h
MSGC db "Du benutzt..;",0h
;code

start:
;Process Environment Block (PEB)
mov eax, DWORD PTR fs:[30h]
;PEB+A4h
mov ecx, dword ptr ds:[eax+0A4h]

cmp cl, 6h

;PEB+A8h
mov ecx, dword ptr ds:[eax+0A8h]

jne ;2 ;springe wenn nicht gleich cl = 6

cmp cl, 1h
jne ;1
invoke Win, addr Win7 ;Windows 7
;1:
invoke Win, addr Vista ;Windows Vista


;2:
cmp cl, 2h
jne ;3
invoke Win, addr Serv ;Windows Server 2003
;3:
cmp cl, 1h
jne ;4
invoke Win, addr XP ;Windows XP
;4:
invoke Win, addr W2000 ;Windows 2000

int 3


Win PROC WinV :DWORD
invoke MessageBox, 0, WinV, addr MSGC, 40h
invoke ExitProcess, 0
Win ENDP
int 3
end start


No File | xup~in (;;;xup~in/dl,14046675/WinVers;exe/)

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
razor90
31.08.2009, 17:41

Ich habs mal C++-freundlich gemacht :]

typedef enum {
WIN_UNKNOWN = -1,
WIN_2000 = 0,
WIN_XP = 1,
WIN_2003 = 2,
WIN_VISTA = 3,
WIN_7 = 4
} WINVER_E;

WINVER_E getWinVersion()
{
DWORD v_major, v_minor;

_asm {
//Register fs zeigt zum TIB (Thread Information Block)
//fs:[30h] = Adresse zum PEB (Process Environment Block)
mov eax, dword ptr fs:[30h]
//PEB + 0xa4 = major version
mov ecx, dword ptr [eax+0A4h]
//PEB + 0xa8 = minor version
mov edx, dword ptr [eax+0A8h]
mov v_major, ecx;
mov v_minor, edx;
}

switch (v_major)
{
case 0x6:
switch (v_minor)
{
case 0x1:
return WIN_7;
break;

case 0x0:
return WIN_VISTA;
break;
}
break;

case 0x5:
switch (v_minor)
{
case 0x2:
return WIN_2003;
break;

case 0x1:
return WIN_XP;
break;

case 0x0:
return WIN_2000;
break;
}
}

return WIN_UNKNOWN;
}


Coole Sache... wusste nicht, dass es sowas überhaupt gibt^^


Ähnliche Themen zu [Assembler] Schnell ohne Windows API das OS ermitteln
  • RapidShare ohne Wartezeit schnell!!
    Ich hab grad gemerkt das bei Rapid keine Wartezeiten mehr vorhanden sind.. also suagt so schnell ihr könnt^^ MFG [...]

  • [Windows 7] Windowslaufzeit ermitteln
    Ich suche ein Programm, mit dem sich die Laufzeit von dem PC ermitteln läuft. Mit einer täglich/wöchentlich/monatlichen Anzeige. Weiß da jemand ein Freewareteil? [...]

  • [Assembler] Assembler 80x85 / schleifen
    hey, mein Facharbeitsthema ist schleifen in Assembler-sprache ausdrücken. ich bastel gerade an einer FOR schleife rum.. [ Frage mich ernsthaft ob man da überhaupt mehr als eine schleife schreiben kann... ] ich habe ihm gesagt, dass er immer in zweierschritten zählen soll. - soweit so gut, Doc [...]

  • [Assembler] unter Windows programmieren
    Hi Leute, Ich versuche zur Zeit etwas mit Assembler auf meinem PC hinzubekommen. Ich hab bisher immer nur aufm Mikrocontroller Assembler programmiert und da ging das alles ein bisschen anders. Jetzt bin ich schon länger auf der Suche nach einer Möglichkeit aufm PC Assembler zu programmieren. H [...]



raid-rush.ws | Imprint & Contact pr