GCC Parameter Verständnisfrage

  • Allgemein

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    GCC Parameter Verständnisfrage

    Hey Community,
    derzeit beschäftige ich mich nebenbei noch mit C bzw. mit Exploiting. Meine Aufgabe ist es, verschiedene Parameter zu erklären, wobei es dann leider schon scheitert.
    Ich habe

    Quellcode

    1. -mpreferred-stack-boundary=2
    gegeben und soll diesen erklären. Jegliche Ergebnisse von Google bringen mich irgendwie nicht weiter.
    Oftmals wird in der Erklärung von einem "Stack Boundary" gesprochen, welcher 2^2 Bytes groß sei. Nun weiß ich aber nicht was ein "Stack-Boundary" ist. Jegliche Überstzungsversuche
    bringen mich nur zu folgendem Gedankengang, welchen ich mittels Disassembler nicht bestätigen kann: Jede "Zeile" auf dem Stack darf maximal 2^2 Bytes groß sein.
    Doch wenn ich anstatt 2, den Wert 4 im Parameter setze, ist jede Zeile auf dem Stack immernoch 4 Bytes groß. Ich bin am verzweifeln, ich verstehe diesen Parameter einfach nicht.
    Kennt sich jemand damit aus und würde mir freundlicherweise erklären, was genau dieser Parameter macht?

    LG

    s6fregne

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    der Programmcode ist ja nicht aufm Stack, deshalb ist das mit "Zeile" eher etwas blöd, es geht halt um die Daten die du auf den Stack pushst und manche Funktionien popen halt die Daten vom Stack und verwenden den Stack somit für die Übergabeparameter, bei der Boundary geht es soweit ich das Verstanden habe dann um das Alignment, weshalb du aufm Stack für 64 Bit nicht 2 verwenden kannst, da 4 Bytes einfach nur für 32 Bit reichen. Eine Funktion für die ich aktuell nicht sonderlich viel Sinn sehe, weil ich da dem Compiler mehr vertraue...
    Grad für SSE brauchst z.B. 64Bit aligned und wenn was anderes einstellst boom abkack :D
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    würde denken nicht zufällig, sondern 0, da der push so oder so ne schreib operation ist(sicher bin ich mir aber nicht).
    Es funktioniert auch bei nem 64 Bit System, aber dann nur mit ner 32 Bit Assembly...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---