elm*_*rco 62 linux debugging compiler executable elf
有没有机会知道在 Linux 下如何构建二进制文件?(和或其他 Unix)
编译器、版本、时间、标志等...
我查看readelf并找不到太多内容,但可能还有其他方法可以分析二进制代码/部分等...
你知道怎么提取吗?
Mic*_*zek 57
没有通用的方法,但您可以通过查找仅由一个编译器完成的事情来做出有根据的猜测。
GCC 是最简单的;它写了一个.comment包含 GCC 版本字符串的部分(如果你运行,你会得到相同的字符串gcc --version)。我不知道是否有办法用 显示它readelf,但objdump它是:
objdump -s --section .comment /path/binary
Run Code Online (Sandbox Code Playgroud)
我刚刚意识到我忽略了您的其余问题。标志通常不会保存在任何地方;他们很可能会出现在评论部分,但我从未见过这样做过。COFF 标头中有一个用于时间戳的位置,但 ELF 中没有等效项,因此我认为编译时间也不可用
小智 31
怎么样:
readelf -p .comment a.out
Run Code Online (Sandbox Code Playgroud)
小智 6
有两种方法。两者都会给出相同的结果
objdump -s --section .comment path/to/binary
Run Code Online (Sandbox Code Playgroud)
使用 readelf 命令,readelf -S binary 将显示二进制文件中的 40 个部分标题。请注意.comment 节标题的序列号 。在我的系统中,它显示为 27(您的情况可能会有所不同)
readelf -x 30 path/to/binary -> 这将显示部分 '.comment' 的十六进制转储。在该转储中,您可以看到用于构建二进制文件的编译器。
小智 5
readelf 或 objdump 都可以做到这一点。
gcc 编译的 ELF 文件会添加 .note.ABI-tag 和 .note.gnu.build-id 两个部分。两者都可以通过
objdump -sj .note.ABI-tag ELFFILE
objdump -sj .note.gnu-build-id ELFFILE
Run Code Online (Sandbox Code Playgroud)
选项“s”表示显示完整内容,“j”表示部分名称。此样式获取该部分的十六进制内容。
readelf -n
Run Code Online (Sandbox Code Playgroud)
将显示一次 ELFFILE 的人类可读内容。选项“n”表示注释。
选择一个你喜欢的。
顺便说一句,使用objcopy,您可以在elf文件中添加自己的部分。