A seção de um executável que contém código às vezes é chamada de .text
seção. Em arquiteturas de memória segmentada, um segmento mapeado como código às vezes é chamado de segmento de texto. A mensagem de erro do unix "arquivo de texto ocupado" ( ETXTBSY
) significa "este arquivo é um programa que está sendo executado".
Como o texto passou a significar código executável (máquina) ?
Uma resposta ideal seria: explicar a conexão entre a palavra e seu significado; fornecer uma citação para a origem ou pelo menos a história do termo; dê uma idéia de quais comunidades o usam.
terminology
history
file-structure
linking
Gilles 'SO- parar de ser mau'
fonte
fonte
.text
é uma diretiva de montagem. Assembly é texto.Respostas:
O termo vem da linguagem assembly. Não consigo verificar a etimologia, mas acho que o nome vem do outro uso da seção. Enquanto a
.data
seção indica variáveis que podem ser alteradas durante o curso da execução, a.text
seção contém dados que não são alterados durante a execução, permitindo que sejam colocados na ROM, se necessário. Isso o torna útil para código, sim, mas também para seqüências de texto que não são alteradas. Provavelmente é daí que o termo veio.Para abordar o comentário de Griffin sobre funções de primeira classe, considere o seguinte código python 3:
O código que você realmente executa
increment
acaba procurando internamente algo como:Esse código executável pode ser colocado na ROM. Ele nunca muda durante a execução do programa, não importa quantas vezes você ligue
counter()
. O que muda é oself
ponteiro e suas variáveis de membro. Aqueles devem ser colocados.data
. Quando vocêreturn increment
, na verdade, você está retornando uma nova instância de um objeto de função de incremento. Você não está criando dinamicamente novo código executável todas as vezes. O código em si é imutável, embora o ponteiro para ele não seja.O único código que deve ser armazenado na
.data
seção é o gerado poreval()
, porque não é conhecido pelo compilador ou JIT no início do programa. No entanto, mesmo esse código é imutável. Se você alterar a string e ligareval()
novamente, não estará alterando o código da hora anterioreval()
, mas criando um novo conjunto de códigos.Embora o modelo de programação pareça que o código é mutável, o código real de modificação própria no nível de instrução do processador é perigoso e raramente encontrado fora dos tópicos do voodoo do SO, como a alternância de contexto do processo.
fonte