V rámci Visual Studio masm:
mov ecx,270
l1: pop eax
loop l1
push eax
Smyslem tohoto kodexu je, aby zjistil, jestli tam je a co je počáteční hodnota ESP
. Snažím se pop
ihned po spuštění programu, a experiment, který po kolika pop
a push
vytvoří nějaké čtení paměti související chyba. Výsledkem experimentu je nějak nestabilní, a to i s přesně stejné číslo ecx
. Obecně platí, že větší než 512 bude vždy(v mé omezené časy experimentů) vytvořit chybu, méně než 128 je vždy "bezpečný", a hodnoty kolem 250 až 400 bude někdy způsobit chyby. Zdá se, že neexistuje žádná výchozí hodnota pro ESP. Pokud tam je, můj experiment by měl vytvořit nějaký stabilní výsledek.
OK jsem spustit 127 pro dalších 10 krát, a teď je začít k havárii. Snažím se experimentovat více čísel.
Řekněme, že pomocí Windows-x86, na průměrné okamžiku spuštění programu, jako je můj experiment programu. Jak Windows určit, jaký bude počáteční hodnota esp
? Je to obtížné určit(protože jsem si dokázal představit, jednoduše řečeno poslední adresa zásobníku segement v esp
)? Je tam běžná praxe, jak na to?