Sekcja pliku wykonywalnego zawierająca kod jest czasem nazywana .text
sekcją. W architekturach pamięci podzielonej na segmenty segment odwzorowany jako kod jest czasami nazywany segmentem tekstowym. Komunikat o błędzie unixa „plik tekstowy zajęty” ( ETXTBSY
) oznacza „ten plik jest wykonywanym programem”.
W jaki sposób tekst oznaczał kod wykonywalny (maszynowy) ?
Idealna odpowiedź: wyjaśniłaby związek między słowem a jego znaczeniem; przytoczyć pochodzenie lub przynajmniej historię tego terminu; dać wyobrażenie o tym, które społeczności go używają.
terminology
history
file-structure
linking
Gilles „SO- przestań być zły”
źródło
źródło
.text
to dyrektywa dotycząca montażu. Zgromadzenie jest tekstem.Odpowiedzi:
Termin pochodzi z języka asemblera. Nie mogę zweryfikować etymologii, ale domyślam się, że nazwa pochodzi od innego zastosowania tej sekcji. Podczas gdy
.data
sekcja oznacza zmienne, które mogą się zmieniać w trakcie wykonywania,.text
sekcja zawiera dane, które nie zmieniają się podczas wykonywania, co pozwala w razie potrzeby umieścić je w pamięci ROM. To sprawia, że jest przydatny do kodu, tak, ale także użyteczny dla ciągów tekstu, które się nie zmieniają. Prawdopodobnie stąd pochodzi ten termin.Aby odpowiedzieć na komentarz Griffina na temat funkcji pierwszej klasy, rozważ następujący kod w języku Python 3:
Kod, który faktycznie wykonujesz
increment
, wygląda wewnętrznie na coś takiego:Ten kod wykonywalny można umieścić w pamięci ROM. Nigdy się nie zmienia podczas wykonywania programu, bez względu na to, ile razy dzwonisz
counter()
. Co robi zmian jestself
wskaźnik i jego zmienne składowe. Te muszą być włożone.data
. Gdy takreturn increment
naprawdę zwracasz nową instancję obiektu funkcji przyrostowej. Za każdym razem nie tworzysz dynamicznie nowego kodu wykonywalnego. Sam kod jest niezmienny, mimo że wskaźnik do niego nie jest.Jedyny kod, który musi być przechowywany w
.data
sekcji, to kod wygenerowany przezeval()
, ponieważ nie jest on znany kompilatorowi ani kompilatorowi JIT na początku programu. Jednak nawet ten kod jest niezmienny. Jeśli zmienisz ciąg i zadzwoniszeval()
ponownie, nie zmieniasz kodu z poprzedniego wywołaniaeval()
, tworzysz zupełnie nowy zestaw kodów.Chociaż model programowania może sprawiać wrażenie, że kod jest zmienny, faktyczny samodmodyfikujący się kod na poziomie instrukcji procesora jest niebezpieczny i rzadko można go znaleźć poza tematami voodoo systemu operacyjnego, takimi jak przełączanie kontekstu procesu.
źródło