ruby-yasm 0.1.0 → 0.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/Manifest.txt DELETED
@@ -1,17 +0,0 @@
1
- History.rdoc
2
- Manifest.txt
3
- README.rdoc
4
- Rakefile
5
- lib/yasm.rb
6
- lib/yasm/task.rb
7
- lib/yasm/program.rb
8
- lib/yasm/yasm.rb
9
- lib/yasm/version.rb
10
- tasks/spec.rb
11
- tasks/yard.rb
12
- spec/spec_helper.rb
13
- spec/helpers/files.rb
14
- spec/helpers/files/gas.S
15
- spec/task_spec.rb
16
- spec/program_spec.rb
17
- spec/yasm_spec.rb
data/README.rdoc DELETED
@@ -1,85 +0,0 @@
1
- = ruby-yasm
2
-
3
- * http://www.tortall.net/projects/yasm/
4
- * http://www.sophsec.com/
5
- * Postmodern (postmodern.mod3 at gmail.com)
6
-
7
- == DESCRIPTION:
8
-
9
- A Ruby interface to YASM.
10
-
11
- YASM is a complete rewrite of the NASM assembler, YASM currently supports
12
- the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes,
13
- outputs binary, ELF32, ELF64, 32 and 64-bit Mach-O, RDOFF2, COFF, Win32,
14
- and Win64 object formats, and generates source debugging information in
15
- STABS, DWARF 2, and CodeView 8 formats.
16
-
17
- == FEATURES:
18
-
19
- * Supports all of the +yasm+ command-line options.
20
-
21
- == EXAMPLES:
22
-
23
- * Assemble a binary file:
24
-
25
- YASM::Program.assemble do |yasm|
26
- yasm.syntax = :gas
27
- yasm.file = 'hello_world.S'
28
- yasm.output = 'hello_world.o'
29
- end
30
-
31
- * Assemble a binary file, and write the output to a temporary file:
32
-
33
- YASM::Program.assemble_temp do |yasm|
34
- yasm.syntax = :gas
35
- yasm.file = 'hello_world.S'
36
- end
37
- # => "/tmp/yasm.3386.0"
38
-
39
- * Assemble amd64 assembly, in GAS syntax, into an ELF64 file with
40
- debugging information:
41
-
42
- YASM::Program.assemble do |yasm|
43
- yasm.target! :amd64
44
-
45
- yasm.syntax = :gas
46
- yasm.file = 'hello_world.S'
47
-
48
- yasm.output = 'hello_world.o'
49
- yasm.output_format = :elf64
50
- yasm.debug_format = :stabs
51
- end
52
-
53
- == REQUIREMENTS:
54
-
55
- * {yasm}[http://www.tortall.net/projects/yasm/] >= 0.8.0.
56
- * {rprogram}[http://rprogram.rubyforge.org/] >= 0.1.8.
57
-
58
- == INSTALL:
59
-
60
- $ sudo gem install ruby-yasm
61
-
62
- == LICENSE:
63
-
64
- (The MIT License)
65
-
66
- Copyright (c) 2009 Hal Brodigan
67
-
68
- Permission is hereby granted, free of charge, to any person obtaining
69
- a copy of this software and associated documentation files (the
70
- 'Software'), to deal in the Software without restriction, including
71
- without limitation the rights to use, copy, modify, merge, publish,
72
- distribute, sublicense, and/or sell copies of the Software, and to
73
- permit persons to whom the Software is furnished to do so, subject to
74
- the following conditions:
75
-
76
- The above copyright notice and this permission notice shall be
77
- included in all copies or substantial portions of the Software.
78
-
79
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
80
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
82
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
83
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
84
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
85
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/lib/yasm/task.rb DELETED
@@ -1,161 +0,0 @@
1
- require 'yasm/yasm'
2
-
3
- require 'rprogram/task'
4
-
5
- module YASM
6
- #
7
- # == YASM options:
8
- #
9
- # <tt>--version</tt>:: <tt>yasm.version</tt>
10
- # <tt>--license</tt>:: <tt>yasm.license</tt>
11
- # <tt>--help</tt>:: <tt>yasm.help</tt>
12
- #
13
- # <tt>--arch</tt>:: <tt>yasm.arch</tt>
14
- # <tt>--parser</tt>:: <tt>yasm.parser</tt>
15
- # <tt>--preproc</tt>:: <tt>yasm.preprocessor</tt>
16
- # <tt>--oformat</tt>:: <tt>yasm.output_format</tt>
17
- # <tt>--dformat</tt>:: <tt>yasm.debug_format</tt>
18
- # <tt>--lformat</tt>:: <tt>yasm.list_format</tt>
19
- #
20
- # <tt>--list</tt>:: <tt>yasm.list_file</tt>
21
- # <tt>--objfile</tt>:: <tt>yasm.output</tt>
22
- # <tt>--mapfile</tt>:: <tt>yasm.map_file</tt>
23
- #
24
- # <tt>--machine</tt>:: <tt>yasm.machine</tt>
25
- # <tt>--force-strict</tt>:: <tt>yasm.force_strict</tt>
26
- # <tt>-w</tt>:: <tt>yasm.inhibit_warnings</tt>
27
- # <tt>-W</tt>:: <tt>yasm.toggle_warnings</tt>
28
- # <tt>-M</tt>:: <tt>yasm.gen_makefile_deps</tt>
29
- # <tt>-E</tt>:: <tt>yasm.redirect_errors_to</tt>
30
- # <tt>-e</tt>:: <tt>yasm.redirect_errors</tt>
31
- # <tt>--preproc-only</tt>:: <tt>yasm.preprocessor_only</tt>
32
- # <tt>-I</tt>:: <tt>yasm.include</tt>
33
- # <tt>-P</tt>:: <tt>yasm.pre_include</tt>
34
- # <tt>-D</tt>:: <tt>yasm.define</tt>
35
- # <tt>-U</tt>:: <tt>yasm.undefine</tt>
36
- # <tt>-X</tt>:: <tt>yasm.message_style</tt>
37
- # <tt>--prefix</tt>:: <tt>yasm.prefix</tt>
38
- # <tt>--suffix</tt>:: <tt>yasm.suffix</tt>
39
- #
40
- # <tt>file</tt>:: <tt>yasm.file</tt>
41
- #
42
- class Task < RProgram::Task
43
-
44
- # The known YASM targets
45
- TARGETS = {
46
- :x86 => {:arch => :x86, :machine => :x86},
47
- :amd64 => {:arch => :x86, :machine => :amd64},
48
- :lc3b => {:arch => :lc3b, :machine => :lc3b}
49
- }
50
-
51
- long_option :flag => '--version'
52
- long_option :flag => '--license'
53
- long_option :flag => '--help'
54
-
55
- long_option :flag => '--arch', :equals => true
56
- long_option :flag => '--parser', :equals => true
57
- long_option :flag => '--preproc',
58
- :equals => true,
59
- :name => :preprocessor
60
- long_option :flag => '--oformat',
61
- :equals => true,
62
- :name => :output_format
63
- long_option :flag => '--dformat',
64
- :equals => true,
65
- :name => :debug_format
66
- long_option :flag => '--lformat',
67
- :equals => true,
68
- :name => :list_format
69
-
70
- long_option :flag => '--list',
71
- :equals => true,
72
- :name => :list_file
73
- long_option :flag => '--objfile',
74
- :equals => true,
75
- :name => :output
76
- long_option :flag => '--mapfile',
77
- :equals => true,
78
- :name => :map_file
79
-
80
- long_option :flag => '--machine', :equals => true
81
- long_option :flag => '--force-strict'
82
- short_option :flag => '-w', :name => :inhibit_warnings
83
- short_option :flag => '-W', :name => :toggle_warnings
84
- short_option :flag => '-M', :name => :gen_makefile_deps
85
- short_option :flag => '-E', :name => :redirect_errors_to
86
- short_option :flag => '-s', :name => :redirect_errors
87
- long_option :flag => '--preproc-only', :name => :preprocessor_only
88
- short_option :flag => '-I', :name => :include, :multiple => true
89
- short_option :flag => '-P', :name => :pre_include, :multiple => true
90
- short_option :flag => '-D', :name => :define, :multiple => true
91
- short_option :flag => '-U', :name => :undefine, :multiple => true
92
- short_option :flag => '-X', :name => :message_style
93
- long_option :flag => '--prefix'
94
- long_option :flag => '--suffix'
95
-
96
- non_option :tailing => true, :name => :file
97
-
98
- #
99
- # Creates a new Task object.
100
- #
101
- # @param [Hash{Symbol => Object}] options
102
- # Additional options for the task.
103
- #
104
- # @option options [String, Symbol] :target
105
- # The arch/machine to target.
106
- #
107
- # @yield [task]
108
- # If a block is given, it will be passed the newly created task
109
- # object.
110
- #
111
- # @yieldparam [Task] task
112
- # The new task object.
113
- #
114
- # @see Task#target!
115
- #
116
- def initialize(options={},&block)
117
- target = options.delete(:target)
118
-
119
- super(options,&block)
120
-
121
- self.target!(target) if target
122
-
123
- self.parser ||= YASM.parser
124
- self.arch ||= YASM.arch
125
- self.machine ||= YASM.machine
126
- self.debug_format ||= YASM.debug_format
127
- self.output_format ||= YASM.output_format
128
- end
129
-
130
- #
131
- # Sets the YASM +arch+ and +machine+.
132
- #
133
- # @param [String, Symbol] name
134
- # The target name.
135
- #
136
- # @raise [RuntimeError]
137
- # The specified target is unknown.
138
- #
139
- # @return [true]
140
- # The YASM +arch+ and +machine+ options were set successfully.
141
- #
142
- # @example
143
- # yasm.target! :amd64
144
- #
145
- def target!(name)
146
- target = TARGETS[name.to_sym]
147
-
148
- unless target
149
- raise(RuntimeError,"unknown YASM target #{name.inspect}",caller)
150
- end
151
-
152
- self.arch = target[:arch]
153
- self.machine = target[:machine]
154
- return true
155
- end
156
-
157
- alias syntax parser
158
- alias syntax= parser=
159
-
160
- end
161
- end
data/lib/yasm/yasm.rb DELETED
@@ -1,142 +0,0 @@
1
- module YASM
2
- @@yasm_parser = nil
3
- @@yasm_arch = nil
4
- @@yasm_machine = nil
5
- @@yasm_debug_format = nil
6
- @@yasm_output_format = nil
7
-
8
- #
9
- # The default YASM parser to use.
10
- #
11
- # @return [Symbol]
12
- # The YASM parser.
13
- #
14
- def YASM.parser
15
- @@yasm_parser
16
- end
17
-
18
- #
19
- # Sets the default YASM parser to use.
20
- #
21
- # @param [Symbol, String] new_parser
22
- # The new YASM parser to use.
23
- #
24
- # @return [Symbol]
25
- # The new YASM parser to use.
26
- #
27
- def YASM.parser=(new_parser)
28
- @@yasm_parser = if new_parser.nil?
29
- nil
30
- else
31
- new_parser.to_sym
32
- end
33
- end
34
-
35
- #
36
- # The default YASM architecture to assemble for.
37
- #
38
- # @return [Symbol]
39
- # The YASM architecture.
40
- #
41
- def YASM.arch
42
- @@yasm_arch
43
- end
44
-
45
- #
46
- # Sets the default YASM architecture to assemble for.
47
- #
48
- # @param [Symbol, String] new_arch
49
- # The new YASM architecture to assemble for.
50
- #
51
- # @return [Symbol]
52
- # The new YASM architecture to assemble for.
53
- #
54
- def YASM.arch=(new_arch)
55
- if new_arch.nil?
56
- @@yasm_arch = nil
57
- else
58
- @@yasm_arch = new_arch.to_sym
59
- end
60
- end
61
-
62
- #
63
- # The default YASM machine to assemble for.
64
- #
65
- # @return [Symbol]
66
- # The YASM machine.
67
- #
68
- def YASM.machine
69
- @@yasm_machine ||= nil
70
- end
71
-
72
- #
73
- # Sets the default YASM machine to assemble for.
74
- #
75
- # @param [Symbol, String] new_machine
76
- # The new YASM machine to assemble for.
77
- #
78
- # @return [Symbol]
79
- # The new YASM machine to assemble for.
80
- #
81
- def YASM.machine=(new_machine)
82
- @@yasm_machine = if new_machine.nil?
83
- nil
84
- else
85
- new_machine.to_sym
86
- end
87
- end
88
-
89
- #
90
- # The default YASM debugging format to use.
91
- #
92
- # @return [Symbol]
93
- # The YASM debugging format.
94
- #
95
- def YASM.debug_format
96
- @@yasm_debug_format
97
- end
98
-
99
- #
100
- # Sets the default YASM debugging format to use.
101
- #
102
- # @param [Symbol, String] new_format
103
- # The new YASM debugging format to use.
104
- #
105
- # @return [Symbol]
106
- # The new YASM debugging format to use.
107
- #
108
- def YASM.debug_format=(new_format)
109
- @@yasm_debug_format = if new_format.nil?
110
- nil
111
- else
112
- new_format.to_sym
113
- end
114
- end
115
-
116
- #
117
- # The default YASM output format to use.
118
- #
119
- # @return [Symbol]
120
- # The YASM output format.
121
- #
122
- def YASM.output_format
123
- @@yasm_output_format
124
- end
125
-
126
- #
127
- # Sets the default YASM output format to use.
128
- #
129
- # @param [Symbol, String] new_format
130
- # The new YASM output format to use.
131
- #
132
- # @return [Symbol]
133
- # The new YASM output format to use.
134
- #
135
- def YASM.output_format=(new_format)
136
- @@yasm_output_format = if new_format.nil?
137
- nil
138
- else
139
- new_format.to_sym
140
- end
141
- end
142
- end
data/spec/task_spec.rb DELETED
@@ -1,182 +0,0 @@
1
- require 'yasm/task'
2
-
3
- require 'spec_helper'
4
-
5
- describe Task do
6
- it "should support a :target option" do
7
- task = Task.new(:target => :amd64)
8
-
9
- task.arch.should == :x86
10
- task.machine.should == :amd64
11
- end
12
-
13
- describe "default" do
14
- describe "parser" do
15
- before(:all) do
16
- @old_parser = YASM.parser
17
-
18
- YASM.parser = :tasm
19
- end
20
-
21
- it "should have a default parser value" do
22
- task = Task.new
23
- task.parser.should == :tasm
24
- end
25
-
26
- it "should allow overriding the default parser" do
27
- task = Task.new(:parser => :gas)
28
- task.parser.should == :gas
29
- end
30
-
31
- after(:all) do
32
- YASM.parser = @old_parser
33
- end
34
- end
35
-
36
- describe "arch" do
37
- before(:all) do
38
- @old_arch = YASM.arch
39
-
40
- YASM.arch = :lc3b
41
- end
42
-
43
- it "should have a default arch value" do
44
- task = Task.new
45
- task.arch.should == :lc3b
46
- end
47
-
48
- it "should allow overriding the default arch" do
49
- task = Task.new(:arch => :x86)
50
- task.arch.should == :x86
51
- end
52
-
53
- after(:all) do
54
- YASM.arch = @old_arch
55
- end
56
- end
57
-
58
- describe "machine" do
59
- before(:all) do
60
- @old_machine = YASM.machine
61
-
62
- YASM.machine = :amd64
63
- end
64
-
65
- it "should have a default machine value" do
66
- task = Task.new
67
- task.machine.should == :amd64
68
- end
69
-
70
- it "should allow overriding the default machine" do
71
- task = Task.new(:machine => :x86)
72
- task.machine.should == :x86
73
- end
74
-
75
- after(:all) do
76
- YASM.machine = @old_machine
77
- end
78
- end
79
-
80
- describe "debug_format" do
81
- before(:all) do
82
- @old_debug_format = YASM.debug_format
83
-
84
- YASM.debug_format = :stabs
85
- end
86
-
87
- it "should have a default debug_format value" do
88
- task = Task.new
89
- task.debug_format.should == :stabs
90
- end
91
-
92
- it "should allow overriding the default debug_format" do
93
- task = Task.new(:debug_format => :null)
94
- task.debug_format.should == :null
95
- end
96
-
97
- after(:all) do
98
- YASM.debug_format = @old_debug_format
99
- end
100
- end
101
-
102
- describe "output_format" do
103
- before(:all) do
104
- @old_output_format = YASM.output_format
105
-
106
- YASM.output_format = :elf64
107
- end
108
-
109
- it "should have a default output_format value" do
110
- task = Task.new
111
- task.output_format.should == :elf64
112
- end
113
-
114
- it "should allow overriding the default output_format" do
115
- task = Task.new(:output_format => :bin)
116
- task.output_format.should == :bin
117
- end
118
-
119
- after(:all) do
120
- YASM.output_format = @old_output_format
121
- end
122
- end
123
- end
124
-
125
- describe "target!" do
126
- it "should return true for valid targets" do
127
- task = Task.new
128
-
129
- task.target!(:amd64).should == true
130
- end
131
-
132
- it "should raise RuntimeError when passed unknown targets" do
133
- task = Task.new
134
-
135
- lambda {
136
- task.target! :lol
137
- }.should raise_error(RuntimeError)
138
- end
139
-
140
- describe "x86" do
141
- before(:all) do
142
- @task = Task.new { |task| task.target! :x86 }
143
- end
144
-
145
- it "should set the arch value" do
146
- @task.arch.should == :x86
147
- end
148
-
149
- it "should set the machine value" do
150
- @task.machine.should == :x86
151
- end
152
- end
153
-
154
- describe "amd64" do
155
- before(:all) do
156
- @task = Task.new { |task| task.target! :amd64 }
157
- end
158
-
159
- it "should set the arch value" do
160
- @task.arch.should == :x86
161
- end
162
-
163
- it "should set the machine value" do
164
- @task.machine.should == :amd64
165
- end
166
- end
167
-
168
- describe "lc3b" do
169
- before(:all) do
170
- @task = Task.new { |task| task.target! :lc3b }
171
- end
172
-
173
- it "should set the arch value" do
174
- @task.arch.should == :lc3b
175
- end
176
-
177
- it "should set the machine value" do
178
- @task.machine.should == :lc3b
179
- end
180
- end
181
- end
182
- end
data/tasks/spec.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'spec/rake/spectask'
2
-
3
- desc "Run all specifications"
4
- Spec::Rake::SpecTask.new(:spec) do |t|
5
- t.libs += ['lib', 'spec']
6
- t.spec_opts = ['--colour', '--format', 'specdoc']
7
- end
8
-
9
- task :test => :spec
10
- task :default => :spec
data/tasks/yard.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'yard'
2
-
3
- YARD::Rake::YardocTask.new do |t|
4
- t.files = ['lib/**/*.rb']
5
- t.options = [
6
- '--protected',
7
- '--files', 'History.rdoc',
8
- '--title', 'Ruby YASM',
9
- '--quiet'
10
- ]
11
- end
12
-
13
- task :docs => :yard
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file