Assembler x64 schreiben



  • Hi Leute

    Könnte mir jemand sagen wie man bei x64 (visual studio) Stack reserviert?
    In manchen Tutorials wird gesagt man solle eine ungerade Zahl reservieren (für lokale Variablen), etwa so sub rsp 28h um den Stack auf 16 bit auszurichten. In anderen ist es eine gerade Zahl. Wieder andere sagen man muss 16 bit mehr reservieren als die Variablen Platz einnehmen, warum ? Könnte mir jemand ganz genau erklären wie das mit dem Stack funktioniert? Bitte nur die antworten die es wirklich absolut genau wissen, so ungefähr weiss ich das auch.



  • Hast Du Dich schon bei Microsoft schlau gemacht?

    https://msdn.microsoft.com/library/ew5tede7.aspx

    viele grüße
    ralph



  • Hallo,

    Der C Compiler (x64) macht das so:

    Die Funktion mit den meisten Parametern wird "gemerkt" und die Anzahl
    der Parameter * 8 + 8 (für die Rücksprungadresse) = Stackbedarf.

    Du kannst aber auch pauschal

    sub rsp, 512
    

    nutzen.

    Man reserviert immer / 8 teilbare Werte, keine ungeraden!!!
    Da die ersten 4 Parameter in Registern übergeben werden sind mind. 40d (28h)
    zu reservieren. 4*8+8 für den Call!

    Schau dir mal den asm Output von C an.

    Nicky


Log in to reply