Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#9

Re: 32 Bit Programme auf 64 Bit Rechnern

  Alt 18. Nov 2005, 12:43
Zitat von Traudix:
Aus diesen Ausführungen entnehme ich, das ich 32 Bit Programme nicht ändern muß, wenn sie auf einer 64 Bit CPU laufen sollen. Denn, wenn der Prozessorkern auch beim 64 Bitter X86-kompatibel ist und im RealMode nur 16 Bittig, kennt er ja auch die 8- und 16-bittigen Register.
Da ist für die x86-64 (amd64, em64t) meist zutreffend. Der 32-Bit-Emulator (WoW64) den Microsoft entwickelt hat, sorgt dafür, dass die meisten 32-Bit-Anwendungen wie bisher funktionieren.

1) Schwierig wird es zum Beispiel dadurch, dass 32-Bit-Module nicht in 64-Bit-Prozesse geladen werden können (und vis versa). Das heißt, dass man für Shellerweiterungen eine 64-Bit-DLL schreiben muss um in den 64-Bit Explorer zu kommen. Wenn man Strukturen aus anderen Prozessen liest (so wie LuckieDIPS; siehe TLvItemBuffer), darf man nicht vergessen, dass es sich um die 64-Bit-Versionen der Strukturen handelt.

2) Die Registrierung für 32-Bit-Anwendungen ist in die 64-Bit-Registrierung eingehängt. Um aus WoW64 Zugriff auf die 64-Bit-Registrierung zu erhalten muss der API spezielle Flags übergeben.

3) Einige Systemverzeichnisse werden innerhalb von WoW64 automatisch umgeleitet. Ein 32-Bit-Programm sieht zum Beispiel C:\WINDOWS\SysWOW64 als "C:\WINDOWS\system32" (unter C:\WINDOWS\SysWOW64 liegen die DLLs der Win32-API unter C:\WINDOWS\system32 die DLLs der Win64-API). Das gleiche gilt auch für das %ProgramFiles%-Verzeichnis und andere. Um die 'Umleitung' zu umgehen muss man diese mit einer neuen API deaktivieren. Es können also nur 32-Bit-Programme auf C:\WINDOWS\system32 zugreifen wenn sie die neuen APIs kennen...

Zitat von Traudix:
(Bios-Interrupts, Farbpaletten-Einstellungen, Maussteuerung...) Hab auch paar Delphi Programme mit Assemblerteilen, wo sinngemäß das gleiche Problem vorliegt. Nun, wenn das später auf dem 64 Bitter kein Problem ist, brauche ich da nix zu ändern.
Es gibt keinen 16-Bit-Emulator (ntvdm) mehr!
Das ist mir bei BiosHelp auf die Füße gefallen. Ich musste eine Weile Suchen bevor ich eine Lösung für Win64 gefunden hatte (Microsoft musste eine neue API einführen um diese speziellen Bereiche auslesen zu können, da die bisherigen Methoden nicht mehr funktionierten).

Kurz: Es geht nicht ohne Tests auf einem echten Win64-System (sollte man seine Software nicht ohnehin auf den Zielplattformen testen )
  Mit Zitat antworten Zitat