/* Copyright (C) 2011 Red Hat, Inc. This file is part of elfutils. Written by Marek Polacek <mpolacek@redhat.com>, 2011. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. elfutils is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include ELFUTILS_HEADER(dwfl) #include <assert.h> #include <dwarf.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> int main (int argc, char *argv[]) { int cnt; for (cnt = 1; cnt < argc; ++cnt) { Dwarf_Off offset = 0; size_t len; int fd = open64 (argv[cnt], O_RDONLY); if (fd == -1) { printf ("cannot open '%s': %m\n", argv[cnt]); return 1; } Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); if (dbg == NULL) { printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1)); close (fd); return 1; } /* Try to use NULL Dwarf object. */ const char *str = dwarf_getstring (NULL, offset, &len); assert (str == NULL); /* Use insane offset. */ str = dwarf_getstring (dbg, ~0UL, &len); assert (str == NULL); /* Now do some real work. */ for (int i = 0; i < 100; ++i) { str = dwarf_getstring (dbg, offset, &len); puts (str); /* Advance. */ offset += len + 1; } close (fd); } return 0; }