Registerinhalt beim Start eines Asm-Programms unter Win32



  • Moin, Moin...

    Kann mir wohl jemand sagen, welche Werte in den Registern stehen, wenn ein Assembler-Programm unter Windows gestartet wird? In eax scheint eine Kopie von eip abgelegt zu sein. Gibt es andere wichtige Werte?

    Danke im voraus...



  • Ist schwer definierbar, weil Windows-Programme zuerst eine Win32-Startfunktion ausführen (zumindest unter Win NT/2k/XP) die zum Kernel gehört und dann den Usercode starten. Was in den Registern stehen bleibt ist halt iene Frage dieses Codes und da der sich von Version zu Version ändern kann (und von Service Pack zu Service Pack)

    Also ich würde davon ausgehen, dass es undefiniert ist...



  • Ich weiß nicht ob dich das interessiert, aber auf dem Stack liegt auf jeden Fall die Rücksprungadresse, die irgendwo zum Image von Kernel32.dll führt (sollte in den Code von CreateProcess führen). Daher kann man auch eine Win32 Anwendung machen, die nur ein RET ausführt. Desweiteren liegt bei FS:[0] die Adresse des SEH-handlers und die Adresse vom nächsten SEH-handler (ist so ne kleine verkettete Liste). Da weiß ich aber nicht mehr 100%-ig wie das war. Unter MS-DOS konnte man mit Sicherheit davon ausgehen, dass der höcherwertige Teil von BP mit 09 belegt war. Deshalb ging auch das kleinste Hello World:
    [/code]
    xchg ax,bp
    mov dx,offset hello_string
    int 21h
    ret
    [/code]
    Die Registerinhalte sind von Windowsversion zu Windowsversion unterschiedlich. Ich würde erst gar nicht anfangen mich da auf irgendetwas zu verlassen.


Log in to reply