BFD 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ #!/usrbin/ruby1.9
2
+
3
+ require 'mkmf'
4
+
5
+ have_library('bfd', 'bfd_init')
6
+
7
+ if RUBY_VERSION =~ /1.8/ then
8
+ $CPPFLAGS += " -DRUBY_18"
9
+ elsif RUBY_VERSION =~ /1.9/ then
10
+ $CPPFLAGS += " -DRUBY_19"
11
+ end
12
+
13
+ create_makefile('BFDext')
14
+
@@ -0,0 +1,266 @@
1
+ #!/usr/bin/env ruby
2
+ # :title: BFD
3
+ =begin rdoc
4
+ =BFD
5
+ <i>Copyright 2010 Thoughtgang <http://www.thoughtgang.org></i>
6
+
7
+ = Gnu Binutils Binary File Descriptor (BFD) support
8
+
9
+ Requires GNU binutils, available at
10
+ http://www.gnu.org/software/binutils .
11
+
12
+ Documentation for GNU BFD is available at
13
+ http://sourceware.org/binutils/docs-2.20/bfd/index.html .
14
+
15
+ All of the original BFD data structures and constants can be found in
16
+ <b>bfd.h</b>, available on Linux installations at <b>/usr/include/bfd.h</b>.
17
+
18
+ == Summary
19
+ A wrapper for libbfd, distributed with GNU binutils.
20
+
21
+ == Example
22
+ require 'BFD'
23
+
24
+ t = Bfd::Target.new('/tmp/a.out')
25
+
26
+
27
+ puts t.arch_info.architecture # Display architecture info
28
+
29
+
30
+ t.sections.each{ |name,sec| puts "%s at 0x%X" % [name, sec.vma] }
31
+ # Display list of sections
32
+
33
+
34
+ t.symbols.each{ |name,sym| puts "%s : 0x%X" % [name, sym.value] }
35
+ # Display list of symbols
36
+
37
+ == Disclaimer
38
+ This is a minimal implementation of BFD, intended only for use as a source
39
+ of input to classes in the Opdis gem. It should not be expected to support
40
+ the entire functionality of the GNU BFD library. In particular, changes made
41
+ to the Ruby BFD objects will not be propagated to on-disk BFD objects.
42
+
43
+ == Contact
44
+ Support:: community@thoughtgang.org
45
+ Project:: http://rubyforge.org/projects/opdis/
46
+ =end
47
+
48
+
49
+ =begin rdoc
50
+ GNU Binary File Description (BFD) support.
51
+ =end
52
+ module Bfd
53
+
54
+ =begin rdoc
55
+ A symbol (usually a named address) in a BFD object.
56
+ Source: <b>typedef struct bfd_symbol</b>.
57
+ =end
58
+
59
+ class Symbol
60
+
61
+ =begin rdoc
62
+ Name of the symbol.
63
+ Source: <b>symbol_info.name</b>.
64
+ =end
65
+ attr_reader :name
66
+
67
+ =begin rdoc
68
+ Symbol type.
69
+ Source: <b>symbol_info.type</b>
70
+ =end
71
+ attr_reader :type
72
+
73
+ =begin rdoc
74
+ Value of symbol.
75
+ Source: <b>symbol_info.value</b>
76
+ =end
77
+ attr_reader :value
78
+
79
+ =begin rdoc
80
+ Bit-flags from bfd_symbol type definition.
81
+ Source: <b>bfd_symbol.raw_flags</b>
82
+ =end
83
+ attr_reader :raw_flags
84
+
85
+ =begin rdoc
86
+ Name of section containing symbol.
87
+ Source: <b>bfd_symbol.section.name</b>
88
+ =end
89
+ attr_reader :section
90
+
91
+ =begin rdoc
92
+ 'static' or 'dynamic'.
93
+ Source: Table containing symbol.
94
+ =end
95
+ attr_reader :binding
96
+
97
+ # Dynamic binding
98
+ DYNAMIC="dynamic"
99
+ # Static binding
100
+ STATIC="static"
101
+
102
+ end
103
+
104
+ =begin rdoc
105
+ A section (usually a container for code, data, or metadata) in a BFD object.
106
+ Source: <b>typedef struct bfd_section</b>.
107
+ =end
108
+ class Section
109
+
110
+ =begin rdoc
111
+ ID of section.
112
+ Source: <b>bfd_section.id</b>
113
+ =end
114
+ attr_reader :id
115
+
116
+ =begin rdoc
117
+ Name of section.
118
+ Source: <b>bfd_section.name</b>
119
+ =end
120
+ attr_reader :name
121
+
122
+ =begin rdoc
123
+ Index of section.
124
+ Source: <b>bfd_section.index</b>
125
+ =end
126
+ attr_reader :index
127
+
128
+ =begin rdoc
129
+ Section flags.
130
+ Source: <b>bfd_section.raw_flags</b>
131
+ =end
132
+ attr_reader :raw_flags
133
+
134
+ =begin rdoc
135
+ Virtual Memory (Load) address of section.
136
+ Source: <b>bfd_section.vma</b>
137
+ =end
138
+ attr_reader :vma
139
+
140
+ =begin rdoc
141
+ Address of section in ROM image.
142
+ Source: <b>bfd_section.lma</b>
143
+ =end
144
+ attr_reader :lma
145
+
146
+ =begin rdoc
147
+ Size of section.
148
+ Source: <b>bfd_section_size()</b>
149
+ =end
150
+ attr_reader :size
151
+
152
+ =begin rdoc
153
+ Alignment of section, as an exponent of 2 (e.g. 3 means
154
+ aligned to 2^3 or 8 bytes).
155
+ Source: <b>bfd_section.alignment_power</b>
156
+ =end
157
+ attr_reader :alignment_power
158
+
159
+ =begin rdoc
160
+ Offset in file where section appears.
161
+ Source: <b>bfd_section.filepos</b>
162
+ =end
163
+ attr_reader :file_pos
164
+
165
+ =begin rdoc
166
+ Binary (raw) contents of section.
167
+ Source: <b>bfd_section.contents</b>
168
+ =end
169
+ attr_reader :contents
170
+
171
+ end
172
+
173
+ =begin rdoc
174
+ A Binary File Descriptor for a target.
175
+ Source: <b>struct bfd</b>.
176
+ =end
177
+ class Target
178
+
179
+ =begin rdoc
180
+ ID of target.
181
+ Source: <b>bfd.id</b>
182
+ =end
183
+ attr_reader :id
184
+
185
+ =begin rdoc
186
+ Filename of target.
187
+ Source: <b>bfd.filename</b>
188
+ =end
189
+ attr_reader :filename
190
+
191
+ =begin rdoc
192
+ Format (object, archive, core) of target.
193
+ Source: <b>bfd.format</b>
194
+ =end
195
+ attr_reader :format
196
+
197
+ =begin rdoc
198
+ Flags for BFD format.
199
+ Source: <b>bfd.flags</b>
200
+ =end
201
+ attr_reader :raw_format_flags
202
+
203
+ =begin rdoc
204
+ Entry point (first instruction) of BFD if an executable.
205
+ Source: <b>bfd.start_address</b>
206
+ =end
207
+ attr_reader :start_address
208
+
209
+ =begin rdoc
210
+ Architecture information for target.
211
+ This is a hash containing the following values:
212
+ * bits_per_word
213
+ * bits_per_address
214
+ * bits_per_byte
215
+ * architecture
216
+ * section_align_power
217
+ Source: <b>bfd.arch_info</b> (see <b>struct bfd_arch_info</b>)
218
+ =end
219
+ attr_reader :arch_info
220
+
221
+ =begin rdoc
222
+ Flavour of BFD file, e.g. ELF, COFF, AOUT, etc.
223
+ Source: <b>bfd.flavour</b>
224
+ =end
225
+ attr_reader :raw_flavour
226
+
227
+ =begin rdoc
228
+ Kind of target, e.g. elf64-x86-64.
229
+ Source: <b>bfd_target.name</b>
230
+ =end
231
+ attr_reader :type
232
+
233
+ =begin rdoc
234
+ Flags for target type.
235
+ Source: <b>bfd_target.object_flags</b>
236
+ =end
237
+ attr_reader :raw_type_flags
238
+
239
+ =begin rdoc
240
+ Endianness (big or little) of target.
241
+ Source: <b>bfd_target.byteorder</b>
242
+ =end
243
+ attr_reader :endian
244
+
245
+ =begin rdoc
246
+ Hash of sections names to section objects.
247
+ Source: <b>bfd.sections</b>
248
+ =end
249
+ attr_reader :sections
250
+
251
+ =begin rdoc
252
+ Hash of symbol names to symbol targets.
253
+ Includes both static and dynamic symbols.
254
+ Source: <b>bfd_canonicalize_symtab()</b> and
255
+ <b>bfd_canonicalize_dynamic_symtab()</b>.
256
+ =end
257
+ attr_reader :symbols
258
+
259
+ =begin rdoc
260
+ Create a new Bfd::Target object for <i>target</i>, which can be a String
261
+ containing a file path, or an IO object for an already-loaded file.
262
+ Currently no options are supported via args.
263
+ =end
264
+ def initialize(target, args) # :yields: bfd
265
+ end
266
+ end
@@ -0,0 +1,17 @@
1
+ /* ruby_compat.c
2
+ * Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
3
+ * Written by TG Community Developers <community@thoughtgang.org>
4
+ * Released under the GNU Public License, version 3.
5
+ * See http://www.gnu.org/licenses/gpl.txt for details.
6
+ */
7
+
8
+ #ifndef RUBY_19
9
+
10
+ #include <ruby.h>
11
+
12
+ VALUE Bfd_rb_hash_lookup2( VALUE hash, VALUE key, VALUE def ) {
13
+ VALUE v = rb_hash_lookup(hash, key);
14
+ return (v == Qnil) ? def : v;
15
+ }
16
+
17
+ #endif
@@ -0,0 +1,28 @@
1
+ /* ruby_compat.h
2
+ * Macros to make ruby1.8 look like ruby1.9.
3
+ * Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
4
+ * Written by TG Community Developers <community@thoughtgang.org>
5
+ * Released under the GNU Public License, version 3.
6
+ * See http://www.gnu.org/licenses/gpl.txt for details.
7
+ */
8
+
9
+ #ifndef RUBY_COMPAT_H
10
+ #define RUBY_COMPAT_H
11
+
12
+ #ifdef RUBY_18
13
+ #include <stdarg.h>
14
+ #define rb_str_new_cstr(arg) rb_str_new2(arg)
15
+
16
+ VALUE Bfd_rb_hash_lookup2(VALUE, VALUE, VALUE);
17
+ #define rb_hash_lookup2( a1, a2, a3 ) Bfd_rb_hash_lookup2(a1, a2, a3)
18
+
19
+ #if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG)
20
+ # define SIZET2NUM(v) ULL2NUM(v)
21
+ #elif SIZEOF_SIZE_T == SIZEOF_LONG
22
+ # define SIZET2NUM(v) ULONG2NUM(v)
23
+ #else
24
+ # define SIZET2NUM(v) UINT2NUM(v)
25
+ #endif
26
+
27
+ #endif
28
+ #endif
@@ -0,0 +1,597 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
3
+ # Unit test for BFD module
4
+
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+ require 'BFD'
8
+
9
+ class TC_BfdModule < Test::Unit::TestCase
10
+
11
+ # Note: this is an x86-64 GCC compilation of the very basic C program
12
+ # int main(void) { return 666; }
13
+ TARGET_BUF = %w{
14
+ 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
15
+ 02 00 3e 00 01 00 00 00 e0 03 40 00 00 00 00 00
16
+ 40 00 00 00 00 00 00 00 40 11 00 00 00 00 00 00
17
+ 00 00 00 00 40 00 38 00 09 00 40 00 1f 00 1c 00
18
+ 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00
19
+ 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00
20
+ f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00
21
+ 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00
22
+ 38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00
23
+ 38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00
24
+ 1c 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
25
+ 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00
26
+ 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00
27
+ 54 06 00 00 00 00 00 00 54 06 00 00 00 00 00 00
28
+ 00 00 20 00 00 00 00 00 01 00 00 00 06 00 00 00
29
+ 18 0e 00 00 00 00 00 00 18 0e 60 00 00 00 00 00
30
+ 18 0e 60 00 00 00 00 00 00 02 00 00 00 00 00 00
31
+ 10 02 00 00 00 00 00 00 00 00 20 00 00 00 00 00
32
+ 02 00 00 00 06 00 00 00 40 0e 00 00 00 00 00 00
33
+ 40 0e 60 00 00 00 00 00 40 0e 60 00 00 00 00 00
34
+ a0 01 00 00 00 00 00 00 a0 01 00 00 00 00 00 00
35
+ 08 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00
36
+ 54 02 00 00 00 00 00 00 54 02 40 00 00 00 00 00
37
+ 54 02 40 00 00 00 00 00 44 00 00 00 00 00 00 00
38
+ 44 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
39
+ 50 e5 74 64 04 00 00 00 bc 05 00 00 00 00 00 00
40
+ bc 05 40 00 00 00 00 00 bc 05 40 00 00 00 00 00
41
+ 24 00 00 00 00 00 00 00 24 00 00 00 00 00 00 00
42
+ 04 00 00 00 00 00 00 00 51 e5 74 64 06 00 00 00
43
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
44
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
45
+ 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
46
+ 52 e5 74 64 04 00 00 00 18 0e 00 00 00 00 00 00
47
+ 18 0e 60 00 00 00 00 00 18 0e 60 00 00 00 00 00
48
+ e8 01 00 00 00 00 00 00 e8 01 00 00 00 00 00 00
49
+ 01 00 00 00 00 00 00 00 2f 6c 69 62 36 34 2f 6c
50
+ 64 2d 6c 69 6e 75 78 2d 78 38 36 2d 36 34 2e 73
51
+ 6f 2e 32 00 04 00 00 00 10 00 00 00 01 00 00 00
52
+ 47 4e 55 00 00 00 00 00 02 00 00 00 06 00 00 00
53
+ 0f 00 00 00 04 00 00 00 14 00 00 00 03 00 00 00
54
+ 47 4e 55 00 e0 01 67 5d 37 02 90 5f c1 b1 93 56
55
+ 2e ff 8c c6 13 be 47 5e 01 00 00 00 03 00 00 00
56
+ 02 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
57
+ 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
58
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
59
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60
+ 00 00 00 00 00 00 00 00 01 00 00 00 20 00 00 00
61
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
62
+ 1a 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00
63
+ 00 00 00 00 00 00 00 00 00 5f 5f 67 6d 6f 6e 5f
64
+ 73 74 61 72 74 5f 5f 00 6c 69 62 63 2e 73 6f 2e
65
+ 36 00 5f 5f 6c 69 62 63 5f 73 74 61 72 74 5f 6d
66
+ 61 69 6e 00 47 4c 49 42 43 5f 32 2e 32 2e 35 00
67
+ 00 00 00 00 02 00 00 00 01 00 01 00 10 00 00 00
68
+ 10 00 00 00 00 00 00 00 75 1a 69 09 00 00 02 00
69
+ 2c 00 00 00 00 00 00 00 e0 0f 60 00 00 00 00 00
70
+ 06 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
71
+ 00 10 60 00 00 00 00 00 07 00 00 00 02 00 00 00
72
+ 00 00 00 00 00 00 00 00 48 83 ec 08 e8 5b 00 00
73
+ 00 e8 ea 00 00 00 e8 b5 01 00 00 48 83 c4 08 c3
74
+ ff 35 2a 0c 20 00 ff 25 2c 0c 20 00 0f 1f 40 00
75
+ ff 25 2a 0c 20 00 68 00 00 00 00 e9 e0 ff ff ff
76
+ 31 ed 49 89 d1 5e 48 89 e2 48 83 e4 f0 50 54 49
77
+ c7 c0 d0 04 40 00 48 c7 c1 e0 04 40 00 48 c7 c7
78
+ c4 04 40 00 e8 c7 ff ff ff f4 90 90 48 83 ec 08
79
+ 48 8b 05 c9 0b 20 00 48 85 c0 74 02 ff d0 48 83
80
+ c4 08 c3 90 90 90 90 90 90 90 90 90 90 90 90 90
81
+ 55 48 89 e5 53 48 83 ec 08 80 3d d8 0b 20 00 00
82
+ 75 4b bb 30 0e 60 00 48 8b 05 d2 0b 20 00 48 81
83
+ eb 28 0e 60 00 48 c1 fb 03 48 83 eb 01 48 39 d8
84
+ 73 24 66 0f 1f 44 00 00 48 83 c0 01 48 89 05 ad
85
+ 0b 20 00 ff 14 c5 28 0e 60 00 48 8b 05 9f 0b 20
86
+ 00 48 39 d8 72 e2 c6 05 8b 0b 20 00 01 48 83 c4
87
+ 08 5b c9 c3 66 66 66 2e 0f 1f 84 00 00 00 00 00
88
+ 55 48 83 3d 8f 09 20 00 00 48 89 e5 74 12 b8 00
89
+ 00 00 00 48 85 c0 74 08 bf 38 0e 60 00 c9 ff e0
90
+ c9 c3 90 90 b8 9a 02 00 00 c3 90 90 90 90 90 90
91
+ f3 c3 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00
92
+ 48 89 6c 24 d8 4c 89 64 24 e0 48 8d 2d 23 09 20
93
+ 00 4c 8d 25 1c 09 20 00 4c 89 6c 24 e8 4c 89 74
94
+ 24 f0 4c 89 7c 24 f8 48 89 5c 24 d0 48 83 ec 38
95
+ 4c 29 e5 41 89 fd 49 89 f6 48 c1 fd 03 49 89 d7
96
+ e8 83 fe ff ff 48 85 ed 74 1c 31 db 0f 1f 40 00
97
+ 4c 89 fa 4c 89 f6 44 89 ef 41 ff 14 dc 48 83 c3
98
+ 01 48 39 eb 72 ea 48 8b 5c 24 08 48 8b 6c 24 10
99
+ 4c 8b 64 24 18 4c 8b 6c 24 20 4c 8b 74 24 28 4c
100
+ 8b 7c 24 30 48 83 c4 38 c3 90 90 90 90 90 90 90
101
+ 55 48 89 e5 53 48 83 ec 08 48 8b 05 98 08 20 00
102
+ 48 83 f8 ff 74 19 bb 18 0e 60 00 0f 1f 44 00 00
103
+ 48 83 eb 08 ff d0 48 8b 03 48 83 f8 ff 75 f1 48
104
+ 83 c4 08 5b c9 c3 90 90 48 83 ec 08 e8 7f fe ff
105
+ ff 48 83 c4 08 c3 00 00 01 00 02 00 01 1b 03 3b
106
+ 20 00 00 00 03 00 00 00 08 ff ff ff 3c 00 00 00
107
+ 14 ff ff ff 54 00 00 00 24 ff ff ff 6c 00 00 00
108
+ 14 00 00 00 00 00 00 00 01 7a 52 00 01 78 10 01
109
+ 1b 0c 07 08 90 01 00 00 14 00 00 00 1c 00 00 00
110
+ c4 fe ff ff 06 00 00 00 00 00 00 00 00 00 00 00
111
+ 14 00 00 00 34 00 00 00 b8 fe ff ff 02 00 00 00
112
+ 00 00 00 00 00 00 00 00 24 00 00 00 4c 00 00 00
113
+ b0 fe ff ff 89 00 00 00 00 51 8c 05 86 06 5f 0e
114
+ 40 46 83 07 8f 02 8e 03 8d 04 00 00 00 00 00 00
115
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
116
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
117
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
118
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
119
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
120
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
121
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
122
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
123
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
124
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
125
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
126
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
127
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
128
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
129
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
130
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
131
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
132
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
133
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
134
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
135
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
136
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
137
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
138
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
139
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
140
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
141
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
142
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
143
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
144
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
145
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
146
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
147
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
148
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
149
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
150
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
151
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
152
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
153
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
154
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
155
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
156
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
157
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
158
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
159
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
160
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
161
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
162
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
163
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
164
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
165
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
166
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
167
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
168
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
169
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
170
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
171
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
172
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
173
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
174
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
175
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
176
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
177
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
178
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
179
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
180
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
181
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
182
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
183
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
184
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
185
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
186
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
187
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
188
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
189
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
190
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
191
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
192
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
193
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
194
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
195
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
196
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
197
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
198
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
199
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
200
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
201
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
202
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
203
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
204
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
205
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
206
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
207
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
208
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
209
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
210
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
211
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
212
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
213
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
214
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
215
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
216
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
217
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
218
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
219
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
220
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
221
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
222
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
223
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
224
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
225
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
226
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
227
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
228
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
229
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
230
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
231
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
232
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
233
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
234
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
235
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
236
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
237
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
238
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
239
+ 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff
240
+ 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff
241
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
242
+ 01 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
243
+ 0c 00 00 00 00 00 00 00 a8 03 40 00 00 00 00 00
244
+ 0d 00 00 00 00 00 00 00 a8 05 40 00 00 00 00 00
245
+ 04 00 00 00 00 00 00 00 98 02 40 00 00 00 00 00
246
+ f5 fe ff 6f 00 00 00 00 b0 02 40 00 00 00 00 00
247
+ 05 00 00 00 00 00 00 00 18 03 40 00 00 00 00 00
248
+ 06 00 00 00 00 00 00 00 d0 02 40 00 00 00 00 00
249
+ 0a 00 00 00 00 00 00 00 38 00 00 00 00 00 00 00
250
+ 0b 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
251
+ 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
252
+ 03 00 00 00 00 00 00 00 e8 0f 60 00 00 00 00 00
253
+ 02 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
254
+ 14 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00
255
+ 17 00 00 00 00 00 00 00 90 03 40 00 00 00 00 00
256
+ 07 00 00 00 00 00 00 00 78 03 40 00 00 00 00 00
257
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
258
+ 09 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
259
+ fe ff ff 6f 00 00 00 00 58 03 40 00 00 00 00 00
260
+ ff ff ff 6f 00 00 00 00 01 00 00 00 00 00 00 00
261
+ f0 ff ff 6f 00 00 00 00 50 03 40 00 00 00 00 00
262
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
263
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
264
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
265
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
266
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
267
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
268
+ 00 00 00 00 00 00 00 00 40 0e 60 00 00 00 00 00
269
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
270
+ d6 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
271
+ 00 00 00 00 00 00 00 00 47 43 43 3a 20 28 55 62
272
+ 75 6e 74 75 20 34 2e 34 2e 33 2d 34 75 62 75 6e
273
+ 74 75 35 29 20 34 2e 34 2e 33 00 00 2e 73 79 6d
274
+ 74 61 62 00 2e 73 74 72 74 61 62 00 2e 73 68 73
275
+ 74 72 74 61 62 00 2e 69 6e 74 65 72 70 00 2e 6e
276
+ 6f 74 65 2e 41 42 49 2d 74 61 67 00 2e 6e 6f 74
277
+ 65 2e 67 6e 75 2e 62 75 69 6c 64 2d 69 64 00 2e
278
+ 67 6e 75 2e 68 61 73 68 00 2e 64 79 6e 73 79 6d
279
+ 00 2e 64 79 6e 73 74 72 00 2e 67 6e 75 2e 76 65
280
+ 72 73 69 6f 6e 00 2e 67 6e 75 2e 76 65 72 73 69
281
+ 6f 6e 5f 72 00 2e 72 65 6c 61 2e 64 79 6e 00 2e
282
+ 72 65 6c 61 2e 70 6c 74 00 2e 69 6e 69 74 00 2e
283
+ 74 65 78 74 00 2e 66 69 6e 69 00 2e 72 6f 64 61
284
+ 74 61 00 2e 65 68 5f 66 72 61 6d 65 5f 68 64 72
285
+ 00 2e 65 68 5f 66 72 61 6d 65 00 2e 63 74 6f 72
286
+ 73 00 2e 64 74 6f 72 73 00 2e 6a 63 72 00 2e 64
287
+ 79 6e 61 6d 69 63 00 2e 67 6f 74 00 2e 67 6f 74
288
+ 2e 70 6c 74 00 2e 64 61 74 61 00 2e 62 73 73 00
289
+ 2e 63 6f 6d 6d 65 6e 74 00 00 00 00 00 00 00 00
290
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
291
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
292
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
293
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
294
+ 1b 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00
295
+ 38 02 40 00 00 00 00 00 38 02 00 00 00 00 00 00
296
+ 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
297
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
298
+ 23 00 00 00 07 00 00 00 02 00 00 00 00 00 00 00
299
+ 54 02 40 00 00 00 00 00 54 02 00 00 00 00 00 00
300
+ 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
301
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
302
+ 31 00 00 00 07 00 00 00 02 00 00 00 00 00 00 00
303
+ 74 02 40 00 00 00 00 00 74 02 00 00 00 00 00 00
304
+ 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
305
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
306
+ 48 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00
307
+ 98 02 40 00 00 00 00 00 98 02 00 00 00 00 00 00
308
+ 18 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
309
+ 08 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
310
+ 44 00 00 00 f6 ff ff 6f 02 00 00 00 00 00 00 00
311
+ b0 02 40 00 00 00 00 00 b0 02 00 00 00 00 00 00
312
+ 1c 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
313
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
314
+ 4e 00 00 00 0b 00 00 00 02 00 00 00 00 00 00 00
315
+ d0 02 40 00 00 00 00 00 d0 02 00 00 00 00 00 00
316
+ 48 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00
317
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
318
+ 56 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00
319
+ 18 03 40 00 00 00 00 00 18 03 00 00 00 00 00 00
320
+ 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
321
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
322
+ 5e 00 00 00 ff ff ff 6f 02 00 00 00 00 00 00 00
323
+ 50 03 40 00 00 00 00 00 50 03 00 00 00 00 00 00
324
+ 06 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
325
+ 02 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00
326
+ 6b 00 00 00 fe ff ff 6f 02 00 00 00 00 00 00 00
327
+ 58 03 40 00 00 00 00 00 58 03 00 00 00 00 00 00
328
+ 20 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00
329
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
330
+ 7a 00 00 00 04 00 00 00 02 00 00 00 00 00 00 00
331
+ 78 03 40 00 00 00 00 00 78 03 00 00 00 00 00 00
332
+ 18 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
333
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
334
+ 84 00 00 00 04 00 00 00 02 00 00 00 00 00 00 00
335
+ 90 03 40 00 00 00 00 00 90 03 00 00 00 00 00 00
336
+ 18 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00
337
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
338
+ 8e 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
339
+ a8 03 40 00 00 00 00 00 a8 03 00 00 00 00 00 00
340
+ 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
341
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
342
+ 89 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
343
+ c0 03 40 00 00 00 00 00 c0 03 00 00 00 00 00 00
344
+ 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
345
+ 04 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
346
+ 94 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
347
+ e0 03 40 00 00 00 00 00 e0 03 00 00 00 00 00 00
348
+ c8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
349
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
350
+ 9a 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
351
+ a8 05 40 00 00 00 00 00 a8 05 00 00 00 00 00 00
352
+ 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
353
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
354
+ a0 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00
355
+ b8 05 40 00 00 00 00 00 b8 05 00 00 00 00 00 00
356
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
357
+ 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
358
+ a8 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00
359
+ bc 05 40 00 00 00 00 00 bc 05 00 00 00 00 00 00
360
+ 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
361
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
362
+ b6 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00
363
+ e0 05 40 00 00 00 00 00 e0 05 00 00 00 00 00 00
364
+ 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
365
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
366
+ c0 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
367
+ 18 0e 60 00 00 00 00 00 18 0e 00 00 00 00 00 00
368
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
369
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
370
+ c7 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
371
+ 28 0e 60 00 00 00 00 00 28 0e 00 00 00 00 00 00
372
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
373
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
374
+ ce 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
375
+ 38 0e 60 00 00 00 00 00 38 0e 00 00 00 00 00 00
376
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
377
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
378
+ d3 00 00 00 06 00 00 00 03 00 00 00 00 00 00 00
379
+ 40 0e 60 00 00 00 00 00 40 0e 00 00 00 00 00 00
380
+ a0 01 00 00 00 00 00 00 07 00 00 00 00 00 00 00
381
+ 08 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
382
+ dc 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
383
+ e0 0f 60 00 00 00 00 00 e0 0f 00 00 00 00 00 00
384
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
385
+ 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
386
+ e1 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
387
+ e8 0f 60 00 00 00 00 00 e8 0f 00 00 00 00 00 00
388
+ 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
389
+ 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
390
+ ea 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
391
+ 08 10 60 00 00 00 00 00 08 10 00 00 00 00 00 00
392
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
393
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
394
+ f0 00 00 00 08 00 00 00 03 00 00 00 00 00 00 00
395
+ 18 10 60 00 00 00 00 00 18 10 00 00 00 00 00 00
396
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
397
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
398
+ f5 00 00 00 01 00 00 00 30 00 00 00 00 00 00 00
399
+ 00 00 00 00 00 00 00 00 18 10 00 00 00 00 00 00
400
+ 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
401
+ 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
402
+ 11 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00
403
+ 00 00 00 00 00 00 00 00 3b 10 00 00 00 00 00 00
404
+ fe 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
405
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
406
+ 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
407
+ 00 00 00 00 00 00 00 00 00 19 00 00 00 00 00 00
408
+ 00 06 00 00 00 00 00 00 1e 00 00 00 2f 00 00 00
409
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
410
+ 09 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00
411
+ 00 00 00 00 00 00 00 00 00 1f 00 00 00 00 00 00
412
+ db 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
413
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
414
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
415
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 01 00
416
+ 38 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
417
+ 00 00 00 00 03 00 02 00 54 02 40 00 00 00 00 00
418
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 03 00
419
+ 74 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
420
+ 00 00 00 00 03 00 04 00 98 02 40 00 00 00 00 00
421
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 05 00
422
+ b0 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
423
+ 00 00 00 00 03 00 06 00 d0 02 40 00 00 00 00 00
424
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 07 00
425
+ 18 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
426
+ 00 00 00 00 03 00 08 00 50 03 40 00 00 00 00 00
427
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 09 00
428
+ 58 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
429
+ 00 00 00 00 03 00 0a 00 78 03 40 00 00 00 00 00
430
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0b 00
431
+ 90 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
432
+ 00 00 00 00 03 00 0c 00 a8 03 40 00 00 00 00 00
433
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0d 00
434
+ c0 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
435
+ 00 00 00 00 03 00 0e 00 e0 03 40 00 00 00 00 00
436
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0f 00
437
+ a8 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00
438
+ 00 00 00 00 03 00 10 00 b8 05 40 00 00 00 00 00
439
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 11 00
440
+ bc 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00
441
+ 00 00 00 00 03 00 12 00 e0 05 40 00 00 00 00 00
442
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 13 00
443
+ 18 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
444
+ 00 00 00 00 03 00 14 00 28 0e 60 00 00 00 00 00
445
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 15 00
446
+ 38 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
447
+ 00 00 00 00 03 00 16 00 40 0e 60 00 00 00 00 00
448
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 17 00
449
+ e0 0f 60 00 00 00 00 00 00 00 00 00 00 00 00 00
450
+ 00 00 00 00 03 00 18 00 e8 0f 60 00 00 00 00 00
451
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 19 00
452
+ 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
453
+ 00 00 00 00 03 00 1a 00 18 10 60 00 00 00 00 00
454
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 1b 00
455
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
456
+ 01 00 00 00 02 00 0e 00 0c 04 40 00 00 00 00 00
457
+ 00 00 00 00 00 00 00 00 11 00 00 00 04 00 f1 ff
458
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
459
+ 1c 00 00 00 01 00 13 00 18 0e 60 00 00 00 00 00
460
+ 00 00 00 00 00 00 00 00 2a 00 00 00 01 00 14 00
461
+ 28 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
462
+ 38 00 00 00 01 00 15 00 38 0e 60 00 00 00 00 00
463
+ 00 00 00 00 00 00 00 00 45 00 00 00 02 00 0e 00
464
+ 30 04 40 00 00 00 00 00 00 00 00 00 00 00 00 00
465
+ 5b 00 00 00 01 00 1a 00 18 10 60 00 00 00 00 00
466
+ 01 00 00 00 00 00 00 00 6a 00 00 00 01 00 1a 00
467
+ 20 10 60 00 00 00 00 00 08 00 00 00 00 00 00 00
468
+ 78 00 00 00 02 00 0e 00 a0 04 40 00 00 00 00 00
469
+ 00 00 00 00 00 00 00 00 11 00 00 00 04 00 f1 ff
470
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
471
+ 84 00 00 00 01 00 13 00 20 0e 60 00 00 00 00 00
472
+ 00 00 00 00 00 00 00 00 91 00 00 00 01 00 12 00
473
+ 50 06 40 00 00 00 00 00 00 00 00 00 00 00 00 00
474
+ 9f 00 00 00 01 00 15 00 38 0e 60 00 00 00 00 00
475
+ 00 00 00 00 00 00 00 00 ab 00 00 00 02 00 0e 00
476
+ 70 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00
477
+ c1 00 00 00 04 00 f1 ff 00 00 00 00 00 00 00 00
478
+ 00 00 00 00 00 00 00 00 c5 00 00 00 01 02 18 00
479
+ e8 0f 60 00 00 00 00 00 00 00 00 00 00 00 00 00
480
+ db 00 00 00 00 02 13 00 14 0e 60 00 00 00 00 00
481
+ 00 00 00 00 00 00 00 00 ec 00 00 00 00 02 13 00
482
+ 14 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
483
+ ff 00 00 00 01 02 16 00 40 0e 60 00 00 00 00 00
484
+ 00 00 00 00 00 00 00 00 08 01 00 00 20 00 19 00
485
+ 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
486
+ 13 01 00 00 12 00 0e 00 d0 04 40 00 00 00 00 00
487
+ 02 00 00 00 00 00 00 00 23 01 00 00 12 00 0e 00
488
+ e0 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
489
+ 2a 01 00 00 20 00 00 00 00 00 00 00 00 00 00 00
490
+ 00 00 00 00 00 00 00 00 39 01 00 00 20 00 00 00
491
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
492
+ 4d 01 00 00 12 00 0f 00 a8 05 40 00 00 00 00 00
493
+ 00 00 00 00 00 00 00 00 53 01 00 00 12 00 00 00
494
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
495
+ 72 01 00 00 11 00 10 00 b8 05 40 00 00 00 00 00
496
+ 04 00 00 00 00 00 00 00 81 01 00 00 10 00 19 00
497
+ 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
498
+ 8e 01 00 00 11 02 19 00 10 10 60 00 00 00 00 00
499
+ 00 00 00 00 00 00 00 00 9b 01 00 00 11 02 14 00
500
+ 30 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
501
+ a8 01 00 00 12 00 0e 00 e0 04 40 00 00 00 00 00
502
+ 89 00 00 00 00 00 00 00 b8 01 00 00 10 00 f1 ff
503
+ 18 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
504
+ c4 01 00 00 10 00 f1 ff 28 10 60 00 00 00 00 00
505
+ 00 00 00 00 00 00 00 00 c9 01 00 00 10 00 f1 ff
506
+ 18 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
507
+ d0 01 00 00 12 00 0e 00 c4 04 40 00 00 00 00 00
508
+ 06 00 00 00 00 00 00 00 d5 01 00 00 12 00 0c 00
509
+ a8 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
510
+ 00 63 61 6c 6c 5f 67 6d 6f 6e 5f 73 74 61 72 74
511
+ 00 63 72 74 73 74 75 66 66 2e 63 00 5f 5f 43 54
512
+ 4f 52 5f 4c 49 53 54 5f 5f 00 5f 5f 44 54 4f 52
513
+ 5f 4c 49 53 54 5f 5f 00 5f 5f 4a 43 52 5f 4c 49
514
+ 53 54 5f 5f 00 5f 5f 64 6f 5f 67 6c 6f 62 61 6c
515
+ 5f 64 74 6f 72 73 5f 61 75 78 00 63 6f 6d 70 6c
516
+ 65 74 65 64 2e 37 33 38 32 00 64 74 6f 72 5f 69
517
+ 64 78 2e 37 33 38 34 00 66 72 61 6d 65 5f 64 75
518
+ 6d 6d 79 00 5f 5f 43 54 4f 52 5f 45 4e 44 5f 5f
519
+ 00 5f 5f 46 52 41 4d 45 5f 45 4e 44 5f 5f 00 5f
520
+ 5f 4a 43 52 5f 45 4e 44 5f 5f 00 5f 5f 64 6f 5f
521
+ 67 6c 6f 62 61 6c 5f 63 74 6f 72 73 5f 61 75 78
522
+ 00 74 2e 63 00 5f 47 4c 4f 42 41 4c 5f 4f 46 46
523
+ 53 45 54 5f 54 41 42 4c 45 5f 00 5f 5f 69 6e 69
524
+ 74 5f 61 72 72 61 79 5f 65 6e 64 00 5f 5f 69 6e
525
+ 69 74 5f 61 72 72 61 79 5f 73 74 61 72 74 00 5f
526
+ 44 59 4e 41 4d 49 43 00 64 61 74 61 5f 73 74 61
527
+ 72 74 00 5f 5f 6c 69 62 63 5f 63 73 75 5f 66 69
528
+ 6e 69 00 5f 73 74 61 72 74 00 5f 5f 67 6d 6f 6e
529
+ 5f 73 74 61 72 74 5f 5f 00 5f 4a 76 5f 52 65 67
530
+ 69 73 74 65 72 43 6c 61 73 73 65 73 00 5f 66 69
531
+ 6e 69 00 5f 5f 6c 69 62 63 5f 73 74 61 72 74 5f
532
+ 6d 61 69 6e 40 40 47 4c 49 42 43 5f 32 2e 32 2e
533
+ 35 00 5f 49 4f 5f 73 74 64 69 6e 5f 75 73 65 64
534
+ 00 5f 5f 64 61 74 61 5f 73 74 61 72 74 00 5f 5f
535
+ 64 73 6f 5f 68 61 6e 64 6c 65 00 5f 5f 44 54 4f
536
+ 52 5f 45 4e 44 5f 5f 00 5f 5f 6c 69 62 63 5f 63
537
+ 73 75 5f 69 6e 69 74 00 5f 5f 62 73 73 5f 73 74
538
+ 61 72 74 00 5f 65 6e 64 00 5f 65 64 61 74 61 00
539
+ 6d 61 69 6e 00 5f 69 6e 69 74 00
540
+ }.collect{ |i| i.hex }.pack('C*')
541
+
542
+ def test_buffer
543
+ Bfd::Target.from_buffer( TARGET_BUF ) do |tgt|
544
+
545
+ # These values were obtained by running BFD on the original file
546
+ assert_equal( 'object', tgt.format )
547
+ assert_equal( 'elf', tgt.flavour )
548
+ assert_equal( 'elf64-x86-64', tgt.type )
549
+ assert_equal( 'i386:x86-64', tgt.arch_info[:architecture] )
550
+ assert_equal( 64, tgt.arch_info[:bits_per_word] )
551
+ assert_equal( 64, tgt.arch_info[:bits_per_address] )
552
+ assert_equal( 8, tgt.arch_info[:bits_per_byte] )
553
+ assert_equal( 3, tgt.arch_info[:section_align_power] )
554
+
555
+ assert_equal( 27, tgt.sections.length )
556
+ assert_equal( '.bss', tgt.sections.keys.sort.first )
557
+ assert_equal( '.text', tgt.sections.keys.sort.last )
558
+ assert_equal( 0x4003E0, tgt.sections['.text'].vma )
559
+ assert_equal( 0x1C8, tgt.sections['.text'].size )
560
+ assert_equal( 0x3E0, tgt.sections['.text'].file_pos )
561
+ assert_equal( 30, tgt.symbols.length )
562
+ assert_equal( '(null)', tgt.symbols.keys.sort.first )
563
+ assert_equal( '__libc_start_main', tgt.symbols.keys.sort.last )
564
+ assert_equal( 0, tgt.symbols['__libc_start_main'].value )
565
+ end
566
+ end
567
+
568
+ def test_file
569
+ tmp = Tempfile.new('ut-bfd-target')
570
+ tmp.write(TARGET_BUF)
571
+
572
+ # Test BFD handling of file by path
573
+ Bfd::Target.new( tmp.path ) do |tgt|
574
+ assert_equal( 27, tgt.sections.length )
575
+ end
576
+
577
+ # Test BFD handling of IO object
578
+ File.open(tmp.path, 'rb') do |f|
579
+ Bfd::Target.new( tmp.path ) do |tgt|
580
+ assert_equal( 27, tgt.sections.length )
581
+ end
582
+ end
583
+
584
+ tmp.close
585
+ end
586
+
587
+ def test_unix_exec_file
588
+ # Attempt to load BFD for /bin/cat if it exists
589
+ path = File::SEPARATOR + 'bin' + File::SEPARATOR + 'cat'
590
+ return if not File.exist?(path)
591
+
592
+ Bfd::Target.new( path ) do |tgt|
593
+ assert_equal( 'object', tgt.format )
594
+ end
595
+ end
596
+
597
+ end