Je suis nouveau sur Linux. J'essaie de compiler mon programme c dans un fichier elf afin de pouvoir utiliser read elf pour trouver des informations sur la fonction, etc. Chaque fois que j'essaye d'utiliser le readelf avec le fichier de sortie (après avoir compilé mon programme c), cela signifie que ce n'est pas un fichier elf. Alors, comment compiler mon programme C pour le compiler dans un fichier elf. Ou peut-être que je ne comprends pas? J'utilise gcc pour compiler
Voici ma ligne de commande pour la compilation:
gcc -Wall main.c a.out
et ensuite readelf -a a
Ok, je l'ai donc compilé avec gcc -o test -Wall main.c et il a compilé sans erreur et ensuite fait le readelf avec: readelf -a test et il dit toujours que ce n’est pas un elfe et quand je fais un fichier, il arrive avec: PE32 + exécutable (console) x86-64, pour MS Windows , alors qu'est-ce qui se passe ici?
Réponses:
4 pour la réponse № 1Essayons:
gcc -Wall test.c a.out
gcc: error: a.out: No such file or directory
c’est un indice fort que quelque chose a mal tourné ... gcc
ne produit pas a.out
fichier (et si le a.out
Le fichier existe déjà, le passer comme ceci indique à gcc d'essayer de le compiler, et comme ce n'est pas un fichier texte / c valide, vous obtiendrez a.out: file not recognized: File truncated
et ça finira mal aussi).
Vous devez spécifier la sortie exécutable avec -o
changer (si vous avez besoin a.out
sur unix / linux, juste don "t taper)
gcc -Wall test.c
créera a.out
executable (.elf) si aucune erreur de compilation n’est trouvée.
gcc -o myexe -Wall test.c
permet de changer le nom de l'exécutable.
EDIT: vous êtes ne pas sous Linux mais Cygwin (sur les fenêtres). Cela ne rend pas la réponse ci-dessus invalide, mais Cygwin crée des les fenêtres exécutables, pas .elf
des dossiers. Vous ne pouvez pas créer .elf
fichiers en utilisant gcc
il (sauf si vous obtenez un compilateur croisé Windows -> Linux s'il existe)
readelf
La commande est présente dans la distribution Cygwin, mais ne lira pas les programmes compilés avec gcc
. Il peut analyser .elf
fichiers de Linux ou d’autres systèmes utilisant ce format exécutable, mais certainement pas le format Windows PE.