Online: 0x080 (128)
haker.iиfø  — Etyczny hacking_
Spreading knowledge like a virus.

 haker.info Baza wiedzy

Asembler x86/x64
  • Stos programu


W programowaniu określenia stos używa się na strukturę danych typu LIFO (Last In – First Out). Element, który jest odłożony jako ostatni zostanie odczytany w pierwszej kolejności.

Język Asembler posiada dwie główne instrukcje, których przeważnie używa się do odkładania wartości na stos oraz ich zdejmowania. Rozkaz PUSH zmniejsza wartość wskaźnika stosu i odkłada wartość. Natomiast rozkaz POP zwiększa wartość wskaźnika stosu i zdejmuje ostatnio odłożoną wartość. Wskaźnik stosu to wcześniej przedstawiony rejestr o nazwie RSP. W prostych słowach: stos programu jest obszarem pamięci do przechowywania różnych danych związanych często z wywołaniami funkcji.

Podstawowe elementy jakie znajdziemy na stosie programu w architekturze x64 to m.in.:

  • argumenty funkcji odłożone na stos,
  • miejsce na argumenty przekazywane przez rejestry RCX, RDX, R8 oraz R9,
  • adres powrotu odłożony przez instrukcję CALL.

Wspomnę tutaj przy okazji o pojęciu, które można spotkać w różnych miejscach i warto je znać. Chodzi o ramkę stosu (ang. stack frame). Ramka stosu to struktura umieszczona na stosie, która przechowuje dane związane z wywołaniem określonego podprogramu (funkcji), czyli wcześniej wymienione argumenty, adres powrotu itd.

Ktoś może zapytać dlaczego na stosie znajduje się adres powrotny, miejsca na argumenty przekazywane przez cztery rejestry (RCX, RDX, R8 oraz R9) oraz miejsce na dodatkowe argumenty? Związane jest to z cechami architektury x64 oraz konwencji wywołań funkcji (tutaj Microsoft x64). Zatem ramka i stos nie zawsze muszą wyglądać i być używane tak samo.

stack x64

Dawid Farbaniec

Wykaz literatury (bibliografia)

  • Advanced Micro Devices Inc., 2017 – AMD64 Architecture Programmer's Manual
  • Intel Corporation, 2019 – Intel 64 and IA-32 Architectures Software Developer's Manual
  • Randall Hyde, 2010 – Asembler. Sztuka programowania. Wydanie II, ISBN: 9788324628544
Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Korzystając z zasobów witryny haker.info oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.