ronin-code-asm 1.0.0.beta1 → 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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +5 -2
  3. data/.ruby-version +1 -1
  4. data/.yardopts +1 -1
  5. data/ChangeLog.md +7 -2
  6. data/Gemfile +2 -2
  7. data/README.md +66 -5
  8. data/gemspec.yml +3 -3
  9. data/lib/ronin/code/asm/archs/amd64.rb +3 -3
  10. data/lib/ronin/code/asm/archs/x86.rb +6 -6
  11. data/lib/ronin/code/asm/archs.rb +3 -3
  12. data/lib/ronin/code/asm/config.rb +1 -1
  13. data/lib/ronin/code/asm/immediate_operand.rb +1 -1
  14. data/lib/ronin/code/asm/instruction.rb +2 -2
  15. data/lib/ronin/code/asm/memory_operand.rb +2 -2
  16. data/lib/ronin/code/asm/os/freebsd.rb +2 -2
  17. data/lib/ronin/code/asm/os/linux.rb +2 -2
  18. data/lib/ronin/code/asm/os/os.rb +2 -2
  19. data/lib/ronin/code/asm/os.rb +4 -4
  20. data/lib/ronin/code/asm/program.rb +13 -13
  21. data/lib/ronin/code/asm/register.rb +3 -3
  22. data/lib/ronin/code/asm/shellcode.rb +1 -1
  23. data/lib/ronin/code/asm/syntax/att.rb +1 -1
  24. data/lib/ronin/code/asm/syntax/common.rb +1 -1
  25. data/lib/ronin/code/asm/syntax/intel.rb +1 -1
  26. data/lib/ronin/code/asm/syntax.rb +1 -1
  27. data/lib/ronin/code/asm/version.rb +2 -2
  28. data/lib/ronin/code/asm.rb +4 -4
  29. data/ronin-code-asm.gemspec +2 -1
  30. metadata +7 -32
  31. data/spec/asm_spec.rb +0 -14
  32. data/spec/config_spec.rb +0 -10
  33. data/spec/immediate_operand_spec.rb +0 -79
  34. data/spec/instruction_spec.rb +0 -62
  35. data/spec/memory_operand_spec.rb +0 -80
  36. data/spec/os_spec.rb +0 -68
  37. data/spec/program_spec.rb +0 -439
  38. data/spec/register_spec.rb +0 -112
  39. data/spec/shellcode_spec.rb +0 -58
  40. data/spec/spec_helper.rb +0 -7
  41. data/spec/syntax/att_spec.rb +0 -181
  42. data/spec/syntax/common_spec.rb +0 -42
  43. data/spec/syntax/intel_spec.rb +0 -174
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ronin-code-asm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta1
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-01 00:00:00.000000000 Z
11
+ date: 2025-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-yasm
@@ -86,27 +86,14 @@ files:
86
86
  - lib/ronin/code/asm/syntax/intel.rb
87
87
  - lib/ronin/code/asm/version.rb
88
88
  - ronin-code-asm.gemspec
89
- - spec/asm_spec.rb
90
- - spec/config_spec.rb
91
- - spec/immediate_operand_spec.rb
92
- - spec/instruction_spec.rb
93
- - spec/memory_operand_spec.rb
94
- - spec/os_spec.rb
95
- - spec/program_spec.rb
96
- - spec/register_spec.rb
97
- - spec/shellcode_spec.rb
98
- - spec/spec_helper.rb
99
- - spec/syntax/att_spec.rb
100
- - spec/syntax/common_spec.rb
101
- - spec/syntax/intel_spec.rb
102
89
  homepage: https://github.com/ronin-rb/ronin-code-asm#readme
103
90
  licenses:
104
- - LGPL-3.0
91
+ - LGPL-3.0-or-later
105
92
  metadata:
106
- documentation_uri: https://ronin-rb.dev/docs/ronin-code-asm/frames
93
+ documentation_uri: https://ronin-rb.dev/docs/ronin-code-asm
107
94
  source_code_uri: https://github.com/ronin-rb/ronin-code-asm
108
95
  bug_tracker_uri: https://github.com/ronin-rb/ronin-code-asm/issues
109
- changelog_uri: https://github.com/ronin-rb/ronin-code-asm/blob/master/ChangeLog.md
96
+ changelog_uri: https://github.com/ronin-rb/ronin-code-asm/blob/main/ChangeLog.md
110
97
  rubygems_mfa_required: 'true'
111
98
  post_install_message:
112
99
  rdoc_options: []
@@ -124,20 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
111
  version: '0'
125
112
  requirements:
126
113
  - yasm >= 0.6.0
127
- rubygems_version: 3.3.26
114
+ rubygems_version: 3.5.22
128
115
  signing_key:
129
116
  specification_version: 4
130
117
  summary: A Ruby DSL for crafting Assembly programs and Shellcode.
131
- test_files:
132
- - spec/asm_spec.rb
133
- - spec/config_spec.rb
134
- - spec/immediate_operand_spec.rb
135
- - spec/instruction_spec.rb
136
- - spec/memory_operand_spec.rb
137
- - spec/os_spec.rb
138
- - spec/program_spec.rb
139
- - spec/register_spec.rb
140
- - spec/shellcode_spec.rb
141
- - spec/syntax/att_spec.rb
142
- - spec/syntax/common_spec.rb
143
- - spec/syntax/intel_spec.rb
118
+ test_files: []
data/spec/asm_spec.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/code/asm'
3
-
4
- describe Ronin::Code::ASM do
5
- it "must have a version" do
6
- expect(subject.const_defined?('VERSION')).to eq(true)
7
- end
8
-
9
- describe ".new" do
10
- it "must return a new Ronin::Code::ASM::Program" do
11
- expect(subject.new(arch: :x86)).to be_kind_of(Ronin::Code::ASM::Program)
12
- end
13
- end
14
- end
data/spec/config_spec.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/code/asm/config'
3
-
4
- describe Ronin::Code::ASM::Config do
5
- describe "DATA_DIR" do
6
- it "must be a directory" do
7
- expect(File.directory?(subject::DATA_DIR)).to be(true)
8
- end
9
- end
10
- end
@@ -1,79 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'ronin/code/asm/immediate_operand'
4
-
5
- describe Ronin::Code::ASM::ImmediateOperand do
6
- let(:value) { 0xff }
7
-
8
- describe "#initialize" do
9
- context "with a width" do
10
- let(:width) { 2 }
11
-
12
- subject { described_class.new(value,width) }
13
-
14
- it "must set the width" do
15
- expect(subject.width).to eq(width)
16
- end
17
- end
18
- end
19
-
20
- describe "#width" do
21
- describe "default width for" do
22
- context "0x100000000 .. 0xffffffffffffffff" do
23
- subject { described_class.new(0xffffffffffffffff).width }
24
-
25
- it { expect(subject).to be == 8 }
26
- end
27
-
28
- context "-0x800000000 .. -0x7fffffffffffffff" do
29
- subject { described_class.new(-0x7fffffffffffffff).width }
30
-
31
- it { expect(subject).to be == 8 }
32
- end
33
-
34
- context "0x10000 .. 0xffffffff" do
35
- subject { described_class.new(0xffffffff).width }
36
-
37
- it { expect(subject).to be == 4 }
38
- end
39
-
40
- context "-0x80000 .. -0x7fffffff" do
41
- subject { described_class.new(-0x7fffffff).width }
42
-
43
- it { expect(subject).to be == 4 }
44
- end
45
-
46
- context "0x100 .. 0xffff" do
47
- subject { described_class.new(0xffff).width }
48
-
49
- it { expect(subject).to be == 2 }
50
- end
51
-
52
- context "-0x80 .. -0x7fff" do
53
- subject { described_class.new(-0x7fff).width }
54
-
55
- it { expect(subject).to be == 2 }
56
- end
57
-
58
- context "0x0 .. 0xff" do
59
- subject { described_class.new(0xff).width }
60
-
61
- it { expect(subject).to be == 1 }
62
- end
63
-
64
- context "0x0 .. -0x7f" do
65
- subject { described_class.new(-0x7f).width }
66
-
67
- it { expect(subject).to be == 1 }
68
- end
69
- end
70
- end
71
-
72
- describe "#to_i" do
73
- subject { described_class.new(value) }
74
-
75
- it "must return the value" do
76
- expect(subject.to_i).to eq(value)
77
- end
78
- end
79
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'ronin/code/asm/instruction'
4
- require 'ronin/code/asm/register'
5
- require 'ronin/code/asm/immediate_operand'
6
- require 'ronin/code/asm/memory_operand'
7
-
8
- describe Ronin::Code::ASM::Instruction do
9
- let(:register) { Ronin::Code::ASM::Register.new(:eax, 4) }
10
- let(:immediate) { Ronin::Code::ASM::ImmediateOperand.new(0xff, 1) }
11
-
12
- describe "#initialize" do
13
- let(:name) { :mov }
14
- let(:operands) { [immediate, register] }
15
-
16
- subject { described_class.new(name,operands) }
17
-
18
- it "must set the name" do
19
- expect(subject.name).to eq(:mov)
20
- end
21
-
22
- it "must set the operands" do
23
- expect(subject.operands).to eq(operands)
24
- end
25
-
26
- context "when given an Integer operand" do
27
- let(:integer) { 0xff }
28
-
29
- subject { described_class.new(name, [integer, register]) }
30
-
31
- it "must wrap the operand to in a Ronin::Code::ASM::ImmediateOperand" do
32
- expect(subject.operands[0]).to be_kind_of(Ronin::Code::ASM::ImmediateOperand)
33
- expect(subject.operands[0].value).to eq(integer)
34
- end
35
- end
36
-
37
- context "when given a nil operand" do
38
- subject { described_class.new(name, [nil, register]) }
39
-
40
- it "must wrap the operand to in a Ronin::Code::ASM::ImmediateOperand" do
41
- expect(subject.operands[0]).to be_kind_of(Ronin::Code::ASM::ImmediateOperand)
42
- expect(subject.operands[0].value).to eq(0)
43
- end
44
- end
45
- end
46
-
47
- describe "#width" do
48
- subject { described_class.new(:mov, [immediate, register]) }
49
-
50
- it "must return the maximum width of the operands" do
51
- expect(subject.width).to eq(register.width)
52
- end
53
-
54
- context "when one of the operands does not define #width" do
55
- subject { described_class.new(:mov, [:label, register]) }
56
-
57
- it "must ignore them" do
58
- expect(subject.width).to eq(register.width)
59
- end
60
- end
61
- end
62
- end
@@ -1,80 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'ronin/code/asm/memory_operand'
4
- require 'ronin/code/asm/register'
5
-
6
- describe Ronin::Code::ASM::MemoryOperand do
7
- let(:register) { Ronin::Code::ASM::Register.new(:eax, 4) }
8
-
9
- describe "#initialize" do
10
- it { expect(subject.base).to be_nil }
11
- it { expect(subject.offset).to eq(0) }
12
- it { expect(subject.index).to be_nil }
13
- it { expect(subject.scale).to eq(1) }
14
-
15
- it "must only accept nil and a Register for base" do
16
- expect {
17
- described_class.new(Object.new)
18
- }.to raise_error(TypeError)
19
- end
20
-
21
- it "must only accept Integers for offset" do
22
- expect {
23
- described_class.new(register,2.0)
24
- }.to raise_error(TypeError)
25
- end
26
-
27
- it "must only accept nil and a Register for index" do
28
- expect {
29
- described_class.new(register,0,Object.new)
30
- }.to raise_error(TypeError)
31
- end
32
-
33
- it "must only accept Integers for offset" do
34
- expect {
35
- described_class.new(register,0,nil,2.0)
36
- }.to raise_error(TypeError)
37
- end
38
-
39
- end
40
-
41
- describe "#+" do
42
- let(:operand) { described_class.new(register,4,register,2) }
43
-
44
- subject { operand + 4 }
45
-
46
- it "must add to offset" do
47
- expect(subject.offset).to eq(8)
48
- end
49
-
50
- it "must not change base, index or scale" do
51
- expect(subject.base).to eq(operand.base)
52
- expect(subject.index).to eq(operand.index)
53
- expect(subject.scale).to eq(operand.scale)
54
- end
55
- end
56
-
57
- describe "#-" do
58
- let(:operand) { described_class.new(register,4,register,2) }
59
-
60
- subject { operand - 2 }
61
-
62
- it "must subtract from offset" do
63
- expect(subject.offset).to eq(2)
64
- end
65
-
66
- it "must not change base, index or scale" do
67
- expect(subject.base).to eq(operand.base)
68
- expect(subject.index).to eq(operand.index)
69
- expect(subject.scale).to eq(operand.scale)
70
- end
71
- end
72
-
73
- describe "#width" do
74
- subject { described_class.new(register,10) }
75
-
76
- it "must return the width of base" do
77
- expect(subject.width).to eq(register.width)
78
- end
79
- end
80
- end
data/spec/os_spec.rb DELETED
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
- require 'ronin/code/asm/os'
3
-
4
- describe Ronin::Code::ASM::OS do
5
- describe "SYSCALLS" do
6
- subject { described_class::SYSCALLS }
7
-
8
- let(:data_dir) { Ronin::Code::ASM::Config::DATA_DIR }
9
-
10
- it { expect(subject).to be_kind_of(Hash) }
11
-
12
- it "must load syscalls for :freebsd and :amd64" do
13
- expect(subject[:freebsd][:amd64]).to eq(
14
- YAML.load_file(
15
- File.join(data_dir,'os','freebsd','amd64','syscalls.yml')
16
- )
17
- )
18
- end
19
-
20
- it "must load syscalls for :freebsd and :x86" do
21
- expect(subject[:freebsd][:amd64]).to eq(
22
- YAML.load_file(
23
- File.join(data_dir,'os','freebsd','x86','syscalls.yml')
24
- )
25
- )
26
- end
27
-
28
- it "must load syscalls for :linux and :amd64" do
29
- expect(subject[:linux][:amd64]).to eq(
30
- YAML.load_file(
31
- File.join(data_dir,'os','linux','amd64','syscalls.yml')
32
- )
33
- )
34
- end
35
-
36
- it "must load syscalls for :linux and :x86" do
37
- expect(subject[:linux][:x86]).to eq(
38
- YAML.load_file(
39
- File.join(data_dir,'os','linux','x86','syscalls.yml')
40
- )
41
- )
42
- end
43
- end
44
-
45
- describe ".[]" do
46
- context "when given :linux" do
47
- it "must return #{described_class}::Linux" do
48
- expect(subject[:linux]).to be(described_class::Linux)
49
- end
50
- end
51
-
52
- context "when given :freebsd" do
53
- it "must return #{described_class}::FreeBSD" do
54
- expect(subject[:freebsd]).to be(described_class::FreeBSD)
55
- end
56
- end
57
-
58
- context "when given an unknown Symbol" do
59
- let(:name) { :foo }
60
-
61
- it do
62
- expect {
63
- subject[name]
64
- }.to raise_error(ArgumentError,"unknown OS name: #{name.inspect}")
65
- end
66
- end
67
- end
68
- end