• IT-Karriere:
  • Services:

mmap: Codeanalyse mit sechs Zeilen Bash

Ein typischer Fehler bei der Verwendung der C-Funktion mmap lässt sich erstaunlich einfach finden.

Ein Erfahrungsbericht von veröffentlicht am
Tücken in der Programmiersprache C gibt es viele - eine fehlerhafte Funktionsverwendung konnten wir mit einem sehr simplen Script effektiv aufspüren.
Tücken in der Programmiersprache C gibt es viele - eine fehlerhafte Funktionsverwendung konnten wir mit einem sehr simplen Script effektiv aufspüren. (Bild: Buchcover / Wikimedia Commons / Emil Engler/CC0 1.0)

Die Programmiersprache C hat nicht ohne Grund den Ruf, voller Tücken zu sein. Die Funktion mmap, die Teil des POSIX-Standards ist, ist eine davon. Mit einem sehr simplen Shellskript ist es uns gelungen, viele fehlerhafte Verwendungen der mmap-Funktion aufzuspüren.

Inhalt:
  1. mmap: Codeanalyse mit sechs Zeilen Bash
  2. Mit grep auf Fehlersuche

Die Funktion mmap ist schnell erklärt: Sie bildet eine Datei im Arbeitsspeicher ab. Nach dem Funktionsaufruf erhält man einen Pointer zu einer Speicheradresse, auf die man anschließend zugreifen und dort den Inhalt der Datei finden kann. Je nachdem mit welchen Parametern mmap aufgerufen wird, kann der Dateiinhalt auch mit Schreibzugriffen verändert werden.

Im Fehlerfall -1 statt NULL-Pointer

Der Rückgabewert von mmap ist, wenn die Funktion erfolgreich ausgeführt wird, ein Pointer. Doch mmap kann auch fehlschlagen, beispielsweise wenn zu wenig Speicher verfügbar ist oder wenn ein ungültiger Dateideskriptor übergeben wurde. Im Fehlerfall gibt mmap den Wert -1 zurück, der über die entsprechende Konstante MAP_FAILED geprüft werden sollte. Damit verhält sich mmap eher unüblich. Denn die meisten Standardfunktionen, die Pointer zurückgeben, geben im Fehlerfall einen NULL-Pointer zurück.

Das führt häufig dazu, dass Programmierer den Rückgabewert nicht korrekt prüfen. Das folgende Codebeispiel ist beispielsweise falsch:

Stellenmarkt
  1. BARMER, Wuppertal
  2. Wirtgen GmbH, Windhagen

  1. m = mmap(0, 3, PROT_READ, MAP_SHARED, fd, 0);
  2. if (!m) {
  3. printf("Error!\n");
  4. return 1;
  5. }

Hier wird im Fall eines zurückgegebenen NULL-Pointers ein Fehler ausgegeben, aber mmap gibt niemals einen derartigen Wert zurück. Korrekt müsste man den Rückgabewert auf MAP_FAILED prüfen:

  1. m = mmap(0, 3, PROT_READ, MAP_SHARED, fd, 0);
  2. if (m == MAP_FAILED) {
  3. printf("Error!\n");
  4. return 1;
  5. }

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
Mit grep auf Fehlersuche 
  1. 1
  2. 2
  3.  


Anzeige
Spiele-Angebote
  1. 19,90€
  2. 3,50€

hab (Golem.de) 19. Jun 2020

Habe jetzt ein kurzes Update im Artikel.

rubberduck09 13. Jun 2020

Merkst was? sprintf ist Teil der stdlibc, mmap() hingegen nicht. Wo soll gcc denn die...

ultim 09. Jun 2020

Also laut dir ist C nicht eine typsichere Sprache... no comment. Außerdem, du kannst in...

ultim 07. Jun 2020

Einerseits ist mmap keine "C-Funktion". Es ist eine Funktion, die von jeder Sprache mit...

gadthrawn 07. Jun 2020

Früher stand das bei mmap noch nicht in der Doku, wurde erst später eingeführt. NULL...


Folgen Sie uns
       


Radeon RX 6800 (XT) im Test mit Benchmarks

Lange hatte AMD bei Highend-Grafikkarten nichts zu melden, mit den Radeon RX 6800 (XT) kehrt die Gaming-Konkurrenz zurück.

Radeon RX 6800 (XT) im Test mit Benchmarks Video aufrufen
Summit Lite im Test: Auch Montblancs günstige Smartwatch ist zu teuer
Summit Lite im Test
Auch Montblancs "günstige" Smartwatch ist zu teuer

Montblancs Summit Lite ist eine Smartwatch für Fitnessbegeisterte, die nach echter Uhr aussieht. Den Preis halten wir trotz hervorragender Verarbeitung für zu hoch.
Ein Test von Tobias Költzsch

  1. Soziales Netzwerk Bei Facebook entsteht eine Smartwatch im Geheimen
  2. Wearable Amazfit bringt kompakte Smartwatch für 100 Euro
  3. T-Touch Connect Solar Tissots Smartwatch ab 935 Euro in Deutschland verfügbar

Börse: Was zur Hölle ist ein SPAC?
Börse
Was zur Hölle ist ein SPAC?

SPACs sind die neue Modewelle an der Börse: Firmen, die es eigentlich nicht könnten, gehen unter dem Mantel einer anderen Firma an die Börse. Golem.de hat unter den Mantel geschaut.
Eine Analyse von Achim Sawall

  1. Wallstreetbets Trade Republic entschuldigt sich für Probleme mit Gamestop
  2. Tokyo Stock Exchange Hardware-Ausfall legte Tokioter Börse lahm

Razer Huntsman V2 Analog im Test: Die Gamepad-Tastatur
Razer Huntsman V2 Analog im Test
Die Gamepad-Tastatur

Spielen mit Gamepad oder Keyboard - warum eigentlich nicht mit beidem? Mit Razers neuer Tastatur legen wir Analogsticks auf WSAD.
Ein Test von Oliver Nickel

  1. HyperX x Ducky One 2 Mini im Test Kompakt, leuchtstark, limitiert
  2. Keyboardio Atreus im Test Die Tastatur für platzbewusste Ergonomiker
  3. Nemeio Tastatur mit E-Paper-Tasten ist finanziert

    •  /