Что находится в стеке перед запуском моей программы?

В данный момент я изучаю язык ассемблера высокого уровня и играю со стеком, чтобы лучше все понять.

Замечу. что в следующей программе я могу вытолкнуть содержимое стека, даже не вставляя в него ничего 37 раз, прежде чем программа выйдет из строя.

ike1: uns32 := 1;

begin test1;

while (ike1 < 38) do
pop(eax);
stdout.put(ike1, nl);
stdout.put("ESP: ", esp, nl);
stdout.put("EAX:", eax, nl, nl);
add(1, ike1);
endwhile;
end test1;

Каждый раз, когда стек загружается в EAX, и вывод EAX каждый раз показывает случайные данные.

Во-первых, я не понимаю, как это возможно, так как я думал, что каждая программа была выделена в свое собственное пространство частной памяти. ?

В любом случае я извлекаю данные из стека ... что это будет, и повлияет ли это на другие запущенные программы?

Моя ОС - это 64-разрядная версия Windows 7.

6
задан Jason Sill 24 August 2011 в 16:55
поделиться