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-machat 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 between0and255. No vibes outside that range. If--input-abiversionisn'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 between0and255here too. Same rules, same energy.--enable-x86-feature=featureβ sets the feature bit in the program property, inexecordynELF files, with machine types ofi386orx86-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, inexecordynELF files, with machine types ofi386orx86-64. Supported features are the same as--enable-x86-feature.
β οΈ heads up bestie:--enable-x86-featureand--disable-x86-featureare available only on hosts withmmapsupport. So if your host isn't mmap-ing, these two are just vibes. π
-v,--versionβ displays the version number ofelfedit. Show me the numbers. π’-h,--helpβ displays the command-line options understood byelfedit. 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@fileoption β 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 π
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
- ubuntu stonking: binutils-msp430-unknown-elf 1:2.47-6ubuntu1+33
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms