ELFEDIT(1)

πŸ“¦ version 2.47, in arch rolling

πŸ’… elfedit(1) β€” GNU Development Tools ✨

okay bestie, so this is elfedit, a lil tool from the GNU Development Tools crew, and before we get into it: yes, it's a manual page, yes it looks scary, but it's literally just a formatter for ELF headers and you're gonna slay it 🫢


✨ NAME ✨

elfedit β€” update ELF header and program property of ELF files πŸŽ€

🌸 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 goes in and updates the ELF header and program property of ELF files β€” but only the ones that match the ELF machine and file types you asked for. the options are the whole vibe check here: they decide how and which fields in the ELF header and program property get updated. iykyk πŸ’…

and then elffile... are the actual ELF files getting updated. 32-bit and 64-bit ELF files are both supported, and so are archives containing ELF files. no cap, both sizes, archives too 🧚

πŸ’– OPTIONS πŸ’–

the long and short forms of options, shown here as alternatives, are equivalent β€” pick whichever one speaks to you, they're twins fr fr. and listen: at least one of --output-mach, --output-type, --output-osabi, --output-abiversion, --enable-x86-feature and --disable-x86-feature must be given. like, at minimum. one. otherwise what are we even doing here 😭

  • --input-mach=machine β€” sets the matching input ELF machine type to machine. if you don't pass --input-mach, it'll match any ELF machine types. 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. supported ELF machine types are the same as --input-mach.
  • --input-type=type β€” sets the matching input ELF file type to type. if --input-type isn't specified, it will match any ELF file types. 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. if --input-osabi isn't specified, it'll match any ELF OSABIs. and the supported ELF OSABIs are: none, HPUX, NetBSD, GNU, Linux (alias for GNU), 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. supported ELF OSABI are the same as --input-osabi.
  • --input-abiversion=version β€” sets the matching input ELF file ABIVERSION to version. version must be between 0 and 255. if --input-abiversion isn't specified, it will match any ELF ABIVERSIONs.
  • --output-abiversion=version β€” changes the ELF ABIVERSION in the ELF header to version. version must be between 0 and 255. same range, no exceptions bestie πŸ’œ
  • --enable-x86-feature=feature β€” sets the feature bit in program property in exec or dyn ELF files with machine types of i386 or x86-64. the supported features are ibt, shstk, lam_u48 and lam_u57 πŸ”₯
  • --disable-x86-feature=feature β€” clears the feature bit in 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.
🫢 note: --enable-x86-feature and --disable-x86-feature are available only on hosts with mmap support. if your host doesn't have it, these two are just not invited to the party, sorry πŸ’€
  • -v, --version β€” displays the version number of elfedit. cute and useful.
  • -h, --help β€” displays the command-line options understood by elfedit. aka the whole menu of what this thing can do πŸ‘‘
  • @file β€” reads command-line options from file. the options read get inserted right in place of the original @file option. and if file doesn't exist, or can't be read? then the option is treated literally, and not removed. it stays. it commits. πŸ™ˆ

options in file are separated by whitespace. a whitespace character may be included in an option by surrounding the entire option in either single or double quotes. any character (including a backslash) may be included by prefixing the character to be included with a backslash. and the file may itself contain additional @file options β€” any such options will be processed recursively, so it's turtles all the way down 🐒✨


πŸ‘€ SEE ALSO πŸ‘€

readelf(1), and the Info entries for binutils. go read those too, bestie, they're iconic.

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 thing, periodt πŸ’… this page is binutils-2.47, dated 2026-07-30 β€” go forth and edit some ELF headers, you've got this πŸŽ€πŸ¦‹πŸ’–

πŸ“¦ where this page comes from