Frage zu erzeugtem assembler code



  • TheBigW schrieb:

    D.h. doch dann in diesem Fall, das 5 Argumente auf den Stack kommen, die total zufällig belegt/undefiniert sind.

    Schau dir doch mal an, was die darauffolgenden movs machen.



  • @Ringding

    Aua, da hast du wohl recht. Wenn ich das richtig verstehe werden dort die an die Funktion übergebenen argument in die vorher mit sub 14h bereitgestellten Speicherbereiche geschrieben und somit initialisiert.

    Danke das wars, jetzt ist es in etwa klar. Sorry, ich bin halt immer davon ausgegangen, das Argumente immer mit push auf den Stack gelegt werden und hab diesen mov - Block in meiner Betrachtung weggelassen. 🙄

    @camper

    in der aufgerufenen Funktion passiert nichts besonderes, dort wird wirklich nur auf besagte 6 einzelne Argumente zugegriffen und die liegen dort genauso, wie sie in dem Move-block vor dem Funktionsaufruf initialisiert werden. Z.B. ist das 5. Argument ein WORD, was super zu

    mov     dx, [ebp+arg_10]
    mov     [ecx+10h], dx
    

    passt. Es ist also wirklich nur ein "normaler" Funktionsaufruf und mein Weltbild ist wieder gerade.
    Tatsächlich wird so die Übergabe einer struct "By Value" realisiert. Ich hab es gerade noch einmal an einem Beispiel durchgespielt.

    Danke für Eure Hilfe, das Brett vor meinem Kopf ein bisschen abzuschrauben 🙂



  • hermes schrieb:

    allokieren möchte.
    Müsste man dann nicht eigentlich nicht zum Stackpointer 0x444 addieren anstatt zu subtrahieren?

    masterofx32 schrieb:

    Nein, der Stack "wächst" negativ im Speicher also von den hohen Adressen zu den niedrigen Adressen.

    ok,man will ja nicht mehr auf den Stack packen sonder für eigene Zwecke
    Stack-Speicher benutzen.

    Warum wird dem Programm dann nicht gleich genügend Speicher reserviert?


Anmelden zum Antworten