Skip to content

Commit f4b470b

Browse files
committed
Initial commit
0 parents  commit f4b470b

File tree

4 files changed

+141
-0
lines changed

4 files changed

+141
-0
lines changed

Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
DESTDIR=/usr/local/
2+
BINDIR=bin
3+
4+
PROG= elfdbg
5+
SRCS= elfdbg.c
6+
7+
CFLAGS+=-lelf
8+
9+
.include <bsd.prog.mk>

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# elfdbg

elfdbg.1

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
.\" Copyright (c) 2015 Sofian Brabez <sbz@FreeBSD.org>
2+
.\" All rights reserved.
3+
.\"
4+
.\" Redistribution and use in source and binary forms, with or without
5+
.\" modification, are permitted provided that the following conditions
6+
.\" are met:
7+
.\" 1. Redistributions of source code must retain the above copyright
8+
.\" notice, this list of conditions and the following disclaimer.
9+
.\" 2. Redistributions in binary form must reproduce the above copyright
10+
.\" notice, this list of conditions and the following disclaimer in the
11+
.\" documentation and/or other materials provided with the distribution.
12+
.\"
13+
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14+
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16+
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17+
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18+
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19+
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20+
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21+
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22+
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23+
.\" SUCH DAMAGE.
24+
.\"
25+
.Dd January 20, 2015
26+
.Dt ELFDBG 1
27+
.Os
28+
.Sh NAME
29+
.Nm elfdbg
30+
.Nd analyze if binary is compiled with debug sections
31+
.Sh SYNOPSIS
32+
.Nm
33+
.Op Ar file
34+
.Sh DESCRIPTION
35+
The
36+
.Nm
37+
utility reports if a binary is compiled with debug sections, commonly
38+
known as
39+
.Ar -g
40+
compiler toolchain flag.
41+
.Sh SEE ALSO
42+
.Xr libelf 3 ,
43+
.Sh AUTHORS
44+
.An -nosplit
45+
The
46+
.Nm
47+
program was written by
48+
.An Sofian Brabez Aq Mt sbz@FreeBSD.org .

elfdbg.c

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*-
2+
* Copyright (c) 2015 Sofian Brabez <sbz@FreeBSD.org>
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions
7+
* are met:
8+
* 1. Redistributions of source code must retain the above copyright
9+
* notice, this list of conditions and the following disclaimer
10+
* in this position and unchanged.
11+
* 2. Redistributions in binary form must reproduce the above copyright
12+
* notice, this list of conditions and the following disclaimer in the
13+
* documentation and/or other materials provided with the distribution.
14+
*
15+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18+
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25+
*/
26+
#include <err.h>
27+
#include <fcntl.h>
28+
#include <gelf.h>
29+
#include <stdint.h>
30+
#include <string.h>
31+
#include <stdio.h>
32+
#include <stdlib.h>
33+
#include <sysexits.h>
34+
#include <unistd.h>
35+
36+
static int
37+
elf_debug_sections(Elf *e) {
38+
Elf_Scn *scn=NULL;
39+
GElf_Shdr shdr;
40+
size_t n, shstrndx, sz;
41+
char *name;
42+
int has_debug=0;
43+
44+
if (elf_getshdrstrndx(e, &shstrndx) != 0)
45+
errx(EX_SOFTWARE, "elf_getshdrstrndx() failed : %s . " , elf_errmsg(-1));
46+
47+
while ((scn = elf_nextscn(e, scn)) != NULL) {
48+
gelf_getshdr(scn, &shdr);
49+
50+
name = elf_strptr(e, shstrndx, shdr.sh_name);
51+
if (!strstr(name, "debug_"))
52+
continue;
53+
54+
has_debug++;
55+
56+
}
57+
58+
return (has_debug > 0);
59+
}
60+
61+
int main(int argc, char *argv[]) {
62+
int fd, rc;
63+
Elf *e;
64+
int has_debug;
65+
66+
if (elf_version(EV_CURRENT) == EV_NONE )
67+
errx(EX_SOFTWARE, "ELF library initialization failed : %s ", elf_errmsg(-1));
68+
69+
if ((fd =open(argv [1], O_RDONLY , 0)) < 0)
70+
err(EX_NOINPUT,"open %s failed ", argv [1]);
71+
if ((e = elf_begin(fd, ELF_C_READ , NULL)) == NULL)
72+
errx(EX_SOFTWARE, "elf_begin () failed : %s . ", elf_errmsg(-1));
73+
if (elf_kind(e) != ELF_K_ELF)
74+
errx(EX_DATAERR, "%s is not an ELF object . ", argv[1]);
75+
76+
has_debug=elf_debug_sections(e);
77+
printf(has_debug ? "HAS DEBUG\n" : "NO DEBUG\n");
78+
79+
rc=close(fd);
80+
rc=elf_end(e);
81+
82+
return (rc);
83+
}

0 commit comments

Comments
 (0)