L'utilisation de différences entre les deux. un., .ELF, .EXE et .COFF
Ne m'obtenez pas le mal par la recherche à la question du titre - je sais ce qu'ils sont (format pour les fichiers exécutables portables). Mais mon intérêt portée est légèrement différente
MA CONFUSION
Je suis impliqué dans la ré-hébergement/reciblage des applications qui sont à l'origine de tiers. Le problème est que, parfois, les formats de codes sont également en .elf, .COFF formats et dit encore, "Exécutable et linkable".
Je suis avant tout un utilisateur de Windows et de savoir que lorsque vous compilez et assembler votre code C/C++, vous obtenez quelque chose de similaire .o ou .obj. qui ne sont pas exécutables (eh bien, je n'ai jamais essayé de les exécuter). Mais lorsque vous remplissez la liaison statique et dynamique des bibliothèques et de la finition du bâtiment, l'exécutable s'affiche. Ma compréhension est que vous pouvez ensuite aller sur et lien exécutable ou "bash" de le tester avec une certaine forme de script si nécessaire.
Cependant, dans Linux (ou UNIX-like systèmes).o fichiers après avoir compiler et assembler le code C/C++. Et une fois que le lien est fait, l'exécutable est dans une.format de sortie (au moins dans la distribution Ubuntu de Linux). Il peut très bien être .elf dans certains autres distrib. Dans ma recherche rapide sur le web aucune des sources mentionné quelque chose au sujet .o fichiers que les fichiers exécutables.
QUESTIONS
Donc, ma question tourne dans les points suivants:
-
Quel est le vrai définitions pour les exécutables et le code de l'objet?
-
Comment est-ce que Windows et UNIX plate-forme couvre à la fois les exécutables et le code de l'objet sous le même format de fichier (.COFF, .elf).
-
Suis-je une mauvaise interprétation de "Linkable"? Mon interprétation de "Linkable" est quelque chose qui est compilé en code objet et peut ensuite être "lié" à d'autres statique/bibliothèques de liens dynamiques. Est-ce une pensée stupide?
-
Basé sur la question 1. (et peut-être 2) dois-je utiliser les tables de symboles (par exemple .UML ou .Les fichiers de MAPPAGE) avec le code de l'objet, alors? Symboles comme dans les symboles de débogage et de les utiliser lors de la ré-héberger les fichiers exécutables, les fichiers objets sur une machine différente.
Merci à l'avance pour que le droit à des coups de coude. En attendant, je vais continuer à creuser et mettre à jour la question si nécessaire.
Mise à JOUR
J'ai réussi à creuser cette de quelque part 🙁 Semble, comme beaucoup à avaler pour moi.
OriginalL'auteur ha9u63ar | 2013-06-27
Vous devez vous connecter pour publier un commentaire.
Bien, la dernière fois que j'ai compilé des trucs sur Windows, le résultat de la compilation était un
.obj
fichier, ce qui est exactement ce que son nom suggère: c'est un fichier objet. Vous avez raison en ce qu'elle n'est pas un exécutable en lui-même. Il contient le code machine qui n'a pas (encore) contiennent suffisamment d'informations pour être exécutées directement sur le CPU.De vie dans les années 90, c'est 😛 Pas de les compilateurs modernes, je suis conscient de la cible de la
a.out
format que leur format de sortie par défaut pour le code de l'objet. C'est peut-être trompeuse par défaut de GCC pour mettre le code dans un fichier appeléa.out
lorsque aucune condition explicite de nom de fichier de sortie est spécifié, mais si vous exécutez lafile
commande sura.out
, vous trouverez que c'est un ELFE de fichier. Lea.out
format est ancien et qu'il est "de facto obsolète".Vous ai déjà le lien Wikipédia pour les fichiers objets, voici la une de "Portable Executable".
Parce que le format ELF (et apparemment COFF trop) a été conçu comme si. Et pourquoi pas? C'est juste la même machine code après tout, il semble tout à fait logique d'utiliser un format de fichier lors de toutes les étapes de compilation. Tout comme on n'aime pas quand les bibliothèques dynamiques et autonomes exécutables ont un format différent. (C'est pourquoi l'ELFE est appelé " ELF - c'est un "Exécutable et Linkable Format").
Je ne sais pas. À partir de votre question, il n'est pas clair pour moi ce que vous en pensez "linkable" est. En général, cela signifie que c'est un fichier qui peut être lié contre, j'. e. une bibliothèque.
Je pense que celui-ci n'est pas lié au format de fichier exécutable utilisé. Si vous souhaitez déboguer, vous devez générer des informations de débogage n'importe quoi. Mais si vous n'avez pas besoin de le débogage, puis, vous êtes libre de les omettre, bien sûr.
Désolé mais je ne comprends pas votre 4ème question à tous. Qu'entendez-vous par "utiliser les tables de symboles avec le code de l'objet"? Utilisation dans quel sens? "avec le code de l'objet" dans quel sens?
Aussi, je "Wiki", ed avant de posté le le code de l'Objet bits. Wikipédia est parfois endommagé en raison de différentes personnes ayant des entrées différentes sur le même sujet. Je respecte stackoverflow plus d'un livre ou d'un site web parce que les utilisateurs experts tels que vous-même pouvez réellement de manière constructive critiquer un problème de portée et de partager vos connaissances/compréhension à l'égard de ceux-ci. Donc, mes questions ici, au lieu de wikipédia 🙂
J'ai mis à jour ma quatrième question, si elle fait sens aujourd'hui 🙁
I
OriginalL'auteur