Ícone de arquivos DLL - Bibliotecas de Vínculo Dinâmico - no Windows 7. (Foto: Reprodução)
A DLL – Dynamic Link Library, ou Biblioteca de Vínculo Dinâmico, é um componente fundamental de sistemas operacionais modernos e é a forma que o Windows permite a utilização de bibliotecas compartilhadas.
Para entender melhor é preciso saber que os programas de computador são formados por uma variedade de objetos, mas o mais fácil de entender são as funções (sub-rotinas). Quando um software precisa realizar alguma atividade – desde imprimir um arquivo, até construir a interface gráfica – ele faz isso chamando uma série de funções.
Se você usou o Excel ou outro software de planilha, já utilizou algumas funções para calcular valores em uma célula. Os softwares funcionam de maneira semelhante. Tudo o que acontece em um programa é feito por meio de chamadas a essas sub-rotinas – seja calcular uma data, converter números, gerar códigos, calcular a posição de algo na tela, etc.
Existem sub-rotinas prontas para realizar as mais variadas tarefas, dispensando o programador de fazer um trabalho do zero, acelerando e facilitando a criação de softwares.
Isso é muito comum em jogos de computador: qualquer gamer já teve de instalar os componentes do DirectX. O DirectX dá aos criadores de jogos uma série de funções prontas – por meio de DLLs – que eles podem chamar sem ter de fazer todo o trabalho em cada game.
Essas funções prontas são chamadas de bibliotecas.
Mas por que uma DLL é uma biblioteca de vínculo dinâmico? O “vínculo” nesse caso é uma referência ao modo que as funções prontas que o programador utilizou são integradas ao software. Em termos simples, no vínculo estático (quando não há DLL) o resultado é um arquivo executável (.exe) enorme, porque todo o código precisa ficar dentro dele.
Graças ao DLL, o arquivo executável pode chamar um código externo (localizado no DLL). E ele é dinâmico porque só é carregado na memória quando (e se) for usado, além de ter a possibilidade de ser compartilhado, isto é, não precisar ser carregado na memória duas vezes caso mais de um programa precise do mesmo código. Ou seja, além de reduzir o tamanho do programa – se o DLL já estiver com o usuário -, a reutilização do código também reduz o uso de memória.
Um exemplo
Se um programador quer desenvolver um software que exibe páginas de internet, não é necessário que ele crie um navegador de internet inteiro para isso. O Internet Explorer, que faz parte do Windows, tem toda a sua capacidade de processamento de páginas de internet em DLLs.
Basta o programador chamar a DLL e ela será carregada para o uso do programa. Todo o trabalho está feito. Se o Internet Explorer já estiver em execução no sistema, o código da DLL não vai ser carregado duas vezes, reduzindo o uso de memória.
É por esse motivo que o executável principal do Internet Explorer 9 (iexplore.exe) tem apenas 730 KB. O coração do Internet Explorer é na verdade o mshtml.dll, que tem quase 12 MB.
Problemas com DLL
Como os programas de computador dependem das DLLs – porque parte do programa está na DLL -, não é incomum que um programa deixe de funcionar por conta de erros de DLL. E o pior: muitas DLLs com o mesmo nome têm múltiplas versões, e algumas versões são incompatíveis com determinados programas. Quer dizer, um programa, feito para uma DLL antiga, não consegue funcionar se o sistema tiver instalada a versão nova. E vice-versa.
Esse problema é chamado de DLL Hell. 1
As DLLs podem ser buscadas em diversas pastas. O primeiro local de pesquisa é normalmente a pasta em que o próprio programa se localiza e, em seguida, serão pesquisadas pastas de sistema, como a pasta System32 e a pasta Windows. Isso permitiu que alguns problemas de compatibilidade de DLL fossem resolvidos copiando a versão adequada de DLL para a pasta do software que está com erros.
Essa funcionalidade também gerou uma falha de segurança: se um DLL malicioso for colocado na pasta de um programa legítimo que carrega aquele DLL, o software vai dar preferência ao DLL infectado.
Outros usos do DLL
Além de funções usadas por programas, o DLL também pode armazenar dados e arquivos. Um uso muito comum são os ícones. As próprias funções dos DLLs podem usar esses dados armazenados.
Um DLL ainda pode ser executado diretamente como programa usando um software hospedeiro. O svchost.exe e o rundll32.exe são exemplos de hospedeiros.
DLLs também são comumente registradas para serem usadas como plug-ins do Internet Explorer e outros programas. O uso de uma DLL permite que o software facilmente carregue o código e execute as funções ali armazenadas como parte do seu funcionamento.
- No Linux, o termo usado é dependency hell. Os arquivos de objetos e bibliotecas compartilhadas normalmente têm a extensão .so; também pode ser encontrado em .o e .ko. ↩
http://www.linhadefensiva.org/
Nenhum comentário:
Postar um comentário