Opdis 1.3.0

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,253 @@
1
+ #!/usr/bin/env ruby1.9
2
+ # :title: Opdis
3
+ =begin rdoc
4
+ =Opdis
5
+ <i>Copyright 2010 Thoughtgang <http://www.thoughtgang.org></i>
6
+
7
+ = Opdis Disassembler
8
+
9
+ == Summary
10
+
11
+ The Opdis Disassembler is a wrapper libopdis, which requires GNU binutils.
12
+ Currently the BFD gemis required.
13
+
14
+ == Example
15
+
16
+ require 'BFD'
17
+ require 'Opdis'
18
+
19
+ o = Opdis.Disassembler.new() # Create disassembler
20
+
21
+ Bfd::Target.new( filename ) do |tgt|
22
+ # Control-flow disassembly from BFD entry point
23
+
24
+ o.disassemble( tgt, strategy: o.STRATEGY_ENTRY ) do |i|
25
+ # ... do something with instruction
26
+ end
27
+
28
+ # Control-flow disassembly from offset 0 in target
29
+ insns = o.disassemble( t, strategy: o.STRATEGY_CFLOW, start: 0 )
30
+ insn.each { |i| puts i }
31
+
32
+ # Linear disassembly of 100 bytes starting at offset 0
33
+ insns = o.disassemble( t, start: 0, len : 100 )
34
+ insn.each { |i| puts i }
35
+
36
+ end
37
+
38
+ # disassemble the bytes 0x90 (nop) and 0xCC (int3)
39
+ o.disassemble( [0x90, 0xCC] ) { |i| puts i }
40
+
41
+ # the same, using a string
42
+ o.disassemble( "\x90\xCC" ) { |i| puts i }
43
+
44
+ == Contact
45
+ Support:: community@thoughtgang.org
46
+ Project:: http://rubyforge.org/projects/opdis/
47
+ =end
48
+
49
+ module Opdis
50
+
51
+ =begin rdoc
52
+
53
+ =end
54
+ class Disassembler
55
+
56
+ =begin rdoc
57
+ The object used to decode Instruction objects.
58
+
59
+ See Opdis::InstructionDecoder.
60
+ =end
61
+ attr_accessor :insn_decoder
62
+
63
+ =begin rdoc
64
+ The object used to track visited addresses.
65
+
66
+ See Opdis::VisitedAddressTracker.
67
+ =end
68
+ attr_accessor :addr_tracker
69
+
70
+ =begin rdoc
71
+ The object used to resolve instruction operands to VMAs.
72
+
73
+ See Opdis::AddressResolver.
74
+ =end
75
+ attr_accessor :resolver
76
+
77
+ =begin rdoc
78
+ The debug flag for libopdis.
79
+ =end
80
+ attr_accessor :debug
81
+
82
+ =begin rdoc
83
+ The syntax of the strings generated by libopcodes (AT&T or Intel).
84
+ =end
85
+ attr_accessor :syntax
86
+
87
+ =begin rdoc
88
+ The architecture that targets will be disassembled for.
89
+ =end
90
+ attr_accessor :arch
91
+
92
+ =begin rdoc
93
+ The <i>disassembler_options</i> field for libopcodes.
94
+ =end
95
+ attr_accessor :opcodes_options
96
+
97
+ =begin rdoc
98
+ Disassemble a single instruction at the specified VMA.
99
+ =end
100
+ STRATEGY_SINGLE='single'
101
+ =begin rdoc
102
+ Disassemble all instructions in buffer starting at the specified VMA. The
103
+ instructions are created by disassembling sequential memory addresses, with no
104
+ regard to control flow.
105
+ =end
106
+ STRATEGY_LINEAR='linear'
107
+ =begin rdoc
108
+ Disassemble instructions in a buffer starting at a given VMA (the entry point).
109
+ The algorithm recurses to follow the target operands of jump and call
110
+ instructions, and returns when an unconditional jump or a return instruction
111
+ is encountered.
112
+ =end
113
+ STRATEGY_CFLOW='cflow'
114
+ =begin rdoc
115
+ Perform a control-flow disassembly using the specified BFD::Symbol object as
116
+ an entry point. Requires that the target be a Bfd::Symbol object.
117
+ =end
118
+ STRATEGY_SYMBOL='bfd-symbol'
119
+ =begin rdoc
120
+ Perform a linear disassembly on the specified BFD::Section. Requires that the
121
+ target be a Bfd::Section object.
122
+ =end
123
+ STRATEGY_SECTION='bfd-section'
124
+ =begin rdoc
125
+ Perform a control-flow disassembly on the specified BFD object using its
126
+ entry point (or <b>start_address</b>). Requires that the target be a
127
+ Bfd::Target object.
128
+ =end
129
+ STRATEGY_ENTRY='bfd-entry'
130
+
131
+ =begin rdoc
132
+ Available disassembler strategies.
133
+ =end
134
+ STRATEGIES = [ STRATEGY_SINGLE, STRATEGY_LINEAR, STRATEGY_CFLOW,
135
+ STRATEGY_SYMBOL, STRATEGY_SECTION, STRATEGY_ENTRY ]
136
+
137
+ =begin rdoc
138
+ AT&T assembly language syntax (src, dest).
139
+ =end
140
+ SYNTAX_ATT='att'
141
+ =begin rdoc
142
+ Intel assembly language syntax (dest, src).
143
+ =end
144
+ SYNTAX_INTEL='intel'
145
+
146
+ =begin rdoc
147
+ =end
148
+ SYNTAXES = [ SYNTAX_ATT, SYNTAX_INTEL ]
149
+
150
+ =begin rdoc
151
+ Disassemble all bytes in a target.
152
+
153
+ The target parameter can be a String of bytes, an Array of bytes, a
154
+ Bfd::Target, a Bfd::Section, or a Bfd::Symbol.
155
+
156
+ The args parameter is a Hash which can contain any of the following members:
157
+
158
+ resolver:: AddressResolver object to use instead of the builtin
159
+ address resolver.
160
+
161
+ addr_tracker:: VisitedAddressTracker object to use instead of the built-in
162
+ address tracker.
163
+
164
+ insn_decoder:: InstructionDecoder object to use instead of the built-in
165
+ instruction decoder.
166
+
167
+ syntax:: Assembly language syntax to use; either SYNTAX_ATT (default) or
168
+ SYNTAX_INTEL.
169
+
170
+ debug:: Enable or disable libopdis debug mode.
171
+
172
+ options:: Options command-line string for libopcodes. See disassembler_usage()
173
+ in dis-asm.h for details.
174
+
175
+ arch:: The architecture to disassemble for.
176
+
177
+ strategy:: This disassembly algorithm to use. Default is STRATEGY_LINEAR.
178
+
179
+ vma:: The VMA to start disassembly at. Default is 0.
180
+
181
+ length:: The number of bytes to disassemble. Default is the entire buffer.
182
+
183
+ buffer_vma:: The load address of the target. This is only needed when the
184
+ target is a String or Array; BFD targets will provide their
185
+ own VMAs. Default is 0.
186
+ =end
187
+ def ext_disassemble(target, args) # :yields: instructions
188
+ end
189
+
190
+ =begin rdoc
191
+ Instantiate a new Disassembler object.
192
+
193
+
194
+ The args parameter is a Hash which can contain any of the following members:
195
+
196
+ resolver:: AddressResolver object to use instead of the builtin
197
+ address resolver.
198
+
199
+ addr_tracker:: VisitedAddressTracker object to use instead of the built-in
200
+ address tracker.
201
+
202
+ insn_decoder:: InstructionDecoder object to use instead of the built-in
203
+ instruction decoder.
204
+
205
+ syntax:: Assembly language syntax to use; either SYNTAX_ATT (default) or
206
+ SYNTAX_INTEL.
207
+
208
+ debug:: Enable or disable libopdis debug mode.
209
+
210
+ options:: Options command-line string for libopcodes. See disassembler_usage()
211
+ in dis-asm.h for details.
212
+
213
+ arch:: The architecture to disassemble for.
214
+ =end
215
+ def initialize( args ) # :yields: disassembler
216
+ end
217
+
218
+ =begin rdoc
219
+ Returns a list of all supported architectures.
220
+ =end
221
+ def architectures()
222
+ end
223
+ end
224
+
225
+ =begin rdoc
226
+ Writes the output of disassembler_usage() in libopcodes to the supplied IO
227
+ object.
228
+ =end
229
+ def ext_usage( io )
230
+ end
231
+
232
+ =begin rdoc
233
+ Disassembler output.
234
+
235
+ This consists of a hash mapping VMA keys to Instruction objects. The Disassembly
236
+ object also contains an internal array of error messages generated by the
237
+ disassembler.
238
+ =end
239
+ class Disassembly < Hash
240
+
241
+ =begin rdoc
242
+ An array of error messages encountered during disassembly.
243
+ =end
244
+ attr_reader :errors
245
+
246
+ =begin rdoc
247
+ Returns the Instruction object containing VMA.
248
+ =end
249
+ def containing(vma)
250
+ end
251
+ end
252
+
253
+ end
@@ -0,0 +1,72 @@
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
+ #include <ruby.h>
9
+
10
+ #ifdef RUBY_18
11
+
12
+ VALUE Opdis_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
18
+
19
+ /* ---------------------------------------------------------------------- */
20
+ /* rb_path2class from variable.c reimplemented to NOT throw exceptions
21
+ * when a class isn't found. */
22
+ VALUE Opdis_path2class(const char * path) {
23
+ const char *pbeg, *p;
24
+ ID id;
25
+ VALUE c = rb_cObject;
26
+
27
+ pbeg = p = path;
28
+
29
+ if (path[0] == '#') {
30
+ rb_raise(rb_eArgError, "can't retrieve anonymous class %s",
31
+ path);
32
+ }
33
+
34
+ while (*p) {
35
+ #ifdef RUBY_18
36
+ VALUE str;
37
+ while (*p && *p != ':') p++;
38
+ str = rb_str_new(pbeg, p-pbeg);
39
+ id = rb_intern(RSTRING(str)->ptr);
40
+ #endif
41
+
42
+ #ifdef RUBY_19
43
+ while (*p && *p != ':') p++;
44
+ id = rb_intern2(pbeg, p-pbeg);
45
+ #endif
46
+ if (p[0] == ':') {
47
+ if (p[1] != ':') {
48
+ rb_raise(rb_eArgError,
49
+ "undefined class/module %.*s",
50
+ (int)(p-path), path);
51
+ }
52
+ p += 2;
53
+ pbeg = p;
54
+ }
55
+
56
+ if (!rb_const_defined(c, id)) {
57
+ return Qnil;
58
+ }
59
+
60
+ c = rb_const_get_at(c, id);
61
+ switch (TYPE(c)) {
62
+ case T_MODULE:
63
+ case T_CLASS:
64
+ break;
65
+ default:
66
+ rb_raise(rb_eTypeError,
67
+ "%s does not refer to class/module", path);
68
+ }
69
+ }
70
+
71
+ return c;
72
+ }
@@ -0,0 +1,25 @@
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
+ #include <ruby.h>
13
+
14
+ #ifdef RUBY_18
15
+ #include <stdarg.h>
16
+ #define rb_str_new_cstr(arg) rb_str_new2(arg)
17
+
18
+ VALUE Opdis_rb_hash_lookup2(VALUE, VALUE, VALUE);
19
+ #define rb_hash_lookup2( a1, a2, a3 ) Opdis_rb_hash_lookup2(a1, a2, a3)
20
+ #endif
21
+
22
+ VALUE Opdis_path2class(const char * path);
23
+ #define path2class(path) Opdis_path2class(path)
24
+
25
+ #endif
data/tests/ut_opdis.rb ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
3
+ # Unit test for Opdis module
4
+
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+ require 'Opdis'
8
+
9
+ class TC_OpdisModule < Test::Unit::TestCase
10
+
11
+ def hex_buf( arr )
12
+ arr.collect{ |i| i.hex }.pack('C*')
13
+ end
14
+
15
+ def test_buffer_nop
16
+ Opdis::Disassembler.new( :arch => 'x86' ) do |dis|
17
+ ops = dis.disassemble( hex_buf(%w{ 90 90 90 }) )
18
+ assert_equal( 3, ops.length )
19
+ assert_equal( 'nop', ops[0].mnemonic )
20
+ end
21
+ end
22
+
23
+ def test_buffer_int3
24
+ Opdis::Disassembler.new( :arch => 'x86' ) do |dis|
25
+ ops = dis.disassemble( hex_buf(%w{ CC CC CC }) )
26
+ assert_equal( 3, ops.length )
27
+ assert_equal( 'int3', ops[0].mnemonic )
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,556 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
3
+ # Unit test for Opdis module BFD support
4
+
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+ require 'Opdis'
8
+ require 'BFD'
9
+
10
+ class TC_OpdisModuleBfd < Test::Unit::TestCase
11
+
12
+ # Note: this is an x86-64 GCC compilation of the very basic C program
13
+ # int main(void) { return 666; }
14
+ TARGET_BUF = %w{
15
+ 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
16
+ 02 00 3e 00 01 00 00 00 e0 03 40 00 00 00 00 00
17
+ 40 00 00 00 00 00 00 00 40 11 00 00 00 00 00 00
18
+ 00 00 00 00 40 00 38 00 09 00 40 00 1f 00 1c 00
19
+ 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00
20
+ 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00
21
+ f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00
22
+ 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00
23
+ 38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00
24
+ 38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00
25
+ 1c 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
26
+ 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00
27
+ 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00
28
+ 54 06 00 00 00 00 00 00 54 06 00 00 00 00 00 00
29
+ 00 00 20 00 00 00 00 00 01 00 00 00 06 00 00 00
30
+ 18 0e 00 00 00 00 00 00 18 0e 60 00 00 00 00 00
31
+ 18 0e 60 00 00 00 00 00 00 02 00 00 00 00 00 00
32
+ 10 02 00 00 00 00 00 00 00 00 20 00 00 00 00 00
33
+ 02 00 00 00 06 00 00 00 40 0e 00 00 00 00 00 00
34
+ 40 0e 60 00 00 00 00 00 40 0e 60 00 00 00 00 00
35
+ a0 01 00 00 00 00 00 00 a0 01 00 00 00 00 00 00
36
+ 08 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00
37
+ 54 02 00 00 00 00 00 00 54 02 40 00 00 00 00 00
38
+ 54 02 40 00 00 00 00 00 44 00 00 00 00 00 00 00
39
+ 44 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
40
+ 50 e5 74 64 04 00 00 00 bc 05 00 00 00 00 00 00
41
+ bc 05 40 00 00 00 00 00 bc 05 40 00 00 00 00 00
42
+ 24 00 00 00 00 00 00 00 24 00 00 00 00 00 00 00
43
+ 04 00 00 00 00 00 00 00 51 e5 74 64 06 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 00 00 00 00 00 00 00 00
46
+ 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
47
+ 52 e5 74 64 04 00 00 00 18 0e 00 00 00 00 00 00
48
+ 18 0e 60 00 00 00 00 00 18 0e 60 00 00 00 00 00
49
+ e8 01 00 00 00 00 00 00 e8 01 00 00 00 00 00 00
50
+ 01 00 00 00 00 00 00 00 2f 6c 69 62 36 34 2f 6c
51
+ 64 2d 6c 69 6e 75 78 2d 78 38 36 2d 36 34 2e 73
52
+ 6f 2e 32 00 04 00 00 00 10 00 00 00 01 00 00 00
53
+ 47 4e 55 00 00 00 00 00 02 00 00 00 06 00 00 00
54
+ 0f 00 00 00 04 00 00 00 14 00 00 00 03 00 00 00
55
+ 47 4e 55 00 e0 01 67 5d 37 02 90 5f c1 b1 93 56
56
+ 2e ff 8c c6 13 be 47 5e 01 00 00 00 03 00 00 00
57
+ 02 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
58
+ 01 00 00 00 01 00 00 00 01 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 00 00 00 00 00 00 00 00
61
+ 00 00 00 00 00 00 00 00 01 00 00 00 20 00 00 00
62
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
63
+ 1a 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00
64
+ 00 00 00 00 00 00 00 00 00 5f 5f 67 6d 6f 6e 5f
65
+ 73 74 61 72 74 5f 5f 00 6c 69 62 63 2e 73 6f 2e
66
+ 36 00 5f 5f 6c 69 62 63 5f 73 74 61 72 74 5f 6d
67
+ 61 69 6e 00 47 4c 49 42 43 5f 32 2e 32 2e 35 00
68
+ 00 00 00 00 02 00 00 00 01 00 01 00 10 00 00 00
69
+ 10 00 00 00 00 00 00 00 75 1a 69 09 00 00 02 00
70
+ 2c 00 00 00 00 00 00 00 e0 0f 60 00 00 00 00 00
71
+ 06 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
72
+ 00 10 60 00 00 00 00 00 07 00 00 00 02 00 00 00
73
+ 00 00 00 00 00 00 00 00 48 83 ec 08 e8 5b 00 00
74
+ 00 e8 ea 00 00 00 e8 b5 01 00 00 48 83 c4 08 c3
75
+ ff 35 2a 0c 20 00 ff 25 2c 0c 20 00 0f 1f 40 00
76
+ ff 25 2a 0c 20 00 68 00 00 00 00 e9 e0 ff ff ff
77
+ 31 ed 49 89 d1 5e 48 89 e2 48 83 e4 f0 50 54 49
78
+ c7 c0 d0 04 40 00 48 c7 c1 e0 04 40 00 48 c7 c7
79
+ c4 04 40 00 e8 c7 ff ff ff f4 90 90 48 83 ec 08
80
+ 48 8b 05 c9 0b 20 00 48 85 c0 74 02 ff d0 48 83
81
+ c4 08 c3 90 90 90 90 90 90 90 90 90 90 90 90 90
82
+ 55 48 89 e5 53 48 83 ec 08 80 3d d8 0b 20 00 00
83
+ 75 4b bb 30 0e 60 00 48 8b 05 d2 0b 20 00 48 81
84
+ eb 28 0e 60 00 48 c1 fb 03 48 83 eb 01 48 39 d8
85
+ 73 24 66 0f 1f 44 00 00 48 83 c0 01 48 89 05 ad
86
+ 0b 20 00 ff 14 c5 28 0e 60 00 48 8b 05 9f 0b 20
87
+ 00 48 39 d8 72 e2 c6 05 8b 0b 20 00 01 48 83 c4
88
+ 08 5b c9 c3 66 66 66 2e 0f 1f 84 00 00 00 00 00
89
+ 55 48 83 3d 8f 09 20 00 00 48 89 e5 74 12 b8 00
90
+ 00 00 00 48 85 c0 74 08 bf 38 0e 60 00 c9 ff e0
91
+ c9 c3 90 90 b8 9a 02 00 00 c3 90 90 90 90 90 90
92
+ f3 c3 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00
93
+ 48 89 6c 24 d8 4c 89 64 24 e0 48 8d 2d 23 09 20
94
+ 00 4c 8d 25 1c 09 20 00 4c 89 6c 24 e8 4c 89 74
95
+ 24 f0 4c 89 7c 24 f8 48 89 5c 24 d0 48 83 ec 38
96
+ 4c 29 e5 41 89 fd 49 89 f6 48 c1 fd 03 49 89 d7
97
+ e8 83 fe ff ff 48 85 ed 74 1c 31 db 0f 1f 40 00
98
+ 4c 89 fa 4c 89 f6 44 89 ef 41 ff 14 dc 48 83 c3
99
+ 01 48 39 eb 72 ea 48 8b 5c 24 08 48 8b 6c 24 10
100
+ 4c 8b 64 24 18 4c 8b 6c 24 20 4c 8b 74 24 28 4c
101
+ 8b 7c 24 30 48 83 c4 38 c3 90 90 90 90 90 90 90
102
+ 55 48 89 e5 53 48 83 ec 08 48 8b 05 98 08 20 00
103
+ 48 83 f8 ff 74 19 bb 18 0e 60 00 0f 1f 44 00 00
104
+ 48 83 eb 08 ff d0 48 8b 03 48 83 f8 ff 75 f1 48
105
+ 83 c4 08 5b c9 c3 90 90 48 83 ec 08 e8 7f fe ff
106
+ ff 48 83 c4 08 c3 00 00 01 00 02 00 01 1b 03 3b
107
+ 20 00 00 00 03 00 00 00 08 ff ff ff 3c 00 00 00
108
+ 14 ff ff ff 54 00 00 00 24 ff ff ff 6c 00 00 00
109
+ 14 00 00 00 00 00 00 00 01 7a 52 00 01 78 10 01
110
+ 1b 0c 07 08 90 01 00 00 14 00 00 00 1c 00 00 00
111
+ c4 fe ff ff 06 00 00 00 00 00 00 00 00 00 00 00
112
+ 14 00 00 00 34 00 00 00 b8 fe ff ff 02 00 00 00
113
+ 00 00 00 00 00 00 00 00 24 00 00 00 4c 00 00 00
114
+ b0 fe ff ff 89 00 00 00 00 51 8c 05 86 06 5f 0e
115
+ 40 46 83 07 8f 02 8e 03 8d 04 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 00 00 00 00 00 00 00 00
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 ff ff ff ff ff ff ff ff
242
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
243
+ 01 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
244
+ 0c 00 00 00 00 00 00 00 a8 03 40 00 00 00 00 00
245
+ 0d 00 00 00 00 00 00 00 a8 05 40 00 00 00 00 00
246
+ 04 00 00 00 00 00 00 00 98 02 40 00 00 00 00 00
247
+ f5 fe ff 6f 00 00 00 00 b0 02 40 00 00 00 00 00
248
+ 05 00 00 00 00 00 00 00 18 03 40 00 00 00 00 00
249
+ 06 00 00 00 00 00 00 00 d0 02 40 00 00 00 00 00
250
+ 0a 00 00 00 00 00 00 00 38 00 00 00 00 00 00 00
251
+ 0b 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
252
+ 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
253
+ 03 00 00 00 00 00 00 00 e8 0f 60 00 00 00 00 00
254
+ 02 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
255
+ 14 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00
256
+ 17 00 00 00 00 00 00 00 90 03 40 00 00 00 00 00
257
+ 07 00 00 00 00 00 00 00 78 03 40 00 00 00 00 00
258
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
259
+ 09 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
260
+ fe ff ff 6f 00 00 00 00 58 03 40 00 00 00 00 00
261
+ ff ff ff 6f 00 00 00 00 01 00 00 00 00 00 00 00
262
+ f0 ff ff 6f 00 00 00 00 50 03 40 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 00 00 00 00 00 00 00 00
269
+ 00 00 00 00 00 00 00 00 40 0e 60 00 00 00 00 00
270
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
271
+ d6 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
272
+ 00 00 00 00 00 00 00 00 47 43 43 3a 20 28 55 62
273
+ 75 6e 74 75 20 34 2e 34 2e 33 2d 34 75 62 75 6e
274
+ 74 75 35 29 20 34 2e 34 2e 33 00 00 2e 73 79 6d
275
+ 74 61 62 00 2e 73 74 72 74 61 62 00 2e 73 68 73
276
+ 74 72 74 61 62 00 2e 69 6e 74 65 72 70 00 2e 6e
277
+ 6f 74 65 2e 41 42 49 2d 74 61 67 00 2e 6e 6f 74
278
+ 65 2e 67 6e 75 2e 62 75 69 6c 64 2d 69 64 00 2e
279
+ 67 6e 75 2e 68 61 73 68 00 2e 64 79 6e 73 79 6d
280
+ 00 2e 64 79 6e 73 74 72 00 2e 67 6e 75 2e 76 65
281
+ 72 73 69 6f 6e 00 2e 67 6e 75 2e 76 65 72 73 69
282
+ 6f 6e 5f 72 00 2e 72 65 6c 61 2e 64 79 6e 00 2e
283
+ 72 65 6c 61 2e 70 6c 74 00 2e 69 6e 69 74 00 2e
284
+ 74 65 78 74 00 2e 66 69 6e 69 00 2e 72 6f 64 61
285
+ 74 61 00 2e 65 68 5f 66 72 61 6d 65 5f 68 64 72
286
+ 00 2e 65 68 5f 66 72 61 6d 65 00 2e 63 74 6f 72
287
+ 73 00 2e 64 74 6f 72 73 00 2e 6a 63 72 00 2e 64
288
+ 79 6e 61 6d 69 63 00 2e 67 6f 74 00 2e 67 6f 74
289
+ 2e 70 6c 74 00 2e 64 61 74 61 00 2e 62 73 73 00
290
+ 2e 63 6f 6d 6d 65 6e 74 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
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
295
+ 1b 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00
296
+ 38 02 40 00 00 00 00 00 38 02 00 00 00 00 00 00
297
+ 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
298
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
299
+ 23 00 00 00 07 00 00 00 02 00 00 00 00 00 00 00
300
+ 54 02 40 00 00 00 00 00 54 02 00 00 00 00 00 00
301
+ 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
302
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
303
+ 31 00 00 00 07 00 00 00 02 00 00 00 00 00 00 00
304
+ 74 02 40 00 00 00 00 00 74 02 00 00 00 00 00 00
305
+ 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
306
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
307
+ 48 00 00 00 05 00 00 00 02 00 00 00 00 00 00 00
308
+ 98 02 40 00 00 00 00 00 98 02 00 00 00 00 00 00
309
+ 18 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
310
+ 08 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
311
+ 44 00 00 00 f6 ff ff 6f 02 00 00 00 00 00 00 00
312
+ b0 02 40 00 00 00 00 00 b0 02 00 00 00 00 00 00
313
+ 1c 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
314
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
315
+ 4e 00 00 00 0b 00 00 00 02 00 00 00 00 00 00 00
316
+ d0 02 40 00 00 00 00 00 d0 02 00 00 00 00 00 00
317
+ 48 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00
318
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
319
+ 56 00 00 00 03 00 00 00 02 00 00 00 00 00 00 00
320
+ 18 03 40 00 00 00 00 00 18 03 00 00 00 00 00 00
321
+ 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
322
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
323
+ 5e 00 00 00 ff ff ff 6f 02 00 00 00 00 00 00 00
324
+ 50 03 40 00 00 00 00 00 50 03 00 00 00 00 00 00
325
+ 06 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
326
+ 02 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00
327
+ 6b 00 00 00 fe ff ff 6f 02 00 00 00 00 00 00 00
328
+ 58 03 40 00 00 00 00 00 58 03 00 00 00 00 00 00
329
+ 20 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00
330
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
331
+ 7a 00 00 00 04 00 00 00 02 00 00 00 00 00 00 00
332
+ 78 03 40 00 00 00 00 00 78 03 00 00 00 00 00 00
333
+ 18 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00
334
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
335
+ 84 00 00 00 04 00 00 00 02 00 00 00 00 00 00 00
336
+ 90 03 40 00 00 00 00 00 90 03 00 00 00 00 00 00
337
+ 18 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00
338
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
339
+ 8e 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
340
+ a8 03 40 00 00 00 00 00 a8 03 00 00 00 00 00 00
341
+ 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
342
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
343
+ 89 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
344
+ c0 03 40 00 00 00 00 00 c0 03 00 00 00 00 00 00
345
+ 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
346
+ 04 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
347
+ 94 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
348
+ e0 03 40 00 00 00 00 00 e0 03 00 00 00 00 00 00
349
+ c8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
350
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
351
+ 9a 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00
352
+ a8 05 40 00 00 00 00 00 a8 05 00 00 00 00 00 00
353
+ 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
354
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
355
+ a0 00 00 00 01 00 00 00 12 00 00 00 00 00 00 00
356
+ b8 05 40 00 00 00 00 00 b8 05 00 00 00 00 00 00
357
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
358
+ 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
359
+ a8 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00
360
+ bc 05 40 00 00 00 00 00 bc 05 00 00 00 00 00 00
361
+ 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
362
+ 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
363
+ b6 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00
364
+ e0 05 40 00 00 00 00 00 e0 05 00 00 00 00 00 00
365
+ 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
366
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
367
+ c0 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
368
+ 18 0e 60 00 00 00 00 00 18 0e 00 00 00 00 00 00
369
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
370
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
371
+ c7 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
372
+ 28 0e 60 00 00 00 00 00 28 0e 00 00 00 00 00 00
373
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
374
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
375
+ ce 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
376
+ 38 0e 60 00 00 00 00 00 38 0e 00 00 00 00 00 00
377
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
378
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
379
+ d3 00 00 00 06 00 00 00 03 00 00 00 00 00 00 00
380
+ 40 0e 60 00 00 00 00 00 40 0e 00 00 00 00 00 00
381
+ a0 01 00 00 00 00 00 00 07 00 00 00 00 00 00 00
382
+ 08 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00
383
+ dc 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
384
+ e0 0f 60 00 00 00 00 00 e0 0f 00 00 00 00 00 00
385
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
386
+ 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
387
+ e1 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
388
+ e8 0f 60 00 00 00 00 00 e8 0f 00 00 00 00 00 00
389
+ 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
390
+ 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
391
+ ea 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00
392
+ 08 10 60 00 00 00 00 00 08 10 00 00 00 00 00 00
393
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
394
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
395
+ f0 00 00 00 08 00 00 00 03 00 00 00 00 00 00 00
396
+ 18 10 60 00 00 00 00 00 18 10 00 00 00 00 00 00
397
+ 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
398
+ 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
399
+ f5 00 00 00 01 00 00 00 30 00 00 00 00 00 00 00
400
+ 00 00 00 00 00 00 00 00 18 10 00 00 00 00 00 00
401
+ 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
402
+ 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
403
+ 11 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00
404
+ 00 00 00 00 00 00 00 00 3b 10 00 00 00 00 00 00
405
+ fe 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
406
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
407
+ 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
408
+ 00 00 00 00 00 00 00 00 00 19 00 00 00 00 00 00
409
+ 00 06 00 00 00 00 00 00 1e 00 00 00 2f 00 00 00
410
+ 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
411
+ 09 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00
412
+ 00 00 00 00 00 00 00 00 00 1f 00 00 00 00 00 00
413
+ db 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
414
+ 01 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 00 00 00 00
416
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 01 00
417
+ 38 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
418
+ 00 00 00 00 03 00 02 00 54 02 40 00 00 00 00 00
419
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 03 00
420
+ 74 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
421
+ 00 00 00 00 03 00 04 00 98 02 40 00 00 00 00 00
422
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 05 00
423
+ b0 02 40 00 00 00 00 00 00 00 00 00 00 00 00 00
424
+ 00 00 00 00 03 00 06 00 d0 02 40 00 00 00 00 00
425
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 07 00
426
+ 18 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
427
+ 00 00 00 00 03 00 08 00 50 03 40 00 00 00 00 00
428
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 09 00
429
+ 58 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
430
+ 00 00 00 00 03 00 0a 00 78 03 40 00 00 00 00 00
431
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0b 00
432
+ 90 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
433
+ 00 00 00 00 03 00 0c 00 a8 03 40 00 00 00 00 00
434
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0d 00
435
+ c0 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
436
+ 00 00 00 00 03 00 0e 00 e0 03 40 00 00 00 00 00
437
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 0f 00
438
+ a8 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00
439
+ 00 00 00 00 03 00 10 00 b8 05 40 00 00 00 00 00
440
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 11 00
441
+ bc 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00
442
+ 00 00 00 00 03 00 12 00 e0 05 40 00 00 00 00 00
443
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 13 00
444
+ 18 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
445
+ 00 00 00 00 03 00 14 00 28 0e 60 00 00 00 00 00
446
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 15 00
447
+ 38 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
448
+ 00 00 00 00 03 00 16 00 40 0e 60 00 00 00 00 00
449
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 17 00
450
+ e0 0f 60 00 00 00 00 00 00 00 00 00 00 00 00 00
451
+ 00 00 00 00 03 00 18 00 e8 0f 60 00 00 00 00 00
452
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 19 00
453
+ 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
454
+ 00 00 00 00 03 00 1a 00 18 10 60 00 00 00 00 00
455
+ 00 00 00 00 00 00 00 00 00 00 00 00 03 00 1b 00
456
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
457
+ 01 00 00 00 02 00 0e 00 0c 04 40 00 00 00 00 00
458
+ 00 00 00 00 00 00 00 00 11 00 00 00 04 00 f1 ff
459
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
460
+ 1c 00 00 00 01 00 13 00 18 0e 60 00 00 00 00 00
461
+ 00 00 00 00 00 00 00 00 2a 00 00 00 01 00 14 00
462
+ 28 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
463
+ 38 00 00 00 01 00 15 00 38 0e 60 00 00 00 00 00
464
+ 00 00 00 00 00 00 00 00 45 00 00 00 02 00 0e 00
465
+ 30 04 40 00 00 00 00 00 00 00 00 00 00 00 00 00
466
+ 5b 00 00 00 01 00 1a 00 18 10 60 00 00 00 00 00
467
+ 01 00 00 00 00 00 00 00 6a 00 00 00 01 00 1a 00
468
+ 20 10 60 00 00 00 00 00 08 00 00 00 00 00 00 00
469
+ 78 00 00 00 02 00 0e 00 a0 04 40 00 00 00 00 00
470
+ 00 00 00 00 00 00 00 00 11 00 00 00 04 00 f1 ff
471
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
472
+ 84 00 00 00 01 00 13 00 20 0e 60 00 00 00 00 00
473
+ 00 00 00 00 00 00 00 00 91 00 00 00 01 00 12 00
474
+ 50 06 40 00 00 00 00 00 00 00 00 00 00 00 00 00
475
+ 9f 00 00 00 01 00 15 00 38 0e 60 00 00 00 00 00
476
+ 00 00 00 00 00 00 00 00 ab 00 00 00 02 00 0e 00
477
+ 70 05 40 00 00 00 00 00 00 00 00 00 00 00 00 00
478
+ c1 00 00 00 04 00 f1 ff 00 00 00 00 00 00 00 00
479
+ 00 00 00 00 00 00 00 00 c5 00 00 00 01 02 18 00
480
+ e8 0f 60 00 00 00 00 00 00 00 00 00 00 00 00 00
481
+ db 00 00 00 00 02 13 00 14 0e 60 00 00 00 00 00
482
+ 00 00 00 00 00 00 00 00 ec 00 00 00 00 02 13 00
483
+ 14 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
484
+ ff 00 00 00 01 02 16 00 40 0e 60 00 00 00 00 00
485
+ 00 00 00 00 00 00 00 00 08 01 00 00 20 00 19 00
486
+ 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
487
+ 13 01 00 00 12 00 0e 00 d0 04 40 00 00 00 00 00
488
+ 02 00 00 00 00 00 00 00 23 01 00 00 12 00 0e 00
489
+ e0 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
490
+ 2a 01 00 00 20 00 00 00 00 00 00 00 00 00 00 00
491
+ 00 00 00 00 00 00 00 00 39 01 00 00 20 00 00 00
492
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
493
+ 4d 01 00 00 12 00 0f 00 a8 05 40 00 00 00 00 00
494
+ 00 00 00 00 00 00 00 00 53 01 00 00 12 00 00 00
495
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
496
+ 72 01 00 00 11 00 10 00 b8 05 40 00 00 00 00 00
497
+ 04 00 00 00 00 00 00 00 81 01 00 00 10 00 19 00
498
+ 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
499
+ 8e 01 00 00 11 02 19 00 10 10 60 00 00 00 00 00
500
+ 00 00 00 00 00 00 00 00 9b 01 00 00 11 02 14 00
501
+ 30 0e 60 00 00 00 00 00 00 00 00 00 00 00 00 00
502
+ a8 01 00 00 12 00 0e 00 e0 04 40 00 00 00 00 00
503
+ 89 00 00 00 00 00 00 00 b8 01 00 00 10 00 f1 ff
504
+ 18 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
505
+ c4 01 00 00 10 00 f1 ff 28 10 60 00 00 00 00 00
506
+ 00 00 00 00 00 00 00 00 c9 01 00 00 10 00 f1 ff
507
+ 18 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
508
+ d0 01 00 00 12 00 0e 00 c4 04 40 00 00 00 00 00
509
+ 06 00 00 00 00 00 00 00 d5 01 00 00 12 00 0c 00
510
+ a8 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00
511
+ 00 63 61 6c 6c 5f 67 6d 6f 6e 5f 73 74 61 72 74
512
+ 00 63 72 74 73 74 75 66 66 2e 63 00 5f 5f 43 54
513
+ 4f 52 5f 4c 49 53 54 5f 5f 00 5f 5f 44 54 4f 52
514
+ 5f 4c 49 53 54 5f 5f 00 5f 5f 4a 43 52 5f 4c 49
515
+ 53 54 5f 5f 00 5f 5f 64 6f 5f 67 6c 6f 62 61 6c
516
+ 5f 64 74 6f 72 73 5f 61 75 78 00 63 6f 6d 70 6c
517
+ 65 74 65 64 2e 37 33 38 32 00 64 74 6f 72 5f 69
518
+ 64 78 2e 37 33 38 34 00 66 72 61 6d 65 5f 64 75
519
+ 6d 6d 79 00 5f 5f 43 54 4f 52 5f 45 4e 44 5f 5f
520
+ 00 5f 5f 46 52 41 4d 45 5f 45 4e 44 5f 5f 00 5f
521
+ 5f 4a 43 52 5f 45 4e 44 5f 5f 00 5f 5f 64 6f 5f
522
+ 67 6c 6f 62 61 6c 5f 63 74 6f 72 73 5f 61 75 78
523
+ 00 74 2e 63 00 5f 47 4c 4f 42 41 4c 5f 4f 46 46
524
+ 53 45 54 5f 54 41 42 4c 45 5f 00 5f 5f 69 6e 69
525
+ 74 5f 61 72 72 61 79 5f 65 6e 64 00 5f 5f 69 6e
526
+ 69 74 5f 61 72 72 61 79 5f 73 74 61 72 74 00 5f
527
+ 44 59 4e 41 4d 49 43 00 64 61 74 61 5f 73 74 61
528
+ 72 74 00 5f 5f 6c 69 62 63 5f 63 73 75 5f 66 69
529
+ 6e 69 00 5f 73 74 61 72 74 00 5f 5f 67 6d 6f 6e
530
+ 5f 73 74 61 72 74 5f 5f 00 5f 4a 76 5f 52 65 67
531
+ 69 73 74 65 72 43 6c 61 73 73 65 73 00 5f 66 69
532
+ 6e 69 00 5f 5f 6c 69 62 63 5f 73 74 61 72 74 5f
533
+ 6d 61 69 6e 40 40 47 4c 49 42 43 5f 32 2e 32 2e
534
+ 35 00 5f 49 4f 5f 73 74 64 69 6e 5f 75 73 65 64
535
+ 00 5f 5f 64 61 74 61 5f 73 74 61 72 74 00 5f 5f
536
+ 64 73 6f 5f 68 61 6e 64 6c 65 00 5f 5f 44 54 4f
537
+ 52 5f 45 4e 44 5f 5f 00 5f 5f 6c 69 62 63 5f 63
538
+ 73 75 5f 69 6e 69 74 00 5f 5f 62 73 73 5f 73 74
539
+ 61 72 74 00 5f 65 6e 64 00 5f 65 64 61 74 61 00
540
+ 6d 61 69 6e 00 5f 69 6e 69 74 00
541
+ }.collect{ |i| i.hex }.pack('C*')
542
+
543
+ def test_buffer
544
+ dis = Opdis::Disassembler.new()
545
+
546
+ Bfd::Target.from_buffer( TARGET_BUF ) do |tgt|
547
+
548
+ ops = dis.disasm_section( tgt.sections['.text'] )
549
+ assert_equal( 145, ops.length )
550
+ assert_equal( 'xor', ops[ops.keys.sort.first].mnemonic )
551
+ assert_equal( 'nop', ops[ops.keys.sort.last].mnemonic )
552
+ end
553
+
554
+ end
555
+
556
+ end