Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Speicherverwaltung

Empfohlene Antworten

Veröffentlicht

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

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.

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?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.