Red zone w kodzie z userspace

0

Załóżmy, że piszę program na GNU/Linux, 64-bitowy, w asemblerze, i chcę zrobić bardzo mały i szybki program. Funkcji jest mało, głównie makra, dlatego chciałbym używać adresowania względem rsp, i tym samym oszczędzić sobie nieco na przesuwaniu wskaźnika stosu. Z tego co wyczytałem, istnieje coś takiego jak red zone, 128 bajtów poniżej rsp, których można używać bez zmniejszania rsp, i jest to wymaganie Sys V ABI. Zakładając, że w moim własnym kodzie nie psuję tej pamięci, czy coś może się stać, jeśli będę używać trochę więcej niż 128 bajtów?

1

Pomocne linki, jak to działa, dlaczego nie można używać pamięci za tym obszarem:
PDF-ABI - rozdział 3.2.2
Jak działa stos x64 - warto popatrzeć w podane linki
Red Zone - jak zaimplementowane - ważne są linki w tych postach
Dodatkowe informacje

Ogólnie jest tego pełno.
Z praktyki wiem, że nic się nie dzieje, jeśli chodzi o program assemblerowy na Linux.
ALE
Może warto wykorzystać stertę? (brk).
Albo zrobić to jak człowiek, czyli przesunąć rsp na odpowiednią odległość po wejściu w procedurę? Wtedy będziesz miał w rsp początek pamięci, a w rbp jej koniec i nic Ci nie zabroni z niej korzystać.

Lepiej nie pajacować z dziwnymi rozwiązaniami, bo często to się źle kończy.

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