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 }