Seite 1 von 1

Prozessor-Abfrage

Verfasst: 30.06.2014 18:50
von 7x7
Hallo Leute,

wie kann mein Programm schnell und ohne langes gelurgse feststellen, ob es sich um ein 64- oder 32-Bit (FREMD-)Rechner (bzw.Windows) befindet? Mir geht es darum, ob ich 64-Bit ASM-code verwenden kann oder nicht. Wenn ein 64-Bit OS installiert ist, dann ist die Sache klar, aber es kann auch auf einem 64-Bit Rechner ein 32-Bit Windows installiert sein, denn dann geht 64-Bit ASM-Code auch. Ich denke da an ein Test mit "Illegal Instruction".

Vielleicht bin ich im Moment auch einfach nur zu blöd. Wenn dem so ist, dann bitte ich um eine kurze Problemlösung und entschuldige mich bei euch für die gestohlene Zeit (ja, ich weiss...um 22:00 spielt Deutschland, da hat sowieso keiner Zeit :mrgreen: )

Bin der Meinung, dass dieses Problem schon mal hier jemand hatte, finde aber auf die schnelle nichts.

Re: Prozessor-Abfrage

Verfasst: 30.06.2014 19:17
von NicTheQuick
Wenn du glaubst dazu gab es mal eine Lösung, dann könnte ich mir vorstellen, dass Helle dazu eine Lösung hatte.

Re: Prozessor-Abfrage

Verfasst: 30.06.2014 19:52
von _JON_
7x7 hat geschrieben:Wenn ein 64-Bit OS installiert ist, dann ist die Sache klar, aber es kann auch auf einem 64-Bit Rechner ein 32-Bit Windows installiert sein, denn dann geht 64-Bit ASM-Code auch.
Bist dir da ganz sicher?
Kann ich mir nicht vorstellen, wie soll das funktionieren?

Re: Prozessor-Abfrage

Verfasst: 02.07.2014 08:50
von auser
Ich denke der ASM Codeschnipsel mit dem Bit 29 sollte sein was du suchst (weil GetSystemInfo() und GetNativeSystemInfo() sind da ja zu sehr vom OS geprägt): http://stackoverflow.com/questions/1316 ... a-32bit-os

...so weit ich das getestet habe dürfte es funktionieren.

Re: Prozessor-Abfrage

Verfasst: 02.07.2014 09:19
von 7x7
@auser
Danke dir!! Ich kanns zwar im Moment nicht testen, schaut aber schon mal seeeeeehr gut aus! :allright:

Re: Prozessor-Abfrage

Verfasst: 02.07.2014 09:44
von grapy

Code: Alles auswählen

Procedure.s getProcessorArchitecture()
   If GetEnvironmentVariable("PROCESSOR_ARCHITEW6432") = "AMD64"
      ProcedureReturn "6432bit" ; OS is 64-Bit, but program is 32-Bit
   ElseIf GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") = "AMD64"
      ProcedureReturn "64bit" ; OS and program are both 64-Bit
   ElseIf GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") = "x86"
      ProcedureReturn "32bit" ; both are 32-Bit
   EndIf
EndProcedure

Re: Prozessor-Abfrage

Verfasst: 02.07.2014 10:07
von 7x7
Na, jetzt kommt's aber Schlag auf Schlag hier. Zwei vielversprechende Lösungen! Heute abend kann ich's testen.

Danke grapy! :)

Re: Prozessor-Abfrage

Verfasst: 02.07.2014 16:07
von auser
Beim ASM-schnipsel musst du halt aufpassen daß das (mit "push eax" usw.) in der Form nur mit 'ner 32bit-Applikation läuft. Reicht aber aus, weil man auf 'nem 32bit OS eigentlich eh keine 64bit Applikation laufen lässt (also kannste das mit 'nem CompilerIf richtig abfragen).

Die Mehtode mit der Enviromnetvariable ist auch abhängig vom OS. 32bit-Applikation+32bit-OS ergibt dann 32bit auch wenn dir Tools wie z.B. CPUZ sagen dass der Prozessor eigentlich EM64T unterstützt. Insofern sagt dir der ASM-code eher was über die Hardware und GetSystemInfo() / GetNativeSystemInfo() oder die Environmentvariable eher was über Software/Betriebsystem.

32bit-Applikation+64bit-OS gibt dir auch GetSystemInfo() mit 32 und GetNativeSystemInfo() mit 64 richtig zurück ist also so ziemlich das selbe wie die Environmentvariable (nur halt direkt über OS-funktion).