Opcodes 1.3.0

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