DWARF_GET_STR(3) | Library Functions Manual | DWARF_GET_STR(3)

# NAME

dwarf_get_str — retrieve a string from the DWARF string section

# LIBRARY

DWARF Access Library (libdwarf, -ldwarf)

# SYNOPSIS

#include <libdwarf.h>

int
dwarf_get_str(Dwarf_Debug dbg, Dwarf_Off offset, char **string, Dwarf_Signed *len, Dwarf_Error *err);

# DESCRIPTION

Function dwarf_get_str() retrieves a NUL-terminated string from the DWARF string section “.debug_str”.

Argument dbg should reference a DWARF debug context allocated using dwarf_init(3).

Argument offset should be an offset, relative to the “.debug_str” section, specifying the start of the desired string.

Argument string should point to a location which will hold a returned pointer to a NUL-terminated string.

Argument len should point to a location which will hold the length of the returned string. The returned length does not include the space needed for the NUL-terminator.

If argument err is not NULL, it will be used to store error information in case of an error.

# RETURN VALUES

Function dwarf_get_str() returns DW_DLV_OK when it succeeds. It returns DW_DLV_NO_ENTRY if there is no “.debug_str” section associated with the specified debugging context, or if the provided offset offset is at the very end of “.debug_str” section. In case of an error, it returns DW_DLV_ERROR and sets the argument err.

# ERRORS

Function dwarf_get_str() can fail with:

[DW_DLE_ARGUMENT]
  One of the arguments dbg, string or len was NULL.
[DW_DLE_ARGUMENT]
  Argument offset was out of range.
[DW_DLE_NO_ENTRY]
  The debugging context dbg did not contain a “.debug_str” string section.
[DW_DLE_NO_ENTRY]
  Argument offset was at the very end of the “.debug_str” section.

# EXAMPLE

To retrieve all the strings in the DWARF string section, use:

    Dwarf_Debug dbg;
    Dwarf_Off offset;
    Dwarf_Signed len;
    Dwarf_Error de;
    char *str;
    int ret

    offset = 0;
    while ((ret = dwarf_get_str(dbg, offset, &str, &len, &de)) ==
    	DW_DLV_OK) {
    	/* .. Use the retrieved string. .. */
    	offset += len + 1; /* Account for the terminating NUL. */
    }

    if (ret == DW_DLV_ERROR)
    	warnx("dwarf_get_str: %s", dwarf_errmsg(de));

# SEE ALSO

dwarf(3), dwarf_init(3)

April 3, 2011 | NetBSD 7.2