mikrocontroller.net

Forum: PC Hard- und Software In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebildet


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Polohemd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage steht ja schon im Titel. Werden die am Ende einfach als Adressen 
übersetzt?

: Verschoben durch Moderator
Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt von der Programmiersprache, Plattform, Compiler/Interpreter und 
-Einstellungen ab.

Autor: Polohemd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo kann man sowas denn genau nachlesen? Würde mich interessieren wie das 
bei der Sprache C ist, mit GCC.

Autor: Niklas G. (erlkoenig) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Polohemd schrieb:
> Wo kann man sowas denn genau nachlesen?

In der Spezifikation des Ausgabeformats, also z.B. ELF, COFF, PE...

Polohemd schrieb:
> Würde mich interessieren wie das
> bei der Sprache C ist, mit GCC.

Der Programmcode (Instruktionen) greift auf Variablen und Sprungziele 
(Funktionen) nur über Adressen zu, d.h. der Code an sich funktioniert 
ganz ohne Text-basierte Namen. Programmdateien können aber 
Debug-Informationen und/oder Symboltabellen enthalten, welche den 
Adressen Namen geben. Der dynamische Linker nutzt die namensbasierten 
Symboltabellen um Funktionen und Variablen in dynamischen Bibliotheken 
(DLL, SO) zu finden.

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu soll so etwas im Executeable abgespeichert werden.
Namen sind - im wahrsten Sinne des Wortes - Schall und Rauch. Das gilt 
auch für Nichtraucher.
Für den Compiler ist es nur wichtig, an welcher Adresse eine Variable 
oder eine Funktion rumhängt. Mehr nicht! Es erfolgt dann ein Sprung auf 
die Adresse XYZ oder der Zugriff auf die Variable, die an der Stelle ABC 
liegt.

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vergaß:
Oft weis nicht mal der Compiler wo was ist, sondern erst der Linker.

Autor: Erwin D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian S. schrieb:
> Ich vergaß:
> Oft weis nicht mal der Compiler wo was ist, sondern erst der Linker.

...der seinerseits die Relocation-Infos vom Compiler bekommt.
Aber du hast insofern recht, die endgültigen Adressen erzeugt erst der 
Linker (mithilfe der relativen Adressen, die vom Compiler kommen).

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Polohemd schrieb:
> Wo kann man sowas denn genau nachlesen? Würde mich interessieren wie das
> bei der Sprache C ist, mit GCC.

https://www.gnu.org/software/gcc/
https://gcc.gnu.org/onlinedocs/gccint/
https://sourceware.org/binutils/docs-2.32/

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erwin D. schrieb:

> Aber du hast insofern recht, die endgültigen Adressen erzeugt erst der
> Linker (mithilfe der relativen Adressen, die vom Compiler kommen).

Nichtmal das ist immer wahr. Es kann nämlich noch eine weitere Runde 
Relokation passieren, beim Laden des Binary in den Arbeitsspeicher. Und 
das aus unterschiedlichen Grunden.

Einmal natürlich das normale dynamische Linken gegen andere Binaries. 
Und dann solche Sicherheitsfeatures wie ASLR.

Autor: georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Es kann nämlich noch eine weitere Runde
> Relokation passieren, beim Laden des Binary in den Arbeitsspeicher

Und auch das sind nur virtuelle Adressen, die wahre physikalische 
Adresse weiss nur die MMU.

Georg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.