Buffer Overflow

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Buffer Overflow

    Hallo,

    vll kann mir hier ja jemand helfen. Ich habe eine Aufgabe über Buffer Overflows in einem einfachen C-Programm zu lösen. Leider kann ich kein C (nur Java). Also hier erstmal das Programm:

    Quellcode

    1. void example ( char ∗ buf ) {
    2. char l o c a l b u f [ 3 2 ] ;
    3. s t rc p y ( l o c a l b u f , buf ) ;
    4. p r i n t f ( ”Copied to b u f f e r : %s \ n ” , l o c a l b u f ) ;
    5. }


    1. Frage: Was bedeutet das Sternchen bei dem übergebenen char (char ∗ buf)? Wird hier ein char übergeben?
    2. Wird zuerst die Variable "buf" oder erst die Rücksprungadresse (EIP) und der EBP auf den stack gelegt?

    Die Lösung die ich dafür habe sieht ungefähr so aus.. Aber ich frag mich ob die korrekt ist? Warum werden für "char" 4 Byte reserviert? Müsste es nicht 1 sein? Und warum liegt "char" vor "EIP" und "EBP" auf dem Stack?
    [Blockierte Grafik: http://img64.imageshack.us/img64/5928/49362634.jpg]
  • Hi,

    der Stern ist ein Zeiger. Am schnellsten geht es wenn du mal nach "C Pointer" oder eben "C Zeiger" im Internet schaust.

    Ich hätte es auch so wie in deiner Lösung gemacht.
    Das localbuf als erstes registriert wird liegt meiner Meinung nach daran, das das in diesem Fall die Rücksprungadresse ist. Also der erste Befehl der Funktion ist.
    Abgesehen von der Ausnahme wird sonst erst der EBP- und EIP Register als erstes gesichert und dann erst lokale Variablen.


    Falls es nicht noch kommt, könntest du auf Alternativen wie strncpy oder strlcpy zurückgreifen.