duran 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +11 -0
  3. data/Rakefile +29 -0
  4. data/VERSION +1 -0
  5. data/client_src/dr_include/dr_api.h +102 -0
  6. data/client_src/dr_include/dr_app.h +92 -0
  7. data/client_src/dr_include/dr_config.h +650 -0
  8. data/client_src/dr_include/dr_defines.h +391 -0
  9. data/client_src/dr_include/dr_events.h +1057 -0
  10. data/client_src/dr_include/dr_ir_instr.h +1214 -0
  11. data/client_src/dr_include/dr_ir_instrlist.h +149 -0
  12. data/client_src/dr_include/dr_ir_macros.h +2426 -0
  13. data/client_src/dr_include/dr_ir_opcodes.h +768 -0
  14. data/client_src/dr_include/dr_ir_opnd.h +1170 -0
  15. data/client_src/dr_include/dr_ir_utils.h +708 -0
  16. data/client_src/dr_include/dr_proc.h +327 -0
  17. data/client_src/dr_include/dr_tools.h +1304 -0
  18. data/client_src/duran.c +57 -0
  19. data/client_src/extconf.rb +28 -0
  20. data/lib/duran.rb +18 -0
  21. data/lib/duran/app.rb +8 -0
  22. data/lib/duran/defines.rb +39 -0
  23. data/lib/duran/events.rb +156 -0
  24. data/lib/duran/ir_opcodes.rb +616 -0
  25. data/lib/duran/ir_opnd.rb +329 -0
  26. data/lib/duran/ir_utils.rb +133 -0
  27. data/lib/duran/proc.rb +49 -0
  28. data/lib/duran/structs.rb +20 -0
  29. data/lib/duran/structs/exception.rb +23 -0
  30. data/lib/duran/structs/fault_fragment_info.rb +34 -0
  31. data/lib/duran/structs/instruction.rb +15 -0
  32. data/lib/duran/structs/machine_context.rb +80 -0
  33. data/lib/duran/structs/memory_info.rb +12 -0
  34. data/lib/duran/structs/module_data.rb +61 -0
  35. data/lib/duran/structs/module_names.rb +24 -0
  36. data/lib/duran/structs/operand.rb +15 -0
  37. data/lib/duran/structs/restore_state_info.rb +30 -0
  38. data/lib/duran/structs/signal_info.rb +41 -0
  39. data/lib/duran/structs/tracedump.rb +50 -0
  40. data/lib/duran/tools.rb +214 -0
  41. metadata +104 -0
@@ -0,0 +1,57 @@
1
+ #include <stdlib.h>
2
+ #include <stdio.h>
3
+ #include <ruby.h>
4
+ #include "duran.h"
5
+ #include "dr_api.h"
6
+
7
+ VALUE cDuran;
8
+
9
+ int
10
+ wrap_ruby_load(char *script)
11
+ {
12
+ int status;
13
+ rb_load_protect(rb_str_new2(script), 0, &status);
14
+ if(status != 0) {
15
+ rb_eval_string("STDERR.puts 'Exception raised:', $!.inspect, $!.backtrace");
16
+ exit(status);
17
+ }
18
+ return(status);
19
+ }
20
+
21
+ DR_EXPORT void
22
+ dr_init(client_id_t id)
23
+ {
24
+ char *duran_script;
25
+ VALUE library_path;
26
+
27
+ ruby_init();
28
+ ruby_script("embedded");
29
+
30
+ cDuran = rb_define_module("Duran");
31
+ ruby_init_loadpath();
32
+ rb_define_const(cDuran, "ARCH",
33
+ #ifdef X64
34
+ rb_eval_string(":x64")
35
+ #else
36
+ rb_eval_string(":x32")
37
+ #endif
38
+ );
39
+
40
+ rb_define_const(cDuran, "PLATFORM",
41
+ #ifdef WINDOWS
42
+ rb_eval_string(":windows")
43
+ #else
44
+ rb_eval_string(":linux")
45
+ #endif
46
+ );
47
+
48
+ /* always load the duran runtime ruby library */
49
+ library_path = rb_gv_get("$:");
50
+ rb_ary_push(library_path, rb_str_new2(DURAN_RUBYLIBPATH));
51
+ wrap_ruby_load("duran.rb");
52
+
53
+ if(duran_script=getenv("DURAN_SCRIPT"))
54
+ wrap_ruby_load(duran_script);
55
+
56
+ }
57
+
@@ -0,0 +1,28 @@
1
+ require 'mkmf'
2
+
3
+ ARCHBITS = "32"
4
+ #ARCHBITS = "64"
5
+
6
+ $defs.push("-DX86_#{ARCHBITS}")
7
+
8
+ # Indicate the DynamoRIO platform based on our RUBY_PLATFORM
9
+ if RUBY_PLATFORM =~ /linux$/
10
+ $defs.push("-DLINUX")
11
+ elsif RUBY_PLATFORM =~ /win32$/
12
+ $defs.push("-DWINDOWS")
13
+ else
14
+ puts("Sorry, only Windows and Linux are supported by DynamoRIO")
15
+ exit 1
16
+ end
17
+
18
+ # Set the DURAN_PATH define based on cwd
19
+ duran_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
20
+ $defs.push("-DDURAN_RUBYLIBPATH=\\\"#{duran_path}\\\"")
21
+
22
+ $CFLAGS = ENV["CFLAGS"].to_s
23
+ $CFLAGS << " -I./dr_include"
24
+
25
+ create_header("duran.h")
26
+ dir_config("duran#{ARCHBITS}")
27
+ create_makefile("duran#{ARCHBITS}")
28
+
@@ -0,0 +1,18 @@
1
+ begin ; require 'rubygems' ; rescue LoadError; end
2
+ require 'ffi'
3
+ require 'ffi/dry'
4
+
5
+ module Duran
6
+ extend FFI::Library
7
+ end
8
+
9
+ require 'duran/defines'
10
+ require 'duran/structs'
11
+
12
+ require 'duran/events'
13
+ require 'duran/app'
14
+ require 'duran/ir_opnd'
15
+ require 'duran/tools'
16
+ require 'duran/proc'
17
+ require 'duran/ir_utils'
18
+ require 'duran/ir_opcodes'
@@ -0,0 +1,8 @@
1
+
2
+ module Duran
3
+ attach_function :dr_app_setup, [], :int
4
+ attach_function :dr_app_cleanup, [], :int
5
+ attach_function :dr_app_start, [], :void
6
+ attach_function :dr_app_stop, [], :void
7
+ attach_function :dr_app_take_over, [], :void
8
+ end
@@ -0,0 +1,39 @@
1
+
2
+ module Duran
3
+ if ::Duran::ARCH == :x64
4
+ typedef :int64, :ssize_t
5
+ typedef :uint64, :reg_t
6
+ typedef :int64, :ptr_int_t
7
+ else
8
+ typedef :int, :ssize_t
9
+ typedef :uint, :reg_t
10
+ typedef :int, :ptr_int_t
11
+ end
12
+
13
+
14
+ if ::Duran::PLATFORM == :windows
15
+ typedef :pointer, :file_t
16
+ typedef :reg_t, :thread_id_t
17
+ typedef :reg_t, :process_id_t
18
+ else
19
+ typedef :int, :file_t
20
+ typedef :pid_t, :thread_id_t
21
+ typedef :pid_t, :process_id_t
22
+ end
23
+
24
+ typedef :reg_t, :ptr_uint_t
25
+
26
+ typedef :uchar, :byte
27
+ typedef :uint, :client_id_t
28
+ typedef :uchar, :reg_id_t
29
+ typedef :uchar, :opnd_size_t
30
+ typedef :pointer, :app_pc
31
+ typedef :uint, :spill_slot_t
32
+
33
+ typedef :pointer, :instrlist_t
34
+ typedef :pointer, :module_data_t
35
+ typedef :pointer, :module_handle_t
36
+ typedef :pointer, :dr_module_iterator_t
37
+
38
+ end
39
+
@@ -0,0 +1,156 @@
1
+
2
+ module Duran
3
+ typedef :pointer, :dr_ctx_t
4
+ typedef :pointer, :dr_tag_t
5
+
6
+ callback :void_event_cb, [], :void
7
+
8
+ attach_function :dr_register_exit_event, [:void_event_cb], :void
9
+ attach_function :dr_unregister_exit_event, [:void_event_cb], :bool
10
+
11
+ enum :emit_flags, [:default, :store_translations]
12
+
13
+ # dr_emit_flags_t (*func)
14
+ # (void *drcontext, void *tag, instrlist_t *bb,
15
+ # bool for_trace, bool translating)
16
+ callback :bb_event_cb,
17
+ [:dr_ctx_t, :dr_tag_t, :instrlist_t, :bool, :bool],
18
+ :emit_flags
19
+
20
+ attach_function :dr_register_bb_event, [:bb_event_cb], :void
21
+ attach_function :dr_unregister_bb_event, [:bb_event_cb], :bool
22
+
23
+
24
+ # dr_emit_flags_t (*func)
25
+ # (void *drcontext, void *tag, instrlist_t *trace, bool translating)
26
+ callback :trace_event_cb,
27
+ [:dr_ctx_t, :dr_tag_t, :instrlist_t, :bool],
28
+ :emit_flags
29
+
30
+ attach_function :dr_register_trace_event, [:trace_event_cb], :void
31
+ attach_function :dr_unregister_trace_event, [:trace_event_cb], :bool
32
+
33
+ enum :custom_trace_action, [:dr_decides, :end_now, :continue]
34
+
35
+ # dr_custom_trace_action_t (*func)
36
+ # (void *drcontext, void *tag, void *next_tag)
37
+ callback :end_trace_event_cb,
38
+ [:dr_ctx_t, :dr_tag_t, :dr_tag_t],
39
+ :custom_trace_action
40
+
41
+ attach_function :dr_register_end_trace_event, [:end_trace_event_cb], :void
42
+ attach_function :dr_unregister_end_trace_event, [:end_trace_event_cb], :bool
43
+
44
+ # void (*func)(void *drcontext, void *tag)
45
+ callback :delete_event_cb, [:dr_ctx_t, :dr_tag_t], :void
46
+
47
+ attach_function :dr_register_delete_event, [:delete_event_cb], :void
48
+ attach_function :dr_unregister_delete_event, [:delete_event_cb], :bool
49
+
50
+ # void (*func)
51
+ # (void *drcontext, void *tag, dr_mcontext_t *mcontext,
52
+ # bool restore_memory, bool app_code_consistent)
53
+ callback :restore_state_event_cb,
54
+ [:dr_ctx_t, :dr_tag_t, MachineContext, :bool, :bool],
55
+ :void
56
+
57
+ attach_function :dr_register_restore_state_event,
58
+ [:restore_state_event_cb],
59
+ :void
60
+
61
+ attach_function :dr_unregister_restore_state_event,
62
+ [:restore_state_event_cb],
63
+ :bool
64
+
65
+
66
+ # bool (*func) (void *drcontext, bool restore_memory,
67
+ # dr_restore_state_info_t *info)
68
+ callback :restore_state_event_ex_cb,
69
+ [:dr_ctx_t, :bool, RestoreStateInfo],
70
+ :bool
71
+
72
+ attach_function :dr_register_restore_state_ex_event,
73
+ [:restore_state_event_ex_cb],
74
+ :void
75
+
76
+ attach_function :dr_unregister_restore_state_ex_event,
77
+ [:restore_state_event_ex_cb],
78
+ :bool
79
+
80
+ # void (*func)(void *drcontext)
81
+ callback :ctx_event_cb, [:dr_ctx_t], :void
82
+
83
+ attach_function :dr_register_thread_init_event, [:ctx_event_cb], :void
84
+ attach_function :dr_unregister_thread_init_event, [:ctx_event_cb], :bool
85
+
86
+ attach_function :dr_register_thread_exit_event, [:ctx_event_cb], :void
87
+ attach_function :dr_unregister_thread_exit_event, [:ctx_event_cb], :bool
88
+
89
+ attach_function :dr_register_fork_init_event, [:ctx_event_cb], :void
90
+ attach_function :dr_unregister_fork_init_event, [:ctx_event_cb], :bool
91
+
92
+ # void (*func)(void *drcontext, const module_data_t *info, bool loaded)
93
+ callback :modload_event_cb, [:dr_ctx_t, ModuleData, :bool], :void
94
+
95
+ attach_function :dr_register_module_load_event, [:modload_event_cb], :void
96
+ attach_function :dr_unregister_module_load_event, [:modload_event_cb], :bool
97
+
98
+
99
+ # void (*func)(void *drcontext, int sysnum)
100
+ callback :bool_syscall_event_cb, [:dr_ctx_t, :int], :bool
101
+
102
+ attach_function :dr_register_filter_syscall_event,
103
+ [:bool_syscall_event_cb],
104
+ :void
105
+
106
+ attach_function :dr_unregister_filter_syscall_event,
107
+ [:bool_syscall_event_cb],
108
+ :bool
109
+
110
+ attach_function :dr_register_pre_syscall_event,
111
+ [:bool_syscall_event_cb],
112
+ :void
113
+
114
+ attach_function :dr_unregister_pre_syscall_event,
115
+ [:bool_syscall_event_cb],
116
+ :bool
117
+
118
+ # bool (*func)(void *drcontext, int sysnum)
119
+ callback :void_syscall_event_cb, [:dr_ctx_t, :int], :void
120
+
121
+ attach_function :dr_register_post_syscall_event,
122
+ [:void_syscall_event_cb],
123
+ :void
124
+
125
+ attach_function :dr_unregister_post_syscall_event,
126
+ [:void_syscall_event_cb],
127
+ :bool
128
+
129
+
130
+ # void (*func)(void *drcontext, uint64 argument)
131
+ callback :nudge_event_cb, [:dr_ctx_t, :uint64], :void
132
+
133
+ attach_function :dr_register_nudge_event,
134
+ [:nudge_event_cb, :client_id_t], :void
135
+
136
+ attach_function :dr_unregister_nudge_event,
137
+ [:nudge_event_cb, :client_id_t], :bool
138
+
139
+ attach_function :dr_nudge_client, [:client_id_t, :uint64], :bool
140
+
141
+ if ::Duran::PLATFORM == :windows
142
+ # bool (*func)(void *drcontext, dr_exception_t *excpt)
143
+ callback :exception_event_cb, [:dr_ctx_t, Exception], :bool
144
+
145
+ attach_function :dr_register_exception_event, [:exception_event_cb], :void
146
+ attach_function :dr_unregister_exception_event, [:exception_event_cb], :bool
147
+ elsif ::Duran::PLATFORM == :linux
148
+ enum :signal_action, [:deliver, :supress, :bypass, :redirect]
149
+
150
+ # dr_signal_action_t (*func)(void *drcontext, dr_siginfo_t *siginfo)
151
+ callback :signal_event_cb, [:dr_ctx_t, SignalInfo], :signal_action
152
+
153
+ attach_function :dr_register_signal_event, [:signal_event_cb], :void
154
+ attach_function :dr_unregister_signal_event, [:signal_event_cb], :bool
155
+ end
156
+ end
@@ -0,0 +1,616 @@
1
+ module Duran
2
+ OPCODES = [
3
+ :INVALID,
4
+ :UNDECODED,
5
+ :CONTD,
6
+ :LABEL,
7
+ :add,
8
+ :or,
9
+ :adc,
10
+ :sbb,
11
+ :and,
12
+ :daa,
13
+ :sub,
14
+ :das,
15
+ :xor,
16
+ :aaa,
17
+ :cmp,
18
+ :aas,
19
+ :inc,
20
+ :dec,
21
+ :push,
22
+ :push_imm,
23
+ :pop,
24
+ :pusha,
25
+ :popa,
26
+ :bound,
27
+ :arpl,
28
+ :imul,
29
+ :jo_short,
30
+ :jno_short,
31
+ :jb_short,
32
+ :jnb_short,
33
+ :jz_short,
34
+ :jnz_short,
35
+ :jbe_short,
36
+ :jnbe_short,
37
+ :js_short,
38
+ :jns_short,
39
+ :jp_short,
40
+ :jnp_short,
41
+ :jl_short,
42
+ :jnl_short,
43
+ :jle_short,
44
+ :jnle_short,
45
+ :call,
46
+ :call_ind,
47
+ :call_far,
48
+ :call_far_ind,
49
+ :jmp,
50
+ :jmp_short,
51
+ :jmp_ind,
52
+ :jmp_far,
53
+ :jmp_far_ind,
54
+ :loopne,
55
+ :loope,
56
+ :loop,
57
+ :jecxz,
58
+ :mov_ld,
59
+ :mov_st,
60
+ :mov_imm,
61
+ :mov_seg,
62
+ :mov_priv,
63
+ :test,
64
+ :lea,
65
+ :xchg,
66
+ :cwde,
67
+ :cdq,
68
+ :fwait,
69
+ :pushf,
70
+ :popf,
71
+ :sahf,
72
+ :lahf,
73
+ :ret,
74
+ :ret_far,
75
+ :les,
76
+ :lds,
77
+ :enter,
78
+ :leave,
79
+ :int3,
80
+ :int,
81
+ :into,
82
+ :iret,
83
+ :aam,
84
+ :aad,
85
+ :xlat,
86
+ :in,
87
+ :out,
88
+ :hlt,
89
+ :cmc,
90
+ :clc,
91
+ :stc,
92
+ :cli,
93
+ :sti,
94
+ :cld,
95
+ :std,
96
+ :lar,
97
+ :lsl,
98
+ :syscall,
99
+ :clts,
100
+ :sysret,
101
+ :invd,
102
+ :wbinvd,
103
+ :ud2a,
104
+ :nop_modrm,
105
+ :movntps,
106
+ :movntpd,
107
+ :wrmsr,
108
+ :rdtsc,
109
+ :rdmsr,
110
+ :rdpmc,
111
+ :sysenter,
112
+ :sysexit,
113
+ :cmovo,
114
+ :cmovno,
115
+ :cmovb,
116
+ :cmovnb,
117
+ :cmovz,
118
+ :cmovnz,
119
+ :cmovbe,
120
+ :cmovnbe,
121
+ :cmovs,
122
+ :cmovns,
123
+ :cmovp,
124
+ :cmovnp,
125
+ :cmovl,
126
+ :cmovnl,
127
+ :cmovle,
128
+ :cmovnle,
129
+ :punpcklbw,
130
+ :punpcklwd,
131
+ :punpckldq,
132
+ :packsswb,
133
+ :pcmpgtb,
134
+ :pcmpgtw,
135
+ :pcmpgtd,
136
+ :packuswb,
137
+ :punpckhbw,
138
+ :punpckhwd,
139
+ :punpckhdq,
140
+ :packssdw,
141
+ :punpcklqdq,
142
+ :punpckhqdq,
143
+ :movd,
144
+ :movq,
145
+ :movdqu,
146
+ :movdqa,
147
+ :pshufw,
148
+ :pshufd,
149
+ :pshufhw,
150
+ :pshuflw,
151
+ :pcmpeqb,
152
+ :pcmpeqw,
153
+ :pcmpeqd,
154
+ :emms,
155
+ :jo,
156
+ :jno,
157
+ :jb,
158
+ :jnb,
159
+ :jz,
160
+ :jnz,
161
+ :jbe,
162
+ :jnbe,
163
+ :js,
164
+ :jns,
165
+ :jp,
166
+ :jnp,
167
+ :jl,
168
+ :jnl,
169
+ :jle,
170
+ :jnle,
171
+ :seto,
172
+ :setno,
173
+ :setb,
174
+ :setnb,
175
+ :setz,
176
+ :setnz,
177
+ :setbe,
178
+ :setnbe,
179
+ :sets,
180
+ :setns,
181
+ :setp,
182
+ :setnp,
183
+ :setl,
184
+ :setnl,
185
+ :setle,
186
+ :setnle,
187
+ :cpuid,
188
+ :bt,
189
+ :shld,
190
+ :rsm,
191
+ :bts,
192
+ :shrd,
193
+ :cmpxchg,
194
+ :lss,
195
+ :btr,
196
+ :lfs,
197
+ :lgs,
198
+ :movzx,
199
+ :ud2b,
200
+ :btc,
201
+ :bsf,
202
+ :bsr,
203
+ :movsx,
204
+ :xadd,
205
+ :movnti,
206
+ :pinsrw,
207
+ :pextrw,
208
+ :bswap,
209
+ :psrlw,
210
+ :psrld,
211
+ :psrlq,
212
+ :paddq,
213
+ :pmullw,
214
+ :pmovmskb,
215
+ :psubusb,
216
+ :psubusw,
217
+ :pminub,
218
+ :pand,
219
+ :paddusb,
220
+ :paddusw,
221
+ :pmaxub,
222
+ :pandn,
223
+ :pavgb,
224
+ :psraw,
225
+ :psrad,
226
+ :pavgw,
227
+ :pmulhuw,
228
+ :pmulhw,
229
+ :movntq,
230
+ :movntdq,
231
+ :psubsb,
232
+ :psubsw,
233
+ :pminsw,
234
+ :por,
235
+ :paddsb,
236
+ :paddsw,
237
+ :pmaxsw,
238
+ :pxor,
239
+ :psllw,
240
+ :pslld,
241
+ :psllq,
242
+ :pmuludq,
243
+ :pmaddwd,
244
+ :psadbw,
245
+ :maskmovq,
246
+ :maskmovdqu,
247
+ :psubb,
248
+ :psubw,
249
+ :psubd,
250
+ :psubq,
251
+ :paddb,
252
+ :paddw,
253
+ :paddd,
254
+ :psrldq,
255
+ :pslldq,
256
+ :rol,
257
+ :ror,
258
+ :rcl,
259
+ :rcr,
260
+ :shl,
261
+ :shr,
262
+ :sar,
263
+ :not,
264
+ :neg,
265
+ :mul,
266
+ :div,
267
+ :idiv,
268
+ :sldt,
269
+ :str,
270
+ :lldt,
271
+ :ltr,
272
+ :verr,
273
+ :verw,
274
+ :sgdt,
275
+ :sidt,
276
+ :lgdt,
277
+ :lidt,
278
+ :smsw,
279
+ :lmsw,
280
+ :invlpg,
281
+ :cmpxchg8b,
282
+ :fxsave,
283
+ :fxrstor,
284
+ :ldmxcsr,
285
+ :stmxcsr,
286
+ :lfence,
287
+ :mfence,
288
+ :clflush,
289
+ :sfence,
290
+ :prefetchnta,
291
+ :prefetcht0,
292
+ :prefetcht1,
293
+ :prefetcht2,
294
+ :prefetch,
295
+ :prefetchw,
296
+ :movups,
297
+ :movss,
298
+ :movupd,
299
+ :movsd,
300
+ :movlps,
301
+ :movlpd,
302
+ :unpcklps,
303
+ :unpcklpd,
304
+ :unpckhps,
305
+ :unpckhpd,
306
+ :movhps,
307
+ :movhpd,
308
+ :movaps,
309
+ :movapd,
310
+ :cvtpi2ps,
311
+ :cvtsi2ss,
312
+ :cvtpi2pd,
313
+ :cvtsi2sd,
314
+ :cvttps2pi,
315
+ :cvttss2si,
316
+ :cvttpd2pi,
317
+ :cvttsd2si,
318
+ :cvtps2pi,
319
+ :cvtss2si,
320
+ :cvtpd2pi,
321
+ :cvtsd2si,
322
+ :ucomiss,
323
+ :ucomisd,
324
+ :comiss,
325
+ :comisd,
326
+ :movmskps,
327
+ :movmskpd,
328
+ :sqrtps,
329
+ :sqrtss,
330
+ :sqrtpd,
331
+ :sqrtsd,
332
+ :rsqrtps,
333
+ :rsqrtss,
334
+ :rcpps,
335
+ :rcpss,
336
+ :andps,
337
+ :andpd,
338
+ :andnps,
339
+ :andnpd,
340
+ :orps,
341
+ :orpd,
342
+ :xorps,
343
+ :xorpd,
344
+ :addps,
345
+ :addss,
346
+ :addpd,
347
+ :addsd,
348
+ :mulps,
349
+ :mulss,
350
+ :mulpd,
351
+ :mulsd,
352
+ :cvtps2pd,
353
+ :cvtss2sd,
354
+ :cvtpd2ps,
355
+ :cvtsd2ss,
356
+ :cvtdq2ps,
357
+ :cvttps2dq,
358
+ :cvtps2dq,
359
+ :subps,
360
+ :subss,
361
+ :subpd,
362
+ :subsd,
363
+ :minps,
364
+ :minss,
365
+ :minpd,
366
+ :minsd,
367
+ :divps,
368
+ :divss,
369
+ :divpd,
370
+ :divsd,
371
+ :maxps,
372
+ :maxss,
373
+ :maxpd,
374
+ :maxsd,
375
+ :cmpps,
376
+ :cmpss,
377
+ :cmppd,
378
+ :cmpsd,
379
+ :shufps,
380
+ :shufpd,
381
+ :cvtdq2pd,
382
+ :cvttpd2dq,
383
+ :cvtpd2dq,
384
+ :nop,
385
+ :pause,
386
+ :ins,
387
+ :rep_ins,
388
+ :outs,
389
+ :rep_outs,
390
+ :movs,
391
+ :rep_movs,
392
+ :stos,
393
+ :rep_stos,
394
+ :lods,
395
+ :rep_lods,
396
+ :cmps,
397
+ :rep_cmps,
398
+ :repne_cmps,
399
+ :scas,
400
+ :rep_scas,
401
+ :repne_scas,
402
+ :fadd,
403
+ :fmul,
404
+ :fcom,
405
+ :fcomp,
406
+ :fsub,
407
+ :fsubr,
408
+ :fdiv,
409
+ :fdivr,
410
+ :fld,
411
+ :fst,
412
+ :fstp,
413
+ :fldenv,
414
+ :fldcw,
415
+ :fnstenv,
416
+ :fnstcw,
417
+ :fiadd,
418
+ :fimul,
419
+ :ficom,
420
+ :ficomp,
421
+ :fisub,
422
+ :fisubr,
423
+ :fidiv,
424
+ :fidivr,
425
+ :fild,
426
+ :fist,
427
+ :fistp,
428
+ :frstor,
429
+ :fnsave,
430
+ :fnstsw,
431
+ :fbld,
432
+ :fbstp,
433
+ :fxch,
434
+ :fnop,
435
+ :fchs,
436
+ :fabs,
437
+ :ftst,
438
+ :fxam,
439
+ :fld1,
440
+ :fldl2t,
441
+ :fldl2e,
442
+ :fldpi,
443
+ :fldlg2,
444
+ :fldln2,
445
+ :fldz,
446
+ :f2xm1,
447
+ :fyl2x,
448
+ :fptan,
449
+ :fpatan,
450
+ :fxtract,
451
+ :fprem1,
452
+ :fdecstp,
453
+ :fincstp,
454
+ :fprem,
455
+ :fyl2xp1,
456
+ :fsqrt,
457
+ :fsincos,
458
+ :frndint,
459
+ :fscale,
460
+ :fsin,
461
+ :fcos,
462
+ :fcmovb,
463
+ :fcmove,
464
+ :fcmovbe,
465
+ :fcmovu,
466
+ :fucompp,
467
+ :fcmovnb,
468
+ :fcmovene,
469
+ :fcmovnbe,
470
+ :fcmovnu,
471
+ :fnclex,
472
+ :fninit,
473
+ :fucomi,
474
+ :fcomi,
475
+ :ffree,
476
+ :fucom,
477
+ :fucomp,
478
+ :faddp,
479
+ :fmulp,
480
+ :fcompp,
481
+ :fsubrp,
482
+ :fsubp,
483
+ :fdivrp,
484
+ :fdivp,
485
+ :fucomip,
486
+ :fcomip,
487
+ :fisttp,
488
+ :haddpd,
489
+ :haddps,
490
+ :hsubpd,
491
+ :hsubps,
492
+ :addsubpd,
493
+ :addsubps,
494
+ :lddqu,
495
+ :monitor,
496
+ :mwait,
497
+ :movsldup,
498
+ :movshdup,
499
+ :movddup,
500
+ :femms,
501
+ :unknown_3dnow,
502
+ :pavgusb,
503
+ :pfadd,
504
+ :pfacc,
505
+ :pfcmpge,
506
+ :pfcmpgt,
507
+ :pfcmpeq,
508
+ :pfmin,
509
+ :pfmax,
510
+ :pfmul,
511
+ :pfrcp,
512
+ :pfrcpit1,
513
+ :pfrcpit2,
514
+ :pfrsqrt,
515
+ :pfrsqit1,
516
+ :pmulhrw,
517
+ :pfsub,
518
+ :pfsubr,
519
+ :pi2fd,
520
+ :pf2id,
521
+ :pi2fw,
522
+ :pf2iw,
523
+ :pfnacc,
524
+ :pfpnacc,
525
+ :pswapd,
526
+ :pshufb,
527
+ :phaddw,
528
+ :phaddd,
529
+ :phaddsw,
530
+ :pmaddubsw,
531
+ :phsubw,
532
+ :phsubd,
533
+ :phsubsw,
534
+ :psignb,
535
+ :psignw,
536
+ :psignd,
537
+ :pmulhrsw,
538
+ :pabsb,
539
+ :pabsw,
540
+ :pabsd,
541
+ :palignr,
542
+ :popcnt,
543
+ :movntss,
544
+ :movntsd,
545
+ :extrq,
546
+ :insertq,
547
+ :lzcnt,
548
+ :pblendvb,
549
+ :blendvps,
550
+ :blendvpd,
551
+ :ptest,
552
+ :pmovsxbw,
553
+ :pmovsxbd,
554
+ :pmovsxbq,
555
+ :pmovsxdw,
556
+ :pmovsxwq,
557
+ :pmovsxdq,
558
+ :pmuldq,
559
+ :pcmpeqq,
560
+ :movntdqa,
561
+ :packusdw,
562
+ :pmovzxbw,
563
+ :pmovzxbd,
564
+ :pmovzxbq,
565
+ :pmovzxdw,
566
+ :pmovzxwq,
567
+ :pmovzxdq,
568
+ :pcmpgtq,
569
+ :pminsb,
570
+ :pminsd,
571
+ :pminuw,
572
+ :pminud,
573
+ :pmaxsb,
574
+ :pmaxsd,
575
+ :pmaxuw,
576
+ :pmaxud,
577
+ :pmulld,
578
+ :phminposuw,
579
+ :crc32,
580
+ :pextrb,
581
+ :pextrd,
582
+ :extractps,
583
+ :roundps,
584
+ :roundpd,
585
+ :roundss,
586
+ :roundsd,
587
+ :blendps,
588
+ :blendpd,
589
+ :pblendw,
590
+ :pinsrb,
591
+ :insertps,
592
+ :pinsrd,
593
+ :dpps,
594
+ :dppd,
595
+ :mpsadbw,
596
+ :pcmpestrm,
597
+ :pcmpestri,
598
+ :pcmpistrm,
599
+ :pcmpistri,
600
+ :movsxd,
601
+ :swapgs,
602
+ :vmcall,
603
+ :vmlaunch,
604
+ :vmresume,
605
+ :vmxoff,
606
+ :vmptrst,
607
+ :vmptrld,
608
+ :vmxon,
609
+ :vmclear,
610
+ :vmread,
611
+ :vmwrite,
612
+ :int1,
613
+ :salc,
614
+ :ffreep,
615
+ ]
616
+ end