In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebildet

Persönliche Seite #5893821
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.
#5893832
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.
Gast #5893850
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).
Gast #5893923
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren