delink [![Build Status]][actions] [![Discord Badge]][discord]
June 24, 2026 · View on GitHub
A splitting tool for decompilation projects.
Supported Formats:
- Shared Object (.so) files with DWARF
- Mach-O STABS and SYMTAB
- Windows PE with PDB's (.exe/.pdb).
- Any binary IDA can analyse, via the IDA import workflow.
IDA import
When you don't have debug info but do have an IDA database, you can split using IDA's analysis. There are two pieces, decoupled by a JSON file so delink never has to link against IDA:
-
Export (inside IDA 9.x). Run
crates/delink-ida/ida_export.pyto write a small, human-readable JSON describing the architecture/segment layout, every function (boundaries + flags), the full address → name map, and the relocations IDA knows (its fixup table and offset-typed operands — the latter being the only relocation record for images with no.reloc, e.g. EXEs). The export carries no bytes:# headless (idat64.exe for a 64-bit database) "idat.exe" -A -S"crates\delink-ida\ida_export.py delink.ida.json" database.idbor, interactively, File → Script file… and pick the script.
-
Import + split (delink). Pass the JSON and the original binary (the bytes and the PE
.reloctable come from there):delink ida-split delink.ida.json binary.exe -o ./outputFor x86 / x86-64 targets delink disassembles each function with iced-x86 to recover rel32 call/jump relocations, and combines IDA's relocations with the binary's
.reloctable for absolute pointers, resolving every target through the exported name map. Output is COFF.objfor PE inputs (use--elffor ELF.o).As with the Mach-O splitter, the first run writes an editable
idapro.jsongrouping ({ "<obj>": { "<sym>": {address, size, scope} } }) into the output directory. Edit it to group symbols into objects (and rename keys to rename files), then re-run with--idapro ./out/idapro.json.
Building
Install Rust via rustup.
git clone https://github.com/HaydnTrigg/delink.git
cd delink
cargo run --release
Or install directly with cargo:
cargo install --locked --git https://github.com/HaydnTrigg/delink.git delink
Binaries will be installed to ~/.cargo/bin as delink.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.