View Full Version : Chiamate DLL
Eddie_Forst
28-06-2006, 11:03
Salve a tutti, c'è un modo per sapere quali metodi di una DLL sono chiamati da un eseguibile EXE a runtime? :mc:
Salve a tutti, c'è un modo per sapere quali metodi di una DLL sono chiamati da un eseguibile EXE a runtime? :mc:Dipende .... le funzioni in una DLL possono essere linkate in 2 modi da un eseguibile:
a) In modo "statico". Il nome della DLL e i riferimenti alle funzioni utilizzate è indicato in modo fisso nelle sezioni di header dell'eseguibile. Un tool come il "Dependency Walker" del VC++ consente di visualizzare tutte queste dipendenze statiche.
b) In modo "dinamico". L'eseguibile utilizza le funzioni Win32 LoadLibrary e GetProcAddress per caricare la libreria a run-time e ottenere un puntatore alla funzione da richiamare. In questo caso solo disassemblando l'eseguibile è possibile capire dove e cosa "aggancia" in modo dinamico.
Eddie_Forst
28-06-2006, 12:01
Allora, le librerie sono caricate in parte dinamicamente e in parte staticamente...
Sto provando ad usare OllyDbg ma non riesco a trovare le chiamate che cerco.
Allora, le librerie sono caricate in parte dinamicamente e in parte staticamente...
Sto provando ad usare OllyDbg ma non riesco a trovare le chiamate che cerco.Il dependency walker lo trovi (oltre che nel Visual Studio) <qui> (http://www.dependencywalker.com). Prova ad usarlo, se non ti elenca le DLL/funzioni che ti aspetti di trovare ... beh, al 99%, l'eseguibile effettua un link dinamico.
jappilas
28-06-2006, 13:39
Il dependency walker lo trovi (oltre che nel Visual Studio) <qui> (http://www.dependencywalker.com). Prova ad usarlo, se non ti elenca le DLL/funzioni che ti aspetti di trovare ... beh, al 99%, l'eseguibile effettua un link dinamico.
grazie dell' indicazione, questo tool mi era sfuggito ed è carinissimo ( per risolvere le dipendenze di runtime, permette di fare anche il profiling dell' eseguibile target ) :)
piccola precisazione: i due tipi di linking che andbin ha chiamato statico e dinamico sono in realtà entrambi di tipo dinamico; quello che intendeva dire era implicito ed esplicito (rispettivamente) ;)
piccola precisazione: i due tipi di linking che andbin ha chiamato statico e dinamico sono in realtà entrambi di tipo dinamico; quello che intendeva dire era implicito ed esplicito (rispettivamente) ;)Sì, hai ragione :p , tecnicamente è sempre un caricamento dinamico, con la differenza che nel primo caso è il S.O. che legge l'elenco delle dipendenze e carica le DLL mentre nel secondo caso è l'applicazione che carica (quando vuole ed eventualmente in base a certe condizioni) altre DLL.
Con "statico" intendevo solo che le DLL sono indicate e caricate in modo "fisso", "cablato" quando viene caricato l'eseguibile.
Comunque <questa> (http://search.msdn.microsoft.com/search/Redirect.aspx?title=About+Dynamic-Link+Libraries+%5bBase%5d&url=http://msdn.microsoft.com/library/en-us/dllproc/base/about_dynamic_link_libraries.asp) pagina su MSDN spiega molto bene (meglio di quanto ho fatto io :D ) i due modi di caricamento.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.