Ícone de arquivos DLL - Bibliotecas de Vínculo Dinâmico - no Windows 7. (Foto: Reprodução)

Um leitor da Linha Defensiva enviou a seguinte pergunta à redação:

Gostaria, se for possível, que me tirassem uma dúvida: o que é uma biblioteca DLL?

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. 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.]

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.

Escrito por Altieres Rohr

Editor da Linha Defensiva.

1 comentário

  1. o que é significa dll

    Curtir

    Responder

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.