Auf 64bit Betriebsystem ein "32bit" Programm ausführen
-
-
Hallo
Ah ok ...
Windows-On-Windows heißt das also ... jetzt weiß ich wonach ich suche ... Danke.Heißt das, das man um 32Bit Programme unter Windows ausführen kann auch so ein CPU braucht die das kann ?
Wenn der Prozessor das nicht kann funktiniert kann man dann nur 64Bit Programm ausführe?Gilt das jetzt nur für 32Bit Programme? Oder kann man das auch bei Treibern nutzen ??
Grüße
-
Alle handelsüblichen Prozessoren können das, keine Sorge. Bei Treibern funktioniert WoW64 aber nicht, da braucht es schon richtige 64-Bit-Treiber.
-
Die meisten 64-Bit Prozessoren werden 32-Bit Programme unterstützen.
Dazu gehören alle Prozessoren der Prozessorfamilie x86-64. Diese Unterstüzen dies weil sie ja nur eine Erweiterung des 32-Bit Rechner sind. Somit muss beim Ausführen eines 32-Bit Programm seitens der CPU nur in den richtigen Betriebsmodus geschalten werden.
Bei der Itanium Architektur die komplett auf 64-Bit aufgebaut ist(alos keine Registererweiterung) glaub ich funktioniert das auch nur müssen die 32-Bit Programme emuliert werden und da ist mit großen Performanceeinbussen zu reechnen).
Windows on Windows hat zum einen auch die Aufgabe dies der CPU mitzuteilen da WoW64 zuerst im Header einer Binary nachsieht ob es sich um 32-Bit oder 64-Bit handelt. Danach teilt es der CPU mit den Betriebszustand zu wechseln.
Zum anderen macht WOW dinge wie RegistryRedirection und FileSystemredirection.
Bei Treibern wird aber WOW64 scheitern da das Treibermodell von 32-Bit und 64-Bit unterschiedlich ist. Also wenn dein Programm auf Treiber zugreift wird es nicht funktionieren.
-
SideWinder schrieb:
Die schalten einfach um, schwupps.
Wikipedia schrieb:
Für das Ausführen von IA-32-Software nutzt der Prozessor einen Teil der IA-64-Register als IA-32-Register. Außerdem gibt es im IA-32 einen Sprungbefehl, mit dem in den IA-64-Modus (zurück)gewechselt wird. Nutzt man diesen auf einem IA-32-Prozessor, so erfolgt dort ein Invalid-Opcode-Interrupt.
Muss natürlich vom Prozessor unterstützt werden.
MfG SideWinder
IA 64 steht für Intel Itanium
IA 32 steht für die Intel x86x64/AMD64/x86-64 steht für die 64-bit Erweiterung für die x86/IA32-Architektur.
x86/IA32 auf'nem Itanium ist sau langsam, weil es nur über Software geht, während x64 ja nur eine Erweiterung/Ergänzung ist.

-
Hi
Das ist schon mal gut für dein Einstieg

http://msdn.microsoft.com/de-de/library/bb978906.aspx
Aber ich denke es werden noch Fragen kommen
Grüße...
-
@mulek:
Mal abgesehen von dem restlichen unfundierten Geplauder:mulek schrieb:
Also wenn dein Programm auf Treiber zugreift wird es nicht funktionieren.
Das stimmt so garnicht.
Auf Treiber von einem 32 Bit Programm aus *zugreifen* ist überhaupt kein Problem. Nur der Treiber selbst muss 64 Bit "sein". Das Programm welches den Treiber verwendet nicht. Sonst würden auch massiv viele 32 Bit Programme nicht mehr unter 64 bittigen Windowsen funktionieren.
-
Hallo nochmal

Ich habe mir jetzt mal das durchgelesen.
http://www.microsoft.com/whdc/system/platform/64bit/WoW64_bestprac.mspx.Und da würde mich jetzt wieder was intressiern.
Laut dem Bild im Doku (und aus einigem Text) scheint es ja so zu sein. (Ich hoffe ich hab das richtig verstanden :))Wenn ein 32Bit Prozess gestartet wird. Wird die CPU in den 32bit Modus geschalten und der Prozess wird von Windows geladen.
Verarbeitet seine arbeit bis z.B ein Systemcall (oder Winapi-aufruf) ansteht. Jetzt übernimmt das OS und arbeitet weiter.
Und führt den die Funktion aus. Bei Windows7 (64bit) gibt es alle dlls in 64 bit version (bis auf ein paar Ausnahmen.)
Jetzt schaltet die CPU in den 64bit Modus und arbeitet ihr Teil ab.
Dann wird das Ergebnis zurückgegebn und wieder in den 32 Bit modus geschalten ?Ist das wirklich so ? Ich dachte zuerst dass es auf Windows7 alle dlls in 32native und in 64native vorhanden sind.
Das scheint ja nicht so zu sein ...Grüß
Martin
-
Ich dachte zuerst dass es auf Windows7 alle dlls in 32native und in 64native vorhanden sind.
Es liegen fast alle DLLs als fast oder ganz unmodifizierte 32 Bit Version vor.
Einige Ausnahmen gibt es aber natürlich, wie z.B. die KERNEL32.DLL.
Diese Ausnahmen sind es dann, wo (fast?) alle Funktionen nur als "schalte auf 64 Bit um und ruf die 64 Bit Funktion auf" implementiert sind.Auf jeden Fall können keine 64 Bit DLLs in einen 32 Bit Prozess geladen werden.
-
Hallo
Ok das heißt z.B.: Bibliotheken wie DirectX oder MFC befinden sich in der 32bit und auch als 64bit Version auf meiner Platte ? ...
Von anderen Dlls die andere Programme bzw Bibliotheken mit bringen mal abgesehen. ??
Gruß
-
MFC sicher. DirectX vermutlich auch, kann ich aber nicht sicher sagen.