Frage steht ja schon im Titel. Werden die am Ende einfach als Adressen übersetzt?
:
Verschoben durch Moderator
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
Hängt von der Programmiersprache, Plattform, Compiler/Interpreter und -Einstellungen ab.
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
Wo kann man sowas denn genau nachlesen? Würde mich interessieren wie das bei der Sprache C ist, mit GCC.
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
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.
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
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.
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
Ich vergaß: Oft weis nicht mal der Compiler wo was ist, sondern erst der Linker.
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
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).
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
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/
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
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.
Re: In welche Form werden die Namen von Datenobjekten/Funktionen in einer ausführbaren Datei abgebil
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.