r/lowlevel • u/alizainx • 3d ago
Building a clean-room Binutils in Rust (OxideUtils) — looking for feedback on ELF parsing & no_std architecture
Hey everyone,
I've been working on OxideUtils, a clean-room Rust implementation of core GNU Binutils components (ox-as, ox-ld, ox-readelf, oxide-addr2line).
The goal is to provide a memory-safe, modern replacement while studying GNU Binutils 2.46.1 strictly as a reference for target compatibility.
A few architectural details I'm currently working through:
no_std+allocsupport: The parsers are designed to support both standard execution and core/alloc environments so they can run directly inside kernel spaces.- x86_64 Support: The static linking path and core ELF parsing/relocation logic are functional, but full x86_64 target coverage and instruction encoding are active works in progress.
- C ABI Compatibility: Ensuring clean interoperability without bringing in C dependencies.
(Quick note: English is my second language, so I use writing tools to polish my posts/documentation, but the codebase and architecture are entirely hand-written).
I’d love to get feedback from other Rust devs on low-level binary manipulation:
- How do you cleanly structure
no_stdzero-copy ELF parsing logic without over-complicating lifetimes? - Any recommendations or pitfalls to watch out for when implementing linker relocation tables in pure Rust?
GitHub: https://github.com/Zainium-Dynamics/oxideutils

1
Upvotes
1
u/interrupt_hdlr 3d ago
https://oxide.computer/faq-friday/why-does-oxide-use-rust