Jede Hand-on-Übung zu verstehen, wie ein Programm in den Speicher geladen und erhalten ausgeführt

StackOverflow https://stackoverflow.com/questions/1210522

  •  06-07-2019
  •  | 
  •  

Frage

Ich bin gespannt auf die Dinge, die vor Haupt passiert () aufgerufen wird, so wie Last die ausführbare Datei in dem Speicher, dynamische Belastung der gemeinsam genutzten Bibliothek. Haben Sie irgendwelche Vorschläge, wie diese Dinge von einer Hand auf Übung zu verstehen?

Die Werkzeuge amd Dinge, die ich kenne, und jetzt mit umfassen:

  • strace
  • disassemble
  • readelf
  • / proc / pid / map

NOTES: Ich weiß, dass die großen Buch Linker und Lader , aber Hände- kann lehrt auf Übungs mir besser als das Buch zu lesen.

War es hilfreich?

Lösung

  • Die ld.so Manpage Dokumente mehrere Umgebungsvariablen, die entweder eingestellt werden können den dynamischen Verknüpfungsprozess optimieren oder zusätzliche Details liefern.

z.

LD_DEBUG=all cat </dev/null
  • Sie können ganz einfach den Quellcode für jedes erhalten und jedes Stück beteiligt - Linux-Kernel, dynamische Linker, C-Bibliothek, Startcode (crt0.o oder ähnliches). Man könnte beginnen, indem Sie den Code studieren und experimentelle Änderungen vornehmen.

Andere Tipps

Wenn Sie überprüfen wollen, wie ein binäres verpackt ist und die verschiedenen Teile davon Ich denke, das beste Programm ist da draußen objdump .

Wählen Sie, was ausführbar und zu tun:


objdump -S <executable>  > myfile.S

Eine weitere gute Übung sein:

  • Erstellt ein Programm, das eine externe Bibliothek
  • verwenden
  • Kompilieren Sie das Programm mit statischer Verknüpfung
  • Führen Sie das Programm
  • Benennen Sie die Bibliotheksdatei und überprüfen, ob das Programm läuft
  • Kompilieren Sie das Programm mit gemeinsam genutzten Bibliothek
  • Benennen Sie die Bibliothek und prüfen Sie, ob das Programm läuft

Das wird einige Ihrer Fragen beantworten, was unter dem Vorhang geschieht und wie.

ich zwei interessante weiterführende Links gefunden (zumindest für Linux) und ein wenig kürzer als die erwähnten Buch (Linkers und Lader)

Als ich in der Schule eine OS-Klasse nahm, haben wir Nachos . Es ist kein Betriebssystem per se , sondern eine Art Betriebssystem „Simulation“, die im User-Space läuft. Es ist in C ++ geschrieben und Sie können Cross-kompilieren ausführbare Dateien, die Nachos kann dann und führt laden. Sie können mit der Systemaufruf-Schnittstelle und im allgemeinen Experiment so viel wie Sie spielen, wie von mit dem Code twiddling.

Wir liefen sie in einem Solaris-Labor, und ich hatte ein paar Probleme es aufstehen und auf Linux auf meinem persönlichen Computer ausgeführt wird, aber es könnte ein lustiges Spielzeug, wenn Sie bereit sind, in einigen Code zu graben.

Ich weiß, dass es wahrscheinlich viel für das, was Sie suchen, aber Ihre eigenen Assembler und Linker zu schreiben wäre sehr lehrreich. Ich habe es getan, als ich im College war und war begeistert. Es dauerte vielleicht 120 Stunden Arbeit, wie ich mich erinnere, um es für die grundlegenden Dinge arbeiten ich es tun wollte. Ich denke, das Projekt mehr als alles andere hat mich sicher, dass eine Karriere in der Programmierung für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top