---
name: "gelf_getphdr"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/elf32_getphdr"
---

# gelf\_getphdr(3)

retrieve an ELF program header table

Part of [elf32\_getphdr(3)](/elf32_getphdr/3.md).

## NAME

**elf32\_getphdr**, **elf64\_getphdr**, **gelf\_getphdr** – retrieve an ELF program header table

## LIBRARY

library “libelf”

## SYNOPSIS

**#include \<libelf.h\>**

*Elf32\_Phdr \**\

**elf32\_getphdr**(*Elf \*elf*);

*Elf64\_Phdr \**\

**elf64\_getphdr**(*Elf \*elf*);

**#include \<gelf.h\>**

*GElf\_Phdr \**\

**gelf\_getphdr**(*Elf \*elf*, *int index*, *GElf\_Phdr \*dst*);

## DESCRIPTION

These functions retrieve and translate ELF program header information from an ELF descriptor, if this information exists.

Functions **elf32\_getphdr**() and **elf64\_getphdr**() return a pointer to an array of translated *Elf32\_Phdr* and *Elf64\_Phdr* descriptors respectively. These descriptors are described in [elf(5)](/elf/5.md). The number of entries in this array may be determined using the [elf\_getphnum(3)](/elf_getphnum/3.md) function.

Function **gelf\_getphdr**() will retrieve the program header table entry at index *index* from ELF descriptor *elf*. The translated program header table entry will be written to the address pointed to be argument *dst*.

Applications may inform the library of modifications to a program header table entry by using the [elf\_flagphdr(3)](/elf_flagphdr/3.md) API. Applications using the [gelf(3)](/gelf/3.md) interface need to use the [gelf\_update\_phdr(3)](/gelf_update_phdr/3.md) API to copy modifications to a program header entry back to the underlying ELF descriptor.

## RETURN VALUES

The functions a valid pointer if successful, or NULL in case an error was encountered.

## ERRORS

These functions may fail with the following errors:

- \[ELF\_E\_ARGUMENT\]

  Argument *elf* was NULL.

- \[ELF\_E\_ARGUMENT\]

  Argument *elf* was not a descriptor for an ELF object.

- \[ELF\_E\_ARGUMENT\]

  Argument *dst* was NULL.

- \[ELF\_E\_ARGUMENT\]

  Index *index* was out of range.

- \[ELF\_E\_CLASS\]

  The class of ELF descriptor *elf* did not match the expected class of the function being called.

- \[ELF\_E\_HEADER\]

  ELF descriptor *elf* did not possess an executable header.

- \[ELF\_E\_HEADER\]

  ELF descriptor *elf* had a corrupt executable header.

- \[ELF\_E\_RESOURCE\]

  An out of memory condition was detected.

- \[ELF\_E\_SECTION\]

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

- \[ELF\_VERSION\]

  ELF descriptor *elf* was of an unsupported version.

## SEE ALSO

[elf(3)](/elf/3.md), [elf32\_getehdr(3)](/elf32_getehdr/3.md), [elf32\_newphdr(3)](/elf32_newphdr/3.md), [elf64\_getehdr(3)](/elf64_getehdr/3.md), [elf64\_newphdr(3)](/elf64_newphdr/3.md), [elf\_flagphdr(3)](/elf_flagphdr/3.md), [elf\_getphnum(3)](/elf_getphnum/3.md), [gelf(3)](/gelf/3.md), [gelf\_getehdr(3)](/gelf_getehdr/3.md), [gelf\_newphdr(3)](/gelf_newphdr/3.md), [gelf\_update\_phdr(3)](/gelf_update_phdr/3.md), [elf(5)](/elf/5.md)
