Wie, Wenn Sie Win32-DLL-C#-Debugging-Fehler Beheben Möchten

Wenn Ihr Computer Probleme macht, wird diese Software das Problem beheben und Ihre Daten schützen.

In den letzten paar Tagen haben einige unserer Benutzer gemeldet, dass sie das Debuggen von C#-Win32-DLLs genießen.

debug win32 dll c#

Während einiger Redteam-Aufgaben müssen wir DLLs schreiben. Das Debuggen einer DLL ist jedoch nicht so einfach, wie es scheint, denn keine DLL ist darauf ausgelegt, den Trick damit zu machen.
In diesem Artikel sehen wir uns sicherlich an, wie man eine DLL effektiv debuggt.< /p>

Was ist eine DLL?

Wie debugge ich eine DLL?

Setzen Sie Breakpoints über das DLL-Projekt.Klicken Sie mit der rechten Maustaste auf das DLL-Projekt und wählen Sie sogar “Als Startprojekt festlegen”.Stellen Sie sicher, dass der Lösungskonfigurationsdienst zum Debuggen behoben ist. Drücken Sie F5, klicken Sie auf den entsprechenden grünen Startpfeil und wählen Sie Debuggen > Debuggen starten aus.

Die abgekürzte DLL wird für die dynamisch verknüpfte Exploration in Betracht gezogen. Es ist normalerweise ein modularer Ansatz zum Erstellen von Coupons. DLLs sind in C oder nur C++ geschrieben und dienen im Grunde als jede Bibliothek, auf die Programme zufällig zugreifen können, um erfolgreich ausgeführt zu werden. Bis zu einem gewissen Grad können Sie DLL mit einem Python-Paket oder einem guten npm-Paketvorschlag oder einer beliebigen Bibliothek vergleichen. Das folgende Symbol veranschaulicht das Konzept von DLL versus EXE recht gut:

Wie debugge ich eine aussagekräftige referenzierte DLL mit PDB?

Wenn es eine Referenzdatei (dll) sein soll, sieht man, muss der Debug-Wert (die “pdb”-Datei) eher im selben Ordner liegen wie die Haupt-dll. Überprüfen Sie, ob Ihre Projekte oft Debug-Symbole vorbereiten (Project Properties => Build => Advanced => Output/Debug Info = complete); und wenn Sie die DLL kopieren, fügen Sie hinzu, dass sie PDB hat.

Wie in der Präambel erwähnt, ist praktisch jede DLL nicht darauf ausgelegt, eigenständig zu funktionieren, da die Wirbel einfach nicht den traditionellen Stil des Debuggens außerhalb von a ausführen können installieren.

Debug-Option 1: OutputDebugString verwenden

Microsoft bietet eine Kernel32-Funktion in einer funktionalen .dll (oh schau, eine DLL!), die regelmäßig als OutputDebugString bezeichnet wird und es Ihnen ermöglicht, den Inhalt einer Sammlung auszudrucken, die der System-Debugger verwenden würde. Visual Studio verfügt über integrierte Funktionen, die diese Art von Ausgabe erfassen können (mehr dazu später). Mein bevorzugter System-Debugger ist Dbgview.exe wie das sysinternals-Paket. Um zu zeigen, wie OutputDebugString am besten funktioniert, habe ich einen zu kleinen Democode vorbereitet:

Nachdem ich bewiesen habe, dass eine DLL nicht alleine ausgeführt werden kann, beschließe ich, die DemoDLL-Nutzung der Schaltfläche „Ausführen“ in Visual Studio auszuführen, und werde von diesem einfachen Mann begrüßt:

Glücklicherweise hat Microsoft einen integrierten DLL-Lademechanismus namens rundll32.exe, aber rundll32.exe kann einen Fehler auslösen, wenn Sie nicht viele exportierte Merkmale haben (=Funktionen, die zuvor von anderen Programmen verwendet wurden ) durch jede DLL. Mein Kollege Didier Stevens spricht freundlicherweise in seinem Blog über DLL-Eingabefragen. Wenn Sie mehr planen, gönnen Sie sich etwas!

Aufgrund dieser Probleme bei der Eingabeverarbeitung habe ich einen Skelett-DLL-Loader formuliert, der wahrscheinlich leicht an Ihre Bedürfnisse angepasst werden kann und hier zu finden ist: https://github.com /NVISO-BE/DLLoader

Wie Einzelpersonen in ihrem Democode leicht sehen können, enthalten alle meine Debug-Ergebniszeilen “[DBG]”, dies geschah ohne Grund.

Dbgview ist ein weiterer Netzwerk-Debugger, der viel Lärm macht, je nachdem, was jeder in der Routine installiert hat. Die dbgview hat jedoch einen Einstellungsfilter. Da jede einzelne Debug-Zeile “[DBG]” enthält, können wir Dbgview einfach anweisen, nur Nachrichten der eigenen Organisation wie diese anzuzeigen:

Alles kann als Einstellung beschrieben werden, es dauert Minuten, unsere DLL auszuführen und sich die DebugView-Ausgabe anzusehen:

Debug-Methode ein Paar von: Using Printf

Diese Methode verwendet printf anstelle von OutputDebugString, also optimieren wir unseren Lieblingscode:

Wenn wir unseren individuellen DLL-Loader verwenden, sehen wir all diese spezielle printf-Ausgabe, die oft auf der Standardausgabe des DLL-Loader-Programms angezeigt wird, das wiederum wahrscheinlich unsere Eröffnungskonsole ist.

Debug-Methode wenige: Verwenden Sie den DLL-Loader zum Debuggen in Visual Studio

Sie müssen Windows-Fehler beheben? Reimage kann helfen

Läuft Ihr Computer langsam und träge? Bekommst du den gefürchteten Blue Screen of Death? Dann ist es an der Zeit, Restoro herunterzuladen! Diese revolutionäre Software repariert alle Ihre gängigen Windows-Fehler, schützt Ihre Dateien vor Verlust oder Beschädigung und sorgt dafür, dass Ihre Hardware optimal funktioniert. Also, worauf wartest Du? Laden Sie Restoro jetzt herunter!

  • 1. Laden Sie die Reimage-Software herunter und installieren Sie sie
  • 2. Öffnen Sie die Software und klicken Sie auf „Nach Problemen suchen“
  • 3. Klicken Sie auf "Alle reparieren", um den Reparaturvorgang zu starten

  • Jetzt, da unsere Gruppe über den neuen Ersatz-DLL-Stuffing-Mechanismus verfügt, können wir Visual Studio anweisen, ihn zu verwenden, da dies normalerweise der übergeordnete Prozess ist, sodass unser Team die DLLs definitiv in der Visual Studio-Umgebung ausführen wird , debuggen, und unser neues Unternehmen wird die Möglichkeit haben, DLLs in einer debuggten EXE-Datei auf die gleiche Weise zu debuggen.

    Wie debugge ich eine Win32-Anwendung?

    Öffnen Sie ein laufendes Projekt in Visual Studio.Finden Sie im Debug-Menü Start heraus.Debuggen Sie mithilfe der im Abschnitt „Debugger auf einen Blick“ beschriebenen Methoden.

    Geben Sie im Befehlsfeld den Bereich für die ausführbare Datei eines DLL-Loaders an; Geben Sie im Feld Befehlsbegründungen die im DLL-Ladeprogramm erforderlichen Argumente an, einschließlich des Fokus auf den DLL-Debug-Test. Wenn jemand kein exportierbares Attribut erhält, sind wir weit davon entfernt, wie das zweite Argument verwendet wird. Wenn Sie dieses letzte Argument verwenden möchten, sollten Sie dies nach dem gleichen Konzept wie in der Konsole tun können.

    Wenn Sie jetzt die Can-DLL ausführen, wird die Verwendung der grünen Wiedergabeoption normalerweise automatisch von Visual Studio generiert. Dies weist die DLL-Lademaschine an, mit den Argumenten in der Zwischenzeit zu beginnen, die auf der Housing-Seite des Projekts angegeben ist.
    Wie Sie sehen können, findet und verarbeitet Visual Studio Haltepunkte für gewöhnlich:

    debug win32 dll c#

    Da einige printf-Anweisungen immer vorhanden sind, werden sie normalerweise gedruckt, damit Sie die Konsole auch lesen können:

    Schlussfolgerung

    Abhängig von der Komplexität Ihres DLL-Programmcodes können Sie in den meisten Fällen die DLL-Lademaschine in Visual So Studio verwenden, damit Ihr Unternehmen wie jedes andere Programm debuggen kann. Falls gewünscht, kann jeder über printf-Anweisungen diesen DLL-Loader aktivieren, sodass Sie fast jede Echtzeitansicht dessen abrufen können, was durch jede Konsolenverwendung des DLL-Loaders vor sich geht. B. asynchrone Textnachrichten oder Aufrufe, ist OutputDebugString jetzt das Beste, da der DLL-Loader keine Rechnung für neue Threads oder asynchrone Anfragen stellt. Bauernhof

    Wie führe ich eine DLL in Visual Studio aus?

    Gehen Sie zum Startmenü.Melden Sie sich wieder beim Visual Studio-Tool an.Ändern Sie das kann das obige Verzeichnis.Für VS 2013 klicken Sie sich durch „Developer Command Prompt“, für VS das Jahr 2013 oder für VS 2010 einfach „Visual Studio Command Prompt“.Sobald die Ursache auf Ihrem Telefonbildschirm angezeigt wird, wird eine Vielzahl von ILDASM.Das ILDASM-Fenster wird geöffnet.

    Dies ist ohne Zweifel unser Ausflug in die normale Wirtschaftlichkeit des DLL-Debuggings. Ich hoffe, der jeweilige Blog-Beitrag war lehrreich, um Ihnen etwas Nützliches beizubringen!

    Über diesen Autor

    Jean-Francois Mays ist ein professioneller Social Engineer, der im eigentlichen NVISO Cyber ​​​​Resilience-Team arbeitet. Wenn Ihr Mann normalerweise nicht arbeitet, finden Sie Jean-Francois am ehesten im Fitnessstudio oder im Verwaltungsstudium. Zusätzlich zu seiner Arbeit bei NVISO ist er auch der Programmierer für die Red Teamers-Website redteamer.tips.

    Ihr PC macht Ihnen Probleme? Entspann dich, es gibt eine Lösung! Klicke hier zum herunterladen.