elf64_newehdr(3)

elf64_newehdr3

Retrieve or allocate the object file header

Part of gelf_newehdr(3).

Usage

#include <libelf.h>

Elf32_Ehdr *

elf32_newehdr(Elf *elf);

Elf64_Ehdr *

elf64_newehdr(Elf *elf);

#include <gelf.h>

void *

gelf_newehdr(Elf *elf, int elfclass);

Library

library “libelf”

Overview

These functions retrieve the ELF header from the ELF descriptor elf, allocating a new header if needed. File data structures are translated to their in-memory representations as described in elf(3).

Function elf32_newehdr() returns a pointer to a 32 bit Elf32_Ehdr structure. Function elf64_newehdr() returns a pointer to a 64 bit Elf64_Ehdr structure.

When argument elfclass has value ELFCLASS32, function gelf_newehdr() returns the value returned by elf32_newehdr(elf). When argument elfclass has value ELFCLASS64 it returns the value returned by elf64_newehdr(elf).

If a fresh header structure is allocated, the members of the structure are initialized as follows:

e_ident[EI_MAG0..EI_MAG3]

Identification bytes at offsets EI_MAG0, EI_MAG1, EI_MAG2 and EI_MAG3 are set to the ELF signature.

e_ident[EI_CLASS]

The identification byte at offset EI_CLASS is set to the ELF class associated with the function being called or to argument elfclass for function gelf_newehdr().

e_ident[EI_DATA]

The identification byte at offset EI_DATA is set to ELFDATANONE.

e_ident[EI_VERSION]

The identification byte at offset EI_VERSION is set to the ELF library's operating version set by a prior call to elf_version(3).

e_machine

is set to EM_NONE.

e_type

is set to ELF_K_NONE.

e_version

is set to the ELF library's operating version set by a prior call to elf_version(3).

Other members of the header are set to zero. The application is responsible for changing these values as needed before calling elf_update().

If successful, these three functions set the ELF_F_DIRTY flag on ELF descriptor elf.

Return values

These functions return a pointer to a translated header descriptor if successful, or NULL on failure.

Compatibility

The gelf_newehdr() function uses a type of void * for its returned value. This differs from some other implementations of the elf(3) API, which use an unsigned long return type.

Errors

These functions can fail with the following errors:

[ELF_E_ARGUMENT]

The argument elf was null.

[ELF_E_ARGUMENT]

Argument elf was not a descriptor for an ELF object.

[ELF_E_ARGUMENT]

Argument elfclass had an unsupported value.

[ELF_E_ARGUMENT]

The class of the ELF descriptor elf did not match that of the requested operation.

[ELF_E_ARGUMENT]

For function gelf_newehdr(), the class of argument elf was not ELFCLASSNONE and did not match the argument elfclass.

[ELF_E_CLASS]

The ELF class of descriptor elf did not match that of the API function being called.

[ELF_E_HEADER]

A malformed ELF header was detected.

[ELF_E_RESOURCE]

An out of memory condition was detected during execution.

[ELF_E_SECTION]

The ELF descriptor in argument elf did not adhere to the conventions used for extended numbering.

[ELF_E_VERSION]

The ELF descriptor elf had an unsupported ELF version number.

Releases

44 releases since FreeBSD 7.0-RELEASE; the text changed 22 times.

  1. 7.0
  2. 7.1
  3. 7.2
  4. 7.3
  5. 7.4
  6. 8.0
  7. 8.1
  8. 8.2
  9. 8.3
  10. 8.4
  11. 9.0
  12. 9.1
  13. 9.2
  14. 9.3
  15. 10.0
  16. 10.1
  17. 10.2
  18. 10.3
  19. 10.4
  20. 11.0
  21. 11.1–12.0
  22. 12.1
  23. 12.2–16.0

From base 16.0-CURRENT-20261027-61c70dc16a79 in FreeBSD 16.0-CURRENT (2026-10-27). Parsed by carta from the page's mdoc source.