Die endgültigen Bilder von Compliers enthalten sowohl bin-Datei und Extended Loader-Format ELf-Datei, was ist der Unterschied zwischen den beiden, vor allem der Nutzen der ELF-Datei.Was ist der Unterschied zwischen ELF-Dateien und bin-Dateien?
Antwort
Eine Bin-Datei ist eine reine Binärdatei ohne Speicherkorrekturen oder -verlagerungen. Es ist sehr wahrscheinlich, dass sie explizite Anweisungen enthält, die an einer bestimmten Speicheradresse geladen werden. Wobei ...
ELF Dateien sind ausführbar Verknüpfbares Format, das aus einer Symbolsuche und einer verschiebbaren Tabelle besteht, dh es kann vom Kernel an jeder Speicheradresse geladen werden und automatisch werden alle verwendeten Symbole angepasst zum Offset von dieser Speicheradresse, in die es geladen wurde. Normalerweise haben ELF-Dateien eine Reihe von Abschnitten, wie 'Daten', 'Text', 'BSS', um nur einige zu nennen ... es ist in den Abschnitten, wo die Laufzeit berechnen kann, wo die Speicherreferenzen des Symbols angepasst werden dynamisch zur Laufzeit.
"mehr als wahrscheinlich, es hat explizite Anweisungen an einer bestimmten Speicheradresse geladen werden": Bedeutet dies, dass der bin-Datei-Generierungsprozess zusätzlichen Code zum Laden von Daten an bestimmte Adresse hinzugefügt? – xiaobai
Soweit ich gelernt habe, ist die bin-Datei wie das Programm von Offset 0 ausgeführt und das Datensegment ist eingebettet. Wenn das falsch ist, korrigiere mich bitte. –
@MartinKersten korrekt, bin-Dateien beginnen von Offset 0 – t0mm13b
einige Ressourcen:
- ELF für die ARM-Architektur
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf - ELF aus dem Wiki
http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
ELF-Format ist in der Regel die Standardausgabe der Zusammenstellung. wenn Sie GNU Toolketten verwenden, können Sie es in der binären Format übersetzen, indem mit objcopy, wie zum Beispiel:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
oder mit fromELF Dienstprogramm (wie zB ADS in den meisten IDEs gebaut obwohl):
fromelf -bin -o [binary-output-file] [elf-input-file]
Eine bin-Datei ist nur die Bits und Bytes, die in die ROM oder eine bestimmte Adresse gehen, von der aus Sie das Programm ausführen. Sie können diese Daten nehmen und sie direkt laden, so wie Sie sind, Sie müssen wissen, was die Basisadresse ist, da diese normalerweise nicht da ist.
Eine Elf-Datei enthält die bin-Informationen, aber es ist umgeben von vielen anderen Informationen, mögliche Debug-Informationen, Symbole, können Code von Daten innerhalb der Binärdatei unterscheiden. Erlaubt mehr als einen Teil der Binärdaten (wenn Sie eine davon in eine Bin ablegen, erhalten Sie eine große Bin-Datei mit Fülldaten, um sie auf den nächsten Block aufzufüllen). Gibt an, wie viele Binärdateien Sie haben und wie viele BSS-Daten vorhanden sind, die auf Nullen initialisiert werden sollen (Gnu-Tools haben Probleme, Bin-Dateien korrekt zu erstellen).
Das Elf-Dateiformat ist ein Standard, Arm veröffentlicht seine Erweiterungen/Variationen auf dem Standard. Ich empfehle jedem, ein Elf-Parsing-Programm zu schreiben, um zu verstehen, was da drin ist, nicht mit einer Bibliothek, es ist ziemlich einfach, nur die Informationen und Strukturen in der Spezifikation zu verwenden. Hilft Gnu-Problemen beim Erstellen von .bin-Dateien sowie beim Debuggen von Linker-Skripten und anderen Dingen, die dazu beitragen können, die Bin- oder Elf-Ausgabe zu stören.
- 1. Was ist der Unterschied zwischen `==` und `ist`?
- 2. Was ist der Unterschied zwischen:.! und: r !?
- 3. Was ist der Unterschied zwischen Difftime und '-'?
- 4. Was ist der Unterschied zwischen $ und $$?
- 5. Was ist der Unterschied zwischen Verilog! und ~?
- 6. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 7. Was ist der Unterschied zwischen/* ... */und/** ... */
- 8. Was ist der Unterschied zwischen `&` und `ref`?
- 9. Was ist der Unterschied zwischen $ (...) und `...`
- 10. Was ist der Unterschied zwischen .Equals und ==
- 11. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 12. Was ist der Unterschied zwischen + = und = +?
- 13. Was ist der Unterschied zwischen? und ? = Nil
- 14. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 15. Was ist der Unterschied zwischen:
- 16. Was ist der Unterschied zwischen der JSP und der JSTL?
- 17. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 18. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 19. Was ist der Unterschied zwischen x86 und x64 ist
- 20. Was ist der Unterschied zwischen „ist None“ und „== None“
- 21. Was ist der Unterschied zwischen DISPATCH_QUEUE_CONCURRENT und DISPATCH_QUEUE_SERIAL ist
- 22. Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
- 23. Was ist der Unterschied zwischen RewriteRule ist und umleiten 301
- 24. Was ist der Unterschied zwischen ist - (void) und + (void) Methoden
- 25. Was ist der Unterschied zwischen ist HttpResponseMessage und HttpResponseException
- 26. Was ist der Unterschied zwischen nohup und kaufmännisches Und
- 27. Was ist der Unterschied zwischen: und :: und ::: in Javascript Grammatik
- 28. Was ist der Unterschied zwischen Microsoft.AspNet.WebApi.OData und Microsoft.Data.OData und Microsoft.AspNet.OData?
- 29. Was ist der Unterschied zwischen Chisel und Lava und CLaSH?
- 30. Was ist der Unterschied zwischen SimpleNamespace und der leeren Klassendefinition?
[Dies ist, was NASM zu sagen hat] (http://www.nasm.us/doc/nasmdoc7.html#section-7.1). Nicht ARM-spezifisch, aber wahrscheinlich das gleiche Konzept. Wenn z. B. eine Datei kompiliert wird, die nur "NOP" ohne "-f" (oder "-fbin") enthält, kompiliert sie zu einem einzelnen Byte "0x90" anstelle eines 400-Byte-ELF-Containers mit "-felf32". Also nur der rohe Code, keine Container-Metadaten. NASM sagt, dass es meistens für MS-DOS .COM und [.SYS] (https://en.wikipedia.org/wiki/.sys) Dateien verwendet wird. 'section' Direktiven werden meist ignoriert und generieren nur die Ausrichtung. –
Dies ist eine Möglichkeit, in der bin-Dateien nützlich sein können: einen Boot-Sektor für die Bereitstellung von Betriebssystemen zu erstellen: http: // stackoverflow.com/a/32483545/895245 –