gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:00:18 31 4
gpt4 key购买 nike

我是 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 test 进行 readelf ,它仍然说它不是 elf,当我归档它时提供:PE32+ 可执行文件(控制台)x86-64,适用于 MS Windows,那么这里发生了什么?

最佳答案

让我们尝试一下:

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 recognize: File truncated 而且结局也会很糟糕)。

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

gcc -Wall test.c

如果没有发现编译错误,将创建a.out可执行文件(.elf)。

gcc -o myexe -Wall test.c

允许更改可执行文件名称。

编辑:您运行的不是 Linux,而是 Cygwin(在 Windows 上)。这并不会使上面的答案无效,但 Cygwin 正在创建 native windows 可执行文件,而不是 .elf 文件。您无法在那里使用 gcc 创建 .elf 文件(除非您获得 Windows -> Linux 交叉编译器(如果存在)

Cygwin 发行版中存在

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

关于c - 如何将c程序编译成elf格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46552197/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com