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 Zeiletest 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.