Frage zu Stackoverflow in chkstk



  • Hallo ich habe eine Frage zum Stackoverflow in Microsofts chkstk.asm

    ; Find next lower page and probe
    cs20:
            sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
            test    dword ptr [eax],eax     ; probe page.
            jmp     short cs10
    

    Und zwar bei

    test    dword ptr [eax],eax     ; probe page.
    

    So wie ich das sehe werden die durch die test Anweisung gesetzten Flags nicht verwendet, da ja die jmp Anweisung immer springt.
    Bei einem Stackoverflow hängt der Debugger genau in der Zeile

    test    dword ptr [eax],eax     ; probe page.
    

    Meine Vermutung ist, dass diese Anweisung für den Fall, dass ein Stack Overflow stattfinden würde durch den Zugriff auf eax dieser ausgelöst wird bevor der Stack Pointer esp umgesetzt wird.

    Ist halt meine Vermutung, ich strebe aber nach Wissen 😃
    Kann dies jemand bestätigen oder wiederlegen?

    Danke chewbo



  • Die Schleife stellt sicher, das auf dem stack allozierter Speicher (sub esp,X) vom OS auch in den Prozess gemapt wird. Dazu findet ein Zugriff (hier Lesezugriff durch TEST) auf die nächste page des stacks statt (relativ zu ESP). Wenn der stack überläuft, ist dies eine guard page. Der exception handler des OS sorgt dann dafür, das die entsprechende page gemapt wird (üblicherweise gleich mehrere) und verschiebt die guard page entsprechend.


Anmelden zum Antworten