O código de modificação automática pode ser usado para acelerar a chamada de funções em bibliotecas vinculadas dinamicamente?
Pelo que entendi, as bibliotecas compartilhadas ELF usam um tipo de tabela de salto indireto (a tabela de ligação de procedimento ou PLT) para permitir a ligação lenta de funções da biblioteca. O objetivo parece evitar a necessidade de modificar a tabela no segmento de código, enquanto ainda permite a resolução lenta das posições das funções na primeira chamada.
Não seria mais rápido criar dinamicamente o código para essa tabela no tempo de carregamento ou possivelmente até na primeira chamada de função?
É para permitir o compartilhamento do segmento de código entre processos, tanto quanto possível (uma tabela dinâmica seria privada para um processo)? É por motivos de segurança (o código gravável não deve ser executável - mas os JITs fazem isso o tempo todo e a permissão de gravação pode ser adicionada e removida pelo carregador antes de realmente iniciar o programa)?
Ou é uma combinação desses, e o pequeno ganho de desempenho por chamada de função simplesmente não valeria o esforço?
Os DSOs da ELF podem usar um sinalizador (DF_TEXREL) para anunciar que exigem re-realocações modificando sua seção de texto (que normalmente é somente leitura). A abordagem da tabela de salto, juntamente com o código independente da posição da TORTA, deve ser mais ideal.
(Verificou isso em http://www.akkadia.org/drepper/dsohowto.pdf , mas outros recursos também mencionam isso).
fonte