View Full Version : dll, funzioni e argomenti
ciao a tutti,
ho un file dll di cui conosco i nomi delle funzioni contenute in esso, come posso scoprire quanti argomenti bisogna passare ad ogni funzione e di che tipo di argomenti si tratta?
grazie!
se non hai l'header i tipi degli argomenti non li puoi scoprire e il numero di argomenti lo puoi scoprire solo con un minimo di disassemblaggio.
disassemblaggio?
mi spiegheresti come fare?
disassemblaggio?
mi spiegheresti come fare?Un "disassemblatore" è un software che consente di tradurre il linguaggio macchina in un listato in linguaggio assembly.
Per dirla in altro modo: un disassemblatore legge i codici binari presenti in un eseguibile ed è in grado di tirare fuori un listato, più o meno completo, in linguaggio assembly.
A quel punto però bisogna conoscere, e molto bene, il linguaggio assembly del processore per poter capire che cosa fa il programma.
dimenticavo: è possibile conoscere il numero di parametri solo se la convenzione di chiamata è __stdcall (bisogna analizzare le operazioni effettuate su ESP, solitamente basta vedere il valore accanto al RET finale e dividerlo per 4); se invece è __cdecl allora non è possibile - serve per forza l'header.
dimenticavo: è possibile conoscere il numero di parametri solo se la convenzione di chiamata è __stdcall (bisogna analizzare le operazioni effettuate su ESP, solitamente basta vedere il valore accanto al RET finale e dividerlo per 4); se invece è __cdecl allora non è possibile - serve per forza l'header.Tralasciando un momento il caso del numero variabile di argomenti (printf e simili, fattibile solo con __cdecl), è tranquillamente possibile capire quali parametri si aspetta una funzione. Avendo il disassemblato basta andare a vedere cosa prende dallo stack in [EBP+nn]. Il significato e il tipo dei dati è poi comunque da stabilire esaminando il disassemblato.
Tralasciando un momento il caso del numero variabile di argomenti (printf e simili, fattibile solo con __cdecl), è tranquillamente possibile capire quali parametri si aspetta una funzione. Avendo il disassemblato basta andare a vedere cosa prende dallo stack in [EBP+nn]. metti che il prototipo termina con parametri inutilizzati riservati ad uso futuro? :p
si ok lo so, quella DLL funziona anche se faccio finta che non ci siano :)
usando un deassembler ho visto tutti i parametri delle funzioni. il numero credo sia giusto...ma tutti i parametri sono dword e questo un po mi puzza...
qui ho messo un immagine di ciò che vedo: http://www.geocities.com/bagbyte/funzioni.jpg
che ne pensate?
altre idee?
PS: non ho capito nulla a proposito del RET, ESP e [EBP+nn], mi potreste spiegare? non capisco nulla di assembly.
grazie mille
ti dice sempre DWORD perché, come ti dicevamo, non è possibile determinare il tipo dei parametri.
e quella cosa della divisione per 4? di che si tratta?
l'istruzione RET n fa sostanzialmente le seguenti cose: estrae dallo stack un puntatore, sposta l'esecuzione all'indirizzo da esso espresso, ed infine aggiunge n bytes ad ESP (cioè toglie n bytes dallo stack). ora conoscendo n come facciamo a sapere il numero di parametri della funzione, sapendo che solitamente i compilatori usano RET n per fare il cleanup?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.