2013-10-27 21 views
5

Ich habe eine nicht-Qt C DLL geschrieben mit Mingw mit der QtCreator IDE kompiliert.Wie Debuggen eines DLL-Projekts mit QtCreator?

Wenn ich die DLL in einen Prozess injiziere, verursacht die DLL, dass dieser Prozess bei einer bestimmten Codezeile abstürzt. Ich fand, dass diese Linie der Schuldige durch die Verwendung von OutputDebugString ist. Ich weiß, wie man die Zeile repariert und die DLL funktioniert, wenn diese Zeile geändert wird. Um jedoch zu lernen, wie man einen Debugger benutzt, habe ich die Zeile gebrochen und unmodifiziert verlassen.

Wie würde ich den QtCreator Debugger verwenden, um genau die gleiche Linie zu finden, die das Problem verursacht? Wenn QtCreator wird im Debug-Modus, Drücken von F5 Ergebnissen im folgenden Dialog kompilieren, weil es keine EXE ist:

enter image description here

+1

Schreiben Sie ein kleines Programm, das mit der Bibliothek verknüpft, die das Problem reproduziert, und führen Sie das im Debugger aus. Oder was meinst du genau mit "inject"? –

+0

@FrankOsterfeld: http://en.wikipedia.org/wiki/DLL_injection Es ist eine Low-Level-DLL-Datei, die den Speicher des Opfers bearbeitet bearbeitet. Ich kann nicht mit der Bibliothek verknüpfen, da DLL-Injektion funktioniert. Warum bearbeite ich den Speicher eines anderen Prozesses? Ich bearbeite den Speicher eines Open-Source-Projekts namens Assault Cube. Der Zweck ist es, mehr darüber zu erfahren, wie C-Code in ASM übersetzt wird und wie Computer auf der unteren Ebene funktionieren. – user2924308

+1

Nun, Sie können einfach den ausführbaren Namen eingeben, der Ihre DLL und Argumente dazu im obigen Fenster verwendet und QtCreator erledigt den Rest für Sie. – Lol4t0

Antwort

3

Die Lösung ist der Debugger an die ausführbaren Datei angehängt laufen, bevor die DLL-Injektion. Die DLL muss in Debug-Konfiguration erstellt werden, und das Projekt muss geöffnet werden. Hängen Sie den Debugger mithilfe der Anweisungen here an und injizieren Sie die DLL. Wenn die ausführbare Datei abstürzt, sollten Sie den Stack-Trace und Ihren DLL-Code sehen, wenn Sie auf den ausgewählten Stack-Frame klicken. Aber Vorsicht: Wenn Sie den Speicher des Prozesses beschädigt haben, ist der Stack-Trace möglicherweise unvollständig oder falsch.

+0

Super! Ich war mir fast sicher, dass das nicht möglich war. – user2924308

+0

@ user2924308 Wenn Sie meine Antwort hilfreich finden, akzeptieren Sie sie bitte. – Nazar554