2016-05-22 7 views
0

Ich weiß, dass ausführbare Dateien (zB: .exe für Windows) Binärdateien sind. Ich weiß über Hex-Dateien und Assembly und so weiter. Ich kenne auch OS-APIs. Theoretisch könnte ich einen Webbrowser komplett in Assemblercode schreiben, der die OS-APIs verwendet, ihn mit NASM zusammensetzen und eine ausführbare Datei erhalten. Aber meine Frage ist, wie steuern Betriebssysteme die Anwendungen? Zum Beispiel könnte ich eine ausführbare Datei unter Windows haben, die in den Videospeicher schreibt und den Bildschirm mit zufälligem Zeug füllt. Ich habe das (tatsächlich) versucht und Windows hält die Anwendung an. Wie kontrolliert es die Anwendung? Außerdem, wenn ich eine Linux-ausführbare Datei habe und versuche, sie auf einer Windows-Maschine mit genau der gleichen Hardware auszuführen, sollte sie theoretisch funktionieren (obwohl sie keine Windows-APIs verwenden wird), da die Prozessorarchitektur dieselbe ist, aber noch Es kann nicht. Wie kontrolliert das Betriebssystem die Binärdateien?Ausführbare Binärdateien und das OS

Antwort

0

Das Betriebssystem, insbesondere Windows und Linux schützen andere Anwendungen und das Betriebssystem selbst vor Anwendungen. Es gibt also eine Schutzschicht, die eine Anwendung im Idealfall nicht als Benutzer ausführen kann.

Sie möchten Pixel auf dem Bildschirm platzieren, müssen Sie das Betriebssystem bitten, es für Sie zu tun. Wenn das Betriebssystem eine Möglichkeit bietet, durchzudringen (indem man mmap aufruft, muss vielleicht als root laufen), dann kann man den Computer nach Belieben zerstören, ja. Der Plan/Entwurf ist, Dir keinen direkten Zugriff zu erlauben, Du erhältst einen virtuellen Raum, eine Sandbox, in Deiner Anwendung zu spielen, Du hast einen virtuellen Adressraum mit irgendeinem RAM, den Du beliebig lesen und schreiben kannst, aber Du gehst Außerhalb davon müssen Sie stillgelegt oder zumindest irgendwie behandelt werden.

Soweit welche Sprache Sie Anwendungen in ja schreiben, wenn es ein normales Windows-Programm oder Linux-Programm ist, dann alles, was Sie tun können, Maschinencode für das Ziel zu generieren, asm, ada, C, usw. Wenn Sie es sind sprechen spezifische virtuelle Maschinen (Java, Python) dann werden Ihre Entscheidungen begrenzt. Wenn Sie mehr als nur in Ihrem Space spielen möchten und eine andere Ausgabe als einen Rückgabewert haben möchten, müssen Sie Systemaufrufe so durchführen, wie es das System erfordert. Dies ist ziel- und betriebssystemspezifisch. Und wieder, Sie erhalten die richtigen Anweisungen oder Register oder Speicherstruktur oder was auch immer von dem Betriebssystem für diesen Aufruf in welcher Sprache Sie oder Bibliotheken, mit denen Sie verknüpfen können, dann kann der Rest Ihres Programms kann in jeder Sprache, ja absolut Sie möchten einen Webbrowser in Assemblersprache mit nasm schreiben, komplett machbar. müssen ein binäres Format erstellen, das das Betriebssystem unterstützt, und die Systemaufrufe bei Bedarf so vornehmen, wie es das System erfordert.

Verwandte Themen