Zum Inhalt springen

Speicherverwaltung


e.full

Empfohlene Beiträge

hallo habe da mal wieder eine frage.

und zwar habe ich folgenden stackausschnitt, ich soll annehmen dass der stack in richtung niedriger adressen wächst, und dass die aufrufkonvention folgendes stacklayout vorschreibt:

Stackinhalt Beispiel(ab Adresse 0xffffd6b0)

Funktionsparameter : 0x10022009

Rücksprungadresse in die aufrufende Funktion: 0x080483d2

zeiger auf den vorigen stackframe: 0xffffd6b8

lokale variablen: 0x09122008

ich soll jetzt die rücksprungadressen die der stack enthält, kann mir bitte einer hierbei helfen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zuerst mal zu Deiner Fragestellung:

Rücksprungadresse in die aufrufende Funktion: 0x080483d2

lokale variablen: 0x09122008

ich soll jetzt die rücksprungadressen die der stack enthält, kann mir bitte einer hierbei helfen

-> Wo ist denn hier nun die Frage? Falls Du die Rücksprungadresse wissen willst, die hast Du ja schon oben stehen?

Vermutlich willst Du wissen, wie Du vom Stackframe auf alle Rücksprungadressen schliessen kannst`. Ich gehe einfach mal von dieser Fragestellung aus:

ich soll jetzt die rücksprungadressen die der stack enthält, kann mir bitte einer hierbei helfen

Das ist nicht ganz so einfach zu sagen, was Du wissen willst.

Auf dem fixen Stack werden vom Prozessor vom Ende (höchste Adresse) Richtung Anfang (niedriegste Adresse) Daten wie Prozessorregister, Rücksprungadresse und evtl. Übergabeparameter abgelegt. Wie diese abgelegt werden, ist durch ein paar Standard-Aufrufkonventionen definiert. Es gibt den Fastcall, den Standardcall, die C-Declaration oder nach Wunsch auch einen "nackten" call, den man selber definieren kann. Es müssen also nicht immer alle Variablen abgelegt werden, sondern durch Compileroptimierungen ist es möglich, dass einige Variablen in Registern übergeben werden und nicht über den Stack. Wieviel bei jeder aufgerufenen Funktion wieder "zurückgerollt" werden muss, weiss nur die Funktion selbst und macht dies beim Rücksprung.

Ich gehe mal von der CDeclaration aus, dann muss in der höchsten vorhandenen Adresse (nach Aufaddieren der Parameter) die Rücksprungadresse stehen. Diese einzeln abzufragen ist praktisch nicht möglich, weil diese bei Verschachtelungen einfach hintereinander abgelegt werden. Die einzige zuverlässige Adresse, die Du erhalten kannst, ist der start des Stacks, welcher bei Intel-Prozessoren im Register EBP (das ist der Framezeiger) steht. Alles was danach kommt, ist ein verfolgen der Stackaufrufe durch das Programm, was bei jedem Ablauf unterschiedlich sein kann.

Ein Auslesen aller Rücksprungadressen ist also nicht ohne Zusatzinformationen möglich. Es geht eigentlich nur, wenn Du einen Debugger im Trace-Mode die Adressen tracken und sammeln lässt. In manchen Sprachen gibt es Diagnose-Routinen, die anstatt des normalen Calls aufgerufen werden und diese Aufgabe dann übernehmen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja die aufgabe kommt mir auch merkwürdig vor. das habe ich mir auch gedacht. das war so in einer tabelle abgebildet.und die aufgabe lautet nennen sie die rücksprungadressen die der stack enthält. dann kommt noch die frage: nennen sie die parameter die bei den funktionsaufrufen übergeben werden. und drittens welchen fehler hat der programmierer vermutlich gemacht. ich verstehe auch nicht den zusammenhang?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...