Ein entscheidendes Konzept hinter UNIX® ist die Umgebung, die durch Umgebungsvariablen festgelegt wird. Manche werden vom System gesetzt, andere von Ihnen und wieder andere von der shell oder irgendeinem Programm, das ein anderes lädt.
Ich sagte vorher, dass wenn ein Programm mit der
Ausführung beginnt, der Stack argc
gefolgt vom durch NULL beendeten argv
-Array
und etwas Anderem enthält. Das "etwas Andere" ist die
Umgebung oder, um genauer zu sein, ein
durch NULL beendetes Array von Zeigern auf
Umgebungsvariablen. Davon wird oft als
env
gesprochen.
Der Aufbau von env
entspricht dem von
argv
, eine Liste von Speicheradressen gefolgt
von NULL (0
). In diesem Fall gibt es kein
"envc"
—wir finden das Ende heraus,
indem wir nach dem letzten NULL suchen.
Die Variablen liegen normalerweise in der Form
name=value
vor, aber manchmal kann der
=value
-Teil fehlen. Wir müssen diese
Möglichkeit in Betracht ziehen.
Ich könnte Ihnen einfach etwas Code zeigen, der die Umgebung in der Art vom UNIX®-Befehl env ausgibt. Aber ich dachte, dass es interessanter sei, ein einfaches CGI-Werkzeug in Assembler zu schreiben.
Ich habe eine detaillierte CGI-Anleitung auf meiner Webseite, aber hier ist ein sehr kurzer Überblick über CGI:
Der Webserver kommuniziert mit dem CGI-Programm, indem er Umgebungsvariablen setzt.
Das CGI-Programm schreibt seine
Ausgabe auf stdout
. Der Webserver
liest von da.
Die Ausgabe muss mit einem HTTP-Kopfteil gefolgt von zwei Leerzeilen beginnen.
Das Programm gibt dann den HTML-Code oder was für einen Datentyp es auch immer verarbeitet aus.
Während bestimmte Umgebungsvariablen Standardnamen benutzen, unterscheiden sich andere, abhängig vom Webserver. Dies macht webvars zu einem recht nützlichen Werkzeug.
Unser webvars-Programm muss also den HTTP-Kopfteil gefolgt von etwas HTML-Auszeichnung versenden. Dann muss es die Umgebungsvariablen eine nach der anderen auslesen und sie als Teil der HTML-Seite versenden.
Nun der Code. Ich habe Kommentare und Erklärungen direkt in den Code eingefügt:
Dieser Code erzeugt eine 1.396-Byte große Binärdatei. Das meiste davon sind Daten, d.h., die HTML-Auszeichnung, die wir versenden müssen.
Assemblieren Sie es wie immer:
%
nasm -f elf webvars.asm
%
ld -s -o webvars webvars.o
Um es zu benutzen, müssen Sie
webvars
auf Ihren Webserver hochladen.
Abhängig von Ihrer Webserver-Konfiguration, müssen
Sie es vielleicht in einem speziellen
cgi-bin
-Verzeichnis ablegen oder es mit
einer .cgi
-Dateierweiterung
versehen.
Schließlich benötigen Sie Ihren Webbrowser,
um sich die Ausgabe anzusehen. Um die Ausgabe auf meinem
Webserver zu sehen, gehen Sie bitte auf http://www.int80h.org/webvars/
.
Falls Sie neugierig sind, welche zusätzlichen Variablen
in einem passwortgeschützten Webverzeichnis vorhanden
sind, gehen Sie auf http://www.int80h.org/private/
unter Benutzung des Benutzernamens asm
und des Passworts programmer
.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.