ELF Programme auf Windows Vista?

06/03/2010 - 20:22 von Jens Kallup | Report spam
Hallo,

habe die glibc 2.4 geladen und ausgepackt.
Fa ist mir gleich das Verzeichnis "elf" aufgefallen.
Nun die Frage (noch ungetestet): kann man elf programme
auf Windows Vista 32-Bit starteb?
Wenn ja, wie?

Gruß
Jens
 

Lesen sie die antworten

#1 Markus Wichmann
07/03/2010 - 11:11 | Warnen spam
Jens Kallup () schrieb:
Hallo,

habe die glibc 2.4 geladen und ausgepackt.
Fa ist mir gleich das Verzeichnis "elf" aufgefallen.
Nun die Frage (noch ungetestet): kann man elf programme
auf Windows Vista 32-Bit starteb?
Wenn ja, wie?




Nein, das geht nicht. Wie auch?

Das elf-Verzeichnis der glibc ist sowieso nur für Plattformen
interessant, auf denen ELF verwendet wird, also Linux und Solaris.

Man kann natürlich einen Lader schreiben, der ein ELF-Programm làdt und
ausführt. Aber ich weiß nicht, ob das WinAPI irgendeine mmap-àhnliche
Funktion anbietet. (mmap() ermöglicht das Einblenden von Dateibereichen
in den Speicher. Um genau zu sein, an _exakte_ Positionen im virtuellen
Speicher der Anwendung. So etwas würde auch bei diesem Lader vonnöten
sein, denn ELF-Anwendungen sind i.A. kein PIC (wenn also drin steht,
dass dieser Segment _genau_ an die Adresse 0x400000 geladen werden soll,
dann muss das auch so geschehen. Der Startpunkt steht ja auch absolut
drin. Also, wenn er davon ausgeht, dass ein ausführbares Segment nach
0x400000 geladen wird, und sich der Startpunkt 0x135 Bytes nach
Dateianfang befindet, dann steht als Startpunkt 0x400135 drin.)

So, dann hast du das Problem des Ladens gelöst, aber dann kommt das
Problem des Ausführens: Solange die Anwendung dynamisch ist und nur die
Wrapper aus der glibc aufruft, funktioniert noch alles, weil man ja dann
auch eigene Wrapper nehmen kann, die dann eben das WinAPI aufrufen.
Aber wenn die Anwendung z.B. nur dafür gedacht ist, direkt auf Linux
ausgeführt zu werden, dann stehen da so böse Sachen drin wie

int 80h

oder

syscall

Ich weiß nicht, was Windows bei sowas macht. Ich weiß nicht, ob man
einen Interrupt-Handler einsetzen kann bei Windows, schàtze aber mal
eher nicht. Und was "syscall" bei Windows anrichtet, weiß ich auch
nicht. Ebensowenig, ob man Programmcode dafür einsetzen kann.

Also ein Haufen offener Fragen. Und wenn man die nicht beantworten kann,
seh ich dafür schwarz: Dann kannst du zwar ein Programm so weit
ausführen, dass es Zeug berechnet, aber es kann dieses Zeug nicht
ausgeben.

Hinzu kommt, dass Windows schon immer ein anderes ABI als Linux
verwendet hat und das auch heute noch tut. Also müsste man Wrapper
schreiben, die die Übergabeparameter anpassen. Ich weiß nicht, inwiefern
Windows andere Padding-Regeln für Strukturen hat als Linux, die muss man
also auch noch anpassen, eventuell.

Gruß
Jens



HTH,
Markus

Progress (n.): Process through which USENET evolved from smart people in
front of dumb terminals to dumb people in front of smart
terminals.

news://freenews.netfront.net/ - complaints:

Ähnliche fragen