Suponho que estamos falando de arquitetura x86.
Você não pode ter o Código de Auto-modificação no modo protegido , que é usado pela maioria dos sistemas operacionais baseados em UNIX (e não só) que eu estou ciente, porque os segmentos de código são sempre somente leitura. Um carregador não controla isso - é algo que está sendo tratado pelo subsistema de gerenciamento de memória do kernel.
Mas mesmo se você pudesse "criar o código para essa tabela no momento do carregamento", como você diz, isso desafiaria todo o propósito das bibliotecas compartilhadas. Dessa forma, cada processo teria uma cópia "privada" das funções da biblioteca em seu espaço de endereço, aumentando efetivamente o espaço ocupado pela memória - uma das razões pelas quais as bibliotecas compartilhadas foram criadas, para resolver esse problema.
O processo inteiro que você descreve é bastante complexo, e custaria mais ciclos de processamento do que o método PLT usado hoje em dia, e provavelmente introduziria mais, novos & questões de segurança interessantes.