File: elf_begin.3

package info (click to toggle)
elfutils 0.194-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,680 kB
  • sloc: ansic: 114,970; sh: 35,537; cpp: 4,998; makefile: 1,986; yacc: 1,388; lex: 130; asm: 77; sed: 39; awk: 35
file content (111 lines) | stat: -rw-r--r-- 3,559 bytes parent folder | download
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
.TH ELF_BEGIN 3 2025-06-02 "Libelf" "Libelf Programmer's Manual"

.SH NAME
elf_begin \- initialize an ELF descriptor
.SH SYNOPSIS
.nf
#include <libelf.h>

Elf *elf_begin(int fildes, Elf_Cmd cmd, Elf *ref);
.fi
.SH DESCRIPTION
Initialize and return a handle to an ELF file for use with the elfutils
\fBlibelf\fP library and related elfutils libraries such as \fBlibdw\fP.

The returned \fBElf\fP descriptor must be released using \fBelf_end(3)\fP.

\fBelf_version(3)\fP must be called before using any \fBlibelf\fP library
including \fBelf_begin(3)\fP.

.SH PARAMETERS
.TP
\fIfildes\fP
A file descriptor referring to an ELF object. The descriptor should be open
for reading, and optionally for writing, depending on the intended operation.
If \fIref\fP is non-NULL, then \fIfildes\fP must either be -1 or be set to the
same file descriptor as the one associated with \fIref\fP.
.TP
\fIcmd\fP
Specifies the action to perform. Common values include:
.RS
.TP
\fBELF_C_NULL\fP
Return a NULL pointer instead of initializing an ELF descriptor.  Ignores
\fIref\fP.
.TP
\fBELF_C_READ\fP
Open an ELF descriptor for reading.
.TP
\fBELF_C_WRITE\fP
Open an ELF descriptor for writing.  The descriptor initially refers to an
empty file.
.TP
\fBELF_C_RDWR\fP
Open an ELF descriptor for reading and writing.
.TP
\fBELF_C_READ_MMAP\fP
Open an ELF descriptor for reading using mmap, if available.  The
\fBELF_C_*_MMAP\fP commands are an elfutils libelf extension and may not be
available in other libelf implementations.  Once the mmap size is set attempts
to extend the size may fail.  Therefore, \fBELF_C_*_MMAP\fP commands tend to be
more useful for in-place modifications or removal of data from an ELF
descriptor.
.TP
\fBELF_C_WRITE_MMAP\fP
Open an ELF descriptor for writing using mmap, if available.  The descriptor
initially refers to an empty file.
.TP
\fBELF_C_RDWR_MMAP\fP
Open an ELF descriptor for reading and writing using mmap, if available.
.TP
\fBELF_C_READ_MMAP_PRIVATE\fP
Open an ELF descriptor for reading using mmap, if available.  This command
invokes mmap with MAP_PRIVATE whereas the other \fBELF_C_*_MMAP\fP commands
invoke mmap with MAP_SHARED.  See \fBmmap(2)\fP for more information.
.RE
.TP
\fIref\fP
A reference to an existing Elf descriptor.  If \fIref\fP refers to regular
ELF binary (not an AR file), then \fBelf_begin\fP will duplicate \fIref\fP.
The reference count associated with \fIref\fP will be incremented and
\fBelf_end(3)\fP will need to be called an additional time to deallocate
\fIref\fP.  \fIref\fP must have been opened with read/write permissions
consistent with \fIcmd\fP.

If \fIref\fP refers to an AR file, then the ELF descriptor returned will be
the first available object member of the archive (see \fBelf_next(3)\fP for
more information).

\fIref\fP may be NULL, in which case this argument is ignored.

.SH RETURN VALUE
On success, \fBelf_begin()\fP returns a pointer to a new Elf descriptor.
If \fIcmd\fP is \fBELF_C_NULL\fP then NULL is returned.  If \fIref\fP is
non-NULL and isn't an AR file, then a copy of \fIref\fP is returned.  On
failure, \fBelf_begin()\fP returns NULL and sets an internal error
state that can be retrieved with \fBelf_errmsg(3)\fP.

.SH SEE ALSO
.BR mmap (2),
.BR elf_clone (3),
.BR elf_end (3),
.BR elf_next (3),
.BR elf_rand (3),
.BR libelf (3),
.BR elf (5)

.SH ATTRIBUTES
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.na
.nh
.BR elf_begin ()
T}	Thread safety	MT-Safe
.TE

.SH REPORTING BUGS
Report bugs to <elfutils-devel@sourceware.org> or https://sourceware.org/bugzilla/.