ronin-asm 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.document +4 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +1 -0
  5. data/.yardopts +1 -0
  6. data/COPYING.txt +674 -0
  7. data/ChangeLog.md +10 -0
  8. data/Gemfile +19 -0
  9. data/README.md +142 -0
  10. data/Rakefile +44 -0
  11. data/data/ronin/asm/freebsd/amd64/syscalls.yml +415 -0
  12. data/data/ronin/asm/freebsd/x86/syscalls.yml +415 -0
  13. data/data/ronin/asm/linux/amd64/syscalls.yml +306 -0
  14. data/data/ronin/asm/linux/x86/syscalls.yml +339 -0
  15. data/data/ronin/gen/asm/source_file.s.erb +4 -0
  16. data/gemspec.yml +20 -0
  17. data/lib/ronin/asm.rb +25 -0
  18. data/lib/ronin/asm/archs.rb +23 -0
  19. data/lib/ronin/asm/archs/amd64.rb +99 -0
  20. data/lib/ronin/asm/archs/x86.rb +166 -0
  21. data/lib/ronin/asm/asm.rb +66 -0
  22. data/lib/ronin/asm/config.rb +39 -0
  23. data/lib/ronin/asm/immediate_operand.rb +76 -0
  24. data/lib/ronin/asm/instruction.rb +65 -0
  25. data/lib/ronin/asm/memory_operand.rb +109 -0
  26. data/lib/ronin/asm/os.rb +24 -0
  27. data/lib/ronin/asm/os/freebsd.rb +34 -0
  28. data/lib/ronin/asm/os/linux.rb +34 -0
  29. data/lib/ronin/asm/os/os.rb +40 -0
  30. data/lib/ronin/asm/program.rb +476 -0
  31. data/lib/ronin/asm/register.rb +110 -0
  32. data/lib/ronin/asm/shellcode.rb +70 -0
  33. data/lib/ronin/asm/syntax.rb +23 -0
  34. data/lib/ronin/asm/syntax/att.rb +136 -0
  35. data/lib/ronin/asm/syntax/common.rb +202 -0
  36. data/lib/ronin/asm/syntax/intel.rb +150 -0
  37. data/lib/ronin/asm/version.rb +27 -0
  38. data/ronin-asm.gemspec +61 -0
  39. data/spec/asm_spec.rb +8 -0
  40. data/spec/helpers/database.rb +7 -0
  41. data/spec/immediate_operand_spec.rb +77 -0
  42. data/spec/instruction_spec.rb +62 -0
  43. data/spec/memory_operand_spec.rb +80 -0
  44. data/spec/program_spec.rb +365 -0
  45. data/spec/register_spec.rb +110 -0
  46. data/spec/shellcode_spec.rb +34 -0
  47. data/spec/spec_helper.rb +10 -0
  48. data/spec/syntax/att_spec.rb +171 -0
  49. data/spec/syntax/common_spec.rb +42 -0
  50. data/spec/syntax/intel_spec.rb +156 -0
  51. metadata +163 -0
@@ -0,0 +1,339 @@
1
+ ---
2
+ :restart_syscall: 0
3
+ :exit: 1
4
+ :fork: 2
5
+ :read: 3
6
+ :write: 4
7
+ :open: 5
8
+ :close: 6
9
+ :waitpid: 7
10
+ :creat: 8
11
+ :link: 9
12
+ :unlink: 10
13
+ :execve: 11
14
+ :chdir: 12
15
+ :time: 13
16
+ :mknod: 14
17
+ :chmod: 15
18
+ :lchown: 16
19
+ :break: 17
20
+ :oldstat: 18
21
+ :lseek: 19
22
+ :getpid: 20
23
+ :mount: 21
24
+ :umount: 22
25
+ :setuid: 23
26
+ :getuid: 24
27
+ :stime: 25
28
+ :ptrace: 26
29
+ :alarm: 27
30
+ :oldfstat: 28
31
+ :pause: 29
32
+ :utime: 30
33
+ :stty: 31
34
+ :gtty: 32
35
+ :access: 33
36
+ :nice: 34
37
+ :ftime: 35
38
+ :sync: 36
39
+ :kill: 37
40
+ :rename: 38
41
+ :mkdir: 39
42
+ :rmdir: 40
43
+ :dup: 41
44
+ :pipe: 42
45
+ :times: 43
46
+ :prof: 44
47
+ :brk: 45
48
+ :setgid: 46
49
+ :getgid: 47
50
+ :signal: 48
51
+ :geteuid: 49
52
+ :getegid: 50
53
+ :acct: 51
54
+ :umount2: 52
55
+ :lock: 53
56
+ :ioctl: 54
57
+ :fcntl: 55
58
+ :mpx: 56
59
+ :setpgid: 57
60
+ :ulimit: 58
61
+ :oldolduname: 59
62
+ :umask: 60
63
+ :chroot: 61
64
+ :ustat: 62
65
+ :dup2: 63
66
+ :getppid: 64
67
+ :getpgrp: 65
68
+ :setsid: 66
69
+ :sigaction: 67
70
+ :sgetmask: 68
71
+ :ssetmask: 69
72
+ :setreuid: 70
73
+ :setregid: 71
74
+ :sigsuspend: 72
75
+ :sigpending: 73
76
+ :sethostname: 74
77
+ :setrlimit: 75
78
+ :getrlimit: 76 # Back compatible 2Gig limited rlimit
79
+ :getrusage: 77
80
+ :gettimeofday: 78
81
+ :settimeofday: 79
82
+ :getgroups: 80
83
+ :setgroups: 81
84
+ :select: 82
85
+ :symlink: 83
86
+ :oldlstat: 84
87
+ :readlink: 85
88
+ :uselib: 86
89
+ :swapon: 87
90
+ :reboot: 88
91
+ :readdir: 89
92
+ :mmap: 90
93
+ :munmap: 91
94
+ :truncate: 92
95
+ :ftruncate: 93
96
+ :fchmod: 94
97
+ :fchown: 95
98
+ :getpriority: 96
99
+ :setpriority: 97
100
+ :profil: 98
101
+ :statfs: 99
102
+ :fstatfs: 100
103
+ :ioperm: 101
104
+ :socketcall: 102
105
+ :syslog: 103
106
+ :setitimer: 104
107
+ :getitimer: 105
108
+ :stat: 106
109
+ :lstat: 107
110
+ :fstat: 108
111
+ :olduname: 109
112
+ :iopl: 110
113
+ :vhangup: 111
114
+ :idle: 112
115
+ :vm86old: 113
116
+ :wait4: 114
117
+ :swapoff: 115
118
+ :sysinfo: 116
119
+ :ipc: 117
120
+ :fsync: 118
121
+ :sigreturn: 119
122
+ :clone: 120
123
+ :setdomainname: 121
124
+ :uname: 122
125
+ :modify_ldt: 123
126
+ :adjtimex: 124
127
+ :mprotect: 125
128
+ :sigprocmask: 126
129
+ :create_module: 127
130
+ :init_module: 128
131
+ :delete_module: 129
132
+ :get_kernel_syms: 130
133
+ :quotactl: 131
134
+ :getpgid: 132
135
+ :fchdir: 133
136
+ :bdflush: 134
137
+ :sysfs: 135
138
+ :personality: 136
139
+ :afs_syscall: 137 # Syscall for Andrew File System
140
+ :setfsuid: 138
141
+ :setfsgid: 139
142
+ :_llseek: 140
143
+ :getdents: 141
144
+ :_newselect: 142
145
+ :flock: 143
146
+ :msync: 144
147
+ :readv: 145
148
+ :writev: 146
149
+ :getsid: 147
150
+ :fdatasync: 148
151
+ :_sysctl: 149
152
+ :mlock: 150
153
+ :munlock: 151
154
+ :mlockall: 152
155
+ :munlockall: 153
156
+ :sched_setparam: 154
157
+ :sched_getparam: 155
158
+ :sched_setscheduler: 156
159
+ :sched_getscheduler: 157
160
+ :sched_yield: 158
161
+ :sched_get_priority_max: 159
162
+ :sched_get_priority_min: 160
163
+ :sched_rr_get_interval: 161
164
+ :nanosleep: 162
165
+ :mremap: 163
166
+ :setresuid: 164
167
+ :getresuid: 165
168
+ :vm86: 166
169
+ :query_module: 167
170
+ :poll: 168
171
+ :nfsservctl: 169
172
+ :setresgid: 170
173
+ :getresgid: 171
174
+ :prctl: 172
175
+ :rt_sigreturn: 173
176
+ :rt_sigaction: 174
177
+ :rt_sigprocmask: 175
178
+ :rt_sigpending: 176
179
+ :rt_sigtimedwait: 177
180
+ :rt_sigqueueinfo: 178
181
+ :rt_sigsuspend: 179
182
+ :pread64: 180
183
+ :pwrite64: 181
184
+ :chown: 182
185
+ :getcwd: 183
186
+ :capget: 184
187
+ :capset: 185
188
+ :sigaltstack: 186
189
+ :sendfile: 187
190
+ :getpmsg: 188 # some people actually want streams
191
+ :putpmsg: 189 # some people actually want streams
192
+ :vfork: 190
193
+ :ugetrlimit: 191 # SuS compliant getrlimit
194
+ :mmap2: 192
195
+ :truncate64: 193
196
+ :ftruncate64: 194
197
+ :stat64: 195
198
+ :lstat64: 196
199
+ :fstat64: 197
200
+ :lchown32: 198
201
+ :getuid32: 199
202
+ :getgid32: 200
203
+ :geteuid32: 201
204
+ :getegid32: 202
205
+ :setreuid32: 203
206
+ :setregid32: 204
207
+ :getgroups32: 205
208
+ :setgroups32: 206
209
+ :fchown32: 207
210
+ :setresuid32: 208
211
+ :getresuid32: 209
212
+ :setresgid32: 210
213
+ :getresgid32: 211
214
+ :chown32: 212
215
+ :setuid32: 213
216
+ :setgid32: 214
217
+ :setfsuid32: 215
218
+ :setfsgid32: 216
219
+ :pivot_root: 217
220
+ :mincore: 218
221
+ :madvise: 219
222
+ :madvise1: 219 # delete when C lib stub is removed
223
+ :getdents64: 220
224
+ :fcntl64: 221
225
+ # 223 is unused
226
+ :gettid: 224
227
+ :readahead: 225
228
+ :setxattr: 226
229
+ :lsetxattr: 227
230
+ :fsetxattr: 228
231
+ :getxattr: 229
232
+ :lgetxattr: 230
233
+ :fgetxattr: 231
234
+ :listxattr: 232
235
+ :llistxattr: 233
236
+ :flistxattr: 234
237
+ :removexattr: 235
238
+ :lremovexattr: 236
239
+ :fremovexattr: 237
240
+ :tkill: 238
241
+ :sendfile64: 239
242
+ :futex: 240
243
+ :sched_setaffinity: 241
244
+ :sched_getaffinity: 242
245
+ :set_thread_area: 243
246
+ :get_thread_area: 244
247
+ :io_setup: 245
248
+ :io_destroy: 246
249
+ :io_getevents: 247
250
+ :io_submit: 248
251
+ :io_cancel: 249
252
+ :fadvise64: 250
253
+ # 251 is available for reuse (was briefly sys_set_zone_reclaim)
254
+ :exit_group: 252
255
+ :lookup_dcookie: 253
256
+ :epoll_create: 254
257
+ :epoll_ctl: 255
258
+ :epoll_wait: 256
259
+ :remap_file_pages: 257
260
+ :set_tid_address: 258
261
+ :timer_create: 259
262
+ :timer_settime: 260 # (timer_create+1)
263
+ :timer_gettime: 261 # (timer_create+2)
264
+ :timer_getoverrun: 262 # (timer_create+3)
265
+ :timer_delete: 263 # (timer_create+4)
266
+ :clock_settime: 264 # (timer_create+5)
267
+ :clock_gettime: 265 # (timer_create+6)
268
+ :clock_getres: 266 # (timer_create+7)
269
+ :clock_nanosleep: 267 # (timer_create+8)
270
+ :statfs64: 268
271
+ :fstatfs64: 269
272
+ :tgkill: 270
273
+ :utimes: 271
274
+ :fadvise64_64: 272
275
+ :vserver: 273
276
+ :mbind: 274
277
+ :get_mempolicy: 275
278
+ :set_mempolicy: 276
279
+ :mq_open: 277
280
+ :mq_unlink: 278 # (mq_open+1)
281
+ :mq_timedsend: 279 # (mq_open+2)
282
+ :mq_timedreceive: 280 # (mq_open+3)
283
+ :mq_notify: 281 # (mq_open+4)
284
+ :mq_getsetattr: 282 # (mq_open+5)
285
+ :kexec_load: 283
286
+ :waitid: 284
287
+ # sys_setaltroot: 285
288
+ :add_key: 286
289
+ :request_key: 287
290
+ :keyctl: 288
291
+ :ioprio_set: 289
292
+ :ioprio_get: 290
293
+ :inotify_init: 291
294
+ :inotify_add_watch: 292
295
+ :inotify_rm_watch: 293
296
+ :migrate_pages: 294
297
+ :openat: 295
298
+ :mkdirat: 296
299
+ :mknodat: 297
300
+ :fchownat: 298
301
+ :futimesat: 299
302
+ :fstatat64: 300
303
+ :unlinkat: 301
304
+ :renameat: 302
305
+ :linkat: 303
306
+ :symlinkat: 304
307
+ :readlinkat: 305
308
+ :fchmodat: 306
309
+ :faccessat: 307
310
+ :pselect6: 308
311
+ :ppoll: 309
312
+ :unshare: 310
313
+ :set_robust_list: 311
314
+ :get_robust_list: 312
315
+ :splice: 313
316
+ :sync_file_range: 314
317
+ :tee: 315
318
+ :vmsplice: 316
319
+ :move_pages: 317
320
+ :getcpu: 318
321
+ :epoll_pwait: 319
322
+ :utimensat: 320
323
+ :signalfd: 321
324
+ :timerfd_create: 322
325
+ :eventfd: 323
326
+ :fallocate: 324
327
+ :timerfd_settime: 325
328
+ :timerfd_gettime: 326
329
+ :signalfd4: 327
330
+ :eventfd2: 328
331
+ :epoll_create1: 329
332
+ :dup3: 330
333
+ :pipe2: 331
334
+ :inotify_init1: 332
335
+ :preadv: 333
336
+ :pwritev: 334
337
+ :rt_tgsigqueueinfo: 335
338
+ :perf_event_open: 336
339
+ :recvmmsg: 337
@@ -0,0 +1,4 @@
1
+ <%= comment_block @metadata %>
2
+
3
+ _start:
4
+ <%= indent %>
@@ -0,0 +1,20 @@
1
+ name: ronin-asm
2
+ summary: A Ruby DSL for crafting Assembly programs and Shellcode.
3
+ description:
4
+ ronin-asm is a Ruby DSL for crafting Assmebly programs and Shellcode.
5
+
6
+ license: GPL-3
7
+ authors: Postmodern
8
+ email: postmodern.mod3@gmail.com
9
+ homepage: https://github.com/ronin-ruby/ronin-asm#readme
10
+ has_yard: true
11
+
12
+ requirements: yasm >= 0.6.0
13
+
14
+ dependencies:
15
+ data_paths: ~> 0.3
16
+ ruby-yasm: ~> 0.2
17
+
18
+ development_dependencies:
19
+ bundler: ~> 1.0
20
+ yard: ~> 0.7
@@ -0,0 +1,25 @@
1
+ #
2
+ # Ronin ASM - A Ruby DSL for crafting Assembly programs and Shellcode.
3
+ #
4
+ # Copyright (c) 2007-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin ASM.
7
+ #
8
+ # Ronin Asm is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Ronin Asm is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Ronin Asm. If not, see <http://www.gnu.org/licenses/>.
20
+ #
21
+
22
+ require 'ronin/asm/program'
23
+ require 'ronin/asm/shellcode'
24
+ require 'ronin/asm/asm'
25
+ require 'ronin/asm/version'
@@ -0,0 +1,23 @@
1
+ #
2
+ # Ronin ASM - A Ruby DSL for crafting Assembly programs and Shellcode.
3
+ #
4
+ # Copyright (c) 2007-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin ASM.
7
+ #
8
+ # Ronin is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Ronin is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Ronin. If not, see <http://www.gnu.org/licenses/>
20
+ #
21
+
22
+ require 'ronin/asm/archs/x86'
23
+ require 'ronin/asm/archs/amd64'
@@ -0,0 +1,99 @@
1
+ #
2
+ # Ronin ASM - A Ruby DSL for crafting Assembly programs and Shellcode.
3
+ #
4
+ # Copyright (c) 2007-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This file is part of Ronin ASM.
7
+ #
8
+ # Ronin is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Ronin is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Ronin. If not, see <http://www.gnu.org/licenses/>
20
+ #
21
+
22
+ require 'ronin/asm/archs/x86'
23
+
24
+ module Ronin
25
+ module ASM
26
+ module Archs
27
+ #
28
+ # Contains AMD64 Archtecture information.
29
+ #
30
+ module AMD64
31
+ include X86
32
+
33
+ # Default word size
34
+ WORD_SIZE = 8
35
+
36
+ # AMD64 registers
37
+ REGISTERS = X86::REGISTERS.merge(
38
+ :rax => Register.new(:rax, 8, true),
39
+ :rbx => Register.new(:rbx, 8, true),
40
+ :rcx => Register.new(:rcx, 8, true),
41
+ :rdx => Register.new(:rdx, 8, true),
42
+
43
+ :rsi => Register.new(:rsi, 8, true),
44
+ :rdi => Register.new(:rdi, 8, true),
45
+
46
+ :rsp => Register.new(:rsp, 8, true),
47
+ :rbp => Register.new(:rbp, 8, true),
48
+
49
+ :r8b => Register.new(:r8b, 1, true),
50
+ :r8w => Register.new(:r8w, 2, true),
51
+ :r8d => Register.new(:r8d, 4, true),
52
+ :r8 => Register.new(:r8, 8, true),
53
+
54
+ :r9b => Register.new(:r9b, 1, true),
55
+ :r9w => Register.new(:r9w, 2, true),
56
+ :r9d => Register.new(:r9d, 4, true),
57
+ :r9 => Register.new(:r9, 8, true),
58
+
59
+ :r10b => Register.new(:r10b, 1, true),
60
+ :r10w => Register.new(:r10w, 2, true),
61
+ :r10d => Register.new(:r10d, 4, true),
62
+ :r10 => Register.new(:r10, 8, true),
63
+
64
+ :r11b => Register.new(:r11b, 1, true),
65
+ :r11w => Register.new(:r11w, 2, true),
66
+ :r11d => Register.new(:r11d, 4, true),
67
+ :r11 => Register.new(:r11, 8, true),
68
+
69
+ :r12b => Register.new(:r12b, 1, true),
70
+ :r12w => Register.new(:r12w, 2, true),
71
+ :r12d => Register.new(:r12d, 4, true),
72
+ :r12 => Register.new(:r12, 8, true),
73
+
74
+ :r13b => Register.new(:r13b, 1, true),
75
+ :r13w => Register.new(:r13w, 2, true),
76
+ :r13d => Register.new(:r13d, 4, true),
77
+ :r13 => Register.new(:r13, 8, true),
78
+
79
+ :r14b => Register.new(:r14b, 1, true),
80
+ :r14w => Register.new(:r14w, 2, true),
81
+ :r14d => Register.new(:r14d, 4, true),
82
+ :r14 => Register.new(:r14, 8, true),
83
+
84
+ :r15b => Register.new(:r15b, 1, true),
85
+ :r15w => Register.new(:r15w, 2, true),
86
+ :r15d => Register.new(:r15d, 4, true),
87
+ :r15 => Register.new(:r15, 8, true),
88
+
89
+ :rip => Register.new(:rip, 8, true)
90
+ )
91
+
92
+ #
93
+ # Generates the instruction to invoke a syscall.
94
+ #
95
+ def syscall; instruction(:syscall); end
96
+ end
97
+ end
98
+ end
99
+ end