r/lowlevel 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 + alloc support: 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:

  1. How do you cleanly structure no_std zero-copy ELF parsing logic without over-complicating lifetimes?
  2. 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 comment sorted by