Jestem nowy w Linuksie. Próbuję skompilować mój program c do pliku elf, dzięki czemu mogę użyć odczytu elf do znalezienia informacji o funkcji itp. Ilekroć próbuję użyć readelf z plikiem wyjściowym (po skompilowaniu mojego programu c), mówi, że nie jest to plik elf. Jak więc skompilować mój program C, aby skompilował się w plik elf. A może nie rozumiem? Używam gcc do kompilacji
Oto moja linia poleceń do kompilacji:
gcc -Wall main.c a.out
a następnie przeczytaj ponownie -a a
Ok, więc skompilowałem go z gcc -o test -Wall main.c i skompilował bez błędów, a następnie wykonał readelf za pomocą: readelf -a test i nadal mówi, że nie jest elfem i kiedy robię plik, wymyśla: PE32 + plik wykonywalny (konsola) x86-64, dla MS Windows , więc co tu się dzieje?
Odpowiedzi:
4 dla odpowiedzi № 1Spróbujmy:
gcc -Wall test.c a.out
gcc: error: a.out: No such file or directory
to silna wskazówka, że coś poszło nie tak ... gcc
nie produkuje żadnych a.out
plik (i jeśli a.out
plik już istnieje, przekazanie go w ten sposób powoduje, że gcc próbuje go skompilować, a ponieważ nie jest to prawidłowy plik tekstowy / c, otrzymasz a.out: file not recognized: File truncated
i skończy się źle również).
Musisz określić wykonywalny wynik za pomocą -o
przełącznik (jeśli potrzebujesz a.out
na unix / linux, tylko don "t Wpisz to)
gcc -Wall test.c
stworzy a.out
plik wykonywalny (.elf), jeśli nie znaleziono błędu kompilacji.
gcc -o myexe -Wall test.c
pozwala zmienić nazwę pliku wykonywalnego.
EDYTUJ: jesteś nie z systemem Linux, ale Cygwin (on Windows). To nie czyni powyższej odpowiedzi niepoprawną, ale Cygwin tworzy natywny Windows pliki wykonywalne, nie .elf
pliki. Nie możesz stworzyć .elf
pliki za pomocą gcc
tam (chyba że masz okna -> kompilator krzyżowy Linux, jeśli istnieje)
readelf
Polecenie jest obecne w dystrybucji Cygwin, ale nie odczytuje programów skompilowanych gcc
. Może analizować .elf
pliki z Linuksa lub innych systemów używających tego formatu wykonywalnego, ale z pewnością nie w formacie Windows PE.