duran 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.rdoc +11 -0
- data/Rakefile +29 -0
- data/VERSION +1 -0
- data/client_src/dr_include/dr_api.h +102 -0
- data/client_src/dr_include/dr_app.h +92 -0
- data/client_src/dr_include/dr_config.h +650 -0
- data/client_src/dr_include/dr_defines.h +391 -0
- data/client_src/dr_include/dr_events.h +1057 -0
- data/client_src/dr_include/dr_ir_instr.h +1214 -0
- data/client_src/dr_include/dr_ir_instrlist.h +149 -0
- data/client_src/dr_include/dr_ir_macros.h +2426 -0
- data/client_src/dr_include/dr_ir_opcodes.h +768 -0
- data/client_src/dr_include/dr_ir_opnd.h +1170 -0
- data/client_src/dr_include/dr_ir_utils.h +708 -0
- data/client_src/dr_include/dr_proc.h +327 -0
- data/client_src/dr_include/dr_tools.h +1304 -0
- data/client_src/duran.c +57 -0
- data/client_src/extconf.rb +28 -0
- data/lib/duran.rb +18 -0
- data/lib/duran/app.rb +8 -0
- data/lib/duran/defines.rb +39 -0
- data/lib/duran/events.rb +156 -0
- data/lib/duran/ir_opcodes.rb +616 -0
- data/lib/duran/ir_opnd.rb +329 -0
- data/lib/duran/ir_utils.rb +133 -0
- data/lib/duran/proc.rb +49 -0
- data/lib/duran/structs.rb +20 -0
- data/lib/duran/structs/exception.rb +23 -0
- data/lib/duran/structs/fault_fragment_info.rb +34 -0
- data/lib/duran/structs/instruction.rb +15 -0
- data/lib/duran/structs/machine_context.rb +80 -0
- data/lib/duran/structs/memory_info.rb +12 -0
- data/lib/duran/structs/module_data.rb +61 -0
- data/lib/duran/structs/module_names.rb +24 -0
- data/lib/duran/structs/operand.rb +15 -0
- data/lib/duran/structs/restore_state_info.rb +30 -0
- data/lib/duran/structs/signal_info.rb +41 -0
- data/lib/duran/structs/tracedump.rb +50 -0
- data/lib/duran/tools.rb +214 -0
- metadata +104 -0
data/client_src/duran.c
ADDED
@@ -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
|
+
|
data/lib/duran.rb
ADDED
@@ -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'
|
data/lib/duran/app.rb
ADDED
@@ -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
|
+
|
data/lib/duran/events.rb
ADDED
@@ -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
|