/ / Jak skompilować program c do formatu elf? [zamknięte] - c, linux, elf

Jak skompilować program c do formatu elfa? [zamknięty] - c, linux, elf

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 № 1

Spró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.