Opdis 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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