Rendre Exécutable le Fichier Binaire Elf à l'Aide de GNU objcopy
Je voudrais copier un fichier exécutable ELF fichier via:
$ objcopy -O binary myfile.elf myfile.bin
Malheureusement:
$ chmod +x myfile.bin
$ ./myfile.bin
résultats dans: impossible d'exécuter le fichier binaire
Est-il un moyen de conserver les fichiers executability?
Pourquoi demandez-vous, et quel est le but de le faire?
J'ai essayé de répondre, mais votre question ne semble pas faire sens, et qui me fait croire que vous ne comprenez pas certains concepts de base (comme le rôle d'un noyau, ce sont les syscalls, qu'est ce qu'un système d'exploitation, etc...)
J'ai essayé de répondre, mais votre question ne semble pas faire sens, et qui me fait croire que vous ne comprenez pas certains concepts de base (comme le rôle d'un noyau, ce sont les syscalls, qu'est ce qu'un système d'exploitation, etc...)
OriginalL'auteur user2985888 | 2013-11-13
Vous devez vous connecter pour publier un commentaire.
Pour être exécutable par le execve(2) syscall, un fichier doit habituellement être certains elf(5) fichier (ou un script, ou certains vieux
a.out
format). Mais voir aussi binfmt_miscVotre objcopy(1) de commande est de perdre l'essentiel de méta-données dans le fichier ELF. Peut-être vous voulez la bande(1)
Rappeler que ELF est assez complexe et polyvalent de format, il spécifie l'adresse de départ, l'interprète (ld-linux(8) l'éditeur de liens dynamiques), les différents segments du programme, etc. Toutes ces méta-données est nécessaire par le noyau pour
execve(2)
et est perdu avecobjcopy -O binary
...Lorsque vous utilisez objcopy -O binaire, vous êtes la copie uniquement les données binaires:
En particulier, vous perdez le point d'entrée et les segments de la liste donnée dans l'original en-tête ELF. Le noyau ne peut pas les deviner.
Je ne comprends pas pourquoi vous attendez le résultat de
objcopy -O binary
pour être exécutable par Linux à l'aide deexecve(2)
. Le but principal de cetteobjcopy -O binary
de commande est de faire firmware ou noyau comme stand-alone (ou autonome) binaires, et puis vous avez besoin de comprendre exactement comment ils devraient ressembler (par exemple, quel est leur point de départ, la façon dont ils sont chargés et a commencé) et vous avez sans doute aussi utiliser certains très spécifiques linker script, et bien sûr que les binaires ne contiennent aucune syscall à la le noyau linux (en particulier ne peut pas faire tout type d'entrée ou de sortie la façon dont un simple exécutable Linux n').Lire également plus sur ABIs, le x86-64 ABI, le Linux Assemblée HowTo, le Advanced Linux Programmation livre.
Vous devriez lire un bon OS manuels comme Système D'Exploitation: Trois Pièces Faciles.
x86-64 ABI
est cassé.OriginalL'auteur Basile Starynkevitch