wilson 1.0.0 → 1.0.1
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.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�
|