
STOAT ist ein Instrument, um Eigenschaften über den Callgraph von Programmen/Bibliotheken zu gründen. Die primäre Verwendung dieses Tools besteht darin, Programme zu analysieren, die in einem Teil einer gemischten Codebasis harte Echtzeitvorgänge ausführen müssen. Dies geschieht durch die Identifizierung aller Funktionen, die transitiv von einer bekannten Stammfunktion aufgerufen werden können, die Echtzeit sein muss. Wenn eine unsichere Funktion, die für eine beliebige Zeitspanne blockieren könnte, in diesem transitiven Verschluss zu finden ist, wird ein Fehler emittiert, um anzuzeigen, wo das unsachgemäße Verhalten gefunden werden kann und welche Backtrace dafür verantwortlich ist, dass sie aufgerufen wird.
Durch die Aufrechterhaltung einer großen Codebasis in C/C ++ kann es sehr schwierig sein, zu wissen, welchen Code die anderen Routinen aufrufen. Dies wird weiter kompliziert, wenn innerhalb einer Codebasis eine gewisse Segregation vorhanden ist, die möglicherweise nicht in der Implementierung eindeutig ist. Dies wird durch die Offenheit einiger C ++ - Techniken wie virtuelle Überladung, Überladung des Bedieners, mehrerer Vererbung und implizite Conversions weiter erschwert.
LLVM 3.3+
Klang 3.3+
C ++ filt
Rubin
Graphviz Gem (optional) für Callgraph -Renderings
Juwel (optional) für die farbige Ausgabe folieren
git clone https://github.com/fundamental/stoat && cd stoat
mkdir build && cd build
cmake .. && make && make test
make install # or just run in placeInline -Sicherheitsmarker __attribute __ ((kommentieren ("Echtzeit"))
Inline-Hazard-Marker __attribute __ ((kommentieren ("Nicht-RealTime")))
Out-of-Line-Whitelisten/Blacklisten
Out-of-Line-Unterdrückungsdateien
Grafikfunktionen für sichere oder widersprüchliche Graphen
Unterstützung für die Versandbaumanalyse innerhalb librtosc
Annotieren Sie eine Root -Echtzeitfunktion mit __attribute __ ((Annotate ("Echtzeit")))
Kompilieren Sie alle Dateien mit CC = STOAT-COMPILE CXX = STOAT-COMPILE ++ oder kompilieren Sie einfach Dateien mit Clangs -emit-Llvm-Flag
Führen Sie den Stoat auf den resultierenden LLVM -IR -Dateien mit der Option -rekursiv aus
Sehen Sie sich die Widersprüche an
Wiederholen Sie die Analyse optional mit der Option -G, um die Widersprüche grafisch anzusehen
Aktualisieren Sie Ihren Code, eine Whitelist oder Ihren Unterdrückungsliste
Genießen Sie den sichereren Code
Eine explizitere Anleitung finden Sie im Tutorial unter http://log.fundamental-code.com/2014/08/15/stoat-tutorial-example.html
STOAT ist im Rahmen der GPLV3 -Lizenz erhältlich