Prozessor-Abfrage

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Prozessor-Abfrage

Beitrag 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.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Prozessor-Abfrage

Beitrag 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.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Prozessor-Abfrage

Beitrag 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?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
auser
Beiträge: 58
Registriert: 17.05.2011 10:56

Re: Prozessor-Abfrage

Beitrag 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.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Prozessor-Abfrage

Beitrag von 7x7 »

@auser
Danke dir!! Ich kanns zwar im Moment nicht testen, schaut aber schon mal seeeeeehr gut aus! :allright:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
grapy
Beiträge: 108
Registriert: 09.09.2004 09:05

Re: Prozessor-Abfrage

Beitrag 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
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Prozessor-Abfrage

Beitrag von 7x7 »

Na, jetzt kommt's aber Schlag auf Schlag hier. Zwei vielversprechende Lösungen! Heute abend kann ich's testen.

Danke grapy! :)
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
auser
Beiträge: 58
Registriert: 17.05.2011 10:56

Re: Prozessor-Abfrage

Beitrag 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).
Antworten