buffer auf dem stack oder heap



  • Hi Leuts 🙂

    Bissher hab ich einfach ein datensegment angelegt mit buffern für schreib und
    lesezugriffe.

    Nun möchte ich das aber im c style machen: daher in einer function soll
    ein Buffer auf dem stack gelegt werden. Bevor die Funktion beendet wird, soll
    dieser wider abgebaut werden.

    daher meine Fragen:
    1.) wie Lege ich ein Buffer auf den stack an?
    2.) wie lege ich einen Buffer auf dem heap an?

    Für eure hilfe (evtl. einen codefetzen) wäre ich sehr dankbar 🙂

    Gruss 🙂



  • Also das mit dem Buffer auf den stack legen hat sich nun erledigt
    => einfach esp um die gewünschte Bufferlänge ernidriegen
    (bei x86 stach nach unten) und nachher wieder um diese Grösse erhöhen.

    doch eine Frage bleibt noch offen: Wie Reserviere ich Platz auf dem heap?



  • linu(x)bie schrieb:

    doch eine Frage bleibt noch offen: Wie Reserviere ich Platz auf dem heap?

    der heap ist 'ne datenstruktur die normalerweise nicht in den prozessor eingebaut ist (wie der stack), sondern 'besteht' nur aus software. du musst also die entsprechenden funktionen aufrufen (malloc usw.)



  • @net

    Vielen Dank für Deine Antwort 🙂

    Wenn das so ist, wieso schreibt oft die Fachliteratur:

    Der stack wächst dem heap entgegen...

    Und wie reserviere ich dynamisch speicher wie es die C-funktion malloc() tut
    in assembler? Ich meine schliesslich ist das bei C zur laufzeit möglich.
    Wie ist den das entsprechend in assembler?

    Gruss 🙂



  • linu(x)bie schrieb:

    Wenn das so ist, wieso schreibt oft die Fachliteratur:

    Der stack wächst dem heap entgegen...

    das ist blödsinn. die anordnung von stacks und heaps im speicher ist willkürlich und vom os bzw. der platform abhängig.

    linu(x)bie schrieb:

    Und wie reserviere ich dynamisch speicher wie es die C-funktion malloc() tut
    in assembler? Ich meine schliesslich ist das bei C zur laufzeit möglich.
    Wie ist den das entsprechend in assembler?

    du könntest z.b. die c-library mit den heap-routinen dazulinken um malloc und free aufrufen zu können. eventuell bietet dein os auch schon heaps. oder das hier: http://www.keil.com/download/docs/alloc166.zip.asp



  • das ist blödsinn. die anordnung von stacks und heaps im speicher ist willkürlich und vom os bzw. der platform abhängig.

    'Normalerweise'( 🙂 ) beginnt der Stack am _Ende_ des Adressraums des Speichers. Dann ist die Aussage

    Der stack wächst dem heap entgegen...

    trivial.

    Z.B. hier:
    http://www.heise.de/security/artikel/37958

    Gruß


Anmelden zum Antworten