Anfängerfrage



  • Moin moin,

    ich arbeite momentan einen Artikel von Phrack.org über Buffer-Overflow durch. Dabei taucht wie erwartet viel Assembler auf. Und dabei fiehl mir auch eine generelle Frage über den Stack auf.

    Den Stack kann man mittels den Frame-Pointer (%EBX / %EFP) sowie dem Stack-Pointer (%ESP) ansprechen. Einzelne Elemente können mittels MOV auf den Stack gelegt werden. Nun gibt es aber auch die Befehle PUSH und POP, mit dem man ein Element auf dem Stack legen oder holen kann.

    Meine Frage: Wird mittels PUSH und POP auf dem selben Stack, welcher mittels %ESP/%EFP addressiert ist, zugegriffen ? Oder näher gefragt, wenn ich ein Element mittels PUSH auf dem Stack lege, wird dann %esp um die Wortbreite erhöht ?

    Danke



  • Bitte ein Bit schrieb:

    Den Stack kann man mittels den Frame-Pointer (%EBX / %EFP) sowie dem Stack-Pointer (%ESP) ansprechen.

    Erstmal gibt es kein Register efp. Der Base-Pointer fuer einen Stack Frame heisst ebp. Und man kann auf den Stack wie auf jeden anderen Speicherbereich auch zugreifen, nicht nur ueber die von dir genannten Register.

    Bitte ein Bit schrieb:

    Einzelne Elemente können mittels MOV auf den Stack gelegt werden. Nun gibt es aber auch die Befehle PUSH und POP, mit dem man ein Element auf dem Stack legen oder holen kann.

    Eigentlich sind primaer nur push/pop fuer den Stack-Betrieb gedacht. Wie aber bereits gesagt, ist das auch nur ein normaler Speicherbereich.

    Bitte ein Bit schrieb:

    Meine Frage: Wird mittels PUSH und POP auf dem selben Stack, welcher mittels %ESP/%EFP addressiert ist, zugegriffen ? Oder näher gefragt, wenn ich ein Element mittels PUSH auf dem Stack lege, wird dann %esp um die Wortbreite erhöht ?

    push tut folgendes:
    esp wird je nach Operandengroesse (bei 32Bit wohl meist 4 Byte) um 2 oder 4 erniedrigt, der Stack damit um ein Element vergroessert. Dann wird an die Adresse, auf die esp jetzt zeigt, der Operand von push in den Speicher kopiert.

    pop funktioniert genau andersherum:
    Der Wert im Speicher, auf den esp zeigt, wird in den Operanden kopiert und esp anschliessend je nach Operandengroesse um 2 oder 4 erhoeht, der Stack also wieder verkleinert.



  • ich will auch mal ein "assambler" projekt haben.. find das interessant;)


Anmelden zum Antworten