Инструкция по вызову пишет что -нибудь в стек? Например, такие вещи, как переменные среды?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Инструкция по вызову пишет что -нибудь в стек? Например, такие вещи, как переменные среды?

Сообщение 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, либо операционная система написала что -то там), но это поведение влияет на мою программу. Я хотел бы понять, почему это происходит.
Что происходит в памяти, показано на рисунке ниже, где цвета на диаграмме представляют значения, описанные выше.

На данный момент я знаю, что среди написанных вещей есть каталог, в котором работает моя программа. Кто -нибудь может помочь мне проанализировать, что происходит?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -things-li
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»