smallworld-re 1.0.2__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. smallworld/analyses/__init__.py +8 -0
  2. smallworld/analyses/analysis.py +8 -67
  3. smallworld/analyses/code_coverage.py +1 -2
  4. smallworld/analyses/colorizer.py +301 -534
  5. smallworld/analyses/colorizer_def_use.py +217 -0
  6. smallworld/analyses/colorizer_summary.py +173 -83
  7. smallworld/analyses/field_detection/field_analysis.py +7 -8
  8. smallworld/analyses/field_detection/hints.py +1 -1
  9. smallworld/analyses/field_detection/malloc.py +2 -2
  10. smallworld/analyses/trace_execution.py +160 -0
  11. smallworld/analyses/trace_execution_types.py +42 -0
  12. smallworld/analyses/unstable/angr/divergence.py +1 -2
  13. smallworld/analyses/unstable/angr/model.py +5 -6
  14. smallworld/analyses/unstable/angr_nwbt.py +3 -4
  15. smallworld/analyses/unstable/code_coverage.py +2 -3
  16. smallworld/analyses/unstable/code_reachable.py +2 -3
  17. smallworld/analyses/unstable/control_flow_tracer.py +2 -3
  18. smallworld/analyses/unstable/pointer_finder.py +2 -3
  19. smallworld/analyses/unstable/utils/tui.py +71 -0
  20. smallworld/emulators/__init__.py +3 -1
  21. smallworld/emulators/angr/angr.py +30 -9
  22. smallworld/emulators/angr/machdefs/__init__.py +2 -0
  23. smallworld/emulators/angr/machdefs/aarch64.py +1 -1
  24. smallworld/emulators/angr/machdefs/amd64.py +0 -4
  25. smallworld/emulators/angr/machdefs/arm.py +0 -2
  26. smallworld/emulators/angr/machdefs/i386.py +0 -2
  27. smallworld/emulators/angr/machdefs/loongarch.py +340 -0
  28. smallworld/emulators/angr/machdefs/machdef.py +1 -8
  29. smallworld/emulators/angr/machdefs/mips.py +0 -2
  30. smallworld/emulators/angr/machdefs/mips64.py +0 -2
  31. smallworld/emulators/angr/machdefs/ppc.py +1 -2
  32. smallworld/emulators/angr/machdefs/riscv.py +8 -10
  33. smallworld/emulators/angr/machdefs/xtensa.py +7 -4
  34. smallworld/emulators/emulator.py +22 -0
  35. smallworld/emulators/ghidra/__init__.py +37 -0
  36. smallworld/emulators/ghidra/ghidra.py +513 -0
  37. smallworld/emulators/ghidra/machdefs/__init__.py +31 -0
  38. smallworld/emulators/ghidra/machdefs/aarch64.py +289 -0
  39. smallworld/emulators/ghidra/machdefs/amd64.py +185 -0
  40. smallworld/emulators/ghidra/machdefs/arm.py +370 -0
  41. smallworld/emulators/ghidra/machdefs/i386.py +109 -0
  42. smallworld/emulators/ghidra/machdefs/loongarch.py +162 -0
  43. smallworld/emulators/ghidra/machdefs/machdef.py +81 -0
  44. smallworld/emulators/ghidra/machdefs/mips.py +163 -0
  45. smallworld/emulators/ghidra/machdefs/mips64.py +186 -0
  46. smallworld/emulators/ghidra/machdefs/ppc.py +98 -0
  47. smallworld/emulators/ghidra/machdefs/riscv.py +208 -0
  48. smallworld/emulators/ghidra/machdefs/xtensa.py +21 -0
  49. smallworld/emulators/ghidra/typing.py +28 -0
  50. smallworld/emulators/hookable.py +18 -4
  51. smallworld/emulators/panda/machdefs/__init__.py +2 -2
  52. smallworld/emulators/panda/machdefs/aarch64.py +186 -11
  53. smallworld/emulators/panda/machdefs/amd64.py +103 -11
  54. smallworld/emulators/panda/machdefs/arm.py +216 -20
  55. smallworld/emulators/panda/machdefs/i386.py +30 -7
  56. smallworld/emulators/panda/machdefs/machdef.py +9 -16
  57. smallworld/emulators/panda/machdefs/mips.py +49 -5
  58. smallworld/emulators/panda/machdefs/mips64.py +57 -5
  59. smallworld/emulators/panda/machdefs/ppc.py +38 -13
  60. smallworld/emulators/panda/panda.py +146 -44
  61. smallworld/emulators/unicorn/__init__.py +2 -0
  62. smallworld/emulators/unicorn/machdefs/aarch64.py +253 -264
  63. smallworld/emulators/unicorn/machdefs/amd64.py +254 -259
  64. smallworld/emulators/unicorn/machdefs/arm.py +200 -212
  65. smallworld/emulators/unicorn/machdefs/i386.py +84 -90
  66. smallworld/emulators/unicorn/machdefs/machdef.py +2 -23
  67. smallworld/emulators/unicorn/machdefs/mips.py +127 -135
  68. smallworld/emulators/unicorn/unicorn.py +52 -13
  69. smallworld/helpers.py +4 -19
  70. smallworld/hinting/hinting.py +22 -192
  71. smallworld/hinting/hints.py +50 -18
  72. smallworld/instructions/bsid.py +8 -8
  73. smallworld/logging.py +4 -2
  74. smallworld/platforms/__init__.py +12 -0
  75. smallworld/platforms/defs/__init__.py +36 -0
  76. smallworld/platforms/defs/aarch64.py +450 -0
  77. smallworld/platforms/defs/amd64.py +463 -0
  78. smallworld/platforms/defs/arm.py +519 -0
  79. smallworld/platforms/defs/i386.py +258 -0
  80. smallworld/platforms/defs/loongarch.py +270 -0
  81. smallworld/platforms/defs/mips.py +321 -0
  82. smallworld/platforms/defs/mips64.py +313 -0
  83. smallworld/platforms/defs/platformdef.py +97 -0
  84. smallworld/platforms/defs/powerpc.py +259 -0
  85. smallworld/platforms/defs/riscv.py +257 -0
  86. smallworld/platforms/defs/xtensa.py +96 -0
  87. smallworld/{platforms.py → platforms/platforms.py} +3 -0
  88. smallworld/state/cpus/__init__.py +2 -0
  89. smallworld/state/cpus/aarch64.py +0 -9
  90. smallworld/state/cpus/amd64.py +6 -28
  91. smallworld/state/cpus/arm.py +0 -11
  92. smallworld/state/cpus/cpu.py +0 -11
  93. smallworld/state/cpus/i386.py +0 -7
  94. smallworld/state/cpus/loongarch.py +299 -0
  95. smallworld/state/cpus/mips.py +4 -47
  96. smallworld/state/cpus/mips64.py +18 -58
  97. smallworld/state/cpus/powerpc.py +2 -9
  98. smallworld/state/cpus/riscv.py +1 -11
  99. smallworld/state/cpus/xtensa.py +0 -5
  100. smallworld/state/memory/code.py +44 -2
  101. smallworld/state/memory/elf/__init__.py +5 -1
  102. smallworld/state/memory/elf/coredump/__init__.py +3 -0
  103. smallworld/state/memory/elf/coredump/coredump.py +46 -0
  104. smallworld/state/memory/elf/coredump/prstatus/__init__.py +27 -0
  105. smallworld/state/memory/elf/coredump/prstatus/aarch64.py +46 -0
  106. smallworld/state/memory/elf/coredump/prstatus/amd64.py +40 -0
  107. smallworld/state/memory/elf/coredump/prstatus/arm.py +53 -0
  108. smallworld/state/memory/elf/coredump/prstatus/i386.py +30 -0
  109. smallworld/state/memory/elf/coredump/prstatus/mips.py +55 -0
  110. smallworld/state/memory/elf/coredump/prstatus/mips64.py +57 -0
  111. smallworld/state/memory/elf/coredump/prstatus/ppc.py +82 -0
  112. smallworld/state/memory/elf/coredump/prstatus/prstatus.py +129 -0
  113. smallworld/state/memory/elf/elf.py +225 -61
  114. smallworld/state/memory/elf/register_state.py +36 -0
  115. smallworld/state/memory/elf/rela/__init__.py +2 -0
  116. smallworld/state/memory/elf/rela/aarch64.py +3 -1
  117. smallworld/state/memory/elf/rela/amd64.py +4 -2
  118. smallworld/state/memory/elf/rela/arm.py +4 -2
  119. smallworld/state/memory/elf/rela/i386.py +4 -2
  120. smallworld/state/memory/elf/rela/loongarch.py +32 -0
  121. smallworld/state/memory/elf/rela/mips.py +39 -18
  122. smallworld/state/memory/elf/rela/ppc.py +31 -14
  123. smallworld/state/memory/elf/structs.py +3 -0
  124. smallworld/state/memory/heap.py +2 -2
  125. smallworld/state/memory/memory.py +18 -0
  126. smallworld/state/memory/pe/__init__.py +3 -0
  127. smallworld/state/memory/pe/pe.py +361 -0
  128. smallworld/state/memory/pe/structs.py +60 -0
  129. smallworld/state/memory/stack/__init__.py +2 -0
  130. smallworld/state/memory/stack/loongarch.py +26 -0
  131. smallworld/state/models/__init__.py +29 -2
  132. smallworld/state/models/aarch64/__init__.py +1 -0
  133. smallworld/state/models/aarch64/systemv/__init__.py +6 -0
  134. smallworld/state/models/aarch64/systemv/c99/__init__.py +12 -0
  135. smallworld/state/models/aarch64/systemv/c99/signal.py +16 -0
  136. smallworld/state/models/aarch64/systemv/c99/stdio.py +265 -0
  137. smallworld/state/models/aarch64/systemv/c99/stdlib.py +169 -0
  138. smallworld/state/models/aarch64/systemv/c99/string.py +139 -0
  139. smallworld/state/models/aarch64/systemv/c99/time.py +61 -0
  140. smallworld/state/models/aarch64/systemv/posix/__init__.py +6 -0
  141. smallworld/state/models/aarch64/systemv/posix/libgen.py +16 -0
  142. smallworld/state/models/aarch64/systemv/posix/signal.py +157 -0
  143. smallworld/state/models/aarch64/systemv/systemv.py +80 -0
  144. smallworld/state/models/amd64/__init__.py +1 -0
  145. smallworld/state/models/amd64/systemv/__init__.py +6 -0
  146. smallworld/state/models/amd64/systemv/c99/__init__.py +12 -0
  147. smallworld/state/models/amd64/systemv/c99/signal.py +16 -0
  148. smallworld/state/models/amd64/systemv/c99/stdio.py +265 -0
  149. smallworld/state/models/amd64/systemv/c99/stdlib.py +169 -0
  150. smallworld/state/models/amd64/systemv/c99/string.py +139 -0
  151. smallworld/state/models/amd64/systemv/c99/time.py +61 -0
  152. smallworld/state/models/amd64/systemv/posix/__init__.py +6 -0
  153. smallworld/state/models/amd64/systemv/posix/libgen.py +16 -0
  154. smallworld/state/models/amd64/systemv/posix/signal.py +157 -0
  155. smallworld/state/models/amd64/systemv/systemv.py +78 -0
  156. smallworld/state/models/armel/__init__.py +1 -0
  157. smallworld/state/models/armel/systemv/__init__.py +6 -0
  158. smallworld/state/models/armel/systemv/c99/__init__.py +12 -0
  159. smallworld/state/models/armel/systemv/c99/signal.py +16 -0
  160. smallworld/state/models/armel/systemv/c99/stdio.py +265 -0
  161. smallworld/state/models/armel/systemv/c99/stdlib.py +169 -0
  162. smallworld/state/models/armel/systemv/c99/string.py +139 -0
  163. smallworld/state/models/armel/systemv/c99/time.py +61 -0
  164. smallworld/state/models/armel/systemv/posix/__init__.py +6 -0
  165. smallworld/state/models/armel/systemv/posix/libgen.py +16 -0
  166. smallworld/state/models/armel/systemv/posix/signal.py +157 -0
  167. smallworld/state/models/armel/systemv/systemv.py +82 -0
  168. smallworld/state/models/armhf/__init__.py +1 -0
  169. smallworld/state/models/armhf/systemv/__init__.py +6 -0
  170. smallworld/state/models/armhf/systemv/c99/__init__.py +12 -0
  171. smallworld/state/models/armhf/systemv/c99/signal.py +16 -0
  172. smallworld/state/models/armhf/systemv/c99/stdio.py +265 -0
  173. smallworld/state/models/armhf/systemv/c99/stdlib.py +169 -0
  174. smallworld/state/models/armhf/systemv/c99/string.py +139 -0
  175. smallworld/state/models/armhf/systemv/c99/time.py +61 -0
  176. smallworld/state/models/armhf/systemv/posix/__init__.py +6 -0
  177. smallworld/state/models/armhf/systemv/posix/libgen.py +16 -0
  178. smallworld/state/models/armhf/systemv/posix/signal.py +157 -0
  179. smallworld/state/models/armhf/systemv/systemv.py +77 -0
  180. smallworld/state/models/c99/__init__.py +12 -0
  181. smallworld/state/models/c99/fmt_print.py +915 -0
  182. smallworld/state/models/c99/fmt_scan.py +864 -0
  183. smallworld/state/models/c99/math.py +362 -0
  184. smallworld/state/models/c99/signal.py +71 -0
  185. smallworld/state/models/c99/stdio.py +1305 -0
  186. smallworld/state/models/c99/stdlib.py +595 -0
  187. smallworld/state/models/c99/string.py +674 -0
  188. smallworld/state/models/c99/time.py +340 -0
  189. smallworld/state/models/c99/utils.py +89 -0
  190. smallworld/state/models/cstd.py +759 -0
  191. smallworld/state/models/errno.py +581 -0
  192. smallworld/state/models/filedesc.py +515 -0
  193. smallworld/state/models/i386/__init__.py +1 -0
  194. smallworld/state/models/i386/systemv/__init__.py +6 -0
  195. smallworld/state/models/i386/systemv/c99/__init__.py +12 -0
  196. smallworld/state/models/i386/systemv/c99/signal.py +16 -0
  197. smallworld/state/models/i386/systemv/c99/stdio.py +265 -0
  198. smallworld/state/models/i386/systemv/c99/stdlib.py +169 -0
  199. smallworld/state/models/i386/systemv/c99/string.py +139 -0
  200. smallworld/state/models/i386/systemv/c99/time.py +61 -0
  201. smallworld/state/models/i386/systemv/posix/__init__.py +6 -0
  202. smallworld/state/models/i386/systemv/posix/libgen.py +16 -0
  203. smallworld/state/models/i386/systemv/posix/signal.py +157 -0
  204. smallworld/state/models/i386/systemv/systemv.py +71 -0
  205. smallworld/state/models/loongarch64/__init__.py +1 -0
  206. smallworld/state/models/loongarch64/systemv/__init__.py +6 -0
  207. smallworld/state/models/loongarch64/systemv/c99/__init__.py +12 -0
  208. smallworld/state/models/loongarch64/systemv/c99/signal.py +16 -0
  209. smallworld/state/models/loongarch64/systemv/c99/stdio.py +265 -0
  210. smallworld/state/models/loongarch64/systemv/c99/stdlib.py +169 -0
  211. smallworld/state/models/loongarch64/systemv/c99/string.py +139 -0
  212. smallworld/state/models/loongarch64/systemv/c99/time.py +61 -0
  213. smallworld/state/models/loongarch64/systemv/posix/__init__.py +6 -0
  214. smallworld/state/models/loongarch64/systemv/posix/libgen.py +16 -0
  215. smallworld/state/models/loongarch64/systemv/posix/signal.py +157 -0
  216. smallworld/state/models/loongarch64/systemv/systemv.py +83 -0
  217. smallworld/state/models/mips/__init__.py +1 -0
  218. smallworld/state/models/mips/systemv/__init__.py +6 -0
  219. smallworld/state/models/mips/systemv/c99/__init__.py +12 -0
  220. smallworld/state/models/mips/systemv/c99/signal.py +16 -0
  221. smallworld/state/models/mips/systemv/c99/stdio.py +265 -0
  222. smallworld/state/models/mips/systemv/c99/stdlib.py +169 -0
  223. smallworld/state/models/mips/systemv/c99/string.py +139 -0
  224. smallworld/state/models/mips/systemv/c99/time.py +61 -0
  225. smallworld/state/models/mips/systemv/posix/__init__.py +6 -0
  226. smallworld/state/models/mips/systemv/posix/libgen.py +16 -0
  227. smallworld/state/models/mips/systemv/posix/signal.py +157 -0
  228. smallworld/state/models/mips/systemv/systemv.py +78 -0
  229. smallworld/state/models/mips64/__init__.py +1 -0
  230. smallworld/state/models/mips64/systemv/__init__.py +6 -0
  231. smallworld/state/models/mips64/systemv/c99/__init__.py +12 -0
  232. smallworld/state/models/mips64/systemv/c99/signal.py +16 -0
  233. smallworld/state/models/mips64/systemv/c99/stdio.py +265 -0
  234. smallworld/state/models/mips64/systemv/c99/stdlib.py +169 -0
  235. smallworld/state/models/mips64/systemv/c99/string.py +139 -0
  236. smallworld/state/models/mips64/systemv/c99/time.py +61 -0
  237. smallworld/state/models/mips64/systemv/posix/__init__.py +6 -0
  238. smallworld/state/models/mips64/systemv/posix/libgen.py +16 -0
  239. smallworld/state/models/mips64/systemv/posix/signal.py +157 -0
  240. smallworld/state/models/mips64/systemv/systemv.py +98 -0
  241. smallworld/state/models/mips64el/__init__.py +1 -0
  242. smallworld/state/models/mips64el/systemv/__init__.py +6 -0
  243. smallworld/state/models/mips64el/systemv/c99/__init__.py +12 -0
  244. smallworld/state/models/mips64el/systemv/c99/signal.py +16 -0
  245. smallworld/state/models/mips64el/systemv/c99/stdio.py +265 -0
  246. smallworld/state/models/mips64el/systemv/c99/stdlib.py +169 -0
  247. smallworld/state/models/mips64el/systemv/c99/string.py +139 -0
  248. smallworld/state/models/mips64el/systemv/c99/time.py +61 -0
  249. smallworld/state/models/mips64el/systemv/posix/__init__.py +6 -0
  250. smallworld/state/models/mips64el/systemv/posix/libgen.py +16 -0
  251. smallworld/state/models/mips64el/systemv/posix/signal.py +157 -0
  252. smallworld/state/models/mips64el/systemv/systemv.py +96 -0
  253. smallworld/state/models/mipsel/__init__.py +1 -0
  254. smallworld/state/models/mipsel/systemv/__init__.py +6 -0
  255. smallworld/state/models/mipsel/systemv/c99/__init__.py +12 -0
  256. smallworld/state/models/mipsel/systemv/c99/signal.py +16 -0
  257. smallworld/state/models/mipsel/systemv/c99/stdio.py +265 -0
  258. smallworld/state/models/mipsel/systemv/c99/stdlib.py +169 -0
  259. smallworld/state/models/mipsel/systemv/c99/string.py +139 -0
  260. smallworld/state/models/mipsel/systemv/c99/time.py +61 -0
  261. smallworld/state/models/mipsel/systemv/posix/__init__.py +6 -0
  262. smallworld/state/models/mipsel/systemv/posix/libgen.py +16 -0
  263. smallworld/state/models/mipsel/systemv/posix/signal.py +157 -0
  264. smallworld/state/models/mipsel/systemv/systemv.py +78 -0
  265. smallworld/state/models/model.py +27 -2
  266. smallworld/state/models/posix/__init__.py +6 -0
  267. smallworld/state/models/posix/libgen.py +123 -0
  268. smallworld/state/models/posix/signal.py +690 -0
  269. smallworld/state/models/powerpc/__init__.py +1 -0
  270. smallworld/state/models/powerpc/systemv/__init__.py +6 -0
  271. smallworld/state/models/powerpc/systemv/c99/__init__.py +12 -0
  272. smallworld/state/models/powerpc/systemv/c99/signal.py +16 -0
  273. smallworld/state/models/powerpc/systemv/c99/stdio.py +265 -0
  274. smallworld/state/models/powerpc/systemv/c99/stdlib.py +169 -0
  275. smallworld/state/models/powerpc/systemv/c99/string.py +139 -0
  276. smallworld/state/models/powerpc/systemv/c99/time.py +61 -0
  277. smallworld/state/models/powerpc/systemv/posix/__init__.py +6 -0
  278. smallworld/state/models/powerpc/systemv/posix/libgen.py +16 -0
  279. smallworld/state/models/powerpc/systemv/posix/signal.py +157 -0
  280. smallworld/state/models/powerpc/systemv/systemv.py +93 -0
  281. smallworld/state/models/riscv64/__init__.py +1 -0
  282. smallworld/state/models/riscv64/systemv/__init__.py +6 -0
  283. smallworld/state/models/riscv64/systemv/c99/__init__.py +12 -0
  284. smallworld/state/models/riscv64/systemv/c99/signal.py +16 -0
  285. smallworld/state/models/riscv64/systemv/c99/stdio.py +265 -0
  286. smallworld/state/models/riscv64/systemv/c99/stdlib.py +169 -0
  287. smallworld/state/models/riscv64/systemv/c99/string.py +139 -0
  288. smallworld/state/models/riscv64/systemv/c99/time.py +61 -0
  289. smallworld/state/models/riscv64/systemv/posix/__init__.py +6 -0
  290. smallworld/state/models/riscv64/systemv/posix/libgen.py +16 -0
  291. smallworld/state/models/riscv64/systemv/posix/signal.py +157 -0
  292. smallworld/state/models/riscv64/systemv/systemv.py +85 -0
  293. smallworld/state/state.py +65 -24
  294. smallworld/state/unstable/elf.py +16 -31
  295. smallworld/utils.py +6 -1
  296. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/METADATA +76 -43
  297. smallworld_re-2.0.0.dist-info/RECORD +374 -0
  298. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/WHEEL +1 -1
  299. smallworld/state/models/x86/__init__.py +0 -2
  300. smallworld/state/models/x86/microsoftcdecl.py +0 -35
  301. smallworld/state/models/x86/systemv.py +0 -240
  302. smallworld_re-1.0.2.dist-info/RECORD +0 -166
  303. /smallworld/state/models/{posix.py → _posix.py} +0 -0
  304. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/entry_points.txt +0 -0
  305. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  306. {smallworld_re-1.0.2.dist-info → smallworld_re-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,463 @@
1
+ import capstone
2
+
3
+ from ..platforms import Architecture, Byteorder
4
+ from .platformdef import PlatformDef, RegisterAliasDef, RegisterDef
5
+
6
+
7
+ class AMD64BasePlatformDef(PlatformDef):
8
+ # Abstract platform def for AMD64
9
+ #
10
+ # AVX512 changes how the xmm and ymm registers are aliased.
11
+ # The new bases are incompatible, so we need two separate classes.
12
+ byteorder = Byteorder.LITTLE
13
+
14
+ address_size = 8
15
+
16
+ capstone_arch = capstone.CS_ARCH_X86
17
+ capstone_mode = capstone.CS_MODE_64
18
+
19
+ conditional_branch_mnemonics = {
20
+ # All 57 varieties of Jcc opcode
21
+ "jo",
22
+ "jno",
23
+ "jb",
24
+ "jnae",
25
+ "jc",
26
+ "jnb",
27
+ "jae",
28
+ "jnc",
29
+ "jz",
30
+ "je",
31
+ "jnz",
32
+ "jne",
33
+ "jbe",
34
+ "jna",
35
+ "jnbe",
36
+ "ja",
37
+ "js",
38
+ "jns",
39
+ "jp",
40
+ "jpe",
41
+ "jnp",
42
+ "jpo",
43
+ "jl",
44
+ "jnge",
45
+ "jnl",
46
+ "jge",
47
+ "jle",
48
+ "jng",
49
+ "jnle",
50
+ "jg",
51
+ # Jump if (re)?cx is zero
52
+ # Oddly I can't find this in the opcode tables;
53
+ # it's mentioned tangentially in the docs for Jcc
54
+ # (and it's accepted by the assembler.)
55
+ "jrcxz",
56
+ "jecxz",
57
+ "jcxz",
58
+ }
59
+ # TODO: Should arithmetic operations that impact flags be compares?
60
+ compare_mnemonics = {
61
+ # Basic integer comparisons.
62
+ "cmp",
63
+ "test",
64
+ # SIMD float comparisons
65
+ # 'pd' and 'ps' variants work on packed double and packed single floats.
66
+ # TODO I'm not sure how this extends for AVX2 registers
67
+ # NOTE: There's another, less-descriptive way to decode these
68
+ # what does capstone use?
69
+ "cmpeqpd",
70
+ "cmpeqps",
71
+ "cmpltpd",
72
+ "cmpltps",
73
+ "cmplepd",
74
+ "cmpleps",
75
+ "cmpunordpd",
76
+ "cmpunordps",
77
+ "cmpneqpd",
78
+ "cmpneqps",
79
+ "cmpnltpd",
80
+ "cmpnltps",
81
+ "cmpnlepd",
82
+ "cmpnleps",
83
+ "cmpordpd",
84
+ "cmpordps",
85
+ # Compare string operands
86
+ "cmps",
87
+ "cmpsw",
88
+ "cmpsd",
89
+ "cmpsq",
90
+ # Single float comparisons
91
+ # 'sd' and 'ss' variants work on double and single-precision floats.
92
+ # TODO: I'm not sure how this extends for AVX2 registers
93
+ "cmpeqsd",
94
+ "cmpeqss",
95
+ "cmpltsd",
96
+ "cmpltss",
97
+ "cmplesd",
98
+ "cmpless",
99
+ "cmpunordsd",
100
+ "cmpunordss",
101
+ "cmpneqsd",
102
+ "cmpneqss",
103
+ "cmpnltsd",
104
+ "cmpnltss",
105
+ "cmpnlesd",
106
+ "cmpnless",
107
+ "cmpordsd",
108
+ "cmpordss",
109
+ # TODO: Do cmpxchg, cmpxchg8b, cmpxchg16b count?
110
+ # Generic float comparison
111
+ # Unlike previous lists, sets multiple flags depending.
112
+ "comisd",
113
+ "comiss",
114
+ # x87 float comparison
115
+ # Sets FPU condition flags
116
+ "fcom",
117
+ "fcomp",
118
+ "fcompp",
119
+ # x87 float comparison
120
+ # Sets eflags
121
+ "fcomi",
122
+ "fcomip",
123
+ "fcomipp",
124
+ # x87 integer comparison
125
+ "ficom",
126
+ "ficomp",
127
+ # x87 test (comparison against zero)
128
+ # Sets FPU condition flags
129
+ "ftst",
130
+ # x87 float comparison
131
+ # Sets FPU condition flags
132
+ # Behaves differently with NaNs
133
+ "fucom",
134
+ "fucomp",
135
+ "fucompp",
136
+ # x87 examine float
137
+ # Sets FPU flags according to which type of float this is (normal, zero, NaN, infty...)
138
+ "fxam",
139
+ # TODO: There may be more of these... waiting...
140
+ }
141
+
142
+ pc_register = "rip"
143
+ sp_register = "rsp"
144
+
145
+ # NOTE: rbp and rsp are not considered general.
146
+ # You _can_ use them as GPRs; it's very rarely a good idea.
147
+ general_purpose_registers = [
148
+ "rax",
149
+ "rbx",
150
+ "rcx",
151
+ "rdx",
152
+ "rdi",
153
+ "rsi",
154
+ "r8",
155
+ "r9",
156
+ "r10",
157
+ "r11",
158
+ "r12",
159
+ "r13",
160
+ "r14",
161
+ "r15",
162
+ ]
163
+ registers = {
164
+ # *** General Purpose Registers ***
165
+ "rax": RegisterDef(name="rax", size=8),
166
+ "eax": RegisterAliasDef(name="eax", parent="rax", size=4, offset=0),
167
+ "ax": RegisterAliasDef(name="ax", parent="rax", size=2, offset=0),
168
+ "al": RegisterAliasDef(name="al", parent="rax", size=1, offset=0),
169
+ "ah": RegisterAliasDef(name="ah", parent="rax", size=1, offset=1),
170
+ "rbx": RegisterDef(name="rbx", size=8),
171
+ "ebx": RegisterAliasDef(name="ebx", parent="rbx", size=4, offset=0),
172
+ "bx": RegisterAliasDef(name="bx", parent="rbx", size=2, offset=0),
173
+ "bl": RegisterAliasDef(name="bl", parent="rbx", size=1, offset=0),
174
+ "bh": RegisterAliasDef(name="bh", parent="rbx", size=1, offset=1),
175
+ "rcx": RegisterDef(name="rcx", size=8),
176
+ "ecx": RegisterAliasDef(name="ecx", parent="rcx", size=4, offset=0),
177
+ "cx": RegisterAliasDef(name="cx", parent="rcx", size=2, offset=0),
178
+ "cl": RegisterAliasDef(name="cl", parent="rcx", size=1, offset=0),
179
+ "ch": RegisterAliasDef(name="ch", parent="rcx", size=1, offset=1),
180
+ "rdx": RegisterDef(name="rdx", size=8),
181
+ "edx": RegisterAliasDef(name="edx", parent="rdx", size=4, offset=0),
182
+ "dx": RegisterAliasDef(name="dx", parent="rdx", size=2, offset=0),
183
+ "dl": RegisterAliasDef(name="dl", parent="rdx", size=1, offset=0),
184
+ "dh": RegisterAliasDef(name="dh", parent="rdx", size=1, offset=1),
185
+ "r8": RegisterDef(name="r8", size=8),
186
+ "r8d": RegisterAliasDef(name="r8d", parent="r8", size=4, offset=0),
187
+ "r8w": RegisterAliasDef(name="r8w", parent="r8", size=2, offset=0),
188
+ "r8b": RegisterAliasDef(name="r8b", parent="r8", size=1, offset=0),
189
+ "r9": RegisterDef(name="r9", size=8),
190
+ "r9d": RegisterAliasDef(name="r9d", parent="r9", size=4, offset=0),
191
+ "r9w": RegisterAliasDef(name="r9w", parent="r9", size=2, offset=0),
192
+ "r9b": RegisterAliasDef(name="r9b", parent="r9", size=1, offset=0),
193
+ "r10": RegisterDef(name="r10", size=8),
194
+ "r10d": RegisterAliasDef(name="r10d", parent="r10", size=4, offset=0),
195
+ "r10w": RegisterAliasDef(name="r10w", parent="r10", size=2, offset=0),
196
+ "r10b": RegisterAliasDef(name="r10b", parent="r10", size=1, offset=0),
197
+ "r11": RegisterDef(name="r11", size=8),
198
+ "r11d": RegisterAliasDef(name="r11d", parent="r11", size=4, offset=0),
199
+ "r11w": RegisterAliasDef(name="r11w", parent="r11", size=2, offset=0),
200
+ "r11b": RegisterAliasDef(name="r11b", parent="r11", size=1, offset=0),
201
+ "r12": RegisterDef(name="r12", size=8),
202
+ "r12d": RegisterAliasDef(name="r12d", parent="r12", size=4, offset=0),
203
+ "r12w": RegisterAliasDef(name="r12w", parent="r12", size=2, offset=0),
204
+ "r12b": RegisterAliasDef(name="r12b", parent="r12", size=1, offset=0),
205
+ "r13": RegisterDef(name="r13", size=8),
206
+ "r13d": RegisterAliasDef(name="r13d", parent="r13", size=4, offset=0),
207
+ "r13w": RegisterAliasDef(name="r13w", parent="r13", size=2, offset=0),
208
+ "r13b": RegisterAliasDef(name="r13b", parent="r13", size=1, offset=0),
209
+ "r14": RegisterDef(name="r14", size=8),
210
+ "r14d": RegisterAliasDef(name="r14d", parent="r14", size=4, offset=0),
211
+ "r14w": RegisterAliasDef(name="r14w", parent="r14", size=2, offset=0),
212
+ "r14b": RegisterAliasDef(name="r14b", parent="r14", size=1, offset=0),
213
+ "r15": RegisterDef(name="r15", size=8),
214
+ "r15d": RegisterAliasDef(name="r15d", parent="r15", size=4, offset=0),
215
+ "r15w": RegisterAliasDef(name="r15w", parent="r15", size=2, offset=0),
216
+ "r15b": RegisterAliasDef(name="r15b", parent="r15", size=1, offset=0),
217
+ "rdi": RegisterDef(name="rdi", size=8),
218
+ "edi": RegisterAliasDef(name="edi", parent="rdi", size=4, offset=0),
219
+ "di": RegisterAliasDef(name="di", parent="rdi", size=2, offset=0),
220
+ "dil": RegisterAliasDef(name="dil", parent="rdi", size=1, offset=0),
221
+ "rsi": RegisterDef(name="rsi", size=8),
222
+ "esi": RegisterAliasDef(name="esi", parent="rsi", size=4, offset=0),
223
+ "si": RegisterAliasDef(name="si", parent="rsi", size=2, offset=0),
224
+ "sil": RegisterAliasDef(name="sil", parent="rsi", size=1, offset=0),
225
+ "rsp": RegisterDef(name="rsp", size=8),
226
+ "esp": RegisterAliasDef(name="esp", parent="rsp", size=4, offset=0),
227
+ "sp": RegisterAliasDef(name="sp", parent="rsp", size=2, offset=0),
228
+ "spl": RegisterAliasDef(name="spl", parent="rsp", size=1, offset=0),
229
+ "rbp": RegisterDef(name="rbp", size=8),
230
+ "ebp": RegisterAliasDef(name="ebp", parent="rbp", size=4, offset=0),
231
+ "bp": RegisterAliasDef(name="bp", parent="rbp", size=2, offset=0),
232
+ "bpl": RegisterAliasDef(name="bpl", parent="rbp", size=1, offset=0),
233
+ # *** Instruction Pointer ***
234
+ "rip": RegisterDef(name="rip", size=8),
235
+ "eip": RegisterAliasDef(name="eip", parent="rip", size=4, offset=0),
236
+ "ip": RegisterAliasDef(name="ip", parent="rip", size=2, offset=0),
237
+ "pc": RegisterAliasDef(name="pc", parent="rip", size=8, offset=0),
238
+ # *** Flags register ***
239
+ "rflags": RegisterDef(name="rflags", size=8),
240
+ "eflags": RegisterAliasDef(name="eflags", parent="rflags", size=4, offset=0),
241
+ "flags": RegisterAliasDef(name="flags", parent="rflags", size=2, offset=0),
242
+ # *** Segment Registers ***
243
+ # NOTE: These are actually 16 bits
244
+ # However, their representation in different emulators gets weird.
245
+ "cs": RegisterDef(name="cs", size=8),
246
+ "ds": RegisterDef(name="ds", size=8),
247
+ "es": RegisterDef(name="es", size=8),
248
+ "fs": RegisterDef(name="fs", size=8),
249
+ "gs": RegisterDef(name="gs", size=8),
250
+ "ss": RegisterDef(name="ss", size=8),
251
+ # *** Control Registers ***
252
+ "cr0": RegisterDef(name="cr0", size=8),
253
+ "cr1": RegisterDef(name="cr1", size=8),
254
+ "cr2": RegisterDef(name="cr2", size=8),
255
+ "cr3": RegisterDef(name="cr3", size=8),
256
+ "cr4": RegisterDef(name="cr4", size=8),
257
+ "cr8": RegisterDef(name="cr8", size=8),
258
+ # *** Debug Registers ***
259
+ "dr0": RegisterDef(name="dr0", size=8),
260
+ "dr1": RegisterDef(name="dr1", size=8),
261
+ "dr2": RegisterDef(name="dr2", size=8),
262
+ "dr3": RegisterDef(name="dr3", size=8),
263
+ "dr6": RegisterDef(name="dr6", size=8),
264
+ "dr7": RegisterDef(name="dr7", size=8),
265
+ "dr8": RegisterDef(name="dr8", size=8),
266
+ "dr9": RegisterDef(name="dr9", size=8),
267
+ "dr10": RegisterDef(name="dr10", size=8),
268
+ "dr11": RegisterDef(name="dr11", size=8),
269
+ "dr12": RegisterDef(name="dr12", size=8),
270
+ "dr13": RegisterDef(name="dr13", size=8),
271
+ "dr14": RegisterDef(name="dr14", size=8),
272
+ "dr15": RegisterDef(name="dr15", size=8),
273
+ # *** Descriptor Table Registers ***
274
+ "gdtr": RegisterDef(name="gdtr", size=10),
275
+ "idtr": RegisterDef(name="idtr", size=10),
276
+ "ldtr": RegisterDef(name="ldtr", size=10),
277
+ # *** Task Register ***
278
+ "tr": RegisterDef(name="tr", size=2),
279
+ # *** x87 registers ***
280
+ # NOTE: These represent the physical registers.
281
+ # x87 references registers as a stack,
282
+ # which isn't possible to represent statically.
283
+ "fpr0": RegisterDef(name="fpr0", size=10),
284
+ "fpr1": RegisterDef(name="fpr1", size=10),
285
+ "fpr2": RegisterDef(name="fpr2", size=10),
286
+ "fpr3": RegisterDef(name="fpr3", size=10),
287
+ "fpr4": RegisterDef(name="fpr4", size=10),
288
+ "fpr5": RegisterDef(name="fpr5", size=10),
289
+ "fpr6": RegisterDef(name="fpr6", size=10),
290
+ "fpr7": RegisterDef(name="fpr7", size=10),
291
+ # x87 Control Register
292
+ "fctrl": RegisterDef(name="fctrl", size=2),
293
+ # x87 Status Register
294
+ "fstat": RegisterDef(name="fstat", size=2),
295
+ # x87 Tag Register
296
+ "ftag": RegisterDef(name="ftag", size=2),
297
+ # x87 Last Instruction Register
298
+ "fip": RegisterDef(name="fip", size=8),
299
+ # x87 Last Operand Pointer
300
+ "fdp": RegisterDef(name="fdp", size=8),
301
+ # x87 Last Opcode
302
+ "fop": RegisterDef(name="fop", size=2),
303
+ # NOTE: Docs disagree on the format of fip and fdp.
304
+ # One source describes them as 48-bit offset-plus-segment,
305
+ # the other describes them as 64-bit.
306
+ # There may also be separate segment registers.
307
+ # If you care about the x87 debug info, please feel free to update.
308
+ # *** MMX Registers ***
309
+ # NOTE: The MMX registers are aliases for the low 8 bytes of the x87 registers.
310
+ # The two subsystems cannot be used simultaneously.
311
+ "mm0": RegisterAliasDef(name="mm0", parent="fpr0", size=8, offset=0),
312
+ "mm1": RegisterAliasDef(name="mm1", parent="fpr1", size=8, offset=0),
313
+ "mm2": RegisterAliasDef(name="mm2", parent="fpr2", size=8, offset=0),
314
+ "mm3": RegisterAliasDef(name="mm3", parent="fpr3", size=8, offset=0),
315
+ "mm4": RegisterAliasDef(name="mm4", parent="fpr4", size=8, offset=0),
316
+ "mm5": RegisterAliasDef(name="mm5", parent="fpr5", size=8, offset=0),
317
+ "mm6": RegisterAliasDef(name="mm6", parent="fpr6", size=8, offset=0),
318
+ "mm7": RegisterAliasDef(name="mm7", parent="fpr7", size=8, offset=0),
319
+ }
320
+
321
+
322
+ class AMD64(AMD64BasePlatformDef):
323
+ architecture = Architecture.X86_64
324
+
325
+ registers = AMD64BasePlatformDef.registers | {
326
+ # *** SSE/AVX/AVX2 registers ***
327
+ "ymm0": RegisterDef(name="ymm0", size=32),
328
+ "xmm0": RegisterAliasDef(name="xmm0", parent="ymm0", size=16, offset=0),
329
+ "ymm1": RegisterDef(name="ymm1", size=32),
330
+ "xmm1": RegisterAliasDef(name="xmm1", parent="ymm1", size=16, offset=0),
331
+ "ymm2": RegisterDef(name="ymm2", size=32),
332
+ "xmm2": RegisterAliasDef(name="xmm2", parent="ymm2", size=16, offset=0),
333
+ "ymm3": RegisterDef(name="ymm3", size=32),
334
+ "xmm3": RegisterAliasDef(name="xmm3", parent="ymm3", size=16, offset=0),
335
+ "ymm4": RegisterDef(name="ymm4", size=32),
336
+ "xmm4": RegisterAliasDef(name="xmm4", parent="ymm4", size=16, offset=0),
337
+ "ymm5": RegisterDef(name="ymm5", size=32),
338
+ "xmm5": RegisterAliasDef(name="xmm5", parent="ymm5", size=16, offset=0),
339
+ "ymm6": RegisterDef(name="ymm6", size=32),
340
+ "xmm6": RegisterAliasDef(name="xmm6", parent="ymm6", size=16, offset=0),
341
+ "ymm7": RegisterDef(name="ymm7", size=32),
342
+ "xmm7": RegisterAliasDef(name="xmm7", parent="ymm7", size=16, offset=0),
343
+ "ymm8": RegisterDef(name="ymm8", size=32),
344
+ "xmm8": RegisterAliasDef(name="xmm8", parent="ymm8", size=16, offset=0),
345
+ "ymm9": RegisterDef(name="ymm9", size=32),
346
+ "xmm9": RegisterAliasDef(name="xmm9", parent="ymm9", size=16, offset=0),
347
+ "ymm10": RegisterDef(name="ymm10", size=32),
348
+ "xmm10": RegisterAliasDef(name="xmm10", parent="ymm10", size=16, offset=0),
349
+ "ymm11": RegisterDef(name="ymm11", size=32),
350
+ "xmm11": RegisterAliasDef(name="xmm11", parent="ymm11", size=16, offset=0),
351
+ "ymm12": RegisterDef(name="ymm12", size=32),
352
+ "xmm12": RegisterAliasDef(name="xmm12", parent="ymm12", size=16, offset=0),
353
+ "ymm13": RegisterDef(name="ymm13", size=32),
354
+ "xmm13": RegisterAliasDef(name="xmm13", parent="ymm13", size=16, offset=0),
355
+ "ymm14": RegisterDef(name="ymm14", size=32),
356
+ "xmm14": RegisterAliasDef(name="xmm14", parent="ymm14", size=16, offset=0),
357
+ "ymm15": RegisterDef(name="ymm15", size=32),
358
+ "xmm15": RegisterAliasDef(name="xmm15", parent="ymm15", size=16, offset=0),
359
+ }
360
+
361
+
362
+ class AMD64AVX512(AMD64BasePlatformDef):
363
+ architecture = Architecture.X86_64_AVX512
364
+
365
+ registers = AMD64BasePlatformDef.registers | {
366
+ # *** SSE/AVX/AVX2/AVX512 registers ***
367
+ "zmm0": RegisterDef(name="zmm0", size=64),
368
+ "ymm0": RegisterAliasDef(name="ymm0", parent="zmm0", size=32, offset=0),
369
+ "xmm0": RegisterAliasDef(name="xmm0", parent="zmm0", size=16, offset=0),
370
+ "zmm1": RegisterDef(name="zmm1", size=64),
371
+ "ymm1": RegisterAliasDef(name="ymm1", parent="zmm1", size=32, offset=0),
372
+ "xmm1": RegisterAliasDef(name="xmm1", parent="zmm1", size=16, offset=0),
373
+ "zmm2": RegisterDef(name="zmm2", size=64),
374
+ "ymm2": RegisterAliasDef(name="ymm2", parent="zmm2", size=32, offset=0),
375
+ "xmm2": RegisterAliasDef(name="xmm2", parent="zmm2", size=16, offset=0),
376
+ "zmm3": RegisterDef(name="zmm3", size=64),
377
+ "ymm3": RegisterAliasDef(name="ymm3", parent="zmm3", size=32, offset=0),
378
+ "xmm3": RegisterAliasDef(name="xmm3", parent="zmm3", size=16, offset=0),
379
+ "zmm4": RegisterDef(name="zmm4", size=64),
380
+ "ymm4": RegisterAliasDef(name="ymm4", parent="zmm4", size=32, offset=0),
381
+ "xmm4": RegisterAliasDef(name="xmm4", parent="zmm4", size=16, offset=0),
382
+ "zmm5": RegisterDef(name="zmm5", size=64),
383
+ "ymm5": RegisterAliasDef(name="ymm5", parent="zmm5", size=32, offset=0),
384
+ "xmm5": RegisterAliasDef(name="xmm5", parent="zmm5", size=16, offset=0),
385
+ "zmm6": RegisterDef(name="zmm6", size=64),
386
+ "ymm6": RegisterAliasDef(name="ymm6", parent="zmm6", size=32, offset=0),
387
+ "xmm6": RegisterAliasDef(name="xmm6", parent="zmm6", size=16, offset=0),
388
+ "zmm7": RegisterDef(name="zmm7", size=64),
389
+ "ymm7": RegisterAliasDef(name="ymm7", parent="zmm7", size=32, offset=0),
390
+ "xmm7": RegisterAliasDef(name="xmm7", parent="zmm7", size=16, offset=0),
391
+ "zmm8": RegisterDef(name="zmm8", size=64),
392
+ "ymm8": RegisterAliasDef(name="ymm8", parent="zmm8", size=32, offset=0),
393
+ "xmm8": RegisterAliasDef(name="xmm8", parent="zmm8", size=16, offset=0),
394
+ "zmm9": RegisterDef(name="zmm9", size=64),
395
+ "ymm9": RegisterAliasDef(name="ymm9", parent="zmm9", size=32, offset=0),
396
+ "xmm9": RegisterAliasDef(name="xmm9", parent="zmm9", size=16, offset=0),
397
+ "zmm10": RegisterDef(name="zmm10", size=64),
398
+ "ymm10": RegisterAliasDef(name="ymm10", parent="zmm10", size=32, offset=0),
399
+ "xmm10": RegisterAliasDef(name="xmm10", parent="zmm10", size=16, offset=0),
400
+ "zmm11": RegisterDef(name="zmm11", size=64),
401
+ "ymm11": RegisterAliasDef(name="ymm11", parent="zmm11", size=32, offset=0),
402
+ "xmm11": RegisterAliasDef(name="xmm11", parent="zmm11", size=16, offset=0),
403
+ "zmm12": RegisterDef(name="zmm12", size=64),
404
+ "ymm12": RegisterAliasDef(name="ymm12", parent="zmm12", size=32, offset=0),
405
+ "xmm12": RegisterAliasDef(name="xmm12", parent="zmm12", size=16, offset=0),
406
+ "zmm13": RegisterDef(name="zmm13", size=64),
407
+ "ymm13": RegisterAliasDef(name="ymm13", parent="zmm13", size=32, offset=0),
408
+ "xmm13": RegisterAliasDef(name="xmm13", parent="zmm13", size=16, offset=0),
409
+ "zmm14": RegisterDef(name="zmm14", size=64),
410
+ "ymm14": RegisterAliasDef(name="ymm14", parent="zmm14", size=32, offset=0),
411
+ "xmm14": RegisterAliasDef(name="xmm14", parent="zmm14", size=16, offset=0),
412
+ "zmm15": RegisterDef(name="zmm15", size=64),
413
+ "ymm15": RegisterAliasDef(name="ymm15", parent="zmm15", size=32, offset=0),
414
+ "xmm15": RegisterAliasDef(name="xmm15", parent="zmm15", size=16, offset=0),
415
+ "zmm16": RegisterDef(name="zmm16", size=64),
416
+ "ymm16": RegisterAliasDef(name="ymm16", parent="zmm16", size=32, offset=0),
417
+ "xmm16": RegisterAliasDef(name="xmm16", parent="zmm16", size=16, offset=0),
418
+ "zmm17": RegisterDef(name="zmm17", size=64),
419
+ "ymm17": RegisterAliasDef(name="ymm17", parent="zmm17", size=32, offset=0),
420
+ "xmm17": RegisterAliasDef(name="xmm17", parent="zmm17", size=16, offset=0),
421
+ "zmm18": RegisterDef(name="zmm18", size=64),
422
+ "ymm18": RegisterAliasDef(name="ymm18", parent="zmm18", size=32, offset=0),
423
+ "xmm18": RegisterAliasDef(name="xmm18", parent="zmm18", size=16, offset=0),
424
+ "zmm19": RegisterDef(name="zmm19", size=64),
425
+ "ymm19": RegisterAliasDef(name="ymm19", parent="zmm19", size=32, offset=0),
426
+ "xmm19": RegisterAliasDef(name="xmm19", parent="zmm19", size=16, offset=0),
427
+ "zmm20": RegisterDef(name="zmm20", size=64),
428
+ "ymm20": RegisterAliasDef(name="ymm20", parent="zmm20", size=32, offset=0),
429
+ "xmm20": RegisterAliasDef(name="xmm20", parent="zmm20", size=16, offset=0),
430
+ "zmm21": RegisterDef(name="zmm21", size=64),
431
+ "ymm21": RegisterAliasDef(name="ymm21", parent="zmm21", size=32, offset=0),
432
+ "xmm21": RegisterAliasDef(name="xmm21", parent="zmm21", size=16, offset=0),
433
+ "zmm22": RegisterDef(name="zmm22", size=64),
434
+ "ymm22": RegisterAliasDef(name="ymm22", parent="zmm22", size=32, offset=0),
435
+ "xmm22": RegisterAliasDef(name="xmm22", parent="zmm22", size=16, offset=0),
436
+ "zmm23": RegisterDef(name="zmm23", size=64),
437
+ "ymm23": RegisterAliasDef(name="ymm23", parent="zmm23", size=32, offset=0),
438
+ "xmm23": RegisterAliasDef(name="xmm23", parent="zmm23", size=16, offset=0),
439
+ "zmm24": RegisterDef(name="zmm24", size=64),
440
+ "ymm24": RegisterAliasDef(name="ymm24", parent="zmm24", size=32, offset=0),
441
+ "xmm24": RegisterAliasDef(name="xmm24", parent="zmm24", size=16, offset=0),
442
+ "zmm25": RegisterDef(name="zmm25", size=64),
443
+ "ymm25": RegisterAliasDef(name="ymm25", parent="zmm25", size=32, offset=0),
444
+ "xmm25": RegisterAliasDef(name="xmm25", parent="zmm25", size=16, offset=0),
445
+ "zmm26": RegisterDef(name="zmm26", size=64),
446
+ "ymm26": RegisterAliasDef(name="ymm26", parent="zmm26", size=32, offset=0),
447
+ "xmm26": RegisterAliasDef(name="xmm26", parent="zmm26", size=16, offset=0),
448
+ "zmm27": RegisterDef(name="zmm27", size=64),
449
+ "ymm27": RegisterAliasDef(name="ymm27", parent="zmm27", size=32, offset=0),
450
+ "xmm27": RegisterAliasDef(name="xmm27", parent="zmm27", size=16, offset=0),
451
+ "zmm28": RegisterDef(name="zmm28", size=64),
452
+ "ymm28": RegisterAliasDef(name="ymm28", parent="zmm28", size=32, offset=0),
453
+ "xmm28": RegisterAliasDef(name="xmm28", parent="zmm28", size=16, offset=0),
454
+ "zmm29": RegisterDef(name="zmm29", size=64),
455
+ "ymm29": RegisterAliasDef(name="ymm29", parent="zmm29", size=32, offset=0),
456
+ "xmm29": RegisterAliasDef(name="xmm29", parent="zmm29", size=16, offset=0),
457
+ "zmm30": RegisterDef(name="zmm30", size=64),
458
+ "ymm30": RegisterAliasDef(name="ymm30", parent="zmm30", size=32, offset=0),
459
+ "xmm30": RegisterAliasDef(name="xmm30", parent="zmm30", size=16, offset=0),
460
+ "zmm31": RegisterDef(name="zmm31", size=64),
461
+ "ymm31": RegisterAliasDef(name="ymm31", parent="zmm31", size=32, offset=0),
462
+ "xmm31": RegisterAliasDef(name="xmm31", parent="zmm31", size=16, offset=0),
463
+ }