evoasm 0.0.2.pre7 → 0.1.0.pre2

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/.gdbinit +41 -0
  3. data/.gitignore +1 -2
  4. data/.gitmodules +3 -0
  5. data/.rubocop.yml +8 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.md +660 -0
  8. data/Makefile +1 -1
  9. data/README.md +17 -9
  10. data/Rakefile +39 -107
  11. data/bin/gdb +1 -1
  12. data/bin/gdb_loop +4 -0
  13. data/docs/FindingInstructions.md +17 -0
  14. data/docs/JIT.md +14 -0
  15. data/docs/SymbolicRegression.md +102 -0
  16. data/docs/Visualization.md +29 -0
  17. data/docs/examples/bit_insts.rb +44 -0
  18. data/docs/examples/jit.rb +26 -0
  19. data/docs/examples/loss.gif +0 -0
  20. data/docs/examples/program.png +0 -0
  21. data/docs/examples/sym_reg.rb +64 -0
  22. data/docs/examples/vis.rb +38 -0
  23. data/evoasm.gemspec +21 -15
  24. data/ext/evoasm_ext/Rakefile +3 -0
  25. data/ext/evoasm_ext/compile.rake +35 -0
  26. data/ext/evoasm_ext/libevoasm/src/evoasm-alloc.c +226 -0
  27. data/ext/evoasm_ext/libevoasm/src/evoasm-alloc.h +84 -0
  28. data/ext/evoasm_ext/libevoasm/src/evoasm-arch.c +52 -0
  29. data/ext/evoasm_ext/libevoasm/src/evoasm-arch.h +101 -0
  30. data/ext/evoasm_ext/libevoasm/src/evoasm-bitmap.h +158 -0
  31. data/ext/evoasm_ext/libevoasm/src/evoasm-buf.c +204 -0
  32. data/ext/evoasm_ext/libevoasm/src/evoasm-buf.h +109 -0
  33. data/ext/evoasm_ext/libevoasm/src/evoasm-domain.c +124 -0
  34. data/ext/evoasm_ext/libevoasm/src/evoasm-domain.h +279 -0
  35. data/ext/evoasm_ext/libevoasm/src/evoasm-error.c +65 -0
  36. data/ext/evoasm_ext/libevoasm/src/evoasm-error.h +108 -0
  37. data/ext/evoasm_ext/{evoasm-log.c → libevoasm/src/evoasm-log.c} +36 -18
  38. data/ext/evoasm_ext/libevoasm/src/evoasm-log.h +93 -0
  39. data/ext/evoasm_ext/libevoasm/src/evoasm-param.c +22 -0
  40. data/ext/evoasm_ext/libevoasm/src/evoasm-param.h +33 -0
  41. data/ext/evoasm_ext/libevoasm/src/evoasm-pop-params.c +192 -0
  42. data/ext/evoasm_ext/libevoasm/src/evoasm-pop-params.h +60 -0
  43. data/ext/evoasm_ext/libevoasm/src/evoasm-pop.c +1323 -0
  44. data/ext/evoasm_ext/libevoasm/src/evoasm-pop.h +107 -0
  45. data/ext/evoasm_ext/libevoasm/src/evoasm-program-io.c +116 -0
  46. data/ext/evoasm_ext/libevoasm/src/evoasm-program-io.h +60 -0
  47. data/ext/evoasm_ext/libevoasm/src/evoasm-program.c +1827 -0
  48. data/ext/evoasm_ext/libevoasm/src/evoasm-program.h +167 -0
  49. data/ext/evoasm_ext/libevoasm/src/evoasm-rand.c +65 -0
  50. data/ext/evoasm_ext/libevoasm/src/evoasm-rand.h +76 -0
  51. data/ext/evoasm_ext/libevoasm/src/evoasm-signal.c +106 -0
  52. data/ext/evoasm_ext/libevoasm/src/evoasm-signal.h +58 -0
  53. data/ext/evoasm_ext/libevoasm/src/evoasm-util.h +112 -0
  54. data/ext/evoasm_ext/libevoasm/src/evoasm-x64.c +925 -0
  55. data/ext/evoasm_ext/libevoasm/src/evoasm-x64.h +277 -0
  56. data/ext/evoasm_ext/libevoasm/src/evoasm.c +28 -0
  57. data/ext/evoasm_ext/libevoasm/src/evoasm.h +35 -0
  58. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-enums.h +2077 -0
  59. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-insts.c +191203 -0
  60. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-insts.h +1713 -0
  61. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-misc.c +348 -0
  62. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-misc.h +93 -0
  63. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-params.c +51 -0
  64. data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-params.h +509 -0
  65. data/lib/evoasm.rb +28 -11
  66. data/lib/evoasm/buffer.rb +105 -0
  67. data/lib/evoasm/capstone.rb +100 -0
  68. data/lib/evoasm/domain.rb +116 -0
  69. data/lib/evoasm/error.rb +37 -16
  70. data/lib/evoasm/exception_error.rb +19 -0
  71. data/lib/evoasm/ffi_ext.rb +53 -0
  72. data/lib/evoasm/libevoasm.rb +286 -0
  73. data/lib/evoasm/libevoasm/x64_enums.rb +1967 -0
  74. data/lib/evoasm/parameter.rb +20 -0
  75. data/lib/evoasm/population.rb +145 -0
  76. data/lib/evoasm/population/parameters.rb +227 -0
  77. data/lib/evoasm/population/plotter.rb +89 -0
  78. data/lib/evoasm/prng.rb +64 -0
  79. data/lib/evoasm/program.rb +195 -12
  80. data/lib/evoasm/program/io.rb +144 -0
  81. data/lib/evoasm/test.rb +8 -0
  82. data/lib/evoasm/version.rb +1 -1
  83. data/lib/evoasm/x64.rb +115 -0
  84. data/lib/evoasm/x64/cpu_state.rb +95 -0
  85. data/lib/evoasm/x64/instruction.rb +109 -0
  86. data/lib/evoasm/x64/operand.rb +156 -0
  87. data/lib/evoasm/x64/parameters.rb +211 -0
  88. data/test/helpers/population_helper.rb +128 -0
  89. data/test/helpers/test_helper.rb +1 -0
  90. data/test/helpers/x64_helper.rb +24 -0
  91. data/test/integration/bitwise_reverse_test.rb +41 -0
  92. data/test/integration/gcd_test.rb +52 -0
  93. data/test/integration/popcnt_test.rb +46 -0
  94. data/test/integration/sym_reg_test.rb +68 -0
  95. data/test/unit/evoasm/buffer_test.rb +48 -0
  96. data/test/unit/evoasm/capstone_test.rb +18 -0
  97. data/test/unit/evoasm/domain_test.rb +55 -0
  98. data/test/unit/evoasm/population/parameters_test.rb +106 -0
  99. data/test/unit/evoasm/population_test.rb +96 -0
  100. data/test/unit/evoasm/prng_test.rb +47 -0
  101. data/test/unit/evoasm/x64/cpu_state_test.rb +73 -0
  102. data/test/unit/evoasm/x64/encoding_test.rb +320 -0
  103. data/test/unit/evoasm/x64/instruction_access_test.rb +177 -0
  104. data/test/unit/evoasm/x64/instruction_encoding_test.rb +780 -0
  105. data/test/unit/evoasm/x64/instruction_test.rb +62 -0
  106. data/test/unit/evoasm/x64/parameters_test.rb +65 -0
  107. data/test/unit/evoasm/x64_test.rb +52 -0
  108. metadata +195 -89
  109. data/Gemfile.rake +0 -8
  110. data/Gemfile.rake.lock +0 -51
  111. data/LICENSE.txt +0 -373
  112. data/data/tables/README.md +0 -19
  113. data/data/tables/x64.csv +0 -1684
  114. data/data/templates/evoasm-x64.c.erb +0 -319
  115. data/data/templates/evoasm-x64.h.erb +0 -126
  116. data/examples/abs.yml +0 -20
  117. data/examples/popcnt.yml +0 -17
  118. data/examples/sym_reg.yml +0 -26
  119. data/exe/evoasm-search +0 -13
  120. data/ext/evoasm_ext/evoasm-alloc.c +0 -145
  121. data/ext/evoasm_ext/evoasm-alloc.h +0 -59
  122. data/ext/evoasm_ext/evoasm-arch.c +0 -44
  123. data/ext/evoasm_ext/evoasm-arch.h +0 -161
  124. data/ext/evoasm_ext/evoasm-bitmap.h +0 -114
  125. data/ext/evoasm_ext/evoasm-buf.c +0 -130
  126. data/ext/evoasm_ext/evoasm-buf.h +0 -47
  127. data/ext/evoasm_ext/evoasm-error.c +0 -31
  128. data/ext/evoasm_ext/evoasm-error.h +0 -75
  129. data/ext/evoasm_ext/evoasm-free-list.c.tmpl +0 -121
  130. data/ext/evoasm_ext/evoasm-free-list.h.tmpl +0 -86
  131. data/ext/evoasm_ext/evoasm-log.h +0 -69
  132. data/ext/evoasm_ext/evoasm-misc.c +0 -23
  133. data/ext/evoasm_ext/evoasm-misc.h +0 -282
  134. data/ext/evoasm_ext/evoasm-param.h +0 -37
  135. data/ext/evoasm_ext/evoasm-search.c +0 -2145
  136. data/ext/evoasm_ext/evoasm-search.h +0 -214
  137. data/ext/evoasm_ext/evoasm-util.h +0 -40
  138. data/ext/evoasm_ext/evoasm-x64.c +0 -275624
  139. data/ext/evoasm_ext/evoasm-x64.h +0 -5436
  140. data/ext/evoasm_ext/evoasm.c +0 -7
  141. data/ext/evoasm_ext/evoasm.h +0 -23
  142. data/ext/evoasm_ext/evoasm_ext.c +0 -1757
  143. data/ext/evoasm_ext/extconf.rb +0 -31
  144. data/lib/evoasm/cli.rb +0 -6
  145. data/lib/evoasm/cli/search.rb +0 -127
  146. data/lib/evoasm/core_ext.rb +0 -1
  147. data/lib/evoasm/core_ext/array.rb +0 -9
  148. data/lib/evoasm/core_ext/integer.rb +0 -10
  149. data/lib/evoasm/core_ext/kwstruct.rb +0 -13
  150. data/lib/evoasm/core_ext/range.rb +0 -5
  151. data/lib/evoasm/examples.rb +0 -27
  152. data/lib/evoasm/gen.rb +0 -8
  153. data/lib/evoasm/gen/enum.rb +0 -169
  154. data/lib/evoasm/gen/name_util.rb +0 -80
  155. data/lib/evoasm/gen/state.rb +0 -176
  156. data/lib/evoasm/gen/state_dsl.rb +0 -152
  157. data/lib/evoasm/gen/strio.rb +0 -27
  158. data/lib/evoasm/gen/translator.rb +0 -1102
  159. data/lib/evoasm/gen/version.rb +0 -5
  160. data/lib/evoasm/gen/x64.rb +0 -237
  161. data/lib/evoasm/gen/x64/funcs.rb +0 -495
  162. data/lib/evoasm/gen/x64/inst.rb +0 -781
  163. data/lib/evoasm/search.rb +0 -40
  164. data/lib/evoasm/tasks/gen_task.rb +0 -86
  165. data/lib/evoasm/tasks/template_task.rb +0 -52
  166. data/test/test_helper.rb +0 -1
  167. data/test/x64/test_helper.rb +0 -19
  168. data/test/x64/x64_test.rb +0 -87
@@ -0,0 +1,62 @@
1
+ require 'evoasm/test'
2
+ require 'evoasm/x64'
3
+
4
+ module Evoasm
5
+ module X64
6
+ class InstructionTest < Minitest::Test
7
+
8
+ def setup
9
+ @instruction_add = Evoasm::X64.instruction :add_rm64_imm8
10
+ @instruction_cmov = Evoasm::X64.instruction :cmovae_r64_rm64
11
+ end
12
+
13
+ def test_name
14
+ assert_equal :add_rm64_imm8, @instruction_add.name
15
+ end
16
+
17
+ def test_mnemonic
18
+ assert_equal 'ADD', @instruction_add.mnemonic
19
+ assert_equal 'CMOVAE', @instruction_cmov.mnemonic
20
+ assert_equal %w(CMOVAE CMOVNB CMOVNC), @instruction_cmov.mnemonics
21
+ end
22
+
23
+ def test_operands
24
+ operands = @instruction_add.operands
25
+
26
+ assert_equal :rm, operands[0].type
27
+ assert operands[0].explicit?
28
+ assert_equal :gp, operands[0].register_type
29
+ assert_nil operands[0].register
30
+ assert_equal :reg0, operands[0].parameter.name
31
+ assert_equal 64, operands[0].size
32
+
33
+ assert_equal :imm, operands[1].type
34
+ assert operands[1].explicit?
35
+ assert_nil operands[1].register_type
36
+ assert_nil operands[1].register
37
+ assert_equal :imm0, operands[1].parameter.name
38
+ assert_equal 8, operands[1].size
39
+
40
+ refute_nil @instruction_add.parameters.find(operands[0].parameter)
41
+ end
42
+
43
+ def test_parameters
44
+ reg0_parameter = @instruction_add.parameters.find do |parameter|
45
+ parameter.name == :reg0
46
+ end
47
+ refute_nil reg0_parameter
48
+
49
+ imm_parameter = @instruction_add.parameters.find do |parameter|
50
+ parameter.name == :imm0
51
+ end
52
+ refute_nil imm_parameter
53
+
54
+ imm_domain = imm_parameter.domain
55
+ assert_kind_of Evoasm::Domain, imm_domain
56
+ assert_equal :int8, imm_domain.type
57
+ assert_equal 127, imm_domain.max
58
+ assert_equal -128, imm_domain.min
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,65 @@
1
+ require 'evoasm/test'
2
+ require 'evoasm/x64/cpu_state'
3
+ require 'evoasm/buffer'
4
+
5
+ module Evoasm
6
+ module X64
7
+ class ParametersTest < Minitest::Test
8
+ def setup
9
+ @parameters = Parameters.new
10
+ @basic_parameters = Parameters.new basic: true
11
+ end
12
+
13
+ def test_basic
14
+ refute @parameters.basic?
15
+ assert @basic_parameters.basic?
16
+ end
17
+
18
+ def test_register_parameter
19
+ @parameters[:reg0] = :a
20
+ assert_equal :a, @parameters[:reg0]
21
+
22
+ @basic_parameters[:reg0] = :a
23
+ assert_equal :a, @basic_parameters[:reg0]
24
+ end
25
+
26
+ def test_boolean_parameter
27
+ @parameters[:force_long_vex?] = true
28
+ assert_equal true, @parameters[:force_long_vex?]
29
+ end
30
+
31
+ def test_int_parameter
32
+ @parameters[:disp] = 10
33
+ assert_equal 10, @parameters[:disp]
34
+
35
+ assert_raises ArgumentError do
36
+ @parameters[:disp] = 10000000000000
37
+ end
38
+ end
39
+
40
+ def test_scale_parameter
41
+ @parameters[:scale] = 4
42
+ assert_equal 4, @parameters[:scale]
43
+
44
+ assert_raises ArgumentError do
45
+ @parameters[:scale] = 5
46
+ end
47
+ end
48
+
49
+ def test_addr_size_parameter
50
+ @parameters[:addr_size] = 32
51
+ assert_equal 32, @parameters[:addr_size]
52
+
53
+ assert_raises ArgumentError do
54
+ @parameters[:addr_size] = 2
55
+ end
56
+ end
57
+
58
+ def test_invalid_parameter
59
+ assert_raises do
60
+ @parameters[:foo] = 42
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,52 @@
1
+ require 'evoasm/test'
2
+
3
+ Evoasm.log_level = :info
4
+ require 'evoasm/x64'
5
+
6
+ module Evoasm
7
+ class X64Test < Minitest::Test
8
+ self.make_my_diffs_pretty!
9
+
10
+ def test_features
11
+ features = Evoasm::X64.features
12
+ refute_empty features
13
+ assert features.all? { |feature, _| feature.is_a? Symbol }
14
+
15
+ if RUBY_PLATFORM =~ /linux/
16
+ cpu_info = File.read '/proc/cpuinfo'
17
+
18
+ feature_keys =[:cx8, :cmov, :mmx, :sse, :sse2, :pclmulqdq, :ssse3, :fma, :cx16, :sse4_1,
19
+ :sse4_2, :movbe, :popcnt, :aes, :avx, :f16c, :rdrand, :lahf_lm, :bmi1, :avx2, :bmi2]
20
+
21
+ cpu_info_features = feature_keys.map do |feature|
22
+ [feature, !!(cpu_info =~ /\b#{feature}\b/)]
23
+ end.sort.to_h
24
+
25
+ assert_equal cpu_info_features, features.sort.select { |feature, support| feature_keys.include? feature}.to_h
26
+ end
27
+ end
28
+
29
+ def test_instructions
30
+ gp_insts = Evoasm::X64.instruction_names :gp, :rflags
31
+ refute_empty gp_insts
32
+ assert_includes gp_insts, :xor_rax_imm32
33
+ refute_includes gp_insts, :vfmadd213pd_xmm_xmm_xmmm128
34
+ refute_includes gp_insts, :cvtsd2si_r64_xmmm64
35
+
36
+ xmm_insts = Evoasm::X64.instruction_names :xmm
37
+ refute_empty xmm_insts
38
+ refute_includes xmm_insts, :jmp_rel32
39
+ refute_includes xmm_insts, :xor_rax_imm32
40
+ assert_includes xmm_insts, :vfmadd213pd_xmm_xmm_xmmm128
41
+
42
+ search_insts = Evoasm::X64.instruction_names :xmm, :gp, :rflags
43
+ assert_equal search_insts, Evoasm::X64.instruction_names(:xmm, :gp, :rflags, operand_types: [:reg, :imm, :rm])
44
+ refute_empty search_insts
45
+ refute_includes search_insts, :jmp_rel32
46
+ refute_includes search_insts, :call_rm32
47
+ assert_includes search_insts, :xor_rax_imm32
48
+ assert_includes search_insts, :vfmadd213pd_xmm_xmm_xmmm128
49
+ assert_empty search_insts.grep(/rdrand/)
50
+ end
51
+ end
52
+ end
metadata CHANGED
@@ -1,43 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evoasm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.pre7
4
+ version: 0.1.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Aron Prenner (furunkel)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
11
+ date: 2016-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pry
14
+ name: pastel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.10'
19
+ version: '0.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.10'
26
+ version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
- name: pastel
28
+ name: ffi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.6'
33
+ version: '1.9'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.6'
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: haml
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: bundler
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,132 +95,194 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '10.0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: rake-compiler
98
+ name: rubocop
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '0.9'
103
+ version: '0.41'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '0.9'
110
+ version: '0.41'
83
111
  - !ruby/object:Gem::Dependency
84
- name: erubis
112
+ name: minitest
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '2.6'
117
+ version: '5.8'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '2.6'
124
+ version: '5.8'
97
125
  - !ruby/object:Gem::Dependency
98
- name: minitest
126
+ name: minitest-reporters
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '5.8'
131
+ version: '1.1'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '5.8'
111
- description:
138
+ version: '1.1'
139
+ - !ruby/object:Gem::Dependency
140
+ name: redcarpet
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.3'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: yard
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.9'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.9'
167
+ description: An AIMGP (Automatic Induction of Machine code by Genetic Programming)
168
+ engine
112
169
  email:
113
170
  - furunkel@polyadic.com
114
- executables:
115
- - evoasm-search
171
+ executables: []
116
172
  extensions:
117
- - ext/evoasm_ext/extconf.rb
173
+ - ext/evoasm_ext/Rakefile
118
174
  extra_rdoc_files: []
119
175
  files:
176
+ - ".gdbinit"
120
177
  - ".gemrelease"
121
178
  - ".gitignore"
179
+ - ".gitmodules"
180
+ - ".rubocop.yml"
122
181
  - Gemfile
123
- - Gemfile.rake
124
- - Gemfile.rake.lock
125
- - LICENSE.txt
182
+ - LICENSE.md
126
183
  - Makefile
127
184
  - README.md
128
185
  - Rakefile
129
186
  - bin/gdb
130
- - data/tables/README.md
131
- - data/tables/x64.csv
132
- - data/templates/evoasm-x64.c.erb
133
- - data/templates/evoasm-x64.h.erb
187
+ - bin/gdb_loop
188
+ - docs/FindingInstructions.md
189
+ - docs/JIT.md
190
+ - docs/SymbolicRegression.md
191
+ - docs/Visualization.md
192
+ - docs/examples/bit_insts.rb
193
+ - docs/examples/jit.rb
194
+ - docs/examples/loss.gif
195
+ - docs/examples/program.png
196
+ - docs/examples/sym_reg.rb
197
+ - docs/examples/vis.rb
134
198
  - evoasm.gemspec
135
- - examples/abs.yml
136
- - examples/popcnt.yml
137
- - examples/sym_reg.yml
138
- - exe/evoasm-search
139
- - ext/evoasm_ext/evoasm-alloc.c
140
- - ext/evoasm_ext/evoasm-alloc.h
141
- - ext/evoasm_ext/evoasm-arch.c
142
- - ext/evoasm_ext/evoasm-arch.h
143
- - ext/evoasm_ext/evoasm-bitmap.h
144
- - ext/evoasm_ext/evoasm-buf.c
145
- - ext/evoasm_ext/evoasm-buf.h
146
- - ext/evoasm_ext/evoasm-error.c
147
- - ext/evoasm_ext/evoasm-error.h
148
- - ext/evoasm_ext/evoasm-free-list.c.tmpl
149
- - ext/evoasm_ext/evoasm-free-list.h.tmpl
150
- - ext/evoasm_ext/evoasm-log.c
151
- - ext/evoasm_ext/evoasm-log.h
152
- - ext/evoasm_ext/evoasm-misc.c
153
- - ext/evoasm_ext/evoasm-misc.h
154
- - ext/evoasm_ext/evoasm-param.h
155
- - ext/evoasm_ext/evoasm-search.c
156
- - ext/evoasm_ext/evoasm-search.h
157
- - ext/evoasm_ext/evoasm-util.h
158
- - ext/evoasm_ext/evoasm-x64.c
159
- - ext/evoasm_ext/evoasm-x64.h
160
- - ext/evoasm_ext/evoasm.c
161
- - ext/evoasm_ext/evoasm.h
162
- - ext/evoasm_ext/evoasm_ext.c
163
- - ext/evoasm_ext/extconf.rb
199
+ - ext/evoasm_ext/Rakefile
200
+ - ext/evoasm_ext/compile.rake
201
+ - ext/evoasm_ext/libevoasm/src/evoasm-alloc.c
202
+ - ext/evoasm_ext/libevoasm/src/evoasm-alloc.h
203
+ - ext/evoasm_ext/libevoasm/src/evoasm-arch.c
204
+ - ext/evoasm_ext/libevoasm/src/evoasm-arch.h
205
+ - ext/evoasm_ext/libevoasm/src/evoasm-bitmap.h
206
+ - ext/evoasm_ext/libevoasm/src/evoasm-buf.c
207
+ - ext/evoasm_ext/libevoasm/src/evoasm-buf.h
208
+ - ext/evoasm_ext/libevoasm/src/evoasm-domain.c
209
+ - ext/evoasm_ext/libevoasm/src/evoasm-domain.h
210
+ - ext/evoasm_ext/libevoasm/src/evoasm-error.c
211
+ - ext/evoasm_ext/libevoasm/src/evoasm-error.h
212
+ - ext/evoasm_ext/libevoasm/src/evoasm-log.c
213
+ - ext/evoasm_ext/libevoasm/src/evoasm-log.h
214
+ - ext/evoasm_ext/libevoasm/src/evoasm-param.c
215
+ - ext/evoasm_ext/libevoasm/src/evoasm-param.h
216
+ - ext/evoasm_ext/libevoasm/src/evoasm-pop-params.c
217
+ - ext/evoasm_ext/libevoasm/src/evoasm-pop-params.h
218
+ - ext/evoasm_ext/libevoasm/src/evoasm-pop.c
219
+ - ext/evoasm_ext/libevoasm/src/evoasm-pop.h
220
+ - ext/evoasm_ext/libevoasm/src/evoasm-program-io.c
221
+ - ext/evoasm_ext/libevoasm/src/evoasm-program-io.h
222
+ - ext/evoasm_ext/libevoasm/src/evoasm-program.c
223
+ - ext/evoasm_ext/libevoasm/src/evoasm-program.h
224
+ - ext/evoasm_ext/libevoasm/src/evoasm-rand.c
225
+ - ext/evoasm_ext/libevoasm/src/evoasm-rand.h
226
+ - ext/evoasm_ext/libevoasm/src/evoasm-signal.c
227
+ - ext/evoasm_ext/libevoasm/src/evoasm-signal.h
228
+ - ext/evoasm_ext/libevoasm/src/evoasm-util.h
229
+ - ext/evoasm_ext/libevoasm/src/evoasm-x64.c
230
+ - ext/evoasm_ext/libevoasm/src/evoasm-x64.h
231
+ - ext/evoasm_ext/libevoasm/src/evoasm.c
232
+ - ext/evoasm_ext/libevoasm/src/evoasm.h
233
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-enums.h
234
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-insts.c
235
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-insts.h
236
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-misc.c
237
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-misc.h
238
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-params.c
239
+ - ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-params.h
164
240
  - lib/evoasm.rb
165
- - lib/evoasm/cli.rb
166
- - lib/evoasm/cli/search.rb
167
- - lib/evoasm/core_ext.rb
168
- - lib/evoasm/core_ext/array.rb
169
- - lib/evoasm/core_ext/integer.rb
170
- - lib/evoasm/core_ext/kwstruct.rb
171
- - lib/evoasm/core_ext/range.rb
241
+ - lib/evoasm/buffer.rb
242
+ - lib/evoasm/capstone.rb
243
+ - lib/evoasm/domain.rb
172
244
  - lib/evoasm/error.rb
173
- - lib/evoasm/examples.rb
174
- - lib/evoasm/gen.rb
175
- - lib/evoasm/gen/enum.rb
176
- - lib/evoasm/gen/name_util.rb
177
- - lib/evoasm/gen/state.rb
178
- - lib/evoasm/gen/state_dsl.rb
179
- - lib/evoasm/gen/strio.rb
180
- - lib/evoasm/gen/translator.rb
181
- - lib/evoasm/gen/version.rb
182
- - lib/evoasm/gen/x64.rb
183
- - lib/evoasm/gen/x64/funcs.rb
184
- - lib/evoasm/gen/x64/inst.rb
245
+ - lib/evoasm/exception_error.rb
246
+ - lib/evoasm/ffi_ext.rb
247
+ - lib/evoasm/libevoasm.rb
248
+ - lib/evoasm/libevoasm/x64_enums.rb
249
+ - lib/evoasm/parameter.rb
250
+ - lib/evoasm/population.rb
251
+ - lib/evoasm/population/parameters.rb
252
+ - lib/evoasm/population/plotter.rb
253
+ - lib/evoasm/prng.rb
185
254
  - lib/evoasm/program.rb
186
- - lib/evoasm/search.rb
187
- - lib/evoasm/tasks/gen_task.rb
188
- - lib/evoasm/tasks/template_task.rb
255
+ - lib/evoasm/program/io.rb
256
+ - lib/evoasm/test.rb
189
257
  - lib/evoasm/version.rb
190
- - test/test_helper.rb
191
- - test/x64/test_helper.rb
192
- - test/x64/x64_test.rb
193
- homepage: https://github.com/furunkel/evoasm/
258
+ - lib/evoasm/x64.rb
259
+ - lib/evoasm/x64/cpu_state.rb
260
+ - lib/evoasm/x64/instruction.rb
261
+ - lib/evoasm/x64/operand.rb
262
+ - lib/evoasm/x64/parameters.rb
263
+ - test/helpers/population_helper.rb
264
+ - test/helpers/test_helper.rb
265
+ - test/helpers/x64_helper.rb
266
+ - test/integration/bitwise_reverse_test.rb
267
+ - test/integration/gcd_test.rb
268
+ - test/integration/popcnt_test.rb
269
+ - test/integration/sym_reg_test.rb
270
+ - test/unit/evoasm/buffer_test.rb
271
+ - test/unit/evoasm/capstone_test.rb
272
+ - test/unit/evoasm/domain_test.rb
273
+ - test/unit/evoasm/population/parameters_test.rb
274
+ - test/unit/evoasm/population_test.rb
275
+ - test/unit/evoasm/prng_test.rb
276
+ - test/unit/evoasm/x64/cpu_state_test.rb
277
+ - test/unit/evoasm/x64/encoding_test.rb
278
+ - test/unit/evoasm/x64/instruction_access_test.rb
279
+ - test/unit/evoasm/x64/instruction_encoding_test.rb
280
+ - test/unit/evoasm/x64/instruction_test.rb
281
+ - test/unit/evoasm/x64/parameters_test.rb
282
+ - test/unit/evoasm/x64_test.rb
283
+ homepage: https://github.com/evoasm/evoasm/
194
284
  licenses:
195
- - MPL-2.0
285
+ - AGPL-3.0
196
286
  metadata: {}
197
287
  post_install_message:
198
288
  rdoc_options: []
@@ -213,9 +303,25 @@ rubyforge_project:
213
303
  rubygems_version: 2.5.1
214
304
  signing_key:
215
305
  specification_version: 4
216
- summary: An AIMGP (Automatic Induction of Machine code by Genetic Programming) engine
306
+ summary: An AIMGP engine
217
307
  test_files:
218
- - test/test_helper.rb
219
- - test/x64/test_helper.rb
220
- - test/x64/x64_test.rb
221
- has_rdoc:
308
+ - test/helpers/population_helper.rb
309
+ - test/helpers/test_helper.rb
310
+ - test/helpers/x64_helper.rb
311
+ - test/integration/bitwise_reverse_test.rb
312
+ - test/integration/gcd_test.rb
313
+ - test/integration/popcnt_test.rb
314
+ - test/integration/sym_reg_test.rb
315
+ - test/unit/evoasm/buffer_test.rb
316
+ - test/unit/evoasm/capstone_test.rb
317
+ - test/unit/evoasm/domain_test.rb
318
+ - test/unit/evoasm/population/parameters_test.rb
319
+ - test/unit/evoasm/population_test.rb
320
+ - test/unit/evoasm/prng_test.rb
321
+ - test/unit/evoasm/x64/cpu_state_test.rb
322
+ - test/unit/evoasm/x64/encoding_test.rb
323
+ - test/unit/evoasm/x64/instruction_access_test.rb
324
+ - test/unit/evoasm/x64/instruction_encoding_test.rb
325
+ - test/unit/evoasm/x64/instruction_test.rb
326
+ - test/unit/evoasm/x64/parameters_test.rb
327
+ - test/unit/evoasm/x64_test.rb