You are not logged in.

  • Login

1

Friday, January 29th 2010, 1:04am

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:

C/C++ Quellcode

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


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?

2

Friday, January 29th 2010, 8:36am

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.

Similar threads

Social bookmarks