如何将c程序编译成elf格式?

时间:2017-10-03 19:42:37

标签: c linux elf

我是Linux新手。我正在尝试将我的c程序编译成elf文件,因此我可以使用read elf来查找有关该函数的信息等。每当我尝试将readelf与输出文件一起使用时(在编译我的c程序之后),它就说它不是elf文件。那么如何编译我的C程序,以便编译成一个elf文件。或许我不理解?我正在使用gcc编译

这是我的编译命令行:

gcc -Wall main.c  a.out

然后readelf -a a

好的,所以我使用gcc -o test -Wall main.c编译它并且编译没有错误然后使用readelf -a测试进行readelf,它仍然说它不是精灵,当我提交它时提出:PE32 +可执行(控制台)x86-64,用于MS Windows,所以这里有什么?

1 个答案:

答案 0 :(得分:4)

让我们试一试:

gcc -Wall test.c a.out
gcc: error: a.out: No such file or directory

强烈暗示出现了问题......所以gcc没有生成任何a.out文件(如果a.out文件已存在,则传递它就像这样告诉gcc尝试编译它,因为它不是一个有效的text / c文件,你会得到a.out: file not recognized: File truncated并且它也会很糟糕地结束。

您需要使用-o开关指定可执行输出(如果您在unix / linux上需要a.out,只需不要键入它)

gcc -Wall test.c
如果没有找到编译错误,

将创建a.out可执行文件(.elf)。

gcc -o myexe -Wall test.c

允许更改可执行文件名。

编辑:你运行Linux但是Cygwin(在 Windows 上)。这并不能使上面的答案无效,但Cygwin正在创建本机 windows 可执行文件,而不是.elf文件。你不能使用.elf创建gcc文件(除非你得到一个windows - > Linux交叉编译器,如果存在的话)

Cygwin发行版中存在

readelf命令,但不会读取使用gcc编译的程序。它可以使用该可执行格式分析来自Linux或其他系统的.elf文件,但肯定不是Windows PE格式。