Der Abschnitt einer ausführbaren Datei, der Code enthält, wird manchmal als .text
Abschnitt bezeichnet. In segmentierten Speicherarchitekturen wird ein als Code abgebildetes Segment manchmal als Textsegment bezeichnet. Die Unix-Fehlermeldung "text file busy" ( ETXTBSY
) bedeutet "Diese Datei ist ein Programm, das gerade ausgeführt wird".
Wie kam Text kommen , um meine ausführbare Datei (Maschine) Code ?
Eine ideale Antwort würde: den Zusammenhang zwischen dem Wort und seiner Bedeutung erklären; Geben Sie einen Hinweis auf die Herkunft oder zumindest die Geschichte des Begriffs. geben Sie eine Vorstellung davon, welche Communities es verwenden.
terminology
history
file-structure
linking
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
.text
ist eine Montageanweisung. Versammlung ist Text.Antworten:
Der Begriff stammt aus der Assemblersprache. Ich kann die Etymologie nicht verifizieren, aber ich vermute, dass der Name von der anderen Verwendung des Abschnitts stammt. Während der
.data
Abschnitt Variablen kennzeichnet, die sich während der Ausführung ändern können,.text
enthält der Abschnitt Daten, die sich während der Ausführung nicht ändern, sodass sie bei Bedarf in das ROM gestellt werden können. Das macht es nützlich für Code, ja, aber es macht es auch nützlich für Textfolgen, die sich nicht ändern. Das ist wahrscheinlich, woher der Begriff kam.Beachten Sie den folgenden Python 3-Code, um Griffins Kommentar zu erstklassigen Funktionen zu beantworten:
Der Code, den Sie tatsächlich ausführen
increment
, sieht intern ungefähr so aus:Dieser ausführbare Code kann in das ROM geschrieben werden. Es ändert sich nie während der Ausführung des Programms, egal wie oft Sie aufrufen
counter()
. Was sich ändert, sind derself
Zeiger und seine Mitgliedsvariablen. Die müssen rein.data
. Wenn Sie dies tunreturn increment
, geben Sie tatsächlich eine neue Instanz eines Inkrementfunktionsobjekts zurück. Sie erstellen nicht jedes Mal dynamisch neuen ausführbaren Code. Der Code selbst ist unveränderlich, obwohl der Zeiger nicht darauf ist.Der einzige Code, der in dem Abschnitt gespeichert werden muss ,
.data
ist der von generierte Codeeval()
, da er dem Compiler oder JIT-Compiler beim Start des Programms nicht bekannt ist. Allerdings ist auch dieser Code unveränderlich. Wenn Sie die Zeichenfolge ändern undeval()
erneut aufrufen , ändern Sie den Code nicht gegenüber dem vorherigen Aufruf , sonderneval()
erstellen eine ganz neue Codemenge.Obwohl das Programmiermodell den Eindruck erweckt, dass Code veränderlich ist, ist der tatsächliche selbstmodifizierende Code auf Prozessoranweisungsebene gefährlich und wird außerhalb von OS Voodoo-Themen wie dem Umschalten des Prozesskontexts selten gefunden.
quelle