wilson 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +2 -0
- data/History.txt +11 -0
- data/Manifest.txt +2 -0
- data/Rakefile +1 -53
- data/bench.rb +128 -0
- data/example.rb +216 -0
- data/lib/wilson.rb +30 -11
- metadata +38 -7
- metadata.gz.sig +1 -0
data.tar.gz.sig
ADDED
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -4,68 +4,16 @@ require 'rubygems'
|
|
4
4
|
require 'hoe'
|
5
5
|
require './lib/wilson.rb'
|
6
6
|
|
7
|
-
|
7
|
+
Hoe.new('wilson', Wilson::VERSION) do |p|
|
8
8
|
p.rubyforge_name = 'seattlerb'
|
9
9
|
p.developer('Ryan Davis', 'ryand-ruby@zenspider.com')
|
10
10
|
end
|
11
11
|
|
12
|
-
class Hoe
|
13
|
-
def test_cmd flavor = nil
|
14
|
-
msg = flavor ? :sh : :ruby
|
15
|
-
tests = ["rubygems", self.testlib] +
|
16
|
-
test_globs.map { |g| Dir.glob(g) }.flatten
|
17
|
-
tests.map! {|f| %Q(require "#{f}")}
|
18
|
-
cmd = "#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
|
19
|
-
|
20
|
-
ENV['EXCLUDED_VERSIONS'] = multiruby_skip.join(":")
|
21
|
-
|
22
|
-
cmd = "#{flavor} #{cmd}" if flavor
|
23
|
-
|
24
|
-
return msg, cmd
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# def run_tests(multi=false) # :nodoc:
|
29
|
-
# msg = multi ? :sh : :ruby
|
30
|
-
# cmd = if test ?f, 'test/test_all.rb' then
|
31
|
-
# "#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
|
32
|
-
# else
|
33
|
-
# tests = ["rubygems", self.testlib] +
|
34
|
-
# test_globs.map { |g| Dir.glob(g) }.flatten
|
35
|
-
# tests.map! {|f| %Q(require "#{f}")}
|
36
|
-
# "#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
|
37
|
-
# end
|
38
|
-
#
|
39
|
-
# excludes = multiruby_skip.join(":")
|
40
|
-
# ENV['EXCLUDED_VERSIONS'] = excludes
|
41
|
-
# cmd = "multiruby #{cmd}" if multi
|
42
|
-
#
|
43
|
-
# send msg, cmd
|
44
|
-
# end
|
45
|
-
|
46
12
|
namespace :test do
|
47
13
|
desc "profiles your tests"
|
48
14
|
task :prof do
|
49
15
|
send(*h.test_cmd(:zenprofile))
|
50
16
|
end
|
51
|
-
|
52
|
-
desc "rcov your tests"
|
53
|
-
task :rcov do
|
54
|
-
raise "not yet"
|
55
|
-
end
|
56
17
|
end
|
57
18
|
|
58
|
-
begin
|
59
|
-
require 'rcov/rcovtask'
|
60
|
-
Rcov::RcovTask.new do |t|
|
61
|
-
pattern = ENV['PATTERN'] || 'test/test_*.rb'
|
62
|
-
|
63
|
-
t.test_files = FileList[pattern]
|
64
|
-
t.verbose = true
|
65
|
-
t.rcov_opts << "--threshold 80"
|
66
|
-
t.rcov_opts << "--no-color"
|
67
|
-
end
|
68
|
-
rescue LoadError
|
69
|
-
# skip
|
70
|
-
end
|
71
19
|
# vim: syntax=Ruby
|
data/bench.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
|
3
|
+
# % rm -r ~/.ruby_inline; ./bench.rb 1_000_000 1_000
|
4
|
+
# # of iterations = 1000000
|
5
|
+
# user system total real
|
6
|
+
# null_time 0.130000 0.000000 0.130000 ( 0.123534)
|
7
|
+
# c-nil 0.280000 0.000000 0.280000 ( 0.284030)
|
8
|
+
# asm-nil 0.270000 0.000000 0.270000 ( 0.278700)
|
9
|
+
# c 0.830000 0.010000 0.840000 ( 0.841285)
|
10
|
+
# asm2 0.840000 0.000000 0.840000 ( 0.842834)
|
11
|
+
# asm 3.510000 0.010000 3.520000 ( 3.543986)
|
12
|
+
# ruby 89.790000 0.200000 89.990000 ( 90.653678)
|
13
|
+
|
14
|
+
$: << 'lib'
|
15
|
+
require 'wilson'
|
16
|
+
require 'rubygems'
|
17
|
+
require 'inline'
|
18
|
+
require 'benchmark'
|
19
|
+
|
20
|
+
max = (ARGV.shift || 10_000_000).to_i
|
21
|
+
$n = (ARGV.shift || 10).to_i
|
22
|
+
|
23
|
+
class Counter
|
24
|
+
inline do |builder|
|
25
|
+
builder.c "VALUE cee_nil() { return Qnil;}"
|
26
|
+
builder.c "long cee() { long i; for (i = 0;i<#{$n};i++) {}; return i;}"
|
27
|
+
end
|
28
|
+
|
29
|
+
# 00000f7a pushl %ebp
|
30
|
+
# 00000f7b xorl %eax,%eax
|
31
|
+
# 00000f7d movl %esp,%ebp
|
32
|
+
# 00000f7f incl %eax
|
33
|
+
# 00000f80 cmpl $0x000003e8,%eax
|
34
|
+
# 00000f85 jne 0x00000f7f
|
35
|
+
# 00000f87 leave
|
36
|
+
# 00000f88 movw $0x07d1,%ax
|
37
|
+
# 00000f8c ret
|
38
|
+
|
39
|
+
defasm :asm_nil do
|
40
|
+
eax.mov 4
|
41
|
+
end
|
42
|
+
|
43
|
+
defasm :asm do
|
44
|
+
eax.mov 0
|
45
|
+
ecx.mov $n
|
46
|
+
count = self.label
|
47
|
+
eax.add 1
|
48
|
+
count.loop
|
49
|
+
|
50
|
+
eax.add eax # fixnum: n + n + 1
|
51
|
+
eax.inc
|
52
|
+
end
|
53
|
+
|
54
|
+
# 00000000 55 push ebp
|
55
|
+
# 00000001 89E5 mov ebp,esp
|
56
|
+
# 00000003 56 push esi
|
57
|
+
# 00000004 57 push edi
|
58
|
+
# 00000005 B800000000 mov eax,0x0
|
59
|
+
# 0000000A B910270000 mov ecx,0x2710
|
60
|
+
# 0000000F 83C001 add eax,byte +0x1
|
61
|
+
# 00000012 E2FB loop 0xf
|
62
|
+
# 00000014 01C0 add eax,eax
|
63
|
+
# 00000016 40 inc eax
|
64
|
+
# 00000017 5F pop edi
|
65
|
+
# 00000018 5E pop esi
|
66
|
+
# 00000019 C9 leave
|
67
|
+
# 0000001A C3 ret
|
68
|
+
|
69
|
+
defasm :asm2 do
|
70
|
+
eax.mov 0
|
71
|
+
count = self.label
|
72
|
+
eax.inc
|
73
|
+
eax.cmp $n
|
74
|
+
jne count
|
75
|
+
|
76
|
+
eax.add eax # fixnum: n + n + 1
|
77
|
+
eax.inc
|
78
|
+
end
|
79
|
+
|
80
|
+
# 00000000 55 push ebp
|
81
|
+
# 00000001 89E5 mov ebp,esp
|
82
|
+
# 00000003 B800000000 mov eax,0x0
|
83
|
+
# 00000008 40 inc eax
|
84
|
+
# 00000009 3DE8030000 cmp eax,0x3e8
|
85
|
+
# 0000000E 75F8 jnz 0x8
|
86
|
+
# 00000010 01C0 add eax,eax
|
87
|
+
# 00000012 40 inc eax
|
88
|
+
# 00000013 C9 leave
|
89
|
+
# 00000014 C3 ret
|
90
|
+
|
91
|
+
def ruby_nil
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
|
95
|
+
def ruby
|
96
|
+
$n.times do; end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
counter = Counter.new
|
101
|
+
|
102
|
+
raise "bad c_nil" unless counter.cee_nil.nil?
|
103
|
+
raise "bad asm_nil" unless counter.asm_nil.nil?
|
104
|
+
raise "bad c" unless counter.cee == $n
|
105
|
+
raise "bad asm2" unless counter.asm2 == $n
|
106
|
+
raise "bad asm" unless counter.asm == $n
|
107
|
+
raise "bad ruby" unless counter.ruby == $n
|
108
|
+
|
109
|
+
puts "# of iterations = #{max}"
|
110
|
+
puts "$n = #{$n}"
|
111
|
+
puts
|
112
|
+
Benchmark::bm(20) do |x|
|
113
|
+
x.report("null_time") do
|
114
|
+
for i in 0..max do
|
115
|
+
# do nothing
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
%w(cee_nil asm_nil ruby_nil cee asm2 asm ruby).each do |name|
|
120
|
+
eval "
|
121
|
+
x.report(#{name.inspect}) do
|
122
|
+
for i in 0..max do
|
123
|
+
counter.#{name}
|
124
|
+
end
|
125
|
+
end
|
126
|
+
"
|
127
|
+
end
|
128
|
+
end
|
data/example.rb
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
$: << 'lib'
|
5
|
+
require 'wilson'
|
6
|
+
|
7
|
+
class Examples
|
8
|
+
defasm :count_to_ten do
|
9
|
+
eax.mov 0
|
10
|
+
ecx.mov 10
|
11
|
+
count = self.label
|
12
|
+
eax.add 1
|
13
|
+
count.loop
|
14
|
+
|
15
|
+
to_ruby eax
|
16
|
+
end
|
17
|
+
|
18
|
+
defasm :three_plus_four do
|
19
|
+
eax.mov 3
|
20
|
+
eax.add 4
|
21
|
+
|
22
|
+
# convert machine fixnum to ruby fixnum. aka: ((x << 1) + 1)
|
23
|
+
to_ruby eax
|
24
|
+
end
|
25
|
+
|
26
|
+
defasm :jump_forward do
|
27
|
+
future = self.future_label
|
28
|
+
eax.xor eax
|
29
|
+
future.jmp
|
30
|
+
eax.inc
|
31
|
+
future.plant
|
32
|
+
end
|
33
|
+
|
34
|
+
defasm :first_in_array, :array do
|
35
|
+
# edx.mov array
|
36
|
+
# eax.xor eax
|
37
|
+
# al.mov edx
|
38
|
+
end
|
39
|
+
|
40
|
+
defasm :add, :a, :b do
|
41
|
+
# eax.mov a
|
42
|
+
# eax.add b
|
43
|
+
end
|
44
|
+
|
45
|
+
defasm :sum, :array, :len do
|
46
|
+
# edx.mov array
|
47
|
+
# ecx.mov len
|
48
|
+
# ecx.dec
|
49
|
+
# eax.xor eax
|
50
|
+
# al.add edx
|
51
|
+
|
52
|
+
# repeat = self.label
|
53
|
+
# al.add edx + ecx
|
54
|
+
# repeat.loop
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class TestExamples < Test::Unit::TestCase
|
59
|
+
def setup
|
60
|
+
warn name
|
61
|
+
@x = Examples.new
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_three_plus_four
|
65
|
+
assert_equal 7, @x.three_plus_four
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_three_plus_four_again
|
69
|
+
assert_equal 7, @x.three_plus_four
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_jump_forward
|
73
|
+
assert_equal false, @x.jump_forward
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_three_plus_four_again_again
|
77
|
+
assert_equal 7, @x.three_plus_four
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_jump_forward_again
|
81
|
+
assert_equal false, @x.jump_forward
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_count_to_ten
|
85
|
+
expect = 10
|
86
|
+
actual = @x.count_to_ten
|
87
|
+
assert_equal expect, actual #
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_add
|
91
|
+
# assert_equal 7, @x.add(3, 4)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_first_in_array
|
95
|
+
# array = [5, 6, 7, 8, 9, 100]
|
96
|
+
# assert_equal 5, @x.first_in_array(array)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_sum
|
100
|
+
# | array |
|
101
|
+
# array = #[ 5 6 7 8 9 100 ] gc_copy_to_heap
|
102
|
+
# self assert: (Sum call_with: array with: 5) = 35
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class ARC4
|
107
|
+
# ARC4 API
|
108
|
+
|
109
|
+
# encryptInPlace: byteArray length: length
|
110
|
+
# | array |
|
111
|
+
# array = byteArray gcCopyToHeap
|
112
|
+
# self encryptArrayOnHeap: array length: length
|
113
|
+
# array copyAt: 0 to: byteArray size: length startingAt: 1
|
114
|
+
|
115
|
+
# encrypt: string
|
116
|
+
# | array result |
|
117
|
+
# array = string gcCopyToHeap
|
118
|
+
# self encryptArrayOnHeap: array length: string size
|
119
|
+
# result = ByteArray new: string size
|
120
|
+
# array copyAt: 0 to: result size: string size startingAt: 1
|
121
|
+
# ^result
|
122
|
+
|
123
|
+
# setKey: key
|
124
|
+
# self s: (Security.ARC4 new setKey: key asByteArray) s i: 0 j: 0
|
125
|
+
|
126
|
+
# encryptArrayOnHeap: array length: length
|
127
|
+
# | args |
|
128
|
+
# args = Array new: 5
|
129
|
+
# args at: 1 put: array
|
130
|
+
# args at: 2 put: length
|
131
|
+
# args at: 3 put: s
|
132
|
+
# args at: 4 put: i
|
133
|
+
# args at: 5 put: j
|
134
|
+
# ARC4Encrypt type baseType call: ARC4Encrypt withArguments: args
|
135
|
+
|
136
|
+
# ARC4 assembler
|
137
|
+
|
138
|
+
# repeat: times do: aBlock
|
139
|
+
# | repeat |
|
140
|
+
# ecx mov: times
|
141
|
+
# repeat = self label
|
142
|
+
# ecx push
|
143
|
+
# aBlock value
|
144
|
+
# ecx pop
|
145
|
+
# repeat loop
|
146
|
+
|
147
|
+
# arc4_encrypt: pArray len: len s: pS i: pI j: pJ
|
148
|
+
# <asm: void ARC4Encrypt( unsigned char* array, unsigned int len, unsigned char* s, unsigned int* i, unsigned int* j)>
|
149
|
+
# " edi = current character of @array that we're encrypting
|
150
|
+
# esi = address of @s keystream
|
151
|
+
# ecx = @len counting down
|
152
|
+
# eax = current math
|
153
|
+
# ebx = @i
|
154
|
+
# edx = @j
|
155
|
+
# current character to be encoded = [edi]
|
156
|
+
# current character at s[i] = [esi+ebx]
|
157
|
+
# current character at s[j] = [esi+edx]
|
158
|
+
# "
|
159
|
+
# ebx get: pI
|
160
|
+
# edx get: pJ
|
161
|
+
# esi mov: pS
|
162
|
+
# edi mov: pArray
|
163
|
+
# self repeat: len do: [
|
164
|
+
# bl inc. "i = (i + 1) mod: 255"
|
165
|
+
# al mov: [esi+ebx]. "si = s[i]"
|
166
|
+
# dl add: [esi+ebx]. "j = (j + s[i]) mod 256"
|
167
|
+
# cl mov: [esi+edx]. "sj = s[j]"
|
168
|
+
# "swap S[i] and S[j]"
|
169
|
+
# [esi+edx] mov: al. "s[j] = si"
|
170
|
+
# [esi+ebx] mov: cl. "s[i] = sj"
|
171
|
+
# al add: cl. "s[i] + s[j]"
|
172
|
+
# al mov: [esi+eax]. "s[s] mod 256"
|
173
|
+
# "array ^ s[s]"
|
174
|
+
# al xor: [edi]
|
175
|
+
# [edi] mov: al
|
176
|
+
# edi add: 1
|
177
|
+
# ]
|
178
|
+
# eax mov: pI
|
179
|
+
# [eax] mov: ebx
|
180
|
+
# eax mov: pJ
|
181
|
+
# [eax] mov: edx
|
182
|
+
|
183
|
+
# ARC4 initialize-release
|
184
|
+
|
185
|
+
# s: anS i: aI j: aJ
|
186
|
+
# s = anS gcCopyToHeap
|
187
|
+
# i = aI gcCopyToHeap
|
188
|
+
# j = aJ gcCopyToHeap
|
189
|
+
end
|
190
|
+
|
191
|
+
class TestARC4 < Test::Unit::TestCase
|
192
|
+
# ARC4Test testing
|
193
|
+
|
194
|
+
def testAttackAtDawn
|
195
|
+
# | encrypted |
|
196
|
+
# encrypted = ARC4 new setKey: 'Secret'; encrypt: 'Attack at dawn'
|
197
|
+
# self assert: (self decrypt: encrypted key: 'Secret') = 'Attack at dawn'
|
198
|
+
|
199
|
+
# decrypt: array key: key
|
200
|
+
# | arc4 |
|
201
|
+
# (arc4 = Security.ARC4 new) setKey: key asByteArray
|
202
|
+
# ^(array collect: [:e | arc4 decryptByte: e]) asString
|
203
|
+
end
|
204
|
+
|
205
|
+
def testPlaintext
|
206
|
+
# | encrypted |
|
207
|
+
# encrypted = ARC4 new setKey: 'Key'; encrypt: 'Plaintext'
|
208
|
+
# self assert: (self decrypt: encrypted key: 'Key') = 'Plaintext'
|
209
|
+
end
|
210
|
+
|
211
|
+
def testWikipedia
|
212
|
+
# | encrypted |
|
213
|
+
# encrypted = ARC4 new setKey: 'Wiki'; encrypt: 'pedia'
|
214
|
+
# self assert: (self decrypt: encrypted key: 'Wiki') = 'pedia'
|
215
|
+
end
|
216
|
+
end
|
data/lib/wilson.rb
CHANGED
@@ -29,17 +29,18 @@ class Integer
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
@@asm = []
|
32
|
+
ASM = []
|
34
33
|
|
34
|
+
class Module
|
35
35
|
def defasm name, *args, &block
|
36
36
|
asm = Wilson::MachineCodeX86.new
|
37
37
|
|
38
38
|
asm.ebp.push
|
39
|
-
# asm.esi.push # TODO?
|
40
|
-
# asm.edi.push
|
41
39
|
asm.ebp.mov asm.esp
|
42
40
|
|
41
|
+
asm.esi.push
|
42
|
+
asm.edi.push
|
43
|
+
|
43
44
|
size = asm.stream.size
|
44
45
|
|
45
46
|
asm.instance_eval(&block)
|
@@ -49,17 +50,30 @@ class Module
|
|
49
50
|
asm.eax.mov 4
|
50
51
|
end
|
51
52
|
|
52
|
-
|
53
|
-
|
54
|
-
# asm.ebp.pop
|
53
|
+
asm.edi.pop
|
54
|
+
asm.esi.pop
|
55
55
|
|
56
56
|
asm.leave
|
57
57
|
asm.ret
|
58
58
|
|
59
59
|
code = asm.stream.pack("C*")
|
60
|
-
@@asm << code
|
61
60
|
|
62
|
-
|
61
|
+
if $DEBUG then
|
62
|
+
path = "#{name}.obj"
|
63
|
+
File.open path, "wb" do |f|
|
64
|
+
f.write code
|
65
|
+
end
|
66
|
+
|
67
|
+
p name
|
68
|
+
puts code.unpack("C*").map { |n| "%02X" % n }.join(' ')
|
69
|
+
system "ndisasm -u #{path}"
|
70
|
+
|
71
|
+
File.unlink path
|
72
|
+
end
|
73
|
+
|
74
|
+
ptr = code.to_ptr
|
75
|
+
ASM << ptr
|
76
|
+
Ruby.rb_define_method self, name.to_s, ptr, 0
|
63
77
|
end
|
64
78
|
end
|
65
79
|
|
@@ -109,7 +123,7 @@ class Array
|
|
109
123
|
end
|
110
124
|
|
111
125
|
module Wilson
|
112
|
-
VERSION = '1.0.
|
126
|
+
VERSION = '1.0.1'
|
113
127
|
|
114
128
|
##
|
115
129
|
# Assembler parses the NASM documentation and creates Command
|
@@ -581,7 +595,7 @@ module Wilson
|
|
581
595
|
##
|
582
596
|
# MachineCode is an abstract machine that has subclasses for each
|
583
597
|
# concrete machine type that you can write assembly language for.
|
584
|
-
# Right now this library only supports X86, so
|
598
|
+
# Right now this library only supports X86, so look at
|
585
599
|
# MachineCodeX86 for more details on how to use it.
|
586
600
|
|
587
601
|
class MachineCode
|
@@ -848,6 +862,11 @@ module Wilson
|
|
848
862
|
self.esi = Register.on_id_bits self, 6, 32
|
849
863
|
self.edi = Register.on_id_bits self, 7, 32
|
850
864
|
end
|
865
|
+
|
866
|
+
def to_ruby reg
|
867
|
+
reg.add reg
|
868
|
+
reg.inc
|
869
|
+
end
|
851
870
|
end
|
852
871
|
|
853
872
|
##
|
metadata
CHANGED
@@ -1,15 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wilson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
|
14
|
+
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
15
|
+
GRYDY29tMB4XDTA5MDMwNjE4NTMxNVoXDTEwMDMwNjE4NTMxNVowRTETMBEGA1UE
|
16
|
+
AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
|
17
|
+
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
|
18
|
+
b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
|
19
|
+
taCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT
|
20
|
+
oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
|
21
|
+
GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
|
22
|
+
qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
|
23
|
+
gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
24
|
+
HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
|
25
|
+
AQAY59gYvDxqSqgC92nAP9P8dnGgfZgLxP237xS6XxFGJSghdz/nI6pusfCWKM8m
|
26
|
+
vzjjH2wUMSSf3tNudQ3rCGLf2epkcU13/rguI88wO6MrE0wi4ZqLQX+eZQFskJb/
|
27
|
+
w6x9W1ur8eR01s397LSMexySDBrJOh34cm2AlfKr/jokKCTwcM0OvVZnAutaovC0
|
28
|
+
l1SVZ0ecg88bsWHA0Yhh7NFxK1utWoIhtB6AFC/+trM0FQEB/jZkIS8SaNzn96Rl
|
29
|
+
n0sZEf77FLf5peR8TP/PtmIg7Cyqz23sLM4mCOoTGIy5OcZ8TdyiyINUHtb5ej/T
|
30
|
+
FBHgymkyj/AOSqKRIpXPhjC6
|
31
|
+
-----END CERTIFICATE-----
|
11
32
|
|
12
|
-
date: 2009-
|
33
|
+
date: 2009-04-22 00:00:00 -07:00
|
13
34
|
default_executable:
|
14
35
|
dependencies:
|
15
36
|
- !ruby/object:Gem::Dependency
|
@@ -20,9 +41,15 @@ dependencies:
|
|
20
41
|
requirements:
|
21
42
|
- - ">="
|
22
43
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
44
|
+
version: 1.12.2
|
24
45
|
version:
|
25
|
-
description:
|
46
|
+
description: |-
|
47
|
+
Wilson is a pure ruby x86 assembler. No, really. Worst Idea Evar.
|
48
|
+
|
49
|
+
Why "wilson"? I wanted to name it "metal", but there is an existing
|
50
|
+
project with that name... So I'm naming it after Wilson Bilkovich, who
|
51
|
+
is about as metal as you can get (and it is easier to spell than
|
52
|
+
"bilkovich", even tho that sounds more metal).
|
26
53
|
email:
|
27
54
|
- ryand-ruby@zenspider.com
|
28
55
|
executables: []
|
@@ -38,10 +65,14 @@ files:
|
|
38
65
|
- Manifest.txt
|
39
66
|
- README.txt
|
40
67
|
- Rakefile
|
68
|
+
- bench.rb
|
69
|
+
- example.rb
|
41
70
|
- lib/wilson.rb
|
42
71
|
- test/test_wilson.rb
|
43
72
|
has_rdoc: true
|
44
73
|
homepage: http://rubyforge.org/projects/seattlerb
|
74
|
+
licenses: []
|
75
|
+
|
45
76
|
post_install_message:
|
46
77
|
rdoc_options:
|
47
78
|
- --main
|
@@ -63,9 +94,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
94
|
requirements: []
|
64
95
|
|
65
96
|
rubyforge_project: seattlerb
|
66
|
-
rubygems_version: 1.3.
|
97
|
+
rubygems_version: 1.3.2
|
67
98
|
signing_key:
|
68
|
-
specification_version:
|
99
|
+
specification_version: 3
|
69
100
|
summary: Wilson is a pure ruby x86 assembler
|
70
101
|
test_files:
|
71
102
|
- test/test_wilson.rb
|
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
�����GXo�����������Ut������{t=�b��_C>H>�Q�ݘ�w��;�5+��°Ut^�{��"}��<���k���h0���$j�G4g��&��͒u�[�j�$]r@8g�#)V�!� �ԧ�D��Bf}c�Fv-�5���?(;p�9s�g����^��f~r�~�<����'_$�*�E�՞��h�Y�3����T43�8og����CNh7R��t柨�Iy�d*c�*O��9�
|