evoasm 0.0.2.pre7 → 0.1.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
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