File: dump-syms.cc

package info (click to toggle)
libelfin 0.3-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 668 kB
  • sloc: cpp: 4,883; makefile: 189; python: 139; sh: 129; ansic: 10
file content (43 lines) | stat: -rw-r--r-- 1,464 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "elf++.hh"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <inttypes.h>

int main(int argc, char **argv)
{
        if (argc != 2) {
                fprintf(stderr, "usage: %s elf-file\n", argv[0]);
                return 2;
        }

        int fd = open(argv[1], O_RDONLY);
        if (fd < 0) {
                fprintf(stderr, "%s: %s\n", argv[1], strerror(errno));
                return 1;
        }

        elf::elf f(elf::create_mmap_loader(fd));
        for (auto &sec : f.sections()) {
                if (sec.get_hdr().type != elf::sht::symtab && sec.get_hdr().type != elf::sht::dynsym)
                        continue;

                printf("Symbol table '%s':\n", sec.get_name().c_str());
                printf("%6s: %-16s %-5s %-7s %-7s %-5s %s\n",
                       "Num", "Value", "Size", "Type", "Binding", "Index",
                       "Name");
                int i = 0;
                for (auto sym : sec.as_symtab()) {
                        auto &d = sym.get_data();
                        printf("%6d: %016" PRIx64 " %5" PRId64 " %-7s %-7s %5s %s\n",
                               i++, d.value, d.size,
                               to_string(d.type()).c_str(),
                               to_string(d.binding()).c_str(),
                               to_string(d.shnxd).c_str(),
                               sym.get_name().c_str());
                }
        }

        return 0;
}