В настоящее время я запускаю программу 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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Инструкция по вызову пишет что -нибудь в стек? Например, такие вещи, как переменные среды?
Anonymous » » в форуме C++ - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-