如果elf是golang语言编写后编译生成,那么elf存在如下的段信息:1
2
3
4
5
6
7#readelf --sections xxx
[ 6] .gosymtab PROGBITS 00000000029523d0 025523d0
0000000000000000 0000000000000000 A 0 0 1
[ 7] .gopclntab PROGBITS 00000000029523e0 025523e0
0000000000faeca1 0000000000000000 A 0 0 32
[ 8] .go.buildinfo PROGBITS 0000000003902000 03502000
0000000000000020 0000000000000000 WA 0 0 16
当然也可以通过其他的方式判断,例如strings后的结果存在go的函数。
而通过rust编译后的程序再elf段上没有那么明显的特征,只能通过strings后看到有众多的rustc函数特征:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#strings hello | grep rust
clang LLVM (rustc version 1.50.0 (cb75ad5db 2021-02-10))
and_then<&str,rustc_demangle::Demangle,closure-0>
ok<rustc_demangle::Demangle,rustc_demangle::TryDemangleError>
as_ref<rustc_demangle::Demangle>
map<&rustc_demangle::Demangle,&str,closure-0>
_ZN3std10sys_common9backtrace18rust_backtrace_env17h9040d0471b710635E
rust_backtrace_env
_ZN3std10sys_common9backtrace18rust_backtrace_env28_$u7b$$u7b$closure$u7d$$u7d$17haa6a1a790dc380c8E
rust_panic_without_hook
drop_in_place<std::panicking::rust_panic_without_hook::RewrapBox>
_ZN3std10sys_common9backtrace26__rust_end_short_backtrace17h0903517b9709bc89E
__rust_end_short_backtrace<closure-0,!>
_ZN3std10sys_common9backtrace26__rust_end_short_backtrace17hb9f0aa9a78e885a0E
rust_oom
__rust_drop_panic
__rust_foreign_exception
rust_begin_unwind
_ZN3std9panicking20rust_panic_with_hook17hb27ea14285131c61E
rust_panic_with_hook
原文作者:warvyvr, warvyvr@gmail.com
原文链接:http://warvyvr.github.io/2021/03/17/identify-elf/
发表日期:March 17th 2021, 5:00:00 pm
更新日期:May 9th 2022, 12:20:57 am
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可
-
Next PostAlios Things编译构建过程
-
Previous Post如何在Hexo中添加数学公式