7 个版本
使用旧的Rust 2015
0.0.7 | 2019年5月25日 |
---|---|
0.0.6 | 2018年7月21日 |
0.0.4 | 2017年10月13日 |
0.0.3 | 2017年9月27日 |
#6 in #ld
61 每月下载量
用于 12 个crate(2 个直接使用)
6MB
5.5K SLoC
包含(静态库,2.5MB)999-libmusl.a,(静态库,2.5MB)tests/linker/c-common/zzz-libmusl.a,(静态库,2.5MB)tests/linker/c-init-array/999-libmusl.a,(静态库,2.5MB)tests/linker/c-simple/999-libmusl.a,(静态库,2.5MB)998-libmusl.a,(静态库,2.5MB)999-libmusl.a 和更多。
Elfkit
一个纯Rust编写的ELF读取和操作库(从头开始编写,没有bfd,没有gnu代码,没有许可证感染),旨在用于strip、chrpath、objcopy和ld等二进制操作工具。最终目标是构建一个设计良好的库,以方便各种二进制操作魔法。
现在Elfkit可以链接Elfkit,所以在x86_64上已经相当完整。但肯定还不稳定,可能会生成错误的代码。
使用链接器
使用Rust快速使用elfkit的方法是使用korhal/stasis。
您也可以从源代码构建或下载二进制文件。GCC没有使用外国链接器的选项,因此我们需要假装我们是ld.gold,如下所示
curl -L https://github.com/aep/elfkit/releases/download/0.0.4/elfkit-0.0.4.tar.xz | tar xvjf -
export PATH="$PWD/elfkit-0.0.4/:$PATH"
musl-gcc -fuse-ld=gold main.c
要使用elfkit编译Rust代码,请将以下内容添加到~/.cargo/config
[target.x86_64-unknown-linux-musl]
rustflags = [
"-C", "link-arg=-fuse-ld=gold",
"-C", "link-arg=-Wl,-dynamic-linker,/usr/local/musl/lib/libc.so",
]
从源代码编译时,请手动创建ld.gold符号链接
cargo build --release --bin ld
ln -s "$PWD/target/release/ld" /usr/local/bin/ld.gold
其他binutils
readelf:
实现状态
binutils
类型 | 状态 | GNU兼容 |
---|---|---|
ldd | 完成 | 否 |
readelf | 完成 | 否 |
ld | 进行中 | 进行中 |
objdump | - | - |
ar | - | - |
as | - | - |
nm | - | - |
strip | - | - |
部分解析器
类型 | 读取 | 写入 |
---|---|---|
符号 | 完成 | 完成 |
strtab | 完成 | 完成 |
重定位 | 完成 | 完成 |
动态 | 完成 | 完成 |
note | - | - |
gnu_hash | - | - |
hash | - | mvp |
versym | - | - |
verneed | - | - |
架构
abi | 解析器 | 链接器 |
---|---|---|
x86_64 | 完成 | 进行中 |
mips32r2 o32 | 完成 | |
arm eabi | 完成 |
模块化链接工具包
- 加载器:从磁盘加载ELF对象
- 链接器:从加载器生成部分链接图
- 收集器:将多个部分烘焙成单个对象
- 重定位器:将重定位应用于组合对象
替代方案
参考
- https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
- https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf
- https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf
- http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/IHI0044F_aaelf.pdf
- https://dmz-portal.imgtec.com/wiki/MIPS_ABI_Project
- https://dmz-portal.imgtec.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking
- http://www.mindfruit.co.uk/2012/06/relocations-relocations.html#reloc_types_table
- https://www.akkadia.org/drepper/tls.pdf
依赖项
~11–21MB
~300K SLoC