В настоящее время я запускаю программу C ++, в которой я использовал кучу для моделирования стека и использующего языка сборки для размещения соответствующей информации (например, адресов памяти), тем самым достигнув переключения коратики.
, после того, как после Переход в новый стек, я заметил, что память стека неожиданно изменяется при вызове функций. Br />(gdb) info frame
Stack level 0, frame at 0x420520:
rip = 0x7ffff7eaf3b6 in clsn::Coroutine::CoroutineFunc (/data/workspace/DeftRPC/src/coroutine/Coroutine.cpp:16); saved rip = 0x0
called by frame at 0x420528
source language c++.
Arglist at 0x420510, args: arg=0x41ffd0
Locals at 0x420510, Previous frame's sp is 0x420520
Saved registers:
rbp at 0x420510, rip at 0x420518
< /code>
Память вблизи RIP (0x420518) заключается в следующем , Зеленая область указывает местоположение RIP:
После вызванной функции информация GDB заключается в следующем:
(gdb) info frame
Stack level 0, frame at 0x4204f0:
rip = 0x7ffff7eaf436 in clsn::Coroutine::operator() (/data/workspace/DeftRPC/src/coroutine/Coroutine.cpp:32); saved rip = 0x7ffff7eaf3c2
called by frame at 0x420520
source language c++.
Arglist at 0x4204e0, args: this=0x41ffd0
Locals at 0x4204e0, Previous frame's sp is 0x4204f0
Saved registers:
rbp at 0x4204e0, rip at 0x4204e8
< /code>
Можно заметить, что RIP переместил несколько байтов по нижнему адресу, что является нормальным поведением. 0x4204e8) выглядит следующим образом , Зеленая область указывает на местоположение разрыва , голуба Описание здесь "src =" https://i.sstatic.net/65w2kzdb.png "/>。
До сих пор все поведение нормально.
Однако я заметил, что по адресам ниже текущего разрыва, моя память моей стека была изменена. Я не совсем уверен, что вызывает такое поведение (кажется, что либо GCC, либо операционная система написала что -то там), но это поведение влияет на мою программу. Я хотел бы понять, почему это происходит.
Что происходит в памяти, показано на рисунке ниже, где цвета на диаграмме представляют значения, описанные выше.
На данный момент я знаю, что среди написанных вещей есть каталог, в котором работает моя программа. Кто -нибудь может помочь мне проанализировать, что происходит?
Подробнее здесь: https://stackoverflow.com/questions/794 ... -things-li
Инструкция по вызову пишет что -нибудь в стек? Например, такие вещи, как переменные среды? ⇐ C++
Программы на C++. Форум разработчиков
1738986997
Anonymous
В настоящее время я запускаю программу C ++, в которой я использовал кучу для моделирования стека и использующего языка сборки для размещения соответствующей информации (например, адресов памяти), тем самым достигнув переключения коратики.
, после того, как после Переход в новый стек, я заметил, что память стека неожиданно изменяется при вызове функций. Br />(gdb) info frame
Stack level 0, frame at 0x420520:
rip = 0x7ffff7eaf3b6 in clsn::Coroutine::CoroutineFunc (/data/workspace/DeftRPC/src/coroutine/Coroutine.cpp:16); saved rip = 0x0
called by frame at 0x420528
source language c++.
Arglist at 0x420510, args: arg=0x41ffd0
Locals at 0x420510, Previous frame's sp is 0x420520
Saved registers:
rbp at 0x420510, rip at 0x420518
< /code>
Память вблизи RIP (0x420518) заключается в следующем , Зеленая область указывает местоположение RIP:
После вызванной функции информация GDB заключается в следующем:
(gdb) info frame
Stack level 0, frame at 0x4204f0:
rip = 0x7ffff7eaf436 in clsn::Coroutine::operator() (/data/workspace/DeftRPC/src/coroutine/Coroutine.cpp:32); saved rip = 0x7ffff7eaf3c2
called by frame at 0x420520
source language c++.
Arglist at 0x4204e0, args: this=0x41ffd0
Locals at 0x4204e0, Previous frame's sp is 0x4204f0
Saved registers:
rbp at 0x4204e0, rip at 0x4204e8
< /code>
Можно заметить, что RIP переместил несколько байтов по нижнему адресу, что является нормальным поведением. 0x4204e8) выглядит следующим образом , Зеленая область указывает на местоположение разрыва , голуба Описание здесь "src =" https://i.sstatic.net/65w2kzdb.png "/>。
До сих пор все поведение нормально.
Однако я заметил, что по адресам ниже текущего разрыва, моя память моей стека была изменена. Я не совсем уверен, что вызывает такое поведение (кажется, что либо GCC, либо операционная система написала что -то там), но это поведение влияет на мою программу. Я хотел бы понять, почему это происходит.
Что происходит в памяти, показано на рисунке ниже, где цвета на диаграмме представляют значения, описанные выше.
На данный момент я знаю, что среди написанных вещей есть каталог, в котором работает моя программа. Кто -нибудь может помочь мне проанализировать, что происходит?
Подробнее здесь: [url]https://stackoverflow.com/questions/79422607/does-the-call-instruction-write-something-onto-the-stack-for-example-things-li[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия