CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
184 lines
11 KiB
Python
184 lines
11 KiB
Python
class x86:
|
||
|
||
def __init__(self):
|
||
self.capstone_prefix = "X86"
|
||
self.dyninst_prefix = "e"
|
||
self.dyninst_register_prefix = "x86_64"
|
||
|
||
# Mnemonics missing in Capstone
|
||
self.missing = [ "faddp" ]
|
||
|
||
# Pseudo-mnemonics used in Dyninst and Capstone
|
||
# The ones from Capstone are used for GNU assembler (gas) compatibility
|
||
self.pseudo = [
|
||
"No_Entry", # needs to be first
|
||
"3dnow_generic",
|
||
"fp_generic",
|
||
"int80",
|
||
"jb_jnaej_j",
|
||
"jcxz_jec",
|
||
"jnb_jae_j",
|
||
"movlps_movhlps",
|
||
"movhps_movlhps",
|
||
"movsd_sse",
|
||
"pextrd_pextrq",
|
||
"pinsrd_pinsrq",
|
||
"prefetch_w",
|
||
"ud2grp10 ",
|
||
"ret_far",
|
||
"ret_near",
|
||
"lcall", # From Capstone
|
||
"clzero" # From Capstone
|
||
]
|
||
|
||
# x86 has a great many aliased opcodes. This table represents the mappings between
|
||
# the various mnemonics associated with those opcodes. There are also opcodes with
|
||
# distinct values that map to the same mnemonic (e.g., 0x14 and 0x15 are "ADC").
|
||
# Those are left to Capstone to figure out. We just represent the single mnemonic
|
||
# as defined in the SDM.
|
||
#
|
||
# AT&T aliases (e.g., call vs callq) are not included.
|
||
#
|
||
# Aliases that come from the LLVM tablegen files are marked as such. Otherwise,
|
||
# they come from the Volume 2 Instruction Set Referece in the Intel 64 and IA-32
|
||
# Architectures Software Developer’s Manual (SDM) June 2021 edition with a heading like
|
||
# X/Y (e.g., CBW/CWDE/CDQE).
|
||
#
|
||
# All conditional operations are included.
|
||
# Aliases for the FCMOVcc or LOOPcc mnemonics do not exist. We also ignore jcxz b/c as it's
|
||
# a 16-bit instruction.
|
||
|
||
self.aliases = {
|
||
"bndcu" : { "seen" : False, "values" : ["bndcn"] },
|
||
"bndcn" : { "seen" : False, "values" : ["bndcu"] },
|
||
|
||
"cbw" : { "seen" : False, "values" : ["cdqe",] },
|
||
"cdqe" : { "seen" : False, "values" : ["cbw",] },
|
||
|
||
"cdq" : { "seen" : False, "values" : ["cwd", "cqo",] },
|
||
"cqo" : { "seen" : False, "values" : ["cwd", "cdq",] },
|
||
"cwd" : { "seen" : False, "values" : ["cdq", "cqo",] },
|
||
|
||
"cmovb" : { "seen" : False, "values" : ["cmovc", "cmovnae",] },
|
||
"cmovc" : { "seen" : False, "values" : ["cmovb", "cmovnae",] },
|
||
"cmovnae" : { "seen" : False, "values" : ["cmovb", "cmovc",] },
|
||
"cmovae" : { "seen" : False, "values" : ["cmovnb", "cmovnc",] },
|
||
"cmovnb" : { "seen" : False, "values" : ["cmovae", "cmovnc",] },
|
||
"cmovnc" : { "seen" : False, "values" : ["cmovae", "cmovnb",] },
|
||
"cmove" : { "seen" : False, "values" : ["cmovz",] },
|
||
"cmovz" : { "seen" : False, "values" : ["cmove",] },
|
||
"cmovne" : { "seen" : False, "values" : ["cmovnz",] },
|
||
"cmovnz" : { "seen" : False, "values" : ["cmovne",] },
|
||
"cmovbe" : { "seen" : False, "values" : ["cmovna",] },
|
||
"cmovna" : { "seen" : False, "values" : ["cmovbe",] },
|
||
"cmova" : { "seen" : False, "values" : ["cmovnbe",] },
|
||
"cmovnbe" : { "seen" : False, "values" : ["cmova",] },
|
||
"cmovp" : { "seen" : False, "values" : ["cmovpe",] },
|
||
"cmovpe" : { "seen" : False, "values" : ["cmovp",] },
|
||
"cmovnp" : { "seen" : False, "values" : ["cmovpo",] },
|
||
"cmovpo" : { "seen" : False, "values" : ["cmovnp",] },
|
||
"cmovl" : { "seen" : False, "values" : ["cmovnge",] },
|
||
"cmovnge" : { "seen" : False, "values" : ["cmovl",] },
|
||
"cmovge" : { "seen" : False, "values" : ["cmovnl",] },
|
||
"cmovnl" : { "seen" : False, "values" : ["cmovge",] },
|
||
"cmovle" : { "seen" : False, "values" : ["cmovng",] },
|
||
"cmovng" : { "seen" : False, "values" : ["cmovle",] },
|
||
"cmovg" : { "seen" : False, "values" : ["cmovnle",] },
|
||
"cmovnle" : { "seen" : False, "values" : ["cmovg",] },
|
||
"fcompi" : { "seen" : False, "values" : ["fcomip",] }, # From LLVM, but present in bddisasm, binutils, and xed
|
||
"fcomip" : { "seen" : False, "values" : ["fcompi",] },
|
||
"fucomip" : { "seen" : False, "values" : ["fucompi",] },
|
||
"fucompi" : { "seen" : False, "values" : ["fucomip",] }, # From LLVM
|
||
"iret" : { "seen" : False, "values" : ["iretd", "iretq",] },
|
||
"iretd" : { "seen" : False, "values" : ["iret", "iretq",] },
|
||
"iretq" : { "seen" : False, "values" : ["iret", "iretd",] },
|
||
"jb" : { "seen" : False, "values" : ["jc", "jnae",] },
|
||
"jc" : { "seen" : False, "values" : ["jb", "jnae",] },
|
||
"jnae" : { "seen" : False, "values" : ["jb", "jc",] },
|
||
"jae" : { "seen" : False, "values" : ["jnb", "jnc",] },
|
||
"jnb" : { "seen" : False, "values" : ["jae", "jnc",] },
|
||
"jnc" : { "seen" : False, "values" : ["jae", "jnb",] },
|
||
"je" : { "seen" : False, "values" : ["jz",] },
|
||
"jz" : { "seen" : False, "values" : ["je",] },
|
||
"jne" : { "seen" : False, "values" : ["jnz",] },
|
||
"jnz" : { "seen" : False, "values" : ["jne",] },
|
||
"jbe" : { "seen" : False, "values" : ["jna",] },
|
||
"jna" : { "seen" : False, "values" : ["jbe",] },
|
||
"ja" : { "seen" : False, "values" : ["jnbe",] },
|
||
"jnbe" : { "seen" : False, "values" : ["ja",] },
|
||
"js" : { "seen" : False, "values" : [] },
|
||
"jns" : { "seen" : False, "values" : [] },
|
||
"jp" : { "seen" : False, "values" : ["jpe",] },
|
||
"jpe" : { "seen" : False, "values" : ["jp",] },
|
||
"jnp" : { "seen" : False, "values" : ["jpo",] },
|
||
"jpo" : { "seen" : False, "values" : ["jnp",] },
|
||
"jl" : { "seen" : False, "values" : ["jnge",] },
|
||
"jnge" : { "seen" : False, "values" : ["jl",] },
|
||
"jge" : { "seen" : False, "values" : ["jnl",] },
|
||
"jnl" : { "seen" : False, "values" : ["jge",] },
|
||
"jle" : { "seen" : False, "values" : ["jng",] },
|
||
"jng" : { "seen" : False, "values" : ["jle",] },
|
||
"jg" : { "seen" : False, "values" : ["jnle",] },
|
||
"jnle" : { "seen" : False, "values" : ["jg",] },
|
||
"jcxz" : { "seen" : False, "values" : ["jecxz", "jrcxz",] },
|
||
"jecxz" : { "seen" : False, "values" : ["jcxz", "jrcxz",] },
|
||
"jrcxz" : { "seen" : False, "values" : ["jcxz", "jecxz",] },
|
||
"lods" : { "seen" : False, "values" : ["lodsb",] }, # LLVM, bddisasm, binutils, and xed all agree
|
||
"lodsb" : { "seen" : False, "values" : ["lods",] },
|
||
"loope" : { "seen" : False, "values" : ["loopz",] }, # LLVM
|
||
"loopz" : { "seen" : False, "values" : ["loope",] },
|
||
"loopne" : { "seen" : False, "values" : ["loopnz",] },
|
||
"loopnz" : { "seen" : False, "values" : ["loopne",] }, # Not a valid mnemonic for 0xE0, but used in LLVM, bddisasm, and binutils
|
||
"monitor" : { "seen" : False, "values" : ["monitorx"] },
|
||
"monitorx" : { "seen" : False, "values" : ["monitor"] },
|
||
"mwait" : { "seen" : False, "values" : ["mwaitx"] },
|
||
"mwaitx" : { "seen" : False, "values" : ["mwait"] },
|
||
# Capstone uses popal, but everyone else uses popa. popal isn't in the SDM.
|
||
"popa" : { "seen" : False, "values" : ["popal",] },
|
||
"popal" : { "seen" : False, "values" : ["popa",] },
|
||
# Capstone uses popaw, but everyone else uses popad. popaw isn't in the SDM.
|
||
"popad" : { "seen" : False, "values" : ["popaw",] },
|
||
"popaw" : { "seen" : False, "values" : ["popad",] },
|
||
# Capstone treats POP{F,D,Q} as separate mnemonics, even though they share an opcode (0x9D)
|
||
# Capstone uses non-standard pusha{l,w}.
|
||
"pusha" : { "seen" : False, "values" : ["pushad", "pushal", "pushaw",] },
|
||
"pushad" : { "seen" : False, "values" : ["pusha", "pushal", "pushaw",] },
|
||
"pushal" : { "seen" : False, "values" : ["pusha", "pushad", "pushaw",] },
|
||
"pushaw" : { "seen" : False, "values" : ["pusha", "pushad", "pushal",] },
|
||
"pushf" : { "seen" : False, "values" : ["pushfd", "pushfq",] },
|
||
"pushfd" : { "seen" : False, "values" : ["pushf", "pushfq",] },
|
||
"pushfq" : { "seen" : False, "values" : ["pushf", "pushfd",] },
|
||
"retfq" : { "seen" : False, "values" : ["retf",] },
|
||
"retf" : { "seen" : False, "values" : ["retfq",] },
|
||
"setb" : { "seen" : False, "values" : ["setc", "setnae",] },
|
||
"setc" : { "seen" : False, "values" : ["setb", "setnae",] },
|
||
"setnae" : { "seen" : False, "values" : ["setb", "setc",] },
|
||
"setae" : { "seen" : False, "values" : ["setnb", "setnc",] },
|
||
"setnb" : { "seen" : False, "values" : ["setae", "setnc",] },
|
||
"setnc" : { "seen" : False, "values" : ["setae", "setnb",] },
|
||
"sete" : { "seen" : False, "values" : ["setz",] },
|
||
"setz" : { "seen" : False, "values" : ["sete",] },
|
||
"setne" : { "seen" : False, "values" : ["setnz",] },
|
||
"setnz" : { "seen" : False, "values" : ["setne",] },
|
||
"setbe" : { "seen" : False, "values" : ["setna",] },
|
||
"setna" : { "seen" : False, "values" : ["setbe",] },
|
||
"seta" : { "seen" : False, "values" : ["setnbe",] },
|
||
"setnbe" : { "seen" : False, "values" : ["seta",] },
|
||
"setp" : { "seen" : False, "values" : ["setpe",] },
|
||
"setpe" : { "seen" : False, "values" : ["setp",] },
|
||
"setnp" : { "seen" : False, "values" : ["setpo",] },
|
||
"setpo" : { "seen" : False, "values" : ["setnp",] },
|
||
"setl" : { "seen" : False, "values" : ["setnge",] },
|
||
"setnge" : { "seen" : False, "values" : ["setl",] },
|
||
"setge" : { "seen" : False, "values" : ["setnl",] },
|
||
"setnl" : { "seen" : False, "values" : ["setge",] },
|
||
"setle" : { "seen" : False, "values" : ["setng",] },
|
||
"setng" : { "seen" : False, "values" : ["setle",] },
|
||
"setg" : { "seen" : False, "values" : ["setnle",] },
|
||
"setnle" : { "seen" : False, "values" : ["setg",] },
|
||
"wait" : { "seen" : False, "values" : ["fwait",] },
|
||
"fwait" : { "seen" : False, "values" : ["wait",] },
|
||
"xlat" : { "seen" : False, "values" : ["xlatb",] },
|
||
"xlatb" : { "seen" : False, "values" : ["xlat",] }
|
||
}
|