ELFEDIT(1)

πŸ’… elfedit β€” the manual, but make it make sense

okay bestie, so you know how binutils is like... the whole friend group of development tools? Yeah. This is elfedit, the member of that group chat who's lowkey obsessed with ELF files and their headers. This page lives in the GNU Development Tools section, and it's giving "I have 13 flags and I'm not afraid to use them." 🧚✨


✨ NAME ✨

elfedit β€” update the ELF header and program property of ELF files, periodt. πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

elfedit [--input-mach=machine]
        [--input-type=type]
        [--input-osabi=osabi]
        [--input-abiversion=version]
        --output-mach=machine
        --output-type=type
        --output-osabi=osabi
        --output-abiversion=version
        --enable-x86-feature=feature
        --disable-x86-feature=feature
        [-v|--version]
        [-h|--help]
        elffile...

πŸ’– DESCRIPTION πŸ’–

So elfedit updates the ELF header and the program property of ELF files β€” but only the ones whose ELF machine and file types actually match. The options are the whole personality here: they control how the fields get updated and which fields get touched. iykyk.

Now, elffile... β€” those are the ELF files you're updating, bestie. Do not forget them. And yeah, both 32-bit and 64-bit ELF files are supported, plus archives that contain ELF files. Versatile queen. πŸ‘‘


🌸 OPTIONS 🌸

Long forms and short forms, shown here as alternatives, are equal β€” same energy, different outfit. Also, uhh, important: you've gotta give at least one of --output-mach, --output-type, --output-osabi, --output-abiversion, --enable-x86-feature and --disable-x86-feature. Otherwise the whole thing is a no-op and we do not stan a no-op. πŸ’€

  • --input-mach=machine β€” sets the matching input ELF machine type to machine. And if you don't pass --input-mach at all? It'll match any ELF machine type. Feral. Love that for it. 🌈

The supported ELF machine types are i386, IAMCU, L1OM, K1OM and x86-64.

  • --output-mach=machine β€” changes the ELF machine type in the ELF header to machine. The supported ELF machine types are the same crew as --input-mach β€” same list, and it is exactly the same as --input-mach's, so breathe, no plot twist.
  • --input-type=type β€” sets the matching input ELF file type to type. No --input-type? Then it matches any ELF file type. Flexible icon behavior. ✨

The supported ELF file types are rel, exec and dyn.

  • --output-type=type β€” changes the ELF file type in the ELF header to type. The supported ELF types are the same as --input-type.
  • --input-osabi=osabi β€” sets the matching input ELF file OSABI to osabi. Skip it and it'll match any ELF OSABI, no notes. πŸ™ˆ

The supported ELF OSABIs are none, HPUX, NetBSD, GNU, Linux (which is literally just an alias for GNU, go off), Solaris, AIX, Irix, FreeBSD, TRU64, Modesto, OpenBSD, OpenVMS, NSK, AROS and FenixOS.

  • --output-osabi=osabi β€” changes the ELF OSABI in the ELF header to osabi. The supported ELF OSABI are the same as --input-osabi.
  • --input-abiversion=version β€” sets the matching input ELF file ABIVERSION to version. And uh, version must be between 0 and 255. No vibes outside that range. If --input-abiversion isn't specified, it will match any ELF ABIVERSION. 🫢
  • --output-abiversion=version β€” changes the ELF ABIVERSION in the ELF header to version. And yep, version must be between 0 and 255 here too. Same rules, same energy.
  • --enable-x86-feature=feature β€” sets the feature bit in the program property, in exec or dyn ELF files, with machine types of i386 or x86-64. So specific, so niche, so slay. πŸ”₯

The supported features are ibt, shstk, lam_u48 and lam_u57.

  • --disable-x86-feature=feature β€” clears the feature bit in the program property, in exec or dyn ELF files, with machine types of i386 or x86-64. Supported features are the same as --enable-x86-feature.
⚠️ heads up bestie: --enable-x86-feature and --disable-x86-feature are available only on hosts with mmap support. So if your host isn't mmap-ing, these two are just vibes. 😭
  • -v, --version β€” displays the version number of elfedit. Show me the numbers. πŸ”’
  • -h, --help β€” displays the command-line options understood by elfedit. Your little cheat sheet, your study guide, your bestie. πŸŽ€
  • @file β€” reads command-line options from file. The options that get read are inserted right in place of the original @file option β€” so it's like a little surprise swap. But if file doesn't exist, or can't be read? Then the option is treated literally, and it is not removed. Yeah. It just stays there. Awkward. πŸ’€

Options inside file are separated by whitespace. And if you want a whitespace character inside an option, you can do that by wrapping the whole option in either single or double quotes. Any character β€” yes, including a backslash β€” can be included by prefixing the character you want to include with a backslash. And plot twist: the file may itself contain additional @file options, and any such options will be processed recursively. It's giving inception. πŸŒ€


⭐ SEE ALSO ⭐

readelf(1), and the Info entries for binutils.

Like, go read them. They're the extended universe. 🌈


Copyright (c) 1991-2026 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".


and that's the whole page bestie, no gatekeeping πŸ’œ β€” brought to you by binutils-2.47, dated 2026-09-05. now go update those ELF headers. mwah. πŸ’…βœ¨

πŸ“¦ where this page comes from