elfkit

rust elf parsing, manipulation and (re)linking toolkit

Github星跟蹤圖

Build Status
crates.io
MIT licensed
docs

Elfkit

An elf read and manipulation library in pure Rust (written from scratch, no bfd, no gnu code, no license infections),
intended to be used in binary manipulation utils such as strip, chrpath, objcopy and ld.
The end goal is to build a well designed library that facilitates all sorts of binary manipulation magic.

elfkit can now link elfkit, so it's reasonably complete for x86_64. But it's definitely not stable yet and might produce incorrect code.

Using the linker

The quickest way to use elfkit with Rust is with korhal/stasis.

You can also either build from source or download binaries.
GCC does not have an option to use a foreign linker, so we need to pretend we're ld.gold, like so:

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

For using elfkit for compiling Rust code, add the following to ~/.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",
]

When compiling from source, create the ld.gold symlink manually:

cargo build --release --bin ld
ln -s "$PWD/target/release/ld" /usr/local/bin/ld.gold

Other binutils

readelf:
screenshot

implementation status

binutils, type, status, gnu compatible, --------------, -----------, ----------------, ldd, done, no, readelf, done, no, ld, wip, wip, objdump, -, -, ar, -, -, as, -, -, nm, -, -, strip, -, -, section parsers, type, read, write, --------------, ---------, ---------, symbols, done, done, strtab, done, done, relocations, done, done, dynamic, done, done, note, -, -, gnu_hash, -, -, hash, -, mvp, versym, -, -, verneed, -, -, architectures, abi, parser, linker, --------------, ---------, --------, x86_64, done, wip, mips32r2 o32, done, arm eabi, done, modular linker toolkit

  • Loader: loads elf objects from disk
  • Linker: produces a link graph of sections from a loader
  • Collector: bakes multiple sections into a single object
  • Relocator: applies relocations to a combined object

alternatives

  • goblin mach-o and archive support, no-std support, very low level
  • elf most popular, most generic use case, no writing, no section parsing
  • xmas-elf zero alloc (good for writing an OS), read only

references

主要指標

概覽
名稱與所有者aep/elfkit
主編程語言Rust
編程語言Rust (語言數: 4)
平台
許可證MIT License
所有者活动
創建於2017-09-06 20:40:56
推送於2020-06-22 13:53:51
最后一次提交2020-06-22 15:53:50
發布數3
最新版本名稱0.0.6 (發布於 2018-07-22 00:11:47)
第一版名稱0.0.4 (發布於 2017-12-28 20:25:38)
用户参与
星數205
關注者數7
派生數24
提交數89
已啟用問題?
問題數7
打開的問題數1
拉請求數8
打開的拉請求數2
關閉的拉請求數2
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?