2013-10-27 15 views
5

Ho scritto una DLL C non Qt compilata con mingw usando l'IDE QtCreator.Come eseguire il debug di un progetto DLL utilizzando QtCreator?

Quando si inserisce la DLL in un processo, la DLL causa il blocco di tale processo su una determinata riga di codice. Ho trovato questa linea colpevole attraverso l'uso di OutputDebugString. So come correggere la linea e la DLL funziona quando quella linea viene modificata. Tuttavia, allo scopo di imparare a usare un debugger, ho lasciato la linea spezzata e non modificata.

Come utilizzare il debugger QtCreator per individuare la stessa linea esatta che causa il problema? Quando QtCreator è impostato per la compilazione in modalità debug, premere F5 risultati nella seguente finestra di dialogo, perché non c'è EXE:

enter image description here

+1

Scrivere un piccolo programma che si collega alla libreria che riproduce il problema ed eseguirlo nel debugger. O cosa intendi esattamente con "iniettare"? –

+0

@FrankOsterfeld: http://en.wikipedia.org/wiki/DLL_injection È un file DLL di basso livello che modifica la memoria della vittima procces. Non riesco a collegarmi alla libreria a causa di come funziona l'iniezione DLL. Perché sto modificando la memoria di un altro processo? Sto modificando la memoria di un progetto open source chiamato Assault Cube. Lo scopo è quello di esplorare e imparare di più su come il codice C è tradotto in ASM e su come i computer lavorano a livello inferiore. – user2924308

+1

Bene, puoi semplicemente digitare il nome dell'eseguibile, che usa la tua DLL e gli argomenti nella finestra sopra e QtCreator farà il resto per te. – Lol4t0

risposta

3

La soluzione è quella di eseguire il debugger attaccato al eseguibile prima di iniettare la DLL. La DLL deve essere costruita nella configurazione di debug e il suo progetto deve essere aperto. Collegare il debugger usando le istruzioni here e iniettare la DLL. Se l'eseguibile si blocca, dovresti vedere la traccia dello stack e il codice della DLL quando fai clic sul frame dello stack selezionato. Ma fai attenzione: se hai danneggiato la memoria del processo, la traccia dello stack potrebbe essere incompleta o errata.

+0

Fantastico! Ero quasi certo che ciò non fosse possibile. – user2924308

+0

@ user2924308 Se trovi utile la mia risposta, per favore accettala. – Nazar554

Problemi correlati