Welche C / C ++ - Tools können auf Pufferüberläufe prüfen?
Wurde ich gefragt, um eine große C++ - quellcodebasis voller memory leaks. Beim herumstöbern fand ich heraus, dass wir eine Menge von buffer-overflows führen, dass die Leckagen (wie wurde es so schlimm, ich will nie wissen).
Habe ich beschlossen, das entfernen der Puffer-überläufe ersten. Mein bug-Jagd zu erleichtern, welche tools können verwendet werden, um zu überprüfen, für Pufferüberläufe?
InformationsquelleAutor der Frage MrValdez | 2008-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter Linux, die ich benutzen würde Valgrind.
InformationsquelleAutor der Antwort diciu
Erwägen Sie die Verwendung moderner Daten-Strukturen als ein Weg zur Vermeidung von buffer-overflows. Das Lesen in einen std::string nicht überlaufen, und std::Vektoren sind viel sicherer als arrays. Ich weiß nicht was deine Anwendung ist, und es ist möglich, dass der raw-Puffer verwendet werden, da müssen Sie die Geschwindigkeit, aber es ist eher üblich, dass Sie verwendet werden, weil das ist, was der ursprüngliche Programmierer waren komfortabel mit.
Suche nach Speicherlecks mit den Werkzeugen erwähnt ist eine gute Idee, aber Sie kann nicht finden, alle potentiellen Lecks, während unter Verwendung von standard-strings und container-Klassen kann das beseitigen von Problemen, die Sie nicht erkennen, Sie hatte.
InformationsquelleAutor der Antwort David Thornley
IBM Reinigen, wird dies tun, führen Sie Ihre app unter, und es wird Ihnen ein Bericht über alle Fehler (auch in anderen).
Töten Speicher-Lecks verwenden Sie UMDH - führen Sie Ihre app aus, nehmen Sie eine Momentaufnahme der Speicher, wieder zu starten, snapshot und dann ein diff-tool, um zu sehen, die Zuweisungen seit dem ersten Durchlaufen (Hinweis: Sie müssen führen Sie Ihre app einmal, und nehmen Sie snapshots so gut Sie können).
InformationsquelleAutor der Antwort gbjbaanb
Überprüfen Elektro-Zaunes ist design nur für Puffer-überlauf ! Es verlangsamt nicht den code selbst (aber verlangsamen allocation/deallocation). Es funktioniert und linux und windows.
Es funktioniert, indem ein segment mit keine lese-oder Schreibzugriff vor und nach jedem zugewiesenen Speicherplatz. Versucht, Zugriff auf diesen Speicher am Ende als ein "segmentation fault") auf UNIX-und eine Speicher-Zugriffsverletzung (oder so ähnlich) unter Windows.
InformationsquelleAutor der Antwort PierreBdR
MS:
die neuesten Microsoft SDK)
InformationsquelleAutor der Antwort Roskoto
Das problem mit /GS ist es nicht wirklich Scannen für Fehler. Es wird nur eine Warnung, die Sie nach der Tat. Wie es scheint, Sie sind auf der Suche für ein tool, das Scannen Sie Ihren bestehenden code für potentielle buffer over/under läuft.
Ein gutes Werkzeug für diese und andere Mängel, ist der Microsoft PreFAST tool.
Informationen hier
InformationsquelleAutor der Antwort JaredPar
Ich bin überrascht, niemand erwähnt Application Verifier (kostenlos!) auf Windows. Visual Leak Detector (erwähnt in einer anderen Antwort) ist absolut erstaunlich, für verfolgen viele Arten von memory-leak, aber Application Verifier ist top-Hund für die Verfolgung Speicherfehler wie Pufferüberläufe, Doppel-frees, und Puffer-use-after-free (plus viele, viele mehr).
Edit: Und es ist sehr, sehr einfach zu bedienen.
InformationsquelleAutor der Antwort Sam Harwell
Meine Stimme geht an Rational Purify. Extrem kraftvoll mit einem Preis zu entsprechen. Macht kurze Arbeit, viele Probleme und kann wirklich für sich selbst zahlen. Außerdem wird auf den meisten *nix. Nicht sicher über Windows, obwohl.
InformationsquelleAutor der Antwort Mark Kegel
Den BoundsChecker Komponente von Compuware Devpartner tut dies sehr gut in Bezug auf die dynamische Ausführung. Für statische Tests, die ich empfehlen würde pc-lint und flex-lint gekoppelt bis zu Riverblade visual lint für usability und reporting. Wenn Sie übergeben worden ist, eine neue code-Basis ist, würde ich empfehlen, beginnend mit einer statischen Analyse mit relativ lockeren Regeln, so dass Sie fangen nur die fiesen Sachen. Da die Codebasis verbessert die Sie können tightent das Regelwerk.
Wenn Sie brauchen, um dies zu tun, die auf Windows Mobile /Windows CE, check-out Entrek code klaut
Einem anderen Werkzeug zu betrachten, wenn Sie den code in das Feld AQtracedie im Grunde analysiert stürzt auf die Computer der Anwender und sendet Ihnen die details. (Nur für den Fall, dass alle boundchecking, purifcation, linting, valgrinding etc.. findet etwas)
InformationsquelleAutor der Antwort Shane MacLaughlin
Meine Firma, Semantic Designs sucht beta-Tester für eine Laufzeit Speicher-Sicherheits-checker (einschließlich Pufferüberläufe) , erkennt alle Typen von Speicher-Zugriffsverletzungen, auch diejenigen, die valgrind-und Reinigen kann. Dies ist derzeit für Windows C nur Programme, nicht C++, oder anderen Betriebssystemen.
BEARBEITEN 1. Juni 2011: Die CheckPointer-tool gegangen Produktion. Immer noch C/nur für Windows.
Mit mehreren C-Dialekten: MS Visual C++, GCC 3/4.
BEARBEITEN 5. Mai 2012: CheckPointer jetzt mit C99 einschließlich der Prüfung fordert der standard C und C99 Bibliotheken.
InformationsquelleAutor der Antwort Ira Baxter
Visual Studio hat ein /GS compiler flag fügt hinzu, dass buffer-overflow-Schutz. Gibt es irgendwelche anderen?
InformationsquelleAutor der Antwort MrValdez
Können Sie versuchen, Visual Leak Detector - ich habe es selbst, und es ist das erste, was ich empfehlen würde, für mem-leak detection.
InformationsquelleAutor der Antwort Paulius
Empfehle ich das Kostenlose "leakfinder" - tool auf der CodeProject von Jochen Kalmbach. Siehe meinen post für weitere details auf diesen thread (und die anderen Antworten) auf diese Speicherverlust Frage
InformationsquelleAutor der Antwort John Sibly
Unter Windows für memory leaks/Pufferüberläufe und andere common language runtime-Fehler-Erkennung, die Sie verwenden können:
Ich denke, Sie sind Ihren Preis Wert wenn Sie haben große Projekte, die Notwendigkeit der Bereinigung.
InformationsquelleAutor der Antwort Dan Cristoloveanu