MegaLab.it
Stampa Articolo
Aperiodico gratuito di informatica
 
20100827120651_157929542_20100827120622_1752187609_dll.png

Scoprire quali sono le DLL usate da un programma

a cura di Palpas
14/07/2010 - articolo
Tecniche Avanzate - Facciamo luce sulle librerie utilizzate da un programma e in che modo vengono appellate, scopriamo quindi quali funzioni esso chiama durante la sua esecuzione.

A volte, per necessità o per curiosità, si potrebbe voler sapere quali librerie vengono utilizzate da un determinato programma al fine di individuare le DLL di cui abbiamo bisogno o per accertare eventuali problemi.

Per questo scopo ci viene in aiuto un semplice programmino di nome Dependency Walker: si tratta di un freeware portable sviluppato da un programmatore Microsoft.

Una volta avviato, clicchiamo su File e successivamente su Open. Scegliamo quindi l'eseguibile da analizzare.

Ecco come si presenterà:

Quadrante1e2.JPG

Nel riquadro 1 abbiamo una visione in maniera gerarchica dei moduli coinvolti nel programma.

Viene mostrato dunque un elenco ad albero delle librerie utilizzate direttamente e delle relative librerie necessarie al loro funzionamento.

Nel riquadro 2 abbiamo un elenco equivalente al primo, ma che mostra in maniera riassuntiva e semplice tutte le DLL necessarie all'esecuzione del programma.

Cliccando su uno dei moduli nel primo quadrante possiamo vedere la parte relativa alle funzioni:

Quadrante3e4.JPG

Più precisamente, nel quadrante 3 vengono mostrate tutte le funzioni chiamate dal programma (Parent Import Function), mentre nel quadrante 4 è presente l'elenco di tutte le funzioni all'interno della DLL in questione (Function Export).

Tipi di dipendenze

Un programma e/o una libreria possono essere collegati ad altri moduli in tre maniere:

Dipendenza implicita

Si tratta di dipendenza implicita quando la libreria è collegata direttamente all'eseguibile. Tale associazione è stata fatta quindi al momento della compilazione del programma.

All'avvio del modulo padre (eseguibile), esso caricherà tutte le librerie a cui è dipendente implicitamente.

Dipendenza dinamica

Nella dipendenza dinamica invece, il modulo non viene caricato preventivamene, ma è il programma che lo chiama durante il runtime; l'eventuale assenza di una libreria dinamica non impedisce l'avvio del programma ma ne preclude il corretto funzionamento

Dipendenza transitiva

Si tratta di dipendenza transitiva quando la funzione presente in un modulo, viene caricata da una terza libreria.

In questo caso il modulo in questione viene caricato all'avvio del programma (come nella dipendenza implicita), ma la funzione in questione viene presa da un'altra libreria non associata preventivamente all'eseguibile.

Simboli

Vediamo ora alcuni simboli mediante i quali Dependency Walker classifica una libreria.

Simboli.jpg

Guarda le dipendenze nel menu contestuale

Per comodità si può aggiungere la voce di Dependency Walker nel menu contestuale di un eseguibile.

Per prima cosa copiamo il programma Depends.exe nella cartella C:\windows\system32

Ora apriamo il blocco note ed incolliamo il seguente codice:

Salviamo il file aggiungendo l'estensione .reg e lanciamolo, quindi confermiamo.

Ora avremo comodamente la voce nel menu contestuale, così da vedere le dipendenze di un eseguibile in maniera più comoda e veloce:

Menucontestuale.jpg

MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .

Copyright 2008 MegaLab.it - Tutti i diritti sono riservati