169 похожих чатов

В общем помогите, мужики, затуп какой то Ниже, в отмеченной строчке,

мы обращаемся к [rpb-4], но при этом в этой "функции" мы не сдвигаем перед этим RSP, типо sub ESP, 4.
Не получается такого, что мы за вершину стека обращаемся?
Это кстати ассемблерный код получившийся в результате компиляции простейшей программы на плюсах, надеюсь, у вас это не запрещено
func(int):
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi # вот здесь
mov eax, DWORD PTR [rbp-4]
add eax, 10
pop rbp
ret
main:
push rbp
mov rbp, rsp
sub rsp, 16
mov edi, 5
call func(int)
mov DWORD PTR [rbp-4], eax
mov eax, 0
leave
ret

9 ответов

4 просмотра

push rbp уже сместил указатель на вершину стека. Надеюсь, правильно понял вопрос.

это x64 по всему fastcall, значит место зарезервировано в вызывающей функции. гугли что-то вроде shadow space в контексте fastcall

Илья-Грошев Автор вопроса
randomize usr
это x64 по всему fastcall, значит место зарезервир...

звучит как то, что мне нужно) благодарю

[rbp-4] - локальная переменная, чтоб ее использовать совсем не обязательно двигать фрейм, другое дело зачем переменная вообще используется - эмулирует какое то приведение типов на ЯВУ?

Илья-Грошев Автор вопроса

разве если бы это была локальная переменная То перед этой третьей строкой не было бы написано что-то вроде: sub RSP, 4 Чтобы выделить на стеке место под эту самую переменную Или я не очень понимаю, что значит "чтобы ее использовать совсем не обязательно двигать фрейм". почему не обязательно?

Илья Грошев
разве если бы это была локальная переменная То пер...

И всё-таки, мне не нравятся ответы, которые здесь дали. Дам чуть более развёрнутый. В соответствии с SystemV ABI, у нас есть 128 байтная область, после которой начинается красная зона. В данном случае у нас идёт листовой вызов, и мы уверены, что в этот промежуток памяти никто не попадёт. Поэтому мы можем использовать данную область памяти без опаски. Это частный случай. Столяров в общем случае прав, он предлагает исходить из консервативного предположения. Если бы он начал расписывать отдельные частные случаи, у него была бы книга не по программированию для начинающих, а сборник переводов документации.

Илья-Грошев Автор вопроса
Alex
screenshot И всё-таки, мне не нравятся ответы, которые здесь ...

Так столяров и пишет про частный случай: конвенции вызова в линуксе (или юниксе, или что у него там?). Это точно такая же часть конвенции, как сохранение esi/edi/ebx/ebp.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
а не подскажете вот это скрин из какой IDE ?
Iluha Companets
14
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Народ всем привет Подскажите, как включить самописные dll библиотеки в итоговую сборку Сейчас при запуске dev сервера локально формируется папка build, из которой запускается...
Андрей
4
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта