"Prześledź dziąłanie następującego programu..." - Analiza stanu pamięci.

0

Witam wszystkich.

Otóż mam mały problem związany z nauką "pewnych rzeczy na studiach", a mianowicie z czymś takim...:

http://imageshack.us/a/img89/3189/001qw.png
http://imageshack.us/a/img715/8245/002ei.png

Generalnie w miarę rozumiem co i jak się dzieje w tym programie oraz dlaczego dane zmienne nabierają finalnie takie wartości, a nie inne...

Problem w zapisie tego... Otóż chodzi o to by napisać stan pamięci po wykonaniu każdej linii, z tym że nie bardzo wiem dokładnie kiedy i gdzie zmienne są alokowane w pamięci. Spotkaliście się w ogóle z zadaniami tego typu? Nie mogę nigdzie znaleźć podobnych w internecie, a u nas to z połowa egzaminu ze "Wstępu do programowania" na tym polega...

Każda pomoc się przyda przed egzaminem poprawkowym, który jest lada moment...
Pozdrawiam.

0

nie bardzo wiem dokładnie kiedy i gdzie zmienne są alokowane w pamięci.

Najprawdopodobniej są alokowane na stosie na samym początku funkcji.
Zobacz sobie output z assemblera.

Btw, a=--a to nie jest przypadkiem undefined behavior?

0

@Patryk27 to akurat chyba nie bo i czemu? Najpierw musi wykonać się operacja po prawej stronie która zwraca wiadomy wynik, a potem wykona sie przypisanie. Problem byłby jakbyś miał tam jakieś dodatkowe operacje --a-- albo -= czy coś.

0

Musisz przeanalizować stack frame maina. Odpal gdb(musisz oczywiście mieć na komie pakiet gcc i odpowiedniio ustawioną zmienną środowiskową PATCH) z konsoli i wpisz następujące polecenia:

gdb -q nazwa_programu
break main
set disassembly intel
run
x/20i //wypisujemy 20 instrukcji assemblera

Musimy podejrzeć o ile bajtów został przesunięty esp. Później od ebp odejmujemy liczbę o jaką zosatał przesunięty esp(widzimy to ze instrukcji assemblera) i badamy ten cały obszar za pomoca polecenia examine

1 użytkowników online, w tym zalogowanych: 0, gości: 1