These functions are used to access and manipulate data descriptors associated with section descriptors. Data descriptors used by the ELF library are described in
elf(3).
Function
elf_getdata() will return the next data descriptor associated with section descriptor
scn. The returned data descriptor will be setup to contain translated data. Argument
data may be
NULL, in which case the function returns the first data descriptor associated with section
scn. If argument
data is not
NULL, it must be a pointer to a data descriptor associated with section descriptor
scn, and function
elf_getdata() will return a pointer to the next data descriptor for the section, or
NULL when the end of the section's descriptor list is reached.
Function
elf_newdata() will allocate a new data descriptor and append it to the list of data descriptors associated with section descriptor
scn. The new data descriptor will be initialized as follows:
d_buf
Initialized to NULL.
d_off
Set to (off_t) -1. This field is under application control if the ELF_F_LAYOUT flag was set on the ELF descriptor.
d_type
Initialized to ELF_T_BYTE.
d_version
Set to the current working version of the library, as set by
elf_version(3).
The application must set these values as appropriate before calling
elf_update(3). Section
scn must be associated with an ELF file opened for writing. If the application has not requested full control of layout by setting the
ELF_F_LAYOUT flag on descriptor
elf, then the data referenced by the returned descriptor will be positioned after the existing content of the section, honoring the file alignment specified in member
d_align. On successful completion of a call to
elf_newdata(), the ELF library will mark the section
scn as “dirty”.
Function
elf_rawdata() is used to step through the data descriptors associated with section
scn. In contrast to function
elf_getdata(), this function returns untranslated data. If argument
data is
NULL, the first data descriptor associated with section
scn is returned. If argument
data is not
NULL, is must be a data descriptor associated with section
scn, and function
elf_rawdata() will return the next data descriptor in the list, or
NULL if no further descriptors are present. Function
elf_rawdata() always returns
Elf_Data structures of type
ELF_T_BYTE.
Special handling of SHT_NOBITS sections
For sections of type
SHT_NOBITS, the functions
elf_getdata() and
elf_rawdata() return a pointer to a valid
Elf_Data structure that has its
d_buf member set to
NULL and its
d_size member set to the size of the section.
If an application wishes to create a section of type
SHT_NOBITS, it should add a data buffer to the section using function
elf_newdata(). It should then set the
d_buf and
d_size members of the returned
Elf_Data structure to
NULL and the desired size of the section respectively.