Opcodes 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.
data/module/Opcodes.h ADDED
@@ -0,0 +1,46 @@
1
+ /* Opcodes.h
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 OPCODES_RUBY_EXT_H
9
+ #define OPCODES_RUBY_EXT_H
10
+
11
+ /* Disassembler Class */
12
+ #define DIS_ATTR_OPTIONS "options"
13
+
14
+ #define DIS_FN_DIS_INSN "ext_disasm_insn"
15
+ #define DIS_FN_DIS_DIS "ext_disasm"
16
+
17
+ #define DIS_ARG_BFD "bfd"
18
+ #define DIS_ARG_ARCH "arch"
19
+ #define DIS_ARG_OPTS "opts"
20
+ #define DIS_ARG_VMA "vma"
21
+ #define DIS_ARG_BUFVMA "buffer_vma"
22
+ #define DIS_ARG_LENGTH "length"
23
+
24
+ /* Instruction info hash */
25
+ #define DIS_INSN_INFO_DELAY "branch_delay_insn"
26
+ #define DIS_INSN_INFO_DATA_SZ "data_size"
27
+ #define DIS_INSN_INFO_TYPE "type"
28
+ #define DIS_INSN_INFO_TGT "target"
29
+ #define DIS_INSN_INFO_TGT2 "target2"
30
+
31
+ #define DIS_INSN_VMA "vma"
32
+ #define DIS_INSN_SIZE "size"
33
+ #define DIS_INSN_INFO "info"
34
+ #define DIS_INSN_INSN "insn"
35
+
36
+ #define DIS_METHOD_ARCH "architectures"
37
+
38
+ #define DISASM_MAX_STR 64
39
+
40
+ /* Module and Class names */
41
+
42
+ #define OPCODES_MODULE_NAME "Opcodes"
43
+ #define DIS_CLASS_NAME "Disassembler"
44
+ void Init_OpcodesExt();
45
+
46
+ #endif
data/module/extconf.rb ADDED
@@ -0,0 +1,65 @@
1
+ #!/usrbin/ruby1.9
2
+ # Opcodes Ruby extension config file
3
+ # Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
4
+ # Options:
5
+ # --with-opcodes-dir=path
6
+ # --with-opcodes-include=path
7
+ # --with-opcodes-lib=path
8
+ # --with-objdump=path
9
+ # see README for more info.
10
+
11
+ require 'mkmf'
12
+
13
+ have_library('opcodes', 'init_disassemble_info')
14
+ dir_config('opcodes')
15
+
16
+ # ----------------------------------------------------------------------
17
+ # Architectures supported by binutils
18
+ # These have to be specified on the command line, as binutils does not
19
+ # provide any clue as to which architectures it has been compiled for
20
+ # on the local machine.
21
+ # NOTE: These were compiled from the list of architectures in bfd.h .
22
+
23
+ ARCH= %w[ m32c alpha arc arm avr bfin cr16 cris crx d10v d30v
24
+ dlx h8300 h8500 hppa i370 i386 i860 i960 ia64 ip2k fr30
25
+ lm32 m32r m68k m88k maxq mt microblaze msp430 ns32k mcore
26
+ mep mips mmix mn10200 mn10300 openrisc or32 pdp11 pj
27
+ powerpc rs6000 s390 score sh sparc spu tic30 tic4x tic54x
28
+ tic80 v850 w65 xstormy16 xc16x xtensa z80 z8k vax frv
29
+ moxie iq2000 m32c ]
30
+
31
+ # Define all architecture options
32
+ ARCH.each { |a| with_config( "ARCH_#{a.upcase}" ) }
33
+
34
+ # ----------------------------------------------------------------------
35
+ # Detect architectures supported locally
36
+
37
+ SEEN_ARCH = []
38
+ def handle_bfd_arch( line )
39
+ arch = line.strip
40
+ if ARCH.include?(arch) and not SEEN_ARCH.include?(arch)
41
+ puts "Adding architecture '#{arch}'"
42
+ SEEN_ARCH << arch
43
+ $CPPFLAGS += " -DARCH_#{arch.upcase}"
44
+ end
45
+ end
46
+
47
+ # allow user to override the objump binary using --with-objdump=path
48
+ objdump_bin = with_config('objdump', 'objdump')
49
+
50
+ # use objdump -i to get supported architectures
51
+ `#{objdump_bin} -i`.split("\n").each { |line| handle_bfd_arch(line) }
52
+
53
+ # default to i386 if objdump failed to run or no architectures were found
54
+ $CPPFLAGS += " -DARCH_I386" if SEEN_ARCH.length == 0
55
+
56
+ # ----------------------------------------------------------------------
57
+ # Makefile
58
+
59
+ if RUBY_VERSION =~ /1.8/ then
60
+ $CPPFLAGS += " -DRUBY_18"
61
+ elsif RUBY_VERSION =~ /1.9/ then
62
+ $CPPFLAGS += " -DRUBY_19"
63
+ end
64
+
65
+ create_makefile('OpcodesExt')
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env ruby1.9
2
+ # :title: Opcodes
3
+ =begin rdoc
4
+ =LibOpcodes
5
+ <i>Copyright 2010 Thoughtgang <http://www.thoughtgang.org></i>
6
+
7
+ = Gnu Binutils libopcodes support
8
+
9
+ Requires GNU binutils, available at
10
+ http://www.gnu.org/software/binutils .
11
+
12
+ All of the original libopcodes data structures and constants can be found in
13
+ <b>dis-asm.h</b>, available on Linux installations at
14
+ <b>/usr/include/dis-asm.h</b>.
15
+
16
+ == Summary
17
+ A wrapper for the libopcodes disassembler distributed with GNU binutils.
18
+
19
+ == Example
20
+ require 'BFD'
21
+ require 'Opcodes'
22
+
23
+ t = Bfd::Target.new('/tmp/a.out')
24
+
25
+ o = Opcodes::Disassembler.new( :bfd => t, :arch => 'x86' )
26
+
27
+ o.disasm( t.sections['.text'] )
28
+
29
+ == Disclaimer
30
+ This is a minimal implementation of a libopcodes wrapper. It is intended for
31
+ demonstration purposes only, and should not be expected to support all
32
+ of the funtionality of the GNU binutils lipopcodes library.
33
+
34
+ For a fully functional disassembler, see the Opdis gem.
35
+
36
+ == Contact
37
+ Support:: community@thoughtgang.org
38
+ Project:: http://rubyforge.org/projects/opdis/
39
+ =end
40
+
41
+ =begin rdoc
42
+ GNU libopcodes support
43
+ =end
44
+ module Opcodes
45
+
46
+ =begin rdoc
47
+ A disassembler object.
48
+ Source: <b>struct disassemble_info</b>
49
+ =end
50
+ class Disassembler
51
+
52
+ =begin rdoc
53
+ Disassembler options.
54
+ Source: <b>disassemble_info.disassembler_options</b>
55
+ =end
56
+ attr_accessor :options
57
+
58
+ =begin rdoc
59
+ The <i>args</i> hash can contain the following options:
60
+ bfd:: A Bfd::Target object to use for configuring the disassembler.
61
+ arch:: Architecture of target.
62
+ bfd:: Bfd::Target to use to configure the disassembler.
63
+ opts:: Disassembler options (see @options).
64
+ =end
65
+ def initialize(args)
66
+ end
67
+
68
+ =begin rdoc
69
+ Disassemble a single instruction.
70
+
71
+ The arguments are:
72
+
73
+ tgt:: The target to disassemble. This can be a filename, an IO object, a
74
+ Bfd::Section object, or a Bfd::Symbol object.
75
+ args:: A has of optional arguments.
76
+
77
+ The optional arguments can include:
78
+
79
+ vma:: Virtual Memory (Load) Address to disassemble.
80
+ buffer_vma:: Virtual Memory (Load) address of target.
81
+
82
+ This returns a hash with the following members:
83
+
84
+ vma:: Virtual Memory (Load) Address of the instruction.
85
+ size:: Size of the instruction in bytes.
86
+ info:: Meta-info for the instruction, if available.
87
+ insn:: Array of strings returned from libopcodes.
88
+
89
+ The <i>info</i> member is a hash with the following members:
90
+
91
+ branch_delay_insn:: How many instructions before branch takes effect.
92
+ data_size:: Size of data reference in instruction.
93
+ type:: Type of instruction (e.g. branch).
94
+ target:: Target address of branch or dereference.
95
+ target2:: Second target address.
96
+ =end
97
+ def ext_disasm_insn(tgt, args)
98
+ end
99
+
100
+ =begin rdoc
101
+ Disassemble instructions in a target.
102
+
103
+ The arguments are:
104
+
105
+ tgt:: The target to disassemble. This can be a filename, an IO object, a
106
+ Bfd::Section object, or a Bfd::Synmbol object.
107
+ args:: A has of optional arguments.
108
+
109
+ The optional arguments can include:
110
+
111
+ vma:: Virtual Memory (Load) Address to disassemble.
112
+ length:: Number of bytes to disassemble. The default is the length of the
113
+ buffer.
114
+ buffer_vma:: Virtual Memory (Load) address of target. Note that this will
115
+ override the VMA for Bfd objects if supplied; this allows
116
+ the caller to disassemble the first <i>n</i> bytes of
117
+ a Bfd::Section without knowing its VMA by specifying a
118
+ <i>buffer_vma</i> of 0 and a <i>length</i> of <i>n</i>.
119
+
120
+ This returns an array of the hash described in disasm_insn.
121
+ =end
122
+ def ext_disasm( tgt, args )
123
+ end
124
+
125
+
126
+ =begin rdoc
127
+ List the architectures supported by the local copy of libopcodes.
128
+ This returns an array of strings.
129
+ =end
130
+ def architectures()
131
+ end
132
+
133
+ end
134
+
135
+ end
136
+
137
+
@@ -0,0 +1,72 @@
1
+ /* ruby1.8_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 Opcodes_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 Opcodes_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
+ /* ruby1.8_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_18_COMPAT_H
10
+ #define RUBY_18_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 Opcodes_rb_hash_lookup2( VALUE, VALUE, VALUE );
19
+ #define rb_hash_lookup2( a1, a2, a3 ) Opcodes_rb_hash_lookup2(a1, a2, a3)
20
+ #endif
21
+
22
+ VALUE Opcodes_path2class(const char * path);
23
+ #define path2class(path) Opcodes_path2class(path)
24
+
25
+ #endif
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
3
+ # Unit test for Opcodes module
4
+
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+ require 'Opcodes'
8
+
9
+ def hex_buf( arr )
10
+ arr.collect{ |i| i.hex }.pack('C*')
11
+ end
12
+
13
+ # TODO: BFD test, AT&T vs Intel syntax test, etc
14
+
15
+ class TC_OpcodesModule < Test::Unit::TestCase
16
+
17
+ def test_nop
18
+ Opcodes::Disassembler.new( :arch => 'x86') do |dis|
19
+ buf = hex_buf( %w{ 90 90 90 } )
20
+ ops = dis.disasm( buf )
21
+ assert_equal( 3, ops.length )
22
+
23
+ result = dis.disasm_insn( buf )
24
+ assert_equal( 'nop', result[:insn].first )
25
+ end
26
+ end
27
+
28
+ def test_int3
29
+ Opcodes::Disassembler.new( :arch => 'x86' ) do |dis|
30
+ ops = dis.disasm( hex_buf( %w{ CC CC CC } ) )
31
+ assert_equal( 3, ops.length )
32
+ assert_equal( 'int3', ops.first[:insn].first.strip )
33
+ end
34
+ end
35
+
36
+ end
37
+
@@ -0,0 +1,556 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2010 Thoughtgang <http://www.thoughtgang.org>
3
+ # Unit test for Opcodes module BFD support
4
+
5
+ require 'test/unit'
6
+ require 'rubygems'
7
+ require 'Opcodes'
8
+
9
+ require 'BFD'
10
+ class TC_OpcodesModuleBfd < 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
+
545
+ Bfd::Target.from_buffer( TARGET_BUF ) do |tgt|
546
+ dis = Opcodes::Disassembler.new( :bfd => tgt ) do |dis|
547
+ ops = dis.disasm( tgt.sections['.text'] )
548
+ assert_equal( 145, ops.length )
549
+ assert_equal( 'xor', ops.first[:insn][0].strip )
550
+ assert_equal( 'nop', ops.last[:insn][0].strip )
551
+ end
552
+ end
553
+
554
+ end
555
+
556
+ end