| 1 | /* |
1 | /* |
| 2 | * Copyright 2003-2006 Gentoo Foundation |
2 | * Copyright 2003-2006 Gentoo Foundation |
| 3 | * Distributed under the terms of the GNU General Public License v2 |
3 | * Distributed under the terms of the GNU General Public License v2 |
| 4 | * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.170 2007/01/09 18:46:22 solar Exp $ |
4 | * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.171 2007/01/09 23:01:09 vapier Exp $ |
| 5 | * |
5 | * |
| 6 | * Copyright 2003-2006 Ned Ludd - <solar@gentoo.org> |
6 | * Copyright 2003-2006 Ned Ludd - <solar@gentoo.org> |
| 7 | * Copyright 2004-2006 Mike Frysinger - <vapier@gentoo.org> |
7 | * Copyright 2004-2006 Mike Frysinger - <vapier@gentoo.org> |
| 8 | */ |
8 | */ |
| 9 | |
9 | |
| 10 | #include "paxinc.h" |
10 | #include "paxinc.h" |
| 11 | |
11 | |
| 12 | static const char *rcsid = "$Id: scanelf.c,v 1.170 2007/01/09 18:46:22 solar Exp $"; |
12 | static const char *rcsid = "$Id: scanelf.c,v 1.171 2007/01/09 23:01:09 vapier Exp $"; |
| 13 | #define argv0 "scanelf" |
13 | #define argv0 "scanelf" |
| 14 | |
14 | |
| 15 | #define IS_MODIFIER(c) (c == '%' || c == '#' || c == '+') |
15 | #define IS_MODIFIER(c) (c == '%' || c == '#' || c == '+') |
| 16 | |
16 | |
| 17 | /* prototypes */ |
17 | /* prototypes */ |
| … | |
… | |
| 1098 | case 'o': prints(" TYPE "); break; |
1098 | case 'o': prints(" TYPE "); break; |
| 1099 | case 'x': prints(" PAX "); break; |
1099 | case 'x': prints(" PAX "); break; |
| 1100 | case 'e': prints("STK/REL/PTL "); break; |
1100 | case 'e': prints("STK/REL/PTL "); break; |
| 1101 | case 't': prints("TEXTREL "); break; |
1101 | case 't': prints("TEXTREL "); break; |
| 1102 | case 'r': prints("RPATH "); break; |
1102 | case 'r': prints("RPATH "); break; |
|
|
1103 | case 'M': prints("CLASS "); break; |
| 1103 | case 'n': prints("NEEDED "); break; |
1104 | case 'n': prints("NEEDED "); break; |
| 1104 | case 'i': prints("INTERP "); break; |
1105 | case 'i': prints("INTERP "); break; |
| 1105 | case 'b': prints("BIND "); break; |
1106 | case 'b': prints("BIND "); break; |
| 1106 | case 'S': prints("SONAME "); break; |
1107 | case 'S': prints("SONAME "); break; |
| 1107 | case 's': prints("SYM "); break; |
1108 | case 's': prints("SYM "); break; |
| … | |
… | |
| 1166 | case 'x': out = scanelf_file_pax(elf, &found_pax); break; |
1167 | case 'x': out = scanelf_file_pax(elf, &found_pax); break; |
| 1167 | case 'e': out = scanelf_file_phdr(elf, &found_phdr, &found_relro, &found_load); break; |
1168 | case 'e': out = scanelf_file_phdr(elf, &found_phdr, &found_relro, &found_load); break; |
| 1168 | case 't': out = scanelf_file_textrel(elf, &found_textrel); break; |
1169 | case 't': out = scanelf_file_textrel(elf, &found_textrel); break; |
| 1169 | case 'T': out = scanelf_file_textrels(elf, &found_textrels, &found_textrel); break; |
1170 | case 'T': out = scanelf_file_textrels(elf, &found_textrels, &found_textrel); break; |
| 1170 | case 'r': scanelf_file_rpath(elf, &found_rpath, &out_buffer, &out_len); break; |
1171 | case 'r': scanelf_file_rpath(elf, &found_rpath, &out_buffer, &out_len); break; |
|
|
1172 | case 'M': out = get_elfeitype(EI_CLASS, elf->data[EI_CLASS]); break; |
| 1171 | case 'n': |
1173 | case 'n': |
| 1172 | case 'N': out = scanelf_file_needed_lib(elf, &found_needed, &found_lib, (out_format[i]=='N'), &out_buffer, &out_len); break; |
1174 | case 'N': out = scanelf_file_needed_lib(elf, &found_needed, &found_lib, (out_format[i]=='N'), &out_buffer, &out_len); break; |
| 1173 | case 'i': out = scanelf_file_interp(elf, &found_interp); break; |
1175 | case 'i': out = scanelf_file_interp(elf, &found_interp); break; |
| 1174 | case 'b': out = scanelf_file_bind(elf, &found_bind); break; |
1176 | case 'b': out = scanelf_file_bind(elf, &found_bind); break; |
| 1175 | case 'S': out = scanelf_file_soname(elf, &found_soname); break; |
1177 | case 'S': out = scanelf_file_soname(elf, &found_soname); break; |
| … | |
… | |
| 1806 | case 'k': break; |
1808 | case 'k': break; |
| 1807 | case 's': break; |
1809 | case 's': break; |
| 1808 | case 'N': break; |
1810 | case 'N': break; |
| 1809 | case 'o': break; |
1811 | case 'o': break; |
| 1810 | case 'a': break; |
1812 | case 'a': break; |
|
|
1813 | case 'M': break; |
| 1811 | case 'x': show_pax = 1; break; |
1814 | case 'x': show_pax = 1; break; |
| 1812 | case 'e': show_phdr = 1; break; |
1815 | case 'e': show_phdr = 1; break; |
| 1813 | case 't': show_textrel = 1; break; |
1816 | case 't': show_textrel = 1; break; |
| 1814 | case 'r': show_rpath = 1; break; |
1817 | case 'r': show_rpath = 1; break; |
| 1815 | case 'n': show_needed = 1; break; |
1818 | case 'n': show_needed = 1; break; |