TrapC ist eine neue, auf Cybersicherheit spezialisierte Variante der Programmiersprache C. Sie zielt darauf ab, die in C und C++ gängigen Speicherprobleme und Pufferüberläufe zu verhindern.
Anzeige
Der von Robin Rowe entwickelte TrapC-Compiler soll Ende des Jahres 2025 als Open-Source-Software verfügbar sein und ermöglicht es, C und TrapC-Code parallel zu verwenden. Zudem soll TrapC auch zu einfachem C++-Code kompatibel sein, zum Beispiel:
// hello.cpp #include <iostream> int main() { std::cout << "hello world" << std::endl; return 0; }Rowe hat sein Projekt auf dem letzten ISO-C-Meeting Ende Februar in Graz vorgestellt. Der TrapC-Compiler setzt auf speichersichere Zeiger, was Speicherlecks und Speicherüberläufe verhindern soll. Parallel dazu greifen Sicherheitsfunktionen, die in C fehlen, wie Konstruktoren und Destruktoren aus C++. TrapC entfernt zudem unsichere Schlüsselwörter wie goto und union und fügt neue Schlüsselwörter wie trap und alias hinzu. In einem Whitepaper nennt Robin Rowe ein Beispiel dafür, wie TrapC einem Pufferüberlauf entgegenwirkt: ein User-Dialog, in dem Anwender ihre Namen eingeben. In C geschrieben, sieht die entsprechende Code-Passage so aus:
// gets_input.h (CWE–242, CWE–120, CWE-77) #include <stdio.h> inline void gets_input() { char buffer[24]; printf("Please enter your name and press <Enter>\n"); gets(buffer);// TrapC will terminate on overrun! printf("%s",buffer); }Geben Anwenderinnen und Anwender mehr als 24 Zeichen ein, provoziert das einen Pufferüberlauf und öffnet einen Exploit für Angreifende. In C oder C++ wird dieser Fehler nicht unbedingt registriert, was zu einem Crash führt.
Dagegen kommt es mit TrapC nicht zu einem Absturz. Im Fall eines Speicherüberlaufs oder anderen Fehlern wie etwa einer Teilung durch Null beendet der TrapC-Compiler das Programm und wirft eine entsprechende Fehlermeldung aus, es sei denn, es existiert eine passende Fehlerroutine.
      
    
So überschneidet sich TrapC mit C und C++
(Bild: Robin Rowe)
Mit dem Stichwort trap führt TrapC ein eigenes Error-Handling ein. Ein Beispiel:
// trap_test.tc #include "gets_input.h" int main() { gets_input(); trap { puts("ERROR: invalid input"); return 1; } return 0; }Dabei muss die aufrufende Funktion die Fehler behandeln, denn sie lassen sich nicht wie bei C++-Exceptions weiterreichen. trap.return bietet jedoch eine ähnliche Funktion wie throw. Weitere Details der Sprache finden sich im Whitepaper.
(
				
						
Kommentare