ramka na stosie

0

Mam mianowicie taki problem:

Na przykład funkcja:

int function(int a, int b)
{
char buffer[10];
int number;
...
}

powinna mieć ramkę na stosie w takiej kolejności:

-----adresy niskie
-------------------
number
------------------
buffer
------------------
ESP
------------------
EIP
------------------
a
------------------
b
------------------
----adresy wysokie

ale mi wychodzi taka kolejność:

-----adresy niskie
-------------------
buffer
------------------
number
------------------
ESP
------------------
EIP
------------------
a
------------------
b
------------------
----adresy wysokie

Mam system Gentoo. Na Ubuntu ramka stosu odkłada się poprawnie.

0

powinna mieć ramkę na stosie w takiej kolejności:
A kto tak ci powiedział ? Standard języka tego nie określa więc kolejność może być dowolna. Jeśli dodamy do tego optymalizację to wiele zmiennych może nie być wcale na stosie.

0

Użyj anonimowej struktury, nikt nie daje 100% gwarancji, że pojedyncze obiekty będą upchane w tej kolejności, w jakiej są w kodzie. Powinno tak być ale nie musi.

int main() {
    struct {
        char buffer[10];
        int number;
    } zuo;
    zuo.number = 666;
}

Swoją drogą można wiedzieć w jakim celu tego potrzebujesz? Ostatni raz widziałem faktyczną konieczność zadbania o ułożenie danych na stosie u gościa piszącego exploitme, formę crackme do psucia w wiadomy sposób.

0

Uczę się z książki w której poruszana jest tematyka przepełniania stosu. I według książki ramka stosu ma konkretną kolejność. U mnie ta kolejność nie występuje na Genoo, natomiast na Ubuntuu występuje.
Nie chodzi mi tu teraz o exploity bo to rozumiem tylko czego ten program na jednym systemie działa bez zarzutów, a na drugim zawsze daje taką samą ramkę :-/

0

U mnie ta kolejność nie występuje na Genoo, natomiast na Ubuntuu występuje.
I to jest prawidłowe. NIE MA GWARANCJI KOLEJNOŚCI. Książeczka jest zapewne dość stara.

0

rownie dobrze na moim laptopie ta ramka moze wygladac:

-----adresy niskie
b
ESP
a
number
buffer
EIP
----adresy wysokie

to, jak ramka jest ulozona, to juz kwestia i wymysl kompilatora. to ze ramka jest taka-a-nie-inna wynika z tego ze Tworcom danego kompilatora sie pomyslalo ze w ten sposob bedzie im pozniej te ramke latwiej sprawdzic/skopiowac/usunac/podmienic/blah

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