Schreibt die Anrufanweisung etwas auf den Stapel? Zum Beispiel Dinge wie Umgebungsvariablen?C++

Programme in C++. Entwicklerforum
Guest
 Schreibt die Anrufanweisung etwas auf den Stapel? Zum Beispiel Dinge wie Umgebungsvariablen?

Post by Guest »

Ich führe derzeit ein C ++ - Programm aus, in dem ich den Heap verwendet habe, um den Stapel zu simulieren, und die Montagesprache verwendet, um relevante Informationen (wie Speicheradressen) in Register zu platzieren, wodurch Coroutine -Switching jedoch erreicht wird.
danach jedoch danach Wenn ich auf den neuen Stack wechselte, habe ich festgestellt, dass der Stapelspeicher unerwartet geändert wird, wenn Funktionen aufgerufen werden. 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>
Der Speicher in der Nähe von RIP (0x420518) lautet wie folgt. Der grüne Bereich zeigt die Position des RIP an:

Nachdem eine Funktion aufgerufen wurde, lautet die GDB -Informationen wie folgt:
(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>
Es kann beobachtet werden, dass der RIP mehrere Bytes in Richtung der unteren Adresse bewegt hat, was normales Verhalten ist. 0x4204e8) ist wie folgt , Der grüne Bereich zeigt die Position des RIP an. Der blaue Bereich repräsentiert die vorherige Position des RIP, und der lila Bereich bedeutet, dass der Speicher geändert wurde:

Bisher ist das Verhalten normal.
Ich habe jedoch festgestellt, dass mein Stapelspeicher bei Adressen niedriger als der aktuelle RIP geändert wurde. Ich bin mir nicht ganz sicher, was dieses Verhalten verursacht (es scheint, dass entweder GCC oder das Betriebssystem dort etwas geschrieben hat), aber dieses Verhalten beeinflusst mein Programm. Ich würde gerne verstehen, warum es geschieht.
Was im Gedächtnis geschieht Hier "src =" https://i.static.net/Kalefcb8.png "/>
Ich weiß nur, dass es unter den geschriebenen Dingen das Verzeichnis gibt, in dem mein Programm ausgeführt wird. Kann mir jemand helfen, zu analysieren, was passiert?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post