metasm/cpu/x86_64/opcodes.rb in metasm-1.0.2 vs metasm/cpu/x86_64/opcodes.rb in metasm-1.0.3

- old
+ new

@@ -44,20 +44,22 @@ @opcode_list.delete_if { |o| o.args.include?(:seg2) or o.args.include?(:seg2A) or o.args.include?(:farptr) or %w[aaa aad aam aas bound daa das into jcxz jecxz - lds les loadall arpl pusha pushad popa - popad].include?(o.name.split('.')[0]) + lds les loadall arpl pusha pushad popa popad pushfd popfd + ].include?(o.name.split('.')[0]) # split needed for lds.a32 } @opcode_list.each { |o| o.props[:auto64] = true if o.name =~ /^(enter|leave|[sl]gdt|[sl]idt|[sl]ldt|[sl]tr|push|pop|syscall)$/ } addop('cmpxchg16b', [0x0F, 0xC7], 1) { |o| o.props[:opsz] = 64 ; o.props[:argsz] = 128 } addop('iretq', [0xCF], nil, :stopexec, :setip) { |o| o.props[:opsz] = 64 } ; opcode_list.unshift opcode_list.pop + addop('pushfq', [0x9C]) { |o| o.props[:auto64] = true } + addop('popfq', [0x9D]) { |o| o.props[:auto64] = true } addop 'swapgs', [0x0F, 0x01, 0xF8] addop('movq', [0x0F, 0x6E], :mrmmmx, {:d => [1, 4]}) { |o| o.args = [:regmmx, :modrm] ; o.props[:opsz] = o.props[:argsz] = 64 } addop('movq', [0x0F, 0x6E], :mrmxmm, {:d => [1, 4]}) { |o| o.args = [:regxmm, :modrm] ; o.props[:opsz] = o.props[:argsz] = 64 ; o.props[:needpfx] = 0x66 } addop('jecxz', [0xE3], nil, :setip, :i8) { |o| o.props[:adsz] = 32 }