ruby-elf 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +0,0 @@
1
- These scripts are some extra tools that I've written and aren't really
2
- part of ruby-elf as they don't relate to parsing ELF files directly.
3
-
4
- binding-parser.rb: a parser for the output of LD_DEBUG=bindings from
5
- glibc's dynamic loader.
@@ -1,157 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
- # Copyright © 2006-2008, Diego Elio Pettenò <flameeyes@flameeyes.eu>
4
- #
5
- # This program is free software; you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation; either version 2 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this generator; if not, write to the Free Software
17
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
-
19
- # == Synopsis
20
- #
21
- # bindings-parser: parses the LD_DEBUG=bindings output
22
- #
23
- # == Usage
24
- #
25
- # bindings-parser [-S] [-b] [-l library] [-f file]
26
- #
27
- # -h, --help:
28
- # show help
29
- #
30
- # -S, --sort
31
- # Sort the statistics by amount of entries.
32
- #
33
- # -b, --basename-only
34
- # Report only the basename of libraries (shorter).
35
- #
36
- # -l <basename>, --library <basename>
37
- # Report only the statistics for the given library.
38
- #
39
- # -f <inputfile>, --file <inputfile>
40
- # Reads the output to parse from file rather than standard input.
41
- #
42
- # Feed the standard input (or the file) with the outptu created by
43
- # LD_DEBUG=bindings somecommand
44
- # You can use LD_DEBUG_OUTPUT to write the output to a file rather than
45
- # stderr.
46
-
47
- pid = nil
48
-
49
- require 'getoptlong'
50
- require 'rdoc/usage'
51
-
52
- opts = GetoptLong.new(
53
- ["--help", "-h", GetoptLong::NO_ARGUMENT],
54
- ["--sort", "-S", GetoptLong::NO_ARGUMENT],
55
- ["--basename-only", "-b", GetoptLong::NO_ARGUMENT],
56
- ["--library", "-l", GetoptLong::REQUIRED_ARGUMENT],
57
- ["--file", "-f", GetoptLong::REQUIRED_ARGUMENT]
58
- )
59
-
60
- sort = false
61
- basename = false
62
- library = nil
63
- input = $stdin
64
-
65
- opts.each do |opt, arg|
66
- case opt
67
- when "--help"
68
- RDoc::usage
69
- when "--sort"
70
- sort = true
71
- when "--basename-only"
72
- basename = true
73
- when "--library"
74
- library = arg
75
- when "--file"
76
- input = File.new(arg, "r")
77
- end
78
- end
79
-
80
- bindings = []
81
-
82
- input.each_line { |line|
83
- if line =~ /\s+(\d+):\s+binding file ([^\s]+) \[0\] to ([^\s]+) \[0\]: (\w+) symbol .*/
84
-
85
- pid = $1.to_i unless pid
86
-
87
- if basename or library
88
- bindings << { :origin => File.basename($2), :destination => File.basename($3), :type => $4 }
89
- else
90
- bindings << { :origin => $2, :destination => $3, :type => $4 }
91
- end
92
-
93
- end
94
- }
95
-
96
- maxlen = 0
97
-
98
- bindings.each { |b| maxlen = [maxlen, b[:origin].size, b[:destination].size, b[:type].size].max }
99
-
100
- maxlen += 4
101
-
102
- origins = bindings.collect { |b| b[:origin] }.uniq.sort
103
- destinations = bindings.collect { |b| b[:destination] }.uniq.sort
104
- bindtypes = bindings.collect { |b| b[:type] }.uniq.sort
105
-
106
- origcount = origins.collect { |key| [ key, bindings.clone.delete_if { |e| e[:origin] != key }.size ] }
107
- destcount = destinations.collect { |key| [ key, bindings.clone.delete_if { |e| e[:destination] != key }.size ] }
108
- typescount = bindtypes.collect { |key| [ key, bindings.clone.delete_if { |e| e[:type] != key }.size ] }
109
- selfcount = origins.collect { |key| [ key, bindings.clone.delete_if { |e| e[:origin] != key or e[:destination] != key }.size ] }
110
-
111
- if sort
112
- [origcount, destcount, typescount, selfcount].each { |countarray|
113
- countarray.sort! { |k1, k2| k2[1] <=> k1[1] } # [1] is the count
114
- }
115
- else
116
- [origcount, destcount, typescount, selfcount].each { |countarray|
117
- countarray.sort! { |k1, k2| k2[0] <=> k1[0] } # [0] is the name
118
- }
119
- end
120
-
121
- if not library
122
- puts "Statistics"
123
-
124
- puts " Origins"
125
- origcount.each { |key, count|
126
- print " #{key}"
127
- (maxlen-key.size).times { print " " }
128
- puts "#{count}"
129
- }
130
-
131
- puts " Destinations"
132
- destcount.each { |key, count|
133
- print " #{key}"
134
- (maxlen-key.size).times { print " " }
135
- puts "#{count}"
136
- }
137
-
138
- puts " Bindtypes"
139
- typescount.each { |key, count|
140
- print " #{key}"
141
- (maxlen-key.size).times { print " " }
142
- puts "#{count}"
143
- }
144
-
145
- puts " Self-loops (candidate for protected visibility)"
146
- selfcount.each { |key, count|
147
- next if count == 0
148
- print " #{key}"
149
- (maxlen-key.size).times { print " " }
150
- puts "#{count}"
151
- }
152
- else
153
- puts "Statistics for #{library}"
154
- puts " Origin: #{origcount.assoc(library)[1].to_s.rjust(8)}" if origcount.assoc(library)
155
- puts " Destination: #{destcount.assoc(library)[1].to_s.rjust(8)}" if destcount.assoc(library)
156
- puts " Self-loops: #{selfcount.assoc(library)[1].to_s.rjust(8)}" if selfcount.assoc(library)
157
- end
@@ -1,234 +0,0 @@
1
- <?xml version='1.0'?>
2
- <!--
3
- Copyright © 2008-2011, Diego Elio Pettenò <flameeyes@flameeyes.eu>
4
-
5
- This program is free software; you can redistribute it and/or modify
6
- it under the terms of the GNU General Public License as published by
7
- the Free Software Foundation; either version 2 of the License, or
8
- (at your option) any later version.
9
-
10
- This program is distributed in the hope that it will be useful,
11
- but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- GNU General Public License for more details.
14
-
15
- You should have received a copy of the GNU General Public License
16
- along with this generator; if not, write to the Free Software
17
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
- -->
19
- <article xmlns="http://docbook.org/ns/docbook"
20
- xmlns:xl="http://www.w3.org/1999/xlink"
21
- xmlns:xi="http://www.w3.org/2001/XInclude"
22
- version="5.0" xml:lang="en">
23
- <info>
24
- <title>cowstats</title>
25
-
26
- <xi:include parse="xml" href="author.xmli" />
27
- </info>
28
-
29
- <section>
30
- <title>Reference</title>
31
-
32
- <refentry>
33
- <info>
34
- <date>October 2008</date>
35
- <productname>ruby-elf</productname>
36
- </info>
37
- <refmeta>
38
- <refentrytitle>cowstats</refentrytitle>
39
- <manvolnum>1</manvolnum>
40
- </refmeta>
41
- <refnamediv>
42
- <refname>cowstats</refname>
43
- <refpurpose>ELF Copy-on-Write analyzer</refpurpose>
44
- </refnamediv>
45
- <refsynopsisdiv>
46
- <cmdsynopsis>
47
- <command>cowstats</command>
48
- <arg choice="opt"><option>--statistics</option></arg>
49
- <arg choice="opt"><option>--total</option></arg>
50
- <arg choice="opt"><option>--ignore-cxx</option></arg>
51
- <arg choice="opt"><option>--ignore-profiling</option></arg>
52
- <arg choice="opt"><option>--ignore-data-rel-ro</option></arg>
53
- <arg choice="opt">
54
- <option>--sort-by</option>
55
- <replaceable>section-column</replaceable>
56
- </arg>
57
-
58
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.synopsis')/*)" />
59
- </cmdsynopsis>
60
- </refsynopsisdiv>
61
-
62
- <refsect1>
63
- <title>Description</title>
64
- <para>
65
- <command>cowstats</command> is a script that analyses ELF object files, results of
66
- compilation of C, C++ or other languages on an Unix system, and reports about the
67
- variables that enter Copy-on-Write sections.
68
- </para>
69
-
70
- <para>
71
- Static variables (initialised and not) and constant pointers on PIC or PIE enabled object
72
- files are emitted in the so-called Copy-on-Write sections, which require copying over
73
- pages from the original ELF executable file to a private resident area of memory at
74
- runtime.
75
- </para>
76
-
77
- <para>
78
- <command>cowstats</command> reports the possible symbols that were emitted in
79
- Copy-on-Write sections so that they can be looked after to see if they can be made
80
- constant and/or removed or reworked.
81
- </para>
82
- </refsect1>
83
-
84
- <refsect1>
85
- <title>Options</title>
86
-
87
- <variablelist>
88
- <varlistentry>
89
- <term><option>-s</option></term>
90
- <term><option>--statistics</option></term>
91
- <listitem>
92
- <para>
93
- Instead of reporting all the variables found in Copy-on-Write sections, only
94
- generate a table showing the sie of data in Copy-on-Write sections per each file,
95
- divided into <constant>.data</constant>, <constant>.bss</constant> and
96
- <constant>.data.rel</constant> (for variables, uninitialised variables, and
97
- relocated variables and constants).
98
- </para>
99
- </listitem>
100
- </varlistentry>
101
-
102
- <varlistentry>
103
- <term><option>-t</option></term>
104
- <term><option>--total</option></term>
105
- <listitem>
106
- <para>
107
- Shows some rough totals for the amount of data in Copy-on-Write sections for the
108
- program, assuming all the object files given are linked in the same executable. This
109
- will also show a rough page-based total, which bases itself on 4K-sized pages.
110
- </para>
111
- </listitem>
112
- </varlistentry>
113
-
114
- <varlistentry>
115
- <term><option>-x</option></term>
116
- <term><option>--ignore-cxx</option></term>
117
- <listitem>
118
- <para>
119
- Ignore some C++ entries that could be considered false positives. C++ object files
120
- will report as CoW data the vtables and typeinfo objects for C++ classes, since they
121
- are actually emitted in Copy-on-Write sections. Since they cannot be moved from
122
- thre, this option hides them on the output, to reduce clutter and noise.
123
- </para>
124
- </listitem>
125
- </varlistentry>
126
-
127
- <varlistentry>
128
- <term><option>-p</option></term>
129
- <term><option>--ignore-profiling</option></term>
130
- <listitem>
131
- <para>
132
- Similarly to C++, also profiling (with <command>gcov</command>) will add some
133
- symbols that would be identified as CoW data. Use this option to avoid reporting
134
- those symbols.
135
- </para>
136
- </listitem>
137
- </varlistentry>
138
-
139
- <varlistentry>
140
- <term><option>-r</option></term>
141
- <term><option>--ignore-data-rel-ro</option></term>
142
- <listitem>
143
- <para>
144
- Don't report constants found in the .data.rel.ro section, and consider it as
145
- non-relocated. This is helpful to reduce the noise when looking for writable data
146
- symbols, or when analysing non-PIC builds.
147
- </para>
148
- </listitem>
149
- </varlistentry>
150
-
151
- <varlistentry>
152
- <term>
153
- <option>-S</option>
154
- <replaceable>section-column</replaceable>
155
- </term>
156
- <term>
157
- <option>--sort-by</option>
158
- <replaceable>section-column</replaceable>
159
- </term>
160
-
161
- <listitem>
162
- <para>
163
- Sort the output of <option>--statistics</option> by the given column. Useful when
164
- looking for which objects have the most hit for one particular CoW problem. The
165
- column can be one of the following section names:
166
- </para>
167
-
168
- <itemizedlist>
169
- <listitem><para>.bss</para></listitem>
170
- <listitem><para>.data</para></listitem>
171
- <listitem><para>.data.rel</para></listitem>
172
- <listitem><para>.data.rel.ro</para></listitem>
173
- </itemizedlist>
174
- </listitem>
175
- </varlistentry>
176
-
177
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.option')/*)" />
178
-
179
- </variablelist>
180
- </refsect1>
181
-
182
- <refsect1>
183
- <title>Bugs</title>
184
-
185
- <para>
186
- <command>cowstats</command> is still an experiment, and is
187
- not yet entirely complete, there are thus a number of bugs
188
- that haven't been discovered or well tested yet.
189
- </para>
190
-
191
- <para>
192
- A known "bug" or misbehaviour is that <command>cowstats</command> cannot know whether
193
- multple object files will be linked together in the same module (executable or shared
194
- object) or not. For this reason the output of <option>--total</option> might not be
195
- consistent with the runtime behaviour of the module itself.
196
- </para>
197
-
198
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.bugpara')/*)" />
199
- </refsect1>
200
-
201
- <refsect1>
202
- <title>See Also</title>
203
- <para>
204
- <citation xl:href="http://blog.flameeyes.eu/">Flameeyes's Weblog</citation>
205
- http://blog.flameeyes.eu/
206
- </para>
207
-
208
- <para>
209
- Related tools:
210
-
211
- <citerefentry>
212
- <refentrytitle>rbelf-size</refentrytitle>
213
- <manvolnum>1</manvolnum>
214
- </citerefentry>,
215
-
216
- <citerefentry>
217
- <refentrytitle>objdump</refentrytitle>
218
- <manvolnum>1</manvolnum>
219
- </citerefentry>.
220
- </para>
221
- </refsect1>
222
- </refentry>
223
- </section>
224
- </article>
225
- <!--
226
- Local Variables:
227
- mode: nxml
228
- mode: auto-fill
229
- mode: flyspell
230
- ispell-local-dictionary: "english"
231
- fill-column: 100
232
- indent-tabs-mode: nil
233
- End:
234
- -->
@@ -1,423 +0,0 @@
1
- <?xml version='1.0'?>
2
- <!--
3
- Copyright © 2011, Diego Elio Pettenò <flameeyes@flameeyes.eu>
4
-
5
- This program is free software; you can redistribute it and/or modify
6
- it under the terms of the GNU General Public License as published by
7
- the Free Software Foundation; either version 2 of the License, or
8
- (at your option) any later version.
9
-
10
- This program is distributed in the hope that it will be useful,
11
- but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- GNU General Public License for more details.
14
-
15
- You should have received a copy of the GNU General Public License
16
- along with this generator; if not, write to the Free Software
17
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
- -->
19
- <article xmlns="http://docbook.org/ns/docbook"
20
- xmlns:xl="http://www.w3.org/1999/xlink"
21
- xmlns:xi="http://www.w3.org/2001/XInclude"
22
- version="5.0" xml:lang="en">
23
- <info>
24
- <title>elfgrep</title>
25
-
26
- <xi:include parse="xml" href="author.xmli" />
27
- </info>
28
-
29
- <section>
30
- <title>Reference</title>
31
-
32
- <refentry>
33
- <info>
34
- <date>November 2011</date>
35
- <productname>ruby-elf</productname>
36
- </info>
37
- <refmeta>
38
- <refentrytitle>elfgrep</refentrytitle>
39
- <manvolnum>1</manvolnum>
40
- </refmeta>
41
- <refnamediv>
42
- <refname>elfgrep</refname>
43
- <refpurpose>Search for symbols matching an expression in ELF files</refpurpose>
44
- </refnamediv>
45
- <refsynopsisdiv>
46
- <cmdsynopsis>
47
- <command>elfgrep</command>
48
-
49
- <arg choice="opt">
50
- <option>--fixed-strings</option>
51
- </arg>
52
-
53
- <arg choice="opt">
54
- <option>--ignore-case</option>
55
- </arg>
56
-
57
- <arg choice="opt">
58
- <option>--match-version</option>
59
- </arg>
60
-
61
- <group choice="opt">
62
- <arg choice="plain">
63
- <option>--match-undefined</option>
64
- </arg>
65
-
66
- <arg choice="plain">
67
- <option>--match-defined</option>
68
- </arg>
69
- </group>
70
-
71
- <arg choice="opt">
72
- <option>--invert-match</option>
73
- </arg>
74
-
75
- <arg choice="opt">
76
- <option>--count</option>
77
- </arg>
78
-
79
- <group choice="opt">
80
- <arg choice="plain">
81
- <option>--files-without-match</option>
82
- </arg>
83
-
84
- <arg choice="plain">
85
- <option>--files-with-matches</option>
86
- </arg>
87
- </group>
88
-
89
- <group choice="opt">
90
- <arg choice="plain">
91
- <option>--with-filename</option>
92
- </arg>
93
-
94
- <arg choice="plain">
95
- <option>--no-filename</option>
96
- </arg>
97
- </group>
98
-
99
- <arg choice="opt">
100
- <option>--null</option>
101
- </arg>
102
-
103
- <arg choice="opt">
104
- <option>--symbol-regexp</option>
105
- </arg>
106
-
107
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.synopsis.options')/*)" />
108
-
109
- <group choice="req">
110
- <arg choice="plain" rep="repeat">
111
- <option>--regexp</option>
112
- <replaceable>PATTERN</replaceable>
113
- </arg>
114
-
115
- <arg choice="plain" rep="repeat">
116
- <option>--file</option>
117
- <replaceable>FILE</replaceable>
118
- </arg>
119
-
120
- <arg choice="plain">
121
- <replaceable>PATTERN</replaceable>
122
- </arg>
123
- </group>
124
-
125
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.synopsis.arguments')/*)" />
126
- </cmdsynopsis>
127
- </refsynopsisdiv>
128
-
129
- <refsect1>
130
- <title>Description</title>
131
- <para>
132
- <command>elfgrep</command> is a simple script that allows to earch for particular symbols
133
- within a file, by matching regular expression on their name. It is insipired by the common
134
- Unix
135
- <citerefentry><refentrytitle>grep</refentrytitle><manvolnum>1</manvolnum></citerefentry>
136
- tool.
137
- </para>
138
- </refsect1>
139
-
140
- <refsect1>
141
- <title>Options</title>
142
-
143
- <refsect2>
144
- <title>Matching Control</title>
145
-
146
- <variablelist>
147
- <varlistentry>
148
- <term><option>-F</option></term>
149
- <term><option>--fixed-strings</option></term>
150
- <listitem>
151
- <para>
152
- Interpret <replaceable>PATTERN</replaceable> as a list of fixed strings, separated
153
- by newlines, any of which is to be matched.
154
- </para>
155
- </listitem>
156
- </varlistentry>
157
-
158
- <varlistentry>
159
- <term>
160
- <option>-e</option>
161
- <replaceable>PATTERN</replaceable>
162
- </term>
163
- <term>
164
- <option>--regexp</option>
165
- <replaceable>PATTERN</replaceable>
166
- </term>
167
-
168
- <listitem>
169
- <para>
170
- Use <replaceable>PATTERN</replaceable> as the pattern. This can be used to specify
171
- multiple search patterns, or to protect a pattern beginning with a hyphen
172
- (<literal>-</literal>).
173
- </para>
174
- </listitem>
175
- </varlistentry>
176
-
177
- <varlistentry>
178
- <term>
179
- <option>-f</option>
180
- <replaceable>FILE</replaceable>
181
- </term>
182
- <term>
183
- <option>--file</option>
184
- <replaceable>FILE</replaceable>
185
- </term>
186
-
187
- <listitem>
188
- <para>
189
- Obtain patterns from <replaceable>FILE</replaceable>, one per line.
190
- </para>
191
-
192
- <note>
193
- <title>Behaviour difference from <application>grep</application> semantics</title>
194
-
195
- <para>
196
- For <application>grep</application>'s <option>--file</option> option, an empty
197
- line (with only a newline character) is a “match all” pattern, while a totally
198
- empty file (zero bytes sized) is a “match none” pattern. This doesn't make much
199
- sense, especially for <application>elfgrep</application>, so both empty lines
200
- and empty files are simply skipped over. Passing <option>--file</option>
201
- pointing to a file that gets totally ignored (zero bytes sized, or a sequence of
202
- newline characters) will still stop <application>elfgrep</application> from
203
- looking for a pattern in the first non-option argument.
204
- </para>
205
- </note>
206
- </listitem>
207
- </varlistentry>
208
-
209
- <varlistentry>
210
- <term><option>-i</option></term>
211
- <term><option>--ignore-case</option></term>
212
- <listitem>
213
- <para>
214
- Ignore case distinction in both the <replaceable>PATTERN</replaceable> and the
215
- symbols' names.
216
- </para>
217
- </listitem>
218
- </varlistentry>
219
-
220
- <varlistentry>
221
- <term><option>-V</option></term>
222
- <term><option>--match-version</option></term>
223
- <listitem>
224
- <para>
225
- Append the ELF version information for the symbol, separated by an @ symbol, before
226
- testing the expression for match. This allows to match only symbols that are defined
227
- with a particular version.
228
- </para>
229
- </listitem>
230
- </varlistentry>
231
-
232
- <varlistentry>
233
- <term><option>-U</option></term>
234
- <term><option>--match-undefined</option></term>
235
- <listitem>
236
- <para>
237
- Report matches on undefined symbols. By default <command>elfgrep</command> will
238
- report matches on both defined and undefined symbols. This switch makes it ignore
239
- matches on defined symbols.
240
- </para>
241
- </listitem>
242
- </varlistentry>
243
-
244
- <varlistentry>
245
- <term><option>-D</option></term>
246
- <term><option>--no-match-defined</option></term>
247
- <listitem>
248
- <para>
249
- Report matches on defined symbols. By default <command>elfgrep</command> will
250
- report matches on both defined and undefined symbols. This switch makes it ignore
251
- matches on undefined symbols.
252
- </para>
253
- </listitem>
254
- </varlistentry>
255
-
256
- <varlistentry>
257
- <term><option>-v</option></term>
258
- <term><option>--invert-match</option></term>
259
- <listitem>
260
- <para>
261
- Invert the sense of matching, to select non-matching symbols. This does not invert
262
- the sense of <option>--no-match-undefined</option> and
263
- <option>--no-match-defined</option>.
264
- </para>
265
- </listitem>
266
- </varlistentry>
267
-
268
- <varlistentry>
269
- <term><option>-s</option></term>
270
- <term><option>--symbol-regexp</option></term>
271
- <listitem>
272
- <para>
273
- Select only those matches that exactly match the whole line.
274
- </para>
275
- </listitem>
276
- </varlistentry>
277
- </variablelist>
278
- </refsect2>
279
-
280
- <refsect2>
281
- <title>Output Control</title>
282
-
283
- <variablelist>
284
-
285
- <varlistentry>
286
- <term><option>-c</option></term>
287
- <term><option>--count</option></term>
288
- <listitem>
289
- <para>
290
- Suppress normal output; instead print a count of matching lines for each input
291
- file. With the <option>--invert-match</option> option, count non-matching lines.
292
- </para>
293
- </listitem>
294
- </varlistentry>
295
-
296
- <varlistentry>
297
- <term><option>-L</option></term>
298
- <term><option>--files-without-match</option></term>
299
-
300
- <listitem>
301
- <para>
302
- Suppress normal output; instead print the name of each input file from which no
303
- output would normally have been printed.
304
- </para>
305
- </listitem>
306
- </varlistentry>
307
-
308
- <varlistentry>
309
- <term><option>-l</option></term>
310
- <term><option>--files-with-matches</option></term>
311
-
312
- <listitem>
313
- <para>
314
- Suppress normal output; instead print the name of each input file from which output
315
- would normally have been printed. The scalling will stop on the first match.
316
- </para>
317
- </listitem>
318
- </varlistentry>
319
-
320
- <varlistentry>
321
- <term><option>-H</option></term>
322
- <term><option>--with-filename</option></term>
323
-
324
- <listitem>
325
- <para>
326
- Print the file name for each match. This is the default when there is more than one
327
- file to search.
328
- </para>
329
- </listitem>
330
- </varlistentry>
331
-
332
- <varlistentry>
333
- <term><option>-h</option></term>
334
- <term><option>--no-filename</option></term>
335
-
336
- <listitem>
337
- <para>
338
- Suppress the prefixing of file names on output. This is the default when there is
339
- only one file to search.
340
- </para>
341
- </listitem>
342
- </varlistentry>
343
-
344
- <varlistentry>
345
- <term><option>-Z</option></term>
346
- <term><option>--null</option></term>
347
-
348
- <listitem>
349
- <para>
350
- Output a zero byte (the ASCII <literal>NUL</literal> character) instead of the
351
- character that normally follows a file name. For example <command>elfgrep
352
- -lZ</command> outputs a zero byte after each file name instead of the usual
353
- newline. This option makes the output unambiguous, even in presence of file names
354
- containing unusual characters like newlines, so that it can be used with commands
355
- like <command>xargs -0</command>.
356
- </para>
357
- </listitem>
358
- </varlistentry>
359
- </variablelist>
360
- </refsect2>
361
-
362
- <refsect2>
363
- <title>General Options</title>
364
-
365
- <variablelist>
366
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.option')/*)" />
367
- </variablelist>
368
- </refsect2>
369
- </refsect1>
370
-
371
- <refsect1>
372
- <title>Bugs and Missing Features</title>
373
-
374
- <para>
375
- By default, <application>elfgrep</application> uses standard Ruby regular expressions,
376
- which are neither the basic or extended regular expressions as implemented by
377
- <citerefentry><refentrytitle>grep</refentrytitle><manvolnum>1</manvolnum></citerefentry>
378
- nor the Perl (or compatible) regular expressions.
379
- </para>
380
-
381
- <xi:include href="common.xmli" xpointer="xpointer(id('filelist.bugpara')/*)" />
382
- </refsect1>
383
-
384
- <refsect1>
385
- <title>See Also</title>
386
- <para>
387
- <citation xl:href="http://blog.flameeyes.eu/">Flameeyes's Weblog</citation>
388
- http://blog.flameeyes.eu/
389
- </para>
390
-
391
- <para>
392
- Related tools:
393
-
394
- <citerefentry>
395
- <refentrytitle>grep</refentrytitle>
396
- <manvolnum>1</manvolnum>
397
- </citerefentry>,
398
-
399
- <citerefentry>
400
- <refentrytitle>rbelf-nm</refentrytitle>
401
- <manvolnum>1</manvolnum>
402
- </citerefentry>.
403
- </para>
404
-
405
- <para>
406
- Lots of description of options above are lifted directly from the
407
- <application>grep</application> man page, to avoid confusing with different
408
- wordings.
409
- </para>
410
- </refsect1>
411
- </refentry>
412
- </section>
413
- </article>
414
- <!--
415
- Local Variables:
416
- mode: nxml
417
- mode: auto-fill
418
- mode: flyspell
419
- ispell-local-dictionary: "english"
420
- fill-column: 100
421
- indent-tabs-mode: nil
422
- End:
423
- -->