From ce885926fe0ce28a4370fafb0d992b86447d722b Mon Sep 17 00:00:00 2001 From: ZXCLI Date: Thu, 8 Oct 2026 00:37:57 +0800 Subject: [PATCH] =?UTF-8?q?docs+repo:=20=E6=AD=A3=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E2=80=94=E2=80=94=E4=B8=89=E4=BB=BD=20README?= =?UTF-8?q?=20=E9=87=8D=E5=86=99=E4=B8=BA=E6=AD=A3=E5=BC=8F=E7=89=88?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E3=80=81DEVELOPMENT.md=20=E5=8F=96=E4=BB=A3?= =?UTF-8?q?=E4=BA=A4=E6=8E=A5=E6=96=87=E6=A1=A3=E3=80=81=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E7=BB=9F=E4=B8=80=E6=9B=B4=E5=90=8D=20worklo?= =?UTF-8?q?g=E3=80=81=E5=85=A8=E5=BA=93=E6=B8=85=E7=90=86=E4=BA=A4?= =?UTF-8?q?=E6=8E=A5=E5=AD=97=E6=A0=B7=EF=BC=9B=E8=84=B1=E6=95=8F=EF=BC=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=9C=AC=E6=9C=BA=E8=B7=AF=E5=BE=84/?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=BA=8F=E5=88=97=E5=8F=B7/=E5=86=85?= =?UTF-8?q?=E7=BD=91=20Git=20=E5=9C=B0=E5=9D=80=E5=85=A8=E9=83=A8=E6=B3=9B?= =?UTF-8?q?=E5=8C=96=EF=BC=8C.tools=20=E6=9C=AC=E5=9C=B0=E7=BC=93=E5=AD=98?= =?UTF-8?q?(13MB,pyc=E5=86=85=E5=B5=8C=E8=B7=AF=E5=BE=84)=E7=A7=BB?= =?UTF-8?q?=E5=87=BA=E8=BF=BD=E8=B8=AA=E5=B9=B6=E5=BF=BD=E7=95=A5=EF=BC=9B?= =?UTF-8?q?123=20=E5=8D=95=E6=B5=8B=E5=85=A8=E7=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 + .../capstone-5.0.9-py3-none-win_amd64.whl | 3 - .tools/downloads/capstone.json | 1 - .../pyelftools-0.33-py3-none-any.whl | 3 - .tools/downloads/pyelftools.json | 1 - .../bin/__pycache__/readelf.cpython-310.pyc | Bin 54593 -> 0 bytes .tools/python-revlibs/bin/readelf.py | 2015 ----------- .../capstone-5.0.9.dist-info/INSTALLER | 1 - .../capstone-5.0.9.dist-info/LICENSE.TXT | 31 - .../capstone-5.0.9.dist-info/METADATA | 80 - .../capstone-5.0.9.dist-info/RECORD | 102 - .../capstone-5.0.9.dist-info/REQUESTED | 0 .../capstone-5.0.9.dist-info/WHEEL | 5 - .../capstone-5.0.9.dist-info/top_level.txt | 1 - .tools/python-revlibs/capstone/__init__.py | 1260 ------- .../__pycache__/__init__.cpython-310.pyc | Bin 26125 -> 0 bytes .../capstone/__pycache__/arm.cpython-310.pyc | Bin 2596 -> 0 bytes .../__pycache__/arm64.cpython-310.pyc | Bin 3074 -> 0 bytes .../__pycache__/arm64_const.cpython-310.pyc | Bin 101094 -> 0 bytes .../__pycache__/arm_const.cpython-310.pyc | Bin 21711 -> 0 bytes .../capstone/__pycache__/bpf.cpython-310.pyc | Bin 2176 -> 0 bytes .../__pycache__/bpf_const.cpython-310.pyc | Bin 2745 -> 0 bytes .../capstone/__pycache__/evm.cpython-310.pyc | Bin 643 -> 0 bytes .../__pycache__/evm_const.cpython-310.pyc | Bin 4215 -> 0 bytes .../__pycache__/m680x.cpython-310.pyc | Bin 2767 -> 0 bytes .../__pycache__/m680x_const.cpython-310.pyc | Bin 11529 -> 0 bytes .../capstone/__pycache__/m68k.cpython-310.pyc | Bin 3219 -> 0 bytes .../__pycache__/m68k_const.cpython-310.pyc | Bin 13444 -> 0 bytes .../capstone/__pycache__/mips.cpython-310.pyc | Bin 1633 -> 0 bytes .../__pycache__/mips_const.cpython-310.pyc | Bin 23672 -> 0 bytes .../__pycache__/mos65xx.cpython-310.pyc | Bin 1533 -> 0 bytes .../__pycache__/mos65xx_const.cpython-310.pyc | Bin 4197 -> 0 bytes .../capstone/__pycache__/ppc.cpython-310.pyc | Bin 2058 -> 0 bytes .../__pycache__/ppc_const.cpython-310.pyc | Bin 59733 -> 0 bytes .../__pycache__/riscv.cpython-310.pyc | Bin 1692 -> 0 bytes .../__pycache__/riscv_const.cpython-310.pyc | Bin 12611 -> 0 bytes .../capstone/__pycache__/sh.cpython-310.pyc | Bin 2104 -> 0 bytes .../__pycache__/sh_const.cpython-310.pyc | Bin 8794 -> 0 bytes .../__pycache__/sparc.cpython-310.pyc | Bin 1718 -> 0 bytes .../__pycache__/sparc_const.cpython-310.pyc | Bin 11798 -> 0 bytes .../__pycache__/systemz.cpython-310.pyc | Bin 1711 -> 0 bytes .../__pycache__/sysz_const.cpython-310.pyc | Bin 75787 -> 0 bytes .../__pycache__/tms320c64x.cpython-310.pyc | Bin 2261 -> 0 bytes .../tms320c64x_const.cpython-310.pyc | Bin 8370 -> 0 bytes .../__pycache__/tricore.cpython-310.pyc | Bin 1726 -> 0 bytes .../__pycache__/tricore_const.cpython-310.pyc | Bin 15014 -> 0 bytes .../capstone/__pycache__/wasm.cpython-310.pyc | Bin 2284 -> 0 bytes .../__pycache__/wasm_const.cpython-310.pyc | Bin 6018 -> 0 bytes .../capstone/__pycache__/x86.cpython-310.pyc | Bin 3078 -> 0 bytes .../__pycache__/x86_const.cpython-310.pyc | Bin 59711 -> 0 bytes .../__pycache__/xcore.cpython-310.pyc | Bin 1684 -> 0 bytes .../__pycache__/xcore_const.cpython-310.pyc | Bin 4323 -> 0 bytes .tools/python-revlibs/capstone/arm.py | 83 - .tools/python-revlibs/capstone/arm64.py | 103 - .tools/python-revlibs/capstone/arm64_const.py | 3008 ---------------- .tools/python-revlibs/capstone/arm_const.py | 831 ----- .tools/python-revlibs/capstone/bpf.py | 69 - .tools/python-revlibs/capstone/bpf_const.py | 115 - .tools/python-revlibs/capstone/evm.py | 17 - .tools/python-revlibs/capstone/evm_const.py | 152 - .../capstone/include/capstone/arm.h | 991 ------ .../capstone/include/capstone/arm64.h | 3159 ----------------- .../capstone/include/capstone/bpf.h | 209 -- .../capstone/include/capstone/capstone.h | 890 ----- .../capstone/include/capstone/evm.h | 188 - .../capstone/include/capstone/m680x.h | 537 --- .../capstone/include/capstone/m68k.h | 613 ---- .../capstone/include/capstone/mips.h | 956 ----- .../capstone/include/capstone/mos65xx.h | 204 -- .../capstone/include/capstone/platform.h | 122 - .../capstone/include/capstone/ppc.h | 2108 ----------- .../capstone/include/capstone/riscv.h | 531 --- .../capstone/include/capstone/sh.h | 465 --- .../capstone/include/capstone/sparc.h | 520 --- .../capstone/include/capstone/systemz.h | 2601 -------------- .../capstone/include/capstone/tms320c64x.h | 359 -- .../capstone/include/capstone/tricore.h | 567 --- .../capstone/include/capstone/wasm.h | 250 -- .../capstone/include/capstone/x86.h | 1986 ----------- .../capstone/include/capstone/xcore.h | 235 -- .../python-revlibs/capstone/lib/capstone.dll | 3 - .tools/python-revlibs/capstone/m680x.py | 88 - .tools/python-revlibs/capstone/m680x_const.py | 416 --- .tools/python-revlibs/capstone/m68k.py | 100 - .tools/python-revlibs/capstone/m68k_const.py | 486 --- .tools/python-revlibs/capstone/mips.py | 48 - .tools/python-revlibs/capstone/mips_const.py | 862 ----- .tools/python-revlibs/capstone/mos65xx.py | 45 - .../python-revlibs/capstone/mos65xx_const.py | 153 - .tools/python-revlibs/capstone/ppc.py | 63 - .tools/python-revlibs/capstone/ppc_const.py | 2016 ----------- .tools/python-revlibs/capstone/riscv.py | 49 - .tools/python-revlibs/capstone/riscv_const.py | 456 --- .tools/python-revlibs/capstone/sh.py | 66 - .tools/python-revlibs/capstone/sh_const.py | 367 -- .tools/python-revlibs/capstone/sparc.py | 51 - .tools/python-revlibs/capstone/sparc_const.py | 430 --- .tools/python-revlibs/capstone/systemz.py | 51 - .tools/python-revlibs/capstone/sysz_const.py | 2524 ------------- .tools/python-revlibs/capstone/tms320c64x.py | 66 - .../capstone/tms320c64x_const.py | 278 -- .tools/python-revlibs/capstone/tricore.py | 51 - .../python-revlibs/capstone/tricore_const.py | 479 --- .tools/python-revlibs/capstone/wasm.py | 71 - .tools/python-revlibs/capstone/wasm_const.py | 192 - .tools/python-revlibs/capstone/x86.py | 98 - .tools/python-revlibs/capstone/x86_const.py | 1990 ----------- .tools/python-revlibs/capstone/xcore.py | 50 - .tools/python-revlibs/capstone/xcore_const.py | 162 - .tools/python-revlibs/elftools/__init__.py | 7 - .../__pycache__/__init__.cpython-310.pyc | Bin 196 -> 0 bytes .../elftools/common/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 183 -> 0 bytes .../construct_utils.cpython-310.pyc | Bin 6116 -> 0 bytes .../__pycache__/exceptions.cpython-310.pyc | Bin 818 -> 0 bytes .../common/__pycache__/utils.cpython-310.pyc | Bin 5157 -> 0 bytes .../elftools/common/construct_utils.py | 144 - .../elftools/common/exceptions.py | 22 - .../python-revlibs/elftools/common/utils.py | 132 - .../elftools/construct/__init__.py | 123 - .../__pycache__/__init__.cpython-310.pyc | Bin 4240 -> 0 bytes .../__pycache__/adapters.cpython-310.pyc | Bin 22047 -> 0 bytes .../__pycache__/core.cpython-310.pyc | Bin 49423 -> 0 bytes .../__pycache__/debug.cpython-310.pyc | Bin 4964 -> 0 bytes .../__pycache__/macros.cpython-310.pyc | Bin 25699 -> 0 bytes .../elftools/construct/adapters.py | 500 --- .../python-revlibs/elftools/construct/core.py | 1351 ------- .../elftools/construct/debug.py | 135 - .../elftools/construct/lib/__init__.py | 7 - .../lib/__pycache__/__init__.cpython-310.pyc | Bin 561 -> 0 bytes .../lib/__pycache__/binary.cpython-310.pyc | Bin 3311 -> 0 bytes .../lib/__pycache__/bitstream.cpython-310.pyc | Bin 3873 -> 0 bytes .../lib/__pycache__/container.cpython-310.pyc | Bin 7897 -> 0 bytes .../lib/__pycache__/hex.cpython-310.pyc | Bin 2150 -> 0 bytes .../elftools/construct/lib/binary.py | 107 - .../elftools/construct/lib/bitstream.py | 101 - .../elftools/construct/lib/container.py | 192 - .../elftools/construct/lib/hex.py | 47 - .../elftools/construct/macros.py | 676 ---- .../python-revlibs/elftools/dwarf/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 182 -> 0 bytes .../__pycache__/abbrevtable.cpython-310.pyc | Bin 3493 -> 0 bytes .../dwarf/__pycache__/aranges.cpython-310.pyc | Bin 4081 -> 0 bytes .../__pycache__/callframe.cpython-310.pyc | Bin 21273 -> 0 bytes .../__pycache__/compileunit.cpython-310.pyc | Bin 7999 -> 0 bytes .../__pycache__/constants.cpython-310.pyc | Bin 8118 -> 0 bytes .../__pycache__/datatype_cpp.cpython-310.pyc | Bin 7683 -> 0 bytes .../__pycache__/descriptions.cpython-310.pyc | Bin 23256 -> 0 bytes .../dwarf/__pycache__/die.cpython-310.pyc | Bin 10470 -> 0 bytes .../__pycache__/dwarf_expr.cpython-310.pyc | Bin 10831 -> 0 bytes .../__pycache__/dwarf_util.cpython-310.pyc | Bin 3247 -> 0 bytes .../__pycache__/dwarfinfo.cpython-310.pyc | Bin 22918 -> 0 bytes .../dwarf/__pycache__/enums.cpython-310.pyc | Bin 17688 -> 0 bytes .../__pycache__/lineprogram.cpython-310.pyc | Bin 7399 -> 0 bytes .../__pycache__/locationlists.cpython-310.pyc | Bin 14736 -> 0 bytes .../dwarf/__pycache__/namelut.cpython-310.pyc | Bin 7272 -> 0 bytes .../dwarf/__pycache__/ranges.cpython-310.pyc | Bin 10140 -> 0 bytes .../dwarf/__pycache__/structs.cpython-310.pyc | Bin 21069 -> 0 bytes .../__pycache__/typeunit.cpython-310.pyc | Bin 8194 -> 0 bytes .../elftools/dwarf/abbrevtable.py | 90 - .../python-revlibs/elftools/dwarf/aranges.py | 142 - .../elftools/dwarf/callframe.py | 780 ---- .../elftools/dwarf/compileunit.py | 300 -- .../elftools/dwarf/constants.py | 277 -- .../elftools/dwarf/datatype_cpp.py | 249 -- .../elftools/dwarf/descriptions.py | 721 ---- .tools/python-revlibs/elftools/dwarf/die.py | 373 -- .../elftools/dwarf/dwarf_expr.py | 293 -- .../elftools/dwarf/dwarf_util.py | 95 - .../elftools/dwarf/dwarfinfo.py | 762 ---- .tools/python-revlibs/elftools/dwarf/enums.py | 600 ---- .../elftools/dwarf/lineprogram.py | 280 -- .../elftools/dwarf/locationlists.py | 422 --- .../python-revlibs/elftools/dwarf/namelut.py | 201 -- .../python-revlibs/elftools/dwarf/ranges.py | 252 -- .../python-revlibs/elftools/dwarf/structs.py | 603 ---- .../python-revlibs/elftools/dwarf/typeunit.py | 278 -- .../python-revlibs/elftools/ehabi/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 182 -> 0 bytes .../__pycache__/constants.cpython-310.pyc | Bin 250 -> 0 bytes .../ehabi/__pycache__/decoder.cpython-310.pyc | Bin 9483 -> 0 bytes .../__pycache__/ehabiinfo.cpython-310.pyc | Bin 7928 -> 0 bytes .../ehabi/__pycache__/structs.cpython-310.pyc | Bin 1543 -> 0 bytes .../elftools/ehabi/constants.py | 1 - .../python-revlibs/elftools/ehabi/decoder.py | 289 -- .../elftools/ehabi/ehabiinfo.py | 232 -- .../python-revlibs/elftools/ehabi/structs.py | 47 - .../python-revlibs/elftools/elf/__init__.py | 0 .../elf/__pycache__/__init__.cpython-310.pyc | Bin 180 -> 0 bytes .../elf/__pycache__/constants.cpython-310.pyc | Bin 5193 -> 0 bytes .../__pycache__/descriptions.cpython-310.pyc | Bin 28961 -> 0 bytes .../elf/__pycache__/dynamic.cpython-310.pyc | Bin 14173 -> 0 bytes .../elf/__pycache__/elffile.cpython-310.pyc | Bin 34927 -> 0 bytes .../elf/__pycache__/enums.cpython-310.pyc | Bin 46408 -> 0 bytes .../__pycache__/gnuversions.cpython-310.pyc | Bin 10190 -> 0 bytes .../elf/__pycache__/hash.cpython-310.pyc | Bin 8385 -> 0 bytes .../elf/__pycache__/notes.cpython-310.pyc | Bin 1960 -> 0 bytes .../__pycache__/relocation.cpython-310.pyc | Bin 15308 -> 0 bytes .../elf/__pycache__/sections.cpython-310.pyc | Bin 23516 -> 0 bytes .../elf/__pycache__/segments.cpython-310.pyc | Bin 4643 -> 0 bytes .../elf/__pycache__/structs.cpython-310.pyc | Bin 17511 -> 0 bytes .../python-revlibs/elftools/elf/constants.py | 176 - .../elftools/elf/descriptions.py | 1090 ------ .tools/python-revlibs/elftools/elf/dynamic.py | 402 --- .tools/python-revlibs/elftools/elf/elffile.py | 982 ----- .tools/python-revlibs/elftools/elf/enums.py | 1679 --------- .../elftools/elf/gnuversions.py | 266 -- .tools/python-revlibs/elftools/elf/hash.py | 238 -- .tools/python-revlibs/elftools/elf/notes.py | 80 - .../python-revlibs/elftools/elf/relocation.py | 543 --- .../python-revlibs/elftools/elf/sections.py | 628 ---- .../python-revlibs/elftools/elf/segments.py | 143 - .tools/python-revlibs/elftools/elf/structs.py | 600 ---- .tools/python-revlibs/elftools/py.typed | 0 .../pyelftools-0.33.dist-info/INSTALLER | 1 - .../pyelftools-0.33.dist-info/METADATA | 24 - .../pyelftools-0.33.dist-info/RECORD | 114 - .../pyelftools-0.33.dist-info/REQUESTED | 0 .../pyelftools-0.33.dist-info/WHEEL | 5 - .../licenses/LICENSE | 32 - .../pyelftools-0.33.dist-info/top_level.txt | 1 - README.md | 115 +- analysis/README.md | 6 +- analysis/history/findings_20260810.md | 2 +- analysis/history/progress_20260810.md | 8 +- analysis/history/reverse_20260813_full.md | 2 +- analysis/history/session_state.md | 4 +- analysis/history/task_plan_20260714.md | 4 +- ...andoff_20260810.md => worklog_20260810.md} | 4 +- ...andoff_20260811.md => worklog_20260811.md} | 6 +- ...60811_full.md => worklog_20260811_full.md} | 4 +- ...andoff_20260812.md => worklog_20260812.md} | 4 +- ...812_night.md => worklog_20260812_night.md} | 4 +- ...andoff_20260813.md => worklog_20260813.md} | 2 +- ...d => worklog_完整逆向工程说明_20260811.md} | 34 +- .../{Core160043865.ddt => mag160c_unit.ddt} | 0 analysis/protocol_spec.md | 2 +- analysis/reverse_tools/parse_ddt.py | 2 +- analysis/reverse_tools/verify_nuc.py | 2 +- .../palette_extraction_findings.md | 12 +- .../mag160c/thermal/core/OfficialTempTest.kt | 4 +- .../mag160c/thermal/net/RemoteContractTest.kt | 8 +- .../mag160c/thermal/net/RemoteLoopbackTest.kt | 6 +- csdk/README.md | 2 +- csdk/include/mag160c/mag160c_render.h | 2 +- csdk/tools/legacy/mag160c_demo.c | 4 +- csdk/tools/legacy/mag160c_demo_usb0.c | 2 +- csdk/tools/mag160c_demo3.c | 2 +- csdk/tools/mag160c_linux_demo.c | 2 +- ...{HANDOFF_DEVELOPMENT.md => DEVELOPMENT.md} | 76 +- docs/android_app/execution_plan.md | 6 +- docs/android_app/real_device_checklist.md | 2 +- .../rendering_diff_phone_20261006.md | 8 +- docs/android_app/reverse_apk_features.md | 2 +- docs/android_app/session_state.md | 24 +- docs/android_app/verification_guide.md | 20 +- docs/android_app/verification_report.md | 22 +- tools/resume_android.ps1 | 9 +- tools/resume_rev.ps1 | 10 +- 259 files changed, 211 insertions(+), 55141 deletions(-) delete mode 100644 .tools/downloads/capstone-5.0.9-py3-none-win_amd64.whl delete mode 100644 .tools/downloads/capstone.json delete mode 100644 .tools/downloads/pyelftools-0.33-py3-none-any.whl delete mode 100644 .tools/downloads/pyelftools.json delete mode 100644 .tools/python-revlibs/bin/__pycache__/readelf.cpython-310.pyc delete mode 100644 .tools/python-revlibs/bin/readelf.py delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/INSTALLER delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/LICENSE.TXT delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/METADATA delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/RECORD delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/REQUESTED delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/WHEEL delete mode 100644 .tools/python-revlibs/capstone-5.0.9.dist-info/top_level.txt delete mode 100644 .tools/python-revlibs/capstone/__init__.py delete mode 100644 .tools/python-revlibs/capstone/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/arm.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/arm64.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/arm64_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/arm_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/bpf.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/bpf_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/evm.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/evm_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/m680x.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/m680x_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/m68k.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/m68k_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/mips.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/mips_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/mos65xx.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/mos65xx_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/ppc.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/ppc_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/riscv.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/riscv_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/sh.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/sh_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/sparc.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/sparc_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/systemz.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/sysz_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/tms320c64x.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/tms320c64x_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/tricore.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/tricore_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/wasm.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/wasm_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/x86.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/x86_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/xcore.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/__pycache__/xcore_const.cpython-310.pyc delete mode 100644 .tools/python-revlibs/capstone/arm.py delete mode 100644 .tools/python-revlibs/capstone/arm64.py delete mode 100644 .tools/python-revlibs/capstone/arm64_const.py delete mode 100644 .tools/python-revlibs/capstone/arm_const.py delete mode 100644 .tools/python-revlibs/capstone/bpf.py delete mode 100644 .tools/python-revlibs/capstone/bpf_const.py delete mode 100644 .tools/python-revlibs/capstone/evm.py delete mode 100644 .tools/python-revlibs/capstone/evm_const.py delete mode 100644 .tools/python-revlibs/capstone/include/capstone/arm.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/arm64.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/bpf.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/capstone.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/evm.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/m680x.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/m68k.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/mips.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/mos65xx.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/platform.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/ppc.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/riscv.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/sh.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/sparc.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/systemz.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/tms320c64x.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/tricore.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/wasm.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/x86.h delete mode 100644 .tools/python-revlibs/capstone/include/capstone/xcore.h delete mode 100644 .tools/python-revlibs/capstone/lib/capstone.dll delete mode 100644 .tools/python-revlibs/capstone/m680x.py delete mode 100644 .tools/python-revlibs/capstone/m680x_const.py delete mode 100644 .tools/python-revlibs/capstone/m68k.py delete mode 100644 .tools/python-revlibs/capstone/m68k_const.py delete mode 100644 .tools/python-revlibs/capstone/mips.py delete mode 100644 .tools/python-revlibs/capstone/mips_const.py delete mode 100644 .tools/python-revlibs/capstone/mos65xx.py delete mode 100644 .tools/python-revlibs/capstone/mos65xx_const.py delete mode 100644 .tools/python-revlibs/capstone/ppc.py delete mode 100644 .tools/python-revlibs/capstone/ppc_const.py delete mode 100644 .tools/python-revlibs/capstone/riscv.py delete mode 100644 .tools/python-revlibs/capstone/riscv_const.py delete mode 100644 .tools/python-revlibs/capstone/sh.py delete mode 100644 .tools/python-revlibs/capstone/sh_const.py delete mode 100644 .tools/python-revlibs/capstone/sparc.py delete mode 100644 .tools/python-revlibs/capstone/sparc_const.py delete mode 100644 .tools/python-revlibs/capstone/systemz.py delete mode 100644 .tools/python-revlibs/capstone/sysz_const.py delete mode 100644 .tools/python-revlibs/capstone/tms320c64x.py delete mode 100644 .tools/python-revlibs/capstone/tms320c64x_const.py delete mode 100644 .tools/python-revlibs/capstone/tricore.py delete mode 100644 .tools/python-revlibs/capstone/tricore_const.py delete mode 100644 .tools/python-revlibs/capstone/wasm.py delete mode 100644 .tools/python-revlibs/capstone/wasm_const.py delete mode 100644 .tools/python-revlibs/capstone/x86.py delete mode 100644 .tools/python-revlibs/capstone/x86_const.py delete mode 100644 .tools/python-revlibs/capstone/xcore.py delete mode 100644 .tools/python-revlibs/capstone/xcore_const.py delete mode 100644 .tools/python-revlibs/elftools/__init__.py delete mode 100644 .tools/python-revlibs/elftools/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/common/__init__.py delete mode 100644 .tools/python-revlibs/elftools/common/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/common/__pycache__/construct_utils.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/common/__pycache__/exceptions.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/common/__pycache__/utils.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/common/construct_utils.py delete mode 100644 .tools/python-revlibs/elftools/common/exceptions.py delete mode 100644 .tools/python-revlibs/elftools/common/utils.py delete mode 100644 .tools/python-revlibs/elftools/construct/__init__.py delete mode 100644 .tools/python-revlibs/elftools/construct/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/__pycache__/adapters.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/__pycache__/core.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/__pycache__/debug.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/__pycache__/macros.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/adapters.py delete mode 100644 .tools/python-revlibs/elftools/construct/core.py delete mode 100644 .tools/python-revlibs/elftools/construct/debug.py delete mode 100644 .tools/python-revlibs/elftools/construct/lib/__init__.py delete mode 100644 .tools/python-revlibs/elftools/construct/lib/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/lib/__pycache__/binary.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/lib/__pycache__/bitstream.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/lib/__pycache__/container.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/lib/__pycache__/hex.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/construct/lib/binary.py delete mode 100644 .tools/python-revlibs/elftools/construct/lib/bitstream.py delete mode 100644 .tools/python-revlibs/elftools/construct/lib/container.py delete mode 100644 .tools/python-revlibs/elftools/construct/lib/hex.py delete mode 100644 .tools/python-revlibs/elftools/construct/macros.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/__init__.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/abbrevtable.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/aranges.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/callframe.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/compileunit.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/constants.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/datatype_cpp.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/descriptions.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/die.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/dwarf_expr.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/dwarf_util.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/dwarfinfo.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/enums.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/lineprogram.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/locationlists.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/namelut.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/ranges.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/structs.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/__pycache__/typeunit.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/dwarf/abbrevtable.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/aranges.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/callframe.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/compileunit.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/constants.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/datatype_cpp.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/descriptions.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/die.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/dwarf_expr.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/dwarf_util.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/dwarfinfo.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/enums.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/lineprogram.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/locationlists.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/namelut.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/ranges.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/structs.py delete mode 100644 .tools/python-revlibs/elftools/dwarf/typeunit.py delete mode 100644 .tools/python-revlibs/elftools/ehabi/__init__.py delete mode 100644 .tools/python-revlibs/elftools/ehabi/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/ehabi/__pycache__/constants.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/ehabi/__pycache__/decoder.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/ehabi/__pycache__/ehabiinfo.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/ehabi/__pycache__/structs.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/ehabi/constants.py delete mode 100644 .tools/python-revlibs/elftools/ehabi/decoder.py delete mode 100644 .tools/python-revlibs/elftools/ehabi/ehabiinfo.py delete mode 100644 .tools/python-revlibs/elftools/ehabi/structs.py delete mode 100644 .tools/python-revlibs/elftools/elf/__init__.py delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/__init__.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/constants.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/descriptions.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/dynamic.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/elffile.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/enums.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/gnuversions.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/hash.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/notes.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/relocation.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/sections.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/segments.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/__pycache__/structs.cpython-310.pyc delete mode 100644 .tools/python-revlibs/elftools/elf/constants.py delete mode 100644 .tools/python-revlibs/elftools/elf/descriptions.py delete mode 100644 .tools/python-revlibs/elftools/elf/dynamic.py delete mode 100644 .tools/python-revlibs/elftools/elf/elffile.py delete mode 100644 .tools/python-revlibs/elftools/elf/enums.py delete mode 100644 .tools/python-revlibs/elftools/elf/gnuversions.py delete mode 100644 .tools/python-revlibs/elftools/elf/hash.py delete mode 100644 .tools/python-revlibs/elftools/elf/notes.py delete mode 100644 .tools/python-revlibs/elftools/elf/relocation.py delete mode 100644 .tools/python-revlibs/elftools/elf/sections.py delete mode 100644 .tools/python-revlibs/elftools/elf/segments.py delete mode 100644 .tools/python-revlibs/elftools/elf/structs.py delete mode 100644 .tools/python-revlibs/elftools/py.typed delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/INSTALLER delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/METADATA delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/RECORD delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/REQUESTED delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/WHEEL delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/licenses/LICENSE delete mode 100644 .tools/python-revlibs/pyelftools-0.33.dist-info/top_level.txt rename analysis/history/{handoff_20260810.md => worklog_20260810.md} (99%) rename analysis/history/{handoff_20260811.md => worklog_20260811.md} (98%) rename analysis/history/{handoff_20260811_full.md => worklog_20260811_full.md} (98%) rename analysis/history/{handoff_20260812.md => worklog_20260812.md} (98%) rename analysis/history/{handoff_20260812_night.md => worklog_20260812_night.md} (97%) rename analysis/history/{handoff_20260813.md => worklog_20260813.md} (99%) rename analysis/history/{交接_完整逆向工程说明_20260811.md => worklog_完整逆向工程说明_20260811.md} (97%) rename analysis/ida/{Core160043865.ddt => mag160c_unit.ddt} (100%) rename docs/android_app/{HANDOFF_DEVELOPMENT.md => DEVELOPMENT.md} (82%) diff --git a/.gitignore b/.gitignore index 6b8dd98..3c60211 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,9 @@ __pycache__/ # 临时对比/分析目录(不提交,含用户照片与中间产物) .tmp-*/ + +# 本地 AI 工作区(会话记忆/任务,不入库) +.workbuddy/ + +# 逆向工具链的本地安装与下载缓存(pip 可再生:capstone / pyelftools) +.tools/ diff --git a/.tools/downloads/capstone-5.0.9-py3-none-win_amd64.whl b/.tools/downloads/capstone-5.0.9-py3-none-win_amd64.whl deleted file mode 100644 index 1adfc48..0000000 --- a/.tools/downloads/capstone-5.0.9-py3-none-win_amd64.whl +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:732cedbbb56d42e723f14d7af6387f1454194a820b4b96b56d1e53f865ef85d0 -size 1273459 diff --git a/.tools/downloads/capstone.json b/.tools/downloads/capstone.json deleted file mode 100644 index 993115c..0000000 --- a/.tools/downloads/capstone.json +++ /dev/null @@ -1 +0,0 @@ -{"info":{"author":"Nguyen Anh Quynh","author_email":"aquynh@gmail.com","bugtrack_url":null,"classifiers":["License :: OSI Approved :: BSD License","Programming Language :: Python :: 3"],"description":"To install Capstone, you should run `pip install capstone`.\n\nIf you would like to build Capstone with just the source distribution, without\npip, just run `python setup.py install` in the folder with setup.py in it.\n\nIn order to use this source distribution, you will need an environment that can\ncompile C code. On Linux, this is usually easy, but on Windows, this involves\ninstalling Visual Studio and using the \"Developer Command Prompt\" to perform the\ninstallation. See BUILDING.txt for more information.\n\nBy default, attempting to install the python bindings will trigger a build of\nthe capstone native core. If this is undesirable for whatever reason, for\ninstance, you already have a globally installed copy of libcapstone, you may\ninhibit the build by setting the environment variable LIBCAPSTONE_PATH. The\nexact value is not checked, just setting it will inhibit the build. During\nexecution, this variable may be set to the path of a directory containing a\nspecific version of libcapstone you would like to use.\n\nIf you don't want to build your own copy of Capstone, you can use a precompiled\nbinary distribution from PyPI. Saying `pip install capstone` should\nautomatically obtain an appropriate copy for your system. If it does not, please\nopen an issue at https://github.com/aquynh/capstone and tag @rhelmot - she\nwill fix this, probably!\n\n--------------------------------------------------------------------------------\n\nCapstone is a disassembly framework with the target of becoming the ultimate\ndisasm engine for binary analysis and reversing in the security community.\n\nCreated by Nguyen Anh Quynh, then developed and maintained by a small community,\nCapstone offers some unparalleled features:\n\n- Support multiple hardware architectures: ARM, ARM64 (ARMv8), Mips, PPC, Sparc,\n SystemZ, XCore and X86 (including X86_64).\n\n- Having clean/simple/lightweight/intuitive architecture-neutral API.\n\n- Provide details on disassembled instruction (called “decomposer” by others).\n\n- Provide semantics of the disassembled instruction, such as list of implicit\n registers read & written.\n\n- Implemented in pure C language, with lightweight wrappers for C++, C#, Go,\n Java, NodeJS, Ocaml, Python, Ruby & Vala ready (available in main code,\n or provided externally by the community).\n\n- Native support for all popular platforms: Windows, Mac OSX, iOS, Android,\n Linux, *BSD, Solaris, etc.\n\n- Thread-safe by design.\n\n- Special support for embedding into firmware or OS kernel.\n\n- High performance & suitable for malware analysis (capable of handling various\n X86 malware tricks).\n\n- Distributed under the open source BSD license.\n\nFurther information is available at http://www.capstone-engine.org\n\n\n[License]\n\nThis project is released under the BSD license. If you redistribute the binary\nor source code of Capstone, please attach file LICENSE.TXT with your products.\n","description_content_type":"text/markdown","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":"https://www.capstone-engine.org","keywords":null,"license":null,"license_expression":null,"license_files":null,"maintainer":null,"maintainer_email":null,"name":"capstone","package_url":"https://pypi.org/project/capstone/","platform":null,"project_url":"https://pypi.org/project/capstone/","project_urls":{"Homepage":"https://www.capstone-engine.org"},"provides_extra":null,"release_url":"https://pypi.org/project/capstone/5.0.9/","requires_dist":["importlib-resources; python_version < \"3.9\""],"requires_python":">=3.8","summary":"Capstone disassembly engine","version":"5.0.9","yanked":false,"yanked_reason":null},"last_serial":37529994,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"aquynh"},{"role":"Owner","user":"kabeor"},{"role":"Maintainer","user":"qilingframework"},{"role":"Maintainer","user":"rhelmot"}]},"releases":{"2.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"4f993d300cb24763c58fb3096924350e53cee3097d37daf8536e4cedd11019c1","md5":"a23ded70328b2b4e75fdeb11ba367a87","sha256":"f68716cd82dbf30c8ee5db8ef18a9da88c0368d323f9e13f149a6e3da238a1ec"},"downloads":-1,"filename":"capstone-2.0.tar.gz","has_sig":false,"md5_digest":"a23ded70328b2b4e75fdeb11ba367a87","packagetype":"sdist","python_version":"source","requires_python":null,"size":30176,"upload_time":"2014-01-21T04:16:43","upload_time_iso_8601":"2014-01-21T04:16:43.428973Z","url":"https://files.pythonhosted.org/packages/4f/99/3d300cb24763c58fb3096924350e53cee3097d37daf8536e4cedd11019c1/capstone-2.0.tar.gz","yanked":false,"yanked_reason":null}],"2.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"bc976b7439e4d794597d0462a7a7af7ed1ead3f05ed6b923fe4ae67c27383404","md5":"3d54cdb997a33f88c8fbab78353fd483","sha256":"b86ba2b9189fe60e286341da75d0ac24322014303f72ab3d6ba3d800f3af7864"},"downloads":-1,"filename":"capstone-2.1.tar.gz","has_sig":false,"md5_digest":"3d54cdb997a33f88c8fbab78353fd483","packagetype":"sdist","python_version":"source","requires_python":null,"size":31720,"upload_time":"2014-03-05T15:02:56","upload_time_iso_8601":"2014-03-05T15:02:56.140881Z","url":"https://files.pythonhosted.org/packages/bc/97/6b7439e4d794597d0462a7a7af7ed1ead3f05ed6b923fe4ae67c27383404/capstone-2.1.tar.gz","yanked":false,"yanked_reason":null}],"3.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"452bea337db5dba25f62f9981bf3c57be7e27d5e17dc8c510207d17e2fc1fe6d","md5":"f77b97524c468958af98c98eb9b09fae","sha256":"c62957268329525cedd70a6217c905aed80534f5f1cb35896ff65028fdb8cf69"},"downloads":-1,"filename":"capstone-3.0.tar.gz","has_sig":false,"md5_digest":"f77b97524c468958af98c98eb9b09fae","packagetype":"sdist","python_version":"source","requires_python":null,"size":48034,"upload_time":"2014-11-19T13:29:13","upload_time_iso_8601":"2014-11-19T13:29:13.675527Z","url":"https://files.pythonhosted.org/packages/45/2b/ea337db5dba25f62f9981bf3c57be7e27d5e17dc8c510207d17e2fc1fe6d/capstone-3.0.tar.gz","yanked":false,"yanked_reason":null}],"3.0.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b99d8ff3bdb8574384ecf1786d6207aa93bcea19b28f037e2c45e0a133d63c54","md5":"0da9689d22e4bd9a0049b2711db853cc","sha256":"f91d71b6fcb24476808c1d08e1c8c64af34ba665e2c91b0e4f0bf5956abae056"},"downloads":-1,"filename":"capstone-3.0.1.tar.gz","has_sig":false,"md5_digest":"0da9689d22e4bd9a0049b2711db853cc","packagetype":"sdist","python_version":"source","requires_python":null,"size":3076458,"upload_time":"2015-02-03T03:42:34","upload_time_iso_8601":"2015-02-03T03:42:34.523173Z","url":"https://files.pythonhosted.org/packages/b9/9d/8ff3bdb8574384ecf1786d6207aa93bcea19b28f037e2c45e0a133d63c54/capstone-3.0.1.tar.gz","yanked":false,"yanked_reason":null}],"3.0.2":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e8e1d60432da342821c4c7539595d4bacfa0efa8e9a9a116f8384dde242286ae","md5":"da7b28af029ce377beba368e42132c09","sha256":"b32022fe956e940f8e67c17841dd3f6f1c50a60e451f9b5ce1f4dd2e5c5b3339"},"downloads":-1,"filename":"capstone-3.0.2.tar.gz","has_sig":false,"md5_digest":"da7b28af029ce377beba368e42132c09","packagetype":"sdist","python_version":"source","requires_python":null,"size":3102273,"upload_time":"2015-03-11T14:32:28","upload_time_iso_8601":"2015-03-11T14:32:28.201969Z","url":"https://files.pythonhosted.org/packages/e8/e1/d60432da342821c4c7539595d4bacfa0efa8e9a9a116f8384dde242286ae/capstone-3.0.2.tar.gz","yanked":false,"yanked_reason":null}],"3.0.3":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"21528abf3366661bce39d8efa21458045ee93e3126c96d7379a0dc0477b4faf9","md5":"03c82db9110378f4b4575f560445eb46","sha256":"0cb5206a5358a55f516b7a958da278466fc378f837187cb4f9df77f367e5e80a"},"downloads":-1,"filename":"capstone-3.0.3.tar.gz","has_sig":false,"md5_digest":"03c82db9110378f4b4575f560445eb46","packagetype":"sdist","python_version":"source","requires_python":null,"size":2441416,"upload_time":"2015-05-08T14:08:56","upload_time_iso_8601":"2015-05-08T14:08:56.019281Z","url":"https://files.pythonhosted.org/packages/21/52/8abf3366661bce39d8efa21458045ee93e3126c96d7379a0dc0477b4faf9/capstone-3.0.3.tar.gz","yanked":false,"yanked_reason":null}],"3.0.4":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e729e9ad2a12c38f19e9ca8aff05122e5b9e271da6ecbfb6c4e20aee381b49ff","md5":"3437fa632c89531a7d800a3f8c04fbe3","sha256":"945d3b8c3646a1c3914824c416439e2cf2df8969dd722c8979cdcc23b40ad225"},"downloads":-1,"filename":"capstone-3.0.4.tar.gz","has_sig":false,"md5_digest":"3437fa632c89531a7d800a3f8c04fbe3","packagetype":"sdist","python_version":"source","requires_python":null,"size":3175587,"upload_time":"2015-07-15T07:45:33","upload_time_iso_8601":"2015-07-15T07:45:33.374950Z","url":"https://files.pythonhosted.org/packages/e7/29/e9ad2a12c38f19e9ca8aff05122e5b9e271da6ecbfb6c4e20aee381b49ff/capstone-3.0.4.tar.gz","yanked":false,"yanked_reason":null}],"3.0.5":[{"comment_text":"","core-metadata":{"sha256":"2f1c636093b369a9a57520dfa2c7df165013d41073724e5051805f062ae2d740"},"digests":{"blake2b_256":"bbf24678f74cad1d25270fd34e4302d984551554b1812010a315d6c039d8fde4","md5":"6daca08c508a2de4b971b43e5b6ef709","sha256":"5c8e8adaa4c973b043f00d9db5616cc29ff4f168ebaa1855e3f283544b441ec0"},"downloads":-1,"filename":"capstone-3.0.5-py2-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"6daca08c508a2de4b971b43e5b6ef709","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":1577323,"upload_time":"2018-07-18T20:50:43","upload_time_iso_8601":"2018-07-18T20:50:43.354917Z","url":"https://files.pythonhosted.org/packages/bb/f2/4678f74cad1d25270fd34e4302d984551554b1812010a315d6c039d8fde4/capstone-3.0.5-py2-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2c0faa68d2bff41b22f437df17579588ce060ccdfb0cf71fe6ca1bb6551771e0"},"digests":{"blake2b_256":"de6c85f4775dc4d3151500c43f1735b0cf78a0364bb3f4688bf80a5d2fbc9c7e","md5":"81066f5fe07eaad6dbb437c96452f9c5","sha256":"6ed0940ee6dc14d32a6d84462b7a3c80a49f1b02f5c0fd10a8c1d815eb52c64f"},"downloads":-1,"filename":"capstone-3.0.5-py2-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"81066f5fe07eaad6dbb437c96452f9c5","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":1579648,"upload_time":"2018-07-18T20:48:03","upload_time_iso_8601":"2018-07-18T20:48:03.166337Z","url":"https://files.pythonhosted.org/packages/de/6c/85f4775dc4d3151500c43f1735b0cf78a0364bb3f4688bf80a5d2fbc9c7e/capstone-3.0.5-py2-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"07e34bd6e9756b5d04d9efa9f0539f6d685ed8f71ad7c0f6b9218ec4f386d27b"},"digests":{"blake2b_256":"3936c5ecb36d49d722dad1af99701aaba8c717dfe3082598b46e3ef16f941867","md5":"689134eb211f651d3f6a63cd436da2bc","sha256":"9bdeb07c0f08cd17df2b41e1326d4f7e77b6bdb0d457200304b5bb9cf41e3fd7"},"downloads":-1,"filename":"capstone-3.0.5-py2-none-win32.whl","has_sig":false,"md5_digest":"689134eb211f651d3f6a63cd436da2bc","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":696335,"upload_time":"2018-07-18T21:22:31","upload_time_iso_8601":"2018-07-18T21:22:31.069591Z","url":"https://files.pythonhosted.org/packages/39/36/c5ecb36d49d722dad1af99701aaba8c717dfe3082598b46e3ef16f941867/capstone-3.0.5-py2-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"07e34bd6e9756b5d04d9efa9f0539f6d685ed8f71ad7c0f6b9218ec4f386d27b"},"digests":{"blake2b_256":"8e158374d6313ed9970095fd7231cb938a113f680a1199ea3bdfd4f6f6cecfc6","md5":"aebd47123dd27df0ad9ee44ee0f97320","sha256":"cc64771ed5ef2d9a948455bf814629e273f4eb02efcab5616ce1ea0da2bc2623"},"downloads":-1,"filename":"capstone-3.0.5-py2-none-win_amd64.whl","has_sig":false,"md5_digest":"aebd47123dd27df0ad9ee44ee0f97320","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":696199,"upload_time":"2018-07-18T21:11:59","upload_time_iso_8601":"2018-07-18T21:11:59.473517Z","url":"https://files.pythonhosted.org/packages/8e/15/8374d6313ed9970095fd7231cb938a113f680a1199ea3bdfd4f6f6cecfc6/capstone-3.0.5-py2-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5d875f70f3f28e65aeb86f57d3c887fb7f47ba9ce56afb359bec581671db15fc","md5":"05c6f0170dcfc9e3ae9145ef04761951","sha256":"8d5f71b4c42d1552d2253bfd8e8366460de19f01236c3dc485bf24baffee60dd"},"downloads":-1,"filename":"capstone-3.0.5.tar.gz","has_sig":false,"md5_digest":"05c6f0170dcfc9e3ae9145ef04761951","packagetype":"sdist","python_version":"source","requires_python":null,"size":1616487,"upload_time":"2018-07-18T20:47:09","upload_time_iso_8601":"2018-07-18T20:47:09.180209Z","url":"https://files.pythonhosted.org/packages/5d/87/5f70f3f28e65aeb86f57d3c887fb7f47ba9ce56afb359bec581671db15fc/capstone-3.0.5.tar.gz","yanked":false,"yanked_reason":null}],"3.0.5.post1":[{"comment_text":"","core-metadata":{"sha256":"e3f365ff64ade0f6f3e033ae76487a5c69f311dc3f1e34a1775b9acc646339e0"},"digests":{"blake2b_256":"38c070c71ca77fe4dbf52d37d3e4408df15185b96c35b26b7a1f3007ee8d314c","md5":"2be3a27d80ff0bd40680f27fbe2ac1ea","sha256":"202a14304ea40ee4ba2bd53275bf1a274c28d686584da99f645b844c56123b80"},"downloads":-1,"filename":"capstone-3.0.5.post1-py2.py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"2be3a27d80ff0bd40680f27fbe2ac1ea","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":1555123,"upload_time":"2018-09-26T20:47:52","upload_time_iso_8601":"2018-09-26T20:47:52.120048Z","url":"https://files.pythonhosted.org/packages/38/c0/70c71ca77fe4dbf52d37d3e4408df15185b96c35b26b7a1f3007ee8d314c/capstone-3.0.5.post1-py2.py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a49bacc41660f1ba67ca03b5c1e3ddf6addc3b6c8e7e75fd21dfc1839db0b7a0"},"digests":{"blake2b_256":"8f73d763ec77f1a5b501b86b654a940e7c08721f6382ba50618d6d21dac3e2dc","md5":"80e721ca51364811cab3be313c85adc8","sha256":"875113b79a35d4f9bf56427d07fc5ac44d5e8f0b17fed0bce0e1b7829fe3fe37"},"downloads":-1,"filename":"capstone-3.0.5.post1-py2.py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"80e721ca51364811cab3be313c85adc8","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":1561316,"upload_time":"2018-09-26T20:47:54","upload_time_iso_8601":"2018-09-26T20:47:54.391345Z","url":"https://files.pythonhosted.org/packages/8f/73/d763ec77f1a5b501b86b654a940e7c08721f6382ba50618d6d21dac3e2dc/capstone-3.0.5.post1-py2.py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"759bf111095611bdae323d6e4eb5ba968ea629c11ee32243dcce674e656dd29a"},"digests":{"blake2b_256":"c5db462a158beabf4a62fe000e8a5a72d12e7d1dc28bb5d61236d641379f9e05","md5":"b75bb3e492fc947f9e4b387bdb32425f","sha256":"6cb11ec147a0df62da643812c4ac6394b3c543f524cb4c97f33b894ff8c3b27d"},"downloads":-1,"filename":"capstone-3.0.5.post1-py2.py3-none-win32.whl","has_sig":false,"md5_digest":"b75bb3e492fc947f9e4b387bdb32425f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":693307,"upload_time":"2018-09-26T20:47:56","upload_time_iso_8601":"2018-09-26T20:47:56.439688Z","url":"https://files.pythonhosted.org/packages/c5/db/462a158beabf4a62fe000e8a5a72d12e7d1dc28bb5d61236d641379f9e05/capstone-3.0.5.post1-py2.py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"759bf111095611bdae323d6e4eb5ba968ea629c11ee32243dcce674e656dd29a"},"digests":{"blake2b_256":"fe586001277132ba6193f10183f53630f50e3b69571f4da4b0568f0b0e796b0b","md5":"0ff2e2a343f0c0fdf6ab0f6ab88311a9","sha256":"5d6a85a3f916f79a087015859e46cfa2cd01ced82c574995f865208f318bc5ce"},"downloads":-1,"filename":"capstone-3.0.5.post1-py2.py3-none-win_amd64.whl","has_sig":false,"md5_digest":"0ff2e2a343f0c0fdf6ab0f6ab88311a9","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":692205,"upload_time":"2018-09-26T20:47:58","upload_time_iso_8601":"2018-09-26T20:47:58.591532Z","url":"https://files.pythonhosted.org/packages/fe/58/6001277132ba6193f10183f53630f50e3b69571f4da4b0568f0b0e796b0b/capstone-3.0.5.post1-py2.py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2b61d66abbf007f8cd2643095131c7dcb8186cc42603aea6d5a18cddcbf390a5","md5":"2a8296e852200a65a052bb8651b16c92","sha256":"3c0f73db9f8392f7048c8a244809f154d7c39f354e2167f6c477630aa517ed04"},"downloads":-1,"filename":"capstone-3.0.5.post1.tar.gz","has_sig":false,"md5_digest":"2a8296e852200a65a052bb8651b16c92","packagetype":"sdist","python_version":"source","requires_python":null,"size":1745587,"upload_time":"2018-09-26T20:48:00","upload_time_iso_8601":"2018-09-26T20:48:00.851149Z","url":"https://files.pythonhosted.org/packages/2b/61/d66abbf007f8cd2643095131c7dcb8186cc42603aea6d5a18cddcbf390a5/capstone-3.0.5.post1.tar.gz","yanked":false,"yanked_reason":null}],"3.0.5rc2":[{"comment_text":"","core-metadata":{"sha256":"1464c704011cfabdf164d15c5af3ae6a45adf329ae8472a0f79e681d872f4bfd"},"digests":{"blake2b_256":"8510acee17a5e42f370306aafa732b5d370e736d5a9f258820a6d680d2f68803","md5":"d9b73d99a8b8e02e0e6c8ba58f125693","sha256":"32345c932385938b84663c89b6596174507414755db5ec1b158c87ae8297e942"},"downloads":-1,"filename":"capstone-3.0.5rc2-py2-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"d9b73d99a8b8e02e0e6c8ba58f125693","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":1580579,"upload_time":"2017-03-04T22:49:28","upload_time_iso_8601":"2017-03-04T22:49:28.521994Z","url":"https://files.pythonhosted.org/packages/85/10/acee17a5e42f370306aafa732b5d370e736d5a9f258820a6d680d2f68803/capstone-3.0.5rc2-py2-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"1464c704011cfabdf164d15c5af3ae6a45adf329ae8472a0f79e681d872f4bfd"},"digests":{"blake2b_256":"fd33d1fc2d01b85572b88c9b4c359f36f88f8c32f2f0b9ffb2d21cd41bad2257","md5":"ecd7e1e39ea6dacf027c0cfe7eb1bf94","sha256":"ab6518cdd7c4df5891786a031b46cbfc063002a5a5e5de2e5ea10b614cfb5f3c"},"downloads":-1,"filename":"capstone-3.0.5rc2-py2-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"ecd7e1e39ea6dacf027c0cfe7eb1bf94","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":1575773,"upload_time":"2017-03-04T22:49:30","upload_time_iso_8601":"2017-03-04T22:49:30.810417Z","url":"https://files.pythonhosted.org/packages/fd/33/d1fc2d01b85572b88c9b4c359f36f88f8c32f2f0b9ffb2d21cd41bad2257/capstone-3.0.5rc2-py2-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"bbef09db50886d44bb4d19f2473b9cba72525096802032f68b8efdf8ed521813"},"digests":{"blake2b_256":"92780bb5949fdd0cc45302fdb7d2e390ed7ba165a0a3df292541cb4ba1a23ea6","md5":"59c0e72cc8e3e90c21ed9a4337d2a93a","sha256":"b755a96aff8ec07ec17015d95925af2ff3b6811918d46d4786532c556168356c"},"downloads":-1,"filename":"capstone-3.0.5rc2-py2-none-win32.whl","has_sig":false,"md5_digest":"59c0e72cc8e3e90c21ed9a4337d2a93a","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":696804,"upload_time":"2017-03-05T00:22:24","upload_time_iso_8601":"2017-03-05T00:22:24.539379Z","url":"https://files.pythonhosted.org/packages/92/78/0bb5949fdd0cc45302fdb7d2e390ed7ba165a0a3df292541cb4ba1a23ea6/capstone-3.0.5rc2-py2-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"bbef09db50886d44bb4d19f2473b9cba72525096802032f68b8efdf8ed521813"},"digests":{"blake2b_256":"076d5a05b17e65ada4e6940df19f82d248820114fd7a259003241f98728911c3","md5":"acd1fd00cb864e839e73c8f49467358c","sha256":"8ce63f8896c4984b498b29e814bc78aaa822d3a2e417ee099cad7f480db11323"},"downloads":-1,"filename":"capstone-3.0.5rc2-py2-none-win_amd64.whl","has_sig":false,"md5_digest":"acd1fd00cb864e839e73c8f49467358c","packagetype":"bdist_wheel","python_version":"py2","requires_python":null,"size":696947,"upload_time":"2017-03-05T00:22:26","upload_time_iso_8601":"2017-03-05T00:22:26.641184Z","url":"https://files.pythonhosted.org/packages/07/6d/5a05b17e65ada4e6940df19f82d248820114fd7a259003241f98728911c3/capstone-3.0.5rc2-py2-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"443f2ae09118f1c890b98e7b87ff1ce3d3a36e8e72ddac74ddcf0bbe8f005210","md5":"7033143d43d9a0b6a353acff17de80bb","sha256":"c67a4e14d04b29126f6ae2a4aeb773acf96cc6705e1fa7bd9af1798fa928022a"},"downloads":-1,"filename":"capstone-3.0.5rc2.tar.gz","has_sig":false,"md5_digest":"7033143d43d9a0b6a353acff17de80bb","packagetype":"sdist","python_version":"source","requires_python":null,"size":2412910,"upload_time":"2017-03-04T22:49:45","upload_time_iso_8601":"2017-03-04T22:49:45.296925Z","url":"https://files.pythonhosted.org/packages/44/3f/2ae09118f1c890b98e7b87ff1ce3d3a36e8e72ddac74ddcf0bbe8f005210/capstone-3.0.5rc2.tar.gz","yanked":false,"yanked_reason":null}],"4.0.0":[{"comment_text":"","core-metadata":{"sha256":"31d35d020146199457f471545cc9862a8e11c33d5ad5b76dea5af60df11dd834"},"digests":{"blake2b_256":"fda77e3a85876decabbed8ca4018d7e0814fa6a9788d6728900669df7abf6bf3","md5":"c2f9ac5cfd2dc5bbab76b8df8d2f05cf","sha256":"bbf68c71013b651f5a5415bdbad4590b57f4f4cd3f8ca414cbb6a95e89157b53"},"downloads":-1,"filename":"capstone-4.0.0-py2.py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"c2f9ac5cfd2dc5bbab76b8df8d2f05cf","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1904520,"upload_time":"2018-12-18T18:25:17","upload_time_iso_8601":"2018-12-18T18:25:17.583861Z","url":"https://files.pythonhosted.org/packages/fd/a7/7e3a85876decabbed8ca4018d7e0814fa6a9788d6728900669df7abf6bf3/capstone-4.0.0-py2.py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"31d35d020146199457f471545cc9862a8e11c33d5ad5b76dea5af60df11dd834"},"digests":{"blake2b_256":"b3965c3b6348b79df55bc8720afffe8a516e1ce2b133286bfa3caefbb6ffc744","md5":"0a339853f3c0b203271156c5a7c13c1b","sha256":"6c9ec2cef12a85c8e5477cd8b5a9ec41784802a5545a98cbc6fa16451f7b93bd"},"downloads":-1,"filename":"capstone-4.0.0-py2.py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"0a339853f3c0b203271156c5a7c13c1b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1892891,"upload_time":"2018-12-18T18:25:20","upload_time_iso_8601":"2018-12-18T18:25:20.217005Z","url":"https://files.pythonhosted.org/packages/b3/96/5c3b6348b79df55bc8720afffe8a516e1ce2b133286bfa3caefbb6ffc744/capstone-4.0.0-py2.py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"1ba45b060140446a16bcc9c0bf6ff5d27caff36ac1bab786f0def45290ab939f"},"digests":{"blake2b_256":"08570d57db0b5bb790d2af35d775131ddeb092b6cd1e35603e9236e0206e162d","md5":"521cfa85139d9a03039097a6e9727e4f","sha256":"8fc53450919236f501ea6f95c42e29e3351631bf3b7683d043aada233926178e"},"downloads":-1,"filename":"capstone-4.0.0-py2.py3-none-win32.whl","has_sig":false,"md5_digest":"521cfa85139d9a03039097a6e9727e4f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":867298,"upload_time":"2018-12-18T20:14:12","upload_time_iso_8601":"2018-12-18T20:14:12.207649Z","url":"https://files.pythonhosted.org/packages/08/57/0d57db0b5bb790d2af35d775131ddeb092b6cd1e35603e9236e0206e162d/capstone-4.0.0-py2.py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"1ba45b060140446a16bcc9c0bf6ff5d27caff36ac1bab786f0def45290ab939f"},"digests":{"blake2b_256":"7206cfb5c6ba521986bd78c66697676cf8b2ca31588ae49059a8b74a3c8d7de6","md5":"445432c4a07499569408d494b2c0aed8","sha256":"0de499238e4fb1076fcf7d575537a1a9fe9ea068f2abee0012e723185d9e7aa8"},"downloads":-1,"filename":"capstone-4.0.0-py2.py3-none-win_amd64.whl","has_sig":false,"md5_digest":"445432c4a07499569408d494b2c0aed8","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":874959,"upload_time":"2018-12-18T19:59:12","upload_time_iso_8601":"2018-12-18T19:59:12.252955Z","url":"https://files.pythonhosted.org/packages/72/06/cfb5c6ba521986bd78c66697676cf8b2ca31588ae49059a8b74a3c8d7de6/capstone-4.0.0-py2.py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ccc86a3b55c106d1a39ab0599a89ca3bf842ccd47cd750d3724cde3abaeeb115","md5":"89d12a474960b79a2c3c63db60483d92","sha256":"0be1ade13bd7073dddff91acc121666c34b644377245cb9350654bffd0bfee66"},"downloads":-1,"filename":"capstone-4.0.0.tar.gz","has_sig":false,"md5_digest":"89d12a474960b79a2c3c63db60483d92","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2045222,"upload_time":"2018-12-18T18:13:56","upload_time_iso_8601":"2018-12-18T18:13:56.734994Z","url":"https://files.pythonhosted.org/packages/cc/c8/6a3b55c106d1a39ab0599a89ca3bf842ccd47cd750d3724cde3abaeeb115/capstone-4.0.0.tar.gz","yanked":false,"yanked_reason":null}],"4.0.1":[{"comment_text":"","core-metadata":{"sha256":"0971bab94dd9b08739e1b14ffab9035628cc2ec3e7b154570bca546db7eb5749"},"digests":{"blake2b_256":"115dae2689ae2da1ccc6d007296f876be2ba88ae4773b365cf1a648752dbe554","md5":"033b440e4a2da64a46aa58b9de6a65ee","sha256":"a85763eccae63c3b7a1123a17afcda03303771b18db38a44453055ff360edd94"},"downloads":-1,"filename":"capstone-4.0.1-py2.py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"033b440e4a2da64a46aa58b9de6a65ee","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1904813,"upload_time":"2019-01-15T01:06:14","upload_time_iso_8601":"2019-01-15T01:06:14.158936Z","url":"https://files.pythonhosted.org/packages/11/5d/ae2689ae2da1ccc6d007296f876be2ba88ae4773b365cf1a648752dbe554/capstone-4.0.1-py2.py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"0971bab94dd9b08739e1b14ffab9035628cc2ec3e7b154570bca546db7eb5749"},"digests":{"blake2b_256":"350c74db5b9b9ed25d72869832865b7612658bd796cd02c26b1d567cbc9f0ab6","md5":"5f1727f462fdab2582ee98075386c226","sha256":"dae578f97b24212fb97a5c833342e56c69e7fb71502187a0b51a4326381e4204"},"downloads":-1,"filename":"capstone-4.0.1-py2.py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"5f1727f462fdab2582ee98075386c226","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1892953,"upload_time":"2019-01-15T01:06:17","upload_time_iso_8601":"2019-01-15T01:06:17.141201Z","url":"https://files.pythonhosted.org/packages/35/0c/74db5b9b9ed25d72869832865b7612658bd796cd02c26b1d567cbc9f0ab6/capstone-4.0.1-py2.py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3d9417fe498756736cf973a8c2c5a4ce7826af9453ce240e356012f48f3fc812"},"digests":{"blake2b_256":"a49e93e6342ec5de5af4c5861ef0594070f7fd566276471a442911195b9f27b3","md5":"a6f9e05002031a70decd403df9190f85","sha256":"5d97df74a8ffdd02706bc67155b7d41dd3ca8ff2caa034f8e54b99044b96037e"},"downloads":-1,"filename":"capstone-4.0.1-py2.py3-none-win32.whl","has_sig":false,"md5_digest":"a6f9e05002031a70decd403df9190f85","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":867505,"upload_time":"2019-01-15T01:19:11","upload_time_iso_8601":"2019-01-15T01:19:11.972788Z","url":"https://files.pythonhosted.org/packages/a4/9e/93e6342ec5de5af4c5861ef0594070f7fd566276471a442911195b9f27b3/capstone-4.0.1-py2.py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3d9417fe498756736cf973a8c2c5a4ce7826af9453ce240e356012f48f3fc812"},"digests":{"blake2b_256":"75c04584a96343c3c98db65bd10eebf627d0d0b6bd8a766d9a88a343f433901b","md5":"ea39a5cc3156b34134c53ce4e6111e6d","sha256":"ee7f55aa4326b1e345b1fb28d1b0798974503e914b006cc9806431e8c3e95549"},"downloads":-1,"filename":"capstone-4.0.1-py2.py3-none-win_amd64.whl","has_sig":false,"md5_digest":"ea39a5cc3156b34134c53ce4e6111e6d","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":875121,"upload_time":"2019-01-15T01:21:31","upload_time_iso_8601":"2019-01-15T01:21:31.296345Z","url":"https://files.pythonhosted.org/packages/75/c0/4584a96343c3c98db65bd10eebf627d0d0b6bd8a766d9a88a343f433901b/capstone-4.0.1-py2.py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2aa2026cc921a6ac7e4fcd0c2ba740edce4c37c56af63a79e570bebaf3bd7c50","md5":"250e3b5fbb9d6a2472bbf5eab4842189","sha256":"5857accc0de1e769b0ec0a0ca985715bfa96e5a66a2ebb3aaed43a8e3655377f"},"downloads":-1,"filename":"capstone-4.0.1.tar.gz","has_sig":false,"md5_digest":"250e3b5fbb9d6a2472bbf5eab4842189","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2045533,"upload_time":"2019-01-15T01:03:31","upload_time_iso_8601":"2019-01-15T01:03:31.431656Z","url":"https://files.pythonhosted.org/packages/2a/a2/026cc921a6ac7e4fcd0c2ba740edce4c37c56af63a79e570bebaf3bd7c50/capstone-4.0.1.tar.gz","yanked":false,"yanked_reason":null}],"4.0.2":[{"comment_text":"","core-metadata":{"sha256":"7d82df21260dd9c6130fcbd28442eebd5fc4343d27ab8ff80171df82bb086b2f"},"digests":{"blake2b_256":"019737525c59c550fa6b1aeddb691930a4f08a5cf22d10ee4054e7edfc740086","md5":"a2a670b0174f59ca73cbe7f25c288117","sha256":"da442f979414cf27e4621e70e835880878c858ea438c4f0e957e132593579e37"},"downloads":-1,"filename":"capstone-4.0.2-py2.py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"a2a670b0174f59ca73cbe7f25c288117","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2070383,"upload_time":"2020-05-11T02:27:58","upload_time_iso_8601":"2020-05-11T02:27:58.873655Z","url":"https://files.pythonhosted.org/packages/01/97/37525c59c550fa6b1aeddb691930a4f08a5cf22d10ee4054e7edfc740086/capstone-4.0.2-py2.py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"7d82df21260dd9c6130fcbd28442eebd5fc4343d27ab8ff80171df82bb086b2f"},"digests":{"blake2b_256":"3885647d512c2c2e2981d6f4c70ed41c5ec3d8d6f06cc9c9dd63348e8e6a21a3","md5":"0221c22e0ef0759ef2ab6cb7079b2746","sha256":"9d1a9096c5f875b11290317722ed44bb6e7c52e50cc79d791f142bce968c49aa"},"downloads":-1,"filename":"capstone-4.0.2-py2.py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"0221c22e0ef0759ef2ab6cb7079b2746","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2131589,"upload_time":"2020-05-11T02:28:07","upload_time_iso_8601":"2020-05-11T02:28:07.610744Z","url":"https://files.pythonhosted.org/packages/38/85/647d512c2c2e2981d6f4c70ed41c5ec3d8d6f06cc9c9dd63348e8e6a21a3/capstone-4.0.2-py2.py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"7d82df21260dd9c6130fcbd28442eebd5fc4343d27ab8ff80171df82bb086b2f"},"digests":{"blake2b_256":"9643dc828bd651b8b4ead0aeb2b449141dc31367aced94c0804d2cc4ac02d9e7","md5":"69507ebbd790ed129012aaf74da84a7e","sha256":"c3d9b443d1adb40ee2d9a4e7341169b76476ddcf3a54c03793b16cdc7cd35c5a"},"downloads":-1,"filename":"capstone-4.0.2-py2.py3-none-win32.whl","has_sig":false,"md5_digest":"69507ebbd790ed129012aaf74da84a7e","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":881229,"upload_time":"2020-05-11T02:28:35","upload_time_iso_8601":"2020-05-11T02:28:35.393405Z","url":"https://files.pythonhosted.org/packages/96/43/dc828bd651b8b4ead0aeb2b449141dc31367aced94c0804d2cc4ac02d9e7/capstone-4.0.2-py2.py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"7d82df21260dd9c6130fcbd28442eebd5fc4343d27ab8ff80171df82bb086b2f"},"digests":{"blake2b_256":"6a71d409f50f7cf7235513f3e636bb1aeb53d729106c1c77495c48fc09c41a54","md5":"0eb4220b54f084fd6d1c3011aefdd75a","sha256":"0d65ffe8620920976ceadedc769f22318f6f150a592368d8a735612367ac8a1a"},"downloads":-1,"filename":"capstone-4.0.2-py2.py3-none-win_amd64.whl","has_sig":false,"md5_digest":"0eb4220b54f084fd6d1c3011aefdd75a","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":896423,"upload_time":"2020-05-11T02:28:31","upload_time_iso_8601":"2020-05-11T02:28:31.222548Z","url":"https://files.pythonhosted.org/packages/6a/71/d409f50f7cf7235513f3e636bb1aeb53d729106c1c77495c48fc09c41a54/capstone-4.0.2-py2.py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f2ae21dbb3ccc30d5cc9e8cdd8febfbf5d16d93b8c10e595280d2aa4631a0d1f","md5":"96215136924b612ddd4e05742c02cbff","sha256":"2842913092c9b69fd903744bc1b87488e1451625460baac173056e1808ec1c66"},"downloads":-1,"filename":"capstone-4.0.2.tar.gz","has_sig":false,"md5_digest":"96215136924b612ddd4e05742c02cbff","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2041850,"upload_time":"2020-05-11T02:27:44","upload_time_iso_8601":"2020-05-11T02:27:44.317666Z","url":"https://files.pythonhosted.org/packages/f2/ae/21dbb3ccc30d5cc9e8cdd8febfbf5d16d93b8c10e595280d2aa4631a0d1f/capstone-4.0.2.tar.gz","yanked":false,"yanked_reason":null}],"5.0.0":[{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"0ded7eaf4c1dfe207801760d0e93ff89b616898e2e576dba2ceeb44e95ff0100","md5":"f09ddf95d6067eedf4a1c65b53512e98","sha256":"4255086c14a98037ae6c1d554f54691e2179b4bb792b23c9811ded2f35807904"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-macosx_10_15_x86_64.whl","has_sig":false,"md5_digest":"f09ddf95d6067eedf4a1c65b53512e98","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2295687,"upload_time":"2022-02-28T15:01:09","upload_time_iso_8601":"2022-02-28T15:01:09.762694Z","url":"https://files.pythonhosted.org/packages/0d/ed/7eaf4c1dfe207801760d0e93ff89b616898e2e576dba2ceeb44e95ff0100/capstone-5.0.0-py3-none-macosx_10_15_x86_64.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"92f650ebb4b4e69b36fb276e28d88b20fa4d89551cc3488d3335b93e5d5301a1"},"digests":{"blake2b_256":"923d4bf1abda7207149e8a5af87b3a9f7770106687caf450a97ef4de1b6e976c","md5":"7120121418a3283f97ad202f199a0474","sha256":"e583c581ccd23d4eae47052c9bf7dad6c428eb7cab43ee062d3d8ec7448aaa0e"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"7120121418a3283f97ad202f199a0474","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2382821,"upload_time":"2023-07-05T15:02:31","upload_time_iso_8601":"2023-07-05T15:02:31.928066Z","url":"https://files.pythonhosted.org/packages/92/3d/4bf1abda7207149e8a5af87b3a9f7770106687caf450a97ef4de1b6e976c/capstone-5.0.0-py3-none-macosx_10_9_universal2.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"a9351d6624d93aa8a8b3efe743706cdfaaeef69b5fa371893bd1b698f76735bb","md5":"d4ef6e5439cac5f57c303dd12ec0873c","sha256":"fabca634c49b48cb1aa3c9f8ceb9a0b7919582e34369d228e0d7b00980c7044e"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"d4ef6e5439cac5f57c303dd12ec0873c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2744830,"upload_time":"2022-02-28T15:01:11","upload_time_iso_8601":"2022-02-28T15:01:11.128726Z","url":"https://files.pythonhosted.org/packages/a9/35/1d6624d93aa8a8b3efe743706cdfaaeef69b5fa371893bd1b698f76735bb/capstone-5.0.0-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"31de525b3ffad0a9c5bd7007efa900508619469299a7a78188043a2954fa33a4","md5":"616323f567fd5af2a17bd2a34607c8f2","sha256":"b63c2c0e4492f3a9ffdaaaf55ceff5fe73e5267244e5cda4095f9e1d9174fa4b"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"616323f567fd5af2a17bd2a34607c8f2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2744795,"upload_time":"2022-02-28T15:01:12","upload_time_iso_8601":"2022-02-28T15:01:12.727201Z","url":"https://files.pythonhosted.org/packages/31/de/525b3ffad0a9c5bd7007efa900508619469299a7a78188043a2954fa33a4/capstone-5.0.0-py3-none-manylinux1_i686.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"57855d0dbc4bc5c825621fe4426c4ef5048c9fb9e4ab1c26ffabc91d3eb989b1","md5":"f0461ddc89af02dca74f7c864530d32e","sha256":"50f736353b1983045bd282a0627124600f52aa544c3c21819243522d0540e26a"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","has_sig":false,"md5_digest":"f0461ddc89af02dca74f7c864530d32e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2817380,"upload_time":"2022-02-28T15:01:14","upload_time_iso_8601":"2022-02-28T15:01:14.223624Z","url":"https://files.pythonhosted.org/packages/57/85/5d0dbc4bc5c825621fe4426c4ef5048c9fb9e4ab1c26ffabc91d3eb989b1/capstone-5.0.0-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"4ef269da3db11867b67f0506dd3c17ba0aaf8283b83d364705caeaa832b2aaa3","md5":"23f05b6430dc18832eb590bc5c04884c","sha256":"9717b35221fcc9d8db9240ff6b7b007808805f5e0409daf81c0831c13ff37653"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"23f05b6430dc18832eb590bc5c04884c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2817345,"upload_time":"2022-02-28T15:01:15","upload_time_iso_8601":"2022-02-28T15:01:15.761003Z","url":"https://files.pythonhosted.org/packages/4e/f2/69da3db11867b67f0506dd3c17ba0aaf8283b83d364705caeaa832b2aaa3/capstone-5.0.0-py3-none-manylinux1_x86_64.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"e06193dfea06f0351739df1a88bdae3a373670fb6598e6df63b3a889cdb4f40f","md5":"04dc7572ffbdc5624b4f15f2ea302b86","sha256":"9ac2ea94a798790c996d8ced727fe9afa92882f7dc04ce423342aeab98ff83d6"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-win32.whl","has_sig":false,"md5_digest":"04dc7572ffbdc5624b4f15f2ea302b86","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1218338,"upload_time":"2022-02-28T15:01:17","upload_time_iso_8601":"2022-02-28T15:01:17.091815Z","url":"https://files.pythonhosted.org/packages/e0/61/93dfea06f0351739df1a88bdae3a373670fb6598e6df63b3a889cdb4f40f/capstone-5.0.0-py3-none-win32.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":{"sha256":"2fdb71fa9d0c518c4f32861464960ab246abeee78469edc438a33026e6d2a20f"},"digests":{"blake2b_256":"18f36134b21be2b256cc31fd65b81d27d70f31f2199fd1b3ad006e05dedd0bd6","md5":"9231c51fe0dbf6b156d82595fc96f063","sha256":"e0c59d401452237a838ad5067eccc4f72a26af4b2b865d166822721de306eba5"},"downloads":-1,"filename":"capstone-5.0.0-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"9231c51fe0dbf6b156d82595fc96f063","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1226378,"upload_time":"2022-02-28T15:01:18","upload_time_iso_8601":"2022-02-28T15:01:18.203706Z","url":"https://files.pythonhosted.org/packages/18/f3/6134b21be2b256cc31fd65b81d27d70f31f2199fd1b3ad006e05dedd0bd6/capstone-5.0.0-py3-none-win_amd64.whl","yanked":true,"yanked_reason":"wrong "},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0d253496d5e23573bce9c1b753c215b80615e7b557680fcf4f1f804ac7defc97","md5":"a35caae78eb868e5f7516cab404a07db","sha256":"6e18ee140463881c627b7ff7fd655752ddf37d9036295d3dba7b130408fbabaf"},"downloads":-1,"filename":"capstone-5.0.0.tar.gz","has_sig":false,"md5_digest":"a35caae78eb868e5f7516cab404a07db","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2620513,"upload_time":"2022-02-28T15:01:19","upload_time_iso_8601":"2022-02-28T15:01:19.368356Z","url":"https://files.pythonhosted.org/packages/0d/25/3496d5e23573bce9c1b753c215b80615e7b557680fcf4f1f804ac7defc97/capstone-5.0.0.tar.gz","yanked":true,"yanked_reason":"wrong "}],"5.0.0.post1":[{"comment_text":"","core-metadata":{"sha256":"bb23f3de1abd41fe6c6a3d56a4be491bb1231384d6102dd1bdc6997e53f3052c"},"digests":{"blake2b_256":"8733e69a263007e1785a95a82f192c701f2e30b087ec891613e2dcd2dc8a4224","md5":"fb9f7b7ad9adc7e551fae06b451a651b","sha256":"7993fee5e069dae052ea6392fcab5d06c68e14dab8a755c686bd2077fbc73982"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"fb9f7b7ad9adc7e551fae06b451a651b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2382909,"upload_time":"2023-07-05T15:35:01","upload_time_iso_8601":"2023-07-05T15:35:01.727539Z","url":"https://files.pythonhosted.org/packages/87/33/e69a263007e1785a95a82f192c701f2e30b087ec891613e2dcd2dc8a4224/capstone-5.0.0.post1-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"cfe581fe4fe16e6ef0f8b216896f159b583468bcafb9919d0855451b68016950"},"digests":{"blake2b_256":"b0951b19d2e8b5d21ffeed8c4b14cde4d0b98e0540e0d258408b533a85527677","md5":"0d0bc41b25cac2cc240e4d700667ed8a","sha256":"64d9b93425ca4d5d2136ce8d421591ddf6c2af6ea37f542016530018d1fa7ada"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"0d0bc41b25cac2cc240e4d700667ed8a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2857586,"upload_time":"2023-07-05T15:35:03","upload_time_iso_8601":"2023-07-05T15:35:03.955098Z","url":"https://files.pythonhosted.org/packages/b0/95/1b19d2e8b5d21ffeed8c4b14cde4d0b98e0540e0d258408b533a85527677/capstone-5.0.0.post1-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"cfe581fe4fe16e6ef0f8b216896f159b583468bcafb9919d0855451b68016950"},"digests":{"blake2b_256":"da8422799e6a761a84216894e0f786e3ccb45f4ae8f87fb62fadf19edb3dfb80","md5":"426f3117a544e20d6bef79d1bb3f3cd9","sha256":"9e7d0e910505efe7e12a80e5eba1bfe039e87f3b004d880515d62445c0d3d253"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"426f3117a544e20d6bef79d1bb3f3cd9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2857547,"upload_time":"2023-07-05T15:35:05","upload_time_iso_8601":"2023-07-05T15:35:05.979361Z","url":"https://files.pythonhosted.org/packages/da/84/22799e6a761a84216894e0f786e3ccb45f4ae8f87fb62fadf19edb3dfb80/capstone-5.0.0.post1-py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"cfe581fe4fe16e6ef0f8b216896f159b583468bcafb9919d0855451b68016950"},"digests":{"blake2b_256":"103518983816e3be4ba6dddf8be864af3ac0628919420db40d9c9a352345e274","md5":"7bd0e2879bc6cdfe5147ddfd6d569123","sha256":"4d477559219683200ea3abe4f5c2d5b3563f1f94f72f42292ad83feb0913cc29"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","has_sig":false,"md5_digest":"7bd0e2879bc6cdfe5147ddfd6d569123","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2931418,"upload_time":"2023-07-05T15:35:07","upload_time_iso_8601":"2023-07-05T15:35:07.784230Z","url":"https://files.pythonhosted.org/packages/10/35/18983816e3be4ba6dddf8be864af3ac0628919420db40d9c9a352345e274/capstone-5.0.0.post1-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"cfe581fe4fe16e6ef0f8b216896f159b583468bcafb9919d0855451b68016950"},"digests":{"blake2b_256":"09acb3631e004ca09410b12e0ce570bce86e01487f6aeaaf87d7cea9ff9a884e","md5":"4fc67725499049250951f05f2dff1e72","sha256":"94fdea8158a1066c5ba5bb284d1da0132227f10d3eb57de1784f4c64445c76d7"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"4fc67725499049250951f05f2dff1e72","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2931390,"upload_time":"2023-07-05T15:35:09","upload_time_iso_8601":"2023-07-05T15:35:09.622587Z","url":"https://files.pythonhosted.org/packages/09/ac/b3631e004ca09410b12e0ce570bce86e01487f6aeaaf87d7cea9ff9a884e/capstone-5.0.0.post1-py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a6f68253277e840951a0910a7d20a0557c95fe4e3ee0a7acc3a10d642c0fb8b0"},"digests":{"blake2b_256":"77f4bad18a22ed2f4e05d5d9255b5cd13b552655836cb02ff70e7a60bcce6293","md5":"159b5bcfb3b3c8b3b18f2eb92d70f6d8","sha256":"209e2f2f961c225d627714a351e8beb6266e6498653353d15ba9abc11f140553"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-win32.whl","has_sig":false,"md5_digest":"159b5bcfb3b3c8b3b18f2eb92d70f6d8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1246285,"upload_time":"2023-07-05T15:35:11","upload_time_iso_8601":"2023-07-05T15:35:11.490713Z","url":"https://files.pythonhosted.org/packages/77/f4/bad18a22ed2f4e05d5d9255b5cd13b552655836cb02ff70e7a60bcce6293/capstone-5.0.0.post1-py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a6f68253277e840951a0910a7d20a0557c95fe4e3ee0a7acc3a10d642c0fb8b0"},"digests":{"blake2b_256":"1d4bcc9c5162f08666e1adb1134a1129d4471056d077b015add00a6a3b8814f9","md5":"b6e426c65385fca3d409fc5c418c458b","sha256":"bb3cc7bc4dbacbdc4ff80c80a003b022424bcb98dcabe215bac2aaa7d3dbb0c3"},"downloads":-1,"filename":"capstone-5.0.0.post1-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"b6e426c65385fca3d409fc5c418c458b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1268444,"upload_time":"2023-07-05T15:35:13","upload_time_iso_8601":"2023-07-05T15:35:13.436041Z","url":"https://files.pythonhosted.org/packages/1d/4b/cc9c5162f08666e1adb1134a1129d4471056d077b015add00a6a3b8814f9/capstone-5.0.0.post1-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"de044c2ae5ef70dadd773b39d39d30f1cab54d4a27aa0af69ac1414e2338434e","md5":"f81ef17abb8f2a14e4080ad2c5f97c8a","sha256":"fe0affca395c09ce76a21c5f0fac026e74396839a220798ca5e57c54305bcf65"},"downloads":-1,"filename":"capstone-5.0.0.post1.tar.gz","has_sig":false,"md5_digest":"f81ef17abb8f2a14e4080ad2c5f97c8a","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2926420,"upload_time":"2023-07-05T15:35:15","upload_time_iso_8601":"2023-07-05T15:35:15.204414Z","url":"https://files.pythonhosted.org/packages/de/04/4c2ae5ef70dadd773b39d39d30f1cab54d4a27aa0af69ac1414e2338434e/capstone-5.0.0.post1.tar.gz","yanked":false,"yanked_reason":null}],"5.0.0rc2":[{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"3f0e7ee430c197b4c3eb1060ae52fd459d44fb129645e2ca3bb6300940b67ffb","md5":"8970b72c0cb48dda4cde90cade4da8ca","sha256":"b6f4fc3a95775415493b09e0f47c4a70cb7bb22e4d5560de32f22fd32f2e5b0f"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-macosx_10_15_x86_64.whl","has_sig":false,"md5_digest":"8970b72c0cb48dda4cde90cade4da8ca","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2295726,"upload_time":"2022-02-28T15:50:44","upload_time_iso_8601":"2022-02-28T15:50:44.414478Z","url":"https://files.pythonhosted.org/packages/3f/0e/7ee430c197b4c3eb1060ae52fd459d44fb129645e2ca3bb6300940b67ffb/capstone-5.0.0rc2-py3-none-macosx_10_15_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9e58ffd615f23302e2d07656ad33dbae0f251c8906a382080f4d1967d7bf4e66"},"digests":{"blake2b_256":"52effd04f31b00a8e32e0844a4eefba03401fb3de7a47d98ee465001bdc6d90d","md5":"977dc751cf3d708961f92657cb9c8974","sha256":"eb9982c4a9d3ef581ba6cf7ce5abfef3c4ae84f9768fd3929bba11386a471a4d"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"977dc751cf3d708961f92657cb9c8974","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2383094,"upload_time":"2023-06-18T12:21:17","upload_time_iso_8601":"2023-06-18T12:21:17.926906Z","url":"https://files.pythonhosted.org/packages/52/ef/fd04f31b00a8e32e0844a4eefba03401fb3de7a47d98ee465001bdc6d90d/capstone-5.0.0rc2-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"c6333ebf2fab0ac5b7ad4d3a98ecf4e6227060b64dfbcb03ea75744803542751","md5":"3718e8fcc14e8b42c875f4fac23b1c4b","sha256":"d862f26b55825815fb5574291386c34227d83df95b875cf7228fbaf2640eadcd"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"3718e8fcc14e8b42c875f4fac23b1c4b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2744875,"upload_time":"2022-02-28T15:50:46","upload_time_iso_8601":"2022-02-28T15:50:46.938903Z","url":"https://files.pythonhosted.org/packages/c6/33/3ebf2fab0ac5b7ad4d3a98ecf4e6227060b64dfbcb03ea75744803542751/capstone-5.0.0rc2-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"709de9c0617b26c3c4d92dc3058a7c9e7896314ee5c792f114bf76c1a1e5a06d","md5":"4ea2aae72ad2f0ea9c877e9dcc1382cb","sha256":"c4ea1fc8181e7c56225910abb87d332c9f5ddf7edd21e938285078a04cc94130"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"4ea2aae72ad2f0ea9c877e9dcc1382cb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2744845,"upload_time":"2022-02-28T15:50:49","upload_time_iso_8601":"2022-02-28T15:50:49.255141Z","url":"https://files.pythonhosted.org/packages/70/9d/e9c0617b26c3c4d92dc3058a7c9e7896314ee5c792f114bf76c1a1e5a06d/capstone-5.0.0rc2-py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"5ed82920d3c91a9ec54fdcd900136a9733f2674db8b856adee7e3b6642054b19","md5":"31a9aa3140dd466a9bb27979d5c79015","sha256":"22832b7799bc2fc08555d2ad95d661bd1e84d38e4472b5ddd48555b6c8609e2f"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","has_sig":false,"md5_digest":"31a9aa3140dd466a9bb27979d5c79015","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2817423,"upload_time":"2022-02-28T15:50:51","upload_time_iso_8601":"2022-02-28T15:50:51.497091Z","url":"https://files.pythonhosted.org/packages/5e/d8/2920d3c91a9ec54fdcd900136a9733f2674db8b856adee7e3b6642054b19/capstone-5.0.0rc2-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"bbdef9ef16b98a3a1be84e57d16b1137d4d0514676287551af309cba1e0f2ada","md5":"4a745e10344c86acbcf88ed995f9fa0e","sha256":"4f3ed835371f1c86397c5aa2218e5e1af8679bd6b30457ab7261016d92d118b7"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"4a745e10344c86acbcf88ed995f9fa0e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2817384,"upload_time":"2022-02-28T15:50:53","upload_time_iso_8601":"2022-02-28T15:50:53.958355Z","url":"https://files.pythonhosted.org/packages/bb/de/f9ef16b98a3a1be84e57d16b1137d4d0514676287551af309cba1e0f2ada/capstone-5.0.0rc2-py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"0a01b7e1d56ec975744956e9f105cd8ebcf2fe4059532f842ae6a230e22bc98a","md5":"9d46d1ae4d20ea1351cd5a48d26d18cd","sha256":"1e67897ca1802e5e099e050f6e6314d4041f8f65e4839c75a44ef45acd535f9d"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-win32.whl","has_sig":false,"md5_digest":"9d46d1ae4d20ea1351cd5a48d26d18cd","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1218380,"upload_time":"2022-02-28T15:50:55","upload_time_iso_8601":"2022-02-28T15:50:55.814795Z","url":"https://files.pythonhosted.org/packages/0a/01/b7e1d56ec975744956e9f105cd8ebcf2fe4059532f842ae6a230e22bc98a/capstone-5.0.0rc2-py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"50da200c8c7146e199d169aec8a7f08a8e9ab60b32f29da9f57c014d991f887b"},"digests":{"blake2b_256":"83be7eb69b0f4502134cbacafb2dc122f67db4878106706fd106e45bda3ccddf","md5":"953fb6110a990b3710142c235cb427ab","sha256":"621d19ec8ea3b6d035cccde9faf3f439aa4f59f170949058c6af741e7ac17fb7"},"downloads":-1,"filename":"capstone-5.0.0rc2-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"953fb6110a990b3710142c235cb427ab","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1226418,"upload_time":"2022-02-28T15:50:57","upload_time_iso_8601":"2022-02-28T15:50:57.380242Z","url":"https://files.pythonhosted.org/packages/83/be/7eb69b0f4502134cbacafb2dc122f67db4878106706fd106e45bda3ccddf/capstone-5.0.0rc2-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a66f6d98f636aba7f064e235b345667e50219b7a53b7ef8871ed7ac6bc50d3fd","md5":"f82ea613f150d0ce174fb1978103b977","sha256":"48f22d674d84f01c2aa7c7dcfe8ba5e4269708ba7463aac9f8df6e9f2bc60740"},"downloads":-1,"filename":"capstone-5.0.0rc2.tar.gz","has_sig":false,"md5_digest":"f82ea613f150d0ce174fb1978103b977","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2620665,"upload_time":"2022-02-28T15:50:59","upload_time_iso_8601":"2022-02-28T15:50:59.286742Z","url":"https://files.pythonhosted.org/packages/a6/6f/6d98f636aba7f064e235b345667e50219b7a53b7ef8871ed7ac6bc50d3fd/capstone-5.0.0rc2.tar.gz","yanked":false,"yanked_reason":null}],"5.0.0rc4":[{"comment_text":"","core-metadata":{"sha256":"2a1f49e859652f8d0b29d71f3619b494c46f031fb17934b22274d1c70f6de218"},"digests":{"blake2b_256":"53539077cfe90f05a9287755f2a4fb725b4f9fab42d0eb8fbd590ba5fb473d26","md5":"1d0c3b14434abd0ff6cfc1de03ad1274","sha256":"160ff3cb47a17f98daf3826c9e2dcdf42d3d4b17b0b40986d0eabfaa6e16dd73"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"1d0c3b14434abd0ff6cfc1de03ad1274","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2383118,"upload_time":"2023-06-18T12:51:01","upload_time_iso_8601":"2023-06-18T12:51:01.778489Z","url":"https://files.pythonhosted.org/packages/53/53/9077cfe90f05a9287755f2a4fb725b4f9fab42d0eb8fbd590ba5fb473d26/capstone-5.0.0rc4-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"88e225de9bd05bcdc10de02b395ad2ddbef4e9fad60d6de1001fcdf5086f0611"},"digests":{"blake2b_256":"7da479a08f0c9696860baf2e9fe7f6f1191790dacf271867a0a9a54a8b426ec6","md5":"6a46ec79292f06c6809de9f5a7d23f16","sha256":"8ca8fe7faefdcbf663bf2257079f773d3178e49c710ffc2f06d1498430a24aa2"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"6a46ec79292f06c6809de9f5a7d23f16","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2859050,"upload_time":"2023-06-18T12:51:03","upload_time_iso_8601":"2023-06-18T12:51:03.502824Z","url":"https://files.pythonhosted.org/packages/7d/a4/79a08f0c9696860baf2e9fe7f6f1191790dacf271867a0a9a54a8b426ec6/capstone-5.0.0rc4-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"88e225de9bd05bcdc10de02b395ad2ddbef4e9fad60d6de1001fcdf5086f0611"},"digests":{"blake2b_256":"39df13c634993589f77b665964d7e7c5a892ebeb721136b36950edc64eb25097","md5":"5085bb8cb0f39840537d68714fb06171","sha256":"9bffb347b4128417fcc3c0d1541e19ea991ffc25ac55fd61c5b6fe0fa792ef6a"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"5085bb8cb0f39840537d68714fb06171","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2859016,"upload_time":"2023-06-18T12:51:05","upload_time_iso_8601":"2023-06-18T12:51:05.510172Z","url":"https://files.pythonhosted.org/packages/39/df/13c634993589f77b665964d7e7c5a892ebeb721136b36950edc64eb25097/capstone-5.0.0rc4-py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"88e225de9bd05bcdc10de02b395ad2ddbef4e9fad60d6de1001fcdf5086f0611"},"digests":{"blake2b_256":"3ab85b5e893580349a48f2a8481d8102c2a4ae9e80ef719643fc18b2aa5e788e","md5":"0ffa15d03117dc51164e7c5948e14d05","sha256":"3d27f37a4c1cb99e462f606c1d11fce269d6524f42dd9f5a3c12524576ed6af9"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","has_sig":false,"md5_digest":"0ffa15d03117dc51164e7c5948e14d05","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2932400,"upload_time":"2023-06-18T12:51:07","upload_time_iso_8601":"2023-06-18T12:51:07.487531Z","url":"https://files.pythonhosted.org/packages/3a/b8/5b5e893580349a48f2a8481d8102c2a4ae9e80ef719643fc18b2aa5e788e/capstone-5.0.0rc4-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"88e225de9bd05bcdc10de02b395ad2ddbef4e9fad60d6de1001fcdf5086f0611"},"digests":{"blake2b_256":"1c13caecd738ebe1ca49ff6e68f5731525c96037265669325be9a616ee8c170e","md5":"e2bdc3d9811448e69b1929b5212b1b97","sha256":"4cab541f931cadf5c46fc3282968f2533753f11ca373a735d427cab5390b37ab"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"e2bdc3d9811448e69b1929b5212b1b97","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2932364,"upload_time":"2023-06-18T12:51:09","upload_time_iso_8601":"2023-06-18T12:51:09.133430Z","url":"https://files.pythonhosted.org/packages/1c/13/caecd738ebe1ca49ff6e68f5731525c96037265669325be9a616ee8c170e/capstone-5.0.0rc4-py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"79fc3caa3367908eb9ba1c9fac8c9a8662515b55a98327bf6f36feaff52c222b"},"digests":{"blake2b_256":"686b20a3bcbcb2800325edba87b8ae2f777e0fc037794afa65b0eaed162afb85","md5":"c8d21db8389406c569ab80967d71b44a","sha256":"5c1a1c7c7a31e5033f4b10c884c99f7a2f14b0eb60309bdb950367861e9af57d"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-win32.whl","has_sig":false,"md5_digest":"c8d21db8389406c569ab80967d71b44a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1245771,"upload_time":"2023-06-18T12:51:11","upload_time_iso_8601":"2023-06-18T12:51:11.290980Z","url":"https://files.pythonhosted.org/packages/68/6b/20a3bcbcb2800325edba87b8ae2f777e0fc037794afa65b0eaed162afb85/capstone-5.0.0rc4-py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"79fc3caa3367908eb9ba1c9fac8c9a8662515b55a98327bf6f36feaff52c222b"},"digests":{"blake2b_256":"16b291117fd06f4c073ec746482b6d3f505f93e948173467d08eab9e0b3acf0e","md5":"06a376c764f14a38b59faba289f45bd8","sha256":"5920c025f713432415ff3c299ccdca9715d45164232b834812867ce78b0c0d83"},"downloads":-1,"filename":"capstone-5.0.0rc4-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"06a376c764f14a38b59faba289f45bd8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1268551,"upload_time":"2023-06-18T12:51:12","upload_time_iso_8601":"2023-06-18T12:51:12.835463Z","url":"https://files.pythonhosted.org/packages/16/b2/91117fd06f4c073ec746482b6d3f505f93e948173467d08eab9e0b3acf0e/capstone-5.0.0rc4-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"724c2766bfe89b99b47d2ef831cd4d9a348a8508f9978c52e7908dab936e3370","md5":"f2ca3d60d080ba85c2a18c0db655674b","sha256":"dc19328a0a3a6fe4afd066b6388064ab7a606463870e1165e7f001993f5d05b8"},"downloads":-1,"filename":"capstone-5.0.0rc4.tar.gz","has_sig":false,"md5_digest":"f2ca3d60d080ba85c2a18c0db655674b","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2926095,"upload_time":"2023-06-18T12:51:14","upload_time_iso_8601":"2023-06-18T12:51:14.196197Z","url":"https://files.pythonhosted.org/packages/72/4c/2766bfe89b99b47d2ef831cd4d9a348a8508f9978c52e7908dab936e3370/capstone-5.0.0rc4.tar.gz","yanked":false,"yanked_reason":null}],"5.0.1":[{"comment_text":"","core-metadata":{"sha256":"62ecce1909ec14db21e8101f8b3b9e7c8fb1c9bc25558ce1b7dfdc69ce1e7cc1"},"digests":{"blake2b_256":"56c9936a81a0707fbd2650a94c9297e36c4c2cf34f51695fb1f6fd39de1b3247","md5":"29694c748b679306e3eefc3ff44a4fc5","sha256":"740a70624d3f258cf8503898dbfd968052c008ddd4fc4ab938c7046c8828c294"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"29694c748b679306e3eefc3ff44a4fc5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2387389,"upload_time":"2023-08-22T16:10:34","upload_time_iso_8601":"2023-08-22T16:10:34.969103Z","url":"https://files.pythonhosted.org/packages/56/c9/936a81a0707fbd2650a94c9297e36c4c2cf34f51695fb1f6fd39de1b3247/capstone-5.0.1-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"0ab1a66aae8e57224374cb55eb817a2096ed000bec8ec62a089a090b62666ebe"},"digests":{"blake2b_256":"5c8038c04918f2871c29599acddc72282ac820933373dda69b6efcb4cf466674","md5":"82951b91f0c4be54d2daabb71bab033c","sha256":"3f34a949699c298e88d7c9a576a2fd7685dba658a9c432bce826eeb88676cf24"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"82951b91f0c4be54d2daabb71bab033c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2862687,"upload_time":"2023-08-22T16:10:37","upload_time_iso_8601":"2023-08-22T16:10:37.510523Z","url":"https://files.pythonhosted.org/packages/5c/80/38c04918f2871c29599acddc72282ac820933373dda69b6efcb4cf466674/capstone-5.0.1-py3-none-manylinux1_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"0ab1a66aae8e57224374cb55eb817a2096ed000bec8ec62a089a090b62666ebe"},"digests":{"blake2b_256":"d6e7278a22e88c04b2dbc8e393045f34ab008ea404ec397b693bc7f729b4717c","md5":"51a30db5f1b9f5b14abce2ef9fc2dc1a","sha256":"08f16c2782e54d05c95f1d40e1ae0e58e4a57d6a6c3192f8c5ff61476f4130de"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-manylinux1_i686.whl","has_sig":false,"md5_digest":"51a30db5f1b9f5b14abce2ef9fc2dc1a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2862649,"upload_time":"2023-08-22T16:10:39","upload_time_iso_8601":"2023-08-22T16:10:39.058687Z","url":"https://files.pythonhosted.org/packages/d6/e7/278a22e88c04b2dbc8e393045f34ab008ea404ec397b693bc7f729b4717c/capstone-5.0.1-py3-none-manylinux1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"0ab1a66aae8e57224374cb55eb817a2096ed000bec8ec62a089a090b62666ebe"},"digests":{"blake2b_256":"68b4033718dfcd08a0f4a7550ddedd6247ece7685266c3cbc560432bec4ac5e4","md5":"4b257a63039fba13741dcd6d6ff24cb6","sha256":"ea8d0be06d2faa39545937fe88db239fd62227915f9744d8990439011c479f05"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","has_sig":false,"md5_digest":"4b257a63039fba13741dcd6d6ff24cb6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2937338,"upload_time":"2023-08-22T16:10:40","upload_time_iso_8601":"2023-08-22T16:10:40.884776Z","url":"https://files.pythonhosted.org/packages/68/b4/033718dfcd08a0f4a7550ddedd6247ece7685266c3cbc560432bec4ac5e4/capstone-5.0.1-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"0ab1a66aae8e57224374cb55eb817a2096ed000bec8ec62a089a090b62666ebe"},"digests":{"blake2b_256":"7b67a0236bc42752076d978b83293b00fd2e012bb1526603920e25715ce45277","md5":"d83d100777af6ab49a118814bf2c5fdb","sha256":"04223a4e5c2374f21da59c5c5a5b90471bfcef5cb938e7b32de68579cf863b7a"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-manylinux1_x86_64.whl","has_sig":false,"md5_digest":"d83d100777af6ab49a118814bf2c5fdb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2937306,"upload_time":"2023-08-22T16:10:42","upload_time_iso_8601":"2023-08-22T16:10:42.729061Z","url":"https://files.pythonhosted.org/packages/7b/67/a0236bc42752076d978b83293b00fd2e012bb1526603920e25715ce45277/capstone-5.0.1-py3-none-manylinux1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"231f27d893168ab3fda9fbccf27da81304df019f8564ae9c3b496ec15988512e"},"digests":{"blake2b_256":"12309498abe07ed52fb40bf2259c840fd2908804dba8cc603b7dcb54bcdd11d2","md5":"14f93b75b0c4ab40f8ee0d04f3fe8d6c","sha256":"4356bdee55639c4448d025dc9d8a3b6c07f2b188c62b88df3d554a84e2cd89af"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-win32.whl","has_sig":false,"md5_digest":"14f93b75b0c4ab40f8ee0d04f3fe8d6c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1250420,"upload_time":"2023-08-22T16:10:45","upload_time_iso_8601":"2023-08-22T16:10:45.193320Z","url":"https://files.pythonhosted.org/packages/12/30/9498abe07ed52fb40bf2259c840fd2908804dba8cc603b7dcb54bcdd11d2/capstone-5.0.1-py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"231f27d893168ab3fda9fbccf27da81304df019f8564ae9c3b496ec15988512e"},"digests":{"blake2b_256":"d0ddb28df50316ca193dd1275a4c47115a720796d9e1501c1888c4bfa5dc2260","md5":"6bf8101782b790492536471c5444f322","sha256":"1bfa5c81e6880caf41a31946cd6d2d069c048bcc22edf121254b501a048de675"},"downloads":-1,"filename":"capstone-5.0.1-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"6bf8101782b790492536471c5444f322","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":1272594,"upload_time":"2023-08-22T16:10:47","upload_time_iso_8601":"2023-08-22T16:10:47.106261Z","url":"https://files.pythonhosted.org/packages/d0/dd/b28df50316ca193dd1275a4c47115a720796d9e1501c1888c4bfa5dc2260/capstone-5.0.1-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"7afee6cdc4ad6e0d9603fa662d1ccba6301c0cb762a1c90a42c7146a538c24e9","md5":"de948ceed409f3bd9232b4f1097c7107","sha256":"740afacc29861db591316beefe30df382c4da08dcb0345a0d10f0cac4f8b1ee2"},"downloads":-1,"filename":"capstone-5.0.1.tar.gz","has_sig":false,"md5_digest":"de948ceed409f3bd9232b4f1097c7107","packagetype":"sdist","python_version":"source","requires_python":">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*","size":2929485,"upload_time":"2023-08-22T16:10:49","upload_time_iso_8601":"2023-08-22T16:10:49.555468Z","url":"https://files.pythonhosted.org/packages/7a/fe/e6cdc4ad6e0d9603fa662d1ccba6301c0cb762a1c90a42c7146a538c24e9/capstone-5.0.1.tar.gz","yanked":false,"yanked_reason":null}],"5.0.2":[{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"48371c5233802b3d31733ad68ed3cf639419952ae55a5a1f7789a1c45fec5421","md5":"17c286dfbb2584112c7cc75a3222c2b5","sha256":"d4148c094e33e19d0bc98e1b161143722ddd1ff5d4994a09f871d3fa22f4ef89"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"17c286dfbb2584112c7cc75a3222c2b5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2359392,"upload_time":"2024-08-12T07:55:20","upload_time_iso_8601":"2024-08-12T07:55:20.869318Z","url":"https://files.pythonhosted.org/packages/48/37/1c5233802b3d31733ad68ed3cf639419952ae55a5a1f7789a1c45fec5421/capstone-5.0.2-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"727c6556e531846de1e972384d98e3c88f0090a6021a553a0436e0898deb5375","md5":"01d7096f8b1d0207e281fe36e4fb8a43","sha256":"4ac27de0f5ba3adcfb95a1a5a0c4964aa3d2fb1c3da924ef6bc0b3533ede7367"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"01d7096f8b1d0207e281fe36e4fb8a43","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2359389,"upload_time":"2024-08-12T07:55:22","upload_time_iso_8601":"2024-08-12T07:55:22.490238Z","url":"https://files.pythonhosted.org/packages/72/7c/6556e531846de1e972384d98e3c88f0090a6021a553a0436e0898deb5375/capstone-5.0.2-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"f4402f02f5b41a0b237dea60806b4e1b5d21c68ece98eb1ee43624bebb0c496d","md5":"643d0c0298d6e344da066d34ca245c52","sha256":"d2ba67d6ab5bdd64486614915ffad5df02571093deb0dff20d5d47db32a7c467"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"643d0c0298d6e344da066d34ca245c52","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2359389,"upload_time":"2024-08-12T07:55:24","upload_time_iso_8601":"2024-08-12T07:55:24.774811Z","url":"https://files.pythonhosted.org/packages/f4/40/2f02f5b41a0b237dea60806b4e1b5d21c68ece98eb1ee43624bebb0c496d/capstone-5.0.2-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"f40f13b00d8c07035cd830de8f53b8404254de0839375a01e209cc273428a0c0","md5":"3b26997ce2f0ca8066c70d17bb9edf4c","sha256":"f694cabe9a874e214ffec4c8ac3bd01926301cf2de829b857d1a9230759ccede"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-manylinux1_i686.manylinux_2_5_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"3b26997ce2f0ca8066c70d17bb9edf4c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2941782,"upload_time":"2024-08-12T08:50:58","upload_time_iso_8601":"2024-08-12T08:50:58.805031Z","url":"https://files.pythonhosted.org/packages/f4/0f/13b00d8c07035cd830de8f53b8404254de0839375a01e209cc273428a0c0/capstone-5.0.2-py3-none-manylinux1_i686.manylinux_2_5_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"1632556818ddc901f89085cef392775c97e0d3d5ea44138436f66a22c24fa48f","md5":"4ffd3b6201ebf40b13d16ef52ce4dfb9","sha256":"9151c03c105ee5ded4cdcc2080eb0da8eb822ed27ffc79d2113226c299aa7697"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-manylinux1_i686.musllinux_1_1_i686.whl","has_sig":false,"md5_digest":"4ffd3b6201ebf40b13d16ef52ce4dfb9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2936906,"upload_time":"2024-08-12T08:50:56","upload_time_iso_8601":"2024-08-12T08:50:56.469377Z","url":"https://files.pythonhosted.org/packages/16/32/556818ddc901f89085cef392775c97e0d3d5ea44138436f66a22c24fa48f/capstone-5.0.2-py3-none-manylinux1_i686.musllinux_1_1_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"13223521abe24300533b8139c04e402334d0f9f60cf760ab6f218897a787a7bc","md5":"1a6724132098a8b48c0e7d71766ba2d9","sha256":"7edc160b8363d61e2ab14505ae9ce5e39529eee4b91c4558b170446f724ef4a1"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"1a6724132098a8b48c0e7d71766ba2d9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2921428,"upload_time":"2024-08-12T08:50:18","upload_time_iso_8601":"2024-08-12T08:50:18.702239Z","url":"https://files.pythonhosted.org/packages/13/22/3521abe24300533b8139c04e402334d0f9f60cf760ab6f218897a787a7bc/capstone-5.0.2-py3-none-manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"9273f1e47925572071ef1050dddc3e824a74d9986820449622f7de84651d1771","md5":"8dc2a98850f010df053b9cd4f599b869","sha256":"3c4720e7be3e569d3a48cf36fc37dee4dcce4dbad70077d74c4e8e72aba34d05"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-manylinux1_x86_64.musllinux_1_1_x86_64.whl","has_sig":false,"md5_digest":"8dc2a98850f010df053b9cd4f599b869","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2930520,"upload_time":"2024-08-12T08:50:20","upload_time_iso_8601":"2024-08-12T08:50:20.833776Z","url":"https://files.pythonhosted.org/packages/92/73/f1e47925572071ef1050dddc3e824a74d9986820449622f7de84651d1771/capstone-5.0.2-py3-none-manylinux1_x86_64.musllinux_1_1_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"c7462f659c0791d2eeaa32445157bb092aac61d144ba2f119eb3e1d82e381de1","md5":"7ae8a9377f6ffd882d503b3b6575c4d0","sha256":"80abdd5091662e58b0b2afefbcbb76a01f83c46ad53a51e3ce4737824714242b"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"7ae8a9377f6ffd882d503b3b6575c4d0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2829847,"upload_time":"2024-08-12T08:53:24","upload_time_iso_8601":"2024-08-12T08:53:24.789669Z","url":"https://files.pythonhosted.org/packages/c7/46/2f659c0791d2eeaa32445157bb092aac61d144ba2f119eb3e1d82e381de1/capstone-5.0.2-py3-none-manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2509ea3a33d0a35599fcb5adbdf1cfd99ddb05f632c60642d9b84a7b9cbd34c2"},"digests":{"blake2b_256":"d9989fecc2299e8a3d8a258db5d4363b6364ba1fc7d24499938a8f4f242623fa","md5":"97cf5ac8620c6683cddb17259c1886d3","sha256":"5e6bc5e3bfeeb84fa5a0c3bbeb295a4011626a3ea64e0c8e7a47bd3fbd9310b1"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-musllinux_1_1_aarch64.whl","has_sig":false,"md5_digest":"97cf5ac8620c6683cddb17259c1886d3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2848541,"upload_time":"2024-08-12T08:53:27","upload_time_iso_8601":"2024-08-12T08:53:27.141620Z","url":"https://files.pythonhosted.org/packages/d9/98/9fecc2299e8a3d8a258db5d4363b6364ba1fc7d24499938a8f4f242623fa/capstone-5.0.2-py3-none-musllinux_1_1_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"1df0d094856a2f0c3ccf0b54b2d61e8a11ec21ab13dd504bb19ff4e20e359132"},"digests":{"blake2b_256":"995ad6dba877466f78f1cb6894ea5d8db8eadcb97ba63949606efd5848b686da","md5":"cdee12c03cd22a2fac8dc855fdd330f3","sha256":"6c2074a3c2e11aceac87499b92ad043fddfef0f79221aa47b07be074021bf413"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-win32.whl","has_sig":false,"md5_digest":"cdee12c03cd22a2fac8dc855fdd330f3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1270429,"upload_time":"2024-08-12T08:44:08","upload_time_iso_8601":"2024-08-12T08:44:08.438812Z","url":"https://files.pythonhosted.org/packages/99/5a/d6dba877466f78f1cb6894ea5d8db8eadcb97ba63949606efd5848b686da/capstone-5.0.2-py3-none-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"1df0d094856a2f0c3ccf0b54b2d61e8a11ec21ab13dd504bb19ff4e20e359132"},"digests":{"blake2b_256":"5634daf758de6087ce166a90794c5a9bbda884c55e00f42d59f7c45ca651e947","md5":"14052e61f221ca6e760be97eded70158","sha256":"fb8391fc58f9fe75e64ce67aeb680d237c0eb50c259b1636fd5580dd85f8d465"},"downloads":-1,"filename":"capstone-5.0.2-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"14052e61f221ca6e760be97eded70158","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1270433,"upload_time":"2024-08-12T08:45:30","upload_time_iso_8601":"2024-08-12T08:45:30.478167Z","url":"https://files.pythonhosted.org/packages/56/34/daf758de6087ce166a90794c5a9bbda884c55e00f42d59f7c45ca651e947/capstone-5.0.2-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"97351ed46590e1b64ce656dfd77ed64873fe4aecbfd7dec29038cf183f04ec5b","md5":"9f94cf51770e2ee73e4f51af325b4980","sha256":"2bcebb5746027fbd082b5392c9f56c9f5645bdf11555fff70eedb6ed724f4d5d"},"downloads":-1,"filename":"capstone-5.0.2.tar.gz","has_sig":false,"md5_digest":"9f94cf51770e2ee73e4f51af325b4980","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2943487,"upload_time":"2024-08-12T08:45:32","upload_time_iso_8601":"2024-08-12T08:45:32.990075Z","url":"https://files.pythonhosted.org/packages/97/35/1ed46590e1b64ce656dfd77ed64873fe4aecbfd7dec29038cf183f04ec5b/capstone-5.0.2.tar.gz","yanked":false,"yanked_reason":null}],"5.0.3":[{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"cc40503cdbc0b38c5b8b5bcad47ae507b70cecbb18365a82470a46f425788061","md5":"3a6a49b9a74b4e325375bc5eef06cd9a","sha256":"5dc6b5f4d85a2ba2330473529d7b4faccd71470b489fd19a539c20b74f3c9924"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"3a6a49b9a74b4e325375bc5eef06cd9a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2176874,"upload_time":"2024-08-20T15:19:44","upload_time_iso_8601":"2024-08-20T15:19:44.511256Z","url":"https://files.pythonhosted.org/packages/cc/40/503cdbc0b38c5b8b5bcad47ae507b70cecbb18365a82470a46f425788061/capstone-5.0.3-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"603f89f13db42cd24af1c80831b6ac978a8a42ad860a35cc461ec009c281e8f3","md5":"6247311dae877d2be3a7bcf07c9ab6e2","sha256":"5917b00ddb0b3a665bcb7a623ee08bcaf4ddec783c5d2ca69f72278d6de38d2c"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"6247311dae877d2be3a7bcf07c9ab6e2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1180331,"upload_time":"2024-08-20T15:19:46","upload_time_iso_8601":"2024-08-20T15:19:46.149369Z","url":"https://files.pythonhosted.org/packages/60/3f/89f13db42cd24af1c80831b6ac978a8a42ad860a35cc461ec009c281e8f3/capstone-5.0.3-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"3679ddc8a36238791e58ec31a13c10887447b56819d934ab00d6e1371a2e94f1","md5":"6ac61ac063a809f3745cc2494310fd99","sha256":"76658b66a5f0275c942cd4daf35dca7520387689f588f127020c9130d76c4ddf"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"6ac61ac063a809f3745cc2494310fd99","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1192365,"upload_time":"2024-08-20T15:19:47","upload_time_iso_8601":"2024-08-20T15:19:47.535105Z","url":"https://files.pythonhosted.org/packages/36/79/ddc8a36238791e58ec31a13c10887447b56819d934ab00d6e1371a2e94f1/capstone-5.0.3-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"22bc39d69c65b7d58157d0c3acad9b929a3f0852c84e44b0e25b6fb89a9e1a7d","md5":"3124fa98de18a5523606f70f325d9293","sha256":"237fef7e20906bad09286554c7f8a5a744adeec4d658c5e33938bf9241b5f076"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"3124fa98de18a5523606f70f325d9293","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2829855,"upload_time":"2024-08-20T15:19:49","upload_time_iso_8601":"2024-08-20T15:19:49.353445Z","url":"https://files.pythonhosted.org/packages/22/bc/39d69c65b7d58157d0c3acad9b929a3f0852c84e44b0e25b6fb89a9e1a7d/capstone-5.0.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"24f4ae2d072d39664b7c32da9c8877f7d204692565f7c844da10e70c47730191","md5":"83a5c0ef21b18b69ddf4b230c467198e","sha256":"a6b7f3ec2346a60475d9d043b437ace5e6688fc9c4d45387476104bd2c231040"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"83a5c0ef21b18b69ddf4b230c467198e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2921407,"upload_time":"2024-08-20T15:19:51","upload_time_iso_8601":"2024-08-20T15:19:51.186650Z","url":"https://files.pythonhosted.org/packages/24/f4/ae2d072d39664b7c32da9c8877f7d204692565f7c844da10e70c47730191/capstone-5.0.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"7f1b1b200d7a32de3b2bf61ee0316385aa566d698d20af99d8e2e00e5ec4b144","md5":"a0fe3f79f848b269fd330083300c1ccf","sha256":"1f25e23052d5fa5b6709f7111d7f1250131fb5dac878b8249a4637e6ab953129"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"a0fe3f79f848b269fd330083300c1ccf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2941774,"upload_time":"2024-08-20T15:19:53","upload_time_iso_8601":"2024-08-20T15:19:53.736581Z","url":"https://files.pythonhosted.org/packages/7f/1b/1b200d7a32de3b2bf61ee0316385aa566d698d20af99d8e2e00e5ec4b144/capstone-5.0.3-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"d882dd45915b0de636ef949b9d56bd529ae52987d74db1c2d2b7feb4dee322f6","md5":"af8259e775ae447c4fe416be55ef102c","sha256":"aebb35f0cfb808aac24d2e3c745be43bcedbb863ecb0192d720faa8002983544"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"af8259e775ae447c4fe416be55ef102c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2840714,"upload_time":"2024-08-20T15:19:59","upload_time_iso_8601":"2024-08-20T15:19:59.593007Z","url":"https://files.pythonhosted.org/packages/d8/82/dd45915b0de636ef949b9d56bd529ae52987d74db1c2d2b7feb4dee322f6/capstone-5.0.3-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"6be0d3b617dd552a802760d63e29392c217266505f531c799f4b4cf3e9906eef","md5":"2233921b9eac0b1a3ca46b3f0bb2838a","sha256":"8d45fdf4ae11197234eedbd81742bd4650924f9bb3abee0b238ea63dad8001cc"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"2233921b9eac0b1a3ca46b3f0bb2838a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2937106,"upload_time":"2024-08-20T15:20:02","upload_time_iso_8601":"2024-08-20T15:20:02.066253Z","url":"https://files.pythonhosted.org/packages/6b/e0/d3b617dd552a802760d63e29392c217266505f531c799f4b4cf3e9906eef/capstone-5.0.3-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"41d45f4ba7c74420ef48cca9a16aab3d8edb72f2b50113c3b63efdc52924c0b6"},"digests":{"blake2b_256":"00883459e1124a7c1bdc02fa2870ffeecdd0fa2be2b4b3382732cd3e3b2e92f2","md5":"f4b13d6ab656d3c04c38edc62ae02ed7","sha256":"63e8544d7500b889a5feb6f7c9a939723663107dd3360ad18f36a3f6985cfd26"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"f4b13d6ab656d3c04c38edc62ae02ed7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2895850,"upload_time":"2024-08-20T15:20:04","upload_time_iso_8601":"2024-08-20T15:20:04.166617Z","url":"https://files.pythonhosted.org/packages/00/88/3459e1124a7c1bdc02fa2870ffeecdd0fa2be2b4b3382732cd3e3b2e92f2/capstone-5.0.3-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9affbb32f7efe0e0a79049b446241dc4c73e4c9041bf79cf1ea6da33a1db06d9"},"digests":{"blake2b_256":"3529f751bb52b73b0a2e6414ad4e9271fa0cba966e747c1f3351a9c46e9f1ca7","md5":"3c271376862096bed1e4c13b4d8de85f","sha256":"21d00dce9dc204a22126fe6f45a8894d03a6607182bc86f14fc9bd1d1d3897ed"},"downloads":-1,"filename":"capstone-5.0.3-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"3c271376862096bed1e4c13b4d8de85f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1270430,"upload_time":"2024-08-20T15:20:06","upload_time_iso_8601":"2024-08-20T15:20:06.092017Z","url":"https://files.pythonhosted.org/packages/35/29/f751bb52b73b0a2e6414ad4e9271fa0cba966e747c1f3351a9c46e9f1ca7/capstone-5.0.3-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2745d811f0f3b345c8882b9179f7e310f222ba6af45f0cc729028cbf35c6ce03","md5":"22674cd78f6372207e64ec8de371e7fe","sha256":"1f15616c0528f5268f2dc0a81708483e605ce71961b02a01a791230b51fe862d"},"downloads":-1,"filename":"capstone-5.0.3.tar.gz","has_sig":false,"md5_digest":"22674cd78f6372207e64ec8de371e7fe","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2943858,"upload_time":"2024-08-20T15:20:08","upload_time_iso_8601":"2024-08-20T15:20:08.044955Z","url":"https://files.pythonhosted.org/packages/27/45/d811f0f3b345c8882b9179f7e310f222ba6af45f0cc729028cbf35c6ce03/capstone-5.0.3.tar.gz","yanked":false,"yanked_reason":null}],"5.0.4":[{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"6076ac25913f14f92d9e1baa1a12f326ac9c127b47a9a44d1920884ac1804d83","md5":"b73a4573fddead26073672c8f9cff10d","sha256":"6b58d06e7b8c8c2d2c6324c6c5808e5a07ac06a8b2869c1d36aeaa01cbcb11c8"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"b73a4573fddead26073672c8f9cff10d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2177054,"upload_time":"2025-01-16T04:38:32","upload_time_iso_8601":"2025-01-16T04:38:32.447213Z","url":"https://files.pythonhosted.org/packages/60/76/ac25913f14f92d9e1baa1a12f326ac9c127b47a9a44d1920884ac1804d83/capstone-5.0.4-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"e77c90530daa9a89e785ee5fca5edb31060f068fd6daad737dbb7bc8cc916d63","md5":"726b60233bac0554faabc3193e0e2e9a","sha256":"e3055c9f9473450ce8b7bcaf8e2b30dccf422bc7801ec48ec5c876d292fd214e"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"726b60233bac0554faabc3193e0e2e9a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1180186,"upload_time":"2025-01-16T04:38:36","upload_time_iso_8601":"2025-01-16T04:38:36.518218Z","url":"https://files.pythonhosted.org/packages/e7/7c/90530daa9a89e785ee5fca5edb31060f068fd6daad737dbb7bc8cc916d63/capstone-5.0.4-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"5f16fce3a05a63921e1c1a03e219c4b5a98ea98f977a1c888cea95299bf10a3b","md5":"7a18f217feb2628917816828b74431b7","sha256":"32ea5c1741b37df42506cd69e6131c0ff3680863609245d76d03ec89e6e6b56d"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"7a18f217feb2628917816828b74431b7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1192760,"upload_time":"2025-01-16T04:38:39","upload_time_iso_8601":"2025-01-16T04:38:39.405882Z","url":"https://files.pythonhosted.org/packages/5f/16/fce3a05a63921e1c1a03e219c4b5a98ea98f977a1c888cea95299bf10a3b/capstone-5.0.4-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"68f271263639ce13c883026e250e9e1ef71612953ea6ef8ffd0ff7fb7ac90c65","md5":"1e647c4efcf1e170b1b38967573129af","sha256":"5bb55818ef5e445726b182a230d87ee942d5abf9d173f4925b3e7523397b3cfa"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"1e647c4efcf1e170b1b38967573129af","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458296,"upload_time":"2025-01-16T04:38:41","upload_time_iso_8601":"2025-01-16T04:38:41.732476Z","url":"https://files.pythonhosted.org/packages/68/f2/71263639ce13c883026e250e9e1ef71612953ea6ef8ffd0ff7fb7ac90c65/capstone-5.0.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"97401239ee8a563da72d0687ff216f0600fabacc5058a7f9130995ca9d996058","md5":"cdfe39a6d66cec7f9f8483cd0349cf6b","sha256":"2b0af39e015b4d4de863ba823cce99a600d5984d62012503914c277623c31635"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"cdfe39a6d66cec7f9f8483cd0349cf6b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1481602,"upload_time":"2025-01-16T04:38:43","upload_time_iso_8601":"2025-01-16T04:38:43.313956Z","url":"https://files.pythonhosted.org/packages/97/40/1239ee8a563da72d0687ff216f0600fabacc5058a7f9130995ca9d996058/capstone-5.0.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"c4303498f43d936e39369d44c0d27155f65a35dd98c3db1bd8682394fba3b75c","md5":"8d2c4bcc170972343133e0ee9378b06e","sha256":"6eac52bd3d718c43b91ee252b0c59b695820c81d33aa0ceca7e59ebffb6a0a75"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"8d2c4bcc170972343133e0ee9378b06e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1480730,"upload_time":"2025-01-16T04:38:45","upload_time_iso_8601":"2025-01-16T04:38:45.839036Z","url":"https://files.pythonhosted.org/packages/c4/30/3498f43d936e39369d44c0d27155f65a35dd98c3db1bd8682394fba3b75c/capstone-5.0.4-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"b41cc917da6c712607d3ad609a481d00d4a40b4befe38e4ecde7fa878de48efa","md5":"919d15c0d8b726a7a19ee7fb2fcccbf8","sha256":"79ba42d36645b4c7fa6adc8b608a9f24254afafac0d141fcf63bb489bda98792"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"919d15c0d8b726a7a19ee7fb2fcccbf8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458040,"upload_time":"2025-01-16T04:38:47","upload_time_iso_8601":"2025-01-16T04:38:47.818112Z","url":"https://files.pythonhosted.org/packages/b4/1c/c917da6c712607d3ad609a481d00d4a40b4befe38e4ecde7fa878de48efa/capstone-5.0.4-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"bf0330e7ff63cd7cd2f8cda9e93dd263c9de8397ec466e196546c2c13a437760","md5":"78fae02e31eccb60485f29101873eaf6","sha256":"04d74a2fc6ea15cf67270d1a369e12cb24e4d820933a2f3d0118486de62dc5fe"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"78fae02e31eccb60485f29101873eaf6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1484182,"upload_time":"2025-01-16T04:38:50","upload_time_iso_8601":"2025-01-16T04:38:50.399497Z","url":"https://files.pythonhosted.org/packages/bf/03/30e7ff63cd7cd2f8cda9e93dd263c9de8397ec466e196546c2c13a437760/capstone-5.0.4-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"09fce83bbfdcb4d08c6f93d8fed51a6ddad237f8f2ae5c2987bf3b5167a6c9ce"},"digests":{"blake2b_256":"74f377293434fff43efa3737966558fecd4096dece1d270d3301c28d881b5460","md5":"863ca2f6437caba03c15ec5892cb40de","sha256":"e52473bdebdfffc39376cf6617d61730ad69ad742146a65a80b65b445cb2f464"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"863ca2f6437caba03c15ec5892cb40de","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1485341,"upload_time":"2025-01-16T04:38:52","upload_time_iso_8601":"2025-01-16T04:38:52.298128Z","url":"https://files.pythonhosted.org/packages/74/f3/77293434fff43efa3737966558fecd4096dece1d270d3301c28d881b5460/capstone-5.0.4-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"8590d0689305761a2ab565e55ae91511d26dc4e8e28144a09b0f422210145c73"},"digests":{"blake2b_256":"de8cb43502c0b029b45f51a06106ad4ad0f6a25b989e6bb7def408a147100526","md5":"b50b338a4cb03a283c669064391f155d","sha256":"3f98356e2271cdd974f182b802c14db5c9bd7ba13360ddcff98e30739a630a47"},"downloads":-1,"filename":"capstone-5.0.4-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"b50b338a4cb03a283c669064391f155d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1271242,"upload_time":"2025-01-16T04:38:54","upload_time_iso_8601":"2025-01-16T04:38:54.838794Z","url":"https://files.pythonhosted.org/packages/de/8c/b43502c0b029b45f51a06106ad4ad0f6a25b989e6bb7def408a147100526/capstone-5.0.4-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"32b962e7c3ee14f12e0a8d5e82592cc3faa12122666d60e4f464a21d98aa3641","md5":"0655c4b6e1db2dede8b25f1990fed367","sha256":"bbdf9f4e2ead2b81213358ee3cf4a9e4e4873fa01657daecd88da56f32b52256"},"downloads":-1,"filename":"capstone-5.0.4.tar.gz","has_sig":false,"md5_digest":"0655c4b6e1db2dede8b25f1990fed367","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2944026,"upload_time":"2025-01-16T04:38:57","upload_time_iso_8601":"2025-01-16T04:38:57.284953Z","url":"https://files.pythonhosted.org/packages/32/b9/62e7c3ee14f12e0a8d5e82592cc3faa12122666d60e4f464a21d98aa3641/capstone-5.0.4.tar.gz","yanked":false,"yanked_reason":null}],"5.0.5":[{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"544a4eb99fa4daf4d3035cfd52790b2ae67810e5663f71797ee5025977464c13","md5":"954e9160e28777b3801c72f738081bef","sha256":"24db89d74b571659fe6212e756795cd5d394378c50e19e41dbcfb6c087c2f87d"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"954e9160e28777b3801c72f738081bef","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2177052,"upload_time":"2025-01-17T02:39:20","upload_time_iso_8601":"2025-01-17T02:39:20.657596Z","url":"https://files.pythonhosted.org/packages/54/4a/4eb99fa4daf4d3035cfd52790b2ae67810e5663f71797ee5025977464c13/capstone-5.0.5-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"2fccc7e6a8fef919b28fbfe8a5c8955b40bbe998f84f791699246d7e70f5cdb6","md5":"94d3205611d69032c826e6c497c150c2","sha256":"15f4b85df176999bbf7eb3f53f0cf2cee728254600c1be21442e2581189309e9"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"94d3205611d69032c826e6c497c150c2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1180188,"upload_time":"2025-01-17T02:39:24","upload_time_iso_8601":"2025-01-17T02:39:24.681039Z","url":"https://files.pythonhosted.org/packages/2f/cc/c7e6a8fef919b28fbfe8a5c8955b40bbe998f84f791699246d7e70f5cdb6/capstone-5.0.5-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"1a5be7ee66ebec55da1e0ea841de62ba5e971fb8fe7b12a49215fdaa15d1b9f9","md5":"492b346ca77cb3903941ecfd620c0a68","sha256":"5416621ac2d243d89b788f1309b143ea1f400da3eb5c47c6a87f1add99732a83"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"492b346ca77cb3903941ecfd620c0a68","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1192762,"upload_time":"2025-01-17T02:39:27","upload_time_iso_8601":"2025-01-17T02:39:27.354313Z","url":"https://files.pythonhosted.org/packages/1a/5b/e7ee66ebec55da1e0ea841de62ba5e971fb8fe7b12a49215fdaa15d1b9f9/capstone-5.0.5-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"fb42a68064f021d55be5079c21da963f3347d0979476da268b61cb80a7527229","md5":"6f7ecbb3adf4d949276912c33d4ed67b","sha256":"6ef47da78f44de1cdff1519b360186681fca0097e92046a7d7203d56364f99da"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"6f7ecbb3adf4d949276912c33d4ed67b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458295,"upload_time":"2025-01-17T02:39:29","upload_time_iso_8601":"2025-01-17T02:39:29.987511Z","url":"https://files.pythonhosted.org/packages/fb/42/a68064f021d55be5079c21da963f3347d0979476da268b61cb80a7527229/capstone-5.0.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"9bb405263fe61b2a8d8211783f911283d1bd296d74bbbd6e9a1e48f6dadb76c9","md5":"011b637aac37b3d02c5718ca3685bf1c","sha256":"754968f057d9e5d9c383f2918a1d56d455bfb274bbf307f219180b16e6d5aaeb"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"011b637aac37b3d02c5718ca3685bf1c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1481602,"upload_time":"2025-01-17T02:39:32","upload_time_iso_8601":"2025-01-17T02:39:32.556963Z","url":"https://files.pythonhosted.org/packages/9b/b4/05263fe61b2a8d8211783f911283d1bd296d74bbbd6e9a1e48f6dadb76c9/capstone-5.0.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"677b4c21ee2001b110182326dd10b30f1a6f2c9227e28e9714145e473d397de8","md5":"7bf63bed00bcace353cbf8be687ce2b1","sha256":"933797f7e2a257a77c3a699316deea92efa120a10d41e22725a96fc82f0a769e"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"7bf63bed00bcace353cbf8be687ce2b1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1480729,"upload_time":"2025-01-17T02:39:36","upload_time_iso_8601":"2025-01-17T02:39:36.007879Z","url":"https://files.pythonhosted.org/packages/67/7b/4c21ee2001b110182326dd10b30f1a6f2c9227e28e9714145e473d397de8/capstone-5.0.5-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"458b9ad9a8c337d2276b25d71aabc6096243a57246bb9f16431f52c25fa70597","md5":"63d7cf2974fe8446d3014af78c29bcdf","sha256":"50b646f0c56b0cac5c993dde08b5e5eacf8b1f66031ec8d60154eae6e3c0645e"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"63d7cf2974fe8446d3014af78c29bcdf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458038,"upload_time":"2025-01-17T02:39:38","upload_time_iso_8601":"2025-01-17T02:39:38.003251Z","url":"https://files.pythonhosted.org/packages/45/8b/9ad9a8c337d2276b25d71aabc6096243a57246bb9f16431f52c25fa70597/capstone-5.0.5-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"fda29fe3a14bb6c397d072ca8332b93b7b63c57bb9c0361c8fa3a8260efd5d90","md5":"1eb09d9cbf98a38bd0b58691d436ac91","sha256":"cd35b666739d7b79066fc69fd0c145d5ceb6a4131df3db1225ec6dcfa3fe322f"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"1eb09d9cbf98a38bd0b58691d436ac91","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1484181,"upload_time":"2025-01-17T02:39:40","upload_time_iso_8601":"2025-01-17T02:39:40.313324Z","url":"https://files.pythonhosted.org/packages/fd/a2/9fe3a14bb6c397d072ca8332b93b7b63c57bb9c0361c8fa3a8260efd5d90/capstone-5.0.5-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9d368c22f8f9e9729f4140a0228b9867ade3214081f74650e3a31ef0df192d6e"},"digests":{"blake2b_256":"65086a65de9ab23ce726b680c0e75a064406d4bd2738640fc47a2a6aa679f1d0","md5":"dece9b140636967ddc6f68729f652ce2","sha256":"89dac65a1c84670ee30ccaf2ae688c4b27ad514d9dc8738a9826579051e29ecb"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"dece9b140636967ddc6f68729f652ce2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1485340,"upload_time":"2025-01-17T02:39:41","upload_time_iso_8601":"2025-01-17T02:39:41.734259Z","url":"https://files.pythonhosted.org/packages/65/08/6a65de9ab23ce726b680c0e75a064406d4bd2738640fc47a2a6aa679f1d0/capstone-5.0.5-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"7a0fe6817396d3d32a6002d44de523df1a0609972ae4b59b9c5b2dde180ed910"},"digests":{"blake2b_256":"fd77be4185108d31137e8bb536d6dc3a9222dbc15bd1e84787a3bdec9108fcb9","md5":"1ee55679d4f9f6b63124805d331c2eb9","sha256":"a03b6b42b33bb0739b2436a555e699ac91cd1d1891134269b04e359b607e50e8"},"downloads":-1,"filename":"capstone-5.0.5-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"1ee55679d4f9f6b63124805d331c2eb9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1271239,"upload_time":"2025-01-17T02:39:46","upload_time_iso_8601":"2025-01-17T02:39:46.075256Z","url":"https://files.pythonhosted.org/packages/fd/77/be4185108d31137e8bb536d6dc3a9222dbc15bd1e84787a3bdec9108fcb9/capstone-5.0.5-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a423759da7f13c2ce29ffe90ccb45eb61ffcd310b436bfb489f3dbd11fba8776","md5":"53f815c80d1d99b5798ab6b8e732e8e6","sha256":"32346f6019d5351adaaf584ffc60c1e40db6b47d1d049eb924f903eb2b073e87"},"downloads":-1,"filename":"capstone-5.0.5.tar.gz","has_sig":false,"md5_digest":"53f815c80d1d99b5798ab6b8e732e8e6","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2944153,"upload_time":"2025-01-17T02:39:47","upload_time_iso_8601":"2025-01-17T02:39:47.851140Z","url":"https://files.pythonhosted.org/packages/a4/23/759da7f13c2ce29ffe90ccb45eb61ffcd310b436bfb489f3dbd11fba8776/capstone-5.0.5.tar.gz","yanked":false,"yanked_reason":null}],"5.0.6":[{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"cd9ad9c11e090fa03dfc61a03a57ba44c6a07370f4ac5814f2a5804bfd40ee8b","md5":"b1766b450d841771e01d63fd08d5de25","sha256":"0bca16e1c3ca1b928df6103b3889dcb6df7b05392d75a0b7af3508798148b899"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"b1766b450d841771e01d63fd08d5de25","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2177082,"upload_time":"2025-03-23T16:03:27","upload_time_iso_8601":"2025-03-23T16:03:27.815339Z","url":"https://files.pythonhosted.org/packages/cd/9a/d9c11e090fa03dfc61a03a57ba44c6a07370f4ac5814f2a5804bfd40ee8b/capstone-5.0.6-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"662872a0be2325e6ee459f27cdcd835d3eee6fed5136321b5f7be41b41dc8656","md5":"0689cf2036d8d04cf52879eff367eefd","sha256":"539191906a34ad1c573ec12b787b2caf154ea41175db6ded9def00aea8151099"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"0689cf2036d8d04cf52879eff367eefd","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1180215,"upload_time":"2025-03-23T16:03:29","upload_time_iso_8601":"2025-03-23T16:03:29.409910Z","url":"https://files.pythonhosted.org/packages/66/28/72a0be2325e6ee459f27cdcd835d3eee6fed5136321b5f7be41b41dc8656/capstone-5.0.6-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"54937b8fb02661d47a2822d5b640df804ef310417144af02e6db3446f174c4b5","md5":"53ce902d749d0622d4b6275f6ae9cd01","sha256":"e0b87b283905e4fc43635ca04cf26f4a5d9e8375852e5464d38938f3a28c207a"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"53ce902d749d0622d4b6275f6ae9cd01","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1192757,"upload_time":"2025-03-23T16:03:30","upload_time_iso_8601":"2025-03-23T16:03:30.966239Z","url":"https://files.pythonhosted.org/packages/54/93/7b8fb02661d47a2822d5b640df804ef310417144af02e6db3446f174c4b5/capstone-5.0.6-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"baa2d1bdb7260ade8165182979ea16098ef3a37c01316140511a611e549dbfe3","md5":"758d58f86da298c06c4849daab6a1428","sha256":"fa7892f0c89455078c18f07d2d309fb07baa53061b8f9a63db1ea00d41a46726"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"758d58f86da298c06c4849daab6a1428","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458413,"upload_time":"2025-03-23T16:03:32","upload_time_iso_8601":"2025-03-23T16:03:32.040190Z","url":"https://files.pythonhosted.org/packages/ba/a2/d1bdb7260ade8165182979ea16098ef3a37c01316140511a611e549dbfe3/capstone-5.0.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"787fec0687bbe8f6b128f1d41d90ec7cedfd1aaaa4ecb1ae8d334acc7dad8013","md5":"7b36dfc7ac73ad0f41ddac8e345703ab","sha256":"0358855773100bb91ae6681fabce7299df83156945ba943f6211061a592c54a6"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"7b36dfc7ac73ad0f41ddac8e345703ab","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1481605,"upload_time":"2025-03-23T16:03:33","upload_time_iso_8601":"2025-03-23T16:03:33.526173Z","url":"https://files.pythonhosted.org/packages/78/7f/ec0687bbe8f6b128f1d41d90ec7cedfd1aaaa4ecb1ae8d334acc7dad8013/capstone-5.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"fc1d77bb0f79e1dacdfdcc0679c747d9ca24cc621095e09bdb665e7dd0c580ae","md5":"9e371d431c2a29d9e4ef5f177773427b","sha256":"667d6466dab1522fa5e9659be5cf1aca83e4fc3da7d15d0e5e6047f71fb46c4a"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"9e371d431c2a29d9e4ef5f177773427b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1480730,"upload_time":"2025-03-23T16:03:34","upload_time_iso_8601":"2025-03-23T16:03:34.601581Z","url":"https://files.pythonhosted.org/packages/fc/1d/77bb0f79e1dacdfdcc0679c747d9ca24cc621095e09bdb665e7dd0c580ae/capstone-5.0.6-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"726307437972f68d0b2ba13e1705a6994404c9c961afbadc342c5b6fcf1de652","md5":"8a28069205169e1849810f7c18720da4","sha256":"45c0e25500dd8d283d3b70f2e10cebfec93ab8bdaf6af9a763a0a999b4705891"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"8a28069205169e1849810f7c18720da4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1457992,"upload_time":"2025-03-23T16:03:35","upload_time_iso_8601":"2025-03-23T16:03:35.750492Z","url":"https://files.pythonhosted.org/packages/72/63/07437972f68d0b2ba13e1705a6994404c9c961afbadc342c5b6fcf1de652/capstone-5.0.6-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"0c53f371e86493a2ae659b5a493c3cc23122974e83a1f53d3a5638d7bb7ac371","md5":"02a8aadbd7613c68ca039cb911dbad89","sha256":"22f1f2f118f8fa1d1c5c90bca90e75864d55e16349b3c03aaea0e86b4a45d2a9"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"02a8aadbd7613c68ca039cb911dbad89","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1484184,"upload_time":"2025-03-23T16:03:37","upload_time_iso_8601":"2025-03-23T16:03:37.050363Z","url":"https://files.pythonhosted.org/packages/0c/53/f371e86493a2ae659b5a493c3cc23122974e83a1f53d3a5638d7bb7ac371/capstone-5.0.6-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"7a753a5544c7764c65e76138d258b8889d2141583d8b2edc672ff3164260f8a6"},"digests":{"blake2b_256":"dfc38b842ae32949c3570581164619c2f69001c6d8da566dc2e490372032b0d6","md5":"d05567f31d49108394f05e10ccafb026","sha256":"bc23cf634f51d0e53bdd04ea53ccfff7fc9060dfe58dff1e1b260ce40e5538ff"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"d05567f31d49108394f05e10ccafb026","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1485357,"upload_time":"2025-03-23T16:03:38","upload_time_iso_8601":"2025-03-23T16:03:38.133756Z","url":"https://files.pythonhosted.org/packages/df/c3/8b842ae32949c3570581164619c2f69001c6d8da566dc2e490372032b0d6/capstone-5.0.6-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"4a3734fe2261b5df032b06e0a6d5464996f10663d995a6a889959f1e73bce57e"},"digests":{"blake2b_256":"da72ff7894c2fb5716d9a3ce9c27ba34b29d991a11d8442d2ef0fcdc5564ba7e","md5":"bacff1db85092449a078b853eedaa37e","sha256":"761c3deae00b22ac697081cdae1383bb90659dd0d79387a09cf5bdbb22b17064"},"downloads":-1,"filename":"capstone-5.0.6-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"bacff1db85092449a078b853eedaa37e","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1271345,"upload_time":"2025-03-23T16:03:39","upload_time_iso_8601":"2025-03-23T16:03:39.649871Z","url":"https://files.pythonhosted.org/packages/da/72/ff7894c2fb5716d9a3ce9c27ba34b29d991a11d8442d2ef0fcdc5564ba7e/capstone-5.0.6-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"d5b01f126035a4cbc6f488b97e4bd57a46a28b6ba29ca8b938cbda840601a18a","md5":"886cc2ec3806cd2d277b2bdae9519dcc","sha256":"b11a87d67751b006b9b44428d59c99512e6d6c89cf7dff8cdd92d9065628b5a0"},"downloads":-1,"filename":"capstone-5.0.6.tar.gz","has_sig":false,"md5_digest":"886cc2ec3806cd2d277b2bdae9519dcc","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2945704,"upload_time":"2025-03-23T16:03:40","upload_time_iso_8601":"2025-03-23T16:03:40.795242Z","url":"https://files.pythonhosted.org/packages/d5/b0/1f126035a4cbc6f488b97e4bd57a46a28b6ba29ca8b938cbda840601a18a/capstone-5.0.6.tar.gz","yanked":false,"yanked_reason":null}],"5.0.7":[{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"b29198fdb020106469d2354920ffb989507f8c494d847eb9135202a0b20afe8d","md5":"d558456db82d58eaea797ce0af055dcc","sha256":"388af4ddb9224d3b4f9269673ee575b3f94f77774d48b3f1a283ad13c29a106a"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"d558456db82d58eaea797ce0af055dcc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2192836,"upload_time":"2026-02-09T22:51:42","upload_time_iso_8601":"2026-02-09T22:51:42.782191Z","url":"https://files.pythonhosted.org/packages/b2/91/98fdb020106469d2354920ffb989507f8c494d847eb9135202a0b20afe8d/capstone-5.0.7-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"b76cf02847b3385651eb00a6a27049bd12982cdd61e981b248e7f0dc8ed15756","md5":"f2db7a31a894fc1b5bd721a5974e9b13","sha256":"a9f64e3d75d8c4d7b3d26bba153b2992aadcf6b8d57674b4ef176b4ecdd9822f"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"f2db7a31a894fc1b5bd721a5974e9b13","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1188995,"upload_time":"2026-02-09T22:51:44","upload_time_iso_8601":"2026-02-09T22:51:44.653423Z","url":"https://files.pythonhosted.org/packages/b7/6c/f02847b3385651eb00a6a27049bd12982cdd61e981b248e7f0dc8ed15756/capstone-5.0.7-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"8f4329cd1dbdb2b55bf339bca36444809503b8311dcc04898726a7e35b47ac86","md5":"0bf5f6d82653f4900e4726b3307eae01","sha256":"acb89f5bf6f625745a104a3a44819d3acea173228055c1eadc60d2282ae490bb"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"0bf5f6d82653f4900e4726b3307eae01","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1200084,"upload_time":"2026-02-09T22:51:45","upload_time_iso_8601":"2026-02-09T22:51:45.668660Z","url":"https://files.pythonhosted.org/packages/8f/43/29cd1dbdb2b55bf339bca36444809503b8311dcc04898726a7e35b47ac86/capstone-5.0.7-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"7d32084419edcd9a3efaadf5c22166de625090fae833aad0672ddd9fa436d1e2","md5":"8d19baafbafca7d222d28963775f9819","sha256":"c58546c814567c95e4b9a63bdb8624c960cb8508855c7c767d5f108d7bc09ce2"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"8d19baafbafca7d222d28963775f9819","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458867,"upload_time":"2026-02-09T22:51:46","upload_time_iso_8601":"2026-02-09T22:51:46.800555Z","url":"https://files.pythonhosted.org/packages/7d/32/084419edcd9a3efaadf5c22166de625090fae833aad0672ddd9fa436d1e2/capstone-5.0.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"153e3a4f45dd4eda6fc8051f76bf3ed50ead6040d827000371211fbaaf057625","md5":"273b8315385dd2fdd732138c4f8fdc02","sha256":"b809a9654844ce0d35099121a851ddd2ab2689df1ff6687037babcedcaae6391"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"273b8315385dd2fdd732138c4f8fdc02","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1482184,"upload_time":"2026-02-09T22:51:48","upload_time_iso_8601":"2026-02-09T22:51:48.467316Z","url":"https://files.pythonhosted.org/packages/15/3e/3a4f45dd4eda6fc8051f76bf3ed50ead6040d827000371211fbaaf057625/capstone-5.0.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"4ba86b4df60c822aaeb42954ea6c9fdbf3410feaa6bea6dc3f18f6c363fd1ed2","md5":"4101b77ab82ce18f5a2b4827219ecb9d","sha256":"80b0f1b93fc703c419fda8cf84cfa017fd8909be62a4e88024273126ab16f006"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"4101b77ab82ce18f5a2b4827219ecb9d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1481169,"upload_time":"2026-02-09T22:51:49","upload_time_iso_8601":"2026-02-09T22:51:49.574625Z","url":"https://files.pythonhosted.org/packages/4b/a8/6b4df60c822aaeb42954ea6c9fdbf3410feaa6bea6dc3f18f6c363fd1ed2/capstone-5.0.7-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"05244162bbc2591091dfa6c161b4a9ef1a6eccb739c20798e58f59f917a8a3d1","md5":"3882aaef99d9533b3b8f21a47c99a49c","sha256":"467716e6555d50cb3526b290f0dbdccb5f961839b1f1e299b484fb5d814173e6"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"3882aaef99d9533b3b8f21a47c99a49c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1457760,"upload_time":"2026-02-09T22:51:50","upload_time_iso_8601":"2026-02-09T22:51:50.863354Z","url":"https://files.pythonhosted.org/packages/05/24/4162bbc2591091dfa6c161b4a9ef1a6eccb739c20798e58f59f917a8a3d1/capstone-5.0.7-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"e151e3913f53ed03a8f7311b1efacbc1052811e129baa37b4f14e79da3cbc0c6","md5":"67b24b0694e924d8f71cc05fe7e89ff9","sha256":"e551311d4b6dc344fe5518ef6decf4c2dfafe37bba9ad027a53a406930bc5c63"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"67b24b0694e924d8f71cc05fe7e89ff9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1484528,"upload_time":"2026-02-09T22:51:52","upload_time_iso_8601":"2026-02-09T22:51:52.483087Z","url":"https://files.pythonhosted.org/packages/e1/51/e3913f53ed03a8f7311b1efacbc1052811e129baa37b4f14e79da3cbc0c6/capstone-5.0.7-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"6d420727782c7371638c9323fbd03b012c79f8832ef2a9400c9e56added714dd"},"digests":{"blake2b_256":"0b98a7d631f7bca9de02357637cfab1fb90a67992905f2041357ac5732c8a4cd","md5":"6d1bd7b25246977ae9e311e55ec542ce","sha256":"a13437b28b136c886600e88bee192d25adf56ba1db5597ff5a0bec758bb9c533"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"6d1bd7b25246977ae9e311e55ec542ce","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1486041,"upload_time":"2026-02-09T22:51:53","upload_time_iso_8601":"2026-02-09T22:51:53.729781Z","url":"https://files.pythonhosted.org/packages/0b/98/a7d631f7bca9de02357637cfab1fb90a67992905f2041357ac5732c8a4cd/capstone-5.0.7-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"17d76b4bb72903bf76e0c089f4ff02d8a81d65553cdeddfb0d988248ec4a9f02"},"digests":{"blake2b_256":"70392138d890a8e827636b9de9924fbc8527fe83e38b6d26605b30ac55e30ebe","md5":"aeb673f2c021cb3592282c8b6d423eb7","sha256":"4ab8bcb7da8f221ff45926ca168ca33e76f7237d06fbf3c10780002faa2670e1"},"downloads":-1,"filename":"capstone-5.0.7-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"aeb673f2c021cb3592282c8b6d423eb7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1272204,"upload_time":"2026-02-09T22:51:54","upload_time_iso_8601":"2026-02-09T22:51:54.829729Z","url":"https://files.pythonhosted.org/packages/70/39/2138d890a8e827636b9de9924fbc8527fe83e38b6d26605b30ac55e30ebe/capstone-5.0.7-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"dd9c28b11f64e2425774efb21c206a6e952cfce6e3e2ef3e4b63cdae32ccd8a5","md5":"444f7432b743705aaaba65818f699e37","sha256":"796bdd69b05fa124fc2aa2e74b9a0b3d4c4e7f3e02add5e583cf2f3bca282ede"},"downloads":-1,"filename":"capstone-5.0.7.tar.gz","has_sig":false,"md5_digest":"444f7432b743705aaaba65818f699e37","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2945245,"upload_time":"2026-02-09T22:51:56","upload_time_iso_8601":"2026-02-09T22:51:56.392050Z","url":"https://files.pythonhosted.org/packages/dd/9c/28b11f64e2425774efb21c206a6e952cfce6e3e2ef3e4b63cdae32ccd8a5/capstone-5.0.7.tar.gz","yanked":false,"yanked_reason":null}],"5.0.8":[{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"090e43263061b2cc9af157d74a2b01cd4cf45f2d58016ebc4d9ecf6f58e9ec2e","md5":"27a4b07e5ec0bb6d213e80f77bba749f","sha256":"57a9f20b70707a60e85de440e58abc62547721c825532d5a4d68120b01cf15ec"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"27a4b07e5ec0bb6d213e80f77bba749f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2195116,"upload_time":"2026-05-23T18:15:14","upload_time_iso_8601":"2026-05-23T18:15:14.685102Z","url":"https://files.pythonhosted.org/packages/09/0e/43263061b2cc9af157d74a2b01cd4cf45f2d58016ebc4d9ecf6f58e9ec2e/capstone-5.0.8-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"dce77efc904a90456e158199626e36f093364a8be7ab33e49c3bc20566a014ca","md5":"26d6b1f183e24f994498464f0a9334ba","sha256":"6fedb8ac772e0d72535aa7b01f3168f9322eae9dfc6f2a7ff4a3df4b56abe4bd"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"26d6b1f183e24f994498464f0a9334ba","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1190140,"upload_time":"2026-05-23T18:15:16","upload_time_iso_8601":"2026-05-23T18:15:16.631357Z","url":"https://files.pythonhosted.org/packages/dc/e7/7efc904a90456e158199626e36f093364a8be7ab33e49c3bc20566a014ca/capstone-5.0.8-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"edd9ffb98a26c8ba00fb60fc22e8fc15ccfac654ffdad2289b3704aa97b60c75","md5":"80babf6f5e44f5a4dbb5baea9339dacb","sha256":"9fa96a5587f24611f555e3a149d730f641041de9d18bc539b6a8195773573e3c"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"80babf6f5e44f5a4dbb5baea9339dacb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1202108,"upload_time":"2026-05-23T18:15:18","upload_time_iso_8601":"2026-05-23T18:15:18.354673Z","url":"https://files.pythonhosted.org/packages/ed/d9/ffb98a26c8ba00fb60fc22e8fc15ccfac654ffdad2289b3704aa97b60c75/capstone-5.0.8-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"e43ee217ae556d4227ffeeebf1ee4e17173a947a08fd5b22c2236a6a4e452807","md5":"2374f181d4df23377ff8a977ab1395de","sha256":"f8d985bc3eab4fd2326f57990689aef1e8d2d85f231e2ca1922e5092838d289b"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"2374f181d4df23377ff8a977ab1395de","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1460746,"upload_time":"2026-05-23T18:15:19","upload_time_iso_8601":"2026-05-23T18:15:19.692656Z","url":"https://files.pythonhosted.org/packages/e4/3e/e217ae556d4227ffeeebf1ee4e17173a947a08fd5b22c2236a6a4e452807/capstone-5.0.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"2d58ff5cff6793b5b4521fda5ffbb490b5c4462d74c11ddc72eedd7d84a48f0b","md5":"9c9923e04799826c4cbf1de23c3289d9","sha256":"22a625dc5c508dcfb558ee9def1d60627c7ca7e03c5d7848706dfc995e0340a9"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"9c9923e04799826c4cbf1de23c3289d9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1484935,"upload_time":"2026-05-23T18:15:20","upload_time_iso_8601":"2026-05-23T18:15:20.867662Z","url":"https://files.pythonhosted.org/packages/2d/58/ff5cff6793b5b4521fda5ffbb490b5c4462d74c11ddc72eedd7d84a48f0b/capstone-5.0.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"03412e48aaa8dc7c6a203780e270d69fae64950a87fbbf82398419bab9edb6dd","md5":"c0a049eba869bc31b1d290b4d75bfae2","sha256":"5cbfca6354d2737aee83a274c8f3a60b8719ef8ee086264d06cbf400ad34364c"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"c0a049eba869bc31b1d290b4d75bfae2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1483023,"upload_time":"2026-05-23T18:15:22","upload_time_iso_8601":"2026-05-23T18:15:22.481459Z","url":"https://files.pythonhosted.org/packages/03/41/2e48aaa8dc7c6a203780e270d69fae64950a87fbbf82398419bab9edb6dd/capstone-5.0.8-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"48b6e032471dcaf0179be6a2e01e9ee1ac37b3b05768a74ab34733472ed373ad","md5":"40ac6cd1f67d5d617c461df542cc04b4","sha256":"da722aed323b39439ba4358c663617df6d4d9b0cf9d5f8b10a9defb45fd224d0"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"40ac6cd1f67d5d617c461df542cc04b4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1458941,"upload_time":"2026-05-23T18:15:23","upload_time_iso_8601":"2026-05-23T18:15:23.820240Z","url":"https://files.pythonhosted.org/packages/48/b6/e032471dcaf0179be6a2e01e9ee1ac37b3b05768a74ab34733472ed373ad/capstone-5.0.8-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"ef91a00fa588911e357a962ec0dce931e9ee5eb1701ed8d6d7cd1eb299a72b71","md5":"8b0fe22b4759cb92bb7473d17876d054","sha256":"2442b98677cbc3dbc15755204147a9e8fa6be5bfd916aebd73461833a75cc27f"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"8b0fe22b4759cb92bb7473d17876d054","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1488084,"upload_time":"2026-05-23T18:15:25","upload_time_iso_8601":"2026-05-23T18:15:25.255469Z","url":"https://files.pythonhosted.org/packages/ef/91/a00fa588911e357a962ec0dce931e9ee5eb1701ed8d6d7cd1eb299a72b71/capstone-5.0.8-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d8993734d867803e4f541213e3641774ff2ff22c0e722df14f681f9acf5ce4e6"},"digests":{"blake2b_256":"71e5d2f424f3e7008a518d29b2c784b228169816d0556a9233d2b0657c94c465","md5":"392151408e21e92f58763f33a39d76d3","sha256":"21cc6bc86ec6b9cb69e3b7185cb0292ec8e93930c2f67aa904d3a5bda59cfb0d"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"392151408e21e92f58763f33a39d76d3","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1488645,"upload_time":"2026-05-23T18:15:26","upload_time_iso_8601":"2026-05-23T18:15:26.577553Z","url":"https://files.pythonhosted.org/packages/71/e5/d2f424f3e7008a518d29b2c784b228169816d0556a9233d2b0657c94c465/capstone-5.0.8-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"65681d1d6bdc50f9a0d887153852d1797cab98cf21837d5596102a6ba7062926"},"digests":{"blake2b_256":"2d516cd73b489040a84420844ea14db8436ec64a3f01b981d9914c5391e6168b","md5":"8f5bff9891d72fc692303d75cbd408e6","sha256":"49dd7969a6e4245f284b51a1f9247d79335125a2fa7f10a4b924c5d7ddebda53"},"downloads":-1,"filename":"capstone-5.0.8-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"8f5bff9891d72fc692303d75cbd408e6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1273257,"upload_time":"2026-05-23T18:15:28","upload_time_iso_8601":"2026-05-23T18:15:28.182545Z","url":"https://files.pythonhosted.org/packages/2d/51/6cd73b489040a84420844ea14db8436ec64a3f01b981d9914c5391e6168b/capstone-5.0.8-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"f8647222574999dbfe1ecf2cbe63b7acb3521ae390f2ad377df8a6846ead029d","md5":"4b96ef64a9c1c6329fffc979a6f13fc3","sha256":"6dd5d56011533b8452325d3aa586ba3788ecbf843fc976ec6ae2833c86481e72"},"downloads":-1,"filename":"capstone-5.0.8.tar.gz","has_sig":false,"md5_digest":"4b96ef64a9c1c6329fffc979a6f13fc3","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2947140,"upload_time":"2026-05-23T18:15:29","upload_time_iso_8601":"2026-05-23T18:15:29.924193Z","url":"https://files.pythonhosted.org/packages/f8/64/7222574999dbfe1ecf2cbe63b7acb3521ae390f2ad377df8a6846ead029d/capstone-5.0.8.tar.gz","yanked":false,"yanked_reason":null}],"5.0.9":[{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"daf343f4dbfc36c7740d512621a9d42b276ac21bb6ca7cb974d4c8a19060d387","md5":"58080be026c61a6508f87996d218add1","sha256":"58a874d9a6cb15122135b1385a782e5b54c8a4d9396161b6498465046d2e0442"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"58080be026c61a6508f87996d218add1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2195391,"upload_time":"2026-05-28T16:05:45","upload_time_iso_8601":"2026-05-28T16:05:45.515122Z","url":"https://files.pythonhosted.org/packages/da/f3/43f4dbfc36c7740d512621a9d42b276ac21bb6ca7cb974d4c8a19060d387/capstone-5.0.9-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"7074d00de02c62ce864c6b43796c524516ea064e3e6fc1327d452f78270e8323","md5":"f87ae5e22f327194c122f1275b6839eb","sha256":"8c4a1d7134d7d5290e5d77066500385f2c7a4bf66835ccbfde5180042d508b3c"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"f87ae5e22f327194c122f1275b6839eb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1190392,"upload_time":"2026-05-28T16:05:46","upload_time_iso_8601":"2026-05-28T16:05:46.953126Z","url":"https://files.pythonhosted.org/packages/70/74/d00de02c62ce864c6b43796c524516ea064e3e6fc1327d452f78270e8323/capstone-5.0.9-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"429a4eecfbc94961cda70301fd13de69042be1943bee456e37bc1369840601b1","md5":"551a21b8a6b8907258cd4d086c63f700","sha256":"fc269c5082e17d7f9f265cd6980e2fdc6ab572df913951d76db0357e06b8001d"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"551a21b8a6b8907258cd4d086c63f700","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1202361,"upload_time":"2026-05-28T16:05:48","upload_time_iso_8601":"2026-05-28T16:05:48.100420Z","url":"https://files.pythonhosted.org/packages/42/9a/4eecfbc94961cda70301fd13de69042be1943bee456e37bc1369840601b1/capstone-5.0.9-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"45d9dbeadb9fcd461e608ce79b1cb647fed6baa812fa6e1c68b0ba5ef81291af","md5":"24c96ac5c997597d26de2fa11ac71281","sha256":"41772ad0c71aa5d3e97d541e802593c2e71fb94ac7e20d4202f97ce2a3eb8ed5"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"24c96ac5c997597d26de2fa11ac71281","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1461016,"upload_time":"2026-05-28T16:05:49","upload_time_iso_8601":"2026-05-28T16:05:49.554296Z","url":"https://files.pythonhosted.org/packages/45/d9/dbeadb9fcd461e608ce79b1cb647fed6baa812fa6e1c68b0ba5ef81291af/capstone-5.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"d13917747862222bb062e86b501f1f148d5ff589b77908b080d30f7f085cbfb7","md5":"b2a99baecbecf1ac59138255c3920673","sha256":"273fd8d747d2e35c88f91450be51a603ecfaafb00d96d9f315dcb8689c86193e"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"b2a99baecbecf1ac59138255c3920673","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1485316,"upload_time":"2026-05-28T16:05:50","upload_time_iso_8601":"2026-05-28T16:05:50.721482Z","url":"https://files.pythonhosted.org/packages/d1/39/17747862222bb062e86b501f1f148d5ff589b77908b080d30f7f085cbfb7/capstone-5.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"12569a694f60f5b26612039d975c1c84d2ad8fd0ad839b0b1058dbe68dd32b0b","md5":"23df4f5fca6ddb2b867fd816b19ea302","sha256":"1f5871b57e987d5bf23b531fbe868211b74ad750fa9b830a3d3cdc4956bc0ae3"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"23df4f5fca6ddb2b867fd816b19ea302","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1483221,"upload_time":"2026-05-28T16:05:51","upload_time_iso_8601":"2026-05-28T16:05:51.925416Z","url":"https://files.pythonhosted.org/packages/12/56/9a694f60f5b26612039d975c1c84d2ad8fd0ad839b0b1058dbe68dd32b0b/capstone-5.0.9-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"b974c178ac241892bb3668b633065bdbe6dc719c2aa54668d68a8e23a6753525","md5":"2d994a6cf8e369be2633c089c7e8da04","sha256":"69064219c814ad64af35469a7c4ddd19b730cacb96a1a796435ccde0e1567d05"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"2d994a6cf8e369be2633c089c7e8da04","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1459140,"upload_time":"2026-05-28T16:05:53","upload_time_iso_8601":"2026-05-28T16:05:53.182900Z","url":"https://files.pythonhosted.org/packages/b9/74/c178ac241892bb3668b633065bdbe6dc719c2aa54668d68a8e23a6753525/capstone-5.0.9-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"7bf33865a0371603994f8bf521595b3072080bfe1b715f8bd080988d026dd2a1","md5":"7602bf93e152cfe39738a325e07a98d6","sha256":"0cc3b1ec319ab0530efc6b181491b77dd3373c81b6dbcf2f05a80e3d8dd61d5e"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"7602bf93e152cfe39738a325e07a98d6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1488205,"upload_time":"2026-05-28T16:05:54","upload_time_iso_8601":"2026-05-28T16:05:54.310060Z","url":"https://files.pythonhosted.org/packages/7b/f3/3865a0371603994f8bf521595b3072080bfe1b715f8bd080988d026dd2a1/capstone-5.0.9-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"09a139a575aa27a35b43b0ad93065a1803dba39038060eccfb29031d82e3fb2c","md5":"bd1ecbf5e4353f70cf66f5fb71f0e2ed","sha256":"cfec34e6e01472fe60850c87c5bea9918c274fa2a605b510e6489bf87c0c9960"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"bd1ecbf5e4353f70cf66f5fb71f0e2ed","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1488865,"upload_time":"2026-05-28T16:05:55","upload_time_iso_8601":"2026-05-28T16:05:55.603444Z","url":"https://files.pythonhosted.org/packages/09/a1/39a575aa27a35b43b0ad93065a1803dba39038060eccfb29031d82e3fb2c/capstone-5.0.9-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"be4a51b083e6175d370ab2d0cfac1a32d0ade1dfe9dd7525155f353a89ad3332"},"digests":{"blake2b_256":"50e66f06fdb6a9ed32b2f7cd9c036b92d5324112c3ef7080f2c71efc367d40dd","md5":"9703d55a5ad8058f0fe3bbc10a835ea7","sha256":"732cedbbb56d42e723f14d7af6387f1454194a820b4b96b56d1e53f865ef85d0"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"9703d55a5ad8058f0fe3bbc10a835ea7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1273459,"upload_time":"2026-05-28T16:05:56","upload_time_iso_8601":"2026-05-28T16:05:56.730987Z","url":"https://files.pythonhosted.org/packages/50/e6/6f06fdb6a9ed32b2f7cd9c036b92d5324112c3ef7080f2c71efc367d40dd/capstone-5.0.9-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"39016516910f546fbb996068207b9dd0229b14bc8dae223114d5e0e27d3cad11","md5":"c96e4328d7e2f774800f5d11b8ec5e15","sha256":"0429af292ddc604d3c9344696807e281d5e728db029f00e6a4ea9e3bff1aac9e"},"downloads":-1,"filename":"capstone-5.0.9.tar.gz","has_sig":false,"md5_digest":"c96e4328d7e2f774800f5d11b8ec5e15","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2947300,"upload_time":"2026-05-28T16:05:57","upload_time_iso_8601":"2026-05-28T16:05:57.968473Z","url":"https://files.pythonhosted.org/packages/39/01/6516910f546fbb996068207b9dd0229b14bc8dae223114d5e0e27d3cad11/capstone-5.0.9.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a1":[{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"493decd07ab0e4fe94f8641f4d44f46568405a32cfeea08237fa722e4c323e71","md5":"25a742b392f089277017f6361d132efb","sha256":"e81a551a85f72351df0344dcd806218d75214a31b33e6ebc0a05fbe7fd61ab9c"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"25a742b392f089277017f6361d132efb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":3268747,"upload_time":"2024-09-30T16:00:38","upload_time_iso_8601":"2024-09-30T16:00:38.238147Z","url":"https://files.pythonhosted.org/packages/49/3d/ecd07ab0e4fe94f8641f4d44f46568405a32cfeea08237fa722e4c323e71/capstone-6.0.0a1-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"df9340fee247aecdd69d23c7e10ed8ecb2f42f7518644997a65bf7569cc9c2fc","md5":"66620577a32059b0091b662a4a6661f5","sha256":"7274d1645d397052d85bc6948174ee9b57ef60820126d9be916ff88613aa2a45"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"66620577a32059b0091b662a4a6661f5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1773825,"upload_time":"2024-09-30T16:00:39","upload_time_iso_8601":"2024-09-30T16:00:39.899676Z","url":"https://files.pythonhosted.org/packages/df/93/40fee247aecdd69d23c7e10ed8ecb2f42f7518644997a65bf7569cc9c2fc/capstone-6.0.0a1-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"5447fec2c295b12525ee1262583e63e3dba3475a1886332fa17db08c05ae7219","md5":"f6d6310ccbf8c9afb13ef83b17827ec8","sha256":"ef24a1c4bf03d147b29e8b7591cc7ff1922dc8d374fba7e70cc5d7c0b53fc580"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"f6d6310ccbf8c9afb13ef83b17827ec8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1840113,"upload_time":"2024-09-30T16:00:41","upload_time_iso_8601":"2024-09-30T16:00:41.841472Z","url":"https://files.pythonhosted.org/packages/54/47/fec2c295b12525ee1262583e63e3dba3475a1886332fa17db08c05ae7219/capstone-6.0.0a1-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"ef64038a4fef0b54ff0d3d3fd1b540b43ae1186f66b1b8e332bdf81da852330f","md5":"ab02a53bd5b97400126b251c0a9eeda0","sha256":"eed9155783da66467d2f3bcd11aab558f1cc0053858d8ce16ca9abb0f0368c70"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"ab02a53bd5b97400126b251c0a9eeda0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2153374,"upload_time":"2024-09-30T16:00:43","upload_time_iso_8601":"2024-09-30T16:00:43.631116Z","url":"https://files.pythonhosted.org/packages/ef/64/038a4fef0b54ff0d3d3fd1b540b43ae1186f66b1b8e332bdf81da852330f/capstone-6.0.0a1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"058d30d4683979562203078260db65524362bd968f6602fbc5d5ee9f8f6da24e","md5":"743ba854595710f9f9914c93d8378dc1","sha256":"6835f08044b8a237e3b626c9cdb1892794f22f23608aca0f28fc7f8ef6f71e2e"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"743ba854595710f9f9914c93d8378dc1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2194829,"upload_time":"2024-09-30T16:00:45","upload_time_iso_8601":"2024-09-30T16:00:45.056731Z","url":"https://files.pythonhosted.org/packages/05/8d/30d4683979562203078260db65524362bd968f6602fbc5d5ee9f8f6da24e/capstone-6.0.0a1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"6e335ce7658c75994317b0c1de1201199f8eb59356e8423c4cba26b82f923e65","md5":"171e52635ef1d6f97f4f880e68f5be4d","sha256":"6953e87d722a843ff6495a9d47a1970fc740538a7da1fc3c7fb060eb56ea0265"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"171e52635ef1d6f97f4f880e68f5be4d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2198506,"upload_time":"2024-09-30T16:00:46","upload_time_iso_8601":"2024-09-30T16:00:46.796007Z","url":"https://files.pythonhosted.org/packages/6e/33/5ce7658c75994317b0c1de1201199f8eb59356e8423c4cba26b82f923e65/capstone-6.0.0a1-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"847b7e953389d9d5dca1899dc63a0328a68f3d9c6d48184bac8bd897b57d4863","md5":"5b3454a86907cfbe994abb87e7be2a37","sha256":"808bbc7224a30fdc714a84838e26de78b0e41d8957cfb85145bb49e3b14ee566"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"5b3454a86907cfbe994abb87e7be2a37","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2158239,"upload_time":"2024-09-30T16:00:48","upload_time_iso_8601":"2024-09-30T16:00:48.263116Z","url":"https://files.pythonhosted.org/packages/84/7b/7e953389d9d5dca1899dc63a0328a68f3d9c6d48184bac8bd897b57d4863/capstone-6.0.0a1-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"dc257a1dc41a4b4345cbbdc5858ce9ed6589f876994830b79b51e19a41057ad9","md5":"9afad66368b7cbfc0d9f9ca8602fbc68","sha256":"7ca88a6a27bcfd4cd3152159962ab4dcf98c242ebc9eb9116aaa8f86fd18f60d"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"9afad66368b7cbfc0d9f9ca8602fbc68","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2193030,"upload_time":"2024-09-30T16:00:50","upload_time_iso_8601":"2024-09-30T16:00:50.138900Z","url":"https://files.pythonhosted.org/packages/dc/25/7a1dc41a4b4345cbbdc5858ce9ed6589f876994830b79b51e19a41057ad9/capstone-6.0.0a1-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"a97121e6068d6375d8c6ee1bb2e1113ac5072bb377bb8f9f96441678c4779ccf"},"digests":{"blake2b_256":"0c4fd9f0dc50d8adfa131cbe97e8b392d99f55876512460dfe1564fbeb0a9148","md5":"722630650a57cc51f41335e6b07d6948","sha256":"ba7614b76d6cb5b158c6a15575f64aad890d9975da69d85caf3666254dcecb39"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"722630650a57cc51f41335e6b07d6948","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2185093,"upload_time":"2024-09-30T16:00:51","upload_time_iso_8601":"2024-09-30T16:00:51.575213Z","url":"https://files.pythonhosted.org/packages/0c/4f/d9f0dc50d8adfa131cbe97e8b392d99f55876512460dfe1564fbeb0a9148/capstone-6.0.0a1-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"769150d52e1a028cc4e926079720535d7732c42b7cb9135e08a350e8253a816a"},"digests":{"blake2b_256":"4b2b607efaf336ed41cdf8ef4df3432bdbafd4675268bab91fefa0ec6ef226ea","md5":"a11a1deae5650b4aafdba041faea054d","sha256":"65220238057bd5eaff9b6990d6180a3c78a2a591326be2f12a6b57d453039f14"},"downloads":-1,"filename":"capstone-6.0.0a1-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"a11a1deae5650b4aafdba041faea054d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1921086,"upload_time":"2024-09-30T16:00:57","upload_time_iso_8601":"2024-09-30T16:00:57.979033Z","url":"https://files.pythonhosted.org/packages/4b/2b/607efaf336ed41cdf8ef4df3432bdbafd4675268bab91fefa0ec6ef226ea/capstone-6.0.0a1-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"3cd38dd39fe31323abe482a1249f5533ee05b610f35b586d0be3d2c382f5baf0","md5":"88b328f337470dc5331212bb022253e3","sha256":"5585937eb1e5a7ba0568c26e02fd896470a47e5bdff7661e82c911de3c20b793"},"downloads":-1,"filename":"capstone-6.0.0a1.tar.gz","has_sig":false,"md5_digest":"88b328f337470dc5331212bb022253e3","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":4516977,"upload_time":"2024-09-30T16:00:59","upload_time_iso_8601":"2024-09-30T16:00:59.757764Z","url":"https://files.pythonhosted.org/packages/3c/d3/8dd39fe31323abe482a1249f5533ee05b610f35b586d0be3d2c382f5baf0/capstone-6.0.0a1.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a2":[{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"caca8289b40b90b196cefa5cad46c8e26a02df2757d958ea137bf2201f12f8f8","md5":"8da7c629a6101b856d3d414ce97fdadd","sha256":"268fab4b42251938384c805cb6546ad2efa94bdae2a440338d5ee037022595a4"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"8da7c629a6101b856d3d414ce97fdadd","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":3410153,"upload_time":"2024-11-24T16:55:00","upload_time_iso_8601":"2024-11-24T16:55:00.697774Z","url":"https://files.pythonhosted.org/packages/ca/ca/8289b40b90b196cefa5cad46c8e26a02df2757d958ea137bf2201f12f8f8/capstone-6.0.0a2-cp310-cp310-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"a314ce41a7440edc9ccee5b3e6f84b94570eb1b2b63bdf1f36f31d60155ef28b","md5":"e70574dc69f62a809c22251a410c5f35","sha256":"a60a2d86890cf8ac056dba6635fe3ff21a13224a5e59c962b92e97b0b6f7e473"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"e70574dc69f62a809c22251a410c5f35","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1848686,"upload_time":"2024-11-24T16:55:03","upload_time_iso_8601":"2024-11-24T16:55:03.254257Z","url":"https://files.pythonhosted.org/packages/a3/14/ce41a7440edc9ccee5b3e6f84b94570eb1b2b63bdf1f36f31d60155ef28b/capstone-6.0.0a2-cp310-cp310-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"4b36965f1563bdf64b5e8d62d136c67f998e72482ab8158af8394f2da584a20a","md5":"d660950dba78cd3391e9c1d552c86812","sha256":"9bf4befdeec95eb7193406d6c13ea6341575316b248078feb1526928e5771918"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"d660950dba78cd3391e9c1d552c86812","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1916434,"upload_time":"2024-11-24T16:55:05","upload_time_iso_8601":"2024-11-24T16:55:05.633725Z","url":"https://files.pythonhosted.org/packages/4b/36/965f1563bdf64b5e8d62d136c67f998e72482ab8158af8394f2da584a20a/capstone-6.0.0a2-cp310-cp310-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"0c2998cf339b9e30a82074065e1a2ea996ae081bc0be4b4a59440f70ebfd789c","md5":"8f0d75bfa6aaf9ba9278f5cdff04375d","sha256":"5326687599ca5c9724b90cda0b1ed04eab632d703d956ad2afe6d3bb9c93404b"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"8f0d75bfa6aaf9ba9278f5cdff04375d","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2222963,"upload_time":"2024-11-24T16:55:07","upload_time_iso_8601":"2024-11-24T16:55:07.839508Z","url":"https://files.pythonhosted.org/packages/0c/29/98cf339b9e30a82074065e1a2ea996ae081bc0be4b4a59440f70ebfd789c/capstone-6.0.0a2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"1940471e08df20706b7ce9750439eca37931441be6f1cdcd8118c298711dd1a6","md5":"d9d5ed073f2df9cf9135f93ec02c324e","sha256":"ea67eb1a43ce30e70c8e6d58b2b1f1c8cca9624800d1757f8cbf9135ae695e55"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"d9d5ed073f2df9cf9135f93ec02c324e","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2260902,"upload_time":"2024-11-24T16:55:10","upload_time_iso_8601":"2024-11-24T16:55:10.157703Z","url":"https://files.pythonhosted.org/packages/19/40/471e08df20706b7ce9750439eca37931441be6f1cdcd8118c298711dd1a6/capstone-6.0.0a2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"80b921d6f510960b11f47516aba35dc1a8bbf27b611d332673184eee83259885","md5":"2439736b6e6e88e3184ce743aadbe83b","sha256":"1e8769809cc2cf966f2d004e788ae1e9cb3f45301a7409b842e08ae341361dbe"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"2439736b6e6e88e3184ce743aadbe83b","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2221933,"upload_time":"2024-11-24T16:55:11","upload_time_iso_8601":"2024-11-24T16:55:11.601456Z","url":"https://files.pythonhosted.org/packages/80/b9/21d6f510960b11f47516aba35dc1a8bbf27b611d332673184eee83259885/capstone-6.0.0a2-cp310-cp310-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"e534e76cd63ba20987f1beaed5bec0dd030a850f069898fea513b4bf31a0914d","md5":"b290105e65ea1328efd924cd448bfc8e","sha256":"e60ea02b9dd5b6fbc1ab6164a16ceec301910e0a98e1aae0e8d6ac032369606a"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"b290105e65ea1328efd924cd448bfc8e","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2255776,"upload_time":"2024-11-24T16:55:13","upload_time_iso_8601":"2024-11-24T16:55:13.914422Z","url":"https://files.pythonhosted.org/packages/e5/34/e76cd63ba20987f1beaed5bec0dd030a850f069898fea513b4bf31a0914d/capstone-6.0.0a2-cp310-cp310-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"5e343c7503484f029c3529dd6aaf2c13064d804befb827b1040925668ab0ed84","md5":"0ba1071d1cecc9ddd158140b8307b743","sha256":"202eed109f9a60f136591e964490b1b9894a7301d3d99cc1a04cd83c821b2135"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-win_amd64.whl","has_sig":false,"md5_digest":"0ba1071d1cecc9ddd158140b8307b743","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2009496,"upload_time":"2024-11-24T16:55:16","upload_time_iso_8601":"2024-11-24T16:55:16.007898Z","url":"https://files.pythonhosted.org/packages/5e/34/3c7503484f029c3529dd6aaf2c13064d804befb827b1040925668ab0ed84/capstone-6.0.0a2-cp310-cp310-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"1b364002ad0983281faa21a6285302bf1d444ceb5b90dcff9cbfc7dbdea95d97","md5":"58e9514c63d7df3a42416fa99c2c1295","sha256":"70759d3379c51724f1db10883ab4c9facc6f77022c3400033c1805ca6b7cfd33"},"downloads":-1,"filename":"capstone-6.0.0a2-cp310-cp310-win_arm64.whl","has_sig":false,"md5_digest":"58e9514c63d7df3a42416fa99c2c1295","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1990380,"upload_time":"2024-11-24T16:55:17","upload_time_iso_8601":"2024-11-24T16:55:17.515601Z","url":"https://files.pythonhosted.org/packages/1b/36/4002ad0983281faa21a6285302bf1d444ceb5b90dcff9cbfc7dbdea95d97/capstone-6.0.0a2-cp310-cp310-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"3f25ec5a667152c70f984830c07d40d42d4dcad638e93655213ef1437fe5cc18","md5":"8975a38b225672b6a0e646b32d4721e1","sha256":"c50793ec89e10c8f847c7f83b3ea66927ec6cdbb35f1066b879539d2fd0b6ae3"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"8975a38b225672b6a0e646b32d4721e1","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":3410152,"upload_time":"2024-11-24T16:55:19","upload_time_iso_8601":"2024-11-24T16:55:19.877765Z","url":"https://files.pythonhosted.org/packages/3f/25/ec5a667152c70f984830c07d40d42d4dcad638e93655213ef1437fe5cc18/capstone-6.0.0a2-cp311-cp311-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"b6cd4117095b612e6a49444faa27badbedd7e4ee4d79a6b7bd92f1b42dc19a88","md5":"056d1d3507ebea9438ed24a96123823e","sha256":"eb4c940cb38d3daaac2ab9b4f79efa04bdb383174966f51f5d59fab15abc3114"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"056d1d3507ebea9438ed24a96123823e","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1848684,"upload_time":"2024-11-24T16:55:21","upload_time_iso_8601":"2024-11-24T16:55:21.354007Z","url":"https://files.pythonhosted.org/packages/b6/cd/4117095b612e6a49444faa27badbedd7e4ee4d79a6b7bd92f1b42dc19a88/capstone-6.0.0a2-cp311-cp311-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"add98510261d28e4f8b8e7d20916125394b5cd76047ef9c3a3b39caa6963de2e","md5":"c2a4348ad1698252394037e07716f395","sha256":"4728706a5b16ef4f46682aec5bf072b66c425206d464a34225bf298623b80b44"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"c2a4348ad1698252394037e07716f395","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1916433,"upload_time":"2024-11-24T16:55:23","upload_time_iso_8601":"2024-11-24T16:55:23.763039Z","url":"https://files.pythonhosted.org/packages/ad/d9/8510261d28e4f8b8e7d20916125394b5cd76047ef9c3a3b39caa6963de2e/capstone-6.0.0a2-cp311-cp311-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"90d3d19763a5b2f65159bb167d46db6784aa332bac69526ad7ee64def047d45b","md5":"ef6e543df4466ee690032408bc366e89","sha256":"8bf876d5516177223c105dfaaa55d7b3e13b6f175e7eb232f94cf028e81e0092"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"ef6e543df4466ee690032408bc366e89","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2222963,"upload_time":"2024-11-24T16:55:26","upload_time_iso_8601":"2024-11-24T16:55:26.106595Z","url":"https://files.pythonhosted.org/packages/90/d3/d19763a5b2f65159bb167d46db6784aa332bac69526ad7ee64def047d45b/capstone-6.0.0a2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"ab8b8ff99da0bc0503df86af4cd9d49ce9e41f3e2148d11f5ea4f28e1988eaed","md5":"d7def68b47f3693509cbb75e3ec40784","sha256":"d426ee49d1c396d4e3644e89380b1eeb9f7b31c9feb800a5761ee4a1ebe421a6"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"d7def68b47f3693509cbb75e3ec40784","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2260902,"upload_time":"2024-11-24T16:55:27","upload_time_iso_8601":"2024-11-24T16:55:27.561586Z","url":"https://files.pythonhosted.org/packages/ab/8b/8ff99da0bc0503df86af4cd9d49ce9e41f3e2148d11f5ea4f28e1988eaed/capstone-6.0.0a2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"4ef8707b2bbdc4367285364b85a71cedd55b3aa0cc0c2aea9e62a22b55bbbd20","md5":"c8878df0b8321c13aaa686d9f29c423c","sha256":"ae298abfbfc313f5985b43eeace9f0d9e7c40c62ea6bfa192e1811d165f0c68e"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"c8878df0b8321c13aaa686d9f29c423c","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2221932,"upload_time":"2024-11-24T16:55:30","upload_time_iso_8601":"2024-11-24T16:55:30.461651Z","url":"https://files.pythonhosted.org/packages/4e/f8/707b2bbdc4367285364b85a71cedd55b3aa0cc0c2aea9e62a22b55bbbd20/capstone-6.0.0a2-cp311-cp311-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"2e7b1f97b7832965a849b2b26e48c3e63e888f6e23470179de6fe4862bcf3fff","md5":"a4b72ab046d6de6a0782cd43e5465ac0","sha256":"8d9a8ce43393aecb08ff04cdefce33b71f4925b0dc15000257287fb79883ac41"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"a4b72ab046d6de6a0782cd43e5465ac0","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2255775,"upload_time":"2024-11-24T16:55:31","upload_time_iso_8601":"2024-11-24T16:55:31.883130Z","url":"https://files.pythonhosted.org/packages/2e/7b/1f97b7832965a849b2b26e48c3e63e888f6e23470179de6fe4862bcf3fff/capstone-6.0.0a2-cp311-cp311-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"18a7e80632577ba0683bc4432e58d791c3e7a99f715db8ff81eb07cfa60c6d2f","md5":"20f61cbde90a0317a9c32272c7c383f7","sha256":"9d49714e4c336bd24ee13a4817b05def68fddf18b85fcb54bb8a30ace7ad8411"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-win_amd64.whl","has_sig":false,"md5_digest":"20f61cbde90a0317a9c32272c7c383f7","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2009498,"upload_time":"2024-11-24T16:55:34","upload_time_iso_8601":"2024-11-24T16:55:34.286212Z","url":"https://files.pythonhosted.org/packages/18/a7/e80632577ba0683bc4432e58d791c3e7a99f715db8ff81eb07cfa60c6d2f/capstone-6.0.0a2-cp311-cp311-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"c572c5285a67de5e4f917bf1a292bc5f5e9de8f31ffdd8b437fbd57044ccedca","md5":"129e005d144e53f9b6ffeda12578bb38","sha256":"af6ed64a00949c5e569ae2906ef4bfa2c64bb1e37864d1938dd68092a8382daf"},"downloads":-1,"filename":"capstone-6.0.0a2-cp311-cp311-win_arm64.whl","has_sig":false,"md5_digest":"129e005d144e53f9b6ffeda12578bb38","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1990378,"upload_time":"2024-11-24T16:55:36","upload_time_iso_8601":"2024-11-24T16:55:36.624473Z","url":"https://files.pythonhosted.org/packages/c5/72/c5285a67de5e4f917bf1a292bc5f5e9de8f31ffdd8b437fbd57044ccedca/capstone-6.0.0a2-cp311-cp311-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"fe39e38924d13f55555ff57aa5a3fb37ba268fc6a87ff42046e18b359e738229","md5":"d2867b4eca0381114b42982c5c843346","sha256":"a1df934334880b9f8016153f7330ef79631095c981052ef2c06a87a424431f56"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-macosx_10_13_universal2.whl","has_sig":false,"md5_digest":"d2867b4eca0381114b42982c5c843346","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":3410153,"upload_time":"2024-11-24T16:55:39","upload_time_iso_8601":"2024-11-24T16:55:39.063175Z","url":"https://files.pythonhosted.org/packages/fe/39/e38924d13f55555ff57aa5a3fb37ba268fc6a87ff42046e18b359e738229/capstone-6.0.0a2-cp312-cp312-macosx_10_13_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"b4b27666d5069d7b8a9b5f82feefb52e84ee461d8b68e9f7a57361dc0faf14cb","md5":"d89bf52e2ca4adb2eecdf073525a72f7","sha256":"e70ab3b08441a26a481e55591fb826d49549760ac14d0a72237e451164b7f59f"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"d89bf52e2ca4adb2eecdf073525a72f7","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1848686,"upload_time":"2024-11-24T16:55:40","upload_time_iso_8601":"2024-11-24T16:55:40.713622Z","url":"https://files.pythonhosted.org/packages/b4/b2/7666d5069d7b8a9b5f82feefb52e84ee461d8b68e9f7a57361dc0faf14cb/capstone-6.0.0a2-cp312-cp312-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"fb7be9b6ec8d40139e3fbfa6a66357927439f823bc02bd3b6269d9ecc607c228","md5":"aba60fdbea0a9773e9fd63ce340ada7a","sha256":"862f3c9f2882c523f2fa76c591fc2048b92e435c1708cdb3e0b4191fa3ef8265"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"aba60fdbea0a9773e9fd63ce340ada7a","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1916435,"upload_time":"2024-11-24T16:55:43","upload_time_iso_8601":"2024-11-24T16:55:43.012753Z","url":"https://files.pythonhosted.org/packages/fb/7b/e9b6ec8d40139e3fbfa6a66357927439f823bc02bd3b6269d9ecc607c228/capstone-6.0.0a2-cp312-cp312-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"4bb6e28010733f3a60a632423172e600bffa1b52dd0d354aaaead74b1c17a88b","md5":"1755c51641c729ba6d95cda2949a11ff","sha256":"75a6a32cd75d9e914c8063bfa78aa5510aa77782aa7e21be65a5ac9266285a65"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"1755c51641c729ba6d95cda2949a11ff","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2222965,"upload_time":"2024-11-24T16:55:44","upload_time_iso_8601":"2024-11-24T16:55:44.547276Z","url":"https://files.pythonhosted.org/packages/4b/b6/e28010733f3a60a632423172e600bffa1b52dd0d354aaaead74b1c17a88b/capstone-6.0.0a2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"d9c5058aa791b47072b04e50e18a3af221e6a59071925663401d0f007417f70a","md5":"03134376e2dfee5cff7f00b30475df0d","sha256":"f7e51d3b9c9b9286d8fd63620c0740a7b2fffc078c65f89d958548b87db9f55f"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"03134376e2dfee5cff7f00b30475df0d","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2260903,"upload_time":"2024-11-24T16:55:46","upload_time_iso_8601":"2024-11-24T16:55:46.927529Z","url":"https://files.pythonhosted.org/packages/d9/c5/058aa791b47072b04e50e18a3af221e6a59071925663401d0f007417f70a/capstone-6.0.0a2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"d5b365edd6ce89edb5443d2c9e463a5b70bb6cd9c7b05f62a58c2a6c715964b9","md5":"1f4d343547ff4dd2e855febfc46124c2","sha256":"465027c083100f94337a57150975a52fc754fbba3f61ef7e4050e811f06b6f87"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"1f4d343547ff4dd2e855febfc46124c2","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2221933,"upload_time":"2024-11-24T16:55:49","upload_time_iso_8601":"2024-11-24T16:55:49.214019Z","url":"https://files.pythonhosted.org/packages/d5/b3/65edd6ce89edb5443d2c9e463a5b70bb6cd9c7b05f62a58c2a6c715964b9/capstone-6.0.0a2-cp312-cp312-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"a48d1637062553ba20d13edfff6cc62536e72b53ce36931c81d405dff067ee33","md5":"e10f61a467cf441af2a82f0730802359","sha256":"2085dac187838166c006a27f12bba121aefdecbeb36b7726e5a856e7b069d0d5"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"e10f61a467cf441af2a82f0730802359","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2255774,"upload_time":"2024-11-24T16:55:50","upload_time_iso_8601":"2024-11-24T16:55:50.665592Z","url":"https://files.pythonhosted.org/packages/a4/8d/1637062553ba20d13edfff6cc62536e72b53ce36931c81d405dff067ee33/capstone-6.0.0a2-cp312-cp312-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"b32b988843356782ce504851c53ccc68fa2ededaf33727712752efff39f02cb4","md5":"83c62c036fbd833467c7682489519ab1","sha256":"208a4b62f6ceed7e8a9a081bef9484d6ea27de1d3032c33d3c9900b7c30fe4d2"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-win_amd64.whl","has_sig":false,"md5_digest":"83c62c036fbd833467c7682489519ab1","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2009497,"upload_time":"2024-11-24T16:55:52","upload_time_iso_8601":"2024-11-24T16:55:52.024311Z","url":"https://files.pythonhosted.org/packages/b3/2b/988843356782ce504851c53ccc68fa2ededaf33727712752efff39f02cb4/capstone-6.0.0a2-cp312-cp312-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"bf042ee6e54eb6f50c3f143c57b82d77865bdd53ad705ce152a667abb8d9ac70","md5":"c27c0f48cdfeb968b40d49c868f414f2","sha256":"546a3a398a9a0a9952a4aafcf16c19d0506b83cd486be648500f8deba2131318"},"downloads":-1,"filename":"capstone-6.0.0a2-cp312-cp312-win_arm64.whl","has_sig":false,"md5_digest":"c27c0f48cdfeb968b40d49c868f414f2","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1990381,"upload_time":"2024-11-24T16:55:53","upload_time_iso_8601":"2024-11-24T16:55:53.479536Z","url":"https://files.pythonhosted.org/packages/bf/04/2ee6e54eb6f50c3f143c57b82d77865bdd53ad705ce152a667abb8d9ac70/capstone-6.0.0a2-cp312-cp312-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"bf9adec97a4bdd87dc055855dcc3bd55254784226535be3c867c18e5b5a07ac7","md5":"c35fdfb64fa4d7d6319a74184c7caad0","sha256":"43d91a9fc3b9c79fda50b1d4fc65160e62b1a3a5443b242cd72986f37eccd1f2"},"downloads":-1,"filename":"capstone-6.0.0a2-cp313-cp313-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"c35fdfb64fa4d7d6319a74184c7caad0","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":1848691,"upload_time":"2024-11-24T16:55:54","upload_time_iso_8601":"2024-11-24T16:55:54.928738Z","url":"https://files.pythonhosted.org/packages/bf/9a/dec97a4bdd87dc055855dcc3bd55254784226535be3c867c18e5b5a07ac7/capstone-6.0.0a2-cp313-cp313-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"561f581e0035a8c6d07bffabd7fe61a2e1f0c9c7dc1efbd4b68e61747ed30e84","md5":"a3ae39f8708de9b65fb2f6cbe63e98ea","sha256":"ba3a02d5b95181196a46c051507e4de85b12c61930bcebfee7208b0d04ef5acd"},"downloads":-1,"filename":"capstone-6.0.0a2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"a3ae39f8708de9b65fb2f6cbe63e98ea","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2260905,"upload_time":"2024-11-24T16:55:56","upload_time_iso_8601":"2024-11-24T16:55:56.645341Z","url":"https://files.pythonhosted.org/packages/56/1f/581e0035a8c6d07bffabd7fe61a2e1f0c9c7dc1efbd4b68e61747ed30e84/capstone-6.0.0a2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"c51e204d879dcb0c7ef81143f0178d490da579d3d19e2372c9edffa48b22af8b","md5":"162c20e21ddcad1d7d138cebfccce7e7","sha256":"704b4a761fe5281b2d454b6c967f43cca783a5895956e56d4b9c044423842b21"},"downloads":-1,"filename":"capstone-6.0.0a2-cp313-cp313-win_amd64.whl","has_sig":false,"md5_digest":"162c20e21ddcad1d7d138cebfccce7e7","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2009498,"upload_time":"2024-11-24T16:55:58","upload_time_iso_8601":"2024-11-24T16:55:58.125261Z","url":"https://files.pythonhosted.org/packages/c5/1e/204d879dcb0c7ef81143f0178d490da579d3d19e2372c9edffa48b22af8b/capstone-6.0.0a2-cp313-cp313-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9cdbde77c64e6e5f0fc4024a4298f87fb82041c4be3d4e238abd829296c9849b"},"digests":{"blake2b_256":"23819eb7a17aa3c1f15b2016106d4a148371f19fca7bf3db7a31c4fbcfd1c8e2","md5":"c776eca35aa1cdbe7888d9bf8423eac9","sha256":"238ca1b2ec3b310a96be65ebaddb7ad8566cf16d82ad427a16dd87c66cb6e74f"},"downloads":-1,"filename":"capstone-6.0.0a2-cp38-cp38-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"c776eca35aa1cdbe7888d9bf8423eac9","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1848685,"upload_time":"2024-11-24T16:56:00","upload_time_iso_8601":"2024-11-24T16:56:00.667640Z","url":"https://files.pythonhosted.org/packages/23/81/9eb7a17aa3c1f15b2016106d4a148371f19fca7bf3db7a31c4fbcfd1c8e2/capstone-6.0.0a2-cp38-cp38-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"9cdbde77c64e6e5f0fc4024a4298f87fb82041c4be3d4e238abd829296c9849b"},"digests":{"blake2b_256":"f5cad6c50b3a35306327e396d631a77998c2f5551986007370de9d67895fca75","md5":"e6de7777c0b671a08ce8b31ecd8de919","sha256":"61cf52a96bc28ed48551f5cd4a4e82436dc9a60bbd40774e8024b5e9ad6ccae0"},"downloads":-1,"filename":"capstone-6.0.0a2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"e6de7777c0b671a08ce8b31ecd8de919","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2260903,"upload_time":"2024-11-24T16:56:02","upload_time_iso_8601":"2024-11-24T16:56:02.978504Z","url":"https://files.pythonhosted.org/packages/f5/ca/d6c50b3a35306327e396d631a77998c2f5551986007370de9d67895fca75/capstone-6.0.0a2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"2d19aeed0fd8de0751e9b8bd7c7dd13eec208ae2df63be3b19f1ca4f9285ca92"},"digests":{"blake2b_256":"9da631b1f28016ee3f66b524bdc0732d4d1a6abf91cd6621ff89a96e25491fa1","md5":"b86066c929e0dfadc7f395e0457023ea","sha256":"4cd66e9ab7788fd8b8d3be6e0dc1d5a06f1cf9c5f601abb5f8a79825abf6e9eb"},"downloads":-1,"filename":"capstone-6.0.0a2-cp38-cp38-win_amd64.whl","has_sig":false,"md5_digest":"b86066c929e0dfadc7f395e0457023ea","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2009497,"upload_time":"2024-11-24T16:56:04","upload_time_iso_8601":"2024-11-24T16:56:04.370524Z","url":"https://files.pythonhosted.org/packages/9d/a6/31b1f28016ee3f66b524bdc0732d4d1a6abf91cd6621ff89a96e25491fa1/capstone-6.0.0a2-cp38-cp38-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"a73943e7ce11055f1b842beacc83554542c17e8ab89f6db5e28e6f6aaeb9d385","md5":"7554d7f02ac830bae88efb8e51a321ee","sha256":"7aae5f116bb69c4fd71fde7b05b47ab5ea972ff6cb17285d9b38283fb2cebd33"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"7554d7f02ac830bae88efb8e51a321ee","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":1848685,"upload_time":"2024-11-24T16:56:05","upload_time_iso_8601":"2024-11-24T16:56:05.820881Z","url":"https://files.pythonhosted.org/packages/a7/39/43e7ce11055f1b842beacc83554542c17e8ab89f6db5e28e6f6aaeb9d385/capstone-6.0.0a2-cp39-cp39-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"8afd5a00b79ed49eb8e9a67304331576605c651dec4a4fa5bb5be5113b9af1f9","md5":"03dbd3340b9d61bd6273470ea62f89c5","sha256":"cad03c7ffc0836914602d95b283b83dbe934e51ac6d777bbee8a9e94ff1d9216"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"03dbd3340b9d61bd6273470ea62f89c5","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":1916432,"upload_time":"2024-11-24T16:56:07","upload_time_iso_8601":"2024-11-24T16:56:07.343988Z","url":"https://files.pythonhosted.org/packages/8a/fd/5a00b79ed49eb8e9a67304331576605c651dec4a4fa5bb5be5113b9af1f9/capstone-6.0.0a2-cp39-cp39-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"815d75dc814490046036e4857b56f9627c6c9be5bc1cd9fb57edfb1790e2dbcb","md5":"ccd2cea9d7f935b38e603bfb12ff358f","sha256":"df1a396a9fce06aa9ddbdcd87144e3a3787853cf38439762dc99badb6e839f73"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"ccd2cea9d7f935b38e603bfb12ff358f","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2222964,"upload_time":"2024-11-24T16:56:08","upload_time_iso_8601":"2024-11-24T16:56:08.827354Z","url":"https://files.pythonhosted.org/packages/81/5d/75dc814490046036e4857b56f9627c6c9be5bc1cd9fb57edfb1790e2dbcb/capstone-6.0.0a2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"e9d7ecfdfae567f1c8cf0b8bccb8c67015315bf5e84a1da3da913586312dd58c","md5":"a6bce34a2cdca33dab8390547fc6b00d","sha256":"61f42296275a5ae54ca23fefeec25c81d58c9097c0691d890534d4e951bdfccb"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"a6bce34a2cdca33dab8390547fc6b00d","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2260903,"upload_time":"2024-11-24T16:56:11","upload_time_iso_8601":"2024-11-24T16:56:11.150488Z","url":"https://files.pythonhosted.org/packages/e9/d7/ecfdfae567f1c8cf0b8bccb8c67015315bf5e84a1da3da913586312dd58c/capstone-6.0.0a2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"ba4993d17ee84d72f31914084129beb1b6d21bd656e2ac41405df924f3590d0d","md5":"168713bbc8b51e96b54eb6062d482071","sha256":"90fb94181a33ca1d3ce2f5b4994bbce9eb9a6f807fe206620c754919fb60791d"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"168713bbc8b51e96b54eb6062d482071","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2221930,"upload_time":"2024-11-24T16:56:12","upload_time_iso_8601":"2024-11-24T16:56:12.693417Z","url":"https://files.pythonhosted.org/packages/ba/49/93d17ee84d72f31914084129beb1b6d21bd656e2ac41405df924f3590d0d/capstone-6.0.0a2-cp39-cp39-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"3bbda4487b4821c2e9d34c86694bbc544844ec391c7ed0062db4658068dec380"},"digests":{"blake2b_256":"acf4c824d9d5b941fe977a4de8a6b26888b28fc75ec00dc66487907e7a64f863","md5":"90331373317da397c67c366e4e759b66","sha256":"b8b61b76c33e3baf8e9b5399354e6fe1375803a5421fc6c8ebb9df31b383fd86"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"90331373317da397c67c366e4e759b66","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2255775,"upload_time":"2024-11-24T16:56:14","upload_time_iso_8601":"2024-11-24T16:56:14.181150Z","url":"https://files.pythonhosted.org/packages/ac/f4/c824d9d5b941fe977a4de8a6b26888b28fc75ec00dc66487907e7a64f863/capstone-6.0.0a2-cp39-cp39-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":{"sha256":"089f02e776f0034283185c916ed4fabc87ddde9fbb617cdaae3b108b5f9103b7"},"digests":{"blake2b_256":"dd47a47ec5085142bd7bdbe7b5108766a4949be85a55bea8099f31c9b68c2d17","md5":"af908bea5d27420cf5cc85e79d7a6ade","sha256":"f6efb3271fbfab4f15c278bbc150f79f2d704f9e76985809ebad25cca2f529bd"},"downloads":-1,"filename":"capstone-6.0.0a2-cp39-cp39-win_amd64.whl","has_sig":false,"md5_digest":"af908bea5d27420cf5cc85e79d7a6ade","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2009495,"upload_time":"2024-11-24T16:56:15","upload_time_iso_8601":"2024-11-24T16:56:15.563451Z","url":"https://files.pythonhosted.org/packages/dd/47/a47ec5085142bd7bdbe7b5108766a4949be85a55bea8099f31c9b68c2d17/capstone-6.0.0a2-cp39-cp39-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5dfb5f5668d1a9a26c45ef15d1e7223167a8c092d38805a9b1b98f6ec6c2df1f","md5":"b6f0e0301dea7765c4dfe86d701a0a7e","sha256":"4370d27d8ce21e841c210ee9d85203dbf87b9cb02254dd82e8feb2b904f5b2b1"},"downloads":-1,"filename":"capstone-6.0.0a2.tar.gz","has_sig":false,"md5_digest":"b6f0e0301dea7765c4dfe86d701a0a7e","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":4733670,"upload_time":"2024-11-24T16:56:17","upload_time_iso_8601":"2024-11-24T16:56:17.145341Z","url":"https://files.pythonhosted.org/packages/5d/fb/5f5668d1a9a26c45ef15d1e7223167a8c092d38805a9b1b98f6ec6c2df1f/capstone-6.0.0a2.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a3":[{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"7d2e1af6d1c7bcb47c4ace15d2549cb6054cf67461b9520a63118956b8eb2077","md5":"5e6a7cd308e46598d965a29e3b80195d","sha256":"32735f4a8c1aef003fc8cdeda250026d244115a8759e2b5a4eb7eac936db602a"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"5e6a7cd308e46598d965a29e3b80195d","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":3479135,"upload_time":"2025-01-28T17:21:32","upload_time_iso_8601":"2025-01-28T17:21:32.318066Z","url":"https://files.pythonhosted.org/packages/7d/2e/1af6d1c7bcb47c4ace15d2549cb6054cf67461b9520a63118956b8eb2077/capstone-6.0.0a3-cp310-cp310-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"fb78c6076a786a9c7f7058a1da88334a5e926a3f1e8f4fa64d9fe769bebcf3fc","md5":"4783847efa3f3c6e1e95533687074c1c","sha256":"91c3cedaba3c462829bec025eabf245f452dc3c7e021a8c1477833866b62b106"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"4783847efa3f3c6e1e95533687074c1c","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1890950,"upload_time":"2025-01-28T17:21:35","upload_time_iso_8601":"2025-01-28T17:21:35.036436Z","url":"https://files.pythonhosted.org/packages/fb/78/c6076a786a9c7f7058a1da88334a5e926a3f1e8f4fa64d9fe769bebcf3fc/capstone-6.0.0a3-cp310-cp310-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"e9292309d259c40cfbd9c89e675995a9dcfdc41111a0148cbb281297b30ce814","md5":"5a3204b267166e018c08b63f199bd9df","sha256":"7e8515bdf23f7d8528abf7c376d4024bc7f0eadf8fd19f3cb3729610088cc954"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"5a3204b267166e018c08b63f199bd9df","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1956296,"upload_time":"2025-01-28T17:21:37","upload_time_iso_8601":"2025-01-28T17:21:37.321540Z","url":"https://files.pythonhosted.org/packages/e9/29/2309d259c40cfbd9c89e675995a9dcfdc41111a0148cbb281297b30ce814/capstone-6.0.0a3-cp310-cp310-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"dac200a59d9fe3dbd8442ae6515c98e82a22b5e9dcd3ef5ccef56c4566fff1c4","md5":"24eccc3ce8f4215bb425e1e66e70bbbd","sha256":"cb4dad85796b9199987750b453906eeaa45c15be9e44087f89a1eca9e7e92503"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"24eccc3ce8f4215bb425e1e66e70bbbd","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2316552,"upload_time":"2025-01-28T17:21:40","upload_time_iso_8601":"2025-01-28T17:21:40.039874Z","url":"https://files.pythonhosted.org/packages/da/c2/00a59d9fe3dbd8442ae6515c98e82a22b5e9dcd3ef5ccef56c4566fff1c4/capstone-6.0.0a3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"70fdb96389ea728ac77b591a034ab638fd7d9ced043c50e0595a2595efb9ee4a","md5":"76adadee54af4e233e3e2144c847c07d","sha256":"3df7f8ceb6861ee1dfed650b10a5b9c318f62ac96ec1c759002bd7e1c46742ee"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"76adadee54af4e233e3e2144c847c07d","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2305980,"upload_time":"2025-01-28T17:21:41","upload_time_iso_8601":"2025-01-28T17:21:41.506355Z","url":"https://files.pythonhosted.org/packages/70/fd/b96389ea728ac77b591a034ab638fd7d9ced043c50e0595a2595efb9ee4a/capstone-6.0.0a3-cp310-cp310-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"f4ba9ead40f8fab49083cd775e3d60107d50a48efc65e6f0559d571deeb79173","md5":"071e29c1ff579d24b76a5e1e4203d987","sha256":"8b9765de6ab76370a899a9287c5a79c3c6de1df492f35939e8bdc517a503a91e"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-win_amd64.whl","has_sig":false,"md5_digest":"071e29c1ff579d24b76a5e1e4203d987","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2045783,"upload_time":"2025-01-28T17:21:43","upload_time_iso_8601":"2025-01-28T17:21:43.154244Z","url":"https://files.pythonhosted.org/packages/f4/ba/9ead40f8fab49083cd775e3d60107d50a48efc65e6f0559d571deeb79173/capstone-6.0.0a3-cp310-cp310-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"040509bcb14d594323f28bff961b85f972956739045c203a0cb1752b5345ae68","md5":"63f45267b65a4b1518a523e6016a4462","sha256":"50d4d2a3f72aadf10cb32be4d15afbf10b2af216ecf94fade726b2122da8d48e"},"downloads":-1,"filename":"capstone-6.0.0a3-cp310-cp310-win_arm64.whl","has_sig":false,"md5_digest":"63f45267b65a4b1518a523e6016a4462","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2026367,"upload_time":"2025-01-28T17:21:45","upload_time_iso_8601":"2025-01-28T17:21:45.471756Z","url":"https://files.pythonhosted.org/packages/04/05/09bcb14d594323f28bff961b85f972956739045c203a0cb1752b5345ae68/capstone-6.0.0a3-cp310-cp310-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"96a7b309e867c19563b865ce626da694707d9520d9fb8d016b9d8b2c575f3e2f","md5":"03db9d24235c978221f45cb2519dfb34","sha256":"563efb633fbbeec5774341f6921b89818d77f4868279e18d5417457aa8beb154"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"03db9d24235c978221f45cb2519dfb34","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":3479135,"upload_time":"2025-01-28T17:21:48","upload_time_iso_8601":"2025-01-28T17:21:48.288434Z","url":"https://files.pythonhosted.org/packages/96/a7/b309e867c19563b865ce626da694707d9520d9fb8d016b9d8b2c575f3e2f/capstone-6.0.0a3-cp311-cp311-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"a44d3db8b0503d67513e88a1249e8ae5ea5ce66c91191b2f4ebc83b5f5104d8c","md5":"e0a26326a34c4d6d232eab13a3ae502a","sha256":"566fe1b519f116ee3a56ad6f00c6dbaecd6db8b0e032d95cd21cfea107531823"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"e0a26326a34c4d6d232eab13a3ae502a","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1890951,"upload_time":"2025-01-28T17:21:50","upload_time_iso_8601":"2025-01-28T17:21:50.826012Z","url":"https://files.pythonhosted.org/packages/a4/4d/3db8b0503d67513e88a1249e8ae5ea5ce66c91191b2f4ebc83b5f5104d8c/capstone-6.0.0a3-cp311-cp311-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"11e90ccc1bfd143d27e7aa6db6891792faebb4f785e76445d8af64bd8954e3c3","md5":"172ef452960ba405701b3e590df1cfa0","sha256":"500b3908e95c914243130046b19b5ecad12a2a86221bb8d70f55f0c78b7fa91d"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"172ef452960ba405701b3e590df1cfa0","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1956295,"upload_time":"2025-01-28T17:21:52","upload_time_iso_8601":"2025-01-28T17:21:52.303718Z","url":"https://files.pythonhosted.org/packages/11/e9/0ccc1bfd143d27e7aa6db6891792faebb4f785e76445d8af64bd8954e3c3/capstone-6.0.0a3-cp311-cp311-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"7047a63bb648ccad6dbf68bc6b3f4d64a4101c42d464698cc32e6539c8e47c9d","md5":"ae17eb4bfabb5d6b732bab459ccdfd6b","sha256":"f5b5d3452f25c112bc3c238313330f8669a0391f59c4675124988f445ec1b1d7"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"ae17eb4bfabb5d6b732bab459ccdfd6b","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2316553,"upload_time":"2025-01-28T17:21:54","upload_time_iso_8601":"2025-01-28T17:21:54.613987Z","url":"https://files.pythonhosted.org/packages/70/47/a63bb648ccad6dbf68bc6b3f4d64a4101c42d464698cc32e6539c8e47c9d/capstone-6.0.0a3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"ddc5b867edcb79aa4aad25bc940a41184821beeaa952b95f2c3a4c0d744a91d3","md5":"63e001dfa2359b455fba700dd802537a","sha256":"e90133e7ee3208d60c6a7e7818b710fe63434400992ffb4541e9edf630ec682a"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"63e001dfa2359b455fba700dd802537a","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2305980,"upload_time":"2025-01-28T17:21:56","upload_time_iso_8601":"2025-01-28T17:21:56.119297Z","url":"https://files.pythonhosted.org/packages/dd/c5/b867edcb79aa4aad25bc940a41184821beeaa952b95f2c3a4c0d744a91d3/capstone-6.0.0a3-cp311-cp311-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"c00cd73ab319203042bb8f6dcb9e84c758d6b2958f59ad69e88370e0a06dbd06","md5":"ab3db8a99c6391eda6f628b1241e7908","sha256":"2fab61398d2d15fc71a9c4dcc498a344ea9b2f4eac704c108114b3d5e8c70627"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-win_amd64.whl","has_sig":false,"md5_digest":"ab3db8a99c6391eda6f628b1241e7908","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2045785,"upload_time":"2025-01-28T17:21:57","upload_time_iso_8601":"2025-01-28T17:21:57.583721Z","url":"https://files.pythonhosted.org/packages/c0/0c/d73ab319203042bb8f6dcb9e84c758d6b2958f59ad69e88370e0a06dbd06/capstone-6.0.0a3-cp311-cp311-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"48bc70ce9a33dc65bec68dcc05d773e8497045d2ed0a4f8a38aa402bbdee3e0e","md5":"a47ecb08c9e248e01b0f6edade6f77fc","sha256":"b1b11756d4419bf4f339956ce5845e1f5405787e94c8f06cf2f7ad762c256b5e"},"downloads":-1,"filename":"capstone-6.0.0a3-cp311-cp311-win_arm64.whl","has_sig":false,"md5_digest":"a47ecb08c9e248e01b0f6edade6f77fc","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2026367,"upload_time":"2025-01-28T17:21:59","upload_time_iso_8601":"2025-01-28T17:21:59.511484Z","url":"https://files.pythonhosted.org/packages/48/bc/70ce9a33dc65bec68dcc05d773e8497045d2ed0a4f8a38aa402bbdee3e0e/capstone-6.0.0a3-cp311-cp311-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"5181acf92861d5f7cbe79ea6d2fb0408015c6792599f9b06b7733ac7982dea8e","md5":"eaff7cf6b12316c170a605dbe5d2115f","sha256":"acdca9190359e5f9829f62dc3b1d05ecd46ac9d21174fd2d261fcde02e2d11a2"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-macosx_10_13_universal2.whl","has_sig":false,"md5_digest":"eaff7cf6b12316c170a605dbe5d2115f","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":3479136,"upload_time":"2025-01-28T17:22:02","upload_time_iso_8601":"2025-01-28T17:22:02.093384Z","url":"https://files.pythonhosted.org/packages/51/81/acf92861d5f7cbe79ea6d2fb0408015c6792599f9b06b7733ac7982dea8e/capstone-6.0.0a3-cp312-cp312-macosx_10_13_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"b031dfcc1f585c3e9752376862ec6c2eba5a878c232efe793228535cbc0024f5","md5":"6fade84c7b23fd2adbc2d40b924259cb","sha256":"3f15958649daff9d07526d0d708814229eb93f60bc416296cf34a7bbe4652908"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"6fade84c7b23fd2adbc2d40b924259cb","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1890950,"upload_time":"2025-01-28T17:22:03","upload_time_iso_8601":"2025-01-28T17:22:03.666821Z","url":"https://files.pythonhosted.org/packages/b0/31/dfcc1f585c3e9752376862ec6c2eba5a878c232efe793228535cbc0024f5/capstone-6.0.0a3-cp312-cp312-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"1ee064b843d9a7566bbbb743333a6f1f0e7683352b2b103672747c345f7407ec","md5":"7da5d03ab04d74c1d6d5c8f0265ef93e","sha256":"ba5f3bfe7318efa4d93e6b7c9ccfc8ef12c0ac8218594c7ab7e1b6bc8eab74aa"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"7da5d03ab04d74c1d6d5c8f0265ef93e","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1956295,"upload_time":"2025-01-28T17:22:05","upload_time_iso_8601":"2025-01-28T17:22:05.300324Z","url":"https://files.pythonhosted.org/packages/1e/e0/64b843d9a7566bbbb743333a6f1f0e7683352b2b103672747c345f7407ec/capstone-6.0.0a3-cp312-cp312-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"76908b7bb01c63820f2a4a4d0d16ff96287e49601b0621b799c681327746fdbf","md5":"517deb8544c5f6dcac1afe0d497018e3","sha256":"9066052c8f69738799ab7315dbce26da3f2f4d42b0e47b72de7dac3c5a79e370"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"517deb8544c5f6dcac1afe0d497018e3","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2316554,"upload_time":"2025-01-28T17:22:07","upload_time_iso_8601":"2025-01-28T17:22:07.005555Z","url":"https://files.pythonhosted.org/packages/76/90/8b7bb01c63820f2a4a4d0d16ff96287e49601b0621b799c681327746fdbf/capstone-6.0.0a3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"17c626c85e90342f2d590de1d1c34dcc879926a125cb2b5789bcbcfedf4af2b7","md5":"1b686b7b02a9c725276616b73a0ecf94","sha256":"858c5b117431f197bed049e051954aca6e2d73feb85bf2b106d8d10114eada6f"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"1b686b7b02a9c725276616b73a0ecf94","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2305980,"upload_time":"2025-01-28T17:22:08","upload_time_iso_8601":"2025-01-28T17:22:08.540586Z","url":"https://files.pythonhosted.org/packages/17/c6/26c85e90342f2d590de1d1c34dcc879926a125cb2b5789bcbcfedf4af2b7/capstone-6.0.0a3-cp312-cp312-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"2cb10cd702c6a98257556027320a79bf60a326d66a13fa2b9a2c6e7198c847c4","md5":"3a14c965261c2bb3fdfba20ff5b477a8","sha256":"9c38a610eac248874c66814a67b317daf7ed36e5c1dcffdb607619c0b4a835b7"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-win_amd64.whl","has_sig":false,"md5_digest":"3a14c965261c2bb3fdfba20ff5b477a8","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2045784,"upload_time":"2025-01-28T17:22:10","upload_time_iso_8601":"2025-01-28T17:22:10.165117Z","url":"https://files.pythonhosted.org/packages/2c/b1/0cd702c6a98257556027320a79bf60a326d66a13fa2b9a2c6e7198c847c4/capstone-6.0.0a3-cp312-cp312-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"e5088787616912a216167e73d81eeeb83a0df3c54d7855325ea0eea0a163a7ca","md5":"4729b7b1bf70b2f2dc44e9b8c89adc4a","sha256":"e74182a44233efc9948fe730ec7d0f444bfcdadc20fd7b324ce820ea44f8e064"},"downloads":-1,"filename":"capstone-6.0.0a3-cp312-cp312-win_arm64.whl","has_sig":false,"md5_digest":"4729b7b1bf70b2f2dc44e9b8c89adc4a","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2026370,"upload_time":"2025-01-28T17:22:11","upload_time_iso_8601":"2025-01-28T17:22:11.718805Z","url":"https://files.pythonhosted.org/packages/e5/08/8787616912a216167e73d81eeeb83a0df3c54d7855325ea0eea0a163a7ca/capstone-6.0.0a3-cp312-cp312-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"d258721ab7f6abbb5d2d1fef238709ddd7c768a6d0cd78e2ca308b77fd44076b","md5":"9b026604a076513398baf8495ea48496","sha256":"35fec4aeafa129b2bc8b5b8ff5f77031b8cc426f88368fea687624da662e0fd2"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-macosx_10_13_universal2.whl","has_sig":false,"md5_digest":"9b026604a076513398baf8495ea48496","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":3479136,"upload_time":"2025-01-28T17:22:13","upload_time_iso_8601":"2025-01-28T17:22:13.577358Z","url":"https://files.pythonhosted.org/packages/d2/58/721ab7f6abbb5d2d1fef238709ddd7c768a6d0cd78e2ca308b77fd44076b/capstone-6.0.0a3-cp313-cp313-macosx_10_13_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"f08d90c118dffc776f34e4b267f504dce42ec23a892b92727cb8857508ad8f9c","md5":"fdc2e25fe8da97861acdca13e2ccb036","sha256":"0f870eb99367f90b2d6c7e8ba949487f17f41a2b15a06bdc18b091d5bf32f10a"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"fdc2e25fe8da97861acdca13e2ccb036","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":1890952,"upload_time":"2025-01-28T17:22:15","upload_time_iso_8601":"2025-01-28T17:22:15.270176Z","url":"https://files.pythonhosted.org/packages/f0/8d/90c118dffc776f34e4b267f504dce42ec23a892b92727cb8857508ad8f9c/capstone-6.0.0a3-cp313-cp313-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"ba24dde6076ba6b4cc2bb2a2922a65ac488a6d2f9e3f5258a0363cba951a1fbb","md5":"c33ff88cc6446759e9dad1acd9997364","sha256":"c8d4b7eb158cef9a5c7934ec5aa2d6cd248e0e4fb77f87ee41d0a2340d76b9a2"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"c33ff88cc6446759e9dad1acd9997364","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":1956296,"upload_time":"2025-01-28T17:22:17","upload_time_iso_8601":"2025-01-28T17:22:17.146629Z","url":"https://files.pythonhosted.org/packages/ba/24/dde6076ba6b4cc2bb2a2922a65ac488a6d2f9e3f5258a0363cba951a1fbb/capstone-6.0.0a3-cp313-cp313-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"fc11787e4631020dabb12775bed3298acdf46edfc3b1b2ac0f4b37116aab7afc","md5":"d5f64296ccca5f81a8b72b05686077c4","sha256":"d3e4bf6ac5c158b1be5dff366494ca6b0c2fcb981b1452483121743304fea3e4"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"d5f64296ccca5f81a8b72b05686077c4","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2316554,"upload_time":"2025-01-28T17:22:19","upload_time_iso_8601":"2025-01-28T17:22:19.774274Z","url":"https://files.pythonhosted.org/packages/fc/11/787e4631020dabb12775bed3298acdf46edfc3b1b2ac0f4b37116aab7afc/capstone-6.0.0a3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"944392457138c792b0573b029b5a529fd5fad6fd4959afcf4fc749ebac96f205","md5":"ea79e4daa78888a4d284a84a80b603ea","sha256":"fbdfbfe9be1a080703bdcff5720206982c874180c5245fd4c4fa85a6b8ec6e94"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"ea79e4daa78888a4d284a84a80b603ea","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2305980,"upload_time":"2025-01-28T17:22:21","upload_time_iso_8601":"2025-01-28T17:22:21.284891Z","url":"https://files.pythonhosted.org/packages/94/43/92457138c792b0573b029b5a529fd5fad6fd4959afcf4fc749ebac96f205/capstone-6.0.0a3-cp313-cp313-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"78954849eeb1531ad8ac5ff3f1f52ccd32a36350529b4d13941f6c47da87f823","md5":"d1ff3765dc96c93c48349328fe452e1b","sha256":"1c4119e4937479af2a349c416da1d17db940682bb340c2c7409600ab0d8ca22b"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-win_amd64.whl","has_sig":false,"md5_digest":"d1ff3765dc96c93c48349328fe452e1b","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2045785,"upload_time":"2025-01-28T17:22:23","upload_time_iso_8601":"2025-01-28T17:22:23.588113Z","url":"https://files.pythonhosted.org/packages/78/95/4849eeb1531ad8ac5ff3f1f52ccd32a36350529b4d13941f6c47da87f823/capstone-6.0.0a3-cp313-cp313-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"32bf80d5cf22e180cc2234b72b0d60fedc4568690b098ad37f6556d4350bbfec","md5":"43953fa1d5151c73dd247b500275ab9e","sha256":"22dc366449f6f88f205024374becffb002443e83a834fd4bcbef58b9de560ec3"},"downloads":-1,"filename":"capstone-6.0.0a3-cp313-cp313-win_arm64.whl","has_sig":false,"md5_digest":"43953fa1d5151c73dd247b500275ab9e","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2026366,"upload_time":"2025-01-28T17:22:25","upload_time_iso_8601":"2025-01-28T17:22:25.238703Z","url":"https://files.pythonhosted.org/packages/32/bf/80d5cf22e180cc2234b72b0d60fedc4568690b098ad37f6556d4350bbfec/capstone-6.0.0a3-cp313-cp313-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"da5e75709b511b1648d52ff8763f7f8b6ad522ed2be3d60a324234f498fd658f"},"digests":{"blake2b_256":"608668b34a3e2a1cd12dbb9843a0de758055b0abd136c1ddfde8e8dcf348faec","md5":"3bbe0614777d5a961b2099b5d16e2857","sha256":"5372374d08a7823cd35c6cb5c55bb4c4ff8864fad14c67c5d91355ff472544bc"},"downloads":-1,"filename":"capstone-6.0.0a3-cp38-cp38-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"3bbe0614777d5a961b2099b5d16e2857","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":3479077,"upload_time":"2025-01-28T17:22:26","upload_time_iso_8601":"2025-01-28T17:22:26.716950Z","url":"https://files.pythonhosted.org/packages/60/86/68b34a3e2a1cd12dbb9843a0de758055b0abd136c1ddfde8e8dcf348faec/capstone-6.0.0a3-cp38-cp38-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"da5e75709b511b1648d52ff8763f7f8b6ad522ed2be3d60a324234f498fd658f"},"digests":{"blake2b_256":"f5396c3ad6b025e94012aa9a6a3a29851bbc8f08a50e67983d69ac677dccb718","md5":"b0b1edb7d3755b5b0f514578904eee79","sha256":"be2adaa2b6525f5fee1836d470ac68b93091d52fbb6382120d0ca54246d30087"},"downloads":-1,"filename":"capstone-6.0.0a3-cp38-cp38-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"b0b1edb7d3755b5b0f514578904eee79","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1890893,"upload_time":"2025-01-28T17:22:29","upload_time_iso_8601":"2025-01-28T17:22:29.267689Z","url":"https://files.pythonhosted.org/packages/f5/39/6c3ad6b025e94012aa9a6a3a29851bbc8f08a50e67983d69ac677dccb718/capstone-6.0.0a3-cp38-cp38-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"da5e75709b511b1648d52ff8763f7f8b6ad522ed2be3d60a324234f498fd658f"},"digests":{"blake2b_256":"804d90732c09c12ef366a1de79989a4f47a4a9dc6b7a5f52cd314538331b259e","md5":"3dc87bdc7c9a3ed77770cd88e256c2e2","sha256":"3714a75cb7f7c45246aa40a27fa3b12619c78124d38d61f3baf8300faf9cb650"},"downloads":-1,"filename":"capstone-6.0.0a3-cp38-cp38-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"3dc87bdc7c9a3ed77770cd88e256c2e2","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1956235,"upload_time":"2025-01-28T17:22:31","upload_time_iso_8601":"2025-01-28T17:22:31.366633Z","url":"https://files.pythonhosted.org/packages/80/4d/90732c09c12ef366a1de79989a4f47a4a9dc6b7a5f52cd314538331b259e/capstone-6.0.0a3-cp38-cp38-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"da5e75709b511b1648d52ff8763f7f8b6ad522ed2be3d60a324234f498fd658f"},"digests":{"blake2b_256":"4e23df18bd847e597db4edf24c6ac5f1e134196257d73a2368df31dcaef869b8","md5":"9cf0ff3718a654998a8cd2a6953c55a5","sha256":"2d54ecab0dc31ac2281ee292371ce8dbfcccb6ed23a53133161f11d9eca4fa43"},"downloads":-1,"filename":"capstone-6.0.0a3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"9cf0ff3718a654998a8cd2a6953c55a5","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2316492,"upload_time":"2025-01-28T17:22:33","upload_time_iso_8601":"2025-01-28T17:22:33.166516Z","url":"https://files.pythonhosted.org/packages/4e/23/df18bd847e597db4edf24c6ac5f1e134196257d73a2368df31dcaef869b8/capstone-6.0.0a3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"da5e75709b511b1648d52ff8763f7f8b6ad522ed2be3d60a324234f498fd658f"},"digests":{"blake2b_256":"60d9c552f695e7acc7cb535e855e87a03a5c9db873629ac6487987954f40ff65","md5":"6466340387690204b19d0e1e7ab2c50f","sha256":"860eecec232fa7425fe6ddb25d92220930ca35628bd1dcb3a6c73da679821323"},"downloads":-1,"filename":"capstone-6.0.0a3-cp38-cp38-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"6466340387690204b19d0e1e7ab2c50f","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2305916,"upload_time":"2025-01-28T17:22:35","upload_time_iso_8601":"2025-01-28T17:22:35.819492Z","url":"https://files.pythonhosted.org/packages/60/d9/c552f695e7acc7cb535e855e87a03a5c9db873629ac6487987954f40ff65/capstone-6.0.0a3-cp38-cp38-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"adf3ac07a77241736850f3a30b2f3e834651da179b835773e18760d349cecb00"},"digests":{"blake2b_256":"9cd9fc5d9e932724896b90a3cda445c5939c7fb39055382730cd02f207e613fe","md5":"d529f96a6da5db3805660912f71b5e47","sha256":"bb7452183de67cd780d4ef6d67f956e97cdeb25e86c4dc2fbad1c2dc852a47d1"},"downloads":-1,"filename":"capstone-6.0.0a3-cp38-cp38-win_amd64.whl","has_sig":false,"md5_digest":"d529f96a6da5db3805660912f71b5e47","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2045721,"upload_time":"2025-01-28T17:22:37","upload_time_iso_8601":"2025-01-28T17:22:37.439935Z","url":"https://files.pythonhosted.org/packages/9c/d9/fc5d9e932724896b90a3cda445c5939c7fb39055382730cd02f207e613fe/capstone-6.0.0a3-cp38-cp38-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"0b5460836647a868496a9c181451fff9b504354fbdecae64250b7eb92f9b9c8a","md5":"96245751f3e3039003d5f84d77af034b","sha256":"9578861a0322518df164ecf02b9ad935d89cde6006790c826ace5c352225c84a"},"downloads":-1,"filename":"capstone-6.0.0a3-cp39-cp39-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"96245751f3e3039003d5f84d77af034b","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":1890949,"upload_time":"2025-01-28T17:22:38","upload_time_iso_8601":"2025-01-28T17:22:38.854370Z","url":"https://files.pythonhosted.org/packages/0b/54/60836647a868496a9c181451fff9b504354fbdecae64250b7eb92f9b9c8a/capstone-6.0.0a3-cp39-cp39-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"1345971da90bd3d2b1bf00f7150d0af6fbe3b292cdd5b02a56773a7d3aa0fce1","md5":"c6d88478da9b440c0cba35d4498d7c90","sha256":"8aa88554dbdc7b13645a0ef8b405d95122c5811e2ed4a353ea308e6bddcbd8ad"},"downloads":-1,"filename":"capstone-6.0.0a3-cp39-cp39-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"c6d88478da9b440c0cba35d4498d7c90","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":1956294,"upload_time":"2025-01-28T17:22:40","upload_time_iso_8601":"2025-01-28T17:22:40.440437Z","url":"https://files.pythonhosted.org/packages/13/45/971da90bd3d2b1bf00f7150d0af6fbe3b292cdd5b02a56773a7d3aa0fce1/capstone-6.0.0a3-cp39-cp39-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"452f009f41331e3ff5d3ae2470bf2830b1a20a61ee461bd68e63e9c835d6246f","md5":"0aa4114ce354094f31be92d133cf356b","sha256":"6a05e0e5fd6363e0a73be058c855c790a02c974a15f875caf1eb6b158ad0b1fb"},"downloads":-1,"filename":"capstone-6.0.0a3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"0aa4114ce354094f31be92d133cf356b","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2316551,"upload_time":"2025-01-28T17:22:42","upload_time_iso_8601":"2025-01-28T17:22:42.177165Z","url":"https://files.pythonhosted.org/packages/45/2f/009f41331e3ff5d3ae2470bf2830b1a20a61ee461bd68e63e9c835d6246f/capstone-6.0.0a3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3a5a6cd702f2adca66dae903c71e0b16d05d4f0db22a9921bdd95691390b3dec"},"digests":{"blake2b_256":"9c1a42bdc28b3f9a7933e28489e5dd972042cbe8bc625c80e944e816b270887a","md5":"1ac943907bf65d88f1661e9eed2a36cf","sha256":"784668d58dd2501ffe1575c1cb9d34cadb041bf6999de0ac371da79ed7c15979"},"downloads":-1,"filename":"capstone-6.0.0a3-cp39-cp39-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"1ac943907bf65d88f1661e9eed2a36cf","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2305978,"upload_time":"2025-01-28T17:22:44","upload_time_iso_8601":"2025-01-28T17:22:44.449135Z","url":"https://files.pythonhosted.org/packages/9c/1a/42bdc28b3f9a7933e28489e5dd972042cbe8bc625c80e944e816b270887a/capstone-6.0.0a3-cp39-cp39-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"2e93dd6f9cb218ff78dfac63c0a9cff45d723e6d5601d5317205d54d96534293","md5":"3e4cb0d5299e210500851e489c381f68","sha256":"4541106f92d1949eaf1324434eb9b1015ee5ec3b4e573d5ae4fcc8b76d7b316b"},"downloads":-1,"filename":"capstone-6.0.0a3-cp39-cp39-win_amd64.whl","has_sig":false,"md5_digest":"3e4cb0d5299e210500851e489c381f68","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2045781,"upload_time":"2025-01-28T17:22:46","upload_time_iso_8601":"2025-01-28T17:22:46.206019Z","url":"https://files.pythonhosted.org/packages/2e/93/dd6f9cb218ff78dfac63c0a9cff45d723e6d5601d5317205d54d96534293/capstone-6.0.0a3-cp39-cp39-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"15558a4c12d5935a711bec7550664337320d572a4a9cae3bdee6500be865a137"},"digests":{"blake2b_256":"b515c27360430606db3babebb2030a8cfe5d89b64b2b55c3dc3b4dacda83b3e8","md5":"82e9f44365cd560f63e0f28268c5eb09","sha256":"5bed68bdaca18fded8a939e4659be584f00a0cd4d264f5b60b1d9bb031b1dec8"},"downloads":-1,"filename":"capstone-6.0.0a3-cp39-cp39-win_arm64.whl","has_sig":false,"md5_digest":"82e9f44365cd560f63e0f28268c5eb09","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2026363,"upload_time":"2025-01-28T17:22:47","upload_time_iso_8601":"2025-01-28T17:22:47.881141Z","url":"https://files.pythonhosted.org/packages/b5/15/c27360430606db3babebb2030a8cfe5d89b64b2b55c3dc3b4dacda83b3e8/capstone-6.0.0a3-cp39-cp39-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"b7c90e4ab61175169058ba1258d9df21c5e23d915e5f051a3b9c6e930c9a8b39","md5":"21842fd5291d9d2b614af1fa1b59a14b","sha256":"b28b3efa0807c61d54e7ddeefc16b209028ec7215816ebafc039f42facd0602b"},"downloads":-1,"filename":"capstone-6.0.0a3.tar.gz","has_sig":false,"md5_digest":"21842fd5291d9d2b614af1fa1b59a14b","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":4796862,"upload_time":"2025-01-28T17:22:49","upload_time_iso_8601":"2025-01-28T17:22:49.790728Z","url":"https://files.pythonhosted.org/packages/b7/c9/0e4ab61175169058ba1258d9df21c5e23d915e5f051a3b9c6e930c9a8b39/capstone-6.0.0a3.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a4":[{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"6394a20c93bf0692f073545689a09febc3332ce99255212aa650ee7f953147c7","md5":"429058d99fa2d7af4f1d4a4f8eac4c2b","sha256":"c043156a9b36208e73e3c4f700a97732bebc6be92ea391f78f83e9ed5b4e41c8"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"429058d99fa2d7af4f1d4a4f8eac4c2b","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":3489947,"upload_time":"2025-04-14T11:26:55","upload_time_iso_8601":"2025-04-14T11:26:55.527593Z","url":"https://files.pythonhosted.org/packages/63/94/a20c93bf0692f073545689a09febc3332ce99255212aa650ee7f953147c7/capstone-6.0.0a4-cp310-cp310-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"c60f641267fb861383b8a1656de33b57337d5dd1723c0d595715ad6ac203e6de","md5":"c72350b29921c677b241bea67a4738f4","sha256":"99fefe28c7da22e817b13dfc59a06a7cd79ab12a4a2edd5d82114298e7f2109c"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"c72350b29921c677b241bea67a4738f4","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1895902,"upload_time":"2025-04-14T11:26:57","upload_time_iso_8601":"2025-04-14T11:26:57.326606Z","url":"https://files.pythonhosted.org/packages/c6/0f/641267fb861383b8a1656de33b57337d5dd1723c0d595715ad6ac203e6de/capstone-6.0.0a4-cp310-cp310-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"15a21b685deb8e1cff3ffeb3e9122cf016ba71514bf63a9354bf76fd1bb5af4b","md5":"01133311c8bfcacc9886326827f2708a","sha256":"48bbfbcc4f5f22c2f07081db2bc1ad974d5c03fdc29d690d37e7e99047714b41"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"01133311c8bfcacc9886326827f2708a","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":1961921,"upload_time":"2025-04-14T11:26:58","upload_time_iso_8601":"2025-04-14T11:26:58.481446Z","url":"https://files.pythonhosted.org/packages/15/a2/1b685deb8e1cff3ffeb3e9122cf016ba71514bf63a9354bf76fd1bb5af4b/capstone-6.0.0a4-cp310-cp310-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"032faecf2347dffd9930ef0f771166297088900e5413205dd8e72bf5f1e780b7","md5":"9b48d8ac779f72ca5da103c539417a50","sha256":"d6d8dddd9dc1d1cedef8186f02c0d2156f2c734e5ff40e7c0c7572df7f4be26b"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"9b48d8ac779f72ca5da103c539417a50","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2279893,"upload_time":"2025-04-14T11:26:59","upload_time_iso_8601":"2025-04-14T11:26:59.694975Z","url":"https://files.pythonhosted.org/packages/03/2f/aecf2347dffd9930ef0f771166297088900e5413205dd8e72bf5f1e780b7/capstone-6.0.0a4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"42ab2e6c55b7166ce162dd8d764878caae2b0286beaf0a6a022b550f81e449f5","md5":"e969b03b5dc7a647b1fde33bec147067","sha256":"8351afe611a8ec50df753fe843be3abf740f186f5a535fcc6cf40392771a2f02"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"e969b03b5dc7a647b1fde33bec147067","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2321918,"upload_time":"2025-04-14T11:27:00","upload_time_iso_8601":"2025-04-14T11:27:00.784375Z","url":"https://files.pythonhosted.org/packages/42/ab/2e6c55b7166ce162dd8d764878caae2b0286beaf0a6a022b550f81e449f5/capstone-6.0.0a4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"33b017e6c6d68ffe33fe87593f50e5788749d3b5fed82f1e3c0685f73106d56c","md5":"221b592777a6954f6953025918e093b7","sha256":"d40ea5ca2404bc71815b73a5ef743c5240b484da28bd195d1f19526e66841e28"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"221b592777a6954f6953025918e093b7","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2289663,"upload_time":"2025-04-14T11:27:02","upload_time_iso_8601":"2025-04-14T11:27:02.427499Z","url":"https://files.pythonhosted.org/packages/33/b0/17e6c6d68ffe33fe87593f50e5788749d3b5fed82f1e3c0685f73106d56c/capstone-6.0.0a4-cp310-cp310-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"51d1618cd90822204c7b86edeb857c8beae27d24bb3c823a8cd5ff37b3523456","md5":"4846620bb1951aef733ea58c261799d1","sha256":"999b9a85adcd389c0b71fec2e340f5445c392cf2826aa30b96793a11c24e90e0"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"4846620bb1951aef733ea58c261799d1","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2312542,"upload_time":"2025-04-14T11:27:07","upload_time_iso_8601":"2025-04-14T11:27:07.341747Z","url":"https://files.pythonhosted.org/packages/51/d1/618cd90822204c7b86edeb857c8beae27d24bb3c823a8cd5ff37b3523456/capstone-6.0.0a4-cp310-cp310-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"fdcefdf624f12da45dc9b314175d3454c49f33df7c6c6a1c81f14a3d7e9155be","md5":"5cace151702acd86eadf7ea06d1f1cce","sha256":"3a31629da8b276036badc7ac1cd9978d7de4205a0175306b48e74e1337cb4ac1"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-win_amd64.whl","has_sig":false,"md5_digest":"5cace151702acd86eadf7ea06d1f1cce","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2252118,"upload_time":"2025-04-14T11:27:08","upload_time_iso_8601":"2025-04-14T11:27:08.431200Z","url":"https://files.pythonhosted.org/packages/fd/ce/fdf624f12da45dc9b314175d3454c49f33df7c6c6a1c81f14a3d7e9155be/capstone-6.0.0a4-cp310-cp310-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"ab111e820781491b60958a4393d2bfb4705374ebc5d2c034f8e7b7695811c181","md5":"20200518ba778958e9a10333eb536ab0","sha256":"c95f411183ef714bf341073d6093642c6c00a0377b9e9fc581a3b77d9d9e0fe1"},"downloads":-1,"filename":"capstone-6.0.0a4-cp310-cp310-win_arm64.whl","has_sig":false,"md5_digest":"20200518ba778958e9a10333eb536ab0","packagetype":"bdist_wheel","python_version":"cp310","requires_python":">=3.8","size":2210983,"upload_time":"2025-04-14T11:27:09","upload_time_iso_8601":"2025-04-14T11:27:09.845618Z","url":"https://files.pythonhosted.org/packages/ab/11/1e820781491b60958a4393d2bfb4705374ebc5d2c034f8e7b7695811c181/capstone-6.0.0a4-cp310-cp310-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"52ea55e7e726fc5692842fa0288c1be2f7397edd83c71aa3545176a6634728ad","md5":"95968aaaed6cb150c497b1033175f5bc","sha256":"624db65efa6b6c76e561b8b678ca47b1bc98fdba8c0841d884ac23dad1df21e6"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"95968aaaed6cb150c497b1033175f5bc","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":3489946,"upload_time":"2025-04-14T11:27:11","upload_time_iso_8601":"2025-04-14T11:27:11.451884Z","url":"https://files.pythonhosted.org/packages/52/ea/55e7e726fc5692842fa0288c1be2f7397edd83c71aa3545176a6634728ad/capstone-6.0.0a4-cp311-cp311-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"7a680fe8b7472f7d0705ff733b73a627de40539e13fc24fabe0925d5168d5103","md5":"1a0fb0d6f41478cdf727e80a04da3bed","sha256":"b907666508d244b947bb598334954e61f0749c9d7619d2ff5d189fd50facd55a"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"1a0fb0d6f41478cdf727e80a04da3bed","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1895902,"upload_time":"2025-04-14T11:27:12","upload_time_iso_8601":"2025-04-14T11:27:12.670161Z","url":"https://files.pythonhosted.org/packages/7a/68/0fe8b7472f7d0705ff733b73a627de40539e13fc24fabe0925d5168d5103/capstone-6.0.0a4-cp311-cp311-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"2a58361dd9c17aa6fe0c03a468c24482471ac4199860ee2cd77189a845e2603b","md5":"ae999c295086fa60658e9e38f0de968e","sha256":"8c132a9f5d024fdb5a45db2e78ace7bb8bdb92661a61262921693aa94234c22f"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"ae999c295086fa60658e9e38f0de968e","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":1961922,"upload_time":"2025-04-14T11:27:14","upload_time_iso_8601":"2025-04-14T11:27:14.386365Z","url":"https://files.pythonhosted.org/packages/2a/58/361dd9c17aa6fe0c03a468c24482471ac4199860ee2cd77189a845e2603b/capstone-6.0.0a4-cp311-cp311-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"0d2a3d63fe56098e7de6ee8fb5ba538a340bc5c62c204b15880af1a786750932","md5":"c151652eb382e55721b3622f6ebc1f71","sha256":"e4d5ef6beb87338e637b6d8b04adef463a82f2ea8b99926e9f08ed38df8a19bd"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"c151652eb382e55721b3622f6ebc1f71","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2279891,"upload_time":"2025-04-14T11:27:15","upload_time_iso_8601":"2025-04-14T11:27:15.928785Z","url":"https://files.pythonhosted.org/packages/0d/2a/3d63fe56098e7de6ee8fb5ba538a340bc5c62c204b15880af1a786750932/capstone-6.0.0a4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"7f17b23a035203fe3f1f50951078fd7ab41d41581751badca21d4c321b05d291","md5":"a78ace29dd37e8133630e739e1309056","sha256":"ac4f8ac1b9ca4337adffe12a2a5c2e82f546f864e3d102207269991e8a047691"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"a78ace29dd37e8133630e739e1309056","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2321919,"upload_time":"2025-04-14T11:27:17","upload_time_iso_8601":"2025-04-14T11:27:17.014011Z","url":"https://files.pythonhosted.org/packages/7f/17/b23a035203fe3f1f50951078fd7ab41d41581751badca21d4c321b05d291/capstone-6.0.0a4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"dee1a20c3a0d85450ef7c9ce2bce8af12c52853869adf2a316ca589f9954b34e","md5":"5e22503b7c0164bb4c53f4ecb3b59c67","sha256":"fea6dde6f356a9d3eacda72e93107146265db3e02b06c9e3d82c6d13ce90310c"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"5e22503b7c0164bb4c53f4ecb3b59c67","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2289664,"upload_time":"2025-04-14T11:27:18","upload_time_iso_8601":"2025-04-14T11:27:18.591507Z","url":"https://files.pythonhosted.org/packages/de/e1/a20c3a0d85450ef7c9ce2bce8af12c52853869adf2a316ca589f9954b34e/capstone-6.0.0a4-cp311-cp311-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"0c0bfa5d56d7095a9853b3702981e284e31fd3326951ab7315a8c6fe98dd87d9","md5":"98bdfde008dbb3ad03b6967095d87b1c","sha256":"b4dd5ede5c2ac679ed8d1e18ef72cf7bbaceaecbf27eb41a76556bfd1331d418"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"98bdfde008dbb3ad03b6967095d87b1c","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2312539,"upload_time":"2025-04-14T11:27:20","upload_time_iso_8601":"2025-04-14T11:27:20.133316Z","url":"https://files.pythonhosted.org/packages/0c/0b/fa5d56d7095a9853b3702981e284e31fd3326951ab7315a8c6fe98dd87d9/capstone-6.0.0a4-cp311-cp311-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"bcb8b836911c854ac93b4cdaef4f938ae9fd6d3e8df3960e40adb1d1e8a2ec18","md5":"0f137f0b449a3d08557950b16303dc13","sha256":"9f1cb304f7330ecfad18d94fe64169ca2d98c4188574b2e8bfd9515ae9a9c2b0"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-win_amd64.whl","has_sig":false,"md5_digest":"0f137f0b449a3d08557950b16303dc13","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2252118,"upload_time":"2025-04-14T11:27:21","upload_time_iso_8601":"2025-04-14T11:27:21.317196Z","url":"https://files.pythonhosted.org/packages/bc/b8/b836911c854ac93b4cdaef4f938ae9fd6d3e8df3960e40adb1d1e8a2ec18/capstone-6.0.0a4-cp311-cp311-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"c381fccc557cd0ff316a6fcc7c7e97cf3a05bcd07357372c14aa3542abf5c79a","md5":"5b7316871e464e62f9bd7ce77dbf4472","sha256":"b23a9200fcf878879925fc674311d0431f9de5d07d8a442c353a62b6f3082b25"},"downloads":-1,"filename":"capstone-6.0.0a4-cp311-cp311-win_arm64.whl","has_sig":false,"md5_digest":"5b7316871e464e62f9bd7ce77dbf4472","packagetype":"bdist_wheel","python_version":"cp311","requires_python":">=3.8","size":2210984,"upload_time":"2025-04-14T11:27:22","upload_time_iso_8601":"2025-04-14T11:27:22.429047Z","url":"https://files.pythonhosted.org/packages/c3/81/fccc557cd0ff316a6fcc7c7e97cf3a05bcd07357372c14aa3542abf5c79a/capstone-6.0.0a4-cp311-cp311-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"b047ff0a5fd95060aaf450490a1145e7955fad029be0a063fe866b0306bb79d9","md5":"e2d24cbaf029d30394b144c486a13bde","sha256":"e3a9350abd4433f7a50a43dec9845f58709c14e7c4644d7dcd540a66b985ecc6"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-macosx_10_13_universal2.whl","has_sig":false,"md5_digest":"e2d24cbaf029d30394b144c486a13bde","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":3489948,"upload_time":"2025-04-14T11:27:23","upload_time_iso_8601":"2025-04-14T11:27:23.712682Z","url":"https://files.pythonhosted.org/packages/b0/47/ff0a5fd95060aaf450490a1145e7955fad029be0a063fe866b0306bb79d9/capstone-6.0.0a4-cp312-cp312-macosx_10_13_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"c9542b0b473b58cf7fb181c05cb9b1b9f47fd1c2457029d6e5591a127d484c23","md5":"aa61200ce73bf1b940b6b12872360add","sha256":"a39e8421a61e8e6324a3cdb18f9d599be4c1fdf9ca2d38bf3c2cc513a4331e6b"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"aa61200ce73bf1b940b6b12872360add","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1895904,"upload_time":"2025-04-14T11:27:25","upload_time_iso_8601":"2025-04-14T11:27:25.384678Z","url":"https://files.pythonhosted.org/packages/c9/54/2b0b473b58cf7fb181c05cb9b1b9f47fd1c2457029d6e5591a127d484c23/capstone-6.0.0a4-cp312-cp312-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"3a51310375f014eeb923ccde94ad0b3809cc2548029f558b7830b8a7766e1389","md5":"1849de9c7e39218176f69c755f0fcc35","sha256":"4a8d72f398ead1a51115350b7e57415f7dbd118cecbb9193bc663c481a10baf0"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"1849de9c7e39218176f69c755f0fcc35","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":1961922,"upload_time":"2025-04-14T11:27:26","upload_time_iso_8601":"2025-04-14T11:27:26.904059Z","url":"https://files.pythonhosted.org/packages/3a/51/310375f014eeb923ccde94ad0b3809cc2548029f558b7830b8a7766e1389/capstone-6.0.0a4-cp312-cp312-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"baa0fff69eaba09fd4f1c5fe95a4001bcbbd777dc451e245313dd16e1c7db1ae","md5":"0f362903415a7d80f99c7f07d942501b","sha256":"513e392bbaf5e9310a7409eba0699077767b44a0dd41ce70c30fd2132d431ce5"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"0f362903415a7d80f99c7f07d942501b","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2279894,"upload_time":"2025-04-14T11:27:28","upload_time_iso_8601":"2025-04-14T11:27:28.448382Z","url":"https://files.pythonhosted.org/packages/ba/a0/fff69eaba09fd4f1c5fe95a4001bcbbd777dc451e245313dd16e1c7db1ae/capstone-6.0.0a4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"c0adefaa0c8704548da3fa0f8801e4b8d9288e65c6e05fc0e3b861b302676664","md5":"3cabf28f0ac9c65a5aa7fcd2621a7505","sha256":"18e700366f05c291289c994329e00f6ba4899503d02ca77c768734f555841cb7"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"3cabf28f0ac9c65a5aa7fcd2621a7505","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2321918,"upload_time":"2025-04-14T11:27:29","upload_time_iso_8601":"2025-04-14T11:27:29.663221Z","url":"https://files.pythonhosted.org/packages/c0/ad/efaa0c8704548da3fa0f8801e4b8d9288e65c6e05fc0e3b861b302676664/capstone-6.0.0a4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"5c7da2715b78e0342a18f5778e5a92eafd3a5c25494558054c39a89c9c92dcd5","md5":"cc5a2ca39a65ac9e0aaa78a2b4465b72","sha256":"3bc925fa3ad432010132eb8fdc4688cbc7e47aa3f5e2952307f414f25de486fd"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"cc5a2ca39a65ac9e0aaa78a2b4465b72","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2289667,"upload_time":"2025-04-14T11:27:31","upload_time_iso_8601":"2025-04-14T11:27:31.234570Z","url":"https://files.pythonhosted.org/packages/5c/7d/a2715b78e0342a18f5778e5a92eafd3a5c25494558054c39a89c9c92dcd5/capstone-6.0.0a4-cp312-cp312-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"7c3c482adad4a45f23fe183bbc66870e816101c208b8365bad5c81f131893ef8","md5":"f06e23f0a7bfdead56baf2a7bbae74b7","sha256":"643e77dc7ae9ee5e8333303b66a7e783162d0d05fe7f2deeba094f5f2cfd68d1"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"f06e23f0a7bfdead56baf2a7bbae74b7","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2312538,"upload_time":"2025-04-14T11:27:32","upload_time_iso_8601":"2025-04-14T11:27:32.777918Z","url":"https://files.pythonhosted.org/packages/7c/3c/482adad4a45f23fe183bbc66870e816101c208b8365bad5c81f131893ef8/capstone-6.0.0a4-cp312-cp312-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"d1950eaf2857319fe44c1fde718a3f3bf0e07907951102863469aa2d16e6e71d","md5":"7c41c7fabe036ae3ea10a217849b2e18","sha256":"bfb634ac0085a98031b42aaed64d12cdc46fc383a43cd224ef239bfdee22c9f0"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-win_amd64.whl","has_sig":false,"md5_digest":"7c41c7fabe036ae3ea10a217849b2e18","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2252117,"upload_time":"2025-04-14T11:27:34","upload_time_iso_8601":"2025-04-14T11:27:34.276544Z","url":"https://files.pythonhosted.org/packages/d1/95/0eaf2857319fe44c1fde718a3f3bf0e07907951102863469aa2d16e6e71d/capstone-6.0.0a4-cp312-cp312-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"db32d6caccaa374070903e520742d47a2e367f93aafd030e52bab753918df011","md5":"1f80e3a1b0e0329ec513b902f7d57b16","sha256":"9a88f020e01e1f451028cd2db609213ac5951c9c473457740fb4e368137464c3"},"downloads":-1,"filename":"capstone-6.0.0a4-cp312-cp312-win_arm64.whl","has_sig":false,"md5_digest":"1f80e3a1b0e0329ec513b902f7d57b16","packagetype":"bdist_wheel","python_version":"cp312","requires_python":">=3.8","size":2210985,"upload_time":"2025-04-14T11:27:36","upload_time_iso_8601":"2025-04-14T11:27:36.256358Z","url":"https://files.pythonhosted.org/packages/db/32/d6caccaa374070903e520742d47a2e367f93aafd030e52bab753918df011/capstone-6.0.0a4-cp312-cp312-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"ad9d2b84d5d465a44c0c4357279885f4c6de4feff8aef6320744a2650f9612c1","md5":"655e2ac6262f44c291fa6eb7b6f2852e","sha256":"5db66c3c273c82f70ae68751d4b9c6241f7327bbeed9ee55ce4116ef5fcdbc6e"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-macosx_10_13_universal2.whl","has_sig":false,"md5_digest":"655e2ac6262f44c291fa6eb7b6f2852e","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":3489946,"upload_time":"2025-04-14T11:27:37","upload_time_iso_8601":"2025-04-14T11:27:37.541346Z","url":"https://files.pythonhosted.org/packages/ad/9d/2b84d5d465a44c0c4357279885f4c6de4feff8aef6320744a2650f9612c1/capstone-6.0.0a4-cp313-cp313-macosx_10_13_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"35819366d6de1d7516e759e3110da1118c430db2c1ed33f27f9c67fad14d30cb","md5":"1735ab085a3d50d3325c082e44d2961e","sha256":"4041ff19810d5a81582f8e33c0e39c6db0704945188c21945234c92e0900c465"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"1735ab085a3d50d3325c082e44d2961e","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":1895904,"upload_time":"2025-04-14T11:27:38","upload_time_iso_8601":"2025-04-14T11:27:38.701427Z","url":"https://files.pythonhosted.org/packages/35/81/9366d6de1d7516e759e3110da1118c430db2c1ed33f27f9c67fad14d30cb/capstone-6.0.0a4-cp313-cp313-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"862ae16249fd0ca2464ad6696d826598015f3e0ee1b8f9deec8b7076f34a8b85","md5":"500dbc89f9597de9cea469674b1eebd7","sha256":"32fce2e387182a65c2a3bcf4d1e13a5410c45f56f73247777ba0bdea0b365b50"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"500dbc89f9597de9cea469674b1eebd7","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":1961922,"upload_time":"2025-04-14T11:27:40","upload_time_iso_8601":"2025-04-14T11:27:40.223326Z","url":"https://files.pythonhosted.org/packages/86/2a/e16249fd0ca2464ad6696d826598015f3e0ee1b8f9deec8b7076f34a8b85/capstone-6.0.0a4-cp313-cp313-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"c2f6e2c85f0e37321bcc6156bc2ac91dbb9ce403d0832c6c4fca65122d9f1971","md5":"364e1fcfab35bf39a85765ff5607877e","sha256":"805b5a908525d17bb92922316bbeeaba571758f283085bd7d98219f4083761c4"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"364e1fcfab35bf39a85765ff5607877e","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2279893,"upload_time":"2025-04-14T11:27:43","upload_time_iso_8601":"2025-04-14T11:27:43.005600Z","url":"https://files.pythonhosted.org/packages/c2/f6/e2c85f0e37321bcc6156bc2ac91dbb9ce403d0832c6c4fca65122d9f1971/capstone-6.0.0a4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"12130f8f7b88611a430e576142976a05d4a2581fbc64617cc3b2070b668ce1b0","md5":"e478b605be41a0e66ae8392ece736b76","sha256":"8f43a8d9d0c483a6b1540829acf47488cd1d2e0de7b5e6a92084234f37461932"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"e478b605be41a0e66ae8392ece736b76","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2321918,"upload_time":"2025-04-14T11:27:44","upload_time_iso_8601":"2025-04-14T11:27:44.222073Z","url":"https://files.pythonhosted.org/packages/12/13/0f8f7b88611a430e576142976a05d4a2581fbc64617cc3b2070b668ce1b0/capstone-6.0.0a4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"0025b253ae59c03e5bc33c3cad30137216f0d9a482a80e68eb77492d1a6a2903","md5":"9f8e4f94d2eb3423ca5a2a36cdf134cb","sha256":"4d8ebbc57e5437c5345d101c1076d5faff50e21b4c3c1caa0738c6372deaeaf2"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"9f8e4f94d2eb3423ca5a2a36cdf134cb","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2289664,"upload_time":"2025-04-14T11:27:45","upload_time_iso_8601":"2025-04-14T11:27:45.345444Z","url":"https://files.pythonhosted.org/packages/00/25/b253ae59c03e5bc33c3cad30137216f0d9a482a80e68eb77492d1a6a2903/capstone-6.0.0a4-cp313-cp313-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"b37f2d8a702508d0b19e572bcd10a09a93b0c73caaecea106183b00b9cdcbb1b","md5":"f1627a6331f1f7f2afd7bbc20d5f2a39","sha256":"a04bb61d769141afd7639b121ff47c9e0b20362f33780083c2f05f3446ee5b58"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"f1627a6331f1f7f2afd7bbc20d5f2a39","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2312542,"upload_time":"2025-04-14T11:27:46","upload_time_iso_8601":"2025-04-14T11:27:46.957657Z","url":"https://files.pythonhosted.org/packages/b3/7f/2d8a702508d0b19e572bcd10a09a93b0c73caaecea106183b00b9cdcbb1b/capstone-6.0.0a4-cp313-cp313-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"da58fc08a41ce1483b83434cbe9e739bfa1f765bc8a2e27ff4c651c3e4a63bc4","md5":"6be3364a0e906f2240bfc4bef189ffee","sha256":"8c38b86e7b4a9752643d470676ba8996bbdd8e2e7a22eca52485292c439ff93f"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-win_amd64.whl","has_sig":false,"md5_digest":"6be3364a0e906f2240bfc4bef189ffee","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2252117,"upload_time":"2025-04-14T11:27:48","upload_time_iso_8601":"2025-04-14T11:27:48.501893Z","url":"https://files.pythonhosted.org/packages/da/58/fc08a41ce1483b83434cbe9e739bfa1f765bc8a2e27ff4c651c3e4a63bc4/capstone-6.0.0a4-cp313-cp313-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"136de7cc611c59f33ab0114827e2c10a2f815a498e669ecaca0235f680c30e54","md5":"f0584bcb509e9af0bb1692893fe11576","sha256":"8864fac943ac1eb18e051ce20f99ff614adb707ef606df591c3cfaf414dff99d"},"downloads":-1,"filename":"capstone-6.0.0a4-cp313-cp313-win_arm64.whl","has_sig":false,"md5_digest":"f0584bcb509e9af0bb1692893fe11576","packagetype":"bdist_wheel","python_version":"cp313","requires_python":">=3.8","size":2210983,"upload_time":"2025-04-14T11:27:49","upload_time_iso_8601":"2025-04-14T11:27:49.716520Z","url":"https://files.pythonhosted.org/packages/13/6d/e7cc611c59f33ab0114827e2c10a2f815a498e669ecaca0235f680c30e54/capstone-6.0.0a4-cp313-cp313-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"2350d23cd95f0fa624b3c499f04b9c172bc58b10508bf2fc770ea8c1da4e4a63","md5":"61a8ba68c0baf8dee9b5b9fce9f2f2a4","sha256":"8696e888d9ade2decbbbb6aa06515a277d7e2564d98cf82b1bf9ff89df86eefe"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"61a8ba68c0baf8dee9b5b9fce9f2f2a4","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":3489709,"upload_time":"2025-04-14T11:27:51","upload_time_iso_8601":"2025-04-14T11:27:51.267879Z","url":"https://files.pythonhosted.org/packages/23/50/d23cd95f0fa624b3c499f04b9c172bc58b10508bf2fc770ea8c1da4e4a63/capstone-6.0.0a4-cp38-cp38-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"ab146277d65813b50875f297678519d5fc3bc9e88b312f279d0d4edcb541528a","md5":"ba8754c05e8bb7daf27d48d43af9b396","sha256":"c78f98aae814abd5eb9139a68f22cff8690a037e275d50fb85c87d1088f8a708"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"ba8754c05e8bb7daf27d48d43af9b396","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1895664,"upload_time":"2025-04-14T11:27:52","upload_time_iso_8601":"2025-04-14T11:27:52.546727Z","url":"https://files.pythonhosted.org/packages/ab/14/6277d65813b50875f297678519d5fc3bc9e88b312f279d0d4edcb541528a/capstone-6.0.0a4-cp38-cp38-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"30a643c198aa2032f5a3d867eeccc422a84354b09ab279b4c5f9c8142dcb1575","md5":"0be0be761a04512d5fbd21260a580dc8","sha256":"99f39e5d624305c3e1839762dcb477e2e3d0a5dd5ec4a5e44a3b623ea845d0c7"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"0be0be761a04512d5fbd21260a580dc8","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1961683,"upload_time":"2025-04-14T11:27:53","upload_time_iso_8601":"2025-04-14T11:27:53.724553Z","url":"https://files.pythonhosted.org/packages/30/a6/43c198aa2032f5a3d867eeccc422a84354b09ab279b4c5f9c8142dcb1575/capstone-6.0.0a4-cp38-cp38-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"18f54f8c0452f52fbace3ca952ab5f4ec82d378492ac6ccbae0d14c26dcfd219","md5":"dfc38f9a7737afa04f4f871e0a3a22c7","sha256":"d9e03b256afebbda3332221a2917ae3f7debd9b62d44f24d53e5892ff22e5df3"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"dfc38f9a7737afa04f4f871e0a3a22c7","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2279660,"upload_time":"2025-04-14T11:27:55","upload_time_iso_8601":"2025-04-14T11:27:55.025651Z","url":"https://files.pythonhosted.org/packages/18/f5/4f8c0452f52fbace3ca952ab5f4ec82d378492ac6ccbae0d14c26dcfd219/capstone-6.0.0a4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"54941a8ff3bcd35096cb289fcc17781cd6e2cbd1511b88f43ce8b0868bccec16","md5":"849ec09bbb1535a6b600345a18479d58","sha256":"6c8d027e2d77ed6ee5f5262ece362e99141886b0d58433775fcfb64ef328fead"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"849ec09bbb1535a6b600345a18479d58","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2321685,"upload_time":"2025-04-14T11:27:56","upload_time_iso_8601":"2025-04-14T11:27:56.163316Z","url":"https://files.pythonhosted.org/packages/54/94/1a8ff3bcd35096cb289fcc17781cd6e2cbd1511b88f43ce8b0868bccec16/capstone-6.0.0a4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"34e7ac1c2a55bc6c393c870059a35674d0a486ddabf3ac6e993479cc762cb318","md5":"d11f78e7fa7c9c30b00536ebfdc328ab","sha256":"2103aa4ffed09f1eb0867bac48e848ee6cb99068bcf3e44d81dfd1619f84adfd"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"d11f78e7fa7c9c30b00536ebfdc328ab","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2289431,"upload_time":"2025-04-14T11:27:57","upload_time_iso_8601":"2025-04-14T11:27:57.264811Z","url":"https://files.pythonhosted.org/packages/34/e7/ac1c2a55bc6c393c870059a35674d0a486ddabf3ac6e993479cc762cb318/capstone-6.0.0a4-cp38-cp38-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79df38872af2c1025582633b78f9a694ea566e32a8ae8b8e3ff0191a3398880c"},"digests":{"blake2b_256":"03ffe35a15d593d24d32eeb6ccf8c6d160cdf7db76ef7c40b6afa027d9cdeded","md5":"0881c4aab88af400a2c5b198e1572fc5","sha256":"2d95aec65509ee0db949c6107003d895e318dd3e9ae30720db218296b84dc05c"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"0881c4aab88af400a2c5b198e1572fc5","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2312303,"upload_time":"2025-04-14T11:27:58","upload_time_iso_8601":"2025-04-14T11:27:58.392992Z","url":"https://files.pythonhosted.org/packages/03/ff/e35a15d593d24d32eeb6ccf8c6d160cdf7db76ef7c40b6afa027d9cdeded/capstone-6.0.0a4-cp38-cp38-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1c8239f368733b9919ce56ad29878301244ba0849132ee828266bb3a67db1d25"},"digests":{"blake2b_256":"b70b3a6fa00fb71b66c9e0708049d47c3b09863f07ce38f11133021d63d3925a","md5":"b5aac3334292263ae1878cee19e5e292","sha256":"067f1533b66606468eb3eff4d1b011aae021341ee597dd0b57aab989d33d9814"},"downloads":-1,"filename":"capstone-6.0.0a4-cp38-cp38-win_amd64.whl","has_sig":false,"md5_digest":"b5aac3334292263ae1878cee19e5e292","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2252028,"upload_time":"2025-04-14T11:28:00","upload_time_iso_8601":"2025-04-14T11:28:00.170111Z","url":"https://files.pythonhosted.org/packages/b7/0b/3a6fa00fb71b66c9e0708049d47c3b09863f07ce38f11133021d63d3925a/capstone-6.0.0a4-cp38-cp38-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"99cd7eedf85c86435318bdc1c4193e3de53538f5353308b9bf16882c84d67ab3","md5":"608d07e7f87bfaf313a038098aa6f1ba","sha256":"b8b46255d0faf80b335124badcf62c9efe178824487a7e9109db684fc191fe93"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"608d07e7f87bfaf313a038098aa6f1ba","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":1895901,"upload_time":"2025-04-14T11:28:01","upload_time_iso_8601":"2025-04-14T11:28:01.299007Z","url":"https://files.pythonhosted.org/packages/99/cd/7eedf85c86435318bdc1c4193e3de53538f5353308b9bf16882c84d67ab3/capstone-6.0.0a4-cp39-cp39-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"393905b35471f1a94475929a8fce0baa6fec1578c75c8692c4e4b3a2c56906ca","md5":"16432c4cd081d477c51c19581ba05904","sha256":"40fa691a3705a3645bfe52bf62b3fb1eff173cb05423394c3a15c6644272eae1"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"16432c4cd081d477c51c19581ba05904","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":1961919,"upload_time":"2025-04-14T11:28:03","upload_time_iso_8601":"2025-04-14T11:28:03.121344Z","url":"https://files.pythonhosted.org/packages/39/39/05b35471f1a94475929a8fce0baa6fec1578c75c8692c4e4b3a2c56906ca/capstone-6.0.0a4-cp39-cp39-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"894023861fffc3765051d2275de62f5e1791cbefd5dd030f4771d9ba341b87a7","md5":"b0ec2ee37e8c32c96cb5c087d4e817a5","sha256":"3980fe60743a61b68af63bd5bfda41d5a6d47465554fa17f5a51ac68c33b3c73"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"b0ec2ee37e8c32c96cb5c087d4e817a5","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2279891,"upload_time":"2025-04-14T11:28:04","upload_time_iso_8601":"2025-04-14T11:28:04.257761Z","url":"https://files.pythonhosted.org/packages/89/40/23861fffc3765051d2275de62f5e1791cbefd5dd030f4771d9ba341b87a7/capstone-6.0.0a4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"4ee08d23e44e4c9a29ad884c7059564b03398715c12e15465f003a667702b0d3","md5":"8fdcd54eda299665f1c6f0abb06a52f0","sha256":"2ad3f29803a3eb69f14b4d70352fa28c1818d2a5bba44297561eb930ffd31c17"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"8fdcd54eda299665f1c6f0abb06a52f0","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2321920,"upload_time":"2025-04-14T11:28:05","upload_time_iso_8601":"2025-04-14T11:28:05.513268Z","url":"https://files.pythonhosted.org/packages/4e/e0/8d23e44e4c9a29ad884c7059564b03398715c12e15465f003a667702b0d3/capstone-6.0.0a4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"cc2317a3619c0d1462b5a72b267339f9ed8f6771c4acc2061b8727582c207e2b","md5":"afb9ed8d40d9de2578c4bd48be3b26e5","sha256":"353310a12dc2ecf5af3a607264f8050aa322efcb19368a4d726b009e07c58867"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"afb9ed8d40d9de2578c4bd48be3b26e5","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2289664,"upload_time":"2025-04-14T11:28:06","upload_time_iso_8601":"2025-04-14T11:28:06.781487Z","url":"https://files.pythonhosted.org/packages/cc/23/17a3619c0d1462b5a72b267339f9ed8f6771c4acc2061b8727582c207e2b/capstone-6.0.0a4-cp39-cp39-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"480ded1ab3822610ba36df0503730e3c32de49e7f286091cbd85a480385f5c89"},"digests":{"blake2b_256":"0ff94cfe9a35958a50f6da67b89898bbf3f3f8c1ded877e5ff4a7b6bba378de8","md5":"87851d4d7781fdc34f6e223a99e0e754","sha256":"a577cc1e471b69e9b0d74f2b5165b8b996a8a74b412b53b49d6f476f8cbc1bd0"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"87851d4d7781fdc34f6e223a99e0e754","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2312538,"upload_time":"2025-04-14T11:28:08","upload_time_iso_8601":"2025-04-14T11:28:08.073638Z","url":"https://files.pythonhosted.org/packages/0f/f9/4cfe9a35958a50f6da67b89898bbf3f3f8c1ded877e5ff4a7b6bba378de8/capstone-6.0.0a4-cp39-cp39-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"11fe67bd4e5cbc7c00ddaacc76ebca4447504e80ee670d9b7d3986ea56572027","md5":"cb9ae142428c89ac6b8caae64cffd95e","sha256":"94ab8e0ae9cf7d8baa56b6660eb304408587f22430b5d99a2210badaa1ee712a"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-win_amd64.whl","has_sig":false,"md5_digest":"cb9ae142428c89ac6b8caae64cffd95e","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2252114,"upload_time":"2025-04-14T11:28:09","upload_time_iso_8601":"2025-04-14T11:28:09.238146Z","url":"https://files.pythonhosted.org/packages/11/fe/67bd4e5cbc7c00ddaacc76ebca4447504e80ee670d9b7d3986ea56572027/capstone-6.0.0a4-cp39-cp39-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"162c0131918bb60dc47059d3ba684732b7d58bf471297999247be7c097c10ec3"},"digests":{"blake2b_256":"8076d9d35bab792314cef141d5d78276f970d9fc5215ddfb034273653ea50b53","md5":"8889e931b557b88d391abe5b128362b7","sha256":"804bf47fc3f72a622dc9317306998cb30f011a0e1c45b0b1422d6a0f0e0f047a"},"downloads":-1,"filename":"capstone-6.0.0a4-cp39-cp39-win_arm64.whl","has_sig":false,"md5_digest":"8889e931b557b88d391abe5b128362b7","packagetype":"bdist_wheel","python_version":"cp39","requires_python":">=3.8","size":2210980,"upload_time":"2025-04-14T11:28:10","upload_time_iso_8601":"2025-04-14T11:28:10.462443Z","url":"https://files.pythonhosted.org/packages/80/76/d9d35bab792314cef141d5d78276f970d9fc5215ddfb034273653ea50b53/capstone-6.0.0a4-cp39-cp39-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"2ee8ed930d72d01d84705b85f49d28285eb0667af793d31ac29ca296f5b67b5f","md5":"541b4cfbd4a23835a7149be6eeebea9a","sha256":"62ca96f952e8d38913cf1e1edafbfc6cba533031b45c6dcf3854e8a68605e965"},"downloads":-1,"filename":"capstone-6.0.0a4.tar.gz","has_sig":false,"md5_digest":"541b4cfbd4a23835a7149be6eeebea9a","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":4799040,"upload_time":"2025-04-14T11:28:12","upload_time_iso_8601":"2025-04-14T11:28:12.091775Z","url":"https://files.pythonhosted.org/packages/2e/e8/ed930d72d01d84705b85f49d28285eb0667af793d31ac29ca296f5b67b5f/capstone-6.0.0a4.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a5":[{"comment_text":null,"core-metadata":{"sha256":"e5b97c53dc11634054582be7dfc3842a9599c6fa805f7bf72224d7f059d83c10"},"digests":{"blake2b_256":"55f59264cec292f66bdedb11650534ff07289499859dfcaea74455c3099a5fab","md5":"eb16625778bd0afc9f298d1820ee86bc","sha256":"2d82f08ad53bc5cef99afb4ec795ac48a3b6f60b87b6be59f5cd471f33297590"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"eb16625778bd0afc9f298d1820ee86bc","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1886083,"upload_time":"2025-08-03T15:05:01","upload_time_iso_8601":"2025-08-03T15:05:01.782363Z","url":"https://files.pythonhosted.org/packages/55/f5/9264cec292f66bdedb11650534ff07289499859dfcaea74455c3099a5fab/capstone-6.0.0a5-cp38-abi3-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"e5b97c53dc11634054582be7dfc3842a9599c6fa805f7bf72224d7f059d83c10"},"digests":{"blake2b_256":"e782512eec0561a8d25b55066dc924987264e99d9254a22f5fe56be7decc8968","md5":"08e06758c87a73813bafedc34d840047","sha256":"946e9c6d22b71ff223bc673d67bdebb6a29ce0b633663e63748b7c20ee9dfd32"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"08e06758c87a73813bafedc34d840047","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1954096,"upload_time":"2025-08-03T15:05:03","upload_time_iso_8601":"2025-08-03T15:05:03.588651Z","url":"https://files.pythonhosted.org/packages/e7/82/512eec0561a8d25b55066dc924987264e99d9254a22f5fe56be7decc8968/capstone-6.0.0a5-cp38-abi3-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"e5b97c53dc11634054582be7dfc3842a9599c6fa805f7bf72224d7f059d83c10"},"digests":{"blake2b_256":"c700ea0266c352eb19d9a4de027cde4bc1237a01b8c37651197e7f4b257912bc","md5":"f5a16515eb81f0a0679328c7dccbe07f","sha256":"469e8c2103dd55dfa19a257dc51cdeee0b580ef038bd5bc51538939990ca2901"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"f5a16515eb81f0a0679328c7dccbe07f","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2231113,"upload_time":"2025-08-03T15:05:05","upload_time_iso_8601":"2025-08-03T15:05:05.220522Z","url":"https://files.pythonhosted.org/packages/c7/00/ea0266c352eb19d9a4de027cde4bc1237a01b8c37651197e7f4b257912bc/capstone-6.0.0a5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"e5b97c53dc11634054582be7dfc3842a9599c6fa805f7bf72224d7f059d83c10"},"digests":{"blake2b_256":"f6c0a7d08f537c0b8caf61b99a7a47f7641b0aedda087c2cfa9d9132a08c46bd","md5":"de788c42195417766b00ff9314a8f1f3","sha256":"8c75b2596b7fd81a4072fe6ca69d979b13f2e2d503b1743606137314aa7fcb79"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"de788c42195417766b00ff9314a8f1f3","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2285342,"upload_time":"2025-08-03T15:05:06","upload_time_iso_8601":"2025-08-03T15:05:06.315631Z","url":"https://files.pythonhosted.org/packages/f6/c0/a7d08f537c0b8caf61b99a7a47f7641b0aedda087c2cfa9d9132a08c46bd/capstone-6.0.0a5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"e5b97c53dc11634054582be7dfc3842a9599c6fa805f7bf72224d7f059d83c10"},"digests":{"blake2b_256":"6b989890cbf39aac7bb0bf3ae8a5da0d2efb2f16132c5d8537add290ce3ecc65","md5":"84ddf02b3aa5a933bcc40abd23923320","sha256":"4be0b926f86091044584409e30a9f7415e54dba866fade11b7606ddcaca1015f"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"84ddf02b3aa5a933bcc40abd23923320","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2236292,"upload_time":"2025-08-03T15:05:07","upload_time_iso_8601":"2025-08-03T15:05:07.706382Z","url":"https://files.pythonhosted.org/packages/6b/98/9890cbf39aac7bb0bf3ae8a5da0d2efb2f16132c5d8537add290ce3ecc65/capstone-6.0.0a5-cp38-abi3-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"e5b97c53dc11634054582be7dfc3842a9599c6fa805f7bf72224d7f059d83c10"},"digests":{"blake2b_256":"06dce75de4b26c95d3ea7dbba153d953c43dd59dc42cb28083f7f3b5798e087b","md5":"fd7df080f602cabf98f332da449cb369","sha256":"226dfa4c35052d77bc32b15001e5d28e96bd7091b3b90ce1a9d348d8b7d3243a"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"fd7df080f602cabf98f332da449cb369","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2289685,"upload_time":"2025-08-03T15:05:09","upload_time_iso_8601":"2025-08-03T15:05:09.125836Z","url":"https://files.pythonhosted.org/packages/06/dc/e75de4b26c95d3ea7dbba153d953c43dd59dc42cb28083f7f3b5798e087b/capstone-6.0.0a5-cp38-abi3-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"3998c0a014b8f54dd74e7e533f0fbe6536333124d685e091c7a8747c84be758f"},"digests":{"blake2b_256":"176c8f8f071bf513468456bf8028695bdee5ed919780d523eda5d81a5542a0d4","md5":"71ebc7800a9faa42e789bf4259487390","sha256":"3f72c8a23f2008fea7b00f524b2ce6d1a3792d24c6a98e23e0941614479b8831"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-win_amd64.whl","has_sig":false,"md5_digest":"71ebc7800a9faa42e789bf4259487390","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2252281,"upload_time":"2025-08-03T15:05:10","upload_time_iso_8601":"2025-08-03T15:05:10.656916Z","url":"https://files.pythonhosted.org/packages/17/6c/8f8f071bf513468456bf8028695bdee5ed919780d523eda5d81a5542a0d4/capstone-6.0.0a5-cp38-abi3-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"00f2ce846c1b28cb59f3dd9bb6ce6f74e6a81358d56404e9d14d746d266a1f00"},"digests":{"blake2b_256":"2ed5da2a39f41562d6d2fcdf7b71f9055f26407111a0d540569fddcd1cda0a8e","md5":"a284efad8ef7d6c892e688e5f4e95517","sha256":"a39abe2e5c0cbf9f03c78e08ff83cbf36e666a2d84a5030f4259e6a86f80cb0a"},"downloads":-1,"filename":"capstone-6.0.0a5-cp38-abi3-win_arm64.whl","has_sig":false,"md5_digest":"a284efad8ef7d6c892e688e5f4e95517","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2216355,"upload_time":"2025-08-03T15:05:11","upload_time_iso_8601":"2025-08-03T15:05:11.790879Z","url":"https://files.pythonhosted.org/packages/2e/d5/da2a39f41562d6d2fcdf7b71f9055f26407111a0d540569fddcd1cda0a8e/capstone-6.0.0a5-cp38-abi3-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"00d341b6b8689d54478e680907fbd512106e450594581c6898d7ad82090cc2a0","md5":"8e1c69658c4ff7807d9904ca0fca078a","sha256":"8f33b3ec2e2e93998d7bcb1b4d83faf2a2e27ac8516f8b1a945f956bd32d27f7"},"downloads":-1,"filename":"capstone-6.0.0a5.tar.gz","has_sig":false,"md5_digest":"8e1c69658c4ff7807d9904ca0fca078a","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":4906056,"upload_time":"2025-08-03T15:05:12","upload_time_iso_8601":"2025-08-03T15:05:12.899435Z","url":"https://files.pythonhosted.org/packages/00/d3/41b6b8689d54478e680907fbd512106e450594581c6898d7ad82090cc2a0/capstone-6.0.0a5.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a6":[{"comment_text":null,"core-metadata":{"sha256":"827e564849676db2c91433e9ac431d302214c4e13a271fcbab9b270d27c9f307"},"digests":{"blake2b_256":"f15c39687b3ab960beeb61a6284661c33ccd8a56ac9e778ba8f8875766c8a822","md5":"55143514677644f7c7a3cdf3f1637125","sha256":"43998d259550d6ed21f3c78d4d4cebb7bb8c041f2c062c88bd9bd1a64c7b83fd"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"55143514677644f7c7a3cdf3f1637125","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":1883323,"upload_time":"2026-01-13T16:24:30","upload_time_iso_8601":"2026-01-13T16:24:30.478504Z","url":"https://files.pythonhosted.org/packages/f1/5c/39687b3ab960beeb61a6284661c33ccd8a56ac9e778ba8f8875766c8a822/capstone-6.0.0a6-cp314-cp314t-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"827e564849676db2c91433e9ac431d302214c4e13a271fcbab9b270d27c9f307"},"digests":{"blake2b_256":"b44e1e1f6b68714e879006cdd9b99cb7a03abc2540b0d3d6c20b70ce2e75b6fe","md5":"3b4fdaff90c415f233074beb747d7883","sha256":"734845075e84ca9780f19da0df6abdfaedbdee050c965ad73895fa87fc04f1fc"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"3b4fdaff90c415f233074beb747d7883","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":1978936,"upload_time":"2026-01-13T16:24:32","upload_time_iso_8601":"2026-01-13T16:24:32.122293Z","url":"https://files.pythonhosted.org/packages/b4/4e/1e1f6b68714e879006cdd9b99cb7a03abc2540b0d3d6c20b70ce2e75b6fe/capstone-6.0.0a6-cp314-cp314t-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"827e564849676db2c91433e9ac431d302214c4e13a271fcbab9b270d27c9f307"},"digests":{"blake2b_256":"1e5997d48bf3b68d1dbc50b736936d24c8f70ac3bfd7a81ee14bcba72d3a88e3","md5":"62317adacc38c7f5a54461e6c860d13c","sha256":"b7548bb5c1bbcc8fca34136c2142aee4eea6cc3e9084544c7878fa87350546cc"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"62317adacc38c7f5a54461e6c860d13c","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2236357,"upload_time":"2026-01-13T16:24:33","upload_time_iso_8601":"2026-01-13T16:24:33.162290Z","url":"https://files.pythonhosted.org/packages/1e/59/97d48bf3b68d1dbc50b736936d24c8f70ac3bfd7a81ee14bcba72d3a88e3/capstone-6.0.0a6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"827e564849676db2c91433e9ac431d302214c4e13a271fcbab9b270d27c9f307"},"digests":{"blake2b_256":"ce80b97866f8c4e10f875e4da12c5553740c03bb90e232db73c9657610168f75","md5":"d2c1b541f98c22626c93191654f7bf17","sha256":"45d8857ac7bce8c8387e5a4c33150ad45e165cd7330913eeca6d55adba8d4cc6"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"d2c1b541f98c22626c93191654f7bf17","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2290793,"upload_time":"2026-01-13T16:24:34","upload_time_iso_8601":"2026-01-13T16:24:34.578946Z","url":"https://files.pythonhosted.org/packages/ce/80/b97866f8c4e10f875e4da12c5553740c03bb90e232db73c9657610168f75/capstone-6.0.0a6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"827e564849676db2c91433e9ac431d302214c4e13a271fcbab9b270d27c9f307"},"digests":{"blake2b_256":"03d7c2307be86c1ac6fafbfb4de0b43d36935b7577e2b0d5bf96fcaf7d565a60","md5":"0f7fd6f3203ddb3d7d9d541cafb3ff3b","sha256":"33c95893262f873e4276a3518bbe19f20cec4af9aa306022a453e60f2cdba366"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"0f7fd6f3203ddb3d7d9d541cafb3ff3b","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2243589,"upload_time":"2026-01-13T16:24:36","upload_time_iso_8601":"2026-01-13T16:24:36.087876Z","url":"https://files.pythonhosted.org/packages/03/d7/c2307be86c1ac6fafbfb4de0b43d36935b7577e2b0d5bf96fcaf7d565a60/capstone-6.0.0a6-cp314-cp314t-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"827e564849676db2c91433e9ac431d302214c4e13a271fcbab9b270d27c9f307"},"digests":{"blake2b_256":"a55def3cfa381b7082cde0a3924631a16b89990859d7f0033c37bec239471cf2","md5":"ebb757b0eb23f210bb2d9013a45436b3","sha256":"be3ac9213e011843759f8b9709b49fe8aa38ba61350f117a2b0e2c98402aec7f"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"ebb757b0eb23f210bb2d9013a45436b3","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2290838,"upload_time":"2026-01-13T16:24:37","upload_time_iso_8601":"2026-01-13T16:24:37.535700Z","url":"https://files.pythonhosted.org/packages/a5/5d/ef3cfa381b7082cde0a3924631a16b89990859d7f0033c37bec239471cf2/capstone-6.0.0a6-cp314-cp314t-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"87a3ac5dd05dd35815f0ba3022be6dbd1e2e1cbf3d906768573a580e79a06d5d"},"digests":{"blake2b_256":"ea6aa47940cdedbad3f5779f73260fb7b923fdafe9c183f36c6b034278e7d1de","md5":"dbc02220e77d27a48f0b96e6b9582b51","sha256":"658a34542e17b434a1685dd6aa5f4d9e6898d9664eea1d8380aed3899ff05ef1"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-win_amd64.whl","has_sig":false,"md5_digest":"dbc02220e77d27a48f0b96e6b9582b51","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2326193,"upload_time":"2026-01-13T16:24:38","upload_time_iso_8601":"2026-01-13T16:24:38.976722Z","url":"https://files.pythonhosted.org/packages/ea/6a/a47940cdedbad3f5779f73260fb7b923fdafe9c183f36c6b034278e7d1de/capstone-6.0.0a6-cp314-cp314t-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"87a3ac5dd05dd35815f0ba3022be6dbd1e2e1cbf3d906768573a580e79a06d5d"},"digests":{"blake2b_256":"5da2e513f5d9bb47ed85556e1e4076d7fbabcb35e910f98bc2685c78b991b9a0","md5":"aced10b329eb6c863c0b6b7687476fef","sha256":"7d4ce016e88b059d60838c8ccc6a7fb43285bf36461dd8601f2b6d20e602d161"},"downloads":-1,"filename":"capstone-6.0.0a6-cp314-cp314t-win_arm64.whl","has_sig":false,"md5_digest":"aced10b329eb6c863c0b6b7687476fef","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2273961,"upload_time":"2026-01-13T16:24:40","upload_time_iso_8601":"2026-01-13T16:24:40.161639Z","url":"https://files.pythonhosted.org/packages/5d/a2/e513f5d9bb47ed85556e1e4076d7fbabcb35e910f98bc2685c78b991b9a0/capstone-6.0.0a6-cp314-cp314t-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1087517864e9b14d46c5684fb27d39d2c26a7c34db48e910f4ee41b99b636c57"},"digests":{"blake2b_256":"109939136865b1acd43b4c7d788c464d5dc1333036ed9c1a2c45323974c49875","md5":"bd4fa683f5d4a5bb6d2d813e66c2a722","sha256":"f1c9d38b03d4793f7a401defaa2b1b0162069a50b1a7c0d0665342cd2f0ea4a7"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"bd4fa683f5d4a5bb6d2d813e66c2a722","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1883071,"upload_time":"2026-01-13T16:24:41","upload_time_iso_8601":"2026-01-13T16:24:41.611113Z","url":"https://files.pythonhosted.org/packages/10/99/39136865b1acd43b4c7d788c464d5dc1333036ed9c1a2c45323974c49875/capstone-6.0.0a6-cp38-abi3-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1087517864e9b14d46c5684fb27d39d2c26a7c34db48e910f4ee41b99b636c57"},"digests":{"blake2b_256":"e53c1e6c9f021df585db7ddf20dc0e47ca12a17e5ebdb4521271d5418629c97a","md5":"3735efb9e5d05664f04b32812e7b303a","sha256":"21bc081b721819ca499b18ba57e23c51d51829187dd19db0649cb53f31e87deb"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"3735efb9e5d05664f04b32812e7b303a","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":1978684,"upload_time":"2026-01-13T16:24:43","upload_time_iso_8601":"2026-01-13T16:24:43.738770Z","url":"https://files.pythonhosted.org/packages/e5/3c/1e6c9f021df585db7ddf20dc0e47ca12a17e5ebdb4521271d5418629c97a/capstone-6.0.0a6-cp38-abi3-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1087517864e9b14d46c5684fb27d39d2c26a7c34db48e910f4ee41b99b636c57"},"digests":{"blake2b_256":"519b84e7ce7a3f5662ed013964e8122b8aa9ba75f4312a6216efa7a0bb1525ef","md5":"5b98ca569149cabfdff68e6d7d9653a7","sha256":"e13c1f96a578f155c1e91887a21d80d6b9d9ad7b34edea48032a0338e3090e75"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"5b98ca569149cabfdff68e6d7d9653a7","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2236120,"upload_time":"2026-01-13T16:24:45","upload_time_iso_8601":"2026-01-13T16:24:45.582264Z","url":"https://files.pythonhosted.org/packages/51/9b/84e7ce7a3f5662ed013964e8122b8aa9ba75f4312a6216efa7a0bb1525ef/capstone-6.0.0a6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1087517864e9b14d46c5684fb27d39d2c26a7c34db48e910f4ee41b99b636c57"},"digests":{"blake2b_256":"2efc7c2086498b156a0fe1ecb935f725933e472445002eba7ee2b43e75faf399","md5":"04006b69c68051b537b9c4f371a77aa7","sha256":"c2e0e6992c37dbdd0435675d0a5fdd97107d5ee7e6201b85dea7b54c83a320c2"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"04006b69c68051b537b9c4f371a77aa7","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2290563,"upload_time":"2026-01-13T16:24:47","upload_time_iso_8601":"2026-01-13T16:24:47.105252Z","url":"https://files.pythonhosted.org/packages/2e/fc/7c2086498b156a0fe1ecb935f725933e472445002eba7ee2b43e75faf399/capstone-6.0.0a6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1087517864e9b14d46c5684fb27d39d2c26a7c34db48e910f4ee41b99b636c57"},"digests":{"blake2b_256":"e412badf35f8a5aecb9cac2196b333905ac3b3ad46aa7c10f6c8f3e849ef2dcd","md5":"8a3fce07a8e7d8e34e93a9f58afe45e0","sha256":"6f88f6a014033b2c4312a2049e969044e49df70a42e20191a43c12d620133e9d"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"8a3fce07a8e7d8e34e93a9f58afe45e0","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2243353,"upload_time":"2026-01-13T16:24:49","upload_time_iso_8601":"2026-01-13T16:24:49.486657Z","url":"https://files.pythonhosted.org/packages/e4/12/badf35f8a5aecb9cac2196b333905ac3b3ad46aa7c10f6c8f3e849ef2dcd/capstone-6.0.0a6-cp38-abi3-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1087517864e9b14d46c5684fb27d39d2c26a7c34db48e910f4ee41b99b636c57"},"digests":{"blake2b_256":"900ab144c505ff6c0b07d848ee7064303edece4f6e029860bc6d92560d3a500a","md5":"60cc7948858322ef82ced3af0a4a8efa","sha256":"69d10adf1de51bfb76b43a139a8ae143e89533c96a839a93f6d9d60e7ecb1695"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"60cc7948858322ef82ced3af0a4a8efa","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2290602,"upload_time":"2026-01-13T16:24:51","upload_time_iso_8601":"2026-01-13T16:24:51.504771Z","url":"https://files.pythonhosted.org/packages/90/0a/b144c505ff6c0b07d848ee7064303edece4f6e029860bc6d92560d3a500a/capstone-6.0.0a6-cp38-abi3-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d7c32919f3a94a465f5db73d334dfa604cfbd790ff04b7d1c8de8dacf697b4dc"},"digests":{"blake2b_256":"126328177d24d25bbcf5fb9993d14b1c0a3b109646264d732a18ec960af8399e","md5":"16ac5b39150505e839746a269385d384","sha256":"cfdcfb2f92d1726f2b25c3d8a84ee433c9e1b5a7cb238393295950c920ab28d5"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-win_amd64.whl","has_sig":false,"md5_digest":"16ac5b39150505e839746a269385d384","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2264544,"upload_time":"2026-01-13T16:24:52","upload_time_iso_8601":"2026-01-13T16:24:52.922406Z","url":"https://files.pythonhosted.org/packages/12/63/28177d24d25bbcf5fb9993d14b1c0a3b109646264d732a18ec960af8399e/capstone-6.0.0a6-cp38-abi3-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"87a3ac5dd05dd35815f0ba3022be6dbd1e2e1cbf3d906768573a580e79a06d5d"},"digests":{"blake2b_256":"ad05a46639b6cacc93c630b44784fbc3d5860fc10c70a94c949a04c171630474","md5":"ec2859ce0ab5a9e3cbebae4083f065c5","sha256":"af7c9e6361f5e5cad9f647ea5688dbeba50bcba6339121e3868ee8f63a06eecd"},"downloads":-1,"filename":"capstone-6.0.0a6-cp38-abi3-win_arm64.whl","has_sig":false,"md5_digest":"ec2859ce0ab5a9e3cbebae4083f065c5","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2217986,"upload_time":"2026-01-13T16:24:55","upload_time_iso_8601":"2026-01-13T16:24:55.176395Z","url":"https://files.pythonhosted.org/packages/ad/05/a46639b6cacc93c630b44784fbc3d5860fc10c70a94c949a04c171630474/capstone-6.0.0a6-cp38-abi3-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"7ede936bf6f9c1cea84a56612b9ddef868ac074b50faaa9de57e83d73905600b","md5":"a35bcb87e040090fc60dacabf28f5c89","sha256":"c5c2d3a6ca8568d156a44f763e7f5930d9c1c43b3db3a687ced01fd77e25dcbb"},"downloads":-1,"filename":"capstone-6.0.0a6.tar.gz","has_sig":false,"md5_digest":"a35bcb87e040090fc60dacabf28f5c89","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":4907562,"upload_time":"2026-01-13T16:24:56","upload_time_iso_8601":"2026-01-13T16:24:56.370810Z","url":"https://files.pythonhosted.org/packages/7e/de/936bf6f9c1cea84a56612b9ddef868ac074b50faaa9de57e83d73905600b/capstone-6.0.0a6.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a7":[{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"0a08c0efa64a625a8ac43be0c4eb754c4bba9a6eaade31c1e659498ebbfe9047","md5":"759d4f0c4a2ecdd23973ec79f5bcfff6","sha256":"3d49f0748868ae23cfff4f67752abeb9fe79daf98f04ef2925118240883b1303"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"759d4f0c4a2ecdd23973ec79f5bcfff6","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2065390,"upload_time":"2026-02-16T13:50:36","upload_time_iso_8601":"2026-02-16T13:50:36.735306Z","url":"https://files.pythonhosted.org/packages/0a/08/c0efa64a625a8ac43be0c4eb754c4bba9a6eaade31c1e659498ebbfe9047/capstone-6.0.0a7-cp314-cp314t-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"970532aefc747f62337f5f5040646c34c299a26ef897c943fef3fd87ba1cd979","md5":"f317b68c8dded82ef6e1ddb4a56b2035","sha256":"56937e47d18122df21b2b1ea99458f8ac9dff7ac9c63705f789255e1146b04e9"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"f317b68c8dded82ef6e1ddb4a56b2035","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2227413,"upload_time":"2026-02-16T13:50:38","upload_time_iso_8601":"2026-02-16T13:50:38.585526Z","url":"https://files.pythonhosted.org/packages/97/05/32aefc747f62337f5f5040646c34c299a26ef897c943fef3fd87ba1cd979/capstone-6.0.0a7-cp314-cp314t-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"833d6e785f7946547ae606bb5ee827013c479eae1a6b9f7d0dfc6ea695f4b9b9","md5":"a8b1208b7fc73265e06a8b41a70282dd","sha256":"7c021464ec00c8cc0fb1a785ae8eb04ff99d0ed9ec34ce4273f5074ba74b9cf3"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"a8b1208b7fc73265e06a8b41a70282dd","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2499577,"upload_time":"2026-02-16T13:50:40","upload_time_iso_8601":"2026-02-16T13:50:40.120165Z","url":"https://files.pythonhosted.org/packages/83/3d/6e785f7946547ae606bb5ee827013c479eae1a6b9f7d0dfc6ea695f4b9b9/capstone-6.0.0a7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"7e58da12ce0ac915714c1e1d54ede1d26a53a1049fb6e5704221c3b768d27b74","md5":"4a0d74fadd0f0b45819cc0dfaa8fde77","sha256":"4844c50d935ccc56e126662b69c5aa0d562e3244fa445721a88533c53667132e"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"4a0d74fadd0f0b45819cc0dfaa8fde77","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2477870,"upload_time":"2026-02-16T13:50:41","upload_time_iso_8601":"2026-02-16T13:50:41.917774Z","url":"https://files.pythonhosted.org/packages/7e/58/da12ce0ac915714c1e1d54ede1d26a53a1049fb6e5704221c3b768d27b74/capstone-6.0.0a7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"c3058169d19ef9495cb537cd8c9e5133397235f0b152e57544683341872f3c54","md5":"42fa44b8e1ffc4ac8159f3a8779eb054","sha256":"1fb5c48ac07bcd62d528f98892dcc9c4332d3f82c8428194c3507fd944444327"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"42fa44b8e1ffc4ac8159f3a8779eb054","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2534211,"upload_time":"2026-02-16T13:50:43","upload_time_iso_8601":"2026-02-16T13:50:43.505385Z","url":"https://files.pythonhosted.org/packages/c3/05/8169d19ef9495cb537cd8c9e5133397235f0b152e57544683341872f3c54/capstone-6.0.0a7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"42fdff5d3d0ad155676b467eecd105b9c346c076c77fa7584edc3e086a0af11c","md5":"63f7f2315f218a512ea2756dee9b72d8","sha256":"1590c406b793e03efca4058b9176c904c6831103be4a6a2c17e3bbcde770e8f5"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"63f7f2315f218a512ea2756dee9b72d8","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2488067,"upload_time":"2026-02-16T13:50:44","upload_time_iso_8601":"2026-02-16T13:50:44.844808Z","url":"https://files.pythonhosted.org/packages/42/fd/ff5d3d0ad155676b467eecd105b9c346c076c77fa7584edc3e086a0af11c/capstone-6.0.0a7-cp314-cp314t-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"d220910ac9c78b44b9f0824288669153bc1bfeac1cb69d7e5d07b2430317aa4d","md5":"b10febfdb1ac11a1b62277a22fcdce5f","sha256":"b6e0bb2539eeb12dac39693bc3ba4b37ea7a464574025db662be60e5c790f87f"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"b10febfdb1ac11a1b62277a22fcdce5f","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2499830,"upload_time":"2026-02-16T13:50:46","upload_time_iso_8601":"2026-02-16T13:50:46.607596Z","url":"https://files.pythonhosted.org/packages/d2/20/910ac9c78b44b9f0824288669153bc1bfeac1cb69d7e5d07b2430317aa4d/capstone-6.0.0a7-cp314-cp314t-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"1ed7ce8aa6f80d26a75f89c48b22eea70fcf174401e98e5195e550ea52d3fada"},"digests":{"blake2b_256":"776c33fe489149e052d4cf2757ae4e9b1df80f74a50086859a12b9b4554a2137","md5":"2b71d3d524acb32e2267ecb8644da1ee","sha256":"fadbfd4a6476a6bd828060abc026c90c367a98871a2b04ef9c5c5e4246383565"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"2b71d3d524acb32e2267ecb8644da1ee","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2541701,"upload_time":"2026-02-16T13:50:48","upload_time_iso_8601":"2026-02-16T13:50:48.040178Z","url":"https://files.pythonhosted.org/packages/77/6c/33fe489149e052d4cf2757ae4e9b1df80f74a50086859a12b9b4554a2137/capstone-6.0.0a7-cp314-cp314t-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"81e1834ef9369fbf018c1aba6d91413acaab99f3b4b5e74742d6c0aae0599f1d"},"digests":{"blake2b_256":"3f5664316632d24125f536ecf208eb327f3a7697234e9a873ac23fb5750b00c3","md5":"68cfa337c363164888942e98ba1f0d73","sha256":"d49fb5dc87bedee2651d881d4bb9e4d1ea1216ea675a34e5e86531cb3f69ab63"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-win32.whl","has_sig":false,"md5_digest":"68cfa337c363164888942e98ba1f0d73","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2489955,"upload_time":"2026-02-16T13:50:50","upload_time_iso_8601":"2026-02-16T13:50:50.006814Z","url":"https://files.pythonhosted.org/packages/3f/56/64316632d24125f536ecf208eb327f3a7697234e9a873ac23fb5750b00c3/capstone-6.0.0a7-cp314-cp314t-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"81e1834ef9369fbf018c1aba6d91413acaab99f3b4b5e74742d6c0aae0599f1d"},"digests":{"blake2b_256":"61548a49cd8dc027a362b40c0fc39a3df947db14f466722f59bd1743a7ce4303","md5":"2f7641b1935781fb3cc6701d8cf1da15","sha256":"a2e60bd3f3247e518d14f9eb5657a61239caf1dc82a70e04c55395ed8ae709de"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-win_amd64.whl","has_sig":false,"md5_digest":"2f7641b1935781fb3cc6701d8cf1da15","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2514949,"upload_time":"2026-02-16T13:50:51","upload_time_iso_8601":"2026-02-16T13:50:51.133515Z","url":"https://files.pythonhosted.org/packages/61/54/8a49cd8dc027a362b40c0fc39a3df947db14f466722f59bd1743a7ce4303/capstone-6.0.0a7-cp314-cp314t-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"81e1834ef9369fbf018c1aba6d91413acaab99f3b4b5e74742d6c0aae0599f1d"},"digests":{"blake2b_256":"416a97caca49e2fbc7a0022714679ff5ec02ca26062b6e997f6852a0a4acece4","md5":"9c6debfa5d16731b61e12b4042373caf","sha256":"d1616f0c4fe2185f4ae1b08fa925a34891c19ed3b44336f6738f5fc3b7098a29"},"downloads":-1,"filename":"capstone-6.0.0a7-cp314-cp314t-win_arm64.whl","has_sig":false,"md5_digest":"9c6debfa5d16731b61e12b4042373caf","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2465562,"upload_time":"2026-02-16T13:50:52","upload_time_iso_8601":"2026-02-16T13:50:52.284980Z","url":"https://files.pythonhosted.org/packages/41/6a/97caca49e2fbc7a0022714679ff5ec02ca26062b6e997f6852a0a4acece4/capstone-6.0.0a7-cp314-cp314t-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"680a88f789126138cb2ff3e18d3c1eaa2d4c1fd3c117102b788fa045ec330cd7","md5":"b764609627b3edf90c8702132e9ccac4","sha256":"674dd7ccbcbe1a20cc5cc17c394850388792e5ac8357277018445ee3a72998d2"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"b764609627b3edf90c8702132e9ccac4","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2065135,"upload_time":"2026-02-16T13:50:53","upload_time_iso_8601":"2026-02-16T13:50:53.793167Z","url":"https://files.pythonhosted.org/packages/68/0a/88f789126138cb2ff3e18d3c1eaa2d4c1fd3c117102b788fa045ec330cd7/capstone-6.0.0a7-cp38-abi3-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"27d4a2c3dbbbcdf2f30b1fc157528468af01c7c0c73c09b56a7ce1382695edd2","md5":"a28f2a35bdf42e1f39920dbb0f8df259","sha256":"9ceb240fb4ae2b3650d9ddd55b968fbf96345aac47eca547f25b25d28b25c6bd"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"a28f2a35bdf42e1f39920dbb0f8df259","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2227158,"upload_time":"2026-02-16T13:50:54","upload_time_iso_8601":"2026-02-16T13:50:54.995271Z","url":"https://files.pythonhosted.org/packages/27/d4/a2c3dbbbcdf2f30b1fc157528468af01c7c0c73c09b56a7ce1382695edd2/capstone-6.0.0a7-cp38-abi3-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"7f8c93b41072e9679ad8d00b3953dbf6eb3e03b1af8c5789e183867597f700d2","md5":"44c6f3aa494f0dc864bf2ffbc9119f58","sha256":"09e15d788be1f012ec05354eb94c8e9ea35040f610c6b6c154a06c12647372f1"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"44c6f3aa494f0dc864bf2ffbc9119f58","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2499338,"upload_time":"2026-02-16T13:50:56","upload_time_iso_8601":"2026-02-16T13:50:56.158132Z","url":"https://files.pythonhosted.org/packages/7f/8c/93b41072e9679ad8d00b3953dbf6eb3e03b1af8c5789e183867597f700d2/capstone-6.0.0a7-cp38-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"dbd6964c618823008c4356474ca7d5b00daf5cb4016abd9d54060f652c4c8bbe","md5":"a08827152db4dffae2df980532235d73","sha256":"420b4aa5b292606570ad92995e90003499b0518a50727aed30d1da77b3fa7ad9"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"a08827152db4dffae2df980532235d73","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2477631,"upload_time":"2026-02-16T13:50:57","upload_time_iso_8601":"2026-02-16T13:50:57.451280Z","url":"https://files.pythonhosted.org/packages/db/d6/964c618823008c4356474ca7d5b00daf5cb4016abd9d54060f652c4c8bbe/capstone-6.0.0a7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"8fc50b0333f10ac7a5237edb9f45adfa2796b153eba1d85026c4ea8772c584f1","md5":"4b39252a1bca6516f63bc3b3a555fb8e","sha256":"628fbb6426ccd9971cd3f5e3846de11ef77b540efcbdcf79c9429bb7403a882f"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"4b39252a1bca6516f63bc3b3a555fb8e","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2533976,"upload_time":"2026-02-16T13:50:58","upload_time_iso_8601":"2026-02-16T13:50:58.739485Z","url":"https://files.pythonhosted.org/packages/8f/c5/0b0333f10ac7a5237edb9f45adfa2796b153eba1d85026c4ea8772c584f1/capstone-6.0.0a7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"ade09cd34d1831117ec993ab840c3d64a01f58ad1e3884636caef7fd2a95b049","md5":"f212613c0bd29f9880c1c108425ef434","sha256":"f6f585d4ce3fd8756d141a41ae52b4bc252e303f2d1e744a717e3f8f6e9fec52"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"f212613c0bd29f9880c1c108425ef434","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2487829,"upload_time":"2026-02-16T13:51:00","upload_time_iso_8601":"2026-02-16T13:51:00.586050Z","url":"https://files.pythonhosted.org/packages/ad/e0/9cd34d1831117ec993ab840c3d64a01f58ad1e3884636caef7fd2a95b049/capstone-6.0.0a7-cp38-abi3-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"e592f2ebcc24d2be4a1f8094fad0c005770156d9076d99308c9348089e2c0740","md5":"4f73dade37e7e62644deb0c17b78afa6","sha256":"f840420cf22e2c416a3aecdb8cdbfcda88e9a4d5260b068f1f6cf6e345d3b6d6"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"4f73dade37e7e62644deb0c17b78afa6","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2499594,"upload_time":"2026-02-16T13:51:02","upload_time_iso_8601":"2026-02-16T13:51:02.287523Z","url":"https://files.pythonhosted.org/packages/e5/92/f2ebcc24d2be4a1f8094fad0c005770156d9076d99308c9348089e2c0740/capstone-6.0.0a7-cp38-abi3-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"de5d221bb987db39f2a17b25d9d08b162fd54d347014c56a2c4a003183030dba"},"digests":{"blake2b_256":"abbd04b4c416272fdf68d31adaccc74c7adca245a3b39d304d8483cb726edb03","md5":"fc585c356f80a4201d7806419a19da0a","sha256":"eeeab76b4e08824f64fbd77c24678458a9288d36f8074c73f375157aa9243ae8"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"fc585c356f80a4201d7806419a19da0a","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2541463,"upload_time":"2026-02-16T13:51:03","upload_time_iso_8601":"2026-02-16T13:51:03.560925Z","url":"https://files.pythonhosted.org/packages/ab/bd/04b4c416272fdf68d31adaccc74c7adca245a3b39d304d8483cb726edb03/capstone-6.0.0a7-cp38-abi3-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79984fff1f58bf0f0dcbea58fba68d6186b71ab7025c87ab4360e9d19e3186a1"},"digests":{"blake2b_256":"9607aa86d13f37d2870415117c7c9838efef5d81d9f8c85eef092b07ddb7e868","md5":"d5b63ecb4e35f205858ea3f5b13dcc4e","sha256":"64d82dfd669c81cec9d87bba78a0f58c64532a5c2626098899c1e2ec5f56f2c2"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-win32.whl","has_sig":false,"md5_digest":"d5b63ecb4e35f205858ea3f5b13dcc4e","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2404297,"upload_time":"2026-02-16T13:51:04","upload_time_iso_8601":"2026-02-16T13:51:04.767463Z","url":"https://files.pythonhosted.org/packages/96/07/aa86d13f37d2870415117c7c9838efef5d81d9f8c85eef092b07ddb7e868/capstone-6.0.0a7-cp38-abi3-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"79984fff1f58bf0f0dcbea58fba68d6186b71ab7025c87ab4360e9d19e3186a1"},"digests":{"blake2b_256":"8f56b027e2e084530d672171a84b4f0236667563ef565ff2cf30a8d9b77002f1","md5":"eb707dece23829fa7db67d32e695ebb0","sha256":"e34c960e4bca5750b5a5c1bee65f8eaeb7df3b667060df1e50735f64e598e596"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-win_amd64.whl","has_sig":false,"md5_digest":"eb707dece23829fa7db67d32e695ebb0","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2455826,"upload_time":"2026-02-16T13:51:05","upload_time_iso_8601":"2026-02-16T13:51:05.900116Z","url":"https://files.pythonhosted.org/packages/8f/56/b027e2e084530d672171a84b4f0236667563ef565ff2cf30a8d9b77002f1/capstone-6.0.0a7-cp38-abi3-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"81e1834ef9369fbf018c1aba6d91413acaab99f3b4b5e74742d6c0aae0599f1d"},"digests":{"blake2b_256":"3f3c7d65171ef07881d33f5981a4e629b10093fa1f7fd41d28fed8e03a8224b2","md5":"d1b88b2c76e37648bf5484791c6b813a","sha256":"ae3724da1e1ebc947469cef3444109d88c0c0f57e63786159d6e603f4d781660"},"downloads":-1,"filename":"capstone-6.0.0a7-cp38-abi3-win_arm64.whl","has_sig":false,"md5_digest":"d1b88b2c76e37648bf5484791c6b813a","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2401981,"upload_time":"2026-02-16T13:51:07","upload_time_iso_8601":"2026-02-16T13:51:07.023831Z","url":"https://files.pythonhosted.org/packages/3f/3c/7d65171ef07881d33f5981a4e629b10093fa1f7fd41d28fed8e03a8224b2/capstone-6.0.0a7-cp38-abi3-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"7e1cf209b80aa02faf5000d6db935364fdc5dcacca1d5dce446b0a4b88fe0f7c","md5":"64ad0306e4972e87d67fc9b108f2a2fc","sha256":"26732de7f17c5d47aa0a5e2d943ad4c307186af277109213684b6ab8e0be5dd3"},"downloads":-1,"filename":"capstone-6.0.0a7.tar.gz","has_sig":false,"md5_digest":"64ad0306e4972e87d67fc9b108f2a2fc","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":5677959,"upload_time":"2026-02-16T13:51:08","upload_time_iso_8601":"2026-02-16T13:51:08.269964Z","url":"https://files.pythonhosted.org/packages/7e/1c/f209b80aa02faf5000d6db935364fdc5dcacca1d5dce446b0a4b88fe0f7c/capstone-6.0.0a7.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a8":[{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"e59d7bd03ddac1f1d7e4804b9da11faface05448005e84d53689e6ad2d9783c2","md5":"29c670045245d11e13aab02db68656ab","sha256":"b243ec07a36bf3541825839fcb7d12392a90dfeecb77b03b38ec4c24edae3c99"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"29c670045245d11e13aab02db68656ab","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2077579,"upload_time":"2026-05-23T19:50:25","upload_time_iso_8601":"2026-05-23T19:50:25.035535Z","url":"https://files.pythonhosted.org/packages/e5/9d/7bd03ddac1f1d7e4804b9da11faface05448005e84d53689e6ad2d9783c2/capstone-6.0.0a8-cp314-cp314t-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"040504ea4c3574b52bad0cf4e8503ddaca1a98fa21e449b48f1b29a3e7016ddf","md5":"f1d94f9a06d219eaa9775c3c42a84154","sha256":"01606222a0752f34b36159cb565b01e4b036b0ddb575b09f6ea6495c32f04fac"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"f1d94f9a06d219eaa9775c3c42a84154","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2247060,"upload_time":"2026-05-23T19:50:26","upload_time_iso_8601":"2026-05-23T19:50:26.856221Z","url":"https://files.pythonhosted.org/packages/04/05/04ea4c3574b52bad0cf4e8503ddaca1a98fa21e449b48f1b29a3e7016ddf/capstone-6.0.0a8-cp314-cp314t-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"eb583e227617ccaaf3043e3f2e51ec201ef0a34c643f106cc9ba0bbf3a376601","md5":"eab8e9ffff19dcf981c5af43eb1069ce","sha256":"7d7b13831ffda6aba9289588b6d83929a4f47371d9ef9316ec05c81732b5875e"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"eab8e9ffff19dcf981c5af43eb1069ce","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2509567,"upload_time":"2026-05-23T19:50:28","upload_time_iso_8601":"2026-05-23T19:50:28.287748Z","url":"https://files.pythonhosted.org/packages/eb/58/3e227617ccaaf3043e3f2e51ec201ef0a34c643f106cc9ba0bbf3a376601/capstone-6.0.0a8-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"b3969a0c209499a9c4cdc32708b272a2616693a4414d72d11b05eddfab8f00b5","md5":"c174b1cfe8f40d92d4ce611d15fadadf","sha256":"401b86d650523308f43ecab2401b5217587283b9b4e79afb765064d803118538"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"c174b1cfe8f40d92d4ce611d15fadadf","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2498299,"upload_time":"2026-05-23T19:50:29","upload_time_iso_8601":"2026-05-23T19:50:29.799640Z","url":"https://files.pythonhosted.org/packages/b3/96/9a0c209499a9c4cdc32708b272a2616693a4414d72d11b05eddfab8f00b5/capstone-6.0.0a8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"85283c80e5a32c64b7d87a3d2708aa9eeaebf7ad7635d247528057c140896b76","md5":"42cd3332963e6a7e4cbd5341a71210ed","sha256":"77d46d1d5ac9c52f24e982708d4dfd12c22fe562544e880d98646b795fe238df"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"42cd3332963e6a7e4cbd5341a71210ed","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2551633,"upload_time":"2026-05-23T19:50:31","upload_time_iso_8601":"2026-05-23T19:50:31.391174Z","url":"https://files.pythonhosted.org/packages/85/28/3c80e5a32c64b7d87a3d2708aa9eeaebf7ad7635d247528057c140896b76/capstone-6.0.0a8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"80babcdab0c4197a1d2765b9bd441ed02928f5d34464c7e250efd08f4c9d085d","md5":"4f7e4c9d423ab30261fbbce6054d6827","sha256":"430af1e78b5375ab5c86c18e6a66db4212c4661d9497025e1d2754b29462d594"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"4f7e4c9d423ab30261fbbce6054d6827","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2503553,"upload_time":"2026-05-23T19:50:32","upload_time_iso_8601":"2026-05-23T19:50:32.758829Z","url":"https://files.pythonhosted.org/packages/80/ba/bcdab0c4197a1d2765b9bd441ed02928f5d34464c7e250efd08f4c9d085d/capstone-6.0.0a8-cp314-cp314t-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"6ef1943903753fa847403f05b83a181c1675271727a0c30cccb5745a0b8b2c0f","md5":"87049e09604a286f81518f47a5a533d0","sha256":"38e68ea09b2df6d8866cad99a793f38cf5c809b124f78488067a9f7d56553047"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"87049e09604a286f81518f47a5a533d0","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2509775,"upload_time":"2026-05-23T19:50:34","upload_time_iso_8601":"2026-05-23T19:50:34.030604Z","url":"https://files.pythonhosted.org/packages/6e/f1/943903753fa847403f05b83a181c1675271727a0c30cccb5745a0b8b2c0f/capstone-6.0.0a8-cp314-cp314t-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"90138317794a18fff4d1c67bd0ed3f32f078b40bcb9be9e30ceccc8f021a61ed"},"digests":{"blake2b_256":"a7edd0555aae18bcabce8129d0c3337aa42ab2601284f1b9f805e24438198ad2","md5":"cedcd90e6afdeeb92d5e9adb22631c6f","sha256":"3920d42e684a95ee6e63a405b78dfc01983293d08fc94ba4df457176bb0b746e"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"cedcd90e6afdeeb92d5e9adb22631c6f","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2554031,"upload_time":"2026-05-23T19:50:35","upload_time_iso_8601":"2026-05-23T19:50:35.436220Z","url":"https://files.pythonhosted.org/packages/a7/ed/d0555aae18bcabce8129d0c3337aa42ab2601284f1b9f805e24438198ad2/capstone-6.0.0a8-cp314-cp314t-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"bf1cd5ab5c7fc44e4c5747e261ddb953bca5c2fcc9657da0e8ff1ed85ba85ece"},"digests":{"blake2b_256":"f0ee8c29eef655d8cb3352f65454325f5b5a5429a3dd244a0445dafcb5ba60af","md5":"1d18cd0509ba1a060326aa63e5a6f83d","sha256":"41888dffd98288dd19a0760f966aa90abdb5b0a768d613a55a0ccb1460cf20b4"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-win32.whl","has_sig":false,"md5_digest":"1d18cd0509ba1a060326aa63e5a6f83d","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2501621,"upload_time":"2026-05-23T19:50:37","upload_time_iso_8601":"2026-05-23T19:50:37.204888Z","url":"https://files.pythonhosted.org/packages/f0/ee/8c29eef655d8cb3352f65454325f5b5a5429a3dd244a0445dafcb5ba60af/capstone-6.0.0a8-cp314-cp314t-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"bf1cd5ab5c7fc44e4c5747e261ddb953bca5c2fcc9657da0e8ff1ed85ba85ece"},"digests":{"blake2b_256":"d5ac94f76642db10443a8d03f2e881b15a71c0e539228c28cac77c715aed84ab","md5":"8b42c3ac22a50a629478759b83e72c8b","sha256":"833761047f2ee4e3f78eeef2e3b27bdf6d8cb40c111b589b83ac20350eb25c13"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-win_amd64.whl","has_sig":false,"md5_digest":"8b42c3ac22a50a629478759b83e72c8b","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2534751,"upload_time":"2026-05-23T19:50:39","upload_time_iso_8601":"2026-05-23T19:50:39.055652Z","url":"https://files.pythonhosted.org/packages/d5/ac/94f76642db10443a8d03f2e881b15a71c0e539228c28cac77c715aed84ab/capstone-6.0.0a8-cp314-cp314t-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"bf1cd5ab5c7fc44e4c5747e261ddb953bca5c2fcc9657da0e8ff1ed85ba85ece"},"digests":{"blake2b_256":"2c3d63a87e85256b89462d12bc55c53b6f1fafa490cee3013c929b76f47ea3b9","md5":"74d6be49699909ebb90b206a5c8c1be2","sha256":"01578fbb240bfa49b473586b4094ed34868eb587a433722da74786c4666ea38b"},"downloads":-1,"filename":"capstone-6.0.0a8-cp314-cp314t-win_arm64.whl","has_sig":false,"md5_digest":"74d6be49699909ebb90b206a5c8c1be2","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2480948,"upload_time":"2026-05-23T19:50:40","upload_time_iso_8601":"2026-05-23T19:50:40.384011Z","url":"https://files.pythonhosted.org/packages/2c/3d/63a87e85256b89462d12bc55c53b6f1fafa490cee3013c929b76f47ea3b9/capstone-6.0.0a8-cp314-cp314t-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"2ea5213aeec0de7428aef6e133174c0db14589efd810619820ac7ea9927e5987","md5":"f1941b3a08c1a38e033ad14cf73ca1f9","sha256":"21a18a9befbe90b094007ef249de1ba6d00529f86f4fcf7ff1adc6abcc064417"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"f1941b3a08c1a38e033ad14cf73ca1f9","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2077331,"upload_time":"2026-05-23T19:50:42","upload_time_iso_8601":"2026-05-23T19:50:42.725169Z","url":"https://files.pythonhosted.org/packages/2e/a5/213aeec0de7428aef6e133174c0db14589efd810619820ac7ea9927e5987/capstone-6.0.0a8-cp38-abi3-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"b01cbc94f097836e18ac0485df1c31658f437236a8db5b763584cd63f33c4c50","md5":"9160740298d65ee872405697a0932eda","sha256":"31921cecebd67db39007c95cbbb6a3f215f900fd974fbee1db34ad8d4a251ec2"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"9160740298d65ee872405697a0932eda","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2246809,"upload_time":"2026-05-23T19:50:44","upload_time_iso_8601":"2026-05-23T19:50:44.526062Z","url":"https://files.pythonhosted.org/packages/b0/1c/bc94f097836e18ac0485df1c31658f437236a8db5b763584cd63f33c4c50/capstone-6.0.0a8-cp38-abi3-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"562e7bf60ecf15a48ae7c90373ab6f78c7ce97ff898a4ef2a52bd2819d4941c1","md5":"824186e16ddb60a5213293ac83864857","sha256":"2fbb6270a7e21143bcdcd37584b69933c278bf6ffa80a579aaf4303b7edcb483"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"824186e16ddb60a5213293ac83864857","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2509329,"upload_time":"2026-05-23T19:50:46","upload_time_iso_8601":"2026-05-23T19:50:46.739800Z","url":"https://files.pythonhosted.org/packages/56/2e/7bf60ecf15a48ae7c90373ab6f78c7ce97ff898a4ef2a52bd2819d4941c1/capstone-6.0.0a8-cp38-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"bf54378fa620baee985ac1c73dac95f72c9be1f4c8992e60babd8c9944280615","md5":"a30c77a2f0a6d1ad2428c709d70fcb06","sha256":"f5e414e187ae636bc96f95c4d99e5aee719044f60355baf19ee712c03cb9631f"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"a30c77a2f0a6d1ad2428c709d70fcb06","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2498059,"upload_time":"2026-05-23T19:50:48","upload_time_iso_8601":"2026-05-23T19:50:48.719733Z","url":"https://files.pythonhosted.org/packages/bf/54/378fa620baee985ac1c73dac95f72c9be1f4c8992e60babd8c9944280615/capstone-6.0.0a8-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"16cd78bce37180352ac6b755459e37a34fa647d0635e6bc66ae9fceec7b5ab34","md5":"052bc8d8fc051a8b349d68c35ff484da","sha256":"5f86a505b938c68eea588d85ea46e2f964edd6605e11f523f46956d8ba9e1de7"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"052bc8d8fc051a8b349d68c35ff484da","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2551396,"upload_time":"2026-05-23T19:50:50","upload_time_iso_8601":"2026-05-23T19:50:50.580132Z","url":"https://files.pythonhosted.org/packages/16/cd/78bce37180352ac6b755459e37a34fa647d0635e6bc66ae9fceec7b5ab34/capstone-6.0.0a8-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"619fd9bfa77e1e7a15aa27cb6ffeb40291c72cf6ec9082bca6eae41828fa36f6","md5":"dcbd0762420d375297a30f04e37b4a5a","sha256":"6cc992ea68994e50f08645acdea7ba5ac9aa77a53793b4bb466822851096b576"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"dcbd0762420d375297a30f04e37b4a5a","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2503311,"upload_time":"2026-05-23T19:50:52","upload_time_iso_8601":"2026-05-23T19:50:52.279494Z","url":"https://files.pythonhosted.org/packages/61/9f/d9bfa77e1e7a15aa27cb6ffeb40291c72cf6ec9082bca6eae41828fa36f6/capstone-6.0.0a8-cp38-abi3-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"74f17c555d91e6e56bd095a9e04d35d59443597114344b38292abc4b6a4bd1cf","md5":"cf33020d943df1b99d14bf57dfa81acc","sha256":"0a8e2edb27355efbafa69cacd8826ae90db7bee1d924197fcf6e69a1afa5f964"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"cf33020d943df1b99d14bf57dfa81acc","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2509536,"upload_time":"2026-05-23T19:50:53","upload_time_iso_8601":"2026-05-23T19:50:53.967820Z","url":"https://files.pythonhosted.org/packages/74/f1/7c555d91e6e56bd095a9e04d35d59443597114344b38292abc4b6a4bd1cf/capstone-6.0.0a8-cp38-abi3-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"791572a1bd3fc3a13f7cf9d27782903dc6d9e1681cdcced80afd306159d35c29"},"digests":{"blake2b_256":"bce7630dc97026db196c7cb1a40b7723b6af8bbc7a4fe8c4ebeb3937f836244f","md5":"4edb30e264b1937b881447db1ab6f312","sha256":"8ef3a416044054ae6a1bab3bd65fea18886f63a976c2e6326ace91ff5caf4d77"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"4edb30e264b1937b881447db1ab6f312","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2553791,"upload_time":"2026-05-23T19:50:56","upload_time_iso_8601":"2026-05-23T19:50:56.061049Z","url":"https://files.pythonhosted.org/packages/bc/e7/630dc97026db196c7cb1a40b7723b6af8bbc7a4fe8c4ebeb3937f836244f/capstone-6.0.0a8-cp38-abi3-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d9e98c4ed797ca9c48ba430f48ffba3c432cab1c4b4c3284c902825e666c58eb"},"digests":{"blake2b_256":"acbecefacada0c6097f6a5b55a3aa03af3ea59f6103ddb2d9642e1ec77816041","md5":"8cec7ce1e607189ee9501da59c3d3664","sha256":"0ef0e16943e2115cdbc1294e4f0cc64f0a59932452ea63f4e99757ed1940135a"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-win32.whl","has_sig":false,"md5_digest":"8cec7ce1e607189ee9501da59c3d3664","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2418320,"upload_time":"2026-05-23T19:50:57","upload_time_iso_8601":"2026-05-23T19:50:57.650126Z","url":"https://files.pythonhosted.org/packages/ac/be/cefacada0c6097f6a5b55a3aa03af3ea59f6103ddb2d9642e1ec77816041/capstone-6.0.0a8-cp38-abi3-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"d9e98c4ed797ca9c48ba430f48ffba3c432cab1c4b4c3284c902825e666c58eb"},"digests":{"blake2b_256":"00552c5fa887de784f1c60027596f6bdc1639777cab77b340647012e6a4b89de","md5":"0287279a8eb76b3f6d9fe128f52bf7ba","sha256":"5b6a6067a8fa7f8fc72d90eabba8e9f251977e6441677c61ef60547619f3565d"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-win_amd64.whl","has_sig":false,"md5_digest":"0287279a8eb76b3f6d9fe128f52bf7ba","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2467644,"upload_time":"2026-05-23T19:50:59","upload_time_iso_8601":"2026-05-23T19:50:59.533440Z","url":"https://files.pythonhosted.org/packages/00/55/2c5fa887de784f1c60027596f6bdc1639777cab77b340647012e6a4b89de/capstone-6.0.0a8-cp38-abi3-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"bf1cd5ab5c7fc44e4c5747e261ddb953bca5c2fcc9657da0e8ff1ed85ba85ece"},"digests":{"blake2b_256":"c027da4a8011672681bb168e6f558fdac9171cd96ba57a82e9f72d46e01672c0","md5":"bffca362ecfa94b0c1e4c29763e04f9f","sha256":"569a89cb01576141c56e3a2abfce8d8236ed7649b23f4a3e9f377e653f2398b4"},"downloads":-1,"filename":"capstone-6.0.0a8-cp38-abi3-win_arm64.whl","has_sig":false,"md5_digest":"bffca362ecfa94b0c1e4c29763e04f9f","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2420992,"upload_time":"2026-05-23T19:51:01","upload_time_iso_8601":"2026-05-23T19:51:01.656252Z","url":"https://files.pythonhosted.org/packages/c0/27/da4a8011672681bb168e6f558fdac9171cd96ba57a82e9f72d46e01672c0/capstone-6.0.0a8-cp38-abi3-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"690d162c6a31d86e9eb866e4a3dcf880af3c22b0e06f34a42c67d7605fa59bdc","md5":"1488ba55c50975f215e8e8ad47188634","sha256":"177984419e035c7996c3cc6758fde8f7ca839f9267c7f49e2366cb3249cb8d59"},"downloads":-1,"filename":"capstone-6.0.0a8.tar.gz","has_sig":false,"md5_digest":"1488ba55c50975f215e8e8ad47188634","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":5698932,"upload_time":"2026-05-23T19:51:03","upload_time_iso_8601":"2026-05-23T19:51:03.833088Z","url":"https://files.pythonhosted.org/packages/69/0d/162c6a31d86e9eb866e4a3dcf880af3c22b0e06f34a42c67d7605fa59bdc/capstone-6.0.0a8.tar.gz","yanked":false,"yanked_reason":null}],"6.0.0a9":[{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"00de9b8879253122a6754128f6ceb0e381bea6a5942c27b8cb5dc8e0ee97988b","md5":"31e0f500010bdc137e0177012ed7e74b","sha256":"93c2057ba5739abbaf713ce4f2145bd5fd7a194315624af55caa8fefcd1c1314"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-macosx_10_13_x86_64.whl","has_sig":false,"md5_digest":"31e0f500010bdc137e0177012ed7e74b","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2077781,"upload_time":"2026-05-29T15:33:44","upload_time_iso_8601":"2026-05-29T15:33:44.155991Z","url":"https://files.pythonhosted.org/packages/00/de/9b8879253122a6754128f6ceb0e381bea6a5942c27b8cb5dc8e0ee97988b/capstone-6.0.0a9-cp314-cp314t-macosx_10_13_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"b40ff33ad90f732644b4e7f8be30de0fa3b2612ab1f3cb0dd2fd538e756cfd3f","md5":"8c39e7e2f8d94b9ecbe9e42b70872ce2","sha256":"e8dce415326a5d7b35b77ba22cd852d1840abc2c4004cc6e4e1614fecf6241b5"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"8c39e7e2f8d94b9ecbe9e42b70872ce2","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2247381,"upload_time":"2026-05-29T15:33:45","upload_time_iso_8601":"2026-05-29T15:33:45.595155Z","url":"https://files.pythonhosted.org/packages/b4/0f/f33ad90f732644b4e7f8be30de0fa3b2612ab1f3cb0dd2fd538e756cfd3f/capstone-6.0.0a9-cp314-cp314t-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"cce2f82d9237e8e52e82655669eb0e94dca8e5e885945a10e91ee9efeec0d2ab","md5":"976ae2743c7c0764e2a43b958042da88","sha256":"3c1379e6d64e6d5666f1e59d6d903981365ff0b14ca6120d284f89b9b62402f4"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"976ae2743c7c0764e2a43b958042da88","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2509785,"upload_time":"2026-05-29T15:33:46","upload_time_iso_8601":"2026-05-29T15:33:46.899322Z","url":"https://files.pythonhosted.org/packages/cc/e2/f82d9237e8e52e82655669eb0e94dca8e5e885945a10e91ee9efeec0d2ab/capstone-6.0.0a9-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"0fc0e0a3514415427f0798bfe3a80408c9040502741da5288e5aa83916de221d","md5":"adfa83c33bf71cc59ec3a16df7563140","sha256":"f418f179695f8143007a6e12f5f5f6171301850367b951b36f2190e65649a60b"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"adfa83c33bf71cc59ec3a16df7563140","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2498498,"upload_time":"2026-05-29T15:33:48","upload_time_iso_8601":"2026-05-29T15:33:48.291404Z","url":"https://files.pythonhosted.org/packages/0f/c0/e0a3514415427f0798bfe3a80408c9040502741da5288e5aa83916de221d/capstone-6.0.0a9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"652be3361b6bc7177c0b0ff70d27477a6734f5ed21832a450b9aed3a3281c408","md5":"ce8a2b323c670033f8d33019eba4debf","sha256":"13618f61d7e755daa60869defeecf97180865b1ecccd2217f77c771301d5beb8"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"ce8a2b323c670033f8d33019eba4debf","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2551858,"upload_time":"2026-05-29T15:33:49","upload_time_iso_8601":"2026-05-29T15:33:49.521895Z","url":"https://files.pythonhosted.org/packages/65/2b/e3361b6bc7177c0b0ff70d27477a6734f5ed21832a450b9aed3a3281c408/capstone-6.0.0a9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"817861860623e88cb14b60b047024c9923e553e8775d4a76759114c724a64bdf","md5":"8dadc2e39dab3f61cb3b8a61aafa7d3a","sha256":"476149597dc1858e0f59db05c34688db0c918936ad5c9dc95c333a036ef317e0"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"8dadc2e39dab3f61cb3b8a61aafa7d3a","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2503682,"upload_time":"2026-05-29T15:33:50","upload_time_iso_8601":"2026-05-29T15:33:50.810110Z","url":"https://files.pythonhosted.org/packages/81/78/61860623e88cb14b60b047024c9923e553e8775d4a76759114c724a64bdf/capstone-6.0.0a9-cp314-cp314t-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"5561005980e3512f9886a53c8e062c36055b907ace4b8e64c8552df804d8473b","md5":"00a8e839d5fb867b324a810607631c6d","sha256":"ae28077c211a6d0d753f31a99fc58029f5d0b000939dcad2708f66374406b618"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"00a8e839d5fb867b324a810607631c6d","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2509979,"upload_time":"2026-05-29T15:33:52","upload_time_iso_8601":"2026-05-29T15:33:52.037096Z","url":"https://files.pythonhosted.org/packages/55/61/005980e3512f9886a53c8e062c36055b907ace4b8e64c8552df804d8473b/capstone-6.0.0a9-cp314-cp314t-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"72388bbc81f18777d3541aa8f4e7fb6082948af5e257d625b552527996f48e4c"},"digests":{"blake2b_256":"9dd0cd8e2557e5e487cc09bace8928aa21be3fe379f8501094063392c2972b47","md5":"8c9a8ce3950fa50b52d82377e21642de","sha256":"6e9303441c1208167b7a469771f4d7beab7c6f8f1b21b74b7921bbcef8be71f3"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"8c9a8ce3950fa50b52d82377e21642de","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2554190,"upload_time":"2026-05-29T15:33:53","upload_time_iso_8601":"2026-05-29T15:33:53.314343Z","url":"https://files.pythonhosted.org/packages/9d/d0/cd8e2557e5e487cc09bace8928aa21be3fe379f8501094063392c2972b47/capstone-6.0.0a9-cp314-cp314t-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a922a94ab5e0c9db12225ea87cb781c2a1639596d305690a04fa1adc06f49393"},"digests":{"blake2b_256":"f9dd19feb891307cb9ba65f11e5e05b54738680899fbec87eaa6734a1d653e55","md5":"e7217ef0bb786b6027f05debc61498a6","sha256":"824b3428d56a793efc95bb20db2ff2014bf07b921a71d8e479860ac18a948704"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-win32.whl","has_sig":false,"md5_digest":"e7217ef0bb786b6027f05debc61498a6","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2501699,"upload_time":"2026-05-29T15:33:54","upload_time_iso_8601":"2026-05-29T15:33:54.481864Z","url":"https://files.pythonhosted.org/packages/f9/dd/19feb891307cb9ba65f11e5e05b54738680899fbec87eaa6734a1d653e55/capstone-6.0.0a9-cp314-cp314t-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a922a94ab5e0c9db12225ea87cb781c2a1639596d305690a04fa1adc06f49393"},"digests":{"blake2b_256":"26b5c4245440212d753b9a6c2ade3f5793bd85704cc403989a96125434ca35d4","md5":"9dd5adcc527bcfdf6b0ebb14cf76dab5","sha256":"8dd0262669e499bef2ef3564768433cbf9d686f4af51ce9b7973ed97a85d6603"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-win_amd64.whl","has_sig":false,"md5_digest":"9dd5adcc527bcfdf6b0ebb14cf76dab5","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2534890,"upload_time":"2026-05-29T15:33:55","upload_time_iso_8601":"2026-05-29T15:33:55.983665Z","url":"https://files.pythonhosted.org/packages/26/b5/c4245440212d753b9a6c2ade3f5793bd85704cc403989a96125434ca35d4/capstone-6.0.0a9-cp314-cp314t-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a922a94ab5e0c9db12225ea87cb781c2a1639596d305690a04fa1adc06f49393"},"digests":{"blake2b_256":"118dde3b6fd9c854db6c2f00cfa1f64d9eac612b36bbc0e3eeb56f4b55872012","md5":"8dd31d5bebad1cb55c6a962ef2fffda9","sha256":"67e9576c0beb3b3d2e4491b3c6bea7a127d8c802a2b1d9230c1730846237aff1"},"downloads":-1,"filename":"capstone-6.0.0a9-cp314-cp314t-win_arm64.whl","has_sig":false,"md5_digest":"8dd31d5bebad1cb55c6a962ef2fffda9","packagetype":"bdist_wheel","python_version":"cp314","requires_python":">=3.8","size":2481081,"upload_time":"2026-05-29T15:33:57","upload_time_iso_8601":"2026-05-29T15:33:57.224545Z","url":"https://files.pythonhosted.org/packages/11/8d/de3b6fd9c854db6c2f00cfa1f64d9eac612b36bbc0e3eeb56f4b55872012/capstone-6.0.0a9-cp314-cp314t-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"26d1a71954dfcef4da3fa09ebff51c4a24e545107c96fcdc1655622502f385ed","md5":"cf2cee18210b2c43561d8c6a81e9b72a","sha256":"4aeca7a17c0281fc88169f2cb34f62f3250bcc8f6c776104ac89a391b45835cb"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"cf2cee18210b2c43561d8c6a81e9b72a","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2077522,"upload_time":"2026-05-29T15:33:58","upload_time_iso_8601":"2026-05-29T15:33:58.445143Z","url":"https://files.pythonhosted.org/packages/26/d1/a71954dfcef4da3fa09ebff51c4a24e545107c96fcdc1655622502f385ed/capstone-6.0.0a9-cp38-abi3-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"f71aef30bbc066243eb8f90a897651360acc331572648dfc31cb5d63d285fb4d","md5":"73dfb2f7140b7de05f042739f5aea33f","sha256":"9d0ed6016fb504a2a44d63ffd9000a3a6953bc4d3738283fce0bf66ce1be871a"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"73dfb2f7140b7de05f042739f5aea33f","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2247123,"upload_time":"2026-05-29T15:33:59","upload_time_iso_8601":"2026-05-29T15:33:59.756725Z","url":"https://files.pythonhosted.org/packages/f7/1a/ef30bbc066243eb8f90a897651360acc331572648dfc31cb5d63d285fb4d/capstone-6.0.0a9-cp38-abi3-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"04c8cdef0ddc08933ba488a5a2a78ebb9edb469d42e4dcdf606747f5eba227f7","md5":"e035515d0fe25f76650fb647eb8c41db","sha256":"7ab414f06e0d87ddde498f37404b0722151e4e45684cfaed786209a42adc48eb"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","has_sig":false,"md5_digest":"e035515d0fe25f76650fb647eb8c41db","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2509549,"upload_time":"2026-05-29T15:34:00","upload_time_iso_8601":"2026-05-29T15:34:00.889730Z","url":"https://files.pythonhosted.org/packages/04/c8/cdef0ddc08933ba488a5a2a78ebb9edb469d42e4dcdf606747f5eba227f7/capstone-6.0.0a9-cp38-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"c1cd1401cc0404bdc61bb50667eab89ee9cf8385895a6eb0b43fdf214132c8e9","md5":"f35712eb736733554993f22e78a6b088","sha256":"dbcc908367dd6134989e8b67a4aa36863fde505408bc336ec074626dd7ba21f7"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","has_sig":false,"md5_digest":"f35712eb736733554993f22e78a6b088","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2498260,"upload_time":"2026-05-29T15:34:02","upload_time_iso_8601":"2026-05-29T15:34:02.175277Z","url":"https://files.pythonhosted.org/packages/c1/cd/1401cc0404bdc61bb50667eab89ee9cf8385895a6eb0b43fdf214132c8e9/capstone-6.0.0a9-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"2ca0925fcfeb6bbc3849d144406bb1f7a318e87d3a8b11935db5bb253a903c0a","md5":"7197a2085d0fc9939b5df89c2dfb69a9","sha256":"1ebeee020ca876b16b679272a4005b63c29d0d834cc7da4da840cb0f27e1e3ff"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","has_sig":false,"md5_digest":"7197a2085d0fc9939b5df89c2dfb69a9","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2551622,"upload_time":"2026-05-29T15:34:03","upload_time_iso_8601":"2026-05-29T15:34:03.513885Z","url":"https://files.pythonhosted.org/packages/2c/a0/925fcfeb6bbc3849d144406bb1f7a318e87d3a8b11935db5bb253a903c0a/capstone-6.0.0a9-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"6248fffe5c963c91cf1ef1682532c373ccc6c983cca63408864e3134d3930100","md5":"eff2335f9e66723e927f4325c8d67df8","sha256":"53329758eed713134099f35f0943ea36ab57914f03950ef06e966e78713d285d"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"eff2335f9e66723e927f4325c8d67df8","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2503444,"upload_time":"2026-05-29T15:34:04","upload_time_iso_8601":"2026-05-29T15:34:04.849621Z","url":"https://files.pythonhosted.org/packages/62/48/fffe5c963c91cf1ef1682532c373ccc6c983cca63408864e3134d3930100/capstone-6.0.0a9-cp38-abi3-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"32e0b399f276172b9dfcd79f5597a30d8f40489bedf75e711153f2ea96cf1195","md5":"f09979e609b0aadabb04754ad72567c6","sha256":"78675e26f7d4cd16d35786532dd672a400ca9e4069738b5f0b6dc336d218c626"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"f09979e609b0aadabb04754ad72567c6","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2509743,"upload_time":"2026-05-29T15:34:06","upload_time_iso_8601":"2026-05-29T15:34:06.099673Z","url":"https://files.pythonhosted.org/packages/32/e0/b399f276172b9dfcd79f5597a30d8f40489bedf75e711153f2ea96cf1195/capstone-6.0.0a9-cp38-abi3-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a5a1e01499f49e58ec381e00f738eb5cead4376ddd31cdbe82bc521e491284a7"},"digests":{"blake2b_256":"7427a30f94e959b25c105a652e3aef8f03891841e995b5aee75761f92f538146","md5":"f3654db354cd1b01359c7a3368513fb2","sha256":"73987c67ff8e71a87eebce1a2bb7480878d2e7a6c7e66ada0667f59c2f3299f2"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"f3654db354cd1b01359c7a3368513fb2","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2553951,"upload_time":"2026-05-29T15:34:07","upload_time_iso_8601":"2026-05-29T15:34:07.494963Z","url":"https://files.pythonhosted.org/packages/74/27/a30f94e959b25c105a652e3aef8f03891841e995b5aee75761f92f538146/capstone-6.0.0a9-cp38-abi3-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"8596049b30b072e52bc7b616289398471bbfee0f40af5bb7eac28edf9f28dbec"},"digests":{"blake2b_256":"2e66d51f9aa38399d0b910cdccde5aa3e80369e34933ce5d8e3e3175478757f6","md5":"57718347916c16749830e7a5e19d987c","sha256":"3179417413f888232571686b84470cf640806d8cbaec6d37de7c3b063de12168"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-win32.whl","has_sig":false,"md5_digest":"57718347916c16749830e7a5e19d987c","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2418635,"upload_time":"2026-05-29T15:34:08","upload_time_iso_8601":"2026-05-29T15:34:08.764858Z","url":"https://files.pythonhosted.org/packages/2e/66/d51f9aa38399d0b910cdccde5aa3e80369e34933ce5d8e3e3175478757f6/capstone-6.0.0a9-cp38-abi3-win32.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"8596049b30b072e52bc7b616289398471bbfee0f40af5bb7eac28edf9f28dbec"},"digests":{"blake2b_256":"3bed75694eb2f74651a2889301012aa81ec241cb809838885c91acd11be00dd6","md5":"f1ea40ac2fb1b7fafd802ce1c850c5ca","sha256":"ae5620dd4d5f3a07f4b22e8088761c14c9d800a1532d6e65b7a4b20a67faa15f"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-win_amd64.whl","has_sig":false,"md5_digest":"f1ea40ac2fb1b7fafd802ce1c850c5ca","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2467870,"upload_time":"2026-05-29T15:34:10","upload_time_iso_8601":"2026-05-29T15:34:10.054172Z","url":"https://files.pythonhosted.org/packages/3b/ed/75694eb2f74651a2889301012aa81ec241cb809838885c91acd11be00dd6/capstone-6.0.0a9-cp38-abi3-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"a922a94ab5e0c9db12225ea87cb781c2a1639596d305690a04fa1adc06f49393"},"digests":{"blake2b_256":"12b77be86e5e96de92618d1e87e9281fe96dc822d41168355fa8ff4105abdb9a","md5":"19d0aa66b8a9ed5afe913c23f952a56f","sha256":"f9440de1e34fb6b0cb35864eba60bc35a8ae8b876f837caf6c8c452e653f8275"},"downloads":-1,"filename":"capstone-6.0.0a9-cp38-abi3-win_arm64.whl","has_sig":false,"md5_digest":"19d0aa66b8a9ed5afe913c23f952a56f","packagetype":"bdist_wheel","python_version":"cp38","requires_python":">=3.8","size":2421104,"upload_time":"2026-05-29T15:34:11","upload_time_iso_8601":"2026-05-29T15:34:11.371355Z","url":"https://files.pythonhosted.org/packages/12/b7/7be86e5e96de92618d1e87e9281fe96dc822d41168355fa8ff4105abdb9a/capstone-6.0.0a9-cp38-abi3-win_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"04a5ab8e7ac71b59b4846253fb6c9096a954a6dca74b8edbe5b25a6b4607ba91","md5":"899d3713d0289b791cb3c8ab3d86f5dc","sha256":"c34b1e284c17926cc269a815a6ead8ca1fc32e9cd93f56386fae1162a7e8690b"},"downloads":-1,"filename":"capstone-6.0.0a9.tar.gz","has_sig":false,"md5_digest":"899d3713d0289b791cb3c8ab3d86f5dc","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":5699443,"upload_time":"2026-05-29T15:34:12","upload_time_iso_8601":"2026-05-29T15:34:12.941522Z","url":"https://files.pythonhosted.org/packages/04/a5/ab8e7ac71b59b4846253fb6c9096a954a6dca74b8edbe5b25a6b4607ba91/capstone-6.0.0a9.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"daf343f4dbfc36c7740d512621a9d42b276ac21bb6ca7cb974d4c8a19060d387","md5":"58080be026c61a6508f87996d218add1","sha256":"58a874d9a6cb15122135b1385a782e5b54c8a4d9396161b6498465046d2e0442"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-macosx_10_9_universal2.whl","has_sig":false,"md5_digest":"58080be026c61a6508f87996d218add1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":2195391,"upload_time":"2026-05-28T16:05:45","upload_time_iso_8601":"2026-05-28T16:05:45.515122Z","url":"https://files.pythonhosted.org/packages/da/f3/43f4dbfc36c7740d512621a9d42b276ac21bb6ca7cb974d4c8a19060d387/capstone-5.0.9-py3-none-macosx_10_9_universal2.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"7074d00de02c62ce864c6b43796c524516ea064e3e6fc1327d452f78270e8323","md5":"f87ae5e22f327194c122f1275b6839eb","sha256":"8c4a1d7134d7d5290e5d77066500385f2c7a4bf66835ccbfde5180042d508b3c"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-macosx_10_9_x86_64.whl","has_sig":false,"md5_digest":"f87ae5e22f327194c122f1275b6839eb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1190392,"upload_time":"2026-05-28T16:05:46","upload_time_iso_8601":"2026-05-28T16:05:46.953126Z","url":"https://files.pythonhosted.org/packages/70/74/d00de02c62ce864c6b43796c524516ea064e3e6fc1327d452f78270e8323/capstone-5.0.9-py3-none-macosx_10_9_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"429a4eecfbc94961cda70301fd13de69042be1943bee456e37bc1369840601b1","md5":"551a21b8a6b8907258cd4d086c63f700","sha256":"fc269c5082e17d7f9f265cd6980e2fdc6ab572df913951d76db0357e06b8001d"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-macosx_11_0_arm64.whl","has_sig":false,"md5_digest":"551a21b8a6b8907258cd4d086c63f700","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1202361,"upload_time":"2026-05-28T16:05:48","upload_time_iso_8601":"2026-05-28T16:05:48.100420Z","url":"https://files.pythonhosted.org/packages/42/9a/4eecfbc94961cda70301fd13de69042be1943bee456e37bc1369840601b1/capstone-5.0.9-py3-none-macosx_11_0_arm64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"45d9dbeadb9fcd461e608ce79b1cb647fed6baa812fa6e1c68b0ba5ef81291af","md5":"24c96ac5c997597d26de2fa11ac71281","sha256":"41772ad0c71aa5d3e97d541e802593c2e71fb94ac7e20d4202f97ce2a3eb8ed5"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","has_sig":false,"md5_digest":"24c96ac5c997597d26de2fa11ac71281","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1461016,"upload_time":"2026-05-28T16:05:49","upload_time_iso_8601":"2026-05-28T16:05:49.554296Z","url":"https://files.pythonhosted.org/packages/45/d9/dbeadb9fcd461e608ce79b1cb647fed6baa812fa6e1c68b0ba5ef81291af/capstone-5.0.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"d13917747862222bb062e86b501f1f148d5ff589b77908b080d30f7f085cbfb7","md5":"b2a99baecbecf1ac59138255c3920673","sha256":"273fd8d747d2e35c88f91450be51a603ecfaafb00d96d9f315dcb8689c86193e"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","has_sig":false,"md5_digest":"b2a99baecbecf1ac59138255c3920673","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1485316,"upload_time":"2026-05-28T16:05:50","upload_time_iso_8601":"2026-05-28T16:05:50.721482Z","url":"https://files.pythonhosted.org/packages/d1/39/17747862222bb062e86b501f1f148d5ff589b77908b080d30f7f085cbfb7/capstone-5.0.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"12569a694f60f5b26612039d975c1c84d2ad8fd0ad839b0b1058dbe68dd32b0b","md5":"23df4f5fca6ddb2b867fd816b19ea302","sha256":"1f5871b57e987d5bf23b531fbe868211b74ad750fa9b830a3d3cdc4956bc0ae3"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","has_sig":false,"md5_digest":"23df4f5fca6ddb2b867fd816b19ea302","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1483221,"upload_time":"2026-05-28T16:05:51","upload_time_iso_8601":"2026-05-28T16:05:51.925416Z","url":"https://files.pythonhosted.org/packages/12/56/9a694f60f5b26612039d975c1c84d2ad8fd0ad839b0b1058dbe68dd32b0b/capstone-5.0.9-py3-none-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"b974c178ac241892bb3668b633065bdbe6dc719c2aa54668d68a8e23a6753525","md5":"2d994a6cf8e369be2633c089c7e8da04","sha256":"69064219c814ad64af35469a7c4ddd19b730cacb96a1a796435ccde0e1567d05"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-musllinux_1_2_aarch64.whl","has_sig":false,"md5_digest":"2d994a6cf8e369be2633c089c7e8da04","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1459140,"upload_time":"2026-05-28T16:05:53","upload_time_iso_8601":"2026-05-28T16:05:53.182900Z","url":"https://files.pythonhosted.org/packages/b9/74/c178ac241892bb3668b633065bdbe6dc719c2aa54668d68a8e23a6753525/capstone-5.0.9-py3-none-musllinux_1_2_aarch64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"7bf33865a0371603994f8bf521595b3072080bfe1b715f8bd080988d026dd2a1","md5":"7602bf93e152cfe39738a325e07a98d6","sha256":"0cc3b1ec319ab0530efc6b181491b77dd3373c81b6dbcf2f05a80e3d8dd61d5e"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-musllinux_1_2_i686.whl","has_sig":false,"md5_digest":"7602bf93e152cfe39738a325e07a98d6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1488205,"upload_time":"2026-05-28T16:05:54","upload_time_iso_8601":"2026-05-28T16:05:54.310060Z","url":"https://files.pythonhosted.org/packages/7b/f3/3865a0371603994f8bf521595b3072080bfe1b715f8bd080988d026dd2a1/capstone-5.0.9-py3-none-musllinux_1_2_i686.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"78885bd545eb55f64a71708a2426116b81f7952ffd78d6fbc4f8f0c87c432501"},"digests":{"blake2b_256":"09a139a575aa27a35b43b0ad93065a1803dba39038060eccfb29031d82e3fb2c","md5":"bd1ecbf5e4353f70cf66f5fb71f0e2ed","sha256":"cfec34e6e01472fe60850c87c5bea9918c274fa2a605b510e6489bf87c0c9960"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-musllinux_1_2_x86_64.whl","has_sig":false,"md5_digest":"bd1ecbf5e4353f70cf66f5fb71f0e2ed","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1488865,"upload_time":"2026-05-28T16:05:55","upload_time_iso_8601":"2026-05-28T16:05:55.603444Z","url":"https://files.pythonhosted.org/packages/09/a1/39a575aa27a35b43b0ad93065a1803dba39038060eccfb29031d82e3fb2c/capstone-5.0.9-py3-none-musllinux_1_2_x86_64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":{"sha256":"be4a51b083e6175d370ab2d0cfac1a32d0ade1dfe9dd7525155f353a89ad3332"},"digests":{"blake2b_256":"50e66f06fdb6a9ed32b2f7cd9c036b92d5324112c3ef7080f2c71efc367d40dd","md5":"9703d55a5ad8058f0fe3bbc10a835ea7","sha256":"732cedbbb56d42e723f14d7af6387f1454194a820b4b96b56d1e53f865ef85d0"},"downloads":-1,"filename":"capstone-5.0.9-py3-none-win_amd64.whl","has_sig":false,"md5_digest":"9703d55a5ad8058f0fe3bbc10a835ea7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":1273459,"upload_time":"2026-05-28T16:05:56","upload_time_iso_8601":"2026-05-28T16:05:56.730987Z","url":"https://files.pythonhosted.org/packages/50/e6/6f06fdb6a9ed32b2f7cd9c036b92d5324112c3ef7080f2c71efc367d40dd/capstone-5.0.9-py3-none-win_amd64.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"39016516910f546fbb996068207b9dd0229b14bc8dae223114d5e0e27d3cad11","md5":"c96e4328d7e2f774800f5d11b8ec5e15","sha256":"0429af292ddc604d3c9344696807e281d5e728db029f00e6a4ea9e3bff1aac9e"},"downloads":-1,"filename":"capstone-5.0.9.tar.gz","has_sig":false,"md5_digest":"c96e4328d7e2f774800f5d11b8ec5e15","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":2947300,"upload_time":"2026-05-28T16:05:57","upload_time_iso_8601":"2026-05-28T16:05:57.968473Z","url":"https://files.pythonhosted.org/packages/39/01/6516910f546fbb996068207b9dd0229b14bc8dae223114d5e0e27d3cad11/capstone-5.0.9.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} diff --git a/.tools/downloads/pyelftools-0.33-py3-none-any.whl b/.tools/downloads/pyelftools-0.33-py3-none-any.whl deleted file mode 100644 index ba5694b..0000000 --- a/.tools/downloads/pyelftools-0.33-py3-none-any.whl +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f215ad5f47d3f1373a21496a6c9e0707c622840d0622f23ff7ce08678b020036 -size 201178 diff --git a/.tools/downloads/pyelftools.json b/.tools/downloads/pyelftools.json deleted file mode 100644 index f920506..0000000 --- a/.tools/downloads/pyelftools.json +++ /dev/null @@ -1 +0,0 @@ -{"info":{"author":null,"author_email":"Eli Bendersky ","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: Public Domain","Operating System :: OS Independent","Programming Language :: Python :: 3","Topic :: File Formats","Topic :: Software Development :: Compilers","Topic :: Software Development :: Debuggers","Topic :: Software Development :: Disassemblers"],"description":"","description_content_type":"text/x-rst","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":["License-File"],"home_page":null,"keywords":null,"license":"Public domain","license_expression":null,"license_files":["LICENSE"],"maintainer":null,"maintainer_email":"Eli Bendersky ","name":"pyelftools","package_url":"https://pypi.org/project/pyelftools/","platform":"Cross Platform","project_url":"https://pypi.org/project/pyelftools/","project_urls":{"Homepage":"https://github.com/eliben/pyelftools","Issues":"https://github.com/eliben/pyelftools/issues","Repository":"https://github.com/eliben/pyelftools.git"},"provides_extra":null,"release_url":"https://pypi.org/project/pyelftools/0.33/","requires_dist":null,"requires_python":">=3.10","summary":"Library for analyzing ELF files and DWARF debugging information","version":"0.33","yanked":false,"yanked_reason":null},"last_serial":37525330,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"eliben"}]},"releases":{"0.20":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"d950e278411ca585d2ef30b35eef6363e671b8020057cc5e852601253478db0c","md5":"5ac7b279a01c41e5b022a1a382eb9d92","sha256":"d02e40a841a8cc38d78cdea8e497f601969e7270ebe00c7e671a3ce73f1cdf45"},"downloads":-1,"filename":"pyelftools-0.20.tar.gz","has_sig":false,"md5_digest":"5ac7b279a01c41e5b022a1a382eb9d92","packagetype":"sdist","python_version":"source","requires_python":null,"size":278640,"upload_time":"2012-01-30T18:22:55","upload_time_iso_8601":"2012-01-30T18:22:55.773426Z","url":"https://files.pythonhosted.org/packages/d9/50/e278411ca585d2ef30b35eef6363e671b8020057cc5e852601253478db0c/pyelftools-0.20.tar.gz","yanked":false,"yanked_reason":null}],"0.21":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"77a1bc807d82936fbec05e52a3143037ba079e852eb0f743084e65927a0af152","md5":"fe1039193675cb9d0ddf60d1431fbea3","sha256":"a9a10d894c698ab3a2d909c3df1c3d88d0ab03811351c278b3f520204f33d834"},"downloads":-1,"filename":"pyelftools-0.21.tar.gz","has_sig":false,"md5_digest":"fe1039193675cb9d0ddf60d1431fbea3","packagetype":"sdist","python_version":"source","requires_python":null,"size":283250,"upload_time":"2013-04-17T12:48:27","upload_time_iso_8601":"2013-04-17T12:48:27.552076Z","url":"https://files.pythonhosted.org/packages/77/a1/bc807d82936fbec05e52a3143037ba079e852eb0f743084e65927a0af152/pyelftools-0.21.tar.gz","yanked":false,"yanked_reason":null}],"0.22":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"5785517b4e0bc5ec85d8623b3e102289e74f47bcc42efa0b1bd6692cf3af33de","md5":"e01fe8bb455b472ebe26ab9ccff26fcf","sha256":"9f7dd617b8a577a3834e7dd7f34f49df21c0670e67a48b21add19abe1adffb60"},"downloads":-1,"filename":"pyelftools-0.22.tar.gz","has_sig":false,"md5_digest":"e01fe8bb455b472ebe26ab9ccff26fcf","packagetype":"sdist","python_version":"source","requires_python":null,"size":395525,"upload_time":"2014-03-30T13:47:47","upload_time_iso_8601":"2014-03-30T13:47:47.074667Z","url":"https://files.pythonhosted.org/packages/57/85/517b4e0bc5ec85d8623b3e102289e74f47bcc42efa0b1bd6692cf3af33de/pyelftools-0.22.tar.gz","yanked":false,"yanked_reason":null}],"0.23":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"f4dd652eff50811686a1f0d3481cdc8f6e41f00ae22e1cf42f98bc8ebf666ecf","md5":"aa7cefa8bd2f63d7b017440c9084f310","sha256":"fc57aadd096e8f9b9b03f1a9578f673ee645e1513a5ff0192ef439e77eab21de"},"downloads":-1,"filename":"pyelftools-0.23.tar.gz","has_sig":false,"md5_digest":"aa7cefa8bd2f63d7b017440c9084f310","packagetype":"sdist","python_version":"source","requires_python":null,"size":401363,"upload_time":"2014-11-08T13:39:50","upload_time_iso_8601":"2014-11-08T13:39:50.283484Z","url":"https://files.pythonhosted.org/packages/f4/dd/652eff50811686a1f0d3481cdc8f6e41f00ae22e1cf42f98bc8ebf666ecf/pyelftools-0.23.tar.gz","yanked":false,"yanked_reason":null}],"0.24":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ba78d4a186a2e38731286c99dc3e3ca8123b6f55cf2e28608e8daf2d84b65494","md5":"c960d5fe0a9308d96ba38b4beec8ac8e","sha256":"e9dd97d685a5b96b88a988dabadb88e5a539b64cd7d7927fac9a7368dc4c459c"},"downloads":-1,"filename":"pyelftools-0.24.tar.gz","has_sig":false,"md5_digest":"c960d5fe0a9308d96ba38b4beec8ac8e","packagetype":"sdist","python_version":"source","requires_python":null,"size":411874,"upload_time":"2016-08-05T03:20:02","upload_time_iso_8601":"2016-08-05T03:20:02.254010Z","url":"https://files.pythonhosted.org/packages/ba/78/d4a186a2e38731286c99dc3e3ca8123b6f55cf2e28608e8daf2d84b65494/pyelftools-0.24.tar.gz","yanked":false,"yanked_reason":null}],"0.25":[{"comment_text":"","core-metadata":{"sha256":"39c8cbf35159f45850e8d7c60c0e1328f0d62274fa33610f73f630bb0f87fe26"},"digests":{"blake2b_256":"b84500776dc25dc2ad0573d48c2d86f2d4a554216d00bf4575423557f5a398ca","md5":"88619512f7d6e373e707fb00c155f339","sha256":"1ec62792b31d9d4e5399a686a515a31091be84e307c4680fd3627121500a1be7"},"downloads":-1,"filename":"pyelftools-0.25-py2.py3-none-any.whl","has_sig":false,"md5_digest":"88619512f7d6e373e707fb00c155f339","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":126141,"upload_time":"2019-12-05T13:39:34","upload_time_iso_8601":"2019-12-05T13:39:34.770430Z","url":"https://files.pythonhosted.org/packages/b8/45/00776dc25dc2ad0573d48c2d86f2d4a554216d00bf4575423557f5a398ca/pyelftools-0.25-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"fa9a0674cb1725196568bdbca98304f2efb17368b57af1a4bb3fc772c026f474","md5":"c5629b9a5d19c82107a946cce52eeec2","sha256":"89c6da6f56280c37a5ff33468591ba9a124e17d71fe42de971818cbff46c1b24"},"downloads":-1,"filename":"pyelftools-0.25.tar.gz","has_sig":false,"md5_digest":"c5629b9a5d19c82107a946cce52eeec2","packagetype":"sdist","python_version":"source","requires_python":null,"size":499493,"upload_time":"2018-09-01T13:17:46","upload_time_iso_8601":"2018-09-01T13:17:46.608953Z","url":"https://files.pythonhosted.org/packages/fa/9a/0674cb1725196568bdbca98304f2efb17368b57af1a4bb3fc772c026f474/pyelftools-0.25.tar.gz","yanked":false,"yanked_reason":null}],"0.26":[{"comment_text":"","core-metadata":{"sha256":"ae492fe03986eebfb447d8855ca66291d45169ccc21a2575f737356fe8d67e99"},"digests":{"blake2b_256":"bb2fbf41f3c3867d6707fa9b872658bb23088a64d0e522e8979f54c694b8cbe1","md5":"06e0b0dd553f35f4785c3827ccb9b2b7","sha256":"cc0ea0de82b240a73ef4056fce44acbb4727dca7d66759371aff2bad457ed711"},"downloads":-1,"filename":"pyelftools-0.26-py2.py3-none-any.whl","has_sig":false,"md5_digest":"06e0b0dd553f35f4785c3827ccb9b2b7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":136414,"upload_time":"2019-12-05T13:39:36","upload_time_iso_8601":"2019-12-05T13:39:36.599219Z","url":"https://files.pythonhosted.org/packages/bb/2f/bf41f3c3867d6707fa9b872658bb23088a64d0e522e8979f54c694b8cbe1/pyelftools-0.26-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"9e0f82583ae6638a23e416cb3f15e3e3c07af51725fe51a4eaf91ede265f4af9","md5":"0ba0de4b47127249c4d632ae299cb0e8","sha256":"86ac6cee19f6c945e8dedf78c6ee74f1112bd14da5a658d8c9d4103aed5756a2"},"downloads":-1,"filename":"pyelftools-0.26.tar.gz","has_sig":false,"md5_digest":"0ba0de4b47127249c4d632ae299cb0e8","packagetype":"sdist","python_version":"source","requires_python":null,"size":535651,"upload_time":"2019-12-09T13:23:05","upload_time_iso_8601":"2019-12-09T13:23:05.413802Z","url":"https://files.pythonhosted.org/packages/9e/0f/82583ae6638a23e416cb3f15e3e3c07af51725fe51a4eaf91ede265f4af9/pyelftools-0.26.tar.gz","yanked":false,"yanked_reason":null}],"0.27":[{"comment_text":"","core-metadata":{"sha256":"b673e9f9b6d372b7341bf3910120be7d1a388375a13d2ad429300e69dfc414d7"},"digests":{"blake2b_256":"6f503d7729d64bb23393aa4c166af250a6e6f9def40c90bf0e9af3c5ad25b6f7","md5":"14654910806795c8aca320c3d4a55bdc","sha256":"5609aa6da1123fccfae2e8431a67b4146aa7fad5b3889f808df12b110f230937"},"downloads":-1,"filename":"pyelftools-0.27-py2.py3-none-any.whl","has_sig":false,"md5_digest":"14654910806795c8aca320c3d4a55bdc","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":151643,"upload_time":"2020-10-27T13:45:19","upload_time_iso_8601":"2020-10-27T13:45:19.662449Z","url":"https://files.pythonhosted.org/packages/6f/50/3d7729d64bb23393aa4c166af250a6e6f9def40c90bf0e9af3c5ad25b6f7/pyelftools-0.27-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6bb5f7022f2d950327ba970ec85fb8f85c79244031092c129b6f34ab17514ae0","md5":"061d67c669a9b1f8d07f28c47fb6a65f","sha256":"cde854e662774c5457d688ca41615f6594187ba7067af101232df889a6b7a66b"},"downloads":-1,"filename":"pyelftools-0.27.tar.gz","has_sig":false,"md5_digest":"061d67c669a9b1f8d07f28c47fb6a65f","packagetype":"sdist","python_version":"source","requires_python":null,"size":2636011,"upload_time":"2020-10-27T13:45:22","upload_time_iso_8601":"2020-10-27T13:45:22.536679Z","url":"https://files.pythonhosted.org/packages/6b/b5/f7022f2d950327ba970ec85fb8f85c79244031092c129b6f34ab17514ae0/pyelftools-0.27.tar.gz","yanked":false,"yanked_reason":null}],"0.28":[{"comment_text":"","core-metadata":{"sha256":"ac8040f27d0407d5bb2ef3d585214507d5e30d36f4ea0c5466ed6ef06108d5cc"},"digests":{"blake2b_256":"40226706cc385a099bc5bcb0ea179c2c11863b62c79d37bd47fe464c16f9798d","md5":"e8a14c4a78f5982d1c9af8a1130396a9","sha256":"1509d30756a14a8c9a6670778144fb9a04b311751ddac019dcc0c2f28da03ccc"},"downloads":-1,"filename":"pyelftools-0.28-py2.py3-none-any.whl","has_sig":false,"md5_digest":"e8a14c4a78f5982d1c9af8a1130396a9","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":155443,"upload_time":"2022-02-03T14:49:18","upload_time_iso_8601":"2022-02-03T14:49:18.653619Z","url":"https://files.pythonhosted.org/packages/40/22/6706cc385a099bc5bcb0ea179c2c11863b62c79d37bd47fe464c16f9798d/pyelftools-0.28-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"e98000247e07e32e85b964ef81c9fd556b332f85e743e3eaf332325f579c82eb","md5":"2681e4603c42fe127a516f253abd8b6f","sha256":"53e5609cac016471d40bd88dc410cd90755942c25e58a61021cfdf7abdfeacff"},"downloads":-1,"filename":"pyelftools-0.28.tar.gz","has_sig":false,"md5_digest":"2681e4603c42fe127a516f253abd8b6f","packagetype":"sdist","python_version":"source","requires_python":null,"size":2683152,"upload_time":"2022-02-03T14:49:22","upload_time_iso_8601":"2022-02-03T14:49:22.208046Z","url":"https://files.pythonhosted.org/packages/e9/80/00247e07e32e85b964ef81c9fd556b332f85e743e3eaf332325f579c82eb/pyelftools-0.28.tar.gz","yanked":false,"yanked_reason":null}],"0.29":[{"comment_text":"","core-metadata":{"sha256":"e14555e2b6686c49d316d4e3076f6362cee8a084ab967a0ed9fb3257ce0a2f7f"},"digests":{"blake2b_256":"047c867630e6e6293793f838b31034aa1875e1c3bd8c1ec34a0929a2506f350c","md5":"a1b4b7b32e1301de037b093b55c030c0","sha256":"519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1"},"downloads":-1,"filename":"pyelftools-0.29-py2.py3-none-any.whl","has_sig":false,"md5_digest":"a1b4b7b32e1301de037b093b55c030c0","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":174266,"upload_time":"2022-08-10T21:43:37","upload_time_iso_8601":"2022-08-10T21:43:37.039247Z","url":"https://files.pythonhosted.org/packages/04/7c/867630e6e6293793f838b31034aa1875e1c3bd8c1ec34a0929a2506f350c/pyelftools-0.29-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"0e35e76da824595452a5ad07f289ea1737ca0971fc6cc7b6ee9464279be06b5e","md5":"2afc97cd239c0dea0cca97d00d3dcb42","sha256":"ec761596aafa16e282a31de188737e5485552469ac63b60cfcccf22263fd24ff"},"downloads":-1,"filename":"pyelftools-0.29.tar.gz","has_sig":false,"md5_digest":"2afc97cd239c0dea0cca97d00d3dcb42","packagetype":"sdist","python_version":"source","requires_python":null,"size":14079429,"upload_time":"2022-08-10T21:43:49","upload_time_iso_8601":"2022-08-10T21:43:49.179400Z","url":"https://files.pythonhosted.org/packages/0e/35/e76da824595452a5ad07f289ea1737ca0971fc6cc7b6ee9464279be06b5e/pyelftools-0.29.tar.gz","yanked":false,"yanked_reason":null}],"0.30":[{"comment_text":"","core-metadata":{"sha256":"dfc609eaab39e2e4e9ce0ef6ad3dbb80d0065431e671e493e642eddebfc5d920"},"digests":{"blake2b_256":"33f9281a411a5281b674b10830a2f312c64464b49916d097b8919f009de579e0","md5":"35c343c2c41c74679cef78da097f4917","sha256":"544c3440eddb9a0dce70b6611de0b28163d71def759d2ed57a0d00118fc5da86"},"downloads":-1,"filename":"pyelftools-0.30-py2.py3-none-any.whl","has_sig":false,"md5_digest":"35c343c2c41c74679cef78da097f4917","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":177577,"upload_time":"2023-09-06T23:43:51","upload_time_iso_8601":"2023-09-06T23:43:51.549530Z","url":"https://files.pythonhosted.org/packages/33/f9/281a411a5281b674b10830a2f312c64464b49916d097b8919f009de579e0/pyelftools-0.30-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"8405fd41cd647de044d1ffec90ce5aaae935126ac217f8ecb302186655284fc8","md5":"2b4f82fd30436834b9357a5e74b8ceb7","sha256":"2fc92b0d534f8b081f58c7c370967379123d8e00984deb53c209364efd575b40"},"downloads":-1,"filename":"pyelftools-0.30.tar.gz","has_sig":false,"md5_digest":"2b4f82fd30436834b9357a5e74b8ceb7","packagetype":"sdist","python_version":"source","requires_python":null,"size":14018469,"upload_time":"2023-09-06T23:44:11","upload_time_iso_8601":"2023-09-06T23:44:11.653272Z","url":"https://files.pythonhosted.org/packages/84/05/fd41cd647de044d1ffec90ce5aaae935126ac217f8ecb302186655284fc8/pyelftools-0.30.tar.gz","yanked":false,"yanked_reason":null}],"0.31":[{"comment_text":"","core-metadata":{"sha256":"b1b149478cfd45e96aa2e0cf070c917d27384e75c3c010f02c02dad882bc3e31"},"digests":{"blake2b_256":"f864711030d9fe9ccaf6ee3ab1bcf4801c6bb3d0e585af18824a50b016b4f39c","md5":"4d5a887cbaba4b282fea59952d303377","sha256":"f52de7b3c7e8c64c8abc04a79a1cf37ac5fb0b8a49809827130b858944840607"},"downloads":-1,"filename":"pyelftools-0.31-py3-none-any.whl","has_sig":false,"md5_digest":"4d5a887cbaba4b282fea59952d303377","packagetype":"bdist_wheel","python_version":"py3","requires_python":null,"size":180473,"upload_time":"2024-03-14T13:28:20","upload_time_iso_8601":"2024-03-14T13:28:20.904479Z","url":"https://files.pythonhosted.org/packages/f8/64/711030d9fe9ccaf6ee3ab1bcf4801c6bb3d0e585af18824a50b016b4f39c/pyelftools-0.31-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"88560f2d69ed9a0060da009f672ddec8a71c041d098a66f6b1d80264bf6bbdc0","md5":"abd09b11e10bf32bfa6cf968b7a41e57","sha256":"c774416b10310156879443b81187d182d8d9ee499660380e645918b50bc88f99"},"downloads":-1,"filename":"pyelftools-0.31.tar.gz","has_sig":false,"md5_digest":"abd09b11e10bf32bfa6cf968b7a41e57","packagetype":"sdist","python_version":"source","requires_python":null,"size":14108889,"upload_time":"2024-03-14T13:28:31","upload_time_iso_8601":"2024-03-14T13:28:31.151921Z","url":"https://files.pythonhosted.org/packages/88/56/0f2d69ed9a0060da009f672ddec8a71c041d098a66f6b1d80264bf6bbdc0/pyelftools-0.31.tar.gz","yanked":false,"yanked_reason":null}],"0.32":[{"comment_text":null,"core-metadata":{"sha256":"56927ea1129512e544d9b70fd798efd3802373e14ab2da033c253f09f73c4e02"},"digests":{"blake2b_256":"af43700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878","md5":"0c87ccdc128d28e252a4d3749b5978dc","sha256":"013df952a006db5e138b1edf6d8a68ecc50630adbd0d83a2d41e7f846163d738"},"downloads":-1,"filename":"pyelftools-0.32-py3-none-any.whl","has_sig":false,"md5_digest":"0c87ccdc128d28e252a4d3749b5978dc","packagetype":"bdist_wheel","python_version":"py3","requires_python":null,"size":188525,"upload_time":"2025-02-19T14:19:59","upload_time_iso_8601":"2025-02-19T14:19:59.919837Z","url":"https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"b9ab33968940b2deb3d92f5b146bc6d4009a5f95d1d06c148ea2f9ee965071af","md5":"240cf39dc5dad992f25cb5a4e4244f88","sha256":"6de90ee7b8263e740c8715a925382d4099b354f29ac48ea40d840cf7aa14ace5"},"downloads":-1,"filename":"pyelftools-0.32.tar.gz","has_sig":false,"md5_digest":"240cf39dc5dad992f25cb5a4e4244f88","packagetype":"sdist","python_version":"source","requires_python":null,"size":15047199,"upload_time":"2025-02-19T14:20:05","upload_time_iso_8601":"2025-02-19T14:20:05.549837Z","url":"https://files.pythonhosted.org/packages/b9/ab/33968940b2deb3d92f5b146bc6d4009a5f95d1d06c148ea2f9ee965071af/pyelftools-0.32.tar.gz","yanked":false,"yanked_reason":null}],"0.33":[{"comment_text":null,"core-metadata":{"sha256":"dbbb739509c795b8b7e700057880a88365218bb1c7216b198a22c97c8aedce62"},"digests":{"blake2b_256":"462af9697576603dae937727827505a6126a066affb227034e77e6f9068910da","md5":"7e366b3545e6b4ef80b01aa1f177fe8d","sha256":"f215ad5f47d3f1373a21496a6c9e0707c622840d0622f23ff7ce08678b020036"},"downloads":-1,"filename":"pyelftools-0.33-py3-none-any.whl","has_sig":false,"md5_digest":"7e366b3545e6b4ef80b01aa1f177fe8d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":201178,"upload_time":"2026-05-29T12:56:20","upload_time_iso_8601":"2026-05-29T12:56:20.587302Z","url":"https://files.pythonhosted.org/packages/46/2a/f9697576603dae937727827505a6126a066affb227034e77e6f9068910da/pyelftools-0.33-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a311767522582afab1b884d277de0e6e011640cb9d7292a38694b4b1a1df1ae8","md5":"fe803bd1cf061e5330660a103d9c82bb","sha256":"660d82dcbeb8e83d1702bd97f223f761625da06111c0cc988eac6b8ab0c1b61f"},"downloads":-1,"filename":"pyelftools-0.33.tar.gz","has_sig":false,"md5_digest":"fe803bd1cf061e5330660a103d9c82bb","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":15068655,"upload_time":"2026-05-29T12:56:22","upload_time_iso_8601":"2026-05-29T12:56:22.553587Z","url":"https://files.pythonhosted.org/packages/a3/11/767522582afab1b884d277de0e6e011640cb9d7292a38694b4b1a1df1ae8/pyelftools-0.33.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"dbbb739509c795b8b7e700057880a88365218bb1c7216b198a22c97c8aedce62"},"digests":{"blake2b_256":"462af9697576603dae937727827505a6126a066affb227034e77e6f9068910da","md5":"7e366b3545e6b4ef80b01aa1f177fe8d","sha256":"f215ad5f47d3f1373a21496a6c9e0707c622840d0622f23ff7ce08678b020036"},"downloads":-1,"filename":"pyelftools-0.33-py3-none-any.whl","has_sig":false,"md5_digest":"7e366b3545e6b4ef80b01aa1f177fe8d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":201178,"upload_time":"2026-05-29T12:56:20","upload_time_iso_8601":"2026-05-29T12:56:20.587302Z","url":"https://files.pythonhosted.org/packages/46/2a/f9697576603dae937727827505a6126a066affb227034e77e6f9068910da/pyelftools-0.33-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"a311767522582afab1b884d277de0e6e011640cb9d7292a38694b4b1a1df1ae8","md5":"fe803bd1cf061e5330660a103d9c82bb","sha256":"660d82dcbeb8e83d1702bd97f223f761625da06111c0cc988eac6b8ab0c1b61f"},"downloads":-1,"filename":"pyelftools-0.33.tar.gz","has_sig":false,"md5_digest":"fe803bd1cf061e5330660a103d9c82bb","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":15068655,"upload_time":"2026-05-29T12:56:22","upload_time_iso_8601":"2026-05-29T12:56:22.553587Z","url":"https://files.pythonhosted.org/packages/a3/11/767522582afab1b884d277de0e6e011640cb9d7292a38694b4b1a1df1ae8/pyelftools-0.33.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} diff --git a/.tools/python-revlibs/bin/__pycache__/readelf.cpython-310.pyc b/.tools/python-revlibs/bin/__pycache__/readelf.cpython-310.pyc deleted file mode 100644 index fb8709c9d58f387e82f42556013076ae473fbf33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54593 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 str: - return _CONTROL_CHAR_RE.sub(lambda match: '^' + chr(0x40 + ord(match[0])), s) - -class ReadElf: - """ display_* methods are used to emit output into the output stream - """ - def __init__(self, file: IO[bytes], output: IO[str]) -> None: - """ file: - stream object with the ELF file to read - - output: - output stream to write to - """ - self.elffile = ELFFile(file) - self.output = output - - def display_file_header(self) -> None: - """ Display the ELF file header - """ - self._emitline('ELF Header:') - self._emit(' Magic: ') - self._emit(' '.join('%2.2x' % b - for b in self.elffile.e_ident_raw)) - self._emitline(' ') - header = self.elffile.header - e_ident = header['e_ident'] - self._emitline(' Class: %s' % - describe_ei_class(e_ident['EI_CLASS'])) - self._emitline(' Data: %s' % - describe_ei_data(e_ident['EI_DATA'])) - self._emitline(' Version: %s' % - describe_ei_version(e_ident['EI_VERSION'])) - self._emitline(' OS/ABI: %s' % - describe_ei_osabi(e_ident['EI_OSABI'])) - self._emitline(' ABI Version: %d' % - e_ident['EI_ABIVERSION']) - self._emitline(' Type: %s' % - describe_e_type(header['e_type'], self.elffile)) - self._emitline(' Machine: %s' % - describe_e_machine(header['e_machine'])) - self._emitline(' Version: %s' % - describe_e_version_numeric(header['e_version'])) - self._emitline(' Entry point address: %s' % - self._format_hex(header['e_entry'])) - self._emit(' Start of program headers: %s' % - header['e_phoff']) - self._emitline(' (bytes into file)') - self._emit(' Start of section headers: %s' % - header['e_shoff']) - self._emitline(' (bytes into file)') - self._emitline(' Flags: %s%s' % - (self._format_hex(header['e_flags']), - self.decode_flags(header['e_flags']))) - self._emitline(' Size of this header: %s (bytes)' % - header['e_ehsize']) - self._emitline(' Size of program headers: %s (bytes)' % - header['e_phentsize']) - self._emitline(' Number of program headers: %s' % - header['e_phnum']) - self._emitline(' Size of section headers: %s (bytes)' % - header['e_shentsize']) - self._emit(' Number of section headers: %s' % - header['e_shnum']) - if header['e_shnum'] == 0 and self.elffile.num_sections() != 0: - self._emitline(' (%d)' % self.elffile.num_sections()) - else: - self._emitline('') - self._emit(' Section header string table index: %s' % - header['e_shstrndx']) - if header['e_shstrndx'] == SHN_INDICES.SHN_XINDEX: - self._emitline(' (%d)' % self.elffile.get_shstrndx()) - else: - self._emitline('') - - def decode_flags(self, flags: int) -> str: - description = "" - if self.elffile['e_machine'] == "EM_ARM": - eabi = flags & E_FLAGS.EF_ARM_EABIMASK - flags &= ~E_FLAGS.EF_ARM_EABIMASK - - if flags & E_FLAGS.EF_ARM_RELEXEC: - description += ', relocatable executabl' - flags &= ~E_FLAGS.EF_ARM_RELEXEC - - if eabi == E_FLAGS.EF_ARM_EABI_VER5: - EF_ARM_KNOWN_FLAGS = E_FLAGS.EF_ARM_ABI_FLOAT_SOFT|E_FLAGS.EF_ARM_ABI_FLOAT_HARD|E_FLAGS.EF_ARM_LE8|E_FLAGS.EF_ARM_BE8 - description += ', Version5 EABI' - if flags & E_FLAGS.EF_ARM_ABI_FLOAT_SOFT: - description += ", soft-float ABI" - elif flags & E_FLAGS.EF_ARM_ABI_FLOAT_HARD: - description += ", hard-float ABI" - - if flags & E_FLAGS.EF_ARM_BE8: - description += ", BE8" - elif flags & E_FLAGS.EF_ARM_LE8: - description += ", LE8" - - if flags & ~EF_ARM_KNOWN_FLAGS: - description += ', ' - else: - description += ', ' - - elif self.elffile['e_machine'] == 'EM_PPC64': - if flags & E_FLAGS.EF_PPC64_ABI_V2: - description += ', abiv2' - - elif self.elffile['e_machine'] == "EM_MIPS": - if flags & E_FLAGS.EF_MIPS_NOREORDER: - description += ", noreorder" - if flags & E_FLAGS.EF_MIPS_PIC: - description += ", pic" - if flags & E_FLAGS.EF_MIPS_CPIC: - description += ", cpic" - if (flags & E_FLAGS.EF_MIPS_ABI2): - description += ", abi2" - if (flags & E_FLAGS.EF_MIPS_32BITMODE): - description += ", 32bitmode" - if (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_O32): - description += ", o32" - elif (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_O64): - description += ", o64" - elif (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_EABI32): - description += ", eabi32" - elif (flags & E_FLAGS_MASKS.EFM_MIPS_ABI_EABI64): - description += ", eabi64" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_1: - description += ", mips1" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_2: - description += ", mips2" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_3: - description += ", mips3" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_4: - description += ", mips4" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_5: - description += ", mips5" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_32R2: - description += ", mips32r2" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_64R2: - description += ", mips64r2" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_32: - description += ", mips32" - if (flags & E_FLAGS.EF_MIPS_ARCH) == E_FLAGS.EF_MIPS_ARCH_64: - description += ", mips64" - - elif self.elffile['e_machine'] == "EM_RISCV": - if flags & E_FLAGS.EF_RISCV_RVC: - description += ", RVC" - if (flags & E_FLAGS.EF_RISCV_RVE): - description += ", RVE" - if (flags & E_FLAGS.EF_RISCV_TSO): - description += ", TSO" - if (flags & E_FLAGS.EF_RISCV_FLOAT_ABI) == E_FLAGS.EF_RISCV_FLOAT_ABI_SOFT: - description += ", soft-float ABI" - if (flags & E_FLAGS.EF_RISCV_FLOAT_ABI) == E_FLAGS.EF_RISCV_FLOAT_ABI_SINGLE: - description += ", single-float ABI" - if (flags & E_FLAGS.EF_RISCV_FLOAT_ABI) == E_FLAGS.EF_RISCV_FLOAT_ABI_DOUBLE: - description += ", double-float ABI" - if (flags & E_FLAGS.EF_RISCV_FLOAT_ABI) == E_FLAGS.EF_RISCV_FLOAT_ABI_QUAD: - description += ", quad-float ABI" - - elif self.elffile['e_machine'] == "EM_LOONGARCH": - if (flags & E_FLAGS.EF_LOONGARCH_ABI_MODIFIER_MASK) == E_FLAGS.EF_LOONGARCH_ABI_SOFT_FLOAT: - description += ", SOFT-FLOAT" - if (flags & E_FLAGS.EF_LOONGARCH_ABI_MODIFIER_MASK) == E_FLAGS.EF_LOONGARCH_ABI_SINGLE_FLOAT: - description += ", SINGLE-FLOAT" - if (flags & E_FLAGS.EF_LOONGARCH_ABI_MODIFIER_MASK) == E_FLAGS.EF_LOONGARCH_ABI_DOUBLE_FLOAT: - description += ", DOUBLE-FLOAT" - if (flags & E_FLAGS.EF_LOONGARCH_OBJABI_MASK) == E_FLAGS.EF_LOONGARCH_OBJABI_V0: - description += ", OBJ-v0" - if (flags & E_FLAGS.EF_LOONGARCH_OBJABI_MASK) == E_FLAGS.EF_LOONGARCH_OBJABI_V1: - description += ", OBJ-v1" - - return description - - def display_program_headers(self, show_heading: bool = True) -> None: - """ Display the ELF program headers. - If show_heading is True, displays the heading for this information - (Elf file type is...) - """ - self._emitline() - if self.elffile.num_segments() == 0: - self._emitline('There are no program headers in this file.') - return - - elfheader = self.elffile.header - if show_heading: - self._emitline('Elf file type is %s' % - describe_e_type(elfheader['e_type'], self.elffile)) - self._emitline('Entry point is %s' % - self._format_hex(elfheader['e_entry'])) - # readelf weirness - why isn't e_phoff printed as hex? (for section - # headers, it is...) - self._emitline('There are %s program headers, starting at offset %s' % ( - self.elffile.num_segments(), elfheader['e_phoff'])) - self._emitline() - - self._emitline('Program Headers:') - - # Now comes the table of program headers with their attributes. Note - # that due to different formatting constraints of 32-bit and 64-bit - # addresses, there are some conditions on elfclass here. - # - # First comes the table heading - # - if self.elffile.elfclass == 32: - self._emitline(' Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align') - else: - self._emitline(' Type Offset VirtAddr PhysAddr') - self._emitline(' FileSiz MemSiz Flags Align') - - # Now the entries - # - for segment in self.elffile.iter_segments(): - self._emit(' %-14s ' % describe_p_type(segment['p_type'])) - - if self.elffile.elfclass == 32: - self._emitline('%s %s %s %s %s %-3s %s' % ( - self._format_hex(segment['p_offset'], fieldsize=6), - self._format_hex(segment['p_vaddr'], fullhex=True), - self._format_hex(segment['p_paddr'], fullhex=True), - self._format_hex(segment['p_filesz'], fieldsize=5), - self._format_hex(segment['p_memsz'], fieldsize=5), - describe_p_flags(segment['p_flags']), - self._format_hex(segment['p_align']))) - else: # 64 - self._emitline('%s %s %s' % ( - self._format_hex(segment['p_offset'], fullhex=True), - self._format_hex(segment['p_vaddr'], fullhex=True), - self._format_hex(segment['p_paddr'], fullhex=True))) - self._emitline(' %s %s %-3s %s' % ( - self._format_hex(segment['p_filesz'], fullhex=True), - self._format_hex(segment['p_memsz'], fullhex=True), - describe_p_flags(segment['p_flags']), - # lead0x set to False for p_align, to mimic readelf. - # No idea why the difference from 32-bit mode :-| - self._format_hex(segment['p_align'], lead0x=False))) - - if isinstance(segment, InterpSegment): - self._emitline(' [Requesting program interpreter: %s]' % - segment.get_interp_name()) - - # Sections to segments mapping - # - if self.elffile.num_sections() == 0: - # No sections? We're done - return - - self._emitline('\n Section to Segment mapping:') - self._emitline(' Segment Sections...') - - for nseg, segment in enumerate(self.elffile.iter_segments()): - self._emit(' %2.2d ' % nseg) - - for section in self.elffile.iter_sections(): - if ( not section.is_null() and - not ((section['sh_flags'] & SH_FLAGS.SHF_TLS) != 0 and - section['sh_type'] == 'SHT_NOBITS' and - segment['p_type'] != 'PT_TLS') and - segment.section_in_segment(section)): - self._emit('%s ' % section.name) - - self._emitline('') - - def display_section_headers(self, show_heading: bool = True) -> None: - """ Display the ELF section headers - """ - elfheader = self.elffile.header - if show_heading: - self._emitline('There are %s section headers, starting at offset %s' % ( - elfheader['e_shnum'], self._format_hex(elfheader['e_shoff']))) - - if self.elffile.num_sections() == 0: - self._emitline('There are no sections in this file.') - return - - self._emitline('\nSection Header%s:' % ( - 's' if self.elffile.num_sections() > 1 else '')) - - # Different formatting constraints of 32-bit and 64-bit addresses - # - if self.elffile.elfclass == 32: - self._emitline(' [Nr] Name Type Addr Off Size ES Flg Lk Inf Al') - else: - self._emitline(' [Nr] Name Type Address Offset') - self._emitline(' Size EntSize Flags Link Info Align') - - # Now the entries - # - for nsec, section in enumerate(self.elffile.iter_sections()): - self._emit(' [%2u] %-17.17s %-15.15s ' % ( - nsec, section.name, describe_sh_type(section['sh_type']))) - - if self.elffile.elfclass == 32: - self._emitline('%s %s %s %s %3s %2s %3s %2s' % ( - self._format_hex(section['sh_addr'], fieldsize=8, lead0x=False), - self._format_hex(section['sh_offset'], fieldsize=6, lead0x=False), - self._format_hex(section['sh_size'], fieldsize=6, lead0x=False), - self._format_hex(section['sh_entsize'], fieldsize=2, lead0x=False), - describe_sh_flags(section['sh_flags']), - section['sh_link'], section['sh_info'], - section['sh_addralign'])) - else: # 64 - self._emitline(' %s %s' % ( - self._format_hex(section['sh_addr'], fullhex=True, lead0x=False), - self._format_hex(section['sh_offset'], - fieldsize=16 if section['sh_offset'] > 0xffffffff else 8, - lead0x=False))) - self._emitline(' %s %s %3s %2s %3s %s' % ( - self._format_hex(section['sh_size'], fullhex=True, lead0x=False), - self._format_hex(section['sh_entsize'], fullhex=True, lead0x=False), - describe_sh_flags(section['sh_flags']), - section['sh_link'], section['sh_info'], - section['sh_addralign'])) - - self._emitline('Key to Flags:') - self._emitline(' W (write), A (alloc), X (execute), M (merge),' - ' S (strings), I (info),') - self._emitline(' L (link order), O (extra OS processing required),' - ' G (group), T (TLS),') - self._emitline(' C (compressed), x (unknown), o (OS specific),' - ' E (exclude),') - self._emit(' ') - if self.elffile['e_machine'] == 'EM_ARM': - self._emit('y (purecode), ') - self._emitline('p (processor specific)') - - def display_symbol_tables(self) -> None: - """ Display the symbol tables contained in the file - """ - symbol_tables = [(idx, s) for idx, s in enumerate(self.elffile.iter_sections()) - if isinstance(s, SymbolTableSection)] - - if not symbol_tables and self.elffile.num_sections() == 0: - self._emitline('') - self._emitline('Dynamic symbol information is not available for' - ' displaying symbols.') - - for section_index, section in symbol_tables: - if not isinstance(section, SymbolTableSection): - continue - - if section['sh_entsize'] == 0: - self._emitline("\nSymbol table '%s' has a sh_entsize of zero!" % ( - section.name)) - continue - - self._emitline("\nSymbol table '%s' contains %d %s:" % ( - section.name, - section.num_symbols(), - 'entry' if section.num_symbols() == 1 else 'entries')) - - if self.elffile.elfclass == 32: - self._emitline(' Num: Value Size Type Bind Vis Ndx Name') - else: # 64 - self._emitline(' Num: Value Size Type Bind Vis Ndx Name') - - for nsym, symbol in enumerate(section.iter_symbols()): - version_info = '' - # readelf doesn't display version info for Solaris versioning - if (section['sh_type'] == 'SHT_DYNSYM' and - self._versioninfo['type'] == 'GNU'): - version = self._symbol_version(nsym) - if (version['name'] != symbol.name and - version['index'] not in ('VER_NDX_LOCAL', - 'VER_NDX_GLOBAL')): - if version['filename']: - # external symbol - version_info = '@%(name)s (%(index)i)' % version - else: - # internal symbol - if version['hidden']: - version_info = '@%(name)s' % version - else: - version_info = '@@%(name)s' % version - - symbol_name = symbol.name - # Print section names for STT_SECTION symbols as readelf does - if (symbol['st_info']['type'] == 'STT_SECTION' - and symbol['st_shndx'] != 'SHN_UNDEF' - and symbol['st_shndx'] < self.elffile.num_sections() - and symbol['st_name'] == 0): - symbol_name = self.elffile.get_section(symbol['st_shndx']).name - - # symbol names are truncated to 25 chars, similarly to readelf - self._emitline('%6d: %s %s %-7s %-6s %-7s %4s %.25s%s' % ( - nsym, - self._format_hex( - symbol['st_value'], fullhex=True, lead0x=False), - "%5d" % symbol['st_size'] if symbol['st_size'] < 100000 else hex(symbol['st_size']), - describe_symbol_type(symbol['st_info']['type']), - describe_symbol_bind(symbol['st_info']['bind']), - describe_symbol_other(symbol['st_other']), - describe_symbol_shndx(self._get_symbol_shndx(symbol, - nsym, - section_index)), - _format_symbol_name(symbol_name), - version_info)) - - def display_dynamic_tags(self) -> None: - """ Display the dynamic tags contained in the file - """ - has_dynamic_sections = False - for section in self.elffile.iter_sections(): - if not isinstance(section, DynamicSection): - continue - - has_dynamic_sections = True - self._emitline("\nDynamic section at offset %s contains %d %s:" % ( - self._format_hex(section['sh_offset']), - section.num_tags(), - 'entry' if section.num_tags() == 1 else 'entries')) - self._emitline(" Tag Type Name/Value") - - padding = 20 + (8 if self.elffile.elfclass == 32 else 0) - for tag in section.iter_tags(): - if tag.entry.d_tag == 'DT_NEEDED': - parsed = 'Shared library: [%s]' % tag.needed - elif tag.entry.d_tag == 'DT_RPATH': - parsed = 'Library rpath: [%s]' % tag.rpath - elif tag.entry.d_tag == 'DT_RUNPATH': - parsed = 'Library runpath: [%s]' % tag.runpath - elif tag.entry.d_tag == 'DT_SONAME': - parsed = 'Library soname: [%s]' % tag.soname - elif tag.entry.d_tag.endswith(('SZ', 'ENT')): - parsed = '%i (bytes)' % tag['d_val'] - elif tag.entry.d_tag == 'DT_FLAGS': - parsed = describe_dt_flags(tag.entry.d_val) - elif tag.entry.d_tag == 'DT_FLAGS_1': - parsed = 'Flags: %s' % describe_dt_flags_1(tag.entry.d_val) - elif tag.entry.d_tag.endswith(('NUM', 'COUNT')): - parsed = '%i' % tag['d_val'] - elif tag.entry.d_tag == 'DT_PLTREL': - s = describe_dyn_tag(tag.entry.d_val) - if s.startswith('DT_'): - s = s[3:] - parsed = '%s' % s - elif tag.entry.d_tag == 'DT_MIPS_FLAGS': - parsed = describe_rh_flags(tag.entry.d_val) - elif tag.entry.d_tag in ('DT_MIPS_SYMTABNO', - 'DT_MIPS_LOCAL_GOTNO'): - parsed = str(tag.entry.d_val) - elif tag.entry.d_tag == 'DT_AARCH64_BTI_PLT': - parsed = '' - else: - parsed = '%#x' % tag['d_val'] - - self._emitline(" %s %-*s %s" % ( - self._format_hex(ENUM_D_TAG.get(tag.entry.d_tag, tag.entry.d_tag), - fullhex=True, lead0x=True), - padding, - '(%s)' % (tag.entry.d_tag[3:],), - parsed)) - if not has_dynamic_sections: - self._emitline("\nThere is no dynamic section in this file.") - - def display_notes(self) -> None: - """ Display the notes contained in the file - """ - for section in self.elffile.iter_sections(): - if isinstance(section, NoteSection): - for note in section.iter_notes(): - self._emitline("\nDisplaying notes found in: {}".format( - section.name)) - self._emitline(' Owner Data size Description') - self._emitline(' %s %s\t%s' % ( - note['n_name'].ljust(20), - self._format_hex(note['n_descsz'], fieldsize=8), - describe_note(note, self.elffile.header.e_machine))) - - def display_relocations(self) -> None: - """ Display the relocations contained in the file - """ - has_relocation_sections = False - for section in self.elffile.iter_sections(): - if not isinstance(section, RelocationSection): - continue - - has_relocation_sections = True - self._emitline("\nRelocation section '%.128s' at offset %s contains %d %s:" % ( - section.name, - self._format_hex(section['sh_offset']), - section.num_relocations(), - 'entry' if section.num_relocations() == 1 else 'entries')) - if section.is_RELA(): - self._emitline(" Offset Info Type Sym. Value Sym. Name + Addend") - else: - self._emitline(" Offset Info Type Sym.Value Sym. Name") - - # The symbol table section pointed to in sh_link - symtable = self.elffile.get_section(section['sh_link']) - - for rel in section.iter_relocations(): - hexwidth = 8 if self.elffile.elfclass == 32 else 12 - self._emit('%s %s %-17.17s' % ( - self._format_hex(rel['r_offset'], - fieldsize=hexwidth, lead0x=False), - self._format_hex(rel['r_info'], - fieldsize=hexwidth, lead0x=False), - describe_reloc_type( - rel['r_info_type'], self.elffile))) - - if rel['r_info_sym'] == 0: - if section.is_RELA(): - fieldsize = 8 if self.elffile.elfclass == 32 else 16 - addend = self._format_hex(rel['r_addend'], lead0x=False) - self._emit(' %s %s' % (' ' * fieldsize, addend)) - self._emitline() - - else: - symbol = symtable.get_symbol(rel['r_info_sym']) - # Some symbols have zero 'st_name', so instead what's used - # is the name of the section they point at. Truncate symbol - # names (excluding version info) to 22 chars, similarly to - # readelf. - if symbol['st_name'] == 0: - symsecidx = self._get_symbol_shndx(symbol, - rel['r_info_sym'], - section['sh_link']) - symsec = self.elffile.get_section(symsecidx) - symbol_name = symsec.name - version = '' - else: - symbol_name = symbol.name - version = self._symbol_version(rel['r_info_sym']) - version = (version['name'] - if version and version['name'] else '') - symbol_name = '%.22s' % symbol_name - if version: - symbol_name += '@' + version - - self._emit(' %s %s' % ( - self._format_hex( - symbol['st_value'], - fullhex=True, lead0x=False), - _format_symbol_name(symbol_name))) - if section.is_RELA(): - self._emit(' %s %x' % ( - '+' if rel['r_addend'] >= 0 else '-', - abs(rel['r_addend']))) - self._emitline() - - # Emit the two additional relocation types for ELF64 MIPS - # binaries. - if (self.elffile.elfclass == 64 and - self.elffile['e_machine'] == 'EM_MIPS'): - for i in (2, 3): - rtype = rel['r_info_type%s' % i] - self._emit(' Type%s: %s' % ( - i, - describe_reloc_type(rtype, self.elffile))) - self._emitline() - - if not has_relocation_sections: - self._emitline('\nThere are no relocations in this file.') - - def display_arm_unwind(self) -> None: - if not self.elffile.has_ehabi_info(): - self._emitline('There are no .ARM.idx sections in this file.') - return - for ehabi_info in self.elffile.get_ehabi_infos(): - # Unwind section '.ARM.exidx' at offset 0x203e8 contains 1009 entries: - self._emitline("\nUnwind section '%s' at offset 0x%x contains %d %s" % ( - ehabi_info.section_name(), - ehabi_info.section_offset(), - ehabi_info.num_entry(), - 'entry' if ehabi_info.num_entry() == 1 else 'entries')) - - for i in range(ehabi_info.num_entry()): - entry = ehabi_info.get_entry(i) - self._emitline() - self._emitline("Entry %d:" % i) - if isinstance(entry, CorruptEHABIEntry): - self._emitline(" [corrupt] %s" % entry.reason) - continue - self._emit(" Function offset 0x%x: " % entry.function_offset) - if isinstance(entry, CannotUnwindEHABIEntry): - self._emitline("[cantunwind]") - continue - elif entry.eh_table_offset: - self._emitline("@0x%x" % entry.eh_table_offset) - else: - self._emitline("Compact (inline)") - if isinstance(entry, GenericEHABIEntry): - self._emitline(" Personality: 0x%x" % entry.personality) - else: - self._emitline(" Compact model index: %d" % entry.personality) - for mnemonic_item in entry.mnmemonic_array(): - self._emit(' ') - self._emitline(mnemonic_item) - - def display_version_info(self) -> None: - """ Display the version info contained in the file - """ - if not self._versioninfo['type']: - self._emitline("\nNo version information found in this file.") - return - - for section in self.elffile.iter_sections(): - if isinstance(section, GNUVerSymSection): - self._print_version_section_header(section, 'Version symbols') - num_symbols = section.num_symbols() - - # Symbol version info are printed four by four entries - for idx_by_4 in range(0, num_symbols, 4): - - self._emit(' %03x:' % idx_by_4) - - for idx in range(idx_by_4, min(idx_by_4 + 4, num_symbols)): - - symbol_version = self._symbol_version(idx) - if symbol_version['index'] == 'VER_NDX_LOCAL': - version_index = 0 - version_name = '(*local*)' - elif symbol_version['index'] == 'VER_NDX_GLOBAL': - version_index = 1 - version_name = '(*global*)' - else: - version_index = symbol_version['index'] - version_name = '(%(name)s)' % symbol_version - - visibility = 'h' if symbol_version['hidden'] else ' ' - - self._emit('%4x%s%-13s' % ( - version_index, visibility, version_name)) - - self._emitline() - - elif isinstance(section, GNUVerDefSection): - self._print_version_section_header( - section, 'Version definition', indent=2) - - offset = 0 - for verdef, verdaux_iter in section.iter_versions(): - verdaux = next(verdaux_iter) - - name = verdaux.name - if verdef['vd_flags']: - flags = describe_ver_flags(verdef['vd_flags']) - # Mimic exactly the readelf output - flags += ' ' - else: - flags = 'none' - - self._emitline(' %s: Rev: %i Flags: %s Index: %i' - ' Cnt: %i Name: %s' % ( - self._format_hex(offset, fieldsize=6, - alternate=True), - verdef['vd_version'], flags, verdef['vd_ndx'], - verdef['vd_cnt'], name)) - - verdaux_offset = ( - offset + verdef['vd_aux'] + verdaux['vda_next']) - for idx, verdaux in enumerate(verdaux_iter, start=1): - self._emitline(' %s: Parent %i: %s' % - (self._format_hex(verdaux_offset, fieldsize=4), - idx, verdaux.name)) - verdaux_offset += verdaux['vda_next'] - - offset += verdef['vd_next'] - - elif isinstance(section, GNUVerNeedSection): - self._print_version_section_header(section, 'Version needs') - - offset = 0 - for verneed, verneed_iter in section.iter_versions(): - - self._emitline(' %s: Version: %i File: %s Cnt: %i' % ( - self._format_hex(offset, fieldsize=6, - alternate=True), - verneed['vn_version'], verneed.name, - verneed['vn_cnt'])) - - vernaux_offset = offset + verneed['vn_aux'] - for idx, vernaux in enumerate(verneed_iter, start=1): - if vernaux['vna_flags']: - flags = describe_ver_flags(vernaux['vna_flags']) - # Mimic exactly the readelf output - flags += ' ' - else: - flags = 'none' - - self._emitline( - ' %s: Name: %s Flags: %s Version: %i' % ( - self._format_hex(vernaux_offset, fieldsize=4), - vernaux.name, flags, - vernaux['vna_other'])) - - vernaux_offset += vernaux['vna_next'] - - offset += verneed['vn_next'] - - def display_arch_specific(self) -> None: - """ Display the architecture-specific info contained in the file. - """ - if self.elffile['e_machine'] == 'EM_ARM': - self._display_arch_specific_arm() - elif self.elffile['e_machine'] == 'EM_RISCV': - self._display_arch_specific_riscv() - - def display_hex_dump(self, section_spec: int | str) -> None: - """ Display a hex dump of a section. section_spec is either a section - number or a name. - """ - section = self._section_from_spec(section_spec) - if section is None: - # readelf prints the warning to stderr. Even though stderrs are not compared - # in tests, we comply with that behavior. - sys.stderr.write('readelf: Warning: Section \'%s\' was not dumped because it does not exist!\n' % ( - section_spec)) - return - if section['sh_type'] == 'SHT_NOBITS' or not (data := section.data()): - self._emitline("Section '%s' has no data to dump." % ( - section_spec)) - return - - self._emitline("\nHex dump of section '%s':" % section.name) - self._note_relocs_for_section(section) - addr = section['sh_addr'] - dataptr = 0 - - while dataptr < len(data): - bytesleft = len(data) - dataptr - # chunks of 16 bytes per line - linebytes = 16 if bytesleft > 16 else bytesleft - - self._emit(' %s ' % self._format_hex(addr, fieldsize=8)) - for i in range(16): - if i < linebytes: - self._emit('%2.2x' % data[dataptr + i]) - else: - self._emit(' ') - if i % 4 == 3: - self._emit(' ') - - for i in range(linebytes): - c = data[dataptr + i : dataptr + i + 1] - if c[0] >= 32 and c[0] < 0x7f: - self._emit(bytes2str(c)) - else: - self._emit(bytes2str(b'.')) - - self._emitline() - addr += linebytes - dataptr += linebytes - - self._emitline() - - def display_string_dump(self, section_spec: int | str) -> None: - """ Display a strings dump of a section. section_spec is either a - section number or a name. - """ - section = self._section_from_spec(section_spec) - if section is None: - # readelf prints the warning to stderr. Even though stderrs are not compared - # in tests, we comply with that behavior. - sys.stderr.write('readelf.py: Warning: Section \'%s\' was not dumped because it does not exist!\n' % ( - section_spec)) - return - if section['sh_type'] == 'SHT_NOBITS': - self._emitline("\nSection '%s' has no data to dump." % ( - section_spec)) - return - - self._emitline("\nString dump of section '%s':" % section.name) - - found = False - data = section.data() - dataptr = 0 - - while dataptr < len(data): - while ( dataptr < len(data) and - not (32 <= data[dataptr] <= 127)): - dataptr += 1 - - if dataptr >= len(data): - break - - endptr = dataptr - while endptr < len(data) and data[endptr] != 0: - endptr += 1 - - found = True - self._emitline(' [%6x] %s' % ( - dataptr, bytes2str(data[dataptr:endptr]))) - - dataptr = endptr - - if not found: - self._emitline(' No strings found in this section.') - else: - self._emitline() - - def display_debug_dump(self, dump_what: str) -> None: - """ Dump a DWARF section - """ - if self._dwarfinfo is None: - return - - set_global_machine_arch(self.elffile.get_machine_arch()) - - if dump_what == 'info': - self._dump_debug_info() - self._dump_debug_types() - elif dump_what == 'decodedline': - self._dump_debug_line_programs() - elif dump_what == 'frames': - self._dump_debug_frames() - elif dump_what == 'frames-interp': - self._dump_debug_frames_interp() - elif dump_what == 'aranges': - self._dump_debug_aranges() - elif dump_what in { 'pubtypes', 'pubnames' }: - self._dump_debug_namelut(dump_what) - elif dump_what == 'loc': - self._dump_debug_locations() - elif dump_what == 'Ranges': - self._dump_debug_ranges() - else: - self._emitline('debug dump not yet supported for "%s"' % dump_what) - - def _format_hex( - self, - addr: int, - fieldsize: int | None = None, - fullhex: bool = False, - lead0x: bool = True, - alternate: bool = False, - ) -> str: - """ Format an address into a hexadecimal string. - - fieldsize: - Size of the hexadecimal field (with leading zeros to fit the - address into. For example with fieldsize=8, the format will - be %08x - If None, the minimal required field size will be used. - - fullhex: - If True, override fieldsize to set it to the maximal size - needed for the elfclass - - lead0x: - If True, leading 0x is added - - alternate: - If True, override lead0x to emulate the alternate - hexadecimal form specified in format string with the # - character: only non-zero values are prefixed with 0x. - This form is used by readelf. - """ - if alternate: - if addr == 0: - lead0x = False - else: - lead0x = True - if fieldsize is not None: - fieldsize -= 2 - - s = '0x' if lead0x else '' - if fullhex: - fieldsize = 8 if self.elffile.elfclass == 32 else 16 - if fieldsize is None: - field = '%x' - else: - field = '%' + '0%sx' % fieldsize - return s + field % addr - - def _print_version_section_header( - self, - version_section, - name: str, - lead0x: bool = True, - indent: int = 1, - ) -> None: - """ Print a section header of one version related section (versym, - verneed or verdef) with some options to accomodate readelf - little differences between each header (e.g. indentation - and 0x prefixing). - """ - if hasattr(version_section, 'num_versions'): - num_entries = version_section.num_versions() - else: - num_entries = version_section.num_symbols() - - self._emitline("\n%s section '%s' contains %d %s:" % ( - name, version_section.name, num_entries, - 'entry' if num_entries == 1 else 'entries')) - self._emitline('%sAddr: %s Offset: %s Link: %i (%s)' % ( - ' ' * indent, - self._format_hex( - version_section['sh_addr'], fieldsize=16, lead0x=lead0x), - self._format_hex( - version_section['sh_offset'], fieldsize=8, lead0x=True), - version_section['sh_link'], - self.elffile.get_section(version_section['sh_link']).name - ) - ) - - @cached_property - def _versioninfo(self) -> VersionInfo: - """ Search and initialize informations about version related sections - and the kind of versioning used (GNU or Solaris). - """ - info = {'versym': None, 'verdef': None, - 'verneed': None, 'type': None} - - for section in self.elffile.iter_sections(): - if isinstance(section, GNUVerSymSection): - info['versym'] = section - elif isinstance(section, GNUVerDefSection): - info['verdef'] = section - elif isinstance(section, GNUVerNeedSection): - info['verneed'] = section - elif isinstance(section, DynamicSection): - for tag in section.iter_tags(): - if tag['d_tag'] == 'DT_VERSYM': - info['type'] = 'GNU' - break - - if not info['type'] and (info['verneed'] or info['verdef']): - info['type'] = 'Solaris' - - return info - - def _symbol_version(self, nsym: int) -> SymbolVersion | None: - """ Return a dict containing information on the - or None if no version information is available - """ - symbol_version = dict.fromkeys(('index', 'name', 'filename', 'hidden')) - - if (not self._versioninfo['versym'] or - nsym >= self._versioninfo['versym'].num_symbols()): - return None - - symbol = self._versioninfo['versym'].get_symbol(nsym) - index = symbol.entry['ndx'] - if index not in ('VER_NDX_LOCAL', 'VER_NDX_GLOBAL'): - index = int(index) - - if self._versioninfo['type'] == 'GNU': - # In GNU versioning mode, the highest bit is used to - # store whether the symbol is hidden or not - if index & 0x8000: - index &= ~0x8000 - symbol_version['hidden'] = True - - if (self._versioninfo['verdef'] and - index <= self._versioninfo['verdef'].num_versions()): - _, verdaux_iter = \ - self._versioninfo['verdef'].get_version(index) - symbol_version['name'] = next(verdaux_iter).name - else: - verneed, vernaux = \ - self._versioninfo['verneed'].get_version(index) - symbol_version['name'] = vernaux.name - symbol_version['filename'] = verneed.name - - symbol_version['index'] = index - return symbol_version - - def _section_from_spec(self, spec: int | str) -> Section | None: - """ Retrieve a section given a "spec" (either number or name). - Return None if no such section exists in the file. - """ - try: - num = int(spec) - if num < self.elffile.num_sections(): - return self.elffile.get_section(num) - else: - return None - except ValueError: - # Not a number. Must be a name then - return self.elffile.get_section_by_name(spec) - - def _get_symbol_shndx(self, symbol, symbol_index, symtab_index): - """ Get the index into the section header table for the "symbol" - at "symbol_index" located in the symbol table with section index - "symtab_index". - """ - symbol_shndx = symbol['st_shndx'] - if symbol_shndx != SHN_INDICES.SHN_XINDEX: - return symbol_shndx - - return self._shndx_sections[symtab_index].get_section_index(symbol_index) - - @cached_property - def _shndx_sections(self) -> dict[Container, SymbolTableIndexSection]: - return { - sec.symboltable: sec - for sec in self.elffile.iter_sections() - if isinstance(sec, SymbolTableIndexSection) - } - - def _note_relocs_for_section(self, section: Section) -> None: - """ If there are relocation sections pointing to the givne section, - emit a note about it. - """ - for relsec in self.elffile.iter_sections(): - if isinstance(relsec, RelocationSection): - info_idx = relsec['sh_info'] - if self.elffile.get_section(info_idx) == section: - self._emitline(' Note: This section has relocations against it, but these have NOT been applied to this dump.') - return - - @cached_property - def _dwarfinfo(self) -> DWARFInfo | None: - """ Initialize the DWARF info contained in the file. - Leave self._dwarfinfo at None if no DWARF info was found in the file - """ - return self.elffile.get_dwarf_info() if self.elffile.has_dwarf_info() else None - - def _dump_debug_info(self) -> None: - """ Dump the debugging info section. - """ - if not self._dwarfinfo.has_debug_info: - return - self._emitline('Contents of the %s section:\n' % self._dwarfinfo.debug_info_sec.name) - - # Offset of the .debug_info section in the stream - section_offset = self._dwarfinfo.debug_info_sec.global_offset - - for cu in self._dwarfinfo.iter_CUs(): - self._emitline(' Compilation Unit @ offset %s:' % - self._format_hex(cu.cu_offset, alternate=True)) - self._emitline(' Length: %s (%s)' % ( - self._format_hex(cu['unit_length']), - '%s-bit' % cu.dwarf_format())) - self._emitline(' Version: %s' % cu['version']) - if cu['version'] >= 5: - if cu.header.get("unit_type", ''): - unit_type = cu.header.unit_type - self._emitline(' Unit Type: %s (%d)' % ( - unit_type, ENUM_DW_UT.get(cu.header.unit_type, 0))) - self._emitline(' Abbrev Offset: %s' % ( - self._format_hex(cu['debug_abbrev_offset'], alternate=True))) - self._emitline(' Pointer Size: %s' % cu['address_size']) - if unit_type in ('DW_UT_skeleton', 'DW_UT_split_compile'): - self._emitline(' Dwo id: %s' % cu['dwo_id']) - elif unit_type in ('DW_UT_type', 'DW_UT_split_type'): - self._emitline(' Signature: 0x%x' % cu['type_signature']) - self._emitline(' Type Offset: 0x%x' % cu['type_offset']) - else: - self._emitline(' Abbrev Offset: %s' % ( - self._format_hex(cu['debug_abbrev_offset'], alternate=True))), - self._emitline(' Pointer Size: %s' % cu['address_size']) - - # The nesting depth of each DIE within the tree of DIEs must be - # displayed. To implement this, a counter is incremented each time - # the current DIE has children, and decremented when a null die is - # encountered. Due to the way the DIE tree is serialized, this will - # correctly reflect the nesting depth - # - die_depth = 0 - current_function = None - for die in cu.iter_DIEs(): - if die.tag == 'DW_TAG_subprogram': - current_function = die - self._emitline(' <%s><%x>: Abbrev Number: %s%s' % ( - die_depth, - die.offset, - die.abbrev_code, - (' (%s)' % die.tag) if not die.is_null() else '')) - if die.is_null(): - die_depth -= 1 - continue - - for attr in die.attributes.values(): - name = attr.name - # Unknown attribute values are passed-through as integers - if isinstance(name, int): - name = 'Unknown AT value: %x' % name - - attr_desc = describe_attr_value(attr, die, section_offset) - - if 'DW_OP_fbreg' in attr_desc and current_function and 'DW_AT_frame_base' not in current_function.attributes: - postfix = ' [without dw_at_frame_base]' - else: - postfix = '' - - self._emitline(' <%x> %-18s: %s%s' % ( - attr.offset, - name, - attr_desc, - postfix)) - - if die.has_children: - die_depth += 1 - - self._emitline() - - def _dump_debug_types(self) -> None: - """Dump the debug types section - """ - if not self._dwarfinfo.has_debug_info: - return - if self._dwarfinfo.debug_types_sec is None: - return - self._emitline('Contents of the %s section:\n' % self._dwarfinfo.debug_types_sec.name) - - # Offset of the .debug_types section in the stream - section_offset = self._dwarfinfo.debug_types_sec.global_offset - - for tu in self._dwarfinfo.iter_TUs(): - self._emitline(' Compilation Unit @ offset %s:' % - self._format_hex(tu.tu_offset, alternate=True)) - self._emitline(' Length: %s (%s)' % (self._format_hex(tu['unit_length']), - '%s-bit' % tu.dwarf_format())) - self._emitline(' Version: %s' % tu['version']) - self._emitline(' Abbrev Offset: %s' % (self._format_hex(tu['debug_abbrev_offset'], alternate=True))) - self._emitline(' Pointer Size: %s' % tu['address_size']) - self._emitline(' Signature: 0x%x' % tu['signature']) - self._emitline(' Type Offset: 0x%x' % tu['type_offset']) - - die_depth = 0 - for die in tu.iter_DIEs(): - self._emitline(' <%s><%x>: Abbrev Number: %s%s' % ( - die_depth, - die.offset, - die.abbrev_code, - (' (%s)' % die.tag) if not die.is_null() else '')) - if die.is_null(): - die_depth -= 1 - continue - - for attr in die.attributes.values(): - name = attr.name - # Unknown attribute values are passed-through as integers - if isinstance(name, int): - name = 'Unknown AT value: %x' % name - - attr_desc = describe_attr_value(attr, die, section_offset) - - self._emitline(' <%x> %-18s: %s' % ( - attr.offset, - name, - attr_desc)) - - if die.has_children: - die_depth += 1 - - self._emitline() - - def _dump_debug_line_programs(self) -> None: - """ Dump the (decoded) line programs from .debug_line - The programs are dumped in the order of the CUs they belong to. - """ - if not self._dwarfinfo.has_debug_info: - return - self._emitline('Contents of the %s section:' % self._dwarfinfo.debug_line_sec.name) - self._emitline() - lineprogram_list = [] - - for cu in self._dwarfinfo.iter_CUs(): - # Avoid dumping same lineprogram multiple times - lineprogram = self._dwarfinfo.line_program_for_CU(cu) - - if lineprogram is None or lineprogram in lineprogram_list: - continue - - lineprogram_list.append(lineprogram) - cu_filename = bytes2str(lineprogram['file_entry'][0].name) - if lineprogram['include_directory']: - # GNU readelf 2.38 only outputs directory in wide mode - self._emitline('%s:' % cu_filename) - else: - self._emitline('CU: %s:' % cu_filename) - - self._emitline('File name Line number Starting address Stmt') - # GNU readelf has a View column that we don't try to replicate - # The autotest has logic in place to ignore that - - # Print each state's file, line and address information. For some - # instructions other output is needed to be compatible with - # readelf. - for entry in lineprogram.get_entries(): - state = entry.state - if state is None: - # Special handling for commands that don't set a new state - if entry.command == DW_LNS_set_file: - file_entry = lineprogram['file_entry'][entry.args[0] - 1] - if file_entry.dir_index == 0: - # current directory - self._emitline('\n./%s:[++]' % ( - bytes2str(file_entry.name))) - else: - self._emitline('\n%s/%s:' % ( - bytes2str(lineprogram['include_directory'][file_entry.dir_index - 1]), - bytes2str(file_entry.name))) - elif entry.command == DW_LNE_define_file: - self._emitline('%s:' % ( - bytes2str(lineprogram['include_directory'][entry.args[0].dir_index]))) - elif lineprogram['version'] < 4 or self.elffile['e_machine'] == 'EM_PPC64': - self._emitline('%-35s %11s %18s %s' % ( - bytes2str(lineprogram['file_entry'][state.file - 1].name), - state.line if not state.end_sequence else '-', - '0' if state.address == 0 else self._format_hex(state.address), - 'x' if state.is_stmt and not state.end_sequence else '')) - else: - # In readelf, on non-VLIW machines there is no op_index postfix after address. - # It used to be unconditional. - self._emitline('%-35s %s %18s%s %s' % ( - bytes2str(lineprogram['file_entry'][state.file - 1].name), - "%11d" % (state.line,) if not state.end_sequence else '-', - '0' if state.address == 0 else self._format_hex(state.address), - '' if lineprogram.header.maximum_operations_per_instruction == 1 else '[%d]' % (state.op_index,), - 'x' if state.is_stmt and not state.end_sequence else '')) - if entry.command == DW_LNS_copy: - # Another readelf oddity... - self._emitline() - - def _dump_frames_info(self, section, cfi_entries) -> None: - """ Dump the raw call frame info in a section. - - `section` is the Section instance that contains the call frame info - while `cfi_entries` must be an iterable that yields the sequence of - CIE or FDE instances. - """ - self._emitline('Contents of the %s section:' % section.name) - - for entry in cfi_entries: - if isinstance(entry, CIE): - self._emitline('\n%08x %s %s CIE' % ( - entry.offset, - self._format_hex(entry['length'], fullhex=True, lead0x=False), - self._format_hex(entry['CIE_id'], fieldsize=8, lead0x=False))) - self._emitline(' Version: %d' % entry['version']) - self._emitline(' Augmentation: "%s"' % bytes2str(entry['augmentation'])) - if(entry['version'] >= 4): - self._emitline(' Pointer Size: %d' % entry['address_size']) - self._emitline(' Segment Size: %d' % entry['segment_size']) - self._emitline(' Code alignment factor: %u' % entry['code_alignment_factor']) - self._emitline(' Data alignment factor: %d' % entry['data_alignment_factor']) - self._emitline(' Return address column: %d' % entry['return_address_register']) - if entry.augmentation_bytes: - self._emitline(f' Augmentation data: {entry.augmentation_bytes.hex(" ")}') - self._emitline() - - elif isinstance(entry, FDE): - # Readelf bug #31973 - length = entry['length'] if entry.cie.offset < entry.offset else entry.cie['length'] - self._emitline('\n%08x %s %s FDE cie=%08x pc=%s..%s' % ( - entry.offset, - self._format_hex(length, fullhex=True, lead0x=False), - self._format_hex(entry['CIE_pointer'], fieldsize=8, lead0x=False), - entry.cie.offset, - self._format_hex(entry['initial_location'], fullhex=True, lead0x=False), - self._format_hex( - entry['initial_location'] + entry['address_range'], - fullhex=True, lead0x=False))) - if entry.augmentation_bytes: - self._emitline(f' Augmentation data: {entry.augmentation_bytes.hex(" ")}') - - else: # ZERO terminator - assert isinstance(entry, ZERO) - self._emitline('\n%08x ZERO terminator' % entry.offset) - continue - - self._emit(describe_CFI_instructions(entry)) - self._emitline() - - def _dump_debug_frames(self) -> None: - """ Dump the raw frame info from .debug_frame and .eh_frame sections. - """ - if self._dwarfinfo.has_EH_CFI(): - self._dump_frames_info( - self._dwarfinfo.eh_frame_sec, - self._dwarfinfo.EH_CFI_entries()) - self._emitline() - - if self._dwarfinfo.has_CFI(): - self._dump_frames_info( - self._dwarfinfo.debug_frame_sec, - self._dwarfinfo.CFI_entries()) - - def _dump_debug_namelut(self, what: str) -> None: - """ - Dump the debug pubnames section. - """ - if what == 'pubnames': - namelut = self._dwarfinfo.get_pubnames() - section = self._dwarfinfo.debug_pubnames_sec - else: - namelut = self._dwarfinfo.get_pubtypes() - section = self._dwarfinfo.debug_pubtypes_sec - - # readelf prints nothing if the section is not present. - if not namelut: - return - - self._emitline('Contents of the %s section:' % section.name) - self._emitline() - - cu_headers = namelut.get_cu_headers() - - # go over CU-by-CU first and item-by-item next. - for (cu_hdr, (cu_ofs, items)) in zip(cu_headers, itertools.groupby( - namelut.items(), key = lambda x: x[1].cu_ofs)): - - self._emitline(' Length: %d' % cu_hdr.unit_length) - self._emitline(' Version: %d' % cu_hdr.version) - self._emitline(' Offset into .debug_info section: 0x%x' % cu_hdr.debug_info_offset) - self._emitline(' Size of area in .debug_info section: %d' % cu_hdr.debug_info_length) - self._emitline() - self._emitline(' Offset Name') - for item in items: - self._emitline(' %x %s' % (item[1].die_ofs - cu_ofs, item[0])) - self._emitline() - - def _dump_debug_aranges(self) -> None: - """ Dump the aranges table - """ - aranges_table = self._dwarfinfo.get_aranges() - if aranges_table is None: - return - # Seems redundant, but we need to get the unsorted set of entries - # to match system readelf. - # Also, sometimes there are blank sections in aranges, but readelf - # dumps them, so we should too. - unordered_entries = aranges_table._get_entries(need_empty=True) - - if not unordered_entries: - self._emitline() - self._emitline("Section '.debug_aranges' has no debugging data.") - return - - self._emitline('Contents of the %s section:' % self._dwarfinfo.debug_aranges_sec.name) - self._emitline() - prev_offset = None - for entry in unordered_entries: - if prev_offset != entry.info_offset: - if entry != unordered_entries[0]: - self._emitline(' %s %s' % ( - self._format_hex(0, fullhex=True, lead0x=False), - self._format_hex(0, fullhex=True, lead0x=False))) - self._emitline(' Length: %d' % (entry.unit_length)) - self._emitline(' Version: %d' % (entry.version)) - self._emitline(' Offset into .debug_info: 0x%x' % (entry.info_offset)) - self._emitline(' Pointer Size: %d' % (entry.address_size)) - self._emitline(' Segment Size: %d' % (entry.segment_size)) - self._emitline() - self._emitline(' Address Length') - if entry.begin_addr != 0 or entry.length != 0: - self._emitline(' %s %s' % ( - self._format_hex(entry.begin_addr, fullhex=True, lead0x=False), - self._format_hex(entry.length, fullhex=True, lead0x=False))) - prev_offset = entry.info_offset - self._emitline(' %s %s' % ( - self._format_hex(0, fullhex=True, lead0x=False), - self._format_hex(0, fullhex=True, lead0x=False))) - - def _dump_frames_interp_info(self, section, cfi_entries) -> None: - """ Dump interpreted (decoded) frame information in a section. - - `section` is the Section instance that contains the call frame info - while `cfi_entries` must be an iterable that yields the sequence of - CIE or FDE instances. - """ - self._emitline('Contents of the %s section:' % section.name) - - for entry in cfi_entries: - if isinstance(entry, CIE): - self._emitline('\n%08x %s %s CIE "%s" cf=%d df=%d ra=%d' % ( - entry.offset, - self._format_hex(entry['length'], fullhex=True, lead0x=False), - self._format_hex(entry['CIE_id'], fieldsize=8, lead0x=False), - bytes2str(entry['augmentation']), - entry['code_alignment_factor'], - entry['data_alignment_factor'], - entry['return_address_register'])) - ra_regnum = entry['return_address_register'] - - elif isinstance(entry, FDE): - # Readelf bug #31973 - FDE length misreported if FDE precedes its CIE - length = entry['length'] if entry.cie.offset < entry.offset else entry.cie['length'] - self._emitline('\n%08x %s %s FDE cie=%08x pc=%s..%s' % ( - entry.offset, - self._format_hex(length, fullhex=True, lead0x=False), - self._format_hex(entry['CIE_pointer'], fieldsize=8, lead0x=False), - entry.cie.offset, - self._format_hex(entry['initial_location'], fullhex=True, lead0x=False), - self._format_hex(entry['initial_location'] + entry['address_range'], - fullhex=True, lead0x=False))) - ra_regnum = entry.cie['return_address_register'] - - # If the FDE brings adds no unwinding information compared to - # its CIE, omit its table. - if (len(entry.get_decoded().table) == - len(entry.cie.get_decoded().table)): - continue - - else: # ZERO terminator - assert isinstance(entry, ZERO) - self._emitline('\n%08x ZERO terminator' % entry.offset) - continue - - # Decode the table. - decoded_table = entry.get_decoded() - if not decoded_table.table: - continue - - # Print the heading row for the decoded table - self._emit(' LOC') - self._emit(' ' if entry.structs.address_size == 4 else ' ') - self._emit(' CFA ') - - # Look at the registers the decoded table describes. - # We build reg_order here to match readelf's order. In particular, - # registers are sorted by their number, so that the register - # matching ra_regnum is usually listed last with a special heading. - # (LoongArch is a notable exception in that its return register's - # DWARF register number is not greater than other GPRs.) - decoded_table = entry.get_decoded() - reg_order = sorted(decoded_table.reg_order) - if decoded_table.reg_order: - # Headings for the registers - for regnum in reg_order: - if regnum == ra_regnum: - self._emit('ra ') - continue - self._emit(' %-5s' % describe_reg_name(regnum)) - self._emitline() - - for line in decoded_table.table: - self._emit(self._format_hex( - line['pc'], fullhex=True, lead0x=False)) - - if line['cfa'] is not None: - s = describe_CFI_CFA_rule(line['cfa']) - else: - s = 'u' - self._emit(' %-9s' % s) - - for regnum in reg_order: - if regnum in line: - s = describe_CFI_register_rule(line[regnum]) - else: - s = 'u' - self._emit(' %-5s' % s) - self._emitline() - self._emitline() - - def _dump_debug_frames_interp(self) -> None: - """ Dump the interpreted (decoded) frame information from .debug_frame - and .eh_frame sections. - """ - if self._dwarfinfo.has_EH_CFI(): - self._dump_frames_interp_info( - self._dwarfinfo.eh_frame_sec, - self._dwarfinfo.EH_CFI_entries()) - self._emitline() - - if self._dwarfinfo.has_CFI(): - self._dump_frames_interp_info( - self._dwarfinfo.debug_frame_sec, - self._dwarfinfo.CFI_entries()) - - def _dump_debug_locations(self) -> None: - """ Dump the location lists from .debug_loc/.debug_loclists section - """ - di = self._dwarfinfo - loc_lists_sec = di.location_lists() - if not loc_lists_sec: # No locations section - readelf outputs nothing - return - - if isinstance(loc_lists_sec, LocationListsPair): - self._dump_debug_locsection(di, loc_lists_sec._loc) - self._dump_debug_locsection(di, loc_lists_sec._loclists) - else: - self._dump_debug_locsection(di, loc_lists_sec) - - def _dump_debug_locsection(self, di: DWARFInfo, loc_lists_sec) -> None: - """ Dump the location lists from .debug_loc/.debug_loclists section - """ - ver5 = loc_lists_sec.version >= 5 - section_name = (di.debug_loclists_sec if ver5 else di.debug_loc_sec).name - - # To dump a location list, one needs to know the CU. - # Scroll through DIEs once, list the known location list offsets. - # Don't need this CU/DIE scan if all entries are absolute or prefixed by base, - # but let's not optimize for that yet. - cu_map = { # Loc list offset => CU - attr.value: cu - for cu in di.iter_CUs() - for die in cu.iter_DIEs() - for attr in die.attributes.values() - if (LocationParser.attribute_has_location(attr, cu['version']) and - LocationParser._attribute_has_loc_list(attr, cu['version'])) - } - - addr_size = di.config.default_address_size # In bytes, 4 or 8 - addr_width = addr_size * 2 # In hex digits, 8 or 16 - line_template = " %%08x %%0%dx %%0%dx %%s%%s" % (addr_width, addr_width) - - loc_lists = list(loc_lists_sec.iter_location_lists()) - if not loc_lists: - # Present but empty locations section - readelf outputs a message - self._emitline("\nSection '%s' has no debugging data." % (section_name,)) - return - - # The v5 loclists section consists of CUs - small header, and - # an optional loclist offset table. Readelf prints out the header data dump - # on top of every CU, so we should too. But we don't scroll through - # the loclists section, we are effectively scrolling through the info - # section (as to not stumble upon gaps in the secion, and not miss the - # GNU locviews, so we have to keep track which loclists-CU we are in. - # Same logic in v5 rnglists section dump. - lcus = list(loc_lists_sec.iter_CUs()) if ver5 else None - lcu_index = 0 - next_lcu_offset = 0 - - self._emitline('Contents of the %s section:\n' % (section_name,)) - if not ver5: - self._emitline(' Offset Begin End Expression') - - for loc_list in loc_lists: - # Emit CU headers before the current loclist, if we've moved to the next CU - if ver5 and loc_list[0].entry_offset > next_lcu_offset: - while loc_list[0].entry_offset > next_lcu_offset: - lcu = lcus[lcu_index] - self._dump_debug_loclists_CU_header(lcu) - next_lcu_offset = lcu.offset_after_length + lcu.unit_length - lcu_index += 1 - self._emitline(' Offset Begin End Expression') - self._dump_loclist(loc_list, line_template, cu_map) - - def _dump_loclist(self, loc_list, line_template: str, cu_map: dict) -> None: - in_views = False - has_views = False - base_ip = None - loc_entry_count = 0 - cu = None - for entry in loc_list: - if isinstance(entry, LocationViewPair): - has_views = in_views = True - # The "v" before address is conditional in binutils, haven't figured out how - self._emitline(" %08x v%015x v%015x location view pair" % (entry.entry_offset, entry.begin, entry.end)) - else: - if in_views: - in_views = False - self._emitline("") - - # Readelf quirk: indexed loclists don't show the real base IP - if cu_map is None: - base_ip = 0 - elif cu is None: - cu = cu_map.get(entry.entry_offset, False) - if not cu: - raise ValueError("Location list can't be tracked to a CU") - - if isinstance(entry, LocationEntry): - if base_ip is None and not entry.is_absolute: - base_ip = _get_cu_base(cu) - - begin_offset = (0 if entry.is_absolute else base_ip) + entry.begin_offset - end_offset = (0 if entry.is_absolute else base_ip) + entry.end_offset - expr = describe_DWARF_expr(entry.loc_expr, cu.structs, cu.cu_offset) - if has_views: - view = loc_list[loc_entry_count] - postfix = ' (start == end)' if entry.begin_offset == entry.end_offset and view.begin == view.end else '' - self._emitline(' %08x v%015x v%015x views at %08x for:' %( - entry.entry_offset, - view.begin, - view.end, - view.entry_offset)) - self._emitline(' %016x %016x %s%s' %( - begin_offset, - end_offset, - expr, - postfix)) - loc_entry_count += 1 - else: - postfix = ' (start == end)' if entry.begin_offset == entry.end_offset else '' - self._emitline(line_template % ( - entry.entry_offset, - begin_offset, - end_offset, - expr, - postfix)) - elif isinstance(entry, LocBaseAddressEntry): - base_ip = entry.base_address - self._emitline(" %08x %016x (base address)" % (entry.entry_offset, entry.base_address)) - - # Pyelftools doesn't store the terminating entry, - # but readelf emits its offset, so this should too. - last = loc_list[-1] - self._emitline(" %08x " % (last.entry_offset + last.entry_length)) - - def _dump_debug_loclists_CU_header(self, cu: Container) -> None: - # Header slightly different from that of v5 rangelist in-section CU header dump - self._emitline('Table at Offset %s' % self._format_hex(cu.cu_offset, alternate=True)) - self._emitline(' Length: %s' % self._format_hex(cu.unit_length, alternate=True)) - self._emitline(' DWARF version: %d' % cu.version) - self._emitline(' Address size: %d' % cu.address_size) - self._emitline(' Segment size: %d' % cu.segment_selector_size) - self._emitline(' Offset entries: %d\n' % cu.offset_count) - if cu.offsets: - self._emitline(' Offsets starting at 0x%x:' % cu.offset_table_offset) - for i_offset in enumerate(cu.offsets): - self._emitline(' [%6d] 0x%x' % i_offset) - - def _dump_debug_ranges(self) -> None: - # TODO: GNU readelf format doesn't need entry_length? - di = self._dwarfinfo - range_lists_sec = di.range_lists() - if not range_lists_sec: # No ranges section - readelf outputs nothing - return - - if isinstance(range_lists_sec, RangeListsPair): - self._dump_debug_rangesection(di, range_lists_sec._ranges) - self._dump_debug_rangesection(di, range_lists_sec._rnglists) - else: - self._dump_debug_rangesection(di, range_lists_sec) - - def _dump_debug_rnglists_CU_header(self, cu: CompileUnit) -> None: - self._emitline(' Table at Offset: %s:' % self._format_hex(cu.cu_offset, alternate=True)) - self._emitline(' Length: %s' % self._format_hex(cu.unit_length, alternate=True)) - self._emitline(' DWARF version: %d' % cu.version) - self._emitline(' Address size: %d' % cu.address_size) - self._emitline(' Segment size: %d' % cu.segment_selector_size) - self._emitline(' Offset entries: %d\n' % cu.offset_count) - if cu.offsets: - self._emitline(' Offsets starting at 0x%x:' % cu.offset_table_offset) - for i_offset in enumerate(cu.offsets): - self._emitline(' [%6d] 0x%x' % i_offset) - - def _dump_debug_rangesection(self, di: DWARFInfo, range_lists_sec) -> None: - # Last amended to match readelf 2.41 - ver5 = range_lists_sec.version >= 5 - section_name = (di.debug_rnglists_sec if ver5 else di.debug_ranges_sec).name - addr_size = di.config.default_address_size # In bytes, 4 or 8 - addr_width = addr_size * 2 # In hex digits, 8 or 16 - line_template = " %%08x %%0%dx %%0%dx %%s" % (addr_width, addr_width) - base_template = " %%08x %%0%dx (base address)" % (addr_width) - base_template_indexed = " %%08x %%0%dx (base address index) %%0%dx (base address)" % (addr_width, addr_width) - - # In order to determine the base address of the range - # We need to know the corresponding CU. - cu_map = {die.attributes['DW_AT_ranges'].value : cu # Range list offset => CU - for cu in di.iter_CUs() - for die in cu.iter_DIEs() - if 'DW_AT_ranges' in die.attributes} - - rcus = list(range_lists_sec.iter_CUs()) if ver5 else None - rcu_index = 0 - next_rcu_offset = 0 - - range_lists = list(range_lists_sec.iter_range_lists()) - if not range_lists: - # Present but empty ranges section - readelf outputs a message - self._emitline("\nSection '%s' has no debugging data." % section_name) - return - - self._emitline('Contents of the %s section:\n\n\n' % section_name) - if not ver5: - self._emitline(' Offset Begin End') - - for range_list in range_lists: - # Emit CU headers before the curernt rangelist - if ver5 and range_list[0].entry_offset > next_rcu_offset: - while range_list[0].entry_offset > next_rcu_offset: - rcu = rcus[rcu_index] - self._dump_debug_rnglists_CU_header(rcu) - next_rcu_offset = rcu.offset_after_length + rcu.unit_length - rcu_index += 1 - self._emitline(' Offset Begin End') - self._dump_rangelist(range_list, cu_map, ver5, line_template, base_template, base_template_indexed, range_lists_sec) - - # TODO: trailing empty CUs, if any? - - def _dump_rangelist( - self, - range_list: list, - cu_map: dict, - ver5: bool, - line_template: str, - base_template: str, - base_template_indexed: str, - range_lists_sec, - ) -> None: - # Weird discrepancy in binutils: for DWARFv5 it outputs entry offset, - # for DWARF<=4 list offset. - first = range_list[0] - base_ip = _get_cu_base(cu_map[first.entry_offset]) - raw_v5_rangelist = None - for entry in range_list: - if isinstance(entry, RangeEntry): - postfix = ' (start == end)' if entry.begin_offset == entry.end_offset else '' - self._emitline(line_template % ( - entry.entry_offset if ver5 else first.entry_offset, - (0 if entry.is_absolute else base_ip) + entry.begin_offset, - (0 if entry.is_absolute else base_ip) + entry.end_offset, - postfix)) - elif isinstance(entry,RangeBaseAddressEntry): - base_ip = entry.base_address - # V5 base entries with index are reported differently in readelf - need to go back to the raw V5 format - # Maybe other subtypes too, but no such cases in the test corpus - raw_v5_entry = None - if ver5: - if not raw_v5_rangelist: - raw_v5_rangelist = range_lists_sec.get_range_list_at_offset_ex(range_list[0].entry_offset) - raw_v5_entry = next(re for re in raw_v5_rangelist if re.entry_offset == entry.entry_offset) - if raw_v5_entry and raw_v5_entry.entry_type == 'DW_RLE_base_addressx': - self._emitline(base_template_indexed % ( - entry.entry_offset, - raw_v5_entry.index, - entry.base_address)) - else: - self._emitline(base_template % ( - entry.entry_offset if ver5 else first.entry_offset, - entry.base_address)) - else: - raise NotImplementedError("Unknown object in a range list") - last = range_list[-1] - self._emitline(' %08x ' % (last.entry_offset + last.entry_length if ver5 else first.entry_offset)) - - def _display_attributes(self, attr_sec, descriptor) -> None: - """ Display the attributes contained in the section. - """ - for s in attr_sec.iter_subsections(): - self._emitline("Attribute Section: %s" % s.header['vendor_name']) - for ss in s.iter_subsubsections(): - h_val = "" if ss.header.extra is None else " ".join("%d" % x for x in ss.header.extra) - self._emitline(descriptor(ss.header.tag, h_val, None)) - - for attr in ss.iter_attributes(): - self._emit(' ') - self._emitline(descriptor(attr.tag, attr.value, attr.extra)) - - def _display_arch_specific_arm(self) -> None: - """ Display the ARM architecture-specific info contained in the file. - """ - attr_sec = self.elffile.get_section_by_name('.ARM.attributes') - if attr_sec: - self._display_attributes(attr_sec, describe_attr_tag_arm) - - def _display_arch_specific_riscv(self) -> None: - """ Display the RISC-V architecture-specific info contained in the file. - """ - attr_sec = self.elffile.get_section_by_name('.riscv.attributes') - if attr_sec: - self._display_attributes(attr_sec, describe_attr_tag_riscv) - - def _emit(self, s: str = '') -> None: - """ Emit an object to output - """ - self.output.write(str(s)) - - def _emitline(self, s: str = '') -> None: - """ Emit an object to output, followed by a newline - """ - self.output.write(str(s).rstrip() + '\n') - - -SCRIPT_DESCRIPTION = 'Display information about the contents of ELF format files' -VERSION_STRING = '%%(prog)s: based on pyelftools %s' % __version__ - - -def main(stream: IO[str] | None = None) -> None: - # parse the command-line arguments and invoke ReadElf - argparser = argparse.ArgumentParser( - usage='usage: %(prog)s [options] ', - description=SCRIPT_DESCRIPTION, - add_help=False, # -h is a real option of readelf - prog='readelf.py') - argparser.add_argument('file', - nargs='?', default=None, - help='ELF file to parse') - argparser.add_argument('-v', '--version', - action='version', version=VERSION_STRING) - argparser.add_argument('-d', '--dynamic', - action='store_true', dest='show_dynamic_tags', - help='Display the dynamic section') - argparser.add_argument('-H', '--help', - action='store_true', dest='help', - help='Display this information') - argparser.add_argument('-h', '--file-header', - action='store_true', dest='show_file_header', - help='Display the ELF file header') - argparser.add_argument('-l', '--program-headers', '--segments', - action='store_true', dest='show_program_header', - help='Display the program headers') - argparser.add_argument('-S', '--section-headers', '--sections', - action='store_true', dest='show_section_header', - help="Display the sections' headers") - argparser.add_argument('-e', '--headers', - action='store_true', dest='show_all_headers', - help='Equivalent to: -h -l -S') - argparser.add_argument('-s', '--symbols', '--syms', - action='store_true', dest='show_symbols', - help='Display the symbol table') - argparser.add_argument('-n', '--notes', - action='store_true', dest='show_notes', - help='Display the core notes (if present)') - argparser.add_argument('-r', '--relocs', - action='store_true', dest='show_relocs', - help='Display the relocations (if present)') - argparser.add_argument('-au', '--arm-unwind', - action='store_true', dest='show_arm_unwind', - help='Display the armeabi unwind information (if present)') - argparser.add_argument('-x', '--hex-dump', - action='store', dest='show_hex_dump', metavar='', - help='Dump the contents of section as bytes') - argparser.add_argument('-p', '--string-dump', - action='store', dest='show_string_dump', metavar='', - help='Dump the contents of section as strings') - argparser.add_argument('-V', '--version-info', - action='store_true', dest='show_version_info', - help='Display the version sections (if present)') - argparser.add_argument('-A', '--arch-specific', - action='store_true', dest='show_arch_specific', - help='Display the architecture-specific information (if present)') - argparser.add_argument('--debug-dump', - action='store', dest='debug_dump_what', metavar='', - help=( - 'Display the contents of DWARF debug sections. can ' + - 'one of {info,decodedline,frames,frames-interp,aranges,pubtypes,pubnames,loc,Ranges}')) - argparser.add_argument('--traceback', - action='store_true', dest='show_traceback', - help='Dump the Python traceback on ELFError' - ' exceptions from elftools') - - args = argparser.parse_args() - - if args.help or not args.file: - argparser.print_help() - sys.exit(0) - - if args.show_all_headers: - do_file_header = do_section_header = do_program_header = True - else: - do_file_header = args.show_file_header - do_section_header = args.show_section_header - do_program_header = args.show_program_header - - output = stream or sys.stdout - - with open(args.file, 'rb') as file: - try: - readelf = ReadElf(file, output) - if do_file_header: - readelf.display_file_header() - if do_section_header: - readelf.display_section_headers( - show_heading=not do_file_header) - if do_program_header: - readelf.display_program_headers( - show_heading=not do_file_header) - if args.show_dynamic_tags: - readelf.display_dynamic_tags() - if args.show_symbols: - readelf.display_symbol_tables() - if args.show_notes: - readelf.display_notes() - if args.show_relocs: - readelf.display_relocations() - if args.show_arm_unwind: - readelf.display_arm_unwind() - if args.show_version_info: - readelf.display_version_info() - if args.show_arch_specific: - readelf.display_arch_specific() - if args.show_hex_dump: - readelf.display_hex_dump(args.show_hex_dump) - if args.show_string_dump: - readelf.display_string_dump(args.show_string_dump) - if args.debug_dump_what: - readelf.display_debug_dump(args.debug_dump_what) - output.flush() - except ELFError as ex: - sys.stdout.flush() - sys.stderr.write('ELF error: %s\n' % ex) - if args.show_traceback: - traceback.print_exc() - sys.exit(1) - except BrokenPipeError: - # Python flushes standard streams on exit; redirect remaining output - # to devnull to avoid another BrokenPipeError at shutdown - devnull = os.open(os.devnull, os.O_WRONLY) - os.dup2(devnull, output.fileno()) - sys.exit(1) - - -def profile_main() -> None: - # Run 'main' redirecting its output to readelfout.txt - # Saves profiling information in readelf.profile - PROFFILE = 'readelf.profile' - import cProfile - cProfile.run('main(open("readelfout.txt", "w"))', PROFFILE) - - # Dig in some profiling stats - import pstats - p = pstats.Stats(PROFFILE) - p.sort_stats('cumulative').print_stats(25) - - -#------------------------------------------------------------------------------- -if __name__ == '__main__': - main() - #profile_main() diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/INSTALLER b/.tools/python-revlibs/capstone-5.0.9.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/.tools/python-revlibs/capstone-5.0.9.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/LICENSE.TXT b/.tools/python-revlibs/capstone-5.0.9.dist-info/LICENSE.TXT deleted file mode 100644 index 0dabdc7..0000000 --- a/.tools/python-revlibs/capstone-5.0.9.dist-info/LICENSE.TXT +++ /dev/null @@ -1,31 +0,0 @@ -This is the software license for Capstone disassembly framework. -Capstone has been designed & implemented by Nguyen Anh Quynh - -See http://www.capstone-engine.org for further information. - -Copyright (c) 2013, COSEINC. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the developer(s) nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/METADATA b/.tools/python-revlibs/capstone-5.0.9.dist-info/METADATA deleted file mode 100644 index be51c87..0000000 --- a/.tools/python-revlibs/capstone-5.0.9.dist-info/METADATA +++ /dev/null @@ -1,80 +0,0 @@ -Metadata-Version: 2.1 -Name: capstone -Version: 5.0.9 -Summary: Capstone disassembly engine -Home-page: https://www.capstone-engine.org -Author: Nguyen Anh Quynh -Author-email: aquynh@gmail.com -Classifier: License :: OSI Approved :: BSD License -Classifier: Programming Language :: Python :: 3 -Provides: capstone -Requires-Python: >=3.8 -Description-Content-Type: text/markdown -License-File: LICENSE.TXT -Requires-Dist: importlib-resources ; python_version < "3.9" - -To install Capstone, you should run `pip install capstone`. - -If you would like to build Capstone with just the source distribution, without -pip, just run `python setup.py install` in the folder with setup.py in it. - -In order to use this source distribution, you will need an environment that can -compile C code. On Linux, this is usually easy, but on Windows, this involves -installing Visual Studio and using the "Developer Command Prompt" to perform the -installation. See BUILDING.txt for more information. - -By default, attempting to install the python bindings will trigger a build of -the capstone native core. If this is undesirable for whatever reason, for -instance, you already have a globally installed copy of libcapstone, you may -inhibit the build by setting the environment variable LIBCAPSTONE_PATH. The -exact value is not checked, just setting it will inhibit the build. During -execution, this variable may be set to the path of a directory containing a -specific version of libcapstone you would like to use. - -If you don't want to build your own copy of Capstone, you can use a precompiled -binary distribution from PyPI. Saying `pip install capstone` should -automatically obtain an appropriate copy for your system. If it does not, please -open an issue at https://github.com/aquynh/capstone and tag @rhelmot - she -will fix this, probably! - --------------------------------------------------------------------------------- - -Capstone is a disassembly framework with the target of becoming the ultimate -disasm engine for binary analysis and reversing in the security community. - -Created by Nguyen Anh Quynh, then developed and maintained by a small community, -Capstone offers some unparalleled features: - -- Support multiple hardware architectures: ARM, ARM64 (ARMv8), Mips, PPC, Sparc, - SystemZ, XCore and X86 (including X86_64). - -- Having clean/simple/lightweight/intuitive architecture-neutral API. - -- Provide details on disassembled instruction (called “decomposer” by others). - -- Provide semantics of the disassembled instruction, such as list of implicit - registers read & written. - -- Implemented in pure C language, with lightweight wrappers for C++, C#, Go, - Java, NodeJS, Ocaml, Python, Ruby & Vala ready (available in main code, - or provided externally by the community). - -- Native support for all popular platforms: Windows, Mac OSX, iOS, Android, - Linux, *BSD, Solaris, etc. - -- Thread-safe by design. - -- Special support for embedding into firmware or OS kernel. - -- High performance & suitable for malware analysis (capable of handling various - X86 malware tricks). - -- Distributed under the open source BSD license. - -Further information is available at http://www.capstone-engine.org - - -[License] - -This project is released under the BSD license. If you redistribute the binary -or source code of Capstone, please attach file LICENSE.TXT with your products. diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/RECORD b/.tools/python-revlibs/capstone-5.0.9.dist-info/RECORD deleted file mode 100644 index feb1e97..0000000 --- a/.tools/python-revlibs/capstone-5.0.9.dist-info/RECORD +++ /dev/null @@ -1,102 +0,0 @@ -capstone-5.0.9.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -capstone-5.0.9.dist-info/LICENSE.TXT,sha256=QEvQywE3_7eXJY-ET1PlJz-bbVeBoaNZoogEEfSaTzA,1718 -capstone-5.0.9.dist-info/METADATA,sha256=vkpRsIPmF103CrLQz6waMtCt4d_p3XUlFV81OomtMzI,3418 -capstone-5.0.9.dist-info/RECORD,, -capstone-5.0.9.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -capstone-5.0.9.dist-info/WHEEL,sha256=lU0uvdqIjA6HRzTpjZ1H-DIfOSkkkGat2Qa74HTLNDk,97 -capstone-5.0.9.dist-info/top_level.txt,sha256=VsH5bnGy4UGuMu7iU_kNehnLLZvlbZQKdq9bkGFxAKI,9 -capstone/__init__.py,sha256=lFcdExQ1XiYa_w3fyUmF_odhIy3f9odBgf0h76n6tH8,43853 -capstone/__pycache__/__init__.cpython-310.pyc,, -capstone/__pycache__/arm.cpython-310.pyc,, -capstone/__pycache__/arm64.cpython-310.pyc,, -capstone/__pycache__/arm64_const.cpython-310.pyc,, -capstone/__pycache__/arm_const.cpython-310.pyc,, -capstone/__pycache__/bpf.cpython-310.pyc,, -capstone/__pycache__/bpf_const.cpython-310.pyc,, -capstone/__pycache__/evm.cpython-310.pyc,, -capstone/__pycache__/evm_const.cpython-310.pyc,, -capstone/__pycache__/m680x.cpython-310.pyc,, -capstone/__pycache__/m680x_const.cpython-310.pyc,, -capstone/__pycache__/m68k.cpython-310.pyc,, -capstone/__pycache__/m68k_const.cpython-310.pyc,, -capstone/__pycache__/mips.cpython-310.pyc,, -capstone/__pycache__/mips_const.cpython-310.pyc,, -capstone/__pycache__/mos65xx.cpython-310.pyc,, -capstone/__pycache__/mos65xx_const.cpython-310.pyc,, -capstone/__pycache__/ppc.cpython-310.pyc,, -capstone/__pycache__/ppc_const.cpython-310.pyc,, -capstone/__pycache__/riscv.cpython-310.pyc,, -capstone/__pycache__/riscv_const.cpython-310.pyc,, -capstone/__pycache__/sh.cpython-310.pyc,, -capstone/__pycache__/sh_const.cpython-310.pyc,, -capstone/__pycache__/sparc.cpython-310.pyc,, -capstone/__pycache__/sparc_const.cpython-310.pyc,, -capstone/__pycache__/systemz.cpython-310.pyc,, -capstone/__pycache__/sysz_const.cpython-310.pyc,, -capstone/__pycache__/tms320c64x.cpython-310.pyc,, -capstone/__pycache__/tms320c64x_const.cpython-310.pyc,, -capstone/__pycache__/tricore.cpython-310.pyc,, -capstone/__pycache__/tricore_const.cpython-310.pyc,, -capstone/__pycache__/wasm.cpython-310.pyc,, -capstone/__pycache__/wasm_const.cpython-310.pyc,, -capstone/__pycache__/x86.cpython-310.pyc,, -capstone/__pycache__/x86_const.cpython-310.pyc,, -capstone/__pycache__/xcore.cpython-310.pyc,, -capstone/__pycache__/xcore_const.cpython-310.pyc,, -capstone/arm.py,sha256=AOp0QqFJbYSspGm_o1QikOr-IomLW-DezpKUhluVCLo,2154 -capstone/arm64.py,sha256=g0l56IcxX66aRHaYUC9oZsJGy5m2XIS4tv3vgIcYEoQ,2428 -capstone/arm64_const.py,sha256=81jUYbH0Wo2R2OMIyoLls1xdLlwTXY7QfYzchkVqVBg,81768 -capstone/arm_const.py,sha256=GwDXtIvktytzAnJIbU_SBXy4AZ5n8b0UW8q7G5iNHGc,17295 -capstone/bpf.py,sha256=-HlZX7xBO_p0YAtMuqeizdcgCy-S5xitMfs2hE58D50,1438 -capstone/bpf_const.py,sha256=BwcX4opo7n4eiynLmimfXkYr6B2a1sg9zM5fdx_iLn4,2160 -capstone/evm.py,sha256=KfNdOVOy7rl24Crzzb86eAZtTVp1BYjaBnLki8WqA4U,383 -capstone/evm_const.py,sha256=s6YEmMCsRVCY2IRXSCmHXeuDpBdqBSSAJJqdPpP0K20,3292 -capstone/include/capstone/arm.h,sha256=VbUXZ_ipEY63OjTtIx62_-Os5d8zJuQv7kMHePVijTA,20872 -capstone/include/capstone/arm64.h,sha256=M1zQMFki6FJ3fNyqDjhHnQfRMz1GzIzeD-kMA853bJs,86980 -capstone/include/capstone/bpf.h,sha256=hkAUVZUUhIuRSyYxDJEur0KhxUqzDLn4nW7fY5Onnu8,4308 -capstone/include/capstone/capstone.h,sha256=ZbtfCnlHzPkdI6TbRYTtMQZjr5Un_Ey9F5sfqZ0h-f4,34908 -capstone/include/capstone/evm.h,sha256=He-_OSZlHUga4P2ZQvOBHOrGp53yj71dWOtrBCPYs00,4574 -capstone/include/capstone/m680x.h,sha256=bSDLVLHIgqqHTqNk6YyIBIT97mXgRtChcqMbgkAOsUE,12857 -capstone/include/capstone/m68k.h,sha256=kfI-AaOt3Lm4sY3l0v0pRhNPrHgsx4MxRBh7JZ8UWpg,14468 -capstone/include/capstone/mips.h,sha256=j4BtP4-G-Eo2psLlhsEBkchJSo5ssDbbXtAgxa5AIVg,18000 -capstone/include/capstone/mos65xx.h,sha256=fvEkBOA3JaHYB_Rr-sBt4MRZgbNTUyq2fvtOB-TkbOk,5991 -capstone/include/capstone/platform.h,sha256=BsytZ3jupqlJMPEOIOJK5ChwFKTch8xmufExmDcdg4w,4132 -capstone/include/capstone/ppc.h,sha256=0dW_kL8DzPR5Jiz5DQA8zScflBo2ng5VVgdq_DpVyro,40378 -capstone/include/capstone/riscv.h,sha256=bREvSGVTiWYHdGMVNAtp25kSQtgejDOzDwLgwzmt4lo,13799 -capstone/include/capstone/sh.h,sha256=o76WyTorkWgv8LzTugoTA6bzD86KqRBdUqhNBGe2CqQ,8238 -capstone/include/capstone/sparc.h,sha256=WfmIyYYwqcP3AoKhCVhh9Iv8_Vj20QTyTzeKF-r3Z8o,11817 -capstone/include/capstone/systemz.h,sha256=MtpsY801i6cAKBSyoPd9D9YXNH6tLDDN3I6fgHV0C4c,47232 -capstone/include/capstone/tms320c64x.h,sha256=4w-YWQowHWXkE5UaZj6mzRX3-ZklQ71S3MbxIF7goGE,8621 -capstone/include/capstone/tricore.h,sha256=wLzGiWRPAGbLrpXTtuk3BUUzaqVBXDKZkPJz8B5zbCM,13257 -capstone/include/capstone/wasm.h,sha256=8oYa3HaSc03fnpVfbrpcAOpUYusw-MLaIjm0cY_r_1M,6441 -capstone/include/capstone/x86.h,sha256=4VBCEQGkRnx_H_ZBjxapf3UE3yevby2GxEsTuPP3uKA,45041 -capstone/include/capstone/xcore.h,sha256=X4Gt8HYcV89hMG5PaD8nztzJ9Q16MIo3TDidFuSQwpc,5154 -capstone/lib/capstone.dll,sha256=dpWOGDgAI6aP0XFPouAcWUzG2xlVoHrWk3tm5m3F1sM,7576576 -capstone/m680x.py,sha256=JNVrj26cEtc_gw8m3jbQJGHk1zowkZQ-bJCIQYHv5B0,2065 -capstone/m680x_const.py,sha256=qM7r5uYhPag0QG56VsH4CPrVVMXthamGsO-GR9s3GNo,8885 -capstone/m68k.py,sha256=BWe_JuMqJ0sIbSlv3MB43L2ixmKA-UHlmGsw7sxke8g,2438 -capstone/m68k_const.py,sha256=ed4OpCl3rSh1_XOjTdtV_CrOWNrEWw7or_CuE4x6j6o,10489 -capstone/mips.py,sha256=wjtuXV3yvm9yjdotoqj4BdTRUA44Ouv1VdofqWUGOeg,1001 -capstone/mips_const.py,sha256=gKMlxZqKiJGNHrxVJo4HRhhB3d5Q0DSlRdMc30RmgyQ,18592 -capstone/mos65xx.py,sha256=-bUlVp_K5HaKxLIjCkZGilcek0cX8U1SkQ4kPQsnnpo,998 -capstone/mos65xx_const.py,sha256=InYuI97G0BH3UGjKyZX0wF9s9ck8IHUC7rEdDNShNvM,3393 -capstone/ppc.py,sha256=HuIRYdIZAnRDeWJNhwSBOCcqmca9mGIyVrqgZQOL8D0,1384 -capstone/ppc_const.py,sha256=QoTbdLfbOg4-2gQ5cAlsBH34HZsKgcE7O1twymI9Sws,45023 -capstone/riscv.py,sha256=xAvu572Z0_HMMpIDAg3vBhQKeG0X4uyWP-77EuDI6HI,1104 -capstone/riscv_const.py,sha256=asgSQ0BCB9dLMZDDcYC2NToAEZHH310E_SX4m2JKvdE,10953 -capstone/sh.py,sha256=1QISB1qRjpS0Hx5n-DijtwvETRmUHzO21QLlNZyWdZI,1478 -capstone/sh_const.py,sha256=oZoYN4kqDqqbw-XNNjhiVHHXBaNbCKommUrRCJKBJb4,7154 -capstone/sparc.py,sha256=OJhn0ZSnvvd5RmpSg5U8srMNLoQ2joARJnfPqgM0CXw,1127 -capstone/sparc_const.py,sha256=rvc4A-_pouDhCf4F4LeR8z5i1BxU7TLNJ3ODeWDR3a4,9738 -capstone/systemz.py,sha256=nnVhH7iTDvZlsEqA4Uygc1lT9p0vD9tgj5bqFyzvfy0,1115 -capstone/sysz_const.py,sha256=mK12JAtI7_Bg-W_AmGkzyQTL39ZUhm60nn7lh52ykI4,56291 -capstone/tms320c64x.py,sha256=WXv2YdJeKDwAfJ7nbe-0IvQeQnmq5bvYtXNkABCc9rM,1672 -capstone/tms320c64x_const.py,sha256=ZDrrWeluLrEPbKTp0n25wA2DGVz0Qt6kU0GKwt8MuUs,7257 -capstone/tricore.py,sha256=ZxbtRXna3sXEdqCnBMNUIYYM2q8geWx9nF6_zrXE48s,1123 -capstone/tricore_const.py,sha256=ldZAz8jWmPFi7caGRsSCnNJSie5H0oaYFbM7eDnTK64,12010 -capstone/wasm.py,sha256=j7Gd-1nNcXWrDlW4t8LTfhUMI37WBghivm7D6YvyHW0,1627 -capstone/wasm_const.py,sha256=4D4jGJIVNFYHAFXzmlPtMgX-6yTn12iisZOty-Js_8U,5132 -capstone/x86.py,sha256=CMuwoC_xUrzx-9fE-IULOt44wlufCmqbkApV7nXofGc,2816 -capstone/x86_const.py,sha256=g89FUNklb1-bjiGLm3MuRtg-9gK0Y6Adbut3jeso4EA,45756 -capstone/xcore.py,sha256=Z6O6tex3mYv4jzILYb5xEDGEVL4iUv8qAvQspKq1aow,1082 -capstone/xcore_const.py,sha256=NDZ3EO4FAWIfuLMliQyudA_zgHXT72azbem4tNzsIn8,3424 diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/REQUESTED b/.tools/python-revlibs/capstone-5.0.9.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/WHEEL b/.tools/python-revlibs/capstone-5.0.9.dist-info/WHEEL deleted file mode 100644 index add1963..0000000 --- a/.tools/python-revlibs/capstone-5.0.9.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (75.3.4) -Root-Is-Purelib: true -Tag: py3-none-win_amd64 - diff --git a/.tools/python-revlibs/capstone-5.0.9.dist-info/top_level.txt b/.tools/python-revlibs/capstone-5.0.9.dist-info/top_level.txt deleted file mode 100644 index e11ec11..0000000 --- a/.tools/python-revlibs/capstone-5.0.9.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -capstone diff --git a/.tools/python-revlibs/capstone/__init__.py b/.tools/python-revlibs/capstone/__init__.py deleted file mode 100644 index 82164c7..0000000 --- a/.tools/python-revlibs/capstone/__init__.py +++ /dev/null @@ -1,1260 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh -import os, sys - -_python2 = sys.version_info[0] < 3 -if _python2: - range = xrange - -__all__ = [ - 'Cs', - 'CsInsn', - - 'cs_disasm_quick', - 'cs_disasm_lite', - 'cs_version', - 'cs_support', - 'version_bind', - 'debug', - - 'CS_API_MAJOR', - 'CS_API_MINOR', - - 'CS_VERSION_MAJOR', - 'CS_VERSION_MINOR', - 'CS_VERSION_EXTRA', - - 'CS_ARCH_ARM', - 'CS_ARCH_ARM64', - 'CS_ARCH_MIPS', - 'CS_ARCH_X86', - 'CS_ARCH_PPC', - 'CS_ARCH_SPARC', - 'CS_ARCH_SYSZ', - 'CS_ARCH_XCORE', - 'CS_ARCH_M68K', - 'CS_ARCH_TMS320C64X', - 'CS_ARCH_M680X', - 'CS_ARCH_EVM', - 'CS_ARCH_MOS65XX', - 'CS_ARCH_WASM', - 'CS_ARCH_BPF', - 'CS_ARCH_RISCV', - 'CS_ARCH_SH', - 'CS_ARCH_TRICORE', - 'CS_ARCH_ALL', - - 'CS_MODE_LITTLE_ENDIAN', - 'CS_MODE_BIG_ENDIAN', - 'CS_MODE_16', - 'CS_MODE_32', - 'CS_MODE_64', - 'CS_MODE_ARM', - 'CS_MODE_THUMB', - 'CS_MODE_MCLASS', - 'CS_MODE_MICRO', - 'CS_MODE_MIPS3', - 'CS_MODE_MIPS32R6', - 'CS_MODE_MIPS2', - 'CS_MODE_V8', - 'CS_MODE_V9', - 'CS_MODE_QPX', - 'CS_MODE_SPE', - 'CS_MODE_BOOKE', - 'CS_MODE_PS', - 'CS_MODE_M68K_000', - 'CS_MODE_M68K_010', - 'CS_MODE_M68K_020', - 'CS_MODE_M68K_030', - 'CS_MODE_M68K_040', - 'CS_MODE_M68K_060', - 'CS_MODE_MIPS32', - 'CS_MODE_MIPS64', - 'CS_MODE_M680X_6301', - 'CS_MODE_M680X_6309', - 'CS_MODE_M680X_6800', - 'CS_MODE_M680X_6801', - 'CS_MODE_M680X_6805', - 'CS_MODE_M680X_6808', - 'CS_MODE_M680X_6809', - 'CS_MODE_M680X_6811', - 'CS_MODE_M680X_CPU12', - 'CS_MODE_M680X_HCS08', - 'CS_MODE_BPF_CLASSIC', - 'CS_MODE_BPF_EXTENDED', - 'CS_MODE_RISCV32', - 'CS_MODE_RISCV64', - 'CS_MODE_RISCVC', - 'CS_MODE_MOS65XX_6502', - 'CS_MODE_MOS65XX_65C02', - 'CS_MODE_MOS65XX_W65C02', - 'CS_MODE_MOS65XX_65816', - 'CS_MODE_MOS65XX_65816_LONG_M', - 'CS_MODE_MOS65XX_65816_LONG_X', - 'CS_MODE_MOS65XX_65816_LONG_MX', - 'CS_MODE_SH2', - 'CS_MODE_SH2A', - 'CS_MODE_SH3', - 'CS_MODE_SH4', - 'CS_MODE_SH4A', - 'CS_MODE_SHFPU', - 'CS_MODE_SHDSP', - 'CS_MODE_TRICORE_110', - 'CS_MODE_TRICORE_120', - 'CS_MODE_TRICORE_130', - 'CS_MODE_TRICORE_131', - 'CS_MODE_TRICORE_160', - 'CS_MODE_TRICORE_161', - 'CS_MODE_TRICORE_162', - - 'CS_OPT_SYNTAX', - 'CS_OPT_SYNTAX_DEFAULT', - 'CS_OPT_SYNTAX_INTEL', - 'CS_OPT_SYNTAX_ATT', - 'CS_OPT_SYNTAX_NOREGNAME', - 'CS_OPT_SYNTAX_MASM', - 'CS_OPT_SYNTAX_MOTOROLA', - - 'CS_OPT_DETAIL', - 'CS_OPT_MODE', - 'CS_OPT_ON', - 'CS_OPT_OFF', - - 'CS_OPT_INVALID', - 'CS_OPT_MEM', - 'CS_OPT_SKIPDATA', - 'CS_OPT_SKIPDATA_SETUP', - 'CS_OPT_MNEMONIC', - 'CS_OPT_UNSIGNED', - 'CS_OPT_NO_BRANCH_OFFSET', - - 'CS_ERR_OK', - 'CS_ERR_MEM', - 'CS_ERR_ARCH', - 'CS_ERR_HANDLE', - 'CS_ERR_CSH', - 'CS_ERR_MODE', - 'CS_ERR_OPTION', - 'CS_ERR_DETAIL', - 'CS_ERR_VERSION', - 'CS_ERR_MEMSETUP', - 'CS_ERR_DIET', - 'CS_ERR_SKIPDATA', - 'CS_ERR_X86_ATT', - 'CS_ERR_X86_INTEL', - 'CS_ERR_X86_MASM', - - 'CS_SUPPORT_DIET', - 'CS_SUPPORT_X86_REDUCE', - 'CS_SKIPDATA_CALLBACK', - - 'CS_OP_INVALID', - 'CS_OP_REG', - 'CS_OP_IMM', - 'CS_OP_MEM', - 'CS_OP_FP', - - 'CS_GRP_INVALID', - 'CS_GRP_JUMP', - 'CS_GRP_CALL', - 'CS_GRP_RET', - 'CS_GRP_INT', - 'CS_GRP_IRET', - 'CS_GRP_PRIVILEGE', - 'CS_GRP_BRANCH_RELATIVE', - - 'CS_AC_INVALID', - 'CS_AC_READ', - 'CS_AC_WRITE', - - 'CsError', - - '__version__', -] - -# Capstone C interface - -# API version -CS_API_MAJOR = 5 -CS_API_MINOR = 0 - -# Package version -CS_VERSION_MAJOR = CS_API_MAJOR -CS_VERSION_MINOR = CS_API_MINOR -CS_VERSION_EXTRA = 7 - -__version__ = "%u.%u.%u" %(CS_VERSION_MAJOR, CS_VERSION_MINOR, CS_VERSION_EXTRA) - -# architectures -CS_ARCH_ARM = 0 -CS_ARCH_ARM64 = 1 -CS_ARCH_MIPS = 2 -CS_ARCH_X86 = 3 -CS_ARCH_PPC = 4 -CS_ARCH_SPARC = 5 -CS_ARCH_SYSZ = 6 -CS_ARCH_XCORE = 7 -CS_ARCH_M68K = 8 -CS_ARCH_TMS320C64X = 9 -CS_ARCH_M680X = 10 -CS_ARCH_EVM = 11 -CS_ARCH_MOS65XX = 12 -CS_ARCH_WASM = 13 -CS_ARCH_BPF = 14 -CS_ARCH_RISCV = 15 -CS_ARCH_SH = 16 -CS_ARCH_TRICORE = 17 -CS_ARCH_MAX = 18 -CS_ARCH_ALL = 0xFFFF - -# disasm mode -CS_MODE_LITTLE_ENDIAN = 0 # little-endian mode (default mode) -CS_MODE_ARM = 0 # ARM mode -CS_MODE_16 = (1 << 1) # 16-bit mode (for X86) -CS_MODE_32 = (1 << 2) # 32-bit mode (for X86) -CS_MODE_64 = (1 << 3) # 64-bit mode (for X86, PPC) -CS_MODE_THUMB = (1 << 4) # ARM's Thumb mode, including Thumb-2 -CS_MODE_MCLASS = (1 << 5) # ARM's Cortex-M series -CS_MODE_V8 = (1 << 6) # ARMv8 A32 encodings for ARM -CS_MODE_MICRO = (1 << 4) # MicroMips mode (MIPS architecture) -CS_MODE_MIPS3 = (1 << 5) # Mips III ISA -CS_MODE_MIPS32R6 = (1 << 6) # Mips32r6 ISA -CS_MODE_MIPS2 = (1 << 7) # Mips II ISA -CS_MODE_V9 = (1 << 4) # Sparc V9 mode (for Sparc) -CS_MODE_QPX = (1 << 4) # Quad Processing eXtensions mode (PPC) -CS_MODE_SPE = (1 << 5) # Signal Processing Engine mode (PPC) -CS_MODE_BOOKE = (1 << 6) # Book-E mode (PPC) -CS_MODE_PS = (1 << 7) # Paired-singles mode (PPC) -CS_MODE_M68K_000 = (1 << 1) # M68K 68000 mode -CS_MODE_M68K_010 = (1 << 2) # M68K 68010 mode -CS_MODE_M68K_020 = (1 << 3) # M68K 68020 mode -CS_MODE_M68K_030 = (1 << 4) # M68K 68030 mode -CS_MODE_M68K_040 = (1 << 5) # M68K 68040 mode -CS_MODE_M68K_060 = (1 << 6) # M68K 68060 mode -CS_MODE_BIG_ENDIAN = (1 << 31) # big-endian mode -CS_MODE_MIPS32 = CS_MODE_32 # Mips32 ISA -CS_MODE_MIPS64 = CS_MODE_64 # Mips64 ISA -CS_MODE_M680X_6301 = (1 << 1) # M680X HD6301/3 mode -CS_MODE_M680X_6309 = (1 << 2) # M680X HD6309 mode -CS_MODE_M680X_6800 = (1 << 3) # M680X M6800/2 mode -CS_MODE_M680X_6801 = (1 << 4) # M680X M6801/3 mode -CS_MODE_M680X_6805 = (1 << 5) # M680X M6805 mode -CS_MODE_M680X_6808 = (1 << 6) # M680X M68HC08 mode -CS_MODE_M680X_6809 = (1 << 7) # M680X M6809 mode -CS_MODE_M680X_6811 = (1 << 8) # M680X M68HC11 mode -CS_MODE_M680X_CPU12 = (1 << 9) # M680X CPU12 mode -CS_MODE_M680X_HCS08 = (1 << 10) # M680X HCS08 mode -CS_MODE_BPF_CLASSIC = 0 # Classic BPF mode (default) -CS_MODE_BPF_EXTENDED = (1 << 0) # Extended BPF mode -CS_MODE_RISCV32 = (1 << 0) # RISCV32 mode -CS_MODE_RISCV64 = (1 << 1) # RISCV64 mode -CS_MODE_RISCVC = (1 << 2) # RISCV compressed mode -CS_MODE_MOS65XX_6502 = (1 << 1) # MOS65XXX MOS 6502 -CS_MODE_MOS65XX_65C02 = (1 << 2) # MOS65XXX WDC 65c02 -CS_MODE_MOS65XX_W65C02 = (1 << 3) # MOS65XXX WDC W65c02 -CS_MODE_MOS65XX_65816 = (1 << 4) # MOS65XXX WDC 65816, 8-bit m/x -CS_MODE_MOS65XX_65816_LONG_M = (1 << 5) # MOS65XXX WDC 65816, 16-bit m, 8-bit x -CS_MODE_MOS65XX_65816_LONG_X = (1 << 6) # MOS65XXX WDC 65816, 8-bit m, 16-bit x -CS_MODE_MOS65XX_65816_LONG_MX = CS_MODE_MOS65XX_65816_LONG_M | CS_MODE_MOS65XX_65816_LONG_X -CS_MODE_SH2 = 1 << 1 # SH2 -CS_MODE_SH2A = 1 << 2 # SH2A -CS_MODE_SH3 = 1 << 3 # SH3 -CS_MODE_SH4 = 1 << 4 # SH4 -CS_MODE_SH4A = 1 << 5 # SH4A -CS_MODE_SHFPU = 1 << 6 # w/ FPU -CS_MODE_SHDSP = 1 << 7 # w/ DSP -CS_MODE_TRICORE_110 = 1 << 1 # Tricore 1.1 -CS_MODE_TRICORE_120 = 1 << 2 # Tricore 1.2 -CS_MODE_TRICORE_130 = 1 << 3 # Tricore 1.3 -CS_MODE_TRICORE_131 = 1 << 4 # Tricore 1.3.1 -CS_MODE_TRICORE_160 = 1 << 5 # Tricore 1.6 -CS_MODE_TRICORE_161 = 1 << 6 # Tricore 1.6.1 -CS_MODE_TRICORE_162 = 1 << 7 # Tricore 1.6.2 - -# Capstone option type -CS_OPT_INVALID = 0 # No option specified -CS_OPT_SYNTAX = 1 # Intel X86 asm syntax (CS_ARCH_X86 arch) -CS_OPT_DETAIL = 2 # Break down instruction structure into details -CS_OPT_MODE = 3 # Change engine's mode at run-time -CS_OPT_MEM = 4 # Change engine's mode at run-time -CS_OPT_SKIPDATA = 5 # Skip data when disassembling -CS_OPT_SKIPDATA_SETUP = 6 # Setup user-defined function for SKIPDATA option -CS_OPT_MNEMONIC = 7 # Customize instruction mnemonic -CS_OPT_UNSIGNED = 8 # Print immediate in unsigned form -CS_OPT_NO_BRANCH_OFFSET = 9 # ARM, prints branch immediates without offset. - -# Capstone option value -CS_OPT_OFF = 0 # Turn OFF an option - default option of CS_OPT_DETAIL -CS_OPT_ON = 3 # Turn ON an option (CS_OPT_DETAIL) - -# Common instruction operand types - to be consistent across all architectures. -CS_OP_INVALID = 0 # uninitialized/invalid operand. -CS_OP_REG = 1 # Register operand. -CS_OP_IMM = 2 # Immediate operand. -CS_OP_MEM = 3 # Memory operand. Can be ORed with another operand type. -CS_OP_FP = 4 # Floating-Point operand. - -# Common instruction groups - to be consistent across all architectures. -CS_GRP_INVALID = 0 # uninitialized/invalid group. -CS_GRP_JUMP = 1 # all jump instructions (conditional+direct+indirect jumps) -CS_GRP_CALL = 2 # all call instructions -CS_GRP_RET = 3 # all return instructions -CS_GRP_INT = 4 # all interrupt instructions (int+syscall) -CS_GRP_IRET = 5 # all interrupt return instructions -CS_GRP_PRIVILEGE = 6 # all privileged instructions -CS_GRP_BRANCH_RELATIVE = 7 # all relative branching instructions - -# Access types for instruction operands. -CS_AC_INVALID = 0 # Invalid/unitialized access type. -CS_AC_READ = (1 << 0) # Operand that is read from. -CS_AC_WRITE = (1 << 1) # Operand that is written to. - -# Capstone syntax value -CS_OPT_SYNTAX_DEFAULT = 0 # Default assembly syntax of all platforms (CS_OPT_SYNTAX) -CS_OPT_SYNTAX_INTEL = 1 # Intel X86 asm syntax - default syntax on X86 (CS_OPT_SYNTAX, CS_ARCH_X86) -CS_OPT_SYNTAX_ATT = 2 # ATT asm syntax (CS_OPT_SYNTAX, CS_ARCH_X86) -CS_OPT_SYNTAX_NOREGNAME = 3 # Asm syntax prints register name with only number - (CS_OPT_SYNTAX, CS_ARCH_PPC, CS_ARCH_ARM) -CS_OPT_SYNTAX_MASM = 4 # MASM syntax (CS_OPT_SYNTAX, CS_ARCH_X86) -CS_OPT_SYNTAX_MOTOROLA = 5 # MOS65XX use $ as hex prefix - -# Capstone error type -CS_ERR_OK = 0 # No error: everything was fine -CS_ERR_MEM = 1 # Out-Of-Memory error: cs_open(), cs_disasm() -CS_ERR_ARCH = 2 # Unsupported architecture: cs_open() -CS_ERR_HANDLE = 3 # Invalid handle: cs_op_count(), cs_op_index() -CS_ERR_CSH = 4 # Invalid csh argument: cs_close(), cs_errno(), cs_option() -CS_ERR_MODE = 5 # Invalid/unsupported mode: cs_open() -CS_ERR_OPTION = 6 # Invalid/unsupported option: cs_option() -CS_ERR_DETAIL = 7 # Invalid/unsupported option: cs_option() -CS_ERR_MEMSETUP = 8 -CS_ERR_VERSION = 9 # Unsupported version (bindings) -CS_ERR_DIET = 10 # Information irrelevant in diet engine -CS_ERR_SKIPDATA = 11 # Access irrelevant data for "data" instruction in SKIPDATA mode -CS_ERR_X86_ATT = 12 # X86 AT&T syntax is unsupported (opt-out at compile time) -CS_ERR_X86_INTEL = 13 # X86 Intel syntax is unsupported (opt-out at compile time) -CS_ERR_X86_MASM = 14 # X86 Intel syntax is unsupported (opt-out at compile time) - -# query id for cs_support() -CS_SUPPORT_DIET = CS_ARCH_ALL + 1 -CS_SUPPORT_X86_REDUCE = CS_ARCH_ALL+2 - -# Capstone reverse lookup -CS_AC = {v:k for k,v in locals().items() if k.startswith('CS_AC_')} -CS_ARCH = {v:k for k,v in locals().items() if k.startswith('CS_ARCH_')} -CS_ERR = {v:k for k,v in locals().items() if k.startswith('CS_ERR_')} -CS_GRP = {v:k for k,v in locals().items() if k.startswith('CS_GRP_')} -CS_MODE = {v:k for k,v in locals().items() if k.startswith('CS_MODE_')} -CS_OP = {v:k for k,v in locals().items() if k.startswith('CS_OP_')} -CS_OPT = {v:k for k,v in locals().items() if k.startswith('CS_OPT_')} - -import ctypes, ctypes.util -from os.path import split, join, dirname -import sysconfig -from pathlib import PurePath - -import inspect - -if sys.version_info >= (3, 9): - import importlib.resources as resources -else: - import importlib_resources as resources - -if not hasattr(sys.modules[__name__], '__file__'): - __file__ = inspect.getfile(inspect.currentframe()) - -mode = 0 -if sys.platform == 'darwin': - _lib = "libcapstone.dylib" -elif sys.platform in ('win32', 'cygwin'): - _lib = "capstone.dll" -else: - _lib = "libcapstone.so" - mode = getattr(os, 'RTLD_DEEPBIND', 0) - -_found = False - -def _load_lib(path): - lib_file = join(path, _lib) - if os.path.exists(lib_file): - return ctypes.CDLL(lib_file, mode=mode) - else: - # if we're on linux, try again with .so.5 extension - if lib_file.endswith('.so'): - if os.path.exists(lib_file + '.{}'.format(CS_VERSION_MAJOR)): - return ctypes.CDLL( - lib_file + '.{}'.format(CS_VERSION_MAJOR), - mode=mode - ) - return None - -_cs = None - -# Loading attempts, in order -# - user-provided environment variable -# - importlib.resources can get us the path to the local libraries -# - we can get the path to the local libraries by parsing our filename -# - global load -# - python's lib directory -# - last-gasp attempt at some hardcoded paths on darwin and linux - -_path_list = [os.getenv('LIBCAPSTONE_PATH', None), - str(resources.files(__name__) / "lib"), - join(split(__file__)[0], 'lib'), - '', - sysconfig.get_path('platlib'), - "/usr/local/lib/" if sys.platform == 'darwin' else '/usr/lib64'] - -for _path in _path_list: - if _path is None: continue - _cs = _load_lib(_path) - if _cs is not None: break -else: - raise ImportError("ERROR: fail to load the dynamic library.") - - -# low-level structure for C code - -def copy_ctypes(src): - """Returns a new ctypes object which is a bitwise copy of an existing one""" - dst = type(src)() - ctypes.memmove(ctypes.byref(dst), ctypes.byref(src), ctypes.sizeof(type(src))) - return dst - -def copy_ctypes_list(src): - return [copy_ctypes(n) for n in src] - -# Weird import placement because these modules are needed by the below code but need the above functions -from . import arm, arm64, m68k, mips, ppc, sparc, systemz, x86, xcore, tms320c64x, m680x, evm, mos65xx, wasm, bpf, riscv, sh, tricore - -class _cs_arch(ctypes.Union): - _fields_ = ( - ('arm64', arm64.CsArm64), - ('arm', arm.CsArm), - ('m68k', m68k.CsM68K), - ('mips', mips.CsMips), - ('x86', x86.CsX86), - ('ppc', ppc.CsPpc), - ('sparc', sparc.CsSparc), - ('sysz', systemz.CsSysz), - ('xcore', xcore.CsXcore), - ('tms320c64x', tms320c64x.CsTMS320C64x), - ('m680x', m680x.CsM680x), - ('evm', evm.CsEvm), - ('mos65xx', mos65xx.CsMOS65xx), - ('wasm', wasm.CsWasm), - ('bpf', bpf.CsBPF), - ('riscv', riscv.CsRISCV), - ('sh', sh.CsSH), - ('tricore', tricore.CsTriCore), - ) - -class _cs_detail(ctypes.Structure): - _fields_ = ( - ('regs_read', ctypes.c_uint16 * 20), - ('regs_read_count', ctypes.c_ubyte), - ('regs_write', ctypes.c_uint16 * 20), - ('regs_write_count', ctypes.c_ubyte), - ('groups', ctypes.c_ubyte * 8), - ('groups_count', ctypes.c_ubyte), - ('writeback', ctypes.c_bool), - ('arch', _cs_arch), - ) - -class _cs_insn(ctypes.Structure): - _fields_ = ( - ('id', ctypes.c_uint), - ('address', ctypes.c_uint64), - ('size', ctypes.c_uint16), - ('bytes', ctypes.c_ubyte * 24), - ('mnemonic', ctypes.c_char * 32), - ('op_str', ctypes.c_char * 160), - ('detail', ctypes.POINTER(_cs_detail)), - ) - -# callback for SKIPDATA option -CS_SKIPDATA_CALLBACK = ctypes.CFUNCTYPE(ctypes.c_size_t, ctypes.POINTER(ctypes.c_char), ctypes.c_size_t, ctypes.c_size_t, ctypes.c_void_p) - -class _cs_opt_skipdata(ctypes.Structure): - _fields_ = ( - ('mnemonic', ctypes.c_char_p), - ('callback', CS_SKIPDATA_CALLBACK), - ('user_data', ctypes.c_void_p), - ) - -class _cs_opt_mnem(ctypes.Structure): - _fields_ = ( - ('id', ctypes.c_uint), - ('mnemonic', ctypes.c_char_p), - ) - -# setup all the function prototype -def _setup_prototype(lib, fname, restype, *argtypes): - getattr(lib, fname).restype = restype - getattr(lib, fname).argtypes = argtypes - -_setup_prototype(_cs, "cs_open", ctypes.c_int, ctypes.c_uint, ctypes.c_uint, ctypes.POINTER(ctypes.c_size_t)) -_setup_prototype(_cs, "cs_disasm", ctypes.c_size_t, ctypes.c_size_t, ctypes.POINTER(ctypes.c_char), ctypes.c_size_t, \ - ctypes.c_uint64, ctypes.c_size_t, ctypes.POINTER(ctypes.POINTER(_cs_insn))) -_setup_prototype(_cs, "cs_free", None, ctypes.c_void_p, ctypes.c_size_t) -_setup_prototype(_cs, "cs_close", ctypes.c_int, ctypes.POINTER(ctypes.c_size_t)) -_setup_prototype(_cs, "cs_reg_name", ctypes.c_char_p, ctypes.c_size_t, ctypes.c_uint) -_setup_prototype(_cs, "cs_insn_name", ctypes.c_char_p, ctypes.c_size_t, ctypes.c_uint) -_setup_prototype(_cs, "cs_group_name", ctypes.c_char_p, ctypes.c_size_t, ctypes.c_uint) -_setup_prototype(_cs, "cs_op_count", ctypes.c_int, ctypes.c_size_t, ctypes.POINTER(_cs_insn), ctypes.c_uint) -_setup_prototype(_cs, "cs_op_index", ctypes.c_int, ctypes.c_size_t, ctypes.POINTER(_cs_insn), ctypes.c_uint, ctypes.c_uint) -_setup_prototype(_cs, "cs_errno", ctypes.c_int, ctypes.c_size_t) -_setup_prototype(_cs, "cs_option", ctypes.c_int, ctypes.c_size_t, ctypes.c_int, ctypes.c_void_p) -_setup_prototype(_cs, "cs_version", ctypes.c_int, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)) -_setup_prototype(_cs, "cs_support", ctypes.c_bool, ctypes.c_int) -_setup_prototype(_cs, "cs_strerror", ctypes.c_char_p, ctypes.c_int) -_setup_prototype(_cs, "cs_regs_access", ctypes.c_int, ctypes.c_size_t, ctypes.POINTER(_cs_insn), ctypes.POINTER(ctypes.c_uint16*64), ctypes.POINTER(ctypes.c_uint8), ctypes.POINTER(ctypes.c_uint16*64), ctypes.POINTER(ctypes.c_uint8)) - - -# access to error code via @errno of CsError -class CsError(Exception): - def __init__(self, errno): - self.errno = errno - - if _python2: - def __str__(self): - return _cs.cs_strerror(self.errno) - - else: - def __str__(self): - return _cs.cs_strerror(self.errno).decode() - - -# return the core's version -def cs_version(): - major = ctypes.c_int() - minor = ctypes.c_int() - combined = _cs.cs_version(ctypes.byref(major), ctypes.byref(minor)) - return (major.value, minor.value, combined) - - -# return the binding's version -def version_bind(): - return (CS_API_MAJOR, CS_API_MINOR, (CS_API_MAJOR << 8) + CS_API_MINOR) - - -def cs_support(query): - return _cs.cs_support(query) - - -# dummy class resembling Cs class, just for cs_disasm_quick() -# this class only need to be referenced to via 2 fields: @csh & @arch -class _dummy_cs(object): - def __init__(self, csh, arch): - self.csh = csh - self.arch = arch - self._detail = False - - -# Quick & dirty Python function to disasm raw binary code -# This function return CsInsn objects -# NOTE: you might want to use more efficient Cs class & its methods. -def cs_disasm_quick(arch, mode, code, offset, count=0): - # verify version compatibility with the core before doing anything - (major, minor, _combined) = cs_version() - if major != CS_API_MAJOR or minor != CS_API_MINOR: - # our binding version is different from the core's API version - raise CsError(CS_ERR_VERSION) - - csh = ctypes.c_size_t() - status = _cs.cs_open(arch, mode, ctypes.byref(csh)) - if status != CS_ERR_OK: - raise CsError(status) - - all_insn = ctypes.POINTER(_cs_insn)() - res = _cs.cs_disasm(csh, code, len(code), offset, count, ctypes.byref(all_insn)) - if res > 0: - try: - for i in range(res): - yield CsInsn(_dummy_cs(csh, arch), all_insn[i]) - finally: - _cs.cs_free(all_insn, res) - else: - status = _cs.cs_errno(csh) - if status != CS_ERR_OK: - raise CsError(status) - return - yield - - status = _cs.cs_close(ctypes.byref(csh)) - if status != CS_ERR_OK: - raise CsError(status) - - -# Another quick, but lighter function to disasm raw binary code. -# This function is faster than cs_disasm_quick() around 20% because -# cs_disasm_lite() only return tuples of (address, size, mnemonic, op_str), -# rather than CsInsn objects. -# NOTE: you might want to use more efficient Cs class & its methods. -def cs_disasm_lite(arch, mode, code, offset, count=0): - # verify version compatibility with the core before doing anything - (major, minor, _combined) = cs_version() - if major != CS_API_MAJOR or minor != CS_API_MINOR: - # our binding version is different from the core's API version - raise CsError(CS_ERR_VERSION) - - if cs_support(CS_SUPPORT_DIET): - # Diet engine cannot provide @mnemonic & @op_str - raise CsError(CS_ERR_DIET) - - csh = ctypes.c_size_t() - status = _cs.cs_open(arch, mode, ctypes.byref(csh)) - if status != CS_ERR_OK: - raise CsError(status) - - all_insn = ctypes.POINTER(_cs_insn)() - res = _cs.cs_disasm(csh, code, len(code), offset, count, ctypes.byref(all_insn)) - if res > 0: - try: - for i in range(res): - insn = all_insn[i] - yield (insn.address, insn.size, insn.mnemonic.decode('ascii'), insn.op_str.decode('ascii')) - finally: - _cs.cs_free(all_insn, res) - else: - status = _cs.cs_errno(csh) - if status != CS_ERR_OK: - raise CsError(status) - return - yield - - status = _cs.cs_close(ctypes.byref(csh)) - if status != CS_ERR_OK: - raise CsError(status) - -def _ascii_name_or_default(name, default): - return default if name is None else name.decode('ascii') - - -# Python-style class to disasm code -class CsInsn(object): - def __init__(self, cs, all_info): - self._raw = copy_ctypes(all_info) - self._cs = cs - if self._cs._detail and self._raw.id != 0: - # save detail - self._raw.detail = ctypes.pointer(all_info.detail._type_()) - ctypes.memmove(ctypes.byref(self._raw.detail[0]), ctypes.byref(all_info.detail[0]), ctypes.sizeof(type(all_info.detail[0]))) - - def __repr__(self): - return '' % (self.address, self.bytes.hex(), self.mnemonic, self.op_str) - - # return instruction's ID. - @property - def id(self): - return self._raw.id - - # return instruction's address. - @property - def address(self): - return self._raw.address - - # return instruction's size. - @property - def size(self): - return self._raw.size - - # return instruction's machine bytes (which should have @size bytes). - @property - def bytes(self): - return bytearray(self._raw.bytes)[:self._raw.size] - - # return instruction's mnemonic. - @property - def mnemonic(self): - if self._cs._diet: - # Diet engine cannot provide @mnemonic. - raise CsError(CS_ERR_DIET) - - return self._raw.mnemonic.decode('ascii') - - # return instruction's operands (in string). - @property - def op_str(self): - if self._cs._diet: - # Diet engine cannot provide @op_str. - raise CsError(CS_ERR_DIET) - - return self._raw.op_str.decode('ascii') - - # return list of all implicit registers being read. - @property - def regs_read(self): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - if self._cs._diet: - # Diet engine cannot provide @regs_read. - raise CsError(CS_ERR_DIET) - - if self._cs._detail: - return self._raw.detail.contents.regs_read[:self._raw.detail.contents.regs_read_count] - - raise CsError(CS_ERR_DETAIL) - - # return list of all implicit registers being modified - @property - def regs_write(self): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - if self._cs._diet: - # Diet engine cannot provide @regs_write - raise CsError(CS_ERR_DIET) - - if self._cs._detail: - return self._raw.detail.contents.regs_write[:self._raw.detail.contents.regs_write_count] - - raise CsError(CS_ERR_DETAIL) - - # return list of semantic groups this instruction belongs to. - @property - def groups(self): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - if self._cs._diet: - # Diet engine cannot provide @groups - raise CsError(CS_ERR_DIET) - - if self._cs._detail: - return self._raw.detail.contents.groups[:self._raw.detail.contents.groups_count] - - raise CsError(CS_ERR_DETAIL) - - def __gen_detail(self): - if self._raw.id == 0: - # do nothing in skipdata mode - return - - arch = self._cs.arch - if arch == CS_ARCH_ARM: - (self.usermode, self.vector_size, self.vector_data, self.cps_mode, self.cps_flag, self.cc, self.update_flags, \ - self.writeback, self.post_index, self.mem_barrier, self.operands) = arm.get_arch_info(self._raw.detail.contents.arch.arm) - elif arch == CS_ARCH_ARM64: - (self.cc, self.update_flags, self.writeback, self.post_index, self.operands) = \ - arm64.get_arch_info(self._raw.detail.contents.arch.arm64) - elif arch == CS_ARCH_X86: - (self.prefix, self.opcode, self.rex, self.addr_size, \ - self.modrm, self.sib, self.disp, \ - self.sib_index, self.sib_scale, self.sib_base, self.xop_cc, self.sse_cc, \ - self.avx_cc, self.avx_sae, self.avx_rm, self.eflags, self.fpu_flags, \ - self.encoding, self.modrm_offset, self.disp_offset, self.disp_size, self.imm_offset, self.imm_size, \ - self.operands) = x86.get_arch_info(self._raw.detail.contents.arch.x86) - elif arch == CS_ARCH_M68K: - (self.operands, self.op_size) = m68k.get_arch_info(self._raw.detail.contents.arch.m68k) - elif arch == CS_ARCH_MIPS: - self.operands = mips.get_arch_info(self._raw.detail.contents.arch.mips) - elif arch == CS_ARCH_PPC: - (self.bc, self.bh, self.update_cr0, self.operands) = \ - ppc.get_arch_info(self._raw.detail.contents.arch.ppc) - elif arch == CS_ARCH_SPARC: - (self.cc, self.hint, self.operands) = sparc.get_arch_info(self._raw.detail.contents.arch.sparc) - elif arch == CS_ARCH_SYSZ: - (self.cc, self.operands) = systemz.get_arch_info(self._raw.detail.contents.arch.sysz) - elif arch == CS_ARCH_XCORE: - (self.operands) = xcore.get_arch_info(self._raw.detail.contents.arch.xcore) - elif arch == CS_ARCH_TMS320C64X: - (self.condition, self.funit, self.parallel, self.operands) = tms320c64x.get_arch_info(self._raw.detail.contents.arch.tms320c64x) - elif arch == CS_ARCH_M680X: - (self.flags, self.operands) = m680x.get_arch_info(self._raw.detail.contents.arch.m680x) - elif arch == CS_ARCH_EVM: - (self.pop, self.push, self.fee) = evm.get_arch_info(self._raw.detail.contents.arch.evm) - elif arch == CS_ARCH_MOS65XX: - (self.am, self.modifies_flags, self.operands) = mos65xx.get_arch_info(self._raw.detail.contents.arch.mos65xx) - elif arch == CS_ARCH_WASM: - (self.operands) = wasm.get_arch_info(self._raw.detail.contents.arch.wasm) - elif arch == CS_ARCH_BPF: - (self.operands) = bpf.get_arch_info(self._raw.detail.contents.arch.bpf) - elif arch == CS_ARCH_RISCV: - (self.need_effective_addr, self.operands) = riscv.get_arch_info(self._raw.detail.contents.arch.riscv) - elif arch == CS_ARCH_SH: - (self.sh_insn, self.sh_size, self.operands) = sh.get_arch_info(self._raw.detail.contents.arch.sh) - elif arch == CS_ARCH_TRICORE: - (self.update_flags, self.operands) = tricore.get_arch_info(self._raw.detail.contents.arch.tricore) - - - def __getattr__(self, name): - if not self._cs._detail: - raise CsError(CS_ERR_DETAIL) - - attr = object.__getattribute__ - if not attr(self, '_cs')._detail: - raise AttributeError(name) - _dict = attr(self, '__dict__') - if 'operands' not in _dict: - self.__gen_detail() - if name not in _dict: - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - raise AttributeError(name) - return _dict[name] - - # get the last error code - def errno(self): - return _cs.cs_errno(self._cs.csh) - - # get the register name, given the register ID - def reg_name(self, reg_id, default=None): - if self._cs._diet: - # Diet engine cannot provide register name - raise CsError(CS_ERR_DIET) - - return _ascii_name_or_default(_cs.cs_reg_name(self._cs.csh, reg_id), default) - - # get the instruction name - def insn_name(self, default=None): - if self._cs._diet: - # Diet engine cannot provide instruction name - raise CsError(CS_ERR_DIET) - - if self._raw.id == 0: - return default - - return _ascii_name_or_default(_cs.cs_insn_name(self._cs.csh, self.id), default) - - # get the group name - def group_name(self, group_id, default=None): - if self._cs._diet: - # Diet engine cannot provide group name - raise CsError(CS_ERR_DIET) - - return _ascii_name_or_default(_cs.cs_group_name(self._cs.csh, group_id), default) - - - # verify if this insn belong to group with id as @group_id - def group(self, group_id): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - if self._cs._diet: - # Diet engine cannot provide group information - raise CsError(CS_ERR_DIET) - - return group_id in self.groups - - # verify if this instruction implicitly read register @reg_id - def reg_read(self, reg_id): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - if self._cs._diet: - # Diet engine cannot provide regs_read information - raise CsError(CS_ERR_DIET) - - return reg_id in self.regs_read - - # verify if this instruction implicitly modified register @reg_id - def reg_write(self, reg_id): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - if self._cs._diet: - # Diet engine cannot provide regs_write information - raise CsError(CS_ERR_DIET) - - return reg_id in self.regs_write - - # return number of operands having same operand type @op_type - def op_count(self, op_type): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - c = 0 - for op in self.operands: - if op.type == op_type: - c += 1 - return c - - # get the operand at position @position of all operands having the same type @op_type - def op_find(self, op_type, position): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - c = 0 - for op in self.operands: - if op.type == op_type: - c += 1 - if c == position: - return op - - # Return (list-of-registers-read, list-of-registers-modified) by this instructions. - # This includes all the implicit & explicit registers. - def regs_access(self): - if self._raw.id == 0: - raise CsError(CS_ERR_SKIPDATA) - - regs_read = (ctypes.c_uint16 * 64)() - regs_read_count = ctypes.c_uint8() - regs_write = (ctypes.c_uint16 * 64)() - regs_write_count = ctypes.c_uint8() - - status = _cs.cs_regs_access(self._cs.csh, self._raw, ctypes.byref(regs_read), ctypes.byref(regs_read_count), ctypes.byref(regs_write), ctypes.byref(regs_write_count)) - if status != CS_ERR_OK: - raise CsError(status) - - if regs_read_count.value > 0: - regs_read = regs_read[:regs_read_count.value] - else: - regs_read = [] - - if regs_write_count.value > 0: - regs_write = regs_write[:regs_write_count.value] - else: - regs_write = [] - - return (regs_read, regs_write) - - - -class Cs(object): - def __init__(self, arch, mode): - # verify version compatibility with the core before doing anything - (major, minor, _combined) = cs_version() - if major != CS_API_MAJOR or minor != CS_API_MINOR: - self.csh = None - # our binding version is different from the core's API version - raise CsError(CS_ERR_VERSION) - - self.arch, self._mode = arch, mode - self.csh = ctypes.c_size_t() - status = _cs.cs_open(arch, mode, ctypes.byref(self.csh)) - if status != CS_ERR_OK: - self.csh = None - raise CsError(status) - - try: - from . import ccapstone - # rewire disasm to use the faster version - setattr(self, "disasm", ccapstone.Cs(self).disasm) - except: - pass - - if arch == CS_ARCH_X86: - # Intel syntax is default for X86 - self._syntax = CS_OPT_SYNTAX_INTEL - else: - self._syntax = None - - self._detail = False # by default, do not produce instruction details - self._imm_unsigned = False # by default, print immediate operands as signed numbers - self._diet = cs_support(CS_SUPPORT_DIET) - self._x86reduce = cs_support(CS_SUPPORT_X86_REDUCE) - - # default mnemonic for SKIPDATA - self._skipdata_mnem = ".byte" - self._skipdata_cb = (None, None) - # store reference to option object to avoid it being freed - # because C code uses it by reference - self._skipdata_opt = _cs_opt_skipdata() - self._skipdata = False - - - - # destructor to be called automatically when object is destroyed. - def __del__(self): - if self.csh: - try: - status = _cs.cs_close(ctypes.byref(self.csh)) - if status != CS_ERR_OK: - raise CsError(status) - except: # _cs might be pulled from under our feet - pass - - - # def option(self, opt_type, opt_value): - # return _cs.cs_option(self.csh, opt_type, opt_value) - - - # is this a diet engine? - @property - def diet(self): - return self._diet - - - # is this engine compiled with X86-reduce option? - @property - def x86_reduce(self): - return self._x86reduce - - - # return assembly syntax. - @property - def syntax(self): - return self._syntax - - - # syntax setter: modify assembly syntax. - @syntax.setter - def syntax(self, style): - status = _cs.cs_option(self.csh, CS_OPT_SYNTAX, style) - if status != CS_ERR_OK: - raise CsError(status) - # save syntax - self._syntax = style - - - # return current skipdata status - @property - def skipdata(self): - return self._skipdata - - - # setter: modify skipdata status - @skipdata.setter - def skipdata(self, opt): - if opt == False: - status = _cs.cs_option(self.csh, CS_OPT_SKIPDATA, CS_OPT_OFF) - else: - status = _cs.cs_option(self.csh, CS_OPT_SKIPDATA, CS_OPT_ON) - if status != CS_ERR_OK: - raise CsError(status) - - # save this option - self._skipdata = opt - - - @property - def skipdata_setup(self): - return (self._skipdata_mnem,) + self._skipdata_cb - - - @skipdata_setup.setter - def skipdata_setup(self, opt): - _mnem, _cb, _ud = opt - self._skipdata_opt.mnemonic = _mnem.encode() - self._skipdata_opt.callback = CS_SKIPDATA_CALLBACK(_cb or 0) - self._skipdata_opt.user_data = ctypes.cast(_ud, ctypes.c_void_p) - status = _cs.cs_option(self.csh, CS_OPT_SKIPDATA_SETUP, ctypes.cast(ctypes.byref(self._skipdata_opt), ctypes.c_void_p)) - if status != CS_ERR_OK: - raise CsError(status) - - self._skipdata_mnem = _mnem - self._skipdata_cb = (_cb, _ud) - - - @property - def skipdata_mnem(self): - return self._skipdata_mnem - - - @skipdata_mnem.setter - def skipdata_mnem(self, mnem): - self.skipdata_setup = (mnem,) + self._skipdata_cb - - - @property - def skipdata_callback(self): - return self._skipdata_cb - - - @skipdata_callback.setter - def skipdata_callback(self, val): - if not isinstance(val, tuple): - val = (val, None) - func, data = val - self.skipdata_setup = (self._skipdata_mnem, func, data) - - - # customize instruction mnemonic - def mnemonic_setup(self, id, mnem): - _mnem_opt = _cs_opt_mnem() - _mnem_opt.id = id - if mnem: - _mnem_opt.mnemonic = mnem.encode() - else: - _mnem_opt.mnemonic = mnem - status = _cs.cs_option(self.csh, CS_OPT_MNEMONIC, ctypes.cast(ctypes.byref(_mnem_opt), ctypes.c_void_p)) - if status != CS_ERR_OK: - raise CsError(status) - - - # check to see if this engine supports a particular arch, - # or diet mode (depending on @query). - def support(self, query): - return cs_support(query) - - - # is detail mode enable? - @property - def detail(self): - return self._detail - - - # modify detail mode. - @detail.setter - def detail(self, opt): # opt is boolean type, so must be either 'True' or 'False' - if opt == False: - status = _cs.cs_option(self.csh, CS_OPT_DETAIL, CS_OPT_OFF) - else: - status = _cs.cs_option(self.csh, CS_OPT_DETAIL, CS_OPT_ON) - if status != CS_ERR_OK: - raise CsError(status) - # save detail - self._detail = opt - - - # is detail mode enable? - @property - def imm_unsigned(self): - return self._imm_unsigned - - - # modify detail mode. - @imm_unsigned.setter - def imm_unsigned(self, opt): # opt is boolean type, so must be either 'True' or 'False' - if opt == False: - status = _cs.cs_option(self.csh, CS_OPT_UNSIGNED, CS_OPT_OFF) - else: - status = _cs.cs_option(self.csh, CS_OPT_UNSIGNED, CS_OPT_ON) - if status != CS_ERR_OK: - raise CsError(status) - # save detail - self._imm_unsigned = opt - - - # return disassembly mode of this engine. - @property - def mode(self): - return self._mode - - - # modify engine's mode at run-time. - @mode.setter - def mode(self, opt): # opt is new disasm mode, of int type - status = _cs.cs_option(self.csh, CS_OPT_MODE, opt) - if status != CS_ERR_OK: - raise CsError(status) - # save mode - self._mode = opt - - # get the last error code - def errno(self): - return _cs.cs_errno(self.csh) - - # get the register name, given the register ID - def reg_name(self, reg_id, default=None): - if self._diet: - # Diet engine cannot provide register name - raise CsError(CS_ERR_DIET) - - return _ascii_name_or_default(_cs.cs_reg_name(self.csh, reg_id), default) - - # get the instruction name, given the instruction ID - def insn_name(self, insn_id, default=None): - if self._diet: - # Diet engine cannot provide instruction name - raise CsError(CS_ERR_DIET) - - return _ascii_name_or_default(_cs.cs_insn_name(self.csh, insn_id), default) - - # get the group name - def group_name(self, group_id, default=None): - if self._diet: - # Diet engine cannot provide group name - raise CsError(CS_ERR_DIET) - - return _ascii_name_or_default(_cs.cs_group_name(self.csh, group_id), default) - - # Disassemble binary & return disassembled instructions in CsInsn objects - def disasm(self, code, offset, count=0): - all_insn = ctypes.POINTER(_cs_insn)() - '''if not _python2: - print(code) - code = code.encode() - print(code)''' - # Pass a bytearray by reference - size = len(code) - view = memoryview(code) - if not view.readonly: - code = ctypes.byref(ctypes.c_char.from_buffer(view)) - elif not isinstance(code, bytes): - code = view.tobytes() - res = _cs.cs_disasm(self.csh, code, size, offset, count, ctypes.byref(all_insn)) - if res > 0: - try: - for i in range(res): - yield CsInsn(self, all_insn[i]) - finally: - _cs.cs_free(all_insn, res) - else: - status = _cs.cs_errno(self.csh) - if status != CS_ERR_OK: - raise CsError(status) - return - yield - - - # Light function to disassemble binary. This is about 20% faster than disasm() because - # unlike disasm(), disasm_lite() only return tuples of (address, size, mnemonic, op_str), - # rather than CsInsn objects. - def disasm_lite(self, code, offset, count=0): - if self._diet: - # Diet engine cannot provide @mnemonic & @op_str - raise CsError(CS_ERR_DIET) - - all_insn = ctypes.POINTER(_cs_insn)() - size = len(code) - # Pass a bytearray by reference - view = memoryview(code) - if not view.readonly: - code = ctypes.byref(ctypes.c_char.from_buffer(view)) - elif not isinstance(code, bytes): - code = view.tobytes() - res = _cs.cs_disasm(self.csh, code, size, offset, count, ctypes.byref(all_insn)) - if res > 0: - try: - for i in range(res): - insn = all_insn[i] - yield (insn.address, insn.size, insn.mnemonic.decode('ascii'), insn.op_str.decode('ascii')) - finally: - _cs.cs_free(all_insn, res) - else: - status = _cs.cs_errno(self.csh) - if status != CS_ERR_OK: - raise CsError(status) - return - yield - - -# print out debugging info -def debug(): - # is Cython there? - try: - from . import ccapstone - return ccapstone.debug() - except: - # no Cython, fallback to Python code below - pass - - if cs_support(CS_SUPPORT_DIET): - diet = "diet" - else: - diet = "standard" - - archs = { - "arm": CS_ARCH_ARM, "arm64": CS_ARCH_ARM64, "m68k": CS_ARCH_M68K, - "mips": CS_ARCH_MIPS, "ppc": CS_ARCH_PPC, "sparc": CS_ARCH_SPARC, - "sysz": CS_ARCH_SYSZ, 'xcore': CS_ARCH_XCORE, "tms320c64x": CS_ARCH_TMS320C64X, - "m680x": CS_ARCH_M680X, 'evm': CS_ARCH_EVM, 'mos65xx': CS_ARCH_MOS65XX, - 'bpf': CS_ARCH_BPF, 'riscv': CS_ARCH_RISCV, 'tricore': CS_ARCH_TRICORE, - 'wasm': CS_ARCH_WASM, 'sh': CS_ARCH_SH, - } - - all_archs = "" - keys = archs.keys() - for k in sorted(keys): - if cs_support(archs[k]): - all_archs += "-%s" % k - - if cs_support(CS_ARCH_X86): - all_archs += "-x86" - if cs_support(CS_SUPPORT_X86_REDUCE): - all_archs += "_reduce" - - (major, minor, _combined) = cs_version() - - return "python-%s%s-c%u.%u-b%u.%u" % (diet, all_archs, major, minor, CS_API_MAJOR, CS_API_MINOR) diff --git a/.tools/python-revlibs/capstone/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 6e879f4e456c0654fb60b9f9c430cd89b6a2101e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26125 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 diff --git a/.tools/python-revlibs/capstone/__pycache__/arm.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/arm.cpython-310.pyc deleted file mode 100644 index a6400f32bac6705c104c598521ac32da46ba01af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2596 zcmb7GOOM<{5cYd)k7xFg@CZavcxwaMgoH=y@|XI`DQCDqB;c#Ice1cMhj>(9m#e$W)m2?pQ;$ZWfhV~8&1~iy#&7g;^l|XA z1CqZ0n8D1_hz({jyENxkY?;J6rG3-*++Z&A9vaN!#>{zO$1WrT=0oE55)YDqg^+}h z46w$BWXK{&qJB*P$%u_18TXQqt+DloMm%KZzOl9O7ISnLhZ19a)@#$O3J;LmJ7bO=c0Hl5F-3ZSLP%dd$#e#6Q5&6Ah(EQ^Y+T@d1$H?dKNa9rW?;%>R}w zR<_``m0ir|%E}vM&v6Mn$y;8ry{&NNVbnm!^Xe7lX9=qp(~@h?iZ$4^`lQce_65*? z0^?C|o(P&dc3$$x4sG}uaKd?4o)-CP&jOr&fHB1B2l0?c%xA$v!e==sq3?<=_xwmC$b>c;cADPOLyv&bWAbode z?rqv@0etIzpbgwcJXd~3yn?0TRlwl~C?w)Ff~VJ0Yp01zB!2^Ns2dmN8FZha?I-D` ziK|Q9T?yLGn`cn{(kj(7@!?W+?-JbXXVCrfD%~{k$x?UJx%)6-Hcw0#ofDMgT^*o{ zPIYlw*Cpi<)yHcjpi$?J@*7b%T(k!|_Cm);J5nE6+x9e4n$zJr2hHa}@=X905=t$d zUKpJ}tuQn#`zVb~L3@s+9o4HHkQ9Iu(ynVLD;kSVJt{wxden&gehm6C#7K!d#7G4y z;yxRlHjtzdO4JyMwx--&3D+urfwq7a!_}})Ia%C)`ohpBP=OjrZHRYVUZ%H|m1Qbg zG??cJ38V^s5Jk(UY4*Jen_9Mg?hbJ+l4&YL!G-ecCdujr^(k_HS~21Mey&Yy%}tJp!3oCzbN$g AJ^%m! diff --git a/.tools/python-revlibs/capstone/__pycache__/arm64.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/arm64.cpython-310.pyc deleted file mode 100644 index e04ad7d99f886cc09afed8de401c73fb4104b325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3074 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 EFFP*_=>Px# diff --git a/.tools/python-revlibs/capstone/__pycache__/arm_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/arm_const.cpython-310.pyc deleted file mode 100644 index 74a71f98587fb14333529039a8eb950e289cd903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21711 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 diff --git a/.tools/python-revlibs/capstone/__pycache__/bpf_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/bpf_const.cpython-310.pyc deleted file mode 100644 index 8291ad15e348f28e9e81076dab85118fb2a4519c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2745 zcmchY$zCE!5XK9|R#e>gec$&5_objpgf76Q3T0xLan!(W9T6JrLqF2I%RGVCIq?c} zng~j(fDLD^# zay3wstA*N}7rY(?YoHDl_<*%gk6viNI`H8KXvBJG!Ukxjyr1$dly9Yc8|B+6-$D6K z%6Fj;y0H;@unBsx8T!x<{n!En*b0L*cZlW=)B6a$k5Y{>sxeMACaA_F)tI6h(^O-I zYRpoNIjS*FH5RDGBGp*JHdw}XSiufh#ZFkmE?CEI*uWmx#9r9KKG?>72;czh;2`Yc z5bWVF?BfU=;3yp87#!g^9ODF>;3S;l6sR~2L7agQ&Vq(>pyNE8;R1wl5zcW5BDf4u zT!D|c3I?u04A&u!8<4eD0j=}+p@6ZI)a zeR`%o<*82v44caQd6`aBnfJc>L*{kj;yMz)RE>!C>a%5155I?zSnNHF>9I1+Qp$WU z%C!tHqmJ=`QO}^8q?COOzFp-eMl-|DXkoN6+8FJO4n`-Vi_y*KVe~Tk82yX^#vo&e zG0YfYj55X;Ql@Vlw7#c$-#OJ@hDn)K=ksDj&#umA;&=R~j6GsG%Z<@}? ziRqA>IB|C7#B^fN^fo@m;(c<=Ja=L}Z9yv!qKfYq0etTdR5wi9Q+QZ%O~mUW-VpJo zh_^(%E#iQPcSO7^;yrs0m37zG?1r$=<60yhw!PCP9PgDK^8-VV+u2Cmtj_WSRnzRk zEX-8U6|t1z3N3PJd*NY;q?=IVV!lBQt*pzVl2XL!oSaN7A?BoIwOHa3nz`u}Yh1za zC`}7&xst3(NoJ)ayCj`TiKI-DWhu$Dl(eXnWL!$JE+v_llI)YL+|~CDkalbs`g%aB z%?+vK$Y9mTpe{!SbsFjP($KD?5dAl_peV1=IM;}lu2$z&xuDx-LrcpAOiQe0T4FWR z604b(T+OuPYNW(!q{M2ZXrgoEX}X+OZaY~@GttbBtR!(RCU;~Qp( z4-y@f`w=yT3F@l-1rSa;zj3w?eqbb2&E6U-(@G@YY_U|0lsht-qJ~%ebE?vk%2j7Y z{!_`gn~g=xkZqf@w(Y-^qQPJ2jDM}rekN7Q7E2jOhcarRpxwOOWQ_dX%~Qt8<_ej@ zLt**lruaGgvV4Ds->%mlcQa29x0%BCmoNF}%-v0)^pbzhuHF{zukZ5DrI(e$_t%EQ rTpqtYWsmuXz4S`xQ@piaPt{*dm8#Bpyqx{{h#zPCKl%qx4W9o1Z}70E diff --git a/.tools/python-revlibs/capstone/__pycache__/evm.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/evm.cpython-310.pyc deleted file mode 100644 index a64d1f864aa0620d18d4505f5dadb5bb45dbd131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmYjO&59H;5UwQsH_Hr;`Vx+?>QNREWmde%9NZP8X$ZYZ+Ucf$vPpWOLGa+djIWfd zr+o!Mu+p>YRP$9;D)sZFdRVPa0A+FgvH3;-eul%bM0j|EuxF?wNYX+Ml1kQ+j^>mE zKWf<}yayS}D#xVT?Q# zA?H~BO@D$>1v!zBQ%MwSqKZm-ZyDOSq7}ng5zdNzytVIcI?wc=eWXXb_pDNCw@H1* zd0%#lbAQ5lH^{LK{*v?Sv25>ek^?WF2!1s=73^5|4r{AgwbJq*VAe=zR=;-Jv*MFg z#uoYKZShv?^U{^Yhe4EWaj808=vtq;(tJ_wv=VaUFPfJ{TVEA=a{Hk#M5(PCdi7l0 zbkFo;V(gqDZ1^!5WHclA{hs3@tnaS`pCPsg8~A*MCV(Jt8Mp|t+c1;hjY)$FUBjNs z|Ln~}jQJIEeqqu;bC-%&w9j`=^y_ok6E`mfBWZxWL5OsEt_xYUHEQZt%MEocdcqzTI;gyqtV71DxMS%x-Qj+L?ktE3gH zr48+}5^H1?*2-$ElXk3^HP|3)u~F7xldQ*P*?=vw5nE*ww#jB}mo3;KTk(=?!^^TA zugDI(Dlg$Rc^Nz96}&F5;thEXZ^}-*C9mUcc?0jrn|N2=!h7;II^-Sfl6UdGyoV2@ z1G{Ax_Q?C#D<7a!cB4!7AR>Dal}>a^7kVUuUWuYly3sE^7?57VB99Kc~Y2u%(lCLba$hmjBsy2Nlq;z&vYgQCNbBRDEa49Or;VjwL?k&z)}C54=% zaZEBWB@0V(u;m!?Vq#btEA)dP(&PEirGG znu!)-8L^yLL9`NW1hao>6|s(3Pi!DI5}Sz4#1>*Jv5nYH>>zd$okSNAA)-V#(L?kS zeMCPoKfF2r){G5g?8eCx{8+Br!<{ zQ6x?gr-?Jf6fsSlC1!{cF-y!5W#Sw$PgIC1u|S+BE)W-qMdA{1nYcn+C9Vnh|h^Hh%bq+h_8unh;NDC5WgjU zNBo}n1Mx@VPsE>z?}+b-ABevZe<%Jy{FC?>@o(ZM;y=WH6{bQ>3SosMb=-!Q+KDy9 zT7^uW)1Jvg;=rfykoK}<_&nYiu-kTs2@k#Rk) zrBb?y_4N_x>P*V(*yJrrXttKhYKdQ#S_XclZ9JPB!@9-@*@W)2^OgA9BsD8%8YGj%k(prta=n&HLT< zmcPAKYv1_g9L=lv8iUgeH}P_Dw<_(dOd~;6lL0vw$A0P!7jf>{2KLZw_khw z+UwUozj|iN=MK2*?S#=8@UDPI0v-)`cfflB-W%|~fcFPH5MLw^UnCG;BoJRD5MLw^ zUnCG;BoJRD5MLw^UnCG;G!S1j5MMOn9wv!=uFGfsx~Q+N+h;vK>-AZm&-#5f;N}9K z-sx9Q4zkvhgH%rrQaw3H_2eMclY`cXrsmoB)lfYnQ#~V7JtI>+BU1w-d$OCgp6sT2 zc897a+&Bvy_w0`2p6qellRb`mvd3{x_Big@iBvY(>8`yp&t5C@?6oq_UMurFC2s1P z_X6UD;T|P49@_4#YG<>1ZzS}To>U_^{d{*!ETzSVV%bsmd{xJhVPVGjZu5TlgtTjlQjhF7)Qn0`|M4cm*me%aS+9gC&A;gEqM@&P_ z**W*!LbVWy+I8V{)6+jUb1u1hk<-Yzy=ooRY5&X7Sm-ot1Tm{gq>kD+j_)hvE5-Rr0i*GPRxT$dsuP9O+~mYe!7i4{h4NH+cXeX^bg{bo)TAtocTV>g zW~NRS%8S)AbF+oXiE^bnH(T6WJYO20oSUsw_mmf3v>qtU$-+$WP*^>vvP*GWsHM3j R{Qp1S3N-o5S)JDK{{R4?bY=hm diff --git a/.tools/python-revlibs/capstone/__pycache__/m680x.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/m680x.cpython-310.pyc deleted file mode 100644 index d4cecaf1c78a603207d6cce51a6f12223b0041b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2767 zcmb7G+iu%N5amrIMM=KM?j`BXMG&A08plll!w8DNt$Ro76mb#+gaCr(E*%P#$SkSC z4*FE5f6$-sFYRle{G6v0ZP7DJ+7>LSfJyA^aAtRQcJ|CHvrfm;@HAgM8Z5h-_9uNz zJ{CT<(TYDnn8x%}^EGBLGu4NNZ|KBZsrgv@R$~ojztWh^wSjeP`VB}N=0f7u5*v~x z^C0nRi33TCwIOLk;$l`4k`7ydWT778L9)n}AX%y}X}-a9ZVs&2U`E}W=o|R9(A(%6 z=pFPndKbM@eaDX9WG;MZO7Ex5t&PKn`Sc8w8_p$b&$7K`_kNI3>Ov1TV&6T5IfT)6$NDaWX2U z69wo#+mvo400$ANwrGs%-5^eQ%8KAb6J10?k-vW4x!-?Ma8dOAXFL5b^8Bl?4EsN3 zQJD50^I_i4ll*oWiUVHWjw3b>HU?Y$G}-UxN9FTu)Q`fvD6q0sQf>F z=xFw{ES>MtyRdZ)O}s;dzNTCuXSdOcFG1!-j+vY=ZE-?$gA<+!*UcK&=z(jm#&x^K z_0upNb7>~Sp)?82X2K4MOQp#VOWCS67*O(|1E?W-@2+UWPXz)M zTD2*$NV2&Ha~;}`&?XRN>+~vIy%D6JiVMMTny-0VTvQ)hzQf(BwjJw! z6TGTw;63oFo`G+HSCtHW8@#Gv;5*<|^#Z>DUR5sei);m$U6oE9S7}kjk_`k4@wJNN zC6{&>MSyTbmF?^yp4twY!sM^oKpUVAp6I(hL)?T|ya#fk!w65~2~aCMlkP6fH9%bB zWvgC)9Va?>A@Kt9(3f6;k|g zzRL31Die9WG%L@m^rnowNNVZkBFnibj}%^oLXaXVk Z6~BURSl4Ky)_2Wrt83$Jb#Jzv{{T}7@(}<4 diff --git a/.tools/python-revlibs/capstone/__pycache__/m680x_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/m680x_const.cpython-310.pyc deleted file mode 100644 index 18c5e31eddc1bcffbd79ab51d0491f8da3f44497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11529 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 V{+~ynS<(OJPm7}eoS$|@{{!6W9{vCT diff --git a/.tools/python-revlibs/capstone/__pycache__/m68k.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/m68k.cpython-310.pyc deleted file mode 100644 index 6e9a28ef96669ac9f0009345e91c145e63b0a4a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3219 zcmb7G-EZ7P5cl`lzKe|Hq+FM61~ z3_Pr3WPgG%g{ghTQ<%o|zBpRNV3NxAYP+=BV_KhRmGa;!l8xp&cSdci( zg~WxVhCMbUb=H8SQSEUcX|fh1txDoTvcMK0S*#>=NS0U|l6EC&urqA=q2e`}x~+81 zK8CGI_pu7vQH#YeNe}!mKS+7z_v0*wOuZD+p2@3$hjol>4}>e8$`nsyD%baoNMl+x z>(y*jvsuj+W)u5rm@Uk9H9OVpR&%|aqq{v5M>udtFR%6RU%rNS&e z)>>(kWvt>{!RhRzYSOOF2e4NI6D1Si@{`JJKT4bC?AeYDK+t;rpOJ;)Na$ z29zU2Gom^?Dr|Bqg@fIWJIf^k8loP|Ad@fw42@H}&^ZBRaH|5SoUQUXvOJqRWpg}IJr}%ei{R_vWkUqt z054l1_$GMS1i`n!%k~F;0laK|;1}6hz<;i=%Fq<%Ph|oO&{=A`qU;t;0FM^Pg^x~= z6$W)huMsdNc$QHo;32imu z)+m>sXdt$B=$5vvAQ9(&N66^Eix-Z+@G^Mu9+7cdBsrh^<(fMcqu^##7C4RZX8Y zTB@KoLyYGx9Z%~R871Ci3z_`eD32v(;LpZlCW_lCsyx}oIWFG8tJKsFr)!qfZ;*OA zu5u+;bL~hw22~fdEMFH_z@d26;8bZ9I*#Xiq=72eRS#Pw4D{g@EOk3GTkOP9_z`_$ zRwP%jutl25w(@K+o;6HC@(|;>>*W8F!ak0Zr&FWl`m%Dm*+%%QtYT$tWMuSX(oxt1 ze=uZOQA^5Gf<%6pjD~Q=Ih9Rbo8I&{?|iv+qkGHW*u2}_kw8i-WpdGZNdHA^^N*5` z@!=mZvIdB)7^;h`LC*XuXl1HO$W93w+OZM)pjs0 Iww;FkABk&B+yDRo diff --git a/.tools/python-revlibs/capstone/__pycache__/m68k_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/m68k_const.cpython-310.pyc deleted file mode 100644 index ca006e4969574ac296251bff3809ec77cce388bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13444 zcmd^_Wq1_Hx5g*9ySuvu*M-q!$QaWzAshlh4o*lQ0hV=lVcp%`-QC?;_hsE(?)%Op zGgY0v&vU>0Kiqra;rHfLRac!lb-Jp%Lsi?htvvYCa&vP1ZzDXO4{4Zx8o`){e>Jnw zPCZ(%(NkF<1(l7YQDtLkT-ijL6nM0eG}Xq^Og++En@9_7DlJjgN}EY*Z7yxJg|yX{ z(oS1Rdu=Tpw2gGsw$e%4NoQ>@U9^LA)sE6lJ4tu#EIqV~^wh4>OS?&L?Jj+^hxFB+ z(ocIyf9)*;w2utbzA{Mr$zbg-Lv(-))qyfh2gz_9EF*M?jMSkrN{7j49WG;ZgpAdZ zGEPUycpWVhbc_`0SedBfWRi}T$vQ!%!2hZ6e;WLs4*zGs|C#WA7W|(L|L4H}J>dUb z_&*Q+d*Qzi{`=v70R9Kze+d2;!T)0TA4Y%k(O(Jri=e+K`ir5zIQmPVzXj+oi8c<} zq|hdf`cl{nVVA*P1Y2M)hL)r45{$PLb_ME}p?*1jUV)!i;%7zwtI%#W`d@?o*P{P* zxMn^4-2i_#!rw|(i1%TL_u+{55s3GZi1$&5_tA*=F^KoE zi1%@b_wk7LPQ?2JEtC^=qMW3Y2ik7kTZ3roTanmY@IFV z=o~p$_mJ~+uAHy) z8kK7`Cf8|PuGfUzpbO+iP0CH`$jzFPTQn`VYN_0&3*~k#lRI>g+^HgW>0-HC%jF(j zBKPW2xlb$PeqAOH=yG{bSI9%UQXW>7M|71us;lKOT_ca{T6sd($&a(*xvvJy1T-gXBX!SU%E2Q4DiPmu5RMEOBak{|VC`AJWapY>GvMNgAo^>q17&ye5s zO!-64l0Wrq`Ag4{zx7=CN6*_?ARav*EYJ(UMtULGST6#b=*3`Dy##Egmx9gpGO&eS z4z|=Qz*c%C*jldw+vwF`TfGKsr`Lk*^*XSFUJrKE8^BI_BiLDQ0=wwVU{}2b?54MZ z-SsxGhu#kM)H}dldMDUh?*jYi-C$q62kfW!g8lVAaDd(q4%7$0LHZy#SRVq1=)>Sp zeFPk)kAlPXF>r)F4vy3(z)|`nI9i_q$LQ1GSbYW@r_X}p^*L~YJ`Wb^3*bb35uBti zfs^%RaEiVHPSsbzY5E#CU0(-h=o{cn-389lH^JHZ7C1-W2KUf+z`6P^I8WaLz4|`r z(+@zueh3EiBQU5RgCYF{EYeTGV*LyZ>uzwqeh!xC7hpuc1f%*D7}Kx8xPAjB^jmO& zeg`J?d(hDzz?A+7ru8SVRDT8+>MvlK{t7PA-$2pd!NvLqSgwD9OY|>rss0UC=s)1H zodxQFE{7ICS3nyLpwsZKs!Nepq-($&@Rxe(5}#J&~DJ}(C*MZp*^5Gpgo~` zL3=^>hW3W;1MLId7upxPAG9BIe`tT`0nh=^1EB+<2SEox4~7ng9s(T#Jrp_=dKh#V z^l<2K=n>En&?BKEp+`YSL63%xh8_bQ13eZx7J3|X9Q1hTc<4^(1n3FSLgaLZ}aV5!4U87#e_H0u4ehg@&M)L5rZ5LyMtTK*P{0q4S|vK}(=lLnF{@ zpi$_x&=~YOXdHSyGy%NOgOXrl7Y#)6iR?rO?};3!%3|%b<5a7eViY z3iK}MV(8t_a_BwKCD41JOQH8cE1>s7mq8zZE{8q{T>*Uvx)S;@RH2VRS3w_zu7*Aa zT?2g_x)%BbbRG0b=z8c=&<)V1p&OykKr5loLN`I5gH}PGhgL&hfNqAq2;BmG30ebv z8CnZ{1-cdbDs&t4HRyKe>(D)+Z)EP)U736N&CH$pR^~o^J9BrwlestFMcW;YXT)9w z9?x$4^Neh=tF7Ouh$kw-u~Kg&9N5(|YbJw5^*@HA(fS{w!RYQLxNJB6d3N)8ba!K- zDbb8*PP8Ce5`3WD-I{1av?baR?THRVN1_wandm}vCAtyai5^5xq8HJd=tJ}+`Vsw! z0mMLJ5HXk-LJTE_5yJ^QTzhtpBt{XVi7~`jVjMA^m_QT~6NyR0WMT?2m6%3MCuR^c ziCM&KVh*tfF_)M}cnKfjCjvx}2oXg@F%c%_6D351h!Qa(P9%s0M3Qib6p=O z#5Q6(u_v*E*o)Yk*oWAc*pJwsIDj~iIEXlyID|NqIE*-)ID$BmIEpx$IEFZuIF2}; z*h!o~oJgERoJ^cToJyQVoKBoUoJpKToK2iVoJ*WXoKIXpTu59*TufX-TuNLTu>}PI-Xh*6 z-XY#4-Xq>8J|I3MJ|aFQJ|R9OJ|lJ$pA%mYUlLytUlZRD-xA*u-xEI&KN3F?KNG(Y zzY@O@zY~8De-eKYe-r-@o&t|&T>;UEXiVUh+q14I(Tr$Lv>;j%t%%k{8=@`Ij%ZJG zAUYDAh|WY8qASsj=uY$?dJ?^e-b5dwFVThuDLdOUxs@gpcqO0U}6*h$5nx z2ov*(5+XuGi5L+l62t-`NjOA`NE4;RLZXaVLONk0%8L^yLL98T{SVgQR z)(~rnb;NpN1F?~)BsLLML^ZLQ*h170wZv9p8?haTjd%~-<=N5*Nw%di(S&FUNT=x3 z=_NRzgGp~JP~nfKV=3v7DZ>$6e`-tXTuESpX%w2qMAMjL8k0?9ifK$WjcJDAHOKLq z<9N++yyiGwa~!WZj@KN=J5Ac;<`YUxu&hGMnrK;*ENil5O|h)0mSxT>;WsAfB#m}{ zziBxkzfl*kthAFb>Pme{X`7pm--~Wc(`)t`wXO`q%CBt7Z(J8nr6$;BpT9}2> zF6TltnzkmEPMYpIu=4(e5|+E61g^~Y6iS5Qe*0X{!B`+1E2^8jH(C*k$AZ#5Qw@s= z8we+Z{!~T4oAUl^g*OmLN=M_0a7Cu5SA(L8MBGW?2JlPIf2m6bD*{2kbZb}@U{w3n zmwVw<7`+67Wfjvad||l8`o8~G@AEq7mDRZ^;ej|@?+CickC&~07n!c>?pVYi;SXoK z=u?sHUVkte#P*cUhx|K5T@IrF!Ok1#EpK2Rb>pB}C{f`c zk0L>Wga@YD6VWQc1x~mq( zlY#%HDig8nrtMFpv*ToL16Nt5cUM`aTUVLUU&!jOOD08fWpx2_mDa^9dmH512Fp^o zQ-guJbj`#fwJ4DfNY;mZIc8FK5ar9zTV3SCF(((w?9Rawug@Q-+X*seAW*lh)LCBJ z4BO@c+blDCidj8j%P}jRh-KApt{l`?>=<>vNZhoF&0c&FtEInwtIzb}x9YILWe=-N zU2uVEm0H)8TGu5^KYdYa^dhUzNXqQ9$g*%h7^5e>riGn4zZyP&agk+4tXe0SGHX*# zs&1Fh%qql-v%7wsjjOYFdDcckIqrhAbwwx?w`^Qz*>u1hfgTv%mn6(;zc&(z8dLRq z9iuU3Ba@l4wstghw8L>y9MKB^20LkzF=AX0}PV@ znQaUU%V(G&9F~R`A;)D0T(;LAH=`B8lZ}13Z3kTSUhMH^dz{`eBSS*8i;Z*+Sve8% zVIlJ&3;E)Rw`~V)8_Q$WV?ivt$P799GlLrPr7d55Y1im!*XU{FhS_`CHG0}ghmgVcVJ7a#<#0+$y|7Q2NV{4&E|3Q z*(8+Ay)R|vmkc_oc+y&0$LpFSo|>$jbBZEdPGgcNaXHBo$83PtZF@^WgJNqM3-B^& zM9Fbn1%XUK{+TOe@70d$lyY3B6l{Bz+^>)4MlydA{#!36E-duKowlO(A<`{!#o^p(&#JeoFAtUKhNpB)#<}C}bqh~*4 zWNsLiFtr*K)qiuyx5Cujtq>h|5h8B-#O{;s5+s}JGUl7RsG(QPI(MsvUNQGvE+G9} zVX6OkoSPn!(A72b(A5uIa+fq13l6#3H1r2Sat+4J%zkaid6Y>`S2O0PyQtwJFiYL7 z8itO!>T1PwbvbWmEMG^>1`Fd%xqOZmd#&k*BavW{*L>xek5|k5PB1_B{gtzh1kG2Q zNH|tvtXd?2o!z`PVtwI=Sa126Q!9U~(DWL&PUaAE*-@8mzNNCg`5Z*se9xy{IMoOP zP7m`12WHx+joDv>>;n##`H?4P%{dlN)qN^tyl`XXL&=x7{5mAO{t}}yf$8UOfJ7*Q zw`^k_vjtuw8|q5TLoZuoKBFcgaWB478y&M?p%KVLB!TbZ`Gufu)iZLYBeX*Sv&$4t zbZZP2SbZSY=BAG)0yFk7%~xPNAm9s2K5WUjnVm`NR7}Rp%rg_F8SrGv{H&M6H&Ub5 zl=)dEi3yl>rh5)^A^W=xE-7v=!w4CdIo5|c$NDhmSRdvb>+_yteWr7)kA3#B%>6F! zrel4ybF7bcj`h*bu|C@Id^UQ)c3@c8aSRI^S3YB1cej1?!7{f7m}auWG(XM2G`A#Y zq1W6tQr0&z9)CuD(lj6ZX`2T+ZSxI@Hr6G72e1H3V;5j`>;f#1U4S*R3$RRffpvm$ z6fBnA0_)`}aCeGTvs+-{>;kNvU4Z4Y3$TKA0Twa8r1sa!bSz?ia!kh(=7wJPJF@I) zQk2a7&#SteV9ES+?zEtp%zd2AG^g1k^YNc%-7jF0!H72%&OPz7COgm-o-O=82^svJ z_RlO&*R0x7Q!Zuxa&L8YV0rEG@<`Rnhuj2E2}ou)Q+p(v8%=G$|~KuaTR~l@2R;R zzrpU|Y0?OP3;v^j|EK*oY*%0M?^<8_pY{I#Wbe%i{0MZ7eBSJvJ`56vKSM&hs z&5@4ii6N=i}_B_#AAajndXz)wzC9Y_wT{aqg)okBzr`!KqOB5e7W%;eq*FIarAB@ zexlT~v`*s}RhAaJPHMJ<7y1xjSBui~N18X7$Hv5@)G0bv2Q9N(g#Q z&2$S)b65riC!BH0e>-%kFpFm1fTPD1MtCxS@<6+U59MjuZd0DOX)%@7)AED$^0KsE zDa)-P*KM$+(YNlPKsxCziXIA#PWMqPO3-L05IYG1af5#~u?Lj@a`;m8i?%+6!$(9v zZ>nqyPx!lJhejN9M@rB;pgTH(9*PcR7TTc6%=*YE+xm;jJL>vvxzd%Ax}LcTX_tg^c94YA zTqdjV+Zk8}6(mAH{okw=Qs&`Wp&B=qD6t^)HP}6h62e<0^I31m9Bdfuf#sD-vT6$R z3YygEM3{XfAx!;I$>CJvbg#QOjwkdbFmV&sVi-dlMnsodg0Um7T*@^v3+^e9>>IlP zg*$2J)>$3ts>)Asm2ZtyKX8iai*fMgaSbF z6I0vHcCDvbJ=M}ps%^cQ G_kus#|169E diff --git a/.tools/python-revlibs/capstone/__pycache__/mips_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/mips_const.cpython-310.pyc deleted file mode 100644 index efa08ada24faad290ecf86861656de98a81791e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23672 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 G-2VZP!MUvf diff --git a/.tools/python-revlibs/capstone/__pycache__/mos65xx.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/mos65xx.cpython-310.pyc deleted file mode 100644 index 9f3e8a9e7af7b97370acf1a068f0630f5dcbb19e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1533 zcmb7ETW{1x6rLGhcI@m1ngnQ2ODn_!iIlWW1wsf_lvLuS4HAJ0Sr#MLGfuqnEi+!k zBHjo;CVy#OD^5b0xLLrKK#oe>}iHKyVw6{{<&*P=`!ngs9k7$-s*pyU5d8%N*}>n> zcOS+tjnXELUhT#|H_b0eo5a7?X;Q>5RN2H$-fXprK2YsemdcU%e)u3R@;~Bc+#c3d zoFq>oB)&}#~ZpPXJ>m0U0QaRy_Q~3Sc>CY7o=$=sf1cVC;2W87x`cLTI2GiF- zqk8}+)Vf9$*;&Q(%Ippw`osV@dpDT-+y?G0b)~Q4%QpaKPJC2+i7@A6;sGz#QGXL) z(LOZD|FDm_U1%RKzP`wQ*LF)fz&j*RFCp|11_;Qmz6xM@qw7ZLcHEUpcd2y#&Qj^5 zu41e3#ueCR4FH?Mr|xIwg_JqCm#M}l&b0>`eGJ>|09?=>XLE(~*8Bb37=7?Bmpfw8=9L|TtP=7?Y~Nc{-@#YHj$}JA6%D2X4aKQUYrU6M yURNFYHrQ|VC~ZetP4dTNIui>H=S8sm(d47`6V97i2H>m@AA}WWrMI%$=l=n`$|$t} diff --git a/.tools/python-revlibs/capstone/__pycache__/mos65xx_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/mos65xx_const.cpython-310.pyc deleted file mode 100644 index 592a0758c93696c5278307bf9dc3a7c8da04415d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4197 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 WmIg`$Z7z5>>?YktS9D)$H~#}f({if- diff --git a/.tools/python-revlibs/capstone/__pycache__/ppc_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/ppc_const.cpython-310.pyc deleted file mode 100644 index a88c1b2735bb179d1121a3edd82a302fb58c202b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59733 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 diff --git a/.tools/python-revlibs/elftools/elf/constants.py b/.tools/python-revlibs/elftools/elf/constants.py deleted file mode 100644 index 84d2479..0000000 --- a/.tools/python-revlibs/elftools/elf/constants.py +++ /dev/null @@ -1,176 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/constants.py -# -# Constants and flags, placed into classes for namespacing -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- - -class E_FLAGS: - """ Flag values for the e_flags field of the ELF header - """ - EF_ARM_EABIMASK=0xFF000000 - EF_ARM_EABI_VER1=0x01000000 - EF_ARM_EABI_VER2=0x02000000 - EF_ARM_EABI_VER3=0x03000000 - EF_ARM_EABI_VER4=0x04000000 - EF_ARM_EABI_VER5=0x05000000 - EF_ARM_GCCMASK=0x00400FFF - EF_ARM_RELEXEC=0x01 - EF_ARM_HASENTRY=0x02 - EF_ARM_SYMSARESORTED=0x04 - EF_ARM_DYNSYMSUSESEGIDX=0x8 - EF_ARM_MAPSYMSFIRST=0x10 - EF_ARM_LE8=0x00400000 - EF_ARM_BE8=0x00800000 - EF_ARM_ABI_FLOAT_SOFT=0x00000200 - EF_ARM_ABI_FLOAT_HARD=0x00000400 - - EF_PPC64_ABI_V0=0 - EF_PPC64_ABI_V1=1 - EF_PPC64_ABI_V2=2 - - EF_MIPS_NOREORDER=1 - EF_MIPS_PIC=2 - EF_MIPS_CPIC=4 - EF_MIPS_XGOT=8 - EF_MIPS_64BIT_WHIRL=16 - EF_MIPS_ABI2=32 - EF_MIPS_ABI_ON32=64 - EF_MIPS_32BITMODE = 256 - EF_MIPS_NAN2008=1024 - EF_MIPS_ARCH=0xf0000000 - EF_MIPS_ARCH_1=0x00000000 - EF_MIPS_ARCH_2=0x10000000 - EF_MIPS_ARCH_3=0x20000000 - EF_MIPS_ARCH_4=0x30000000 - EF_MIPS_ARCH_5=0x40000000 - EF_MIPS_ARCH_32=0x50000000 - EF_MIPS_ARCH_64=0x60000000 - EF_MIPS_ARCH_32R2=0x70000000 - EF_MIPS_ARCH_64R2=0x80000000 - - EF_RISCV_RVC=0x00000001 - EF_RISCV_FLOAT_ABI=0x00000006 - EF_RISCV_FLOAT_ABI_SOFT=0x00000000 - EF_RISCV_FLOAT_ABI_SINGLE=0x00000002 - EF_RISCV_FLOAT_ABI_DOUBLE=0x00000004 - EF_RISCV_FLOAT_ABI_QUAD=0x00000006 - EF_RISCV_RVE=0x00000008 - EF_RISCV_TSO=0x00000010 - - EF_LOONGARCH_OBJABI_MASK=0x000000C0 - EF_LOONGARCH_OBJABI_V0=0x00000000 - EF_LOONGARCH_OBJABI_V1=0x00000040 - EF_LOONGARCH_ABI_MODIFIER_MASK=0x00000007 - EF_LOONGARCH_ABI_SOFT_FLOAT=0x00000001 - EF_LOONGARCH_ABI_SINGLE_FLOAT=0x00000002 - EF_LOONGARCH_ABI_DOUBLE_FLOAT=0x00000003 - # The names in the glibc elf.h say "LARCH" instead of "LOONGARCH", - # provide these names for users' convenience. - EF_LARCH_OBJABI_MASK = EF_LOONGARCH_OBJABI_MASK - EF_LARCH_OBJABI_V0 = EF_LOONGARCH_OBJABI_V0 - EF_LARCH_OBJABI_V1 = EF_LOONGARCH_OBJABI_V1 - EF_LARCH_ABI_MODIFIER_MASK = EF_LOONGARCH_ABI_MODIFIER_MASK - EF_LARCH_ABI_SOFT_FLOAT = EF_LOONGARCH_ABI_SOFT_FLOAT - EF_LARCH_ABI_SINGLE_FLOAT = EF_LOONGARCH_ABI_SINGLE_FLOAT - EF_LARCH_ABI_DOUBLE_FLOAT = EF_LOONGARCH_ABI_DOUBLE_FLOAT - -class E_FLAGS_MASKS: - """Masks to be used for convenience when working with E_FLAGS - - This is a simplified approach that is also used by GNU binutils - readelf - """ - EFM_MIPS_ABI = 0x0000F000 - EFM_MIPS_ABI_O32 = 0x00001000 - EFM_MIPS_ABI_O64 = 0x00002000 - EFM_MIPS_ABI_EABI32 = 0x00003000 - EFM_MIPS_ABI_EABI64 = 0x00004000 - - -class SHN_INDICES: - """ Special section indices - """ - SHN_UNDEF=0 - SHN_LORESERVE=0xff00 - SHN_LOPROC=0xff00 - SHN_HIPROC=0xff1f - SHN_ABS=0xfff1 - SHN_COMMON=0xfff2 - SHN_HIRESERVE=0xffff - SHN_XINDEX=0xffff - - -class SH_FLAGS: - """ Flag values for the sh_flags field of section headers - """ - SHF_WRITE=0x1 - SHF_ALLOC=0x2 - SHF_EXECINSTR=0x4 - SHF_MERGE=0x10 - SHF_STRINGS=0x20 - SHF_INFO_LINK=0x40 - SHF_LINK_ORDER=0x80 - SHF_OS_NONCONFORMING=0x100 - SHF_GROUP=0x200 - SHF_TLS=0x400 - SHF_COMPRESSED=0x800 - SHF_MASKOS=0x0ff00000 - SHF_EXCLUDE=0x80000000 - SHF_MASKPROC=0xf0000000 - - -class RH_FLAGS: - """ Flag values for the DT_MIPS_FLAGS dynamic table entries - """ - RHF_NONE=0x00000000 - RHF_QUICKSTART=0x00000001 - RHF_NOTPOT=0x00000002 - RHF_NO_LIBRARY_REPLACEMENT=0x00000004 - RHF_NO_MOVE=0x00000008 - RHF_SGI_ONLY=0x00000010 - RHF_GUARANTEE_INIT=0x00000020 - RHF_DELTA_C_PLUS_PLUS=0x00000040 - RHF_GUARANTEE_START_INIT=0x00000080 - RHF_PIXIE=0x00000100 - RHF_DEFAULT_DELAY_LOAD=0x00000200 - RHF_REQUICKSTART=0x00000400 - RHF_REQUICKSTARTED=0x00000800 - RHF_CORD=0x00001000 - RHF_NO_UNRES_UNDEF=0x00002000 - RHF_RLD_ORDER_SAFE=0x00004000 - - -class P_FLAGS: - """ Flag values for the p_flags field of program headers - """ - PF_X=0x1 - PF_W=0x2 - PF_R=0x4 - PF_MASKOS=0x00FF0000 - PF_MASKPROC=0xFF000000 - - -# symbol info flags for entries -# in the .SUNW_syminfo section -class SUNW_SYMINFO_FLAGS: - """ Flags for the si_flags field of entries - in the .SUNW_syminfo section - """ - SYMINFO_FLG_DIRECT=0x1 - SYMINFO_FLG_FILTER=0x2 - SYMINFO_FLG_COPY=0x4 - SYMINFO_FLG_LAZYLOAD=0x8 - SYMINFO_FLG_DIRECTBIND=0x10 - SYMINFO_FLG_NOEXTDIRECT=0x20 - SYMINFO_FLG_AUXILIARY=0x40 - SYMINFO_FLG_INTERPOSE=0x80 - SYMINFO_FLG_CAP=0x100 - SYMINFO_FLG_DEFERRED=0x200 - -class VER_FLAGS: - VER_FLG_BASE=0x1 - VER_FLG_WEAK=0x2 - VER_FLG_INFO=0x4 diff --git a/.tools/python-revlibs/elftools/elf/descriptions.py b/.tools/python-revlibs/elftools/elf/descriptions.py deleted file mode 100644 index c8c9a26..0000000 --- a/.tools/python-revlibs/elftools/elf/descriptions.py +++ /dev/null @@ -1,1090 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/descriptions.py -# -# Textual descriptions of the various enums and flags of ELF -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import TYPE_CHECKING, Any, Final, TypeVar - -from .enums import ( - ENUM_D_TAG, ENUM_E_VERSION, ENUM_P_TYPE_BASE, ENUM_SH_TYPE_BASE, - ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64, - ENUM_RELOC_TYPE_ARM, ENUM_RELOC_TYPE_AARCH64, ENUM_RELOC_TYPE_PPC64, - ENUM_RELOC_TYPE_MIPS, ENUM_ATTR_TAG_ARM, ENUM_ATTR_TAG_RISCV, - ENUM_RELOC_TYPE_S390X, ENUM_RELOC_TYPE_LOONGARCH, ENUM_DT_FLAGS, - ENUM_DT_FLAGS_1, ENUM_RELOC_TYPE_PPC) -from .constants import ( - P_FLAGS, RH_FLAGS, SH_FLAGS, SUNW_SYMINFO_FLAGS, VER_FLAGS) -from .dynamic import DynamicSection - -if TYPE_CHECKING: - from collections.abc import Container as TContainer - from collections.abc import Iterable, Mapping - - from ..construct.lib.container import Container - from .elffile import ELFFile - - _K = TypeVar("_K") - _V = TypeVar("_V") - - -def describe_ei_class(x: str) -> str: - return _DESCR_EI_CLASS.get(x, _unknown) - - -def describe_ei_data(x: str) -> str: - return _DESCR_EI_DATA.get(x, _unknown) - - -def describe_ei_version(x: str) -> str: - s = str(ENUM_E_VERSION.get(x, f"{x} ")) - if x == 'EV_CURRENT': - s += ' (current)' - return s - - -def describe_ei_osabi(x: str) -> str: - return _DESCR_EI_OSABI.get(x, _unknown) - - -def describe_e_type(x: str, elffile: ELFFile | None = None) -> str: - if elffile is not None and x == 'ET_DYN': - # Detect whether this is a normal SO or a PIE executable - dynamic = elffile.get_section_by_name('.dynamic') - if dynamic: - assert isinstance(dynamic, DynamicSection) - for t in dynamic.iter_tags('DT_FLAGS_1'): - if t.entry.d_val & ENUM_DT_FLAGS_1['DF_1_PIE']: - return 'DYN (Position-Independent Executable file)' - return _DESCR_E_TYPE.get(x, _unknown) - - -def describe_e_machine(x: str) -> str: - return _DESCR_E_MACHINE.get(x, _unknown) - - -def describe_e_version_numeric(x: str) -> str: - return f"{ENUM_E_VERSION.get(x, x):#x}" - - -def describe_p_type(x: int | str) -> str: - if isinstance(x, str) and x in _DESCR_P_TYPE: - return _DESCR_P_TYPE[x] - elif isinstance(x, int) and ENUM_P_TYPE_BASE['PT_LOOS'] <= x <= ENUM_P_TYPE_BASE['PT_HIOS']: - return 'LOOS+%lx' % (x - ENUM_P_TYPE_BASE['PT_LOOS']) - else: - return _unknown - - -def describe_p_flags(x: int) -> str: - s = '' - for flag in (P_FLAGS.PF_R, P_FLAGS.PF_W, P_FLAGS.PF_X): - s += _DESCR_P_FLAGS[flag] if (x & flag) else ' ' - return s - - -def describe_rh_flags(x: int) -> str: - return ' '.join( - _DESCR_RH_FLAGS[flag] - for flag in (RH_FLAGS.RHF_NONE, RH_FLAGS.RHF_QUICKSTART, - RH_FLAGS.RHF_NOTPOT, RH_FLAGS.RHF_NO_LIBRARY_REPLACEMENT, - RH_FLAGS.RHF_NO_MOVE, RH_FLAGS.RHF_SGI_ONLY, - RH_FLAGS.RHF_GUARANTEE_INIT, - RH_FLAGS.RHF_DELTA_C_PLUS_PLUS, - RH_FLAGS.RHF_GUARANTEE_START_INIT, RH_FLAGS.RHF_PIXIE, - RH_FLAGS.RHF_DEFAULT_DELAY_LOAD, - RH_FLAGS.RHF_REQUICKSTART, RH_FLAGS.RHF_REQUICKSTARTED, - RH_FLAGS.RHF_CORD, RH_FLAGS.RHF_NO_UNRES_UNDEF, - RH_FLAGS.RHF_RLD_ORDER_SAFE) - if x & flag) - - -def describe_sh_type(x: int | str) -> str: - if isinstance(x, str) and x in _DESCR_SH_TYPE: - return _DESCR_SH_TYPE[x] - elif isinstance(x, int) and ENUM_SH_TYPE_BASE['SHT_LOOS'] <= x < ENUM_SH_TYPE_BASE['SHT_GNU_versym']: - return 'loos+0x%lx' % (x - ENUM_SH_TYPE_BASE['SHT_LOOS']) - else: - return _unknown - - -def describe_sh_flags(x: int) -> str: - s = '' - for flag in ( - SH_FLAGS.SHF_WRITE, SH_FLAGS.SHF_ALLOC, SH_FLAGS.SHF_EXECINSTR, - SH_FLAGS.SHF_MERGE, SH_FLAGS.SHF_STRINGS, SH_FLAGS.SHF_INFO_LINK, - SH_FLAGS.SHF_LINK_ORDER, SH_FLAGS.SHF_OS_NONCONFORMING, - SH_FLAGS.SHF_GROUP, SH_FLAGS.SHF_TLS, SH_FLAGS.SHF_MASKOS, - SH_FLAGS.SHF_EXCLUDE): - s += _DESCR_SH_FLAGS[flag] if (x & flag) else '' - if not x & SH_FLAGS.SHF_EXCLUDE: - if x & SH_FLAGS.SHF_MASKPROC: - s += 'p' - return s - - -def describe_symbol_type(x: str) -> str: - return _DESCR_ST_INFO_TYPE.get(x, _unknown) - - -def describe_symbol_bind(x: str) -> str: - return _DESCR_ST_INFO_BIND.get(x, _unknown) - - -def describe_symbol_visibility(x: str) -> str: - return _DESCR_ST_VISIBILITY.get(x, _unknown) - - -def describe_symbol_local(x: int) -> str: - return '[: ' + str(1 << x) + ']' - - -def describe_symbol_other(x: Container) -> str: - vis = describe_symbol_visibility(x['visibility']) - if 1 < x['local'] < 7: - return vis + ' ' + describe_symbol_local(x['local']) - return vis - - -def describe_symbol_shndx(x: int | str) -> str: - return _DESCR_ST_SHNDX.get(x, f'{x:3}') # type: ignore[arg-type] # ty: ignore[no-matching-overload] - - -def describe_reloc_type(x: int, elffile: ELFFile) -> str: - arch = elffile.get_machine_arch() - if arch == 'x86': - return _DESCR_RELOC_TYPE_i386.get(x, _unknown) - elif arch == 'x64': - return _DESCR_RELOC_TYPE_x64.get(x, _unknown) - elif arch == 'ARM': - return _DESCR_RELOC_TYPE_ARM.get(x, _unknown) - elif arch == 'AArch64': - return _DESCR_RELOC_TYPE_AARCH64.get(x, _unknown) - elif arch == '64-bit PowerPC': - return _DESCR_RELOC_TYPE_PPC64.get(x, _unknown) - elif arch == 'PowerPC': - return _DESCR_RELOC_TYPE_PPC.get(x, _unknown) - elif arch == 'IBM S/390': - return _DESCR_RELOC_TYPE_S390X.get(x, _unknown) - elif arch == 'MIPS': - return _DESCR_RELOC_TYPE_MIPS.get(x, _unknown) - elif arch == 'LoongArch': - return _DESCR_RELOC_TYPE_LOONGARCH.get(x, _unknown) - else: - return 'unrecognized: %-7x' % (x & 0xFFFFFFFF) - - -def describe_dyn_tag(x: int) -> str: - return _DESCR_D_TAG.get(x, _unknown) - - -def describe_dt_flags(x: int) -> str: - return ' '.join(key[3:] for key, val in - sorted(ENUM_DT_FLAGS.items(), key=lambda t: t[1]) if x & val) - - -def describe_dt_flags_1(x: int) -> str: - return ' '.join(key[5:] for key, val in - sorted(ENUM_DT_FLAGS_1.items(), key=lambda t: t[1]) if x & val) - - -def describe_syminfo_flags(x: int) -> str: - return ''.join(_DESCR_SYMINFO_FLAGS[flag] for flag in ( - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_CAP, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECT, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_FILTER, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_AUXILIARY, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECTBIND, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_COPY, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_LAZYLOAD, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_NOEXTDIRECT, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_INTERPOSE, - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DEFERRED) if x & flag) - - -def describe_symbol_boundto(x: str) -> str: - return _DESCR_SYMINFO_BOUNDTO.get(x, '%3s' % x) - - -def describe_ver_flags(x: int) -> str: - return ' | '.join(_DESCR_VER_FLAGS[flag] for flag in ( - VER_FLAGS.VER_FLG_WEAK, - VER_FLAGS.VER_FLG_BASE, - VER_FLAGS.VER_FLG_INFO) if x & flag) - - -def describe_note(x: Container, machine: str) -> str: - n_desc = x['n_desc'] - desc = '' - if x['n_type'] == 'NT_GNU_ABI_TAG': - if x['n_name'] == 'GNU': - desc = '\n OS: %s, ABI: %d.%d.%d' % ( - _DESCR_NOTE_ABI_TAG_OS.get(n_desc['abi_os'], _unknown), - n_desc['abi_major'], n_desc['abi_minor'], n_desc['abi_tiny']) - else: - desc = f'\n description data: {bytes(x["n_descdata"]).hex()} ' - elif x['n_type'] == 'NT_GNU_BUILD_ID': - desc = '\n Build ID: %s' % (n_desc) - elif x['n_type'] == 'NT_GNU_GOLD_VERSION': - desc = '\n Version: %s' % (n_desc) - elif x['n_type'] == 'NT_GNU_PROPERTY_TYPE_0': - if x['n_name'] == 'GNU': - desc = '\n Properties: ' + describe_note_gnu_properties(x['n_desc'], machine) - else: - desc = f'\n description data: {bytes(x["n_descdata"]).hex()} ' - else: - desc = f'\n description data: {bytes(n_desc).hex()}' - - if x['n_type'] == 'NT_GNU_ABI_TAG' and x['n_name'] == 'Android': - note_type = 'NT_VERSION' - note_type_desc = 'version' - else: - note_type = (x['n_type'] if isinstance(x['n_type'], str) - else 'Unknown note type:') - note_type_desc = ('0x%.8x' % x['n_type'] - if isinstance(x['n_type'], int) else - _DESCR_NOTE_N_TYPE.get(x['n_type'], _unknown)) - return '%s (%s)%s' % (note_type, note_type_desc, desc) - - -def describe_attr_tag_arm(tag: str, val: Any, extra: str | None) -> str: - s = _DESCR_ATTR_TAG_ARM.get(tag, '"%s"' % tag) - idx = ENUM_ATTR_TAG_ARM[tag] - 1 - d_entry = _DESCR_ATTR_VAL_ARM[idx] - - if d_entry is None: - if tag == 'TAG_COMPATIBILITY': - return s + 'flag = %d, vendor = %s' % (val, extra) - - elif tag == 'TAG_ALSO_COMPATIBLE_WITH': - if val.tag == 'TAG_CPU_ARCH': - d_entry = _DESCR_ATTR_VAL_ARM[5] # TAG_CPU_ARCH - return s + (d_entry.get(val.value) or f'??? ({val.value})') - - else: - return s + '??? (%d)' % val.tag - - elif tag == 'TAG_NODEFAULTS': - return s + 'True' - - s += '"%s"' % val if val else '' - return s - - else: - return s + d_entry[val] - -def describe_attr_tag_riscv(tag: str, val: Any, extra: str) -> str: - idx = ENUM_ATTR_TAG_RISCV[tag] - 1 - d_entry = _DESCR_ATTR_VAL_RISCV[idx] - - if d_entry is None: - s = _DESCR_ATTR_TAG_RISCV[tag] - s += '"%s"' % val if val else '' - return s - - else: - return _DESCR_ATTR_TAG_RISCV[tag] + d_entry[val] - -def describe_note_gnu_property_bitmap_and( - values: Iterable[tuple[int, str]], - prefix: str, - value: int, -) -> str: - descs = [ - desc - for mask, desc in values - if value & mask - ] - return '%s: %s' % (prefix, ', '.join(descs)) - -def describe_note_gnu_properties(properties: list[Container], machine: str) -> str: - descriptions = [] - for prop in properties: - t: str | int = prop.pr_type - d = prop.pr_data - sz: int = prop.pr_datasz - if t == 'GNU_PROPERTY_STACK_SIZE': - if isinstance(d, int): - prop_desc = 'stack size: 0x%x' % d - else: - prop_desc = 'stack size: ' % sz - elif t == 'GNU_PROPERTY_NO_COPY_ON_PROTECTED': - if sz != 0: - prop_desc = ' ' % sz - else: - prop_desc = 'no copy on protected' - elif t == 'GNU_PROPERTY_X86_FEATURE_1_AND': - if sz != 4: - prop_desc = ' ' % sz - else: - prop_desc = describe_note_gnu_property_bitmap_and(_DESCR_NOTE_GNU_PROPERTY_X86_FEATURE_1_FLAGS, 'x86 feature', d) - elif t == 'GNU_PROPERTY_X86_FEATURE_2_USED': - if sz != 4: - prop_desc = ' ' % sz - else: - prop_desc = describe_note_gnu_property_bitmap_and(_DESCR_NOTE_GNU_PROPERTY_X86_FEATURE_2_FLAGS, 'x86 feature used', d) - elif t == 'GNU_PROPERTY_X86_ISA_1_NEEDED': - if sz != 4: - prop_desc = ' ' % sz - else: - prop_desc = describe_note_gnu_property_bitmap_and(_DESCR_NOTE_GNU_PROPERTY_X86_ISA_1_FLAGS, 'x86 ISA needed', d) - elif t == 'GNU_PROPERTY_X86_ISA_1_USED': - if sz != 4: - prop_desc = ' ' % sz - else: - prop_desc = describe_note_gnu_property_bitmap_and(_DESCR_NOTE_GNU_PROPERTY_X86_ISA_1_FLAGS, 'x86 ISA used', d) - elif t == 'GNU_PROPERTY_AARCH64_FEATURE_1_AND' and machine == 'EM_AARCH64': - if sz != 4: - prop_desc = ' ' % sz - else: - prop_desc = describe_note_gnu_property_bitmap_and(_DESCR_NOTE_GNU_PROPERTY_AARCH64_FEATURE_1_AND, 'aarch64 feature', d) - elif t == 'GNU_PROPERTY_AARCH64_FEATURE_1_AND' and machine == 'EM_RISCV': - # RISC-V shares the same bit-mask with AArch64 - if sz != 4: - prop_desc = ' ' % sz - else: - prop_desc = describe_note_gnu_property_bitmap_and(_DESCR_NOTE_GNU_PROPERTY_RISCV_FEATURE_1_AND, 'RISC-V AND feature', d) - elif isinstance(t, int): - if _DESCR_NOTE_GNU_PROPERTY_TYPE_LOPROC <= t <= _DESCR_NOTE_GNU_PROPERTY_TYPE_HIPROC: - prop_desc = f"" - elif _DESCR_NOTE_GNU_PROPERTY_TYPE_LOUSER <= t <= _DESCR_NOTE_GNU_PROPERTY_TYPE_HIUSER: - prop_desc = f"" - else: - prop_desc = f"" - else: - prop_desc = f"" - descriptions.append(prop_desc) - return '\n '.join(descriptions) - -#------------------------------------------------------------------------------- -_unknown: str = '' - - -_DESCR_EI_CLASS = dict( - ELFCLASSNONE='none', - ELFCLASS32='ELF32', - ELFCLASS64='ELF64', -) - - -_DESCR_EI_DATA = dict( - ELFDATANONE='none', - ELFDATA2LSB="2's complement, little endian", - ELFDATA2MSB="2's complement, big endian", -) - - -_DESCR_EI_OSABI = dict( - ELFOSABI_SYSV='UNIX - System V', - ELFOSABI_HPUX='UNIX - HP-UX', - ELFOSABI_NETBSD='UNIX - NetBSD', - ELFOSABI_LINUX='UNIX - Linux', - ELFOSABI_HURD='UNIX - GNU/Hurd', - ELFOSABI_SOLARIS='UNIX - Solaris', - ELFOSABI_AIX='UNIX - AIX', - ELFOSABI_IRIX='UNIX - IRIX', - ELFOSABI_FREEBSD='UNIX - FreeBSD', - ELFOSABI_TRU64='UNIX - TRU64', - ELFOSABI_MODESTO='Novell - Modesto', - ELFOSABI_OPENBSD='UNIX - OpenBSD', - ELFOSABI_OPENVMS='VMS - OpenVMS', - ELFOSABI_NSK='HP - Non-Stop Kernel', - ELFOSABI_AROS='AROS', - ELFOSABI_FENIXOS='Fenix OS', - ELFOSABI_CLOUD='Nuxi - CloudABI', - ELFOSABI_SORTIX='Sortix', - ELFOSABI_ARM_AEABI='ARM - EABI', - ELFOSABI_ARM='ARM - ABI', - ELFOSABI_CELL_LV2='CellOS Lv-2', - ELFOSABI_STANDALONE='Standalone App', -) - - -_DESCR_E_TYPE = dict( - ET_NONE='NONE (None)', - ET_REL='REL (Relocatable file)', - ET_EXEC='EXEC (Executable file)', - ET_DYN='DYN (Shared object file)', - ET_CORE='CORE (Core file)', - PROC_SPECIFIC='Processor Specific', -) - - -_DESCR_E_MACHINE = dict( - EM_NONE='None', - EM_M32='WE32100', - EM_SPARC='Sparc', - EM_386='Intel 80386', - EM_68K='MC68000', - EM_88K='MC88000', - EM_860='Intel 80860', - EM_MIPS='MIPS R3000', - EM_S370='IBM System/370', - EM_S390='IBM S/390', - EM_MIPS_RS4_BE='MIPS 4000 big-endian', - EM_IA_64='Intel IA-64', - EM_X86_64='Advanced Micro Devices X86-64', - EM_AVR='Atmel AVR 8-bit microcontroller', - EM_ARM='ARM', - EM_AARCH64='AArch64', - EM_BLACKFIN='Analog Devices Blackfin', - EM_PPC='PowerPC', - EM_PPC64='PowerPC64', - EM_RISCV='RISC-V', - EM_LOONGARCH='LoongArch', - RESERVED='RESERVED', -) - - -_DESCR_P_TYPE = dict( - PT_NULL='NULL', - PT_LOAD='LOAD', - PT_DYNAMIC='DYNAMIC', - PT_INTERP='INTERP', - PT_NOTE='NOTE', - PT_SHLIB='SHLIB', - PT_PHDR='PHDR', - PT_GNU_EH_FRAME='GNU_EH_FRAME', - PT_GNU_STACK='GNU_STACK', - PT_GNU_RELRO='GNU_RELRO', - PT_GNU_PROPERTY='GNU_PROPERTY', - PT_ARM_ARCHEXT='ARM_ARCHEXT', - PT_ARM_EXIDX='EXIDX', # binutils calls this EXIDX, not ARM_EXIDX - PT_AARCH64_ARCHEXT='AARCH64_ARCHEXT', - PT_AARCH64_UNWIND='AARCH64_UNWIND', - PT_TLS='TLS', - PT_MIPS_ABIFLAGS='ABIFLAGS', - PT_RISCV_ATTRIBUTES='RISCV_ATTRIBUT', -) - - -_DESCR_P_FLAGS = { - P_FLAGS.PF_X: 'E', - P_FLAGS.PF_R: 'R', - P_FLAGS.PF_W: 'W', -} - - -_DESCR_SH_TYPE = dict( - SHT_NULL='NULL', - SHT_PROGBITS='PROGBITS', - SHT_SYMTAB='SYMTAB', - SHT_STRTAB='STRTAB', - SHT_RELA='RELA', - SHT_HASH='HASH', - SHT_DYNAMIC='DYNAMIC', - SHT_NOTE='NOTE', - SHT_NOBITS='NOBITS', - SHT_REL='REL', - SHT_SHLIB='SHLIB', - SHT_DYNSYM='DYNSYM', - SHT_INIT_ARRAY='INIT_ARRAY', - SHT_FINI_ARRAY='FINI_ARRAY', - SHT_PREINIT_ARRAY='PREINIT_ARRAY', - SHT_GNU_ATTRIBUTES='GNU_ATTRIBUTES', - SHT_GNU_HASH='GNU_HASH', - SHT_GROUP='GROUP', - SHT_SYMTAB_SHNDX='SYMTAB SECTION INDICIES', - SHT_RELR='RELR', - SHT_GNU_verdef='VERDEF', - SHT_GNU_verneed='VERNEED', - SHT_GNU_versym='VERSYM', - SHT_GNU_LIBLIST='GNU_LIBLIST', - SHT_AMD64_UNWIND='X86_64_UNWIND', - SHT_ARM_EXIDX='ARM_EXIDX', - SHT_ARM_PREEMPTMAP='ARM_PREEMPTMAP', - SHT_ARM_ATTRIBUTES='ARM_ATTRIBUTES', - SHT_ARM_DEBUGOVERLAY='ARM_DEBUGOVERLAY', - SHT_AARCH64_ATTRIBUTES='AARCH64_ATTRIBUTES', - SHT_RISCV_ATTRIBUTES='RISCV_ATTRIBUTES', - SHT_MIPS_LIBLIST='MIPS_LIBLIST', - SHT_MIPS_DEBUG='MIPS_DEBUG', - SHT_MIPS_REGINFO='MIPS_REGINFO', - SHT_MIPS_PACKAGE='MIPS_PACKAGE', - SHT_MIPS_PACKSYM='MIPS_PACKSYM', - SHT_MIPS_RELD='MIPS_RELD', - SHT_MIPS_IFACE='MIPS_IFACE', - SHT_MIPS_CONTENT='MIPS_CONTENT', - SHT_MIPS_OPTIONS='MIPS_OPTIONS', - SHT_MIPS_SHDR='MIPS_SHDR', - SHT_MIPS_FDESC='MIPS_FDESC', - SHT_MIPS_EXTSYM='MIPS_EXTSYM', - SHT_MIPS_DENSE='MIPS_DENSE', - SHT_MIPS_PDESC='MIPS_PDESC', - SHT_MIPS_LOCSYM='MIPS_LOCSYM', - SHT_MIPS_AUXSYM='MIPS_AUXSYM', - SHT_MIPS_OPTSYM='MIPS_OPTSYM', - SHT_MIPS_LOCSTR='MIPS_LOCSTR', - SHT_MIPS_LINE='MIPS_LINE', - SHT_MIPS_RFDESC='MIPS_RFDESC', - SHT_MIPS_DELTASYM='MIPS_DELTASYM', - SHT_MIPS_DELTAINST='MIPS_DELTAINST', - SHT_MIPS_DELTACLASS='MIPS_DELTACLASS', - SHT_MIPS_DWARF='MIPS_DWARF', - SHT_MIPS_DELTADECL='MIPS_DELTADECL', - SHT_MIPS_SYMBOL_LIB='MIPS_SYMBOL_LIB', - SHT_MIPS_EVENTS='MIPS_EVENTS', - SHT_MIPS_TRANSLATE='MIPS_TRANSLATE', - SHT_MIPS_PIXIE='MIPS_PIXIE', - SHT_MIPS_XLATE='MIPS_XLATE', - SHT_MIPS_XLATE_DEBUG='MIPS_XLATE_DEBUG', - SHT_MIPS_WHIRL='MIPS_WHIRL', - SHT_MIPS_EH_REGION='MIPS_EH_REGION', - SHT_MIPS_XLATE_OLD='MIPS_XLATE_OLD', - SHT_MIPS_PDR_EXCEPTION='MIPS_PDR_EXCEPTION', - SHT_MIPS_ABIFLAGS='MIPS_ABIFLAGS', -) - - -_DESCR_SH_FLAGS = { - SH_FLAGS.SHF_WRITE: 'W', - SH_FLAGS.SHF_ALLOC: 'A', - SH_FLAGS.SHF_EXECINSTR: 'X', - SH_FLAGS.SHF_MERGE: 'M', - SH_FLAGS.SHF_STRINGS: 'S', - SH_FLAGS.SHF_INFO_LINK: 'I', - SH_FLAGS.SHF_LINK_ORDER: 'L', - SH_FLAGS.SHF_OS_NONCONFORMING: 'O', - SH_FLAGS.SHF_GROUP: 'G', - SH_FLAGS.SHF_TLS: 'T', - SH_FLAGS.SHF_MASKOS: 'o', - SH_FLAGS.SHF_EXCLUDE: 'E', -} - - -_DESCR_RH_FLAGS = { - RH_FLAGS.RHF_NONE: 'NONE', - RH_FLAGS.RHF_QUICKSTART: 'QUICKSTART', - RH_FLAGS.RHF_NOTPOT: 'NOTPOT', - RH_FLAGS.RHF_NO_LIBRARY_REPLACEMENT: 'NO_LIBRARY_REPLACEMENT', - RH_FLAGS.RHF_NO_MOVE: 'NO_MOVE', - RH_FLAGS.RHF_SGI_ONLY: 'SGI_ONLY', - RH_FLAGS.RHF_GUARANTEE_INIT: 'GUARANTEE_INIT', - RH_FLAGS.RHF_DELTA_C_PLUS_PLUS: 'DELTA_C_PLUS_PLUS', - RH_FLAGS.RHF_GUARANTEE_START_INIT: 'GUARANTEE_START_INIT', - RH_FLAGS.RHF_PIXIE: 'PIXIE', - RH_FLAGS.RHF_DEFAULT_DELAY_LOAD: 'DEFAULT_DELAY_LOAD', - RH_FLAGS.RHF_REQUICKSTART: 'REQUICKSTART', - RH_FLAGS.RHF_REQUICKSTARTED: 'REQUICKSTARTED', - RH_FLAGS.RHF_CORD: 'CORD', - RH_FLAGS.RHF_NO_UNRES_UNDEF: 'NO_UNRES_UNDEF', - RH_FLAGS.RHF_RLD_ORDER_SAFE: 'RLD_ORDER_SAFE', -} - - -_DESCR_ST_INFO_TYPE = dict( - STT_NOTYPE='NOTYPE', - STT_OBJECT='OBJECT', - STT_FUNC='FUNC', - STT_SECTION='SECTION', - STT_FILE='FILE', - STT_COMMON='COMMON', - STT_TLS='TLS', - STT_NUM='NUM', - STT_RELC='RELC', - STT_SRELC='SRELC', -) - - -_DESCR_ST_INFO_BIND = dict( - STB_LOCAL='LOCAL', - STB_GLOBAL='GLOBAL', - STB_WEAK='WEAK', -) - - -_DESCR_ST_VISIBILITY = dict( - STV_DEFAULT='DEFAULT', - STV_INTERNAL='INTERNAL', - STV_HIDDEN='HIDDEN', - STV_PROTECTED='PROTECTED', - STV_EXPORTED='EXPORTED', - STV_SINGLETON='SINGLETON', - STV_ELIMINATE='ELIMINATE', -) - - -_DESCR_ST_SHNDX = dict( - SHN_UNDEF='UND', - SHN_ABS='ABS', - SHN_COMMON='COM', -) - - -_DESCR_SYMINFO_FLAGS = { - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECT: 'D', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DIRECTBIND: 'B', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_COPY: 'C', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_LAZYLOAD: 'L', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_NOEXTDIRECT: 'N', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_AUXILIARY: 'A', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_FILTER: 'F', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_INTERPOSE: 'I', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_CAP: 'S', - SUNW_SYMINFO_FLAGS.SYMINFO_FLG_DEFERRED: 'P', -} - - -_DESCR_SYMINFO_BOUNDTO = dict( - SYMINFO_BT_SELF='', - SYMINFO_BT_PARENT='', - SYMINFO_BT_NONE='', - SYMINFO_BT_EXTERN='', -) - - -_DESCR_VER_FLAGS = { - 0: '', - VER_FLAGS.VER_FLG_BASE: 'BASE', - VER_FLAGS.VER_FLG_WEAK: 'WEAK', - VER_FLAGS.VER_FLG_INFO: 'INFO', -} - - -# PT_NOTE section types -_DESCR_NOTE_N_TYPE = dict( - NT_GNU_ABI_TAG='ABI version tag', - NT_GNU_HWCAP='DSO-supplied software HWCAP info', - NT_GNU_BUILD_ID='unique build ID bitstring', - NT_GNU_GOLD_VERSION='gold version', - NT_GNU_PROPERTY_TYPE_0='program properties' -) - - -# Values in GNU .note.ABI-tag notes (n_type=='NT_GNU_ABI_TAG') -_DESCR_NOTE_ABI_TAG_OS = dict( - ELF_NOTE_OS_LINUX='Linux', - ELF_NOTE_OS_GNU='GNU', - ELF_NOTE_OS_SOLARIS2='Solaris 2', - ELF_NOTE_OS_FREEBSD='FreeBSD', - ELF_NOTE_OS_NETBSD='NetBSD', - ELF_NOTE_OS_SYLLABLE='Syllable', -) - - -# Values in GNU .note.gnu.property notes (n_type=='NT_GNU_PROPERTY_TYPE_0') have -# different formats which need to be parsed/described differently -_DESCR_NOTE_GNU_PROPERTY_TYPE_LOPROC=0xc0000000 -_DESCR_NOTE_GNU_PROPERTY_TYPE_HIPROC=0xdfffffff -_DESCR_NOTE_GNU_PROPERTY_TYPE_LOUSER=0xe0000000 -_DESCR_NOTE_GNU_PROPERTY_TYPE_HIUSER=0xffffffff - - -# Bit masks for GNU_PROPERTY_X86_FEATURE_1_xxx flags in the form -# (mask, flag_description) in the desired output order -_DESCR_NOTE_GNU_PROPERTY_X86_FEATURE_1_FLAGS = ( - (1, 'IBT'), - (2, 'SHSTK'), - (4, 'LAM_U48'), - (8, 'LAM_U57'), -) - -# Bit masks for GNU_PROPERTY_X86_FEATURE_2_xxx flags in the form -# (mask, flag_description) in the desired output order -_DESCR_NOTE_GNU_PROPERTY_X86_FEATURE_2_FLAGS = ( - (1, 'x86'), - (2, 'x87'), - (4, 'MMX'), - (8, 'XMM'), - (16, 'YMM'), - (32, 'ZMM'), -) - -# Same for GNU_PROPERTY_X86_SET_1_xxx -_DESCR_NOTE_GNU_PROPERTY_X86_ISA_1_FLAGS = ( - (1, 'x86-64-baseline'), - # TODO; there is a long list -) - -# Same for GNU_PROPERTY_AARCH64_FEATURE_1_AND -_DESCR_NOTE_GNU_PROPERTY_AARCH64_FEATURE_1_AND = ( - (1, 'bti'), - (2, 'pac'), -) - -_DESCR_NOTE_GNU_PROPERTY_RISCV_FEATURE_1_AND = ( - (1, 'ZICFILP'), - (2, 'ZICFISS'), -) - -def _reverse_dict(d: Mapping[_K, _V], low_priority: TContainer[_K] = ()) -> dict[_V, _K]: - """ - This is a tiny helper function to "reverse" the keys/values of a dictionary - provided in the first argument, i.e. {k: v} becomes {v: k}. - - The second argument (optional) provides primitive control over what to do in - the case of conflicting values - if a value is present in this list, it will - not override any other entries of the same value. - """ - out: dict[_V, _K] = {} - for k, v in d.items(): - if v in out and k in low_priority: - continue - out[v] = k - return out - -_DESCR_RELOC_TYPE_i386 = _reverse_dict(ENUM_RELOC_TYPE_i386) -_DESCR_RELOC_TYPE_x64 = _reverse_dict(ENUM_RELOC_TYPE_x64) -_DESCR_RELOC_TYPE_ARM = _reverse_dict(ENUM_RELOC_TYPE_ARM) -_DESCR_RELOC_TYPE_AARCH64 = _reverse_dict(ENUM_RELOC_TYPE_AARCH64) -_DESCR_RELOC_TYPE_PPC64 = _reverse_dict(ENUM_RELOC_TYPE_PPC64) -_DESCR_RELOC_TYPE_PPC = _reverse_dict(ENUM_RELOC_TYPE_PPC) -_DESCR_RELOC_TYPE_S390X = _reverse_dict(ENUM_RELOC_TYPE_S390X) -_DESCR_RELOC_TYPE_MIPS = _reverse_dict(ENUM_RELOC_TYPE_MIPS) -_DESCR_RELOC_TYPE_LOONGARCH = _reverse_dict(ENUM_RELOC_TYPE_LOONGARCH) - -_low_priority_D_TAG = ( - # these are 'meta-tags' marking semantics of numeric ranges of the enum - # they should not override other tags with the same numbers - # see https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-42444.html - 'DT_LOOS', - 'DT_HIOS', - 'DT_LOPROC', - 'DT_HIPROC', - 'DT_ENCODING', -) -_DESCR_D_TAG = _reverse_dict(ENUM_D_TAG, low_priority=_low_priority_D_TAG) - -_DESCR_ATTR_TAG_ARM = dict( - TAG_FILE='File Attributes', - TAG_SECTION='Section Attributes:', - TAG_SYMBOL='Symbol Attributes:', - TAG_CPU_RAW_NAME='Tag_CPU_raw_name: ', - TAG_CPU_NAME='Tag_CPU_name: ', - TAG_CPU_ARCH='Tag_CPU_arch: ', - TAG_CPU_ARCH_PROFILE='Tag_CPU_arch_profile: ', - TAG_ARM_ISA_USE='Tag_ARM_ISA_use: ', - TAG_THUMB_ISA_USE='Tag_THUMB_ISA_use: ', - TAG_FP_ARCH='Tag_FP_arch: ', - TAG_WMMX_ARCH='Tag_WMMX_arch: ', - TAG_ADVANCED_SIMD_ARCH='Tag_Advanced_SIMD_arch: ', - TAG_PCS_CONFIG='Tag_PCS_config: ', - TAG_ABI_PCS_R9_USE='Tag_ABI_PCS_R9_use: ', - TAG_ABI_PCS_RW_DATA='Tag_ABI_PCS_RW_data: ', - TAG_ABI_PCS_RO_DATA='Tag_ABI_PCS_RO_data: ', - TAG_ABI_PCS_GOT_USE='Tag_ABI_PCS_GOT_use: ', - TAG_ABI_PCS_WCHAR_T='Tag_ABI_PCS_wchar_t: ', - TAG_ABI_FP_ROUNDING='Tag_ABI_FP_rounding: ', - TAG_ABI_FP_DENORMAL='Tag_ABI_FP_denormal: ', - TAG_ABI_FP_EXCEPTIONS='Tag_ABI_FP_exceptions: ', - TAG_ABI_FP_USER_EXCEPTIONS='Tag_ABI_FP_user_exceptions: ', - TAG_ABI_FP_NUMBER_MODEL='Tag_ABI_FP_number_model: ', - TAG_ABI_ALIGN_NEEDED='Tag_ABI_align_needed: ', - TAG_ABI_ALIGN_PRESERVED='Tag_ABI_align_preserved: ', - TAG_ABI_ENUM_SIZE='Tag_ABI_enum_size: ', - TAG_ABI_HARDFP_USE='Tag_ABI_HardFP_use: ', - TAG_ABI_VFP_ARGS='Tag_ABI_VFP_args: ', - TAG_ABI_WMMX_ARGS='Tag_ABI_WMMX_args: ', - TAG_ABI_OPTIMIZATION_GOALS='Tag_ABI_optimization_goals: ', - TAG_ABI_FP_OPTIMIZATION_GOALS='Tag_ABI_FP_optimization_goals: ', - TAG_COMPATIBILITY='Tag_compatibility: ', - TAG_CPU_UNALIGNED_ACCESS='Tag_CPU_unaligned_access: ', - TAG_FP_HP_EXTENSION='Tag_FP_HP_extension: ', - TAG_ABI_FP_16BIT_FORMAT='Tag_ABI_FP_16bit_format: ', - TAG_MPEXTENSION_USE='Tag_MPextension_use: ', - TAG_DIV_USE='Tag_DIV_use: ', - TAG_NODEFAULTS='Tag_nodefaults: ', - TAG_ALSO_COMPATIBLE_WITH='Tag_also_compatible_with: ', - TAG_T2EE_USE='Tag_T2EE_use: ', - TAG_CONFORMANCE='Tag_conformance: ', - TAG_VIRTUALIZATION_USE='Tag_Virtualization_use: ', - TAG_MPEXTENSION_USE_OLD='Tag_MPextension_use_old: ', -) - -_DESCR_ATTR_VAL_ARM: Final = ( - None, #1 - None, #2 - None, #3 - None, #4 - None, #5 - { #6 TAG_CPU_ARCH - 0 : 'Pre-v4', - 1 : 'v4', - 2 : 'v4T', - 3 : 'v5T', - 4 : 'v5TE', - 5 : 'v5TEJ', - 6 : 'v6', - 7 : 'v6KZ', - 8 : 'v6T2', - 9 : 'v6K', - 10: 'v7', - 11: 'v6-M', - 12: 'v6S-M', - 13: 'v7E-M', - 14: 'v8', - 15: 'v8-R', - 16: 'v8-M.baseline', - 17: 'v8-M.mainline', - }, - { #7 TAG_CPU_ARCH_PROFILE - 0x00: 'None', - 0x41: 'Application', - 0x52: 'Realtime', - 0x4D: 'Microcontroller', - 0x53: 'Application or Realtime', - }, - { #8 TAG_ARM_ISA - 0: 'No', - 1: 'Yes', - }, - { #9 TAG_THUMB_ISA - 0: 'No', - 1: 'Thumb-1', - 2: 'Thumb-2', - 3: 'Yes', - }, - { #10 TAG_FP_ARCH - 0: 'No', - 1: 'VFPv1', - 2: 'VFPv2 ', - 3: 'VFPv3', - 4: 'VFPv3-D16', - 5: 'VFPv4', - 6: 'VFPv4-D16', - 7: 'FP ARM v8', - 8: 'FPv5/FP-D16 for ARMv8', - }, - { #11 TAG_WMMX_ARCH - 0: 'No', - 1: 'WMMXv1', - 2: 'WMMXv2', - }, - { #12 TAG_ADVANCED_SIMD_ARCH - 0: 'No', - 1: 'NEONv1', - 2: 'NEONv1 with Fused-MAC', - 3: 'NEON for ARMv8', - 4: 'NEON for ARMv8.1', - }, - { #13 TAG_PCS_CONFIG - 0: 'None', - 1: 'Bare platform', - 2: 'Linux application', - 3: 'Linux DSO', - 4: 'PalmOS 2004', - 5: 'PalmOS (reserved)', - 6: 'SymbianOS 2004', - 7: 'SymbianOS (reserved)', - }, - { #14 TAG_ABI_PCS_R9_USE - 0: 'v6', - 1: 'SB', - 2: 'TLS', - 3: 'Unused', - }, - { #15 TAG_ABI_PCS_RW_DATA - 0: 'Absolute', - 1: 'PC-relative', - 2: 'SB-relative', - 3: 'None', - }, - { #16 TAG_ABI_PCS_RO_DATA - 0: 'Absolute', - 1: 'PC-relative', - 2: 'None', - }, - { #17 TAG_ABI_PCS_GOT_USE - 0: 'None', - 1: 'direct', - 2: 'GOT-indirect', - }, - { #18 TAG_ABI_PCS_WCHAR_T - 0: 'None', - 1: '??? 1', - 2: '2', - 3: '??? 3', - 4: '4', - }, - { #19 TAG_ABI_FP_ROUNDING - 0: 'Unused', - 1: 'Needed', - }, - { #20 TAG_ABI_FP_DENORMAL - 0: 'Unused', - 1: 'Needed', - 2: 'Sign only', - }, - { #21 TAG_ABI_FP_EXCEPTIONS - 0: 'Unused', - 1: 'Needed', - }, - { #22 TAG_ABI_FP_USER_EXCEPTIONS - 0: 'Unused', - 1: 'Needed', - }, - { #23 TAG_ABI_FP_NUMBER_MODEL - 0: 'Unused', - 1: 'Finite', - 2: 'RTABI', - 3: 'IEEE 754', - }, - { #24 TAG_ABI_ALIGN_NEEDED - 0: 'None', - 1: '8-byte', - 2: '4-byte', - 3: '??? 3', - }, - { #25 TAG_ABI_ALIGN_PRESERVED - 0: 'None', - 1: '8-byte, except leaf SP', - 2: '8-byte', - 3: '??? 3', - }, - { #26 TAG_ABI_ENUM_SIZE - 0: 'Unused', - 1: 'small', - 2: 'int', - 3: 'forced to int', - }, - { #27 TAG_ABI_HARDFP_USE - 0: 'As Tag_FP_arch', - 1: 'SP only', - 2: 'Reserved', - 3: 'Deprecated', - }, - { #28 TAG_ABI_VFP_ARGS - 0: 'AAPCS', - 1: 'VFP registers', - 2: 'custom', - 3: 'compatible', - }, - { #29 TAG_ABI_WMMX_ARGS - 0: 'AAPCS', - 1: 'WMMX registers', - 2: 'custom', - }, - { #30 TAG_ABI_OPTIMIZATION_GOALS - 0: 'None', - 1: 'Prefer Speed', - 2: 'Aggressive Speed', - 3: 'Prefer Size', - 4: 'Aggressive Size', - 5: 'Prefer Debug', - 6: 'Aggressive Debug', - }, - { #31 TAG_ABI_FP_OPTIMIZATION_GOALS - 0: 'None', - 1: 'Prefer Speed', - 2: 'Aggressive Speed', - 3: 'Prefer Size', - 4: 'Aggressive Size', - 5: 'Prefer Accuracy', - 6: 'Aggressive Accuracy', - }, - None, #32 TAG_COMPATIBILITY - None, #33 - { #34 TAG_CPU_UNALIGNED_ACCESS - 0: 'None', - 1: 'v6', - }, - None, #35 - { #36 TAG_FP_HP_EXTENSION - 0: 'Not Allowed', - 1: 'Allowed', - }, - None, #37 - { #38 TAG_ABI_FP_16BIT_FORMAT - 0: 'None', - 1: 'IEEE 754', - 2: 'Alternative Format', - }, - None, #39 - None, #40 - None, #41 - { #42 TAG_MPEXTENSION_USE - 0: 'Not Allowed', - 1: 'Allowed', - }, - None, #43 - { #44 TAG_DIV_USE - 0: 'Allowed in Thumb-ISA, v7-R or v7-M', - 1: 'Not allowed', - 2: 'Allowed in v7-A with integer division extension', - }, - None, #45 - None, #46 - None, #47 - None, #48 - None, #49 - None, #50 - None, #51 - None, #52 - None, #53 - None, #54 - None, #55 - None, #56 - None, #57 - None, #58 - None, #59 - None, #60 - None, #61 - None, #62 - None, #63 - None, #64 - None, #65 - { #66 TAG_FP_HP_EXTENSION - 0: 'Not Allowed', - 1: 'Allowed', - }, - None, #67 - { #68 TAG_VIRTUALIZATION_USE - 0: 'Not Allowed', - 1: 'TrustZone', - 2: 'Virtualization Extensions', - 3: 'TrustZone and Virtualization Extensions', - }, - None, #69 - { #70 TAG_MPEXTENSION_USE_OLD - 0: 'Not Allowed', - 1: 'Allowed', - }, -) - -_DESCR_ATTR_TAG_RISCV = dict( - TAG_FILE='File Attributes', - TAG_SECTION='Section Attributes:', - TAG_SYMBOL='Symbol Attributes:', - TAG_STACK_ALIGN='Tag_RISCV_stack_align: ', - TAG_ARCH='Tag_RISCV_arch: ', - TAG_UNALIGNED='Tag_RISCV_unaligned_access: ', - TAG_PRIV_SPEC='Tag_RISCV_priv_spec: ', - TAG_PRIV_SPEC_MINOR='Tag_RISCV_priv_spec_minor: ', - TAG_PRIV_SPEC_REVISION='Tag_RISCV_priv_spec_revision: ', - TAG_ATOMIC_ABI='Tag_RISCV_atomic_abi: ', - TAG_X3_REG_USAGE='Tag_RISCV_x3_reg_usage: ', -) - -_DESCR_ATTR_VAL_RISCV: Final = ( - None, #1 - None, #2 - None, #3 - { #4 TAG_RISCV_stack_align - 4: '4-bytes', - 16: '16-bytes', - }, - None, #5 TAG_RISCV_arch - { #6 TAG_RISCV_unaligned_access - 0: 'Not Allowed', - 1: 'Allowed', - }, - None, #8 TAG_RISCV_priv_spec - None, #10 TAG_RISCV_priv_spec_minor - None, #12 TAG_RISCV_priv_spec_revision - { #14 TAG_RISCV_atomic_abi - 0: 'UNKNOWN: This object uses unknown atomic ABI.', - 1: 'A6C: This object uses the A6 classical atomic ABI.', - 2: 'A6S: This object uses the strengthened A6 ABI.', - 3: 'A7: This object uses the A7 atomic ABI.' - }, - { #16 TAG_RISCV_x3_reg_usage - 0: 'This object uses x3 as a fixed register with unknown purpose.', - 1: 'This object uses x3 as the global pointer, for relaxation purposes.', - 2: 'This object uses x3 as the shadow stack pointer.', - 3: 'This object uses X3 as a temporary register.', - }, -) diff --git a/.tools/python-revlibs/elftools/elf/dynamic.py b/.tools/python-revlibs/elftools/elf/dynamic.py deleted file mode 100644 index ed55d5e..0000000 --- a/.tools/python-revlibs/elftools/elf/dynamic.py +++ /dev/null @@ -1,402 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/dynamic.py -# -# ELF Dynamic Tags -# -# Mike Frysinger (vapier@gentoo.org) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import itertools -from collections import defaultdict -from functools import cached_property -from typing import IO, TYPE_CHECKING, Any, Protocol, TypedDict, cast, runtime_checkable - -from ..common.exceptions import ELFError -from ..common.utils import elf_assert, struct_parse, parse_cstring_from_stream -from .enums import ENUM_D_TAG -from .hash import ELFHashTable, GNUHashTable -from .relocation import RelocationTable, RelrRelocationTable -from .sections import Section, Symbol -from .segments import Segment - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct.lib.container import Container - from .elffile import ELFFile - - -class RelocationTables(TypedDict, total=False): - REL: RelocationTable - RELA: RelocationTable - RELR: RelrRelocationTable - JMPREL: RelocationTable - - -@runtime_checkable -class _StringTable(Protocol): - """Common base-class of elftools.elf.dynamic._DynamicStringTable and - elftools.elf.section.StringTableSection to be consumed by - DynamicTag|Dynamic. - Requires @runtime_checkable as `assert isinstance(…, _StringTable)` is - used.""" - def get_string(self, offset: int, /) -> str: ... - - -class _DynamicStringTable: - """ Bare string table based on values found via ELF dynamic tags and - loadable segments only. Good enough for get_string() only. - """ - def __init__(self, stream: IO[bytes], table_offset: int) -> None: - self._stream = stream - self._table_offset = table_offset - - def get_string(self, offset: int) -> str: - """ Get the string stored at the given offset in this string table. - """ - s = parse_cstring_from_stream(self._stream, self._table_offset + offset) - return s.decode('utf-8') if s else '' - - -class DynamicTag: - """ Dynamic Tag object - representing a single dynamic tag entry from a - dynamic section. - - Allows dictionary-like access to the dynamic structure. For special - tags (those listed in the _HANDLED_TAGS set below), creates additional - attributes for convenience. For example, .soname will contain the actual - value of DT_SONAME (fetched from the dynamic symbol table). - """ - _HANDLED_TAGS = frozenset( - ['DT_NEEDED', 'DT_RPATH', 'DT_RUNPATH', 'DT_SONAME', - 'DT_SUNW_FILTER']) - - def __init__( - self, - entry: Container, - stringtable: _StringTable | None, - ) -> None: - if stringtable is None: - raise ELFError('Creating DynamicTag without string table') - self.entry = entry - if entry.d_tag in self._HANDLED_TAGS: - setattr(self, entry.d_tag[3:].lower(), - stringtable.get_string(self.entry.d_val)) - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to entries - """ - return self.entry[name] - - def __repr__(self) -> str: - return '' % (self.entry.d_tag, self.entry) - - def __str__(self) -> str: - if self.entry.d_tag in self._HANDLED_TAGS: - s = '"%s"' % getattr(self, self.entry.d_tag[3:].lower()) - else: - s = '%#x' % self.entry.d_ptr - return '' % (self.entry.d_tag, s) - - -class Dynamic: - """ Shared functionality between dynamic sections and segments. - """ - def __init__( - self, - stream: IO[bytes], - elffile: ELFFile, - stringtable: _StringTable | Section | None, - position: int, - empty: bool, - ) -> None: - """ - stream: - The file-like object from which to load data - - elffile: - The parent elffile object - - stringtable: - A stringtable reference to use for parsing string references in - entries - - position: - The file offset of the dynamic segment/section - - empty: - Whether this is a degenerate case with zero entries. Normally, every - dynamic table will have at least one entry, the DT_NULL terminator. - """ - self.elffile = elffile - self.elfstructs = elffile.structs - self._stream = stream - self._num_tags = -1 if not empty else 0 - self._offset = position - self._tagsize = self.elfstructs.Elf_Dyn.sizeof() - self._empty = empty - - # Do not access this directly yourself; use _get_stringtable() instead. - self._stringtable: _StringTable | Section | None = stringtable - - def get_table_offset(self, tag_name: str) -> tuple[int | None, int | None]: - """ Return the virtual address and file offset of a dynamic table. - """ - try: - ptr: int = next( - tag['d_ptr'] - for tag in self._iter_tags(type=tag_name) - ) - except StopIteration: - return (None, None) - - # If we found a virtual address, locate the offset in the file - # by using the program headers. - offset = next(self.elffile.address_offsets(ptr), None) - - return ptr, offset - - def _get_stringtable(self) -> _StringTable: - """ Return a string table for looking up dynamic tag related strings. - - This won't be a "full" string table object, but will at least - support the get_string() function. - """ - if self._stringtable: - assert isinstance(self._stringtable, _StringTable) - return self._stringtable - - # If the ELF has stripped its section table (which is unusual, but - # perfectly valid), we need to use the dynamic tags to locate the - # dynamic string table. - _, table_offset = self.get_table_offset('DT_STRTAB') - if table_offset is not None: - self._stringtable = _DynamicStringTable(self._stream, table_offset) - assert isinstance(self._stringtable, _StringTable) - return self._stringtable - - # That didn't work for some reason. Let's use the section header - # even though this ELF is super weird. - self._stringtable = self.elffile.get_section_by_name('.dynstr') - assert isinstance(self._stringtable, _StringTable) - return self._stringtable - - def _iter_tags(self, type: str | None = None) -> Iterator[Container]: - """ Yield all raw tags (limit to |type| if specified) - """ - if self._empty: - return - for n in itertools.count(): - tag = self._get_tag(n) - if type is None or tag['d_tag'] == type: - yield tag - if tag['d_tag'] == 'DT_NULL': - break - - def iter_tags(self, type: str | None = None) -> Iterator[DynamicTag]: - """ Yield all tags (limit to |type| if specified) - """ - for tag in self._iter_tags(type=type): - yield DynamicTag(tag, self._get_stringtable()) - - def _get_tag(self, n: int) -> Container: - """ Get the raw tag at index #n from the file - """ - if self._num_tags != -1 and n >= self._num_tags: - raise IndexError(n) - offset = self._offset + n * self._tagsize - return struct_parse( - self.elfstructs.Elf_Dyn, - self._stream, - stream_pos=offset) - - def get_tag(self, n: int) -> DynamicTag: - """ Get the tag at index #n from the file (DynamicTag object) - """ - return DynamicTag(self._get_tag(n), self._get_stringtable()) - - def num_tags(self) -> int | None: - """ Number of dynamic tags in the file, including the DT_NULL tag - """ - if self._num_tags != -1: - return self._num_tags - - for n in itertools.count(): - tag = self.get_tag(n) - if tag.entry.d_tag == 'DT_NULL': - self._num_tags = n + 1 - return self._num_tags - - return None - - def get_relocation_tables(self) -> RelocationTables: - """ Load all available relocation tables from DYNAMIC tags. - - Returns a dictionary mapping found table types (REL, RELA, - RELR, JMPREL) to RelocationTable objects. - """ - - result: RelocationTables = {} - - if list(self.iter_tags('DT_REL')): - result['REL'] = RelocationTable(self.elffile, - self.get_table_offset('DT_REL')[1], # type: ignore[arg-type] # ty: ignore[invalid-argument-type] - next(self.iter_tags('DT_RELSZ'))['d_val'], False) - - relentsz = next(self.iter_tags('DT_RELENT'))['d_val'] - elf_assert(result['REL'].entry_size == relentsz, - 'Expected DT_RELENT to be %s' % relentsz) - - if list(self.iter_tags('DT_RELA')): - result['RELA'] = RelocationTable(self.elffile, - self.get_table_offset('DT_RELA')[1], # type: ignore[arg-type] # ty: ignore[invalid-argument-type] - next(self.iter_tags('DT_RELASZ'))['d_val'], True) - - relentsz = next(self.iter_tags('DT_RELAENT'))['d_val'] - elf_assert(result['RELA'].entry_size == relentsz, - 'Expected DT_RELAENT to be %s' % relentsz) - - if list(self.iter_tags('DT_RELR')): - result['RELR'] = RelrRelocationTable(self.elffile, - self.get_table_offset('DT_RELR')[1], # type: ignore[arg-type] # ty: ignore[invalid-argument-type] - next(self.iter_tags('DT_RELRSZ'))['d_val'], - next(self.iter_tags('DT_RELRENT'))['d_val']) - - if list(self.iter_tags('DT_JMPREL')): - result['JMPREL'] = RelocationTable(self.elffile, - self.get_table_offset('DT_JMPREL')[1], # type: ignore[arg-type] # ty: ignore[invalid-argument-type] - next(self.iter_tags('DT_PLTRELSZ'))['d_val'], - next(self.iter_tags('DT_PLTREL'))['d_val'] == ENUM_D_TAG['DT_RELA']) - - return result - - -class DynamicSection(Section, Dynamic): - """ ELF dynamic table section. Knows how to process the list of tags. - """ - def __init__(self, header: Container, name: str, elffile: ELFFile) -> None: - Section.__init__(self, header, name, elffile) - stringtable = elffile.get_section(header['sh_link'], ('SHT_STRTAB', 'SHT_NOBITS', 'SHT_NULL')) - Dynamic.__init__(self, self.stream, self.elffile, stringtable, - self['sh_offset'], self['sh_type'] == 'SHT_NOBITS') - - -class DynamicSegment(Segment, Dynamic): - """ ELF dynamic table segment. Knows how to process the list of tags. - """ - def __init__(self, header: Container, stream: IO[bytes], elffile: ELFFile) -> None: - # The string table section to be used to resolve string names in - # the dynamic tag array is the one pointed at by the sh_link field - # of the dynamic section header. - # So we must look for the dynamic section contained in the dynamic - # segment, we do so by searching for the dynamic section whose content - # is located at the same offset as the dynamic segment - stringtable = next( - ( - elffile.get_section(section['sh_link']) - for section in elffile.iter_sections() - if isinstance(section, DynamicSection) and section['sh_offset'] == header['p_offset'] - ), - None, - ) - Segment.__init__(self, header, stream) - Dynamic.__init__(self, stream, elffile, stringtable, self['p_offset'], - self['p_filesz'] == 0) - self._symbol_size = self.elfstructs.Elf_Sym.sizeof() - - def num_symbols(self) -> int: - """ Number of symbols in the table recovered from DT_SYMTAB - """ - return self._num_symbols - - @cached_property - def _num_symbols(self) -> int: - # Check if a DT_GNU_HASH tag exists and recover the number of symbols - # from the corresponding hash table - _, gnu_hash_offset = self.get_table_offset('DT_GNU_HASH') - if gnu_hash_offset is not None: - gnu_hash_section = GNUHashTable(self.elffile, gnu_hash_offset, self) - return gnu_hash_section.get_number_of_symbols() - - # If DT_GNU_HASH did not exist, maybe we can use DT_HASH - _, hash_offset = self.get_table_offset('DT_HASH') - if hash_offset is not None: - # Get the hash table from the DT_HASH offset - hash_section = ELFHashTable(self.elffile, hash_offset, None, self) - return hash_section.get_number_of_symbols() - - # Find closest higher pointer than tab_ptr. We'll use that to mark - # the end of the symbol table. - tab_ptr, tab_offset = self.get_table_offset('DT_SYMTAB') - if tab_ptr is None or tab_offset is None: - raise ELFError('Segment does not contain DT_SYMTAB.') - - nearest_ptr: int | None = None - for tag in self.iter_tags(): - tag_ptr = tag['d_ptr'] - if tag['d_tag'] == 'DT_SYMENT': - if self._symbol_size != tag['d_val']: - # DT_SYMENT is the size of one symbol entry. It must be - # the same as returned by Elf_Sym.sizeof. - raise ELFError('DT_SYMENT (%d) != Elf_Sym (%d).' % - (tag['d_val'], self._symbol_size)) - if (tag_ptr > tab_ptr and - (nearest_ptr is None or nearest_ptr > tag_ptr)): - nearest_ptr = tag_ptr - - if nearest_ptr is not None: - return (nearest_ptr - tab_ptr) // self._symbol_size - - # Use the end of last segment that contains DT_SYMTAB (or ends on it) - for segment in self.elffile.iter_segments(type='PT_LOAD'): - start = segment['p_vaddr'] - end = start + segment['p_filesz'] - if start <= tab_ptr <= end: - nearest_ptr = end - - if nearest_ptr is not None: - return (nearest_ptr - tab_ptr) // self._symbol_size - - raise ELFError('Cannot determine the end of DT_SYMTAB.') - - def get_symbol(self, index: int) -> Symbol: - """ Get the symbol at index #index from the table (Symbol object) - """ - tab_ptr, tab_offset = self.get_table_offset('DT_SYMTAB') - if tab_ptr is None or tab_offset is None: - raise ELFError('Segment does not contain DT_SYMTAB.') - - symbol = struct_parse( - self.elfstructs.Elf_Sym, - self._stream, - stream_pos=tab_offset + index * self._symbol_size) - - string_table = self._get_stringtable() - symbol_name = string_table.get_string(symbol["st_name"]) - - return Symbol(symbol, symbol_name) - - def get_symbol_by_name(self, name: str) -> list[Symbol] | None: - """ Get a symbol(s) by name. Return None if no symbol by the given name - exists. - """ - symnums = self._symbol_name_map.get(name) - return [self.get_symbol(i) for i in symnums] if symnums else None - - @cached_property - def _symbol_name_map(self) -> dict[str, list[int]]: - smap = defaultdict(list) - for i, sym in enumerate(self.iter_symbols()): - smap[sym.name].append(i) - return smap - - def iter_symbols(self) -> Iterator[Symbol]: - """ Yield all symbols in this dynamic segment. The symbols are usually - the same as returned by SymbolTableSection.iter_symbols. However, - in stripped binaries, SymbolTableSection might have been removed. - This method reads from the mandatory dynamic tag DT_SYMTAB. - """ - for i in range(self.num_symbols()): - yield self.get_symbol(i) diff --git a/.tools/python-revlibs/elftools/elf/elffile.py b/.tools/python-revlibs/elftools/elf/elffile.py deleted file mode 100644 index 8a462ab..0000000 --- a/.tools/python-revlibs/elftools/elf/elffile.py +++ /dev/null @@ -1,982 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/elffile.py -# -# ELFFile - main class for accessing ELF files -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import io -import os -import struct -import zlib -from functools import cached_property -from io import BytesIO -from typing import IO, TYPE_CHECKING, Any - -from ..common.exceptions import ELFError, ELFParseError -from ..common.utils import struct_parse, elf_assert -from .structs import ELFStructs -from .sections import ( - Section, StringTableSection, SymbolTableSection, - SymbolTableIndexSection, SUNWSyminfoTableSection, NullSection, - NoteSection, StabSection, ARMAttributesSection, RISCVAttributesSection) -from .dynamic import DynamicSection, DynamicSegment -from .relocation import (RelocationSection, RelocationHandler, - RelrRelocationSection) -from .gnuversions import ( - GNUVerNeedSection, GNUVerDefSection, - GNUVerSymSection) -from .segments import Segment, InterpSegment, NoteSegment -from ..dwarf.dwarfinfo import DWARFInfo, DebugSectionDescriptor, DwarfConfig -from ..ehabi.ehabiinfo import EHABIInfo -from .hash import ELFHashSection, GNUHashSection -from .constants import SHN_INDICES -from ..dwarf.dwarf_util import _file_crc32 - -if TYPE_CHECKING: - from collections.abc import Callable, Iterator - from collections.abc import Container as TContainer - from types import TracebackType - - from typing_extensions import Self # 3.11+ - - from ..construct.lib.container import Container - - -class ELFFile: - """ Creation: the constructor accepts a stream (file-like object) with the - contents of an ELF file. - - Optionally, a stream_loader function can be passed as the second - argument. This stream_loader function takes a relative string path to - load a supplementary object file, and returns a stream suitable for - creating a new ELFFile. Currently, the only such relative file path is - obtained from the supplementary object files. - - Accessible attributes: - - stream: - The stream holding the data of the file - must be a binary - stream (bytes, not string). - - elfclass: - 32 or 64 - specifies the word size of the target machine - - little_endian: - boolean - specifies the target machine's endianness - - elftype: - string or int, either known value of E_TYPE enum defining ELF - type (e.g. executable, dynamic library or core dump) or integral - unparsed value - - header: - the complete ELF file header - - e_ident_raw: - the raw e_ident field of the header - """ - def __init__( - self, - stream: IO[bytes], - stream_loader: Callable[[str], IO[bytes]] | None = None, - ) -> None: - self.stream = stream - self.stream.seek(0, io.SEEK_END) - self.stream_len = self.stream.tell() - - self._identify_file() - self.structs = ELFStructs( - little_endian=self.little_endian, - elfclass=self.elfclass) - - self.structs.create_basic_structs() - self.header = self._parse_elf_header() - self.structs.create_advanced_structs( - self['e_type'], - self['e_machine'], - self['e_ident']['EI_OSABI']) - self.stream.seek(0) - self.e_ident_raw = self.stream.read(16) - - self.stream_loader = stream_loader - - @classmethod - def load_from_path(cls, path: str | bytes) -> ELFFile: - """Takes a local filesystem path accepted by open(), and returns an - ELFFile from it, setting up a stream_loader that resolves linked files - using normalized string paths relative to the original file. - """ - stream = open(path, 'rb') - return ELFFile(stream, ELFFile.make_relative_loader(os.fsdecode(path))) - - @staticmethod - def make_relative_loader(base_path: str) -> Callable[[str], IO[bytes]]: - """ Return a function that takes a potentially relative path, - resolves it against base_path (str), and opens a file at that. - - ELFFile uses functions like that for resolving DWARF links. The - raw bytes parsed from ELF metadata are decoded before calling this - loader. - """ - if not isinstance(base_path, str): - raise TypeError('base_path must be str') - base_directory = os.path.realpath(os.path.dirname(base_path)) - - def loader(rel_path: str) -> IO[bytes]: - if not isinstance(rel_path, str): - raise TypeError('rel_path must be str') - - if os.path.isabs(rel_path): - raise ELFError('External DWARF path must be relative to the ELF file directory.') - - rel_path = os.path.realpath(os.path.join(base_directory, rel_path)) - # Resolve ".." segments and symlinks before checking that the final - # target still lives under the ELF file's directory. - if os.path.commonpath([base_directory, rel_path]) != base_directory: - raise ELFError('External DWARF path escapes the ELF file directory.') - - return open(rel_path, 'rb') - return loader - - def num_sections(self) -> int: - """ Number of sections in the file - """ - if self['e_shoff'] == 0: - return 0 - # From the ELF ABI documentation at - # https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.sheader.html: - # "e_shnum normally tells how many entries the section header table - # contains. [...] If the number of sections is greater than or equal to - # SHN_LORESERVE (0xff00), e_shnum has the value SHN_UNDEF (0) and the - # actual number of section header table entries is contained in the - # sh_size field of the section header at index 0 (otherwise, the sh_size - # member of the initial entry contains 0)." - if self['e_shnum'] == 0: - section_header = self._get_section_header(0) - return section_header['sh_size'] - return self['e_shnum'] - - def get_section(self, n: int, type: TContainer[str] | None = None) -> Section: - """ Get the section at index #n from the file (Section object or a - subclass) - """ - section_header = self._get_section_header(n) - if type and section_header.sh_type not in type: - raise ELFError("Unexpected section type %s, expected %s" % (section_header['sh_type'], type)) - return self._make_section(section_header) - - def _get_linked_symtab_section(self, n: int) -> SymbolTableSection: - """ Get the section at index #n from the file, throws - if it's not a SYMTAB/DYNTAB. - Used for resolving section links with target type validation. - """ - section_header = self._get_section_header(n) - if section_header['sh_type'] not in ('SHT_SYMTAB', 'SHT_DYNSYM'): - raise ELFError("Section points at section %d of type %s, expected SHT_SYMTAB/SHT_DYNSYM" % (n, section_header['sh_type'])) - section = self._make_section(section_header) - assert isinstance(section, SymbolTableSection) - return section - - def _get_linked_strtab_section(self, n: int) -> StringTableSection: - """ Get the section at index #n from the file, throws - if it's not a STRTAB. - Used for resolving section links with target type validation. - """ - section_header = self._get_section_header(n) - if section_header['sh_type'] != 'SHT_STRTAB': - raise ELFError("SHT_SYMTAB section points at section %d of type %s, expected SHT_STRTAB" % (n, section_header['sh_type'])) - section = self._make_section(section_header) - assert isinstance(section, StringTableSection) - return section - - def get_section_by_name(self, name: str) -> Section | None: - """ Get a section from the file, by name. Return None if no such - section exists. - """ - secnum = self._section_name_map.get(name, None) - return None if secnum is None else self.get_section(secnum) - - def get_section_index(self, section_name: str) -> int | None: - """ Gets the index of the section by name. Return None if no such - section name exists. - """ - return self._section_name_map.get(section_name, None) - - def has_section(self, section_name: str) -> bool: - """ Section existence check by name, without the overhead of parsing if found. - """ - return section_name in self._section_name_map - - def iter_sections(self, type: str | None = None) -> Iterator[Section]: - """ Yield all the sections in the file. If the optional |type| - parameter is passed, this method will only yield sections of the - given type. The parameter value must be a string containing the - name of the type as defined in the ELF specification, e.g. - 'SHT_SYMTAB'. - """ - for i in range(self.num_sections()): - section = self.get_section(i) - if type is None or section['sh_type'] == type: - yield section - - def num_segments(self) -> int: - """ Number of segments in the file - """ - # From: https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI - # Section: 4.1.2 Number of Program Headers - # If the number of program headers is greater than or equal to - # PN_XNUM (0xffff), this member has the value PN_XNUM - # (0xffff). The actual number of program header table entries - # is contained in the sh_info field of the section header at - # index 0. - if self['e_phnum'] < 0xffff: - return self['e_phnum'] - else: - return self.get_section(0)['sh_info'] - - def get_segment(self, n: int) -> Segment: - """ Get the segment at index #n from the file (Segment object) - """ - segment_header = self._get_segment_header(n) - return self._make_segment(segment_header) - - def iter_segments(self, type: str | None = None) -> Iterator[Segment]: - """ Yield all the segments in the file. If the optional |type| - parameter is passed, this method will only yield segments of the - given type. The parameter value must be a string containing the - name of the type as defined in the ELF specification, e.g. - 'PT_LOAD'. - """ - for i in range(self.num_segments()): - segment = self.get_segment(i) - if type is None or segment['p_type'] == type: - yield segment - - def address_offsets(self, start: int, size: int = 1) -> Iterator[int]: - """ Yield a file offset for each ELF segment containing a memory region. - - A memory region is defined by the range [start...start+size). The - offset of the region is yielded. - """ - end = start + size - # consider LOAD only to prevent same address being yielded twice - for seg in self.iter_segments(type='PT_LOAD'): - if (start >= seg['p_vaddr'] and - end <= seg['p_vaddr'] + seg['p_filesz']): - yield start - seg['p_vaddr'] + seg['p_offset'] - - def has_dwarf_info(self, strict: bool = False) -> bool: - """ Check whether this file appears to have debugging information. - We assume that if it has the .debug_info or .zdebug_info section, it - has all the other required sections as well. - - Unless you pass strict=True, the presence of .eh_frame section, - which is DWARF adjacent but hardly DWARF proper, will count as debug info. - Stripped files contain .eh_frame but none of the .[z]debug_xxx sections. - """ - return (self.has_section('.debug_info') or - self.has_section('.zdebug_info') or - (not strict and self.has_section('.eh_frame'))) - - def get_dwarf_info( - self, - relocate_dwarf_sections: bool = True, - follow_links: bool = True, - ) -> DWARFInfo: - """ Return a DWARFInfo object representing the debugging information in - this file. - - If relocate_dwarf_sections is True, relocations for DWARF sections - are looked up and applied. - - If follow_links is True, we will try to load the external and/or supplementary - object file (if any), and use it to resolve references and imports. - """ - # Expect that has_dwarf_info() was called, so at least .debug_info is - # present. - # Sections that aren't found will be passed as None to DWARFInfo. - - # TODO: support linking by build ID - # https://sourceware.org/gdb/current/onlinedocs/gdb.html/Separate-Debug-Files.html - - # A file may contain a debug link but not be stripped, so check for debug_info just in case - debuglink_section = self.get_section_by_name('.gnu_debuglink') - if debuglink_section and not self.has_dwarf_info(True) and follow_links and self.stream_loader: - debuglink = struct_parse(self.structs.Gnu_debuglink, debuglink_section.stream, debuglink_section.header.sh_offset) - with self.stream_loader(os.fsdecode(debuglink.filename)) as ext_file: - # Validate checksum... - if _file_crc32(ext_file) != debuglink.checksum: - raise ELFError('The linked DWARF file does not match the checksum in the link.') - ext_file.seek(0, os.SEEK_SET) - ext_elffile = ELFFile(ext_file, self.stream_loader) - # Inheriting the stream loader like that might be wrong if the supplementary DWARF link in the other file - # is relative to the other file's directory as opposed to this file's directory. - return ext_elffile.get_dwarf_info(relocate_dwarf_sections=relocate_dwarf_sections, follow_links=True) - - section_names = ['.debug_info', '.debug_aranges', '.debug_abbrev', - '.debug_str', '.debug_line', '.debug_frame', - '.debug_loc', '.debug_ranges', '.debug_pubtypes', - '.debug_pubnames', '.debug_addr', - '.debug_str_offsets', '.debug_line_str', - '.debug_loclists', '.debug_rnglists', - '.debug_sup', '.gnu_debugaltlink', '.debug_types', - ] - - compressed = self.has_section('.zdebug_info') - if compressed: - section_names = [f'.z{s[1:]}' for s in section_names] - - # As it is loaded in the process image, .eh_frame cannot be compressed - section_names.append('.eh_frame') - - (debug_info_sec_name, debug_aranges_sec_name, debug_abbrev_sec_name, - debug_str_sec_name, debug_line_sec_name, debug_frame_sec_name, - debug_loc_sec_name, debug_ranges_sec_name, debug_pubtypes_name, - debug_pubnames_name, debug_addr_name, debug_str_offsets_name, - debug_line_str_name, debug_loclists_sec_name, debug_rnglists_sec_name, - debug_sup_name, gnu_debugaltlink_name, debug_types_sec_name, - eh_frame_sec_name) = section_names - - debug_sections: dict[str, DebugSectionDescriptor | None] = {} - for secname in section_names: - section = self.get_section_by_name(secname) - if section is None: - debug_sections[secname] = None - else: - dwarf_section = self._read_dwarf_section( - section, - relocate_dwarf_sections) - if compressed and secname.startswith('.z'): - dwarf_section = self._decompress_dwarf_section(dwarf_section) - debug_sections[secname] = dwarf_section - - # Lookup if we have any of the .gnu_debugaltlink (GNU proprietary - # implementation) or .debug_sup sections, referencing a supplementary - # DWARF file - - dwarfinfo = DWARFInfo( - config=DwarfConfig( - little_endian=self.little_endian, - default_address_size=self.elfclass // 8, - machine_arch=self.get_machine_arch()), - debug_info_sec=debug_sections[debug_info_sec_name], - debug_aranges_sec=debug_sections[debug_aranges_sec_name], - debug_abbrev_sec=debug_sections[debug_abbrev_sec_name], - debug_frame_sec=debug_sections[debug_frame_sec_name], - eh_frame_sec=debug_sections[eh_frame_sec_name], - debug_str_sec=debug_sections[debug_str_sec_name], - debug_loc_sec=debug_sections[debug_loc_sec_name], - debug_ranges_sec=debug_sections[debug_ranges_sec_name], - debug_line_sec=debug_sections[debug_line_sec_name], - debug_pubtypes_sec=debug_sections[debug_pubtypes_name], - debug_pubnames_sec=debug_sections[debug_pubnames_name], - debug_addr_sec=debug_sections[debug_addr_name], - debug_str_offsets_sec=debug_sections[debug_str_offsets_name], - debug_line_str_sec=debug_sections[debug_line_str_name], - debug_loclists_sec=debug_sections[debug_loclists_sec_name], - debug_rnglists_sec=debug_sections[debug_rnglists_sec_name], - debug_sup_sec=debug_sections[debug_sup_name], - gnu_debugaltlink_sec=debug_sections[gnu_debugaltlink_name], - debug_types_sec=debug_sections[debug_types_sec_name] - ) - if follow_links: - dwarfinfo.supplementary_dwarfinfo = self.get_supplementary_dwarfinfo(dwarfinfo) - return dwarfinfo - - def has_dwarf_link(self) -> bool: - """ Whether the binary's debug info is in an - external file. Use get_dwarf_link to retrieve the path to it. - """ - return self.has_section('.gnu_debuglink') - - def get_dwarf_link(self) -> Container | None: - """ Read the .gnu_debuglink section, return an object with filename (as bytes) and checksum (as number) in it. - """ - section = self.get_section_by_name('.gnu_debuglink') - return struct_parse(self.structs.Gnu_debuglink, section.stream, section.header.sh_offset) if section else None - - def get_supplementary_dwarfinfo(self, dwarfinfo: DWARFInfo) -> DWARFInfo | None: - """ - Read supplementary dwarfinfo, from either the standared .debug_sup - section, the GNU proprietary .gnu_debugaltlink, or .gnu_debuglink. - """ - supfilepath = dwarfinfo.parse_debugsupinfo() - if supfilepath is not None and self.stream_loader is not None: - stream = self.stream_loader(os.fsdecode(supfilepath)) - supelffile = ELFFile(stream) - dwarf_info = supelffile.get_dwarf_info() - stream.close() - return dwarf_info - return None - - - def has_ehabi_info(self) -> bool: - """ Check whether this file appears to have arm exception handler index table. - """ - return any(self.iter_sections(type='SHT_ARM_EXIDX')) - - def get_ehabi_infos(self) -> list[EHABIInfo] | None: - """ Generally, shared library and executable contain 1 .ARM.exidx section. - Object file contains many .ARM.exidx sections. - So we must traverse every section and filter sections whose type is SHT_ARM_EXIDX. - """ - if self['e_type'] == 'ET_REL': - # TODO: support relocatable file - assert False, "Current version of pyelftools doesn't support relocatable file." - _ret = [ - EHABIInfo(section, self.little_endian) - for section in self.iter_sections(type='SHT_ARM_EXIDX') - ] - return _ret if _ret else None - - def get_machine_arch(self) -> str: - """ Return the machine architecture, as detected from the ELF header. - """ - architectures = { - 'EM_M32' : 'AT&T WE 32100', - 'EM_SPARC' : 'SPARC', - 'EM_386' : 'x86', - 'EM_68K' : 'Motorola 68000', - 'EM_88K' : 'Motorola 88000', - 'EM_IAMCU' : 'Intel MCU', - 'EM_860' : 'Intel 80860', - 'EM_MIPS' : 'MIPS', - 'EM_S370' : 'IBM System/370', - 'EM_MIPS_RS3_LE' : 'MIPS RS3000 Little-endian', - 'EM_PARISC' : 'Hewlett-Packard PA-RISC', - 'EM_VPP500' : 'Fujitsu VPP500', - 'EM_SPARC32PLUS' : 'Enhanced SPARC', - 'EM_960' : 'Intel 80960', - 'EM_PPC' : 'PowerPC', - 'EM_PPC64' : '64-bit PowerPC', - 'EM_S390' : 'IBM S/390', - 'EM_SPU' : 'IBM SPU/SPC', - 'EM_V800' : 'NEC V800', - 'EM_FR20' : 'Fujitsu FR20', - 'EM_RH32' : 'TRW RH-32', - 'EM_RCE' : 'Motorola RCE', - 'EM_ARM' : 'ARM', - 'EM_ALPHA' : 'Digital Alpha', - 'EM_SH' : 'Hitachi SH', - 'EM_SPARCV9' : 'SPARC Version 9', - 'EM_TRICORE' : 'Siemens TriCore embedded processor', - 'EM_ARC' : 'Argonaut RISC Core, Argonaut Technologies Inc.', - 'EM_H8_300' : 'Hitachi H8/300', - 'EM_H8_300H' : 'Hitachi H8/300H', - 'EM_H8S' : 'Hitachi H8S', - 'EM_H8_500' : 'Hitachi H8/500', - 'EM_IA_64' : 'Intel IA-64', - 'EM_MIPS_X' : 'MIPS-X', - 'EM_COLDFIRE' : 'Motorola ColdFire', - 'EM_68HC12' : 'Motorola M68HC12', - 'EM_MMA' : 'Fujitsu MMA', - 'EM_PCP' : 'Siemens PCP', - 'EM_NCPU' : 'Sony nCPU', - 'EM_NDR1' : 'Denso NDR1', - 'EM_STARCORE' : 'Motorola Star*Core', - 'EM_ME16' : 'Toyota ME16', - 'EM_ST100' : 'STMicroelectronics ST100', - 'EM_TINYJ' : 'Advanced Logic TinyJ', - 'EM_X86_64' : 'x64', - 'EM_PDSP' : 'Sony DSP', - 'EM_PDP10' : 'Digital Equipment PDP-10', - 'EM_PDP11' : 'Digital Equipment PDP-11', - 'EM_FX66' : 'Siemens FX66', - 'EM_ST9PLUS' : 'STMicroelectronics ST9+ 8/16 bit', - 'EM_ST7' : 'STMicroelectronics ST7 8-bit', - 'EM_68HC16' : 'Motorola MC68HC16', - 'EM_68HC11' : 'Motorola MC68HC11', - 'EM_68HC08' : 'Motorola MC68HC08', - 'EM_68HC05' : 'Motorola MC68HC05', - 'EM_SVX' : 'Silicon Graphics SVx', - 'EM_ST19' : 'STMicroelectronics ST19 8-bit', - 'EM_VAX' : 'Digital VAX', - 'EM_CRIS' : 'Axis Communications 32-bit', - 'EM_JAVELIN' : 'Infineon Technologies 32-bit', - 'EM_FIREPATH' : 'Element 14 64-bit DSP', - 'EM_ZSP' : 'LSI Logic 16-bit DSP', - 'EM_MMIX' : 'Donald Knuth\'s educational 64-bit', - 'EM_HUANY' : 'Harvard University machine-independent object files', - 'EM_PRISM' : 'SiTera Prism', - 'EM_AVR' : 'Atmel AVR 8-bit', - 'EM_FR30' : 'Fujitsu FR30', - 'EM_D10V' : 'Mitsubishi D10V', - 'EM_D30V' : 'Mitsubishi D30V', - 'EM_V850' : 'NEC v850', - 'EM_M32R' : 'Mitsubishi M32R', - 'EM_MN10300' : 'Matsushita MN10300', - 'EM_MN10200' : 'Matsushita MN10200', - 'EM_PJ' : 'picoJava', - 'EM_OPENRISC' : 'OpenRISC 32-bit', - 'EM_ARC_COMPACT' : 'ARC International ARCompact', - 'EM_XTENSA' : 'Tensilica Xtensa', - 'EM_VIDEOCORE' : 'Alphamosaic VideoCore', - 'EM_TMM_GPP' : 'Thompson Multimedia', - 'EM_NS32K' : 'National Semiconductor 32000 series', - 'EM_TPC' : 'Tenor Network TPC', - 'EM_SNP1K' : 'Trebia SNP 1000', - 'EM_ST200' : 'STMicroelectronics ST200', - 'EM_IP2K' : 'Ubicom IP2xxx', - 'EM_MAX' : 'MAX', - 'EM_CR' : 'National Semiconductor CompactRISC', - 'EM_F2MC16' : 'Fujitsu F2MC16', - 'EM_MSP430' : 'Texas Instruments msp430', - 'EM_BLACKFIN' : 'Analog Devices Blackfin', - 'EM_SE_C33' : 'Seiko Epson S1C33', - 'EM_SEP' : 'Sharp', - 'EM_ARCA' : 'Arca RISC', - 'EM_UNICORE' : 'PKU-Unity MPRC', - 'EM_EXCESS' : 'eXcess', - 'EM_DXP' : 'Icera Semiconductor Deep Execution Processor', - 'EM_ALTERA_NIOS2' : 'Altera Nios II', - 'EM_CRX' : 'National Semiconductor CompactRISC CRX', - 'EM_XGATE' : 'Motorola XGATE', - 'EM_C166' : 'Infineon C16x/XC16x', - 'EM_M16C' : 'Renesas M16C', - 'EM_DSPIC30F' : 'Microchip Technology dsPIC30F', - 'EM_CE' : 'Freescale Communication Engine RISC core', - 'EM_M32C' : 'Renesas M32C', - 'EM_TSK3000' : 'Altium TSK3000', - 'EM_RS08' : 'Freescale RS08', - 'EM_SHARC' : 'Analog Devices SHARC', - 'EM_ECOG2' : 'Cyan Technology eCOG2', - 'EM_SCORE7' : 'Sunplus S+core7 RISC', - 'EM_DSP24' : 'New Japan Radio (NJR) 24-bit DSP', - 'EM_VIDEOCORE3' : 'Broadcom VideoCore III', - 'EM_LATTICEMICO32' : 'Lattice FPGA RISC', - 'EM_SE_C17' : 'Seiko Epson C17', - 'EM_TI_C6000' : 'TI TMS320C6000', - 'EM_TI_C2000' : 'TI TMS320C2000', - 'EM_TI_C5500' : 'TI TMS320C55x', - 'EM_TI_ARP32' : 'TI Application Specific RISC, 32bit', - 'EM_TI_PRU' : 'TI Programmable Realtime Unit', - 'EM_MMDSP_PLUS' : 'STMicroelectronics 64bit VLIW', - 'EM_CYPRESS_M8C' : 'Cypress M8C', - 'EM_R32C' : 'Renesas R32C', - 'EM_TRIMEDIA' : 'NXP Semiconductors TriMedia', - 'EM_QDSP6' : 'QUALCOMM DSP6', - 'EM_8051' : 'Intel 8051', - 'EM_STXP7X' : 'STMicroelectronics STxP7x', - 'EM_NDS32' : 'Andes Technology RISC', - 'EM_ECOG1' : 'Cyan Technology eCOG1X', - 'EM_ECOG1X' : 'Cyan Technology eCOG1X', - 'EM_MAXQ30' : 'Dallas Semiconductor MAXQ30', - 'EM_XIMO16' : 'New Japan Radio (NJR) 16-bit', - 'EM_MANIK' : 'M2000 Reconfigurable RISC', - 'EM_CRAYNV2' : 'Cray Inc. NV2', - 'EM_RX' : 'Renesas RX', - 'EM_METAG' : 'Imagination Technologies META', - 'EM_MCST_ELBRUS' : 'MCST Elbrus', - 'EM_ECOG16' : 'Cyan Technology eCOG16', - 'EM_CR16' : 'National Semiconductor CompactRISC CR16 16-bit', - 'EM_ETPU' : 'Freescale', - 'EM_SLE9X' : 'Infineon Technologies SLE9X', - 'EM_L10M' : 'Intel L10M', - 'EM_K10M' : 'Intel K10M', - 'EM_AARCH64' : 'AArch64', - 'EM_AVR32' : 'Atmel 32-bit', - 'EM_STM8' : 'STMicroeletronics STM8 8-bit', - 'EM_TILE64' : 'Tilera TILE64', - 'EM_TILEPRO' : 'Tilera TILEPro', - 'EM_MICROBLAZE' : 'Xilinx MicroBlaze 32-bit RISC', - 'EM_CUDA' : 'NVIDIA CUDA', - 'EM_TILEGX' : 'Tilera TILE-Gx', - 'EM_CLOUDSHIELD' : 'CloudShield', - 'EM_COREA_1ST' : 'KIPO-KAIST Core-A 1st generation', - 'EM_COREA_2ND' : 'KIPO-KAIST Core-A 2nd generation', - 'EM_ARC_COMPACT2' : 'Synopsys ARCompact V2', - 'EM_OPEN8' : 'Open8 8-bit RISC', - 'EM_RL78' : 'Renesas RL78', - 'EM_VIDEOCORE5' : 'Broadcom VideoCore V', - 'EM_78KOR' : 'Renesas 78KOR', - 'EM_56800EX' : 'Freescale 56800EX', - 'EM_BA1' : 'Beyond BA1', - 'EM_BA2' : 'Beyond BA2', - 'EM_XCORE' : 'XMOS xCORE', - 'EM_MCHP_PIC' : 'Microchip 8-bit PIC', - 'EM_INTEL205' : 'Reserved by Intel', - 'EM_INTEL206' : 'Reserved by Intel', - 'EM_INTEL207' : 'Reserved by Intel', - 'EM_INTEL208' : 'Reserved by Intel', - 'EM_INTEL209' : 'Reserved by Intel', - 'EM_KM32' : 'KM211 KM32 32-bit', - 'EM_KMX32' : 'KM211 KMX32 32-bit', - 'EM_KMX16' : 'KM211 KMX16 16-bit', - 'EM_KMX8' : 'KM211 KMX8 8-bit', - 'EM_KVARC' : 'KM211 KVARC', - 'EM_CDP' : 'Paneve CDP', - 'EM_COGE' : 'Cognitive', - 'EM_COOL' : 'Bluechip Systems CoolEngine', - 'EM_NORC' : 'Nanoradio Optimized RISC', - 'EM_CSR_KALIMBA' : 'CSR Kalimba', - 'EM_Z80' : 'Zilog Z80', - 'EM_VISIUM' : 'VISIUMcore', - 'EM_FT32' : 'FTDI Chip FT32 32-bit RISC', - 'EM_MOXIE' : 'Moxie', - 'EM_AMDGPU' : 'AMD GPU', - 'EM_RISCV' : 'RISC-V', - 'EM_BPF' : 'Linux BPF - in-kernel virtual machine', - 'EM_CSKY' : 'C-SKY', - 'EM_LOONGARCH' : 'LoongArch', - 'EM_FRV' : 'Fujitsu FR-V' - } - - return architectures.get(self['e_machine'], '') - - def get_shstrndx(self) -> int: - """ Find the string table section index for the section header table - """ - # From https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html: - # If the section name string table section index is greater than or - # equal to SHN_LORESERVE (0xff00), this member has the value SHN_XINDEX - # (0xffff) and the actual index of the section name string table section - # is contained in the sh_link field of the section header at index 0. - if self['e_shstrndx'] != SHN_INDICES.SHN_XINDEX: - return self['e_shstrndx'] - else: - section_header = self._get_section_header(0) - return section_header['sh_link'] - - #-------------------------------- PRIVATE --------------------------------# - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - def _identify_file(self) -> None: - """ Verify the ELF file and identify its class and endianness. - """ - # Note: this code reads the stream directly, without using ELFStructs, - # since we don't yet know its exact format. ELF was designed to be - # read like this - its e_ident field is word-size and endian agnostic. - self.stream.seek(0) - magic = self.stream.read(4) - elf_assert(magic == b'\x7fELF', 'Magic number does not match') - - ei_class = self.stream.read(1) - if ei_class == b'\x01': - self.elfclass = 32 - elif ei_class == b'\x02': - self.elfclass = 64 - else: - raise ELFError('Invalid EI_CLASS %s' % repr(ei_class)) - - ei_data = self.stream.read(1) - if ei_data == b'\x01': - self.little_endian = True - elif ei_data == b'\x02': - self.little_endian = False - else: - raise ELFError('Invalid EI_DATA %s' % repr(ei_data)) - - def _section_offset(self, n: int) -> int: - """ Compute the offset of section #n in the file - """ - shentsize = self['e_shentsize'] - if self['e_shoff'] > 0 and shentsize < self.structs.Elf_Shdr.sizeof(): - raise ELFError('Too small e_shentsize: %s' % shentsize) - return self['e_shoff'] + n * shentsize - - def _segment_offset(self, n: int) -> int: - """ Compute the offset of segment #n in the file - """ - phentsize = self['e_phentsize'] - if self['e_phoff'] > 0 and phentsize < self.structs.Elf_Phdr.sizeof(): - raise ELFError('Too small e_phentsize: %s' % phentsize) - return self['e_phoff'] + n * phentsize - - def _make_segment(self, segment_header: Container) -> Segment: - """ Create a Segment object of the appropriate type - """ - segtype = segment_header['p_type'] - if segtype == 'PT_INTERP': - return InterpSegment(segment_header, self.stream) - elif segtype == 'PT_DYNAMIC': - return DynamicSegment(segment_header, self.stream, self) - elif segtype == 'PT_NOTE': - return NoteSegment(segment_header, self.stream, self) - else: - return Segment(segment_header, self.stream) - - def _get_section_header(self, n: int) -> Container: - """ Find the header of section #n, parse it and return the struct - """ - - stream_pos = self._section_offset(n) - if stream_pos > self.stream_len: - msg = f"Reading section {n} at offset {stream_pos} past EOF {self.stream_len}" - raise ELFParseError(msg) - - return struct_parse( - self.structs.Elf_Shdr, - self.stream, - stream_pos=stream_pos) - - def _get_section_name(self, section_header: Container) -> str: - """ Given a section header, find this section's name in the file's - string table - """ - name_offset = section_header['sh_name'] - return self._section_header_stringtable.get_string(name_offset) - - def _make_section(self, section_header: Container) -> Section: - """ Create a section object of the appropriate type - """ - name = self._get_section_name(section_header) - sectype = section_header['sh_type'] - - if sectype == 'SHT_STRTAB': - return StringTableSection(section_header, name, self) - elif sectype == 'SHT_NULL': - return NullSection(section_header, name, self) - elif sectype in ('SHT_SYMTAB', 'SHT_DYNSYM', 'SHT_SUNW_LDYNSYM'): - return self._make_symbol_table_section(section_header, name) - elif sectype == 'SHT_SYMTAB_SHNDX': - return self._make_symbol_table_index_section(section_header, name) - elif sectype == 'SHT_SUNW_syminfo': - return self._make_sunwsyminfo_table_section(section_header, name) - elif sectype == 'SHT_GNU_verneed': - return self._make_gnu_verneed_section(section_header, name) - elif sectype == 'SHT_GNU_verdef': - return self._make_gnu_verdef_section(section_header, name) - elif sectype == 'SHT_GNU_versym': - return self._make_gnu_versym_section(section_header, name) - elif sectype in ('SHT_REL', 'SHT_RELA'): - return RelocationSection(section_header, name, self) - elif sectype == 'SHT_DYNAMIC': - return DynamicSection(section_header, name, self) - elif sectype == 'SHT_NOTE': - return NoteSection(section_header, name, self) - elif sectype == 'SHT_PROGBITS' and name == '.stab': - return StabSection(section_header, name, self) - elif sectype == 'SHT_ARM_ATTRIBUTES': - return ARMAttributesSection(section_header, name, self) - elif sectype == 'SHT_RISCV_ATTRIBUTES': - return RISCVAttributesSection(section_header, name, self) - elif sectype == 'SHT_HASH': - return self._make_elf_hash_section(section_header, name) - elif sectype == 'SHT_GNU_HASH': - return self._make_gnu_hash_section(section_header, name) - elif sectype == 'SHT_RELR': - return RelrRelocationSection(section_header, name, self) - else: - return Section(section_header, name, self) - - @cached_property - def _section_name_map(self) -> dict[str, int]: - return { - sec.name: i - for i, sec in enumerate(self.iter_sections()) - } - - def _make_symbol_table_section( - self, - section_header: Container, - name: str, - ) -> SymbolTableSection: - """ Create a SymbolTableSection - """ - linked_strtab_index = section_header['sh_link'] - strtab_section = self._get_linked_strtab_section(linked_strtab_index) - return SymbolTableSection( - section_header, name, - elffile=self, - stringtable=strtab_section) - - def _make_symbol_table_index_section( - self, - section_header: Container, - name: str, - ) -> SymbolTableIndexSection: - """ Create a SymbolTableIndexSection object - """ - linked_symtab_index = section_header['sh_link'] - return SymbolTableIndexSection( - section_header, name, elffile=self, - symboltable=linked_symtab_index) - - def _make_sunwsyminfo_table_section( - self, - section_header: Container, - name: str, - ) -> SUNWSyminfoTableSection: - """ Create a SUNWSyminfoTableSection - """ - linked_strtab_index = section_header['sh_link'] - strtab_section = self._get_linked_symtab_section(linked_strtab_index) - return SUNWSyminfoTableSection( - section_header, name, - elffile=self, - symboltable=strtab_section) - - def _make_gnu_verneed_section(self, section_header: Container, name: str) -> GNUVerNeedSection: - """ Create a GNUVerNeedSection - """ - linked_strtab_index = section_header['sh_link'] - strtab_section = self._get_linked_strtab_section(linked_strtab_index) - return GNUVerNeedSection( - section_header, name, - elffile=self, - stringtable=strtab_section) - - def _make_gnu_verdef_section(self, section_header: Container, name: str) -> GNUVerDefSection: - """ Create a GNUVerDefSection - """ - linked_strtab_index = section_header['sh_link'] - strtab_section = self._get_linked_strtab_section(linked_strtab_index) - return GNUVerDefSection( - section_header, name, - elffile=self, - stringtable=strtab_section) - - def _make_gnu_versym_section(self, section_header: Container, name: str) -> GNUVerSymSection: - """ Create a GNUVerSymSection - """ - linked_symtab_index = section_header['sh_link'] - symtab_section = self._get_linked_symtab_section(linked_symtab_index) - return GNUVerSymSection( - section_header, name, - elffile=self, - symboltable=symtab_section) - - def _make_elf_hash_section(self, section_header: Container, name: str) -> ELFHashSection: - linked_symtab_index = section_header['sh_link'] - symtab_section = self._get_linked_symtab_section(linked_symtab_index) - return ELFHashSection( - section_header, name, self, symtab_section - ) - - def _make_gnu_hash_section(self, section_header: Container, name: str) -> GNUHashSection: - linked_symtab_index = section_header['sh_link'] - symtab_section = self._get_linked_symtab_section(linked_symtab_index) - return GNUHashSection( - section_header, name, self, symtab_section - ) - - def _get_segment_header(self, n: int) -> Container: # Elf_Phdr: - """ Find the header of segment #n, parse it and return the struct - """ - return struct_parse( - self.structs.Elf_Phdr, - self.stream, - stream_pos=self._segment_offset(n)) - - @cached_property - def _section_header_stringtable(self) -> StringTableSection: - """ Get the string table section corresponding to the section header - table. - """ - stringtable_section_num = self.get_shstrndx() - - try: - stringtable_section_header = self._get_section_header(stringtable_section_num) - except ELFParseError as ex: - raise ELFParseError("String Table not found") from ex - - return StringTableSection( - header=stringtable_section_header, - name='', - elffile=self) - - def _parse_elf_header(self) -> Container: - """ Parses the ELF file header and assigns the result to attributes - of this object. - """ - return struct_parse(self.structs.Elf_Ehdr, self.stream, stream_pos=0) - - def _read_dwarf_section( - self, - section: Section, - relocate_dwarf_sections: bool, - ) -> DebugSectionDescriptor: - """ Read the contents of a DWARF section from the stream and return a - DebugSectionDescriptor. Apply relocations if asked to. - """ - phantom_bytes = self.has_phantom_bytes() - # The section data is read into a new stream, for processing - section_stream = BytesIO() - section_data = section.data() - section_stream.write(section_data[::2] if phantom_bytes else section_data) - - if relocate_dwarf_sections: - reloc_handler = RelocationHandler(self) - reloc_section = reloc_handler.find_relocations_for_section(section) - if reloc_section is not None: - if phantom_bytes: - # No guidance how should the relocation work - before or after the odd byte skip - raise ELFParseError("This binary has relocations in the DWARF sections, currently not supported.") - else: - reloc_handler.apply_section_relocations( - section_stream, reloc_section) - - return DebugSectionDescriptor( - stream=section_stream, - name=section.name, - global_offset=section['sh_offset'], - size=section.data_size//2 if phantom_bytes else section.data_size, - address=section['sh_addr']) - - @staticmethod - def _decompress_dwarf_section(section: DebugSectionDescriptor) -> DebugSectionDescriptor: - """ Returns the uncompressed contents of the provided DWARF section. - """ - # TODO: support other compression formats from readelf.c - assert section.size > 12, 'Unsupported compression format.' - - section.stream.seek(0) - # According to readelf.c the content should contain "ZLIB" - # followed by the uncompressed section size - 8 bytes in - # big-endian order - compression_type = section.stream.read(4) - assert compression_type == b'ZLIB', \ - 'Invalid compression type: %r' % (compression_type) - - uncompressed_size = struct.unpack('>Q', section.stream.read(8))[0] - - decompressor = zlib.decompressobj() - uncompressed_stream = BytesIO() - while True: - chunk = section.stream.read(4096) - if not chunk: - break - uncompressed_stream.write(decompressor.decompress(chunk)) - uncompressed_stream.write(decompressor.flush()) - - uncompressed_stream.seek(0, io.SEEK_END) - size = uncompressed_stream.tell() - assert uncompressed_size == size, \ - 'Wrong uncompressed size: expected %r, but got %r' % ( - uncompressed_size, size, - ) - - return section._replace(stream=uncompressed_stream, size=size) - - def close(self) -> None: - self.stream.close() - - def __enter__(self) -> Self: - return self - - def __exit__( - self, - type: type[BaseException] | None, - value: BaseException | None, - traceback: TracebackType | None, - ) -> None: - self.close() - - def has_phantom_bytes(self) -> bool: - """The XC16 compiler for the PIC microcontrollers emits DWARF where all odd bytes in all DWARF sections - are to be discarded ("phantom"). - - We don't know where does the phantom byte discarding fit into the usual chain of section content transforms. - There are no XC16/PIC binaries in the corpus with relocations against DWARF, and the DWARF section compression - seems to be unsupported by XC16. - """ - # Vendor flag EF_PIC30_NO_PHANTOM_BYTE=0x80000000: clear means phantom bytes are present - return self['e_machine'] == 'EM_DSPIC30F' and (self['e_flags'] & 0x80000000) == 0 diff --git a/.tools/python-revlibs/elftools/elf/enums.py b/.tools/python-revlibs/elftools/elf/enums.py deleted file mode 100644 index 2aa3488..0000000 --- a/.tools/python-revlibs/elftools/elf/enums.py +++ /dev/null @@ -1,1679 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/enums.py -# -# Mappings of enum names to values -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import TYPE_CHECKING - -from ..common.utils import merge_dicts -from ..construct import Pass - -if TYPE_CHECKING: - from collections.abc import Mapping - - -# e_ident[EI_CLASS] in the ELF header -ENUM_EI_CLASS: Mapping[str, int] = dict( - ELFCLASSNONE=0, - ELFCLASS32=1, - ELFCLASS64=2 -) - -# e_ident[EI_DATA] in the ELF header -ENUM_EI_DATA: Mapping[str, int] = dict( - ELFDATANONE=0, - ELFDATA2LSB=1, - ELFDATA2MSB=2 -) - -# e_version in the ELF header -ENUM_E_VERSION: Mapping[str, int] = dict( - EV_NONE=0, - EV_CURRENT=1, - _default_=Pass, -) - -# e_ident[EI_OSABI] in the ELF header -ENUM_EI_OSABI: Mapping[str, int] = dict( - ELFOSABI_SYSV=0, - ELFOSABI_HPUX=1, - ELFOSABI_NETBSD=2, - ELFOSABI_LINUX=3, - ELFOSABI_HURD=4, - ELFOSABI_SOLARIS=6, - ELFOSABI_AIX=7, - ELFOSABI_IRIX=8, - ELFOSABI_FREEBSD=9, - ELFOSABI_TRU64=10, - ELFOSABI_MODESTO=11, - ELFOSABI_OPENBSD=12, - ELFOSABI_OPENVMS=13, - ELFOSABI_NSK=14, - ELFOSABI_AROS=15, - ELFOSABI_FENIXOS=16, - ELFOSABI_CLOUD=17, - ELFOSABI_SORTIX=53, - ELFOSABI_ARM_AEABI=64, - ELFOSABI_ARM=97, - ELFOSABI_CELL_LV2=102, - ELFOSABI_STANDALONE=255, - _default_=Pass, -) - -# e_type in the ELF header -ENUM_E_TYPE: Mapping[str, int] = dict( - ET_NONE=0, - ET_REL=1, - ET_EXEC=2, - ET_DYN=3, - ET_CORE=4, - ET_LOPROC=0xff00, - ET_HIPROC=0xffff, - _default_=Pass, -) - -# e_machine in the ELF header -ENUM_E_MACHINE: Mapping[str, int] = dict( - EM_NONE = 0, # No machine - EM_M32 = 1, # AT&T WE 32100 - EM_SPARC = 2, # SPARC - EM_386 = 3, # Intel 80386 - EM_68K = 4, # Motorola 68000 - EM_88K = 5, # Motorola 88000 - EM_IAMCU = 6, # Intel MCU - EM_860 = 7, # Intel 80860 - EM_MIPS = 8, # MIPS I Architecture - EM_S370 = 9, # IBM System/370 Processor - EM_MIPS_RS3_LE = 10, # MIPS RS3000 Little-endian - EM_PARISC = 15, # Hewlett-Packard PA-RISC - EM_VPP500 = 17, # Fujitsu VPP500 - EM_SPARC32PLUS = 18, # Enhanced instruction set SPARC - EM_960 = 19, # Intel 80960 - EM_PPC = 20, # PowerPC - EM_PPC64 = 21, # 64-bit PowerPC - EM_S390 = 22, # IBM System/390 Processor - EM_SPU = 23, # IBM SPU/SPC - EM_V800 = 36, # NEC V800 - EM_FR20 = 37, # Fujitsu FR20 - EM_RH32 = 38, # TRW RH-32 - EM_RCE = 39, # Motorola RCE - EM_ARM = 40, # ARM 32-bit architecture (AARCH32) - EM_ALPHA = 41, # Digital Alpha - EM_SH = 42, # Hitachi SH - EM_SPARCV9 = 43, # SPARC Version 9 - EM_TRICORE = 44, # Siemens TriCore embedded processor - EM_ARC = 45, # Argonaut RISC Core, Argonaut Technologies Inc. - EM_H8_300 = 46, # Hitachi H8/300 - EM_H8_300H = 47, # Hitachi H8/300H - EM_H8S = 48, # Hitachi H8S - EM_H8_500 = 49, # Hitachi H8/500 - EM_IA_64 = 50, # Intel IA-64 processor architecture - EM_MIPS_X = 51, # Stanford MIPS-X - EM_COLDFIRE = 52, # Motorola ColdFire - EM_68HC12 = 53, # Motorola M68HC12 - EM_MMA = 54, # Fujitsu MMA Multimedia Accelerator - EM_PCP = 55, # Siemens PCP - EM_NCPU = 56, # Sony nCPU embedded RISC processor - EM_NDR1 = 57, # Denso NDR1 microprocessor - EM_STARCORE = 58, # Motorola Star*Core processor - EM_ME16 = 59, # Toyota ME16 processor - EM_ST100 = 60, # STMicroelectronics ST100 processor - EM_TINYJ = 61, # Advanced Logic Corp. TinyJ embedded processor family - EM_X86_64 = 62, # AMD x86-64 architecture - EM_PDSP = 63, # Sony DSP Processor - EM_PDP10 = 64, # Digital Equipment Corp. PDP-10 - EM_PDP11 = 65, # Digital Equipment Corp. PDP-11 - EM_FX66 = 66, # Siemens FX66 microcontroller - EM_ST9PLUS = 67, # STMicroelectronics ST9+ 8/16 bit microcontroller - EM_ST7 = 68, # STMicroelectronics ST7 8-bit microcontroller - EM_68HC16 = 69, # Motorola MC68HC16 Microcontroller - EM_68HC11 = 70, # Motorola MC68HC11 Microcontroller - EM_68HC08 = 71, # Motorola MC68HC08 Microcontroller - EM_68HC05 = 72, # Motorola MC68HC05 Microcontroller - EM_SVX = 73, # Silicon Graphics SVx - EM_ST19 = 74, # STMicroelectronics ST19 8-bit microcontroller - EM_VAX = 75, # Digital VAX - EM_CRIS = 76, # Axis Communications 32-bit embedded processor - EM_JAVELIN = 77, # Infineon Technologies 32-bit embedded processor - EM_FIREPATH = 78, # Element 14 64-bit DSP Processor - EM_ZSP = 79, # LSI Logic 16-bit DSP Processor - EM_MMIX = 80, # Donald Knuth's educational 64-bit processor - EM_HUANY = 81, # Harvard University machine-independent object files - EM_PRISM = 82, # SiTera Prism - EM_AVR = 83, # Atmel AVR 8-bit microcontroller - EM_FR30 = 84, # Fujitsu FR30 - EM_D10V = 85, # Mitsubishi D10V - EM_D30V = 86, # Mitsubishi D30V - EM_V850 = 87, # NEC v850 - EM_M32R = 88, # Mitsubishi M32R - EM_MN10300 = 89, # Matsushita MN10300 - EM_MN10200 = 90, # Matsushita MN10200 - EM_PJ = 91, # picoJava - EM_OPENRISC = 92, # OpenRISC 32-bit embedded processor - EM_ARC_COMPACT = 93, # ARC International ARCompact processor (old spelling/synonym: EM_ARC_A5) - EM_XTENSA = 94, # Tensilica Xtensa Architecture - EM_VIDEOCORE = 95, # Alphamosaic VideoCore processor - EM_TMM_GPP = 96, # Thompson Multimedia General Purpose Processor - EM_NS32K = 97, # National Semiconductor 32000 series - EM_TPC = 98, # Tenor Network TPC processor - EM_SNP1K = 99, # Trebia SNP 1000 processor - EM_ST200 = 100, # STMicroelectronics (www.st.com) ST200 microcontroller - EM_IP2K = 101, # Ubicom IP2xxx microcontroller family - EM_MAX = 102, # MAX Processor - EM_CR = 103, # National Semiconductor CompactRISC microprocessor - EM_F2MC16 = 104, # Fujitsu F2MC16 - EM_MSP430 = 105, # Texas Instruments embedded microcontroller msp430 - EM_BLACKFIN = 106, # Analog Devices Blackfin (DSP) processor - EM_SE_C33 = 107, # S1C33 Family of Seiko Epson processors - EM_SEP = 108, # Sharp embedded microprocessor - EM_ARCA = 109, # Arca RISC Microprocessor - EM_UNICORE = 110, # Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University - EM_EXCESS = 111, # eXcess: 16/32/64-bit configurable embedded CPU - EM_DXP = 112, # Icera Semiconductor Inc. Deep Execution Processor - EM_ALTERA_NIOS2 = 113, # Altera Nios II soft-core processor - EM_CRX = 114, # National Semiconductor CompactRISC CRX microprocessor - EM_XGATE = 115, # Motorola XGATE embedded processor - EM_C166 = 116, # Infineon C16x/XC16x processor - EM_M16C = 117, # Renesas M16C series microprocessors - EM_DSPIC30F = 118, # Microchip Technology dsPIC30F Digital Signal Controller - EM_CE = 119, # Freescale Communication Engine RISC core - EM_M32C = 120, # Renesas M32C series microprocessors - EM_TSK3000 = 131, # Altium TSK3000 core - EM_RS08 = 132, # Freescale RS08 embedded processor - EM_SHARC = 133, # Analog Devices SHARC family of 32-bit DSP processors - EM_ECOG2 = 134, # Cyan Technology eCOG2 microprocessor - EM_SCORE7 = 135, # Sunplus S+core7 RISC processor - EM_DSP24 = 136, # New Japan Radio (NJR) 24-bit DSP Processor - EM_VIDEOCORE3 = 137, # Broadcom VideoCore III processor - EM_LATTICEMICO32 = 138, # RISC processor for Lattice FPGA architecture - EM_SE_C17 = 139, # Seiko Epson C17 family - EM_TI_C6000 = 140, # The Texas Instruments TMS320C6000 DSP family - EM_TI_C2000 = 141, # The Texas Instruments TMS320C2000 DSP family - EM_TI_C5500 = 142, # The Texas Instruments TMS320C55x DSP family - EM_TI_ARP32 = 143, # Texas Instruments Application Specific RISC Processor, 32bit fetch - EM_TI_PRU = 144, # Texas Instruments Programmable Realtime Unit - EM_MMDSP_PLUS = 160, # STMicroelectronics 64bit VLIW Data Signal Processor - EM_CYPRESS_M8C = 161, # Cypress M8C microprocessor - EM_R32C = 162, # Renesas R32C series microprocessors - EM_TRIMEDIA = 163, # NXP Semiconductors TriMedia architecture family - EM_QDSP6 = 164, # QUALCOMM DSP6 Processor - EM_8051 = 165, # Intel 8051 and variants - EM_STXP7X = 166, # STMicroelectronics STxP7x family of configurable and extensible RISC processors - EM_NDS32 = 167, # Andes Technology compact code size embedded RISC processor family - EM_ECOG1 = 168, # Cyan Technology eCOG1X family - EM_ECOG1X = 168, # Cyan Technology eCOG1X family - EM_MAXQ30 = 169, # Dallas Semiconductor MAXQ30 Core Micro-controllers - EM_XIMO16 = 170, # New Japan Radio (NJR) 16-bit DSP Processor - EM_MANIK = 171, # M2000 Reconfigurable RISC Microprocessor - EM_CRAYNV2 = 172, # Cray Inc. NV2 vector architecture - EM_RX = 173, # Renesas RX family - EM_METAG = 174, # Imagination Technologies META processor architecture - EM_MCST_ELBRUS = 175, # MCST Elbrus general purpose hardware architecture - EM_ECOG16 = 176, # Cyan Technology eCOG16 family - EM_CR16 = 177, # National Semiconductor CompactRISC CR16 16-bit microprocessor - EM_ETPU = 178, # Freescale Extended Time Processing Unit - EM_SLE9X = 179, # Infineon Technologies SLE9X core - EM_L10M = 180, # Intel L10M - EM_K10M = 181, # Intel K10M - EM_AARCH64 = 183, # ARM 64-bit architecture (AARCH64) - EM_AVR32 = 185, # Atmel Corporation 32-bit microprocessor family - EM_STM8 = 186, # STMicroeletronics STM8 8-bit microcontroller - EM_TILE64 = 187, # Tilera TILE64 multicore architecture family - EM_TILEPRO = 188, # Tilera TILEPro multicore architecture family - EM_MICROBLAZE = 189, # Xilinx MicroBlaze 32-bit RISC soft processor core - EM_CUDA = 190, # NVIDIA CUDA architecture - EM_TILEGX = 191, # Tilera TILE-Gx multicore architecture family - EM_CLOUDSHIELD = 192, # CloudShield architecture family - EM_COREA_1ST = 193, # KIPO-KAIST Core-A 1st generation processor family - EM_COREA_2ND = 194, # KIPO-KAIST Core-A 2nd generation processor family - EM_ARC_COMPACT2 = 195, # Synopsys ARCompact V2 - EM_OPEN8 = 196, # Open8 8-bit RISC soft processor core - EM_RL78 = 197, # Renesas RL78 family - EM_VIDEOCORE5 = 198, # Broadcom VideoCore V processor - EM_78KOR = 199, # Renesas 78KOR family - EM_56800EX = 200, # Freescale 56800EX Digital Signal Controller (DSC) - EM_BA1 = 201, # Beyond BA1 CPU architecture - EM_BA2 = 202, # Beyond BA2 CPU architecture - EM_XCORE = 203, # XMOS xCORE processor family - EM_MCHP_PIC = 204, # Microchip 8-bit PIC(r) family - EM_INTEL205 = 205, # Reserved by Intel - EM_INTEL206 = 206, # Reserved by Intel - EM_INTEL207 = 207, # Reserved by Intel - EM_INTEL208 = 208, # Reserved by Intel - EM_INTEL209 = 209, # Reserved by Intel - EM_KM32 = 210, # KM211 KM32 32-bit processor - EM_KMX32 = 211, # KM211 KMX32 32-bit processor - EM_KMX16 = 212, # KM211 KMX16 16-bit processor - EM_KMX8 = 213, # KM211 KMX8 8-bit processor - EM_KVARC = 214, # KM211 KVARC processor - EM_CDP = 215, # Paneve CDP architecture family - EM_COGE = 216, # Cognitive Smart Memory Processor - EM_COOL = 217, # Bluechip Systems CoolEngine - EM_NORC = 218, # Nanoradio Optimized RISC - EM_CSR_KALIMBA = 219, # CSR Kalimba architecture family - EM_Z80 = 220, # Zilog Z80 - EM_VISIUM = 221, # Controls and Data Services VISIUMcore processor - EM_FT32 = 222, # FTDI Chip FT32 high performance 32-bit RISC architecture - EM_MOXIE = 223, # Moxie processor family - EM_AMDGPU = 224, # AMD GPU architecture - EM_RISCV = 243, # RISC-V - EM_BPF = 247, # Linux BPF - in-kernel virtual machine - EM_CSKY = 252, # C-SKY - EM_LOONGARCH = 258, # LoongArch - EM_FRV = 0x5441, # Fujitsu FR-V - # Reservations - # reserved 11-14 Reserved for future use - # reserved 16 Reserved for future use - # reserved 24-35 Reserved for future use - # reserved 121-130 Reserved for future use - # reserved 145-159 Reserved for future use - # reserved 145-159 Reserved for future use - # reserved 182 Reserved for future Intel use - # reserved 184 Reserved for future ARM use - # unknown/reserve? 225 - 242 - _default_=Pass, -) - -# sh_type in the section header -# -# This is the "base" dict that doesn't hold processor-specific values; from it -# we later create per-processor dicts that use the LOPROC...HIPROC range to -# define processor-specific values. The proper dict should be used based on the -# machine the ELF header refers to. -ENUM_SH_TYPE_BASE: Mapping[str, int] = dict( - SHT_NULL=0, - SHT_PROGBITS=1, - SHT_SYMTAB=2, - SHT_STRTAB=3, - SHT_RELA=4, - SHT_HASH=5, - SHT_DYNAMIC=6, - SHT_NOTE=7, - SHT_NOBITS=8, - SHT_REL=9, - SHT_SHLIB=10, - SHT_DYNSYM=11, - SHT_INIT_ARRAY=14, - SHT_FINI_ARRAY=15, - SHT_PREINIT_ARRAY=16, - SHT_GROUP=17, - SHT_SYMTAB_SHNDX=18, - SHT_RELR=19, - SHT_NUM=20, - SHT_LOOS=0x60000000, - SHT_GNU_ATTRIBUTES=0x6ffffff5, - SHT_GNU_HASH=0x6ffffff6, - SHT_GNU_LIBLIST=0x6ffffff7, - SHT_GNU_verdef=0x6ffffffd, # also SHT_SUNW_verdef - SHT_GNU_verneed=0x6ffffffe, # also SHT_SUNW_verneed - SHT_GNU_versym=0x6fffffff, # also SHT_SUNW_versym, SHT_HIOS - - # These are commented out because they carry no semantic meaning in - # themselves and may be overridden by target-specific enums. - #SHT_LOPROC=0x70000000, - #SHT_HIPROC=0x7fffffff, - - SHT_LOUSER=0x80000000, - SHT_HIUSER=0xffffffff, - SHT_SUNW_LDYNSYM=0x6ffffff3, - SHT_SUNW_syminfo=0x6ffffffc, - _default_=Pass, -) - -ENUM_SH_TYPE_AMD64: Mapping[str, int] = merge_dicts( - ENUM_SH_TYPE_BASE, - dict(SHT_AMD64_UNWIND=0x70000001)) - -ENUM_SH_TYPE_ARM: Mapping[str, int] = merge_dicts( - ENUM_SH_TYPE_BASE, - dict( - SHT_ARM_EXIDX=0x70000001, - SHT_ARM_PREEMPTMAP=0x70000002, - SHT_ARM_ATTRIBUTES=0x70000003, - SHT_ARM_DEBUGOVERLAY=0x70000004)) - -ENUM_SH_TYPE_AARCH64: Mapping[str, int] = merge_dicts( - ENUM_SH_TYPE_BASE, - dict(SHT_AARCH64_ATTRIBUTES=0x70000003)) - -ENUM_SH_TYPE_RISCV: Mapping[str, int] = merge_dicts( - ENUM_SH_TYPE_BASE, - dict(SHT_RISCV_ATTRIBUTES=0x70000003)) - -ENUM_SH_TYPE_MIPS: Mapping[str, int] = merge_dicts( - ENUM_SH_TYPE_BASE, - dict( - SHT_MIPS_LIBLIST=0x70000000, - SHT_MIPS_DEBUG=0x70000005, - SHT_MIPS_REGINFO=0x70000006, - SHT_MIPS_PACKAGE=0x70000007, - SHT_MIPS_PACKSYM=0x70000008, - SHT_MIPS_RELD=0x70000009, - SHT_MIPS_IFACE=0x7000000b, - SHT_MIPS_CONTENT=0x7000000c, - SHT_MIPS_OPTIONS=0x7000000d, - SHT_MIPS_SHDR=0x70000010, - SHT_MIPS_FDESC=0x70000011, - SHT_MIPS_EXTSYM=0x70000012, - SHT_MIPS_DENSE=0x70000013, - SHT_MIPS_PDESC=0x70000014, - SHT_MIPS_LOCSYM=0x70000015, - SHT_MIPS_AUXSYM=0x70000016, - SHT_MIPS_OPTSYM=0x70000017, - SHT_MIPS_LOCSTR=0x70000018, - SHT_MIPS_LINE=0x70000019, - SHT_MIPS_RFDESC=0x7000001a, - SHT_MIPS_DELTASYM=0x7000001b, - SHT_MIPS_DELTAINST=0x7000001c, - SHT_MIPS_DELTACLASS=0x7000001d, - SHT_MIPS_DWARF=0x7000001e, - SHT_MIPS_DELTADECL=0x7000001f, - SHT_MIPS_SYMBOL_LIB=0x70000020, - SHT_MIPS_EVENTS=0x70000021, - SHT_MIPS_TRANSLATE=0x70000022, - SHT_MIPS_PIXIE=0x70000023, - SHT_MIPS_XLATE=0x70000024, - SHT_MIPS_XLATE_DEBUG=0x70000025, - SHT_MIPS_WHIRL=0x70000026, - SHT_MIPS_EH_REGION=0x70000027, - SHT_MIPS_XLATE_OLD=0x70000028, - SHT_MIPS_PDR_EXCEPTION=0x70000029, - SHT_MIPS_ABIFLAGS=0x7000002a)) - -ENUM_ELFCOMPRESS_TYPE: Mapping[str, int] = dict( - ELFCOMPRESS_ZLIB=1, - ELFCOMPRESS_LOOS=0x60000000, - ELFCOMPRESS_HIOS=0x6fffffff, - ELFCOMPRESS_LOPROC=0x70000000, - ELFCOMPRESS_HIPROC=0x7fffffff, - _default_=Pass, -) - -# p_type in the program header -# some values scavenged from the ELF headers in binutils-2.21 -# -# Using the same base + per-processor augmentation technique as in sh_type. -ENUM_P_TYPE_BASE: Mapping[str, int] = dict( - PT_NULL=0, - PT_LOAD=1, - PT_DYNAMIC=2, - PT_INTERP=3, - PT_NOTE=4, - PT_SHLIB=5, - PT_PHDR=6, - PT_TLS=7, - PT_LOOS=0x60000000, - PT_HIOS=0x6fffffff, - - # These are commented out because they carry no semantic meaning in - # themselves and may be overridden by target-specific enums. - #PT_LOPROC=0x70000000, - #PT_HIPROC=0x7fffffff, - - PT_GNU_EH_FRAME=0x6474e550, - PT_GNU_STACK=0x6474e551, - PT_GNU_RELRO=0x6474e552, - PT_GNU_PROPERTY=0x6474e553, - _default_=Pass, -) - -ENUM_P_TYPE_ARM: Mapping[str, int] = merge_dicts( - ENUM_P_TYPE_BASE, - dict( - PT_ARM_ARCHEXT=0x70000000, - PT_ARM_EXIDX=0x70000001)) - -ENUM_P_TYPE_AARCH64: Mapping[str, int] = merge_dicts( - ENUM_P_TYPE_BASE, - dict( - PT_AARCH64_ARCHEXT=0x70000000, - PT_AARCH64_UNWIND=0x70000001)) - -ENUM_P_TYPE_MIPS: Mapping[str, int] = merge_dicts( - ENUM_P_TYPE_BASE, - dict(PT_MIPS_ABIFLAGS=0x70000003)) - -ENUM_P_TYPE_RISCV: Mapping[str, int] = merge_dicts( - ENUM_P_TYPE_BASE, - dict(PT_RISCV_ATTRIBUTES=0x70000003)) - -# st_info bindings in the symbol header -ENUM_ST_INFO_BIND: Mapping[str, int] = dict( - STB_LOCAL=0, - STB_GLOBAL=1, - STB_WEAK=2, - STB_NUM=3, - STB_LOOS=10, - STB_HIOS=12, - STB_LOPROC=13, - STB_HIPROC=15, - _default_=Pass, -) - -# st_info type in the symbol header -ENUM_ST_INFO_TYPE: Mapping[str, int] = dict( - STT_NOTYPE=0, - STT_OBJECT=1, - STT_FUNC=2, - STT_SECTION=3, - STT_FILE=4, - STT_COMMON=5, - STT_TLS=6, - STT_NUM=7, - STT_RELC=8, - STT_SRELC=9, - STT_LOOS=10, - STT_HIOS=12, - STT_LOPROC=13, - STT_HIPROC=15, - _default_=Pass, -) - -# visibility from st_other -ENUM_ST_VISIBILITY: Mapping[str, int] = dict( - STV_DEFAULT=0, - STV_INTERNAL=1, - STV_HIDDEN=2, - STV_PROTECTED=3, - STV_EXPORTED=4, - STV_SINGLETON=5, - STV_ELIMINATE=6, - _default_=Pass, -) - -ENUM_ST_LOCAL: Mapping[str, int] = dict( - _default_=Pass, -) - -# st_shndx -ENUM_ST_SHNDX: Mapping[str, int] = dict( - SHN_UNDEF=0, - SHN_ABS=0xfff1, - SHN_COMMON=0xfff2, - _default_=Pass, -) - -# d_tag -ENUM_D_TAG_COMMON: Mapping[str, int] = dict( - DT_NULL=0, - DT_NEEDED=1, - DT_PLTRELSZ=2, - DT_PLTGOT=3, - DT_HASH=4, - DT_STRTAB=5, - DT_SYMTAB=6, - DT_RELA=7, - DT_RELASZ=8, - DT_RELAENT=9, - DT_STRSZ=10, - DT_SYMENT=11, - DT_INIT=12, - DT_FINI=13, - DT_SONAME=14, - DT_RPATH=15, - DT_SYMBOLIC=16, - DT_REL=17, - DT_RELSZ=18, - DT_RELENT=19, - DT_PLTREL=20, - DT_DEBUG=21, - DT_TEXTREL=22, - DT_JMPREL=23, - DT_BIND_NOW=24, - DT_INIT_ARRAY=25, - DT_FINI_ARRAY=26, - DT_INIT_ARRAYSZ=27, - DT_FINI_ARRAYSZ=28, - DT_RUNPATH=29, - DT_FLAGS=30, - DT_ENCODING=32, - DT_PREINIT_ARRAY=32, - DT_PREINIT_ARRAYSZ=33, - DT_SYMTAB_SHNDX=34, - DT_RELRSZ=35, - DT_RELR=36, - DT_RELRENT=37, - DT_NUM=38, - DT_LOOS=0x6000000d, - DT_ANDROID_REL=0x6000000f, - DT_ANDROID_RELSZ=0x60000010, - DT_ANDROID_RELA=0x60000011, - DT_ANDROID_RELASZ=0x60000012, - DT_ANDROID_RELR=0x6fffe000, - DT_ANDROID_RELRSZ=0x6fffe001, - DT_ANDROID_RELRENT=0x6fffe003, - DT_ANDROID_RELRCOUNT=0x6fffe005, - DT_HIOS=0x6ffff000, - DT_LOPROC=0x70000000, - DT_HIPROC=0x7fffffff, - DT_PROCNUM=0x35, - DT_VALRNGLO=0x6ffffd00, - DT_GNU_PRELINKED=0x6ffffdf5, - DT_GNU_CONFLICTSZ=0x6ffffdf6, - DT_GNU_LIBLISTSZ=0x6ffffdf7, - DT_CHECKSUM=0x6ffffdf8, - DT_PLTPADSZ=0x6ffffdf9, - DT_MOVEENT=0x6ffffdfa, - DT_MOVESZ=0x6ffffdfb, - DT_SYMINSZ=0x6ffffdfe, - DT_SYMINENT=0x6ffffdff, - DT_GNU_HASH=0x6ffffef5, - DT_TLSDESC_PLT=0x6ffffef6, - DT_TLSDESC_GOT=0x6ffffef7, - DT_GNU_CONFLICT=0x6ffffef8, - DT_GNU_LIBLIST=0x6ffffef9, - DT_CONFIG=0x6ffffefa, - DT_DEPAUDIT=0x6ffffefb, - DT_AUDIT=0x6ffffefc, - DT_PLTPAD=0x6ffffefd, - DT_MOVETAB=0x6ffffefe, - DT_SYMINFO=0x6ffffeff, - DT_VERSYM=0x6ffffff0, - DT_RELACOUNT=0x6ffffff9, - DT_RELCOUNT=0x6ffffffa, - DT_FLAGS_1=0x6ffffffb, - DT_VERDEF=0x6ffffffc, - DT_VERDEFNUM=0x6ffffffd, - DT_VERNEED=0x6ffffffe, - DT_VERNEEDNUM=0x6fffffff, - DT_AUXILIARY=0x7ffffffd, - DT_FILTER=0x7fffffff, - _default_=Pass, -) - -# Above are the dynamic tags which are valid always. -# Below are the dynamic tags which are only valid in certain contexts. - -ENUM_D_TAG_SOLARIS: Mapping[str, int] = dict( - DT_SUNW_AUXILIARY=0x6000000d, - DT_SUNW_RTLDINF=0x6000000e, - DT_SUNW_FILTER=0x6000000f, - DT_SUNW_CAP=0x60000010, - DT_SUNW_SYMTAB=0x60000011, - DT_SUNW_SYMSZ=0x60000012, - DT_SUNW_ENCODING=0x60000013, - DT_SUNW_SORTENT=0x60000013, - DT_SUNW_SYMSORT=0x60000014, - DT_SUNW_SYMSORTSZ=0x60000015, - DT_SUNW_TLSSORT=0x60000016, - DT_SUNW_TLSSORTSZ=0x60000017, - DT_SUNW_CAPINFO=0x60000018, - DT_SUNW_STRPAD=0x60000019, - DT_SUNW_CAPCHAIN=0x6000001a, - DT_SUNW_LDMACH=0x6000001b, - DT_SUNW_CAPCHAINENT=0x6000001d, - DT_SUNW_CAPCHAINSZ=0x6000001f, -) - -ENUM_D_TAG_MIPS: Mapping[str, int] = dict( - DT_MIPS_RLD_VERSION=0x70000001, - DT_MIPS_TIME_STAMP=0x70000002, - DT_MIPS_ICHECKSUM=0x70000003, - DT_MIPS_IVERSION=0x70000004, - DT_MIPS_FLAGS=0x70000005, - DT_MIPS_BASE_ADDRESS=0x70000006, - DT_MIPS_CONFLICT=0x70000008, - DT_MIPS_LIBLIST=0x70000009, - DT_MIPS_LOCAL_GOTNO=0x7000000a, - DT_MIPS_CONFLICTNO=0x7000000b, - DT_MIPS_LIBLISTNO=0x70000010, - DT_MIPS_SYMTABNO=0x70000011, - DT_MIPS_UNREFEXTNO=0x70000012, - DT_MIPS_GOTSYM=0x70000013, - DT_MIPS_HIPAGENO=0x70000014, - DT_MIPS_RLD_MAP=0x70000016, - DT_MIPS_RLD_MAP_REL=0x70000035, - DT_MIPS_XHASH=0x70000036, -) - -ENUM_D_TAG_AARCH64: Mapping[str, int] = dict( - DT_AARCH64_BTI_PLT=0x70000001, -) - -# Here is the mapping from e_machine enum to the extra dynamic tags which it -# validates. Solaris is missing from this list because its inclusion is not -# controlled by e_machine but rather e_ident[EI_OSABI]. -# TODO: add the rest of the machine-specific dynamic tags, not just mips and -# solaris - -ENUMMAP_EXTRA_D_TAG_MACHINE: Mapping[str, Mapping[str, int]] = dict( - EM_MIPS=ENUM_D_TAG_MIPS, - EM_MIPS_RS3_LE=ENUM_D_TAG_MIPS, - EM_AARCH64=ENUM_D_TAG_AARCH64 -) - -# Here is the full combined mapping from tag name to value - -ENUM_D_TAG = merge_dicts( - ENUM_D_TAG_COMMON, - ENUM_D_TAG_SOLARIS, - *ENUMMAP_EXTRA_D_TAG_MACHINE.values(), -) - -ENUM_DT_FLAGS: Mapping[str, int] = dict( - DF_ORIGIN=0x1, - DF_SYMBOLIC=0x2, - DF_TEXTREL=0x4, - DF_BIND_NOW=0x8, - DF_STATIC_TLS=0x10, -) - -ENUM_DT_FLAGS_1: Mapping[str, int] = dict( - DF_1_NOW=0x1, - DF_1_GLOBAL=0x2, - DF_1_GROUP=0x4, - DF_1_NODELETE=0x8, - DF_1_LOADFLTR=0x10, - DF_1_INITFIRST=0x20, - DF_1_NOOPEN=0x40, - DF_1_ORIGIN=0x80, - DF_1_DIRECT=0x100, - DF_1_TRANS=0x200, - DF_1_INTERPOSE=0x400, - DF_1_NODEFLIB=0x800, - DF_1_NODUMP=0x1000, - DF_1_CONFALT=0x2000, - DF_1_ENDFILTEE=0x4000, - DF_1_DISPRELDNE=0x8000, - DF_1_DISPRELPND=0x10000, - DF_1_NODIRECT=0x20000, - DF_1_IGNMULDEF=0x40000, - DF_1_NOKSYMS=0x80000, - DF_1_NOHDR=0x100000, - DF_1_EDITED=0x200000, - DF_1_NORELOC=0x400000, - DF_1_SYMINTPOSE=0x800000, - DF_1_GLOBAUDIT=0x1000000, - DF_1_SINGLETON=0x2000000, - DF_1_STUB=0x4000000, - DF_1_PIE=0x8000000, -) - -ENUM_RELOC_TYPE_MIPS: Mapping[str, int] = dict( - R_MIPS_NONE=0, - R_MIPS_16=1, - R_MIPS_32=2, - R_MIPS_REL32=3, - R_MIPS_26=4, - R_MIPS_HI16=5, - R_MIPS_LO16=6, - R_MIPS_GPREL16=7, - R_MIPS_LITERAL=8, - R_MIPS_GOT16=9, - R_MIPS_PC16=10, - R_MIPS_CALL16=11, - R_MIPS_GPREL32=12, - R_MIPS_SHIFT5=16, - R_MIPS_SHIFT6=17, - R_MIPS_64=18, - R_MIPS_GOT_DISP=19, - R_MIPS_GOT_PAGE=20, - R_MIPS_GOT_OFST=21, - R_MIPS_GOT_HI16=22, - R_MIPS_GOT_LO16=23, - R_MIPS_SUB=24, - R_MIPS_INSERT_A=25, - R_MIPS_INSERT_B=26, - R_MIPS_DELETE=27, - R_MIPS_HIGHER=28, - R_MIPS_HIGHEST=29, - R_MIPS_CALL_HI16=30, - R_MIPS_CALL_LO16=31, - R_MIPS_SCN_DISP=32, - R_MIPS_REL16=33, - R_MIPS_ADD_IMMEDIATE=34, - R_MIPS_PJUMP=35, - R_MIPS_RELGOT=36, - R_MIPS_JALR=37, - R_MIPS_TLS_DTPMOD32=38, - R_MIPS_TLS_DTPREL32=39, - R_MIPS_TLS_DTPMOD64=40, - R_MIPS_TLS_DTPREL64=41, - R_MIPS_TLS_GD=42, - R_MIPS_TLS_LDM=43, - R_MIPS_TLS_DTPREL_HI16=44, - R_MIPS_TLS_DTPREL_LO16=45, - R_MIPS_TLS_GOTTPREL=46, - R_MIPS_TLS_TPREL32=47, - R_MIPS_TLS_TPREL64=48, - R_MIPS_TLS_TPREL_HI16=49, - R_MIPS_TLS_TPREL_LO16=50, - R_MIPS_GLOB_DAT=51, - R_MIPS_COPY=126, - R_MIPS_JUMP_SLOT=127, - _default_=Pass, -) - -ENUM_RELOC_TYPE_i386: Mapping[str, int] = dict( - R_386_NONE=0, - R_386_32=1, - R_386_PC32=2, - R_386_GOT32=3, - R_386_PLT32=4, - R_386_COPY=5, - R_386_GLOB_DAT=6, - R_386_JUMP_SLOT=7, - R_386_RELATIVE=8, - R_386_GOTOFF=9, - R_386_GOTPC=10, - R_386_32PLT=11, - R_386_TLS_TPOFF=14, - R_386_TLS_IE=15, - R_386_TLS_GOTIE=16, - R_386_TLS_LE=17, - R_386_TLS_GD=18, - R_386_TLS_LDM=19, - R_386_16=20, - R_386_PC16=21, - R_386_8=22, - R_386_PC8=23, - R_386_TLS_GD_32=24, - R_386_TLS_GD_PUSH=25, - R_386_TLS_GD_CALL=26, - R_386_TLS_GD_POP=27, - R_386_TLS_LDM_32=28, - R_386_TLS_LDM_PUSH=29, - R_386_TLS_LDM_CALL=30, - R_386_TLS_LDM_POP=31, - R_386_TLS_LDO_32=32, - R_386_TLS_IE_32=33, - R_386_TLS_LE_32=34, - R_386_TLS_DTPMOD32=35, - R_386_TLS_DTPOFF32=36, - R_386_TLS_TPOFF32=37, - R_386_TLS_GOTDESC=39, - R_386_TLS_DESC_CALL=40, - R_386_TLS_DESC=41, - R_386_IRELATIVE=42, - R_386_USED_BY_INTEL_200=200, - R_386_GNU_VTINHERIT=250, - R_386_GNU_VTENTRY=251, - _default_=Pass, -) - -ENUM_RELOC_TYPE_x64: Mapping[str, int] = dict( - R_X86_64_NONE=0, - R_X86_64_64=1, - R_X86_64_PC32=2, - R_X86_64_GOT32=3, - R_X86_64_PLT32=4, - R_X86_64_COPY=5, - R_X86_64_GLOB_DAT=6, - R_X86_64_JUMP_SLOT=7, - R_X86_64_RELATIVE=8, - R_X86_64_GOTPCREL=9, - R_X86_64_32=10, - R_X86_64_32S=11, - R_X86_64_16=12, - R_X86_64_PC16=13, - R_X86_64_8=14, - R_X86_64_PC8=15, - R_X86_64_DTPMOD64=16, - R_X86_64_DTPOFF64=17, - R_X86_64_TPOFF64=18, - R_X86_64_TLSGD=19, - R_X86_64_TLSLD=20, - R_X86_64_DTPOFF32=21, - R_X86_64_GOTTPOFF=22, - R_X86_64_TPOFF32=23, - R_X86_64_PC64=24, - R_X86_64_GOTOFF64=25, - R_X86_64_GOTPC32=26, - R_X86_64_GOT64=27, - R_X86_64_GOTPCREL64=28, - R_X86_64_GOTPC64=29, - R_X86_64_GOTPLT64=30, - R_X86_64_PLTOFF64=31, - R_X86_64_GOTPC32_TLSDESC=34, - R_X86_64_TLSDESC_CALL=35, - R_X86_64_TLSDESC=36, - R_X86_64_IRELATIVE=37, - R_X86_64_REX_GOTPCRELX=42, - R_X86_64_GNU_VTINHERIT=250, - R_X86_64_GNU_VTENTRY=251, - _default_=Pass, -) - -ENUM_RELOC_TYPE_BPF: Mapping[str, int] = dict( - R_BPF_NONE=0, - R_BPF_64_64=1, - R_BPF_64_ABS64=2, - R_BPF_64_ABS32=3, - R_BPF_64_NODYLD32=4, - R_BPF_64_32=10, - _default_=Pass, -) - -# https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc -ENUM_RELOC_TYPE_LOONGARCH: Mapping[str, int] = dict( - R_LARCH_NONE=0, - R_LARCH_32=1, - R_LARCH_64=2, - R_LARCH_RELATIVE=3, - R_LARCH_COPY=4, - R_LARCH_JUMP_SLOT=5, - R_LARCH_TLS_DTPMOD32=6, - R_LARCH_TLS_DTPMOD64=7, - R_LARCH_TLS_DTPREL32=8, - R_LARCH_TLS_DTPREL64=9, - R_LARCH_TLS_TPREL32=10, - R_LARCH_TLS_TPREL64=11, - R_LARCH_IRELATIVE=12, - R_LARCH_MARK_LA=20, - R_LARCH_MARK_PCREL=21, - R_LARCH_SOP_PUSH_PCREL=22, - R_LARCH_SOP_PUSH_ABSOLUTE=23, - R_LARCH_SOP_PUSH_DUP=24, - R_LARCH_SOP_PUSH_GPREL=25, - R_LARCH_SOP_PUSH_TLS_TPREL=26, - R_LARCH_SOP_PUSH_TLS_GOT=27, - R_LARCH_SOP_PUSH_TLS_GD=28, - R_LARCH_SOP_PUSH_PLT_PCREL=29, - R_LARCH_SOP_ASSERT=30, - R_LARCH_SOP_NOT=31, - R_LARCH_SOP_SUB=32, - R_LARCH_SOP_SL=33, - R_LARCH_SOP_SR=34, - R_LARCH_SOP_ADD=35, - R_LARCH_SOP_AND=36, - R_LARCH_SOP_IF_ELSE=37, - R_LARCH_SOP_POP_32_S_10_5=38, - R_LARCH_SOP_POP_32_U_10_12=39, - R_LARCH_SOP_POP_32_S_10_12=40, - R_LARCH_SOP_POP_32_S_10_16=41, - R_LARCH_SOP_POP_32_S_10_16_S2=42, - R_LARCH_SOP_POP_32_S_5_20=43, - R_LARCH_SOP_POP_32_S_0_5_10_16_S2=44, - R_LARCH_SOP_POP_32_S_0_10_10_16_S2=45, - R_LARCH_SOP_POP_32_U=46, - R_LARCH_ADD8=47, - R_LARCH_ADD16=48, - R_LARCH_ADD24=49, - R_LARCH_ADD32=50, - R_LARCH_ADD64=51, - R_LARCH_SUB8=52, - R_LARCH_SUB16=53, - R_LARCH_SUB24=54, - R_LARCH_SUB32=55, - R_LARCH_SUB64=56, - R_LARCH_GNU_VTINHERIT=57, - R_LARCH_GNU_VTENTRY=58, - R_LARCH_B16=64, - R_LARCH_B21=65, - R_LARCH_B26=66, - R_LARCH_ABS_HI20=67, - R_LARCH_ABS_LO12=68, - R_LARCH_ABS64_LO20=69, - R_LARCH_ABS64_HI12=70, - R_LARCH_PCALA_HI20=71, - R_LARCH_PCALA_LO12=72, - R_LARCH_PCALA64_LO20=73, - R_LARCH_PCALA64_HI12=74, - R_LARCH_GOT_PC_HI20=75, - R_LARCH_GOT_PC_LO12=76, - R_LARCH_GOT64_PC_LO20=77, - R_LARCH_GOT64_PC_HI12=78, - R_LARCH_GOT_HI20=79, - R_LARCH_GOT_LO12=80, - R_LARCH_GOT64_LO20=81, - R_LARCH_GOT64_HI12=82, - R_LARCH_TLS_LE_HI20=83, - R_LARCH_TLS_LE_LO12=84, - R_LARCH_TLS_LE64_LO20=85, - R_LARCH_TLS_LE64_HI12=86, - R_LARCH_TLS_IE_PC_HI20=87, - R_LARCH_TLS_IE_PC_LO12=88, - R_LARCH_TLS_IE64_PC_LO20=89, - R_LARCH_TLS_IE64_PC_HI12=90, - R_LARCH_TLS_IE_HI20=91, - R_LARCH_TLS_IE_LO12=92, - R_LARCH_TLS_IE64_LO20=93, - R_LARCH_TLS_IE64_HI12=94, - R_LARCH_TLS_LD_PC_HI20=95, - R_LARCH_TLS_LD_HI20=96, - R_LARCH_TLS_GD_PC_HI20=97, - R_LARCH_TLS_GD_HI20=98, - R_LARCH_32_PCREL=99, - R_LARCH_RELAX=100, - R_LARCH_DELETE=101, - R_LARCH_ALIGN=102, - R_LARCH_PCREL20_S2=103, - R_LARCH_CFA=104, - R_LARCH_ADD6=105, - R_LARCH_SUB6=106, - R_LARCH_ADD_ULEB128=107, - R_LARCH_SUB_ULEB128=108, - R_LARCH_64_PCREL=109, - _default_=Pass, -) - -ENUM_RELOC_TYPE_S390X: Mapping[str, int] = dict( - R_390_NONE=0, - R_390_8=1, - R_390_12=2, - R_390_16=3, - R_390_32=4, - R_390_PC32=5, - R_390_GOT12=6, - R_390_GOT32=7, - R_390_PLT32=8, - R_390_COPY=9, - R_390_GLOB_DAT=10, - R_390_JMP_SLOT=11, - R_390_RELATIVE=12, - R_390_GOTOFF32=13, - R_390_GOTPC=14, - R_390_GOT16=15, - R_390_PC16=16, - R_390_PC16DBL=17, - R_390_PLT16DBL=18, - R_390_PC32DBL=19, - R_390_PLT32DBL=20, - R_390_GOTPCDBL=21, - R_390_64=22, - R_390_PC64=23, - R_390_GOT64=24, - R_390_PLT64=25, - R_390_GOTENT=26, - R_390_GOTOFF16=27, - R_390_GOTOFF64=28, - R_390_GOTPLT12=29, - R_390_GOTPLT16=30, - R_390_GOTPLT32=31, - R_390_GOTPLT64=32, - R_390_GOTPLTENT=33, - R_390_PLTOFF16=34, - R_390_PLTOFF32=35, - R_390_PLTOFF64=36, - R_390_TLS_LOAD=37, - R_390_TLS_GDCALL=38, - R_390_TLS_LDCALL=39, - R_390_TLS_GD64=41, - R_390_TLS_GOTIE12=42, - R_390_TLS_GOTIE64=44, - R_390_TLS_LDM64=46, - R_390_TLS_IE64=48, - R_390_TLS_IEENT=49, - R_390_TLS_LE64=51, - R_390_TLS_LDO64=53, - R_390_TLS_DTPMOD=54, - R_390_TLS_DTPOFF=55, - R_390_TLS_TPOFF=56, - R_390_20=57, - R_390_GOT20=58, - R_390_GOTPLT20=59, - R_390_TLS_GOTIE20=60, - R_390_IRELATIVE=61, - R_390_PC12DBL=62, - R_390_PLT12DBL=63, - R_390_PC24DBL=64, - R_390_PLT24DBL=65, -) - -# Sunw Syminfo Bound To special values -ENUM_SUNW_SYMINFO_BOUNDTO: Mapping[str, int] = dict( - SYMINFO_BT_SELF=0xffff, - SYMINFO_BT_PARENT=0xfffe, - SYMINFO_BT_NONE=0xfffd, - SYMINFO_BT_EXTERN=0xfffc, - _default_=Pass, -) - -# Versym section, version dependency index -ENUM_VERSYM = dict( - VER_NDX_LOCAL=0, - VER_NDX_GLOBAL=1, - VER_NDX_LORESERVE=0xff00, - VER_NDX_ELIMINATE=0xff01, - _default_=Pass, -) - -# PT_NOTE section types for all ELF types except ET_CORE -ENUM_NOTE_N_TYPE: Mapping[str, int] = dict( - NT_GNU_ABI_TAG=1, - NT_GNU_HWCAP=2, - NT_GNU_BUILD_ID=3, - NT_GNU_GOLD_VERSION=4, - NT_GNU_PROPERTY_TYPE_0=5, - _default_=Pass, -) - -# PT_NOTE section types for ET_CORE -ENUM_CORE_NOTE_N_TYPE: Mapping[str, int] = dict( - NT_PRSTATUS=1, - NT_FPREGSET=2, - NT_PRPSINFO=3, - NT_TASKSTRUCT=4, - NT_AUXV=6, - NT_SIGINFO=0x53494749, - NT_FILE=0x46494c45, - _default_=Pass, -) - -# Values in GNU .note.ABI-tag notes (n_type=='NT_GNU_ABI_TAG') -ENUM_NOTE_ABI_TAG_OS: Mapping[str, int] = dict( - ELF_NOTE_OS_LINUX=0, - ELF_NOTE_OS_GNU=1, - ELF_NOTE_OS_SOLARIS2=2, - ELF_NOTE_OS_FREEBSD=3, - ELF_NOTE_OS_NETBSD=4, - ELF_NOTE_OS_SYLLABLE=5, - _default_=Pass, -) - -# Values in GNU .note.gnu.property notes (n_type=='NT_GNU_PROPERTY_TYPE_0') -ENUM_NOTE_GNU_PROPERTY_TYPE: Mapping[str, int] = dict( - GNU_PROPERTY_STACK_SIZE=1, - GNU_PROPERTY_NO_COPY_ON_PROTECTED=2, - GNU_PROPERTY_X86_FEATURE_1_AND=0xc0000002, - GNU_PROPERTY_X86_ISA_1_NEEDED=0xc0008002, - GNU_PROPERTY_X86_FEATURE_2_USED=0xc0010001, - GNU_PROPERTY_X86_ISA_1_USED=0xc0010002, - GNU_PROPERTY_AARCH64_FEATURE_1_AND=0xc0000000, - _default_=Pass, -) - -ENUM_GNU_PROPERTY_X86_FEATURE_1_FLAGS: Mapping[str, int] = dict( - GNU_PROPERTY_X86_FEATURE_1_IBT=1, - GNU_PROPERTY_X86_FEATURE_1_SHSTK=2, - GNU_PROPERTY_X86_FEATURE_1_LAM_U48=4, - GNU_PROPERTY_X86_FEATURE_1_LAM_U57=8, - _default_=Pass -) - -ENUM_RELOC_TYPE_ARM: Mapping[str, int] = dict( - R_ARM_NONE=0, - R_ARM_PC24=1, - R_ARM_ABS32=2, - R_ARM_REL32=3, - R_ARM_LDR_PC_G0=4, - R_ARM_ABS16=5, - R_ARM_ABS12=6, - R_ARM_THM_ABS5=7, - R_ARM_ABS8=8, - R_ARM_SBREL32=9, - R_ARM_THM_CALL=10, - R_ARM_THM_PC8=11, - R_ARM_BREL_ADJ=12, - R_ARM_SWI24=13, - R_ARM_THM_SWI8=14, - R_ARM_XPC25=15, - R_ARM_THM_XPC22=16, - R_ARM_TLS_DTPMOD32=17, - R_ARM_TLS_DTPOFF32=18, - R_ARM_TLS_TPOFF32=19, - R_ARM_COPY=20, - R_ARM_GLOB_DAT=21, - R_ARM_JUMP_SLOT=22, - R_ARM_RELATIVE=23, - R_ARM_GOTOFF32=24, - R_ARM_BASE_PREL=25, - R_ARM_GOT_BREL=26, - R_ARM_PLT32=27, - R_ARM_CALL=28, - R_ARM_JUMP24=29, - R_ARM_THM_JUMP24=30, - R_ARM_BASE_ABS=31, - R_ARM_ALU_PCREL_7_0=32, - R_ARM_ALU_PCREL_15_8=33, - R_ARM_ALU_PCREL_23_15=34, - R_ARM_LDR_SBREL_11_0_NC=35, - R_ARM_ALU_SBREL_19_12_NC=36, - R_ARM_ALU_SBREL_27_20_CK=37, - R_ARM_TARGET1=38, - R_ARM_SBREL31=39, - R_ARM_V4BX=40, - R_ARM_TARGET2=41, - R_ARM_PREL31=42, - R_ARM_MOVW_ABS_NC=43, - R_ARM_MOVT_ABS=44, - R_ARM_MOVW_PREL_NC=45, - R_ARM_MOVT_PREL=46, - R_ARM_THM_MOVW_ABS_NC=47, - R_ARM_THM_MOVT_ABS=48, - R_ARM_THM_MOVW_PREL_NC=49, - R_ARM_THM_MOVT_PREL=50, - R_ARM_THM_JUMP19=51, - R_ARM_THM_JUMP6=52, - R_ARM_THM_ALU_PREL_11_0=53, - R_ARM_THM_PC12=54, - R_ARM_ABS32_NOI=55, - R_ARM_REL32_NOI=56, - R_ARM_ALU_PC_G0_NC=57, - R_ARM_ALU_PC_G0=58, - R_ARM_ALU_PC_G1_NC=59, - R_ARM_ALU_PC_G1=60, - R_ARM_ALU_PC_G2=61, - R_ARM_LDR_PC_G1=62, - R_ARM_LDR_PC_G2=63, - R_ARM_LDRS_PC_G0=64, - R_ARM_LDRS_PC_G1=65, - R_ARM_LDRS_PC_G2=66, - R_ARM_LDC_PC_G0=67, - R_ARM_LDC_PC_G1=68, - R_ARM_LDC_PC_G2=69, - R_ARM_ALU_SB_G0_NC=70, - R_ARM_ALU_SB_G0=71, - R_ARM_ALU_SB_G1_NC=72, - R_ARM_ALU_SB_G1=73, - R_ARM_ALU_SB_G2=74, - R_ARM_LDR_SB_G0=75, - R_ARM_LDR_SB_G1=76, - R_ARM_LDR_SB_G2=77, - R_ARM_LDRS_SB_G0=78, - R_ARM_LDRS_SB_G1=79, - R_ARM_LDRS_SB_G2=80, - R_ARM_LDC_SB_G0=81, - R_ARM_LDC_SB_G1=82, - R_ARM_LDC_SB_G2=83, - R_ARM_MOVW_BREL_NC=84, - R_ARM_MOVT_BREL=85, - R_ARM_MOVW_BREL=86, - R_ARM_THM_MOVW_BREL_NC=87, - R_ARM_THM_MOVT_BREL=88, - R_ARM_THM_MOVW_BREL=89, - R_ARM_PLT32_ABS=94, - R_ARM_GOT_ABS=95, - R_ARM_GOT_PREL=96, - R_ARM_GOT_BREL12=97, - R_ARM_GOTOFF12=98, - R_ARM_GOTRELAX=99, - R_ARM_GNU_VTENTRY=100, - R_ARM_GNU_VTINHERIT=101, - R_ARM_THM_JUMP11=102, - R_ARM_THM_JUMP8=103, - R_ARM_TLS_GD32=104, - R_ARM_TLS_LDM32=105, - R_ARM_TLS_LDO32=106, - R_ARM_TLS_IE32=107, - R_ARM_TLS_LE32=108, - R_ARM_TLS_LDO12=109, - R_ARM_TLS_LE12=110, - R_ARM_TLS_IE12GP=111, - R_ARM_PRIVATE_0=112, - R_ARM_PRIVATE_1=113, - R_ARM_PRIVATE_2=114, - R_ARM_PRIVATE_3=115, - R_ARM_PRIVATE_4=116, - R_ARM_PRIVATE_5=117, - R_ARM_PRIVATE_6=118, - R_ARM_PRIVATE_7=119, - R_ARM_PRIVATE_8=120, - R_ARM_PRIVATE_9=121, - R_ARM_PRIVATE_10=122, - R_ARM_PRIVATE_11=123, - R_ARM_PRIVATE_12=124, - R_ARM_PRIVATE_13=125, - R_ARM_PRIVATE_14=126, - R_ARM_PRIVATE_15=127, - R_ARM_ME_TOO=128, - R_ARM_THM_TLS_DESCSEQ16=129, - R_ARM_THM_TLS_DESCSEQ32=130, - R_ARM_THM_GOT_BREL12=131, - R_ARM_IRELATIVE=140, -) - -ENUM_RELOC_TYPE_AARCH64: Mapping[str, int] = dict( - R_AARCH64_NONE=256, - R_AARCH64_ABS64=257, - R_AARCH64_ABS32=258, - R_AARCH64_ABS16=259, - R_AARCH64_PREL64=260, - R_AARCH64_PREL32=261, - R_AARCH64_PREL16=262, - R_AARCH64_MOVW_UABS_G0=263, - R_AARCH64_MOVW_UABS_G0_NC=264, - R_AARCH64_MOVW_UABS_G1=265, - R_AARCH64_MOVW_UABS_G1_NC=266, - R_AARCH64_MOVW_UABS_G2=267, - R_AARCH64_MOVW_UABS_G2_NC=268, - R_AARCH64_MOVW_UABS_G3=269, - R_AARCH64_MOVW_SABS_G0=270, - R_AARCH64_MOVW_SABS_G1=271, - R_AARCH64_MOVW_SABS_G2=272, - R_AARCH64_LD_PREL_LO19=273, - R_AARCH64_ADR_PREL_LO21=274, - R_AARCH64_ADR_PREL_PG_HI21=275, - R_AARCH64_ADR_PREL_PG_HI21_NC=276, - R_AARCH64_ADD_ABS_LO12_NC=277, - R_AARCH64_LDST8_ABS_LO12_NC=278, - R_AARCH64_TSTBR14=279, - R_AARCH64_CONDBR19=280, - R_AARCH64_JUMP26=282, - R_AARCH64_CALL26=283, - R_AARCH64_LDST16_ABS_LO12_NC=284, - R_AARCH64_LDST32_ABS_LO12_NC=285, - R_AARCH64_LDST64_ABS_LO12_NC=286, - R_AARCH64_MOVW_PREL_G0=287, - R_AARCH64_MOVW_PREL_G0_NC=288, - R_AARCH64_MOVW_PREL_G1=289, - R_AARCH64_MOVW_PREL_G1_NC=290, - R_AARCH64_MOVW_PREL_G2=291, - R_AARCH64_MOVW_PREL_G2_NC=292, - R_AARCH64_MOVW_PREL_G3=293, - R_AARCH64_MOVW_GOTOFF_G0=300, - R_AARCH64_MOVW_GOTOFF_G0_NC=301, - R_AARCH64_MOVW_GOTOFF_G1=302, - R_AARCH64_MOVW_GOTOFF_G1_NC=303, - R_AARCH64_MOVW_GOTOFF_G2=304, - R_AARCH64_MOVW_GOTOFF_G2_NC=305, - R_AARCH64_MOVW_GOTOFF_G3=306, - R_AARCH64_GOTREL64=307, - R_AARCH64_GOTREL32=308, - R_AARCH64_GOT_LD_PREL19=309, - R_AARCH64_LD64_GOTOFF_LO15=310, - R_AARCH64_ADR_GOT_PAGE=311, - R_AARCH64_LD64_GOT_LO12_NC=312, - R_AARCH64_TLSGD_ADR_PREL21=512, - R_AARCH64_TLSGD_ADR_PAGE21=513, - R_AARCH64_TLSGD_ADD_LO12_NC=514, - R_AARCH64_TLSGD_MOVW_G1=515, - R_AARCH64_TLSGD_MOVW_G0_NC=516, - R_AARCH64_TLSLD_ADR_PREL21=517, - R_AARCH64_TLSLD_ADR_PAGE21=518, - R_AARCH64_TLSLD_ADD_LO12_NC=519, - R_AARCH64_TLSLD_MOVW_G1=520, - R_AARCH64_TLSLD_MOVW_G0_NC=521, - R_AARCH64_TLSLD_LD_PREL19=522, - R_AARCH64_TLSLD_MOVW_DTPREL_G2=523, - R_AARCH64_TLSLD_MOVW_DTPREL_G1=524, - R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC=525, - R_AARCH64_TLSLD_MOVW_DTPREL_G0=526, - R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC=527, - R_AARCH64_TLSLD_ADD_DTPREL_HI12=528, - R_AARCH64_TLSLD_ADD_DTPREL_LO12=529, - R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC=530, - R_AARCH64_TLSLD_LDST8_DTPREL_LO12=531, - R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC=532, - R_AARCH64_TLSLD_LDST16_DTPREL_LO12=533, - R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC=534, - R_AARCH64_TLSLD_LDST32_DTPREL_LO12=535, - R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC=536, - R_AARCH64_TLSLD_LDST64_DTPREL_LO12=537, - R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC=538, - R_AARCH64_TLSIE_MOVW_GOTTPREL_G1=539, - R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC=540, - R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21=541, - R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC=542, - R_AARCH64_TLSIE_LD_GOTTPREL_PREL19=543, - R_AARCH64_TLSLE_MOVW_TPREL_G2=544, - R_AARCH64_TLSLE_MOVW_TPREL_G1=545, - R_AARCH64_TLSLE_MOVW_TPREL_G1_NC=546, - R_AARCH64_TLSLE_MOVW_TPREL_G0=547, - R_AARCH64_TLSLE_MOVW_TPREL_G0_NC=548, - R_AARCH64_TLSLE_ADD_TPREL_HI12=549, - R_AARCH64_TLSLE_ADD_TPREL_LO12=550, - R_AARCH64_TLSLE_ADD_TPREL_LO12_NC=551, - R_AARCH64_TLSLE_LDST8_TPREL_LO12=552, - R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC=553, - R_AARCH64_TLSLE_LDST16_TPREL_LO12=554, - R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC=555, - R_AARCH64_TLSLE_LDST32_TPREL_LO12=556, - R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC=557, - R_AARCH64_TLSLE_LDST64_TPREL_LO12=558, - R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC=559, - R_AARCH64_COPY=1024, - R_AARCH64_GLOB_DAT=1025, - R_AARCH64_JUMP_SLOT=1026, - R_AARCH64_RELATIVE=1027, - R_AARCH64_TLS_DTPREL64=1028, - R_AARCH64_TLS_DTPMOD64=1029, - R_AARCH64_TLS_TPREL64=1030, - R_AARCH64_TLS_DTPREL32=1031, - R_AARCH64_TLS_DTPMOD32=1032, - R_AARCH64_TLS_TPREL32=1033, -) - -ENUM_ATTR_TAG_ARM: Mapping[str, int] = dict( - TAG_FILE=1, - TAG_SECTION=2, - TAG_SYMBOL=3, - TAG_CPU_RAW_NAME=4, - TAG_CPU_NAME=5, - TAG_CPU_ARCH=6, - TAG_CPU_ARCH_PROFILE=7, - TAG_ARM_ISA_USE=8, - TAG_THUMB_ISA_USE=9, - TAG_FP_ARCH=10, - TAG_WMMX_ARCH=11, - TAG_ADVANCED_SIMD_ARCH=12, - TAG_PCS_CONFIG=13, - TAG_ABI_PCS_R9_USE=14, - TAG_ABI_PCS_RW_DATA=15, - TAG_ABI_PCS_RO_DATA=16, - TAG_ABI_PCS_GOT_USE=17, - TAG_ABI_PCS_WCHAR_T=18, - TAG_ABI_FP_ROUNDING=19, - TAG_ABI_FP_DENORMAL=20, - TAG_ABI_FP_EXCEPTIONS=21, - TAG_ABI_FP_USER_EXCEPTIONS=22, - TAG_ABI_FP_NUMBER_MODEL=23, - TAG_ABI_ALIGN_NEEDED=24, - TAG_ABI_ALIGN_PRESERVED=25, - TAG_ABI_ENUM_SIZE=26, - TAG_ABI_HARDFP_USE=27, - TAG_ABI_VFP_ARGS=28, - TAG_ABI_WMMX_ARGS=29, - TAG_ABI_OPTIMIZATION_GOALS=30, - TAG_ABI_FP_OPTIMIZATION_GOALS=31, - TAG_COMPATIBILITY=32, - TAG_CPU_UNALIGNED_ACCESS=34, - TAG_FP_HP_EXTENSION=36, - TAG_ABI_FP_16BIT_FORMAT=38, - TAG_MPEXTENSION_USE=42, - TAG_DIV_USE=44, - TAG_DSP_EXTENSION=46, - TAG_MVE_ARCH=48, - TAG_PAC_EXTENSION=50, - TAG_BTI_EXTENSION=52, - TAG_NODEFAULTS=64, - TAG_ALSO_COMPATIBLE_WITH=65, - TAG_T2EE_USE=66, - TAG_CONFORMANCE=67, - TAG_VIRTUALIZATION_USE=68, - TAG_MPEXTENSION_USE_OLD=70, - TAG_FRAMEPOINTER_USE=72, - TAG_BTI_USE=74, - TAG_PACRET_USE=76, -) - -ENUM_ATTR_TAG_RISCV: Mapping[str, int] = dict( - TAG_FILE=1, - TAG_SECTION=2, - TAG_SYMBOL=3, - TAG_STACK_ALIGN=4, - TAG_ARCH=5, - TAG_UNALIGNED_ACCESS=6, - TAG_PRIV_SPEC=8, - TAG_PRIV_SPEC_MINOR=10, - TAG_PRIV_SPEC_REVISION=12, - TAG_ATOMIC_ABI=14, - TAG_X3_REG_USAGE=16, -) - -# https://openpowerfoundation.org/wp-content/uploads/2016/03/ABI64BitOpenPOWERv1.1_16July2015_pub4.pdf -# See 3.5.3 Relocation Types Table. -ENUM_RELOC_TYPE_PPC64: Mapping[str, int] = dict( - R_PPC64_NONE=0, - R_PPC64_ADDR32=1, - R_PPC64_ADDR24=2, - R_PPC64_ADDR16=3, - R_PPC64_ADDR16_LO=4, - R_PPC64_ADDR16_HI=5, - R_PPC64_ADDR16_HA=6, - R_PPC64_ADDR14=7, - R_PPC64_ADDR14_BRTAKEN=8, - R_PPC64_ADDR14_BRNTAKEN=9, - R_PPC64_REL24=10, - R_PPC64_REL14=11, - R_PPC64_REL14_BRTAKEN=12, - R_PPC64_REL14_BRNTAKEN=13, - R_PPC64_GOT16=14, - R_PPC64_GOT16_LO=15, - R_PPC64_GOT16_HI=16, - R_PPC64_GOT16_HA=17, - R_PPC64_COPY=19, - R_PPC64_GLOB_DAT=20, - R_PPC64_JMP_SLOT=21, - R_PPC64_RELATIVE=22, - R_PPC64_UADDR32=24, - R_PPC64_UADDR16=25, - R_PPC64_REL32=26, - R_PPC64_PLT32=27, - R_PPC64_PLTREL32=28, - R_PPC64_PLT16_LO=29, - R_PPC64_PLT16_HI=30, - R_PPC64_PLT16_HA=31, - R_PPC64_SECTOFF=33, - R_PPC64_SECTOFF_LO=34, - R_PPC64_SECTOFF_HI=35, - R_PPC64_SECTOFF_HA=36, - R_PPC64_ADDR30=37, - R_PPC64_ADDR64=38, - R_PPC64_ADDR16_HIGHER=39, - R_PPC64_ADDR16_HIGHERA=40, - R_PPC64_ADDR16_HIGHEST=41, - R_PPC64_ADDR16_HIGHESTA=42, - R_PPC64_UADDR64=43, - R_PPC64_REL64=44, - R_PPC64_PLT64=45, - R_PPC64_PLTREL64=46, - R_PPC64_TOC16=47, - R_PPC64_TOC16_LO=48, - R_PPC64_TOC16_HI=49, - R_PPC64_TOC16_HA=50, - R_PPC64_TOC=51, - R_PPC64_PLTGOT16=52, - R_PPC64_PLTGOT16_LO=53, - R_PPC64_PLTGOT16_HI=54, - R_PPC64_PLTGOT16_HA=55, - R_PPC64_ADDR16_DS=56, - R_PPC64_ADDR16_LO_DS=57, - R_PPC64_GOT16_DS=58, - R_PPC64_GOT16_LO_DS=59, - R_PPC64_PLT16_LO_DS=60, - R_PPC64_SECTOFF_DS=61, - R_PPC64_SECTOFF_LO_DS=62, - R_PPC64_TOC16_DS=63, - R_PPC64_TOC16_LO_DS=64, - R_PPC64_PLTGOT16_DS=65, - R_PPC64_PLTGOT16_LO_DS=66, - R_PPC64_TLS=67, - R_PPC64_DTPMOD64=68, - R_PPC64_TPREL16=69, - R_PPC64_TPREL16_LO=70, - R_PPC64_TPREL16_HI=71, - R_PPC64_TPREL16_HA=72, - R_PPC64_TPREL64=73, - R_PPC64_DTPREL16=74, - R_PPC64_DTPREL16_LO=75, - R_PPC64_DTPREL16_HI=76, - R_PPC64_DTPREL16_HA=77, - R_PPC64_DTPREL64=78, - R_PPC64_GOT_TLSGD16=79, - R_PPC64_GOT_TLSGD16_LO=80, - R_PPC64_GOT_TLSGD16_HI=81, - R_PPC64_GOT_TLSGD16_HA=82, - R_PPC64_GOT_TLSLD16=83, - R_PPC64_GOT_TLSLD16_LO=84, - R_PPC64_GOT_TLSLD16_HI=85, - R_PPC64_GOT_TLSLD16_HA=86, - R_PPC64_GOT_TPREL16_DS=87, - R_PPC64_GOT_TPREL16_LO_DS=88, - R_PPC64_GOT_TPREL16_HI=89, - R_PPC64_GOT_TPREL16_HA=90, - R_PPC64_GOT_DTPREL16_DS=91, - R_PPC64_GOT_DTPREL16_LO_DS=92, - R_PPC64_GOT_DTPREL16_HI=93, - R_PPC64_GOT_DTPREL16_HA=94, - R_PPC64_TPREL16_DS=95, - R_PPC64_TPREL16_LO_DS=96, - R_PPC64_TPREL16_HIGHER=97, - R_PPC64_TPREL16_HIGHERA=98, - R_PPC64_TPREL16_HIGHEST=99, - R_PPC64_TPREL16_HIGHESTA=100, - R_PPC64_DTPREL16_DS=101, - R_PPC64_DTPREL16_LO_DS=102, - R_PPC64_DTPREL16_HIGHER=103, - R_PPC64_DTPREL16_HIGHERA=104, - R_PPC64_DTPREL16_HIGHEST=105, - R_PPC64_DTPREL16_HIGHESTA=106, - R_PPC64_TLSGD=107, - R_PPC64_TLSLD=108, - R_PPC64_TOCSAVE=109, - R_PPC64_ADDR16_HIGH=110, - R_PPC64_ADDR16_HIGHA=111, - R_PPC64_TPREL16_HIGH=112, - R_PPC64_TPREL16_HIGHA=113, - R_PPC64_DTPREL16_HIGH=114, - R_PPC64_DTPREL16_HIGHA=115, - R_PPC64_REL24_NOTOC=116, - R_PPC64_ADDR64_LOCAL=117, - R_PPC64_IRELATIVE=248, - R_PPC64_REL16=249, - R_PPC64_REL16_LO=250, - R_PPC64_REL16_HI=251, - R_PPC64_REL16_HA=252, - R_PPC64_GNU_VTINHERIT=253, - R_PPC64_GNU_VTENTRY=254, -) - -# https://example61560.files.wordpress.com/2016/11/powerpc_abi.pdf -# See 4.13.5 Relocation Types Table. -ENUM_RELOC_TYPE_PPC: Mapping[str, int] = dict( - R_PPC_NONE=0, - R_PPC_ADDR32=1, - R_PPC_ADDR24=2, - R_PPC_ADDR16=3, - R_PPC_ADDR16_LO=4, - R_PPC_ADDR16_HI=5, - R_PPC_ADDR16_HA=6, - R_PPC_ADDR14=7, - R_PPC_ADDR14_BRTAKEN=8, - R_PPC_ADDR14_BRNTAKEN=9, - R_PPC_REL24=10, - R_PPC_REL14=11, - R_PPC_REL14_BRTAKEN=12, - R_PPC_REL14_BRNTAKEN=13, - R_PPC_GOT16=14, - R_PPC_GOT16_LO=15, - R_PPC_GOT16_HI=16, - R_PPC_GOT16_HA=17, - R_PPC_PLTREL24=18, - R_PPC_COPY=19, - R_PPC_GLOB_DAT=20, - R_PPC_JMP_SLOT=21, - R_PPC_RELATIVE=22, - R_PPC_LOCAL24PC=23, - R_PPC_UADDR32=24, - R_PPC_UADDR16=25, - R_PPC_REL32=26, - R_PPC_PLT32=27, - R_PPC_PLTREL32=28, - R_PPC_PLT16_LO=29, - R_PPC_PLT16_HI=30, - R_PPC_PLT16_HA=31, - R_PPC_SECTOFF=33, - R_PPC_SECTOFF_LO=34, - R_PPC_SECTOFF_HI=35, - R_PPC_SECTOFF_HA=36, - R_PPC_ADDR30=37, - R_PPC_EMB_NADDR32=101, - R_PPC_EMB_NADDR16=102, - R_PPC_EMB_NADDR16_LO=103, - R_PPC_EMB_NADDR16_HI=104, - R_PPC_EMB_NADDR16_HA=105, - R_PPC_EMB_SDAI16=106, - R_PPC_EMB_SDA2I16=107, - R_PPC_EMB_SDA2REL=108, - R_PPC_EMB_SDA21=109, - R_PPC_EMB_MRKREF=110, - R_PPC_EMB_RELSEC16=111, - R_PPC_EMB_RELST_LO=112, - R_PPC_EMB_RELST_HI=113, - R_PPC_EMB_RELST_HA=114, - R_PPC_EMB_BIT_FLD=115, - R_PPC_EMB_RELSDA=116, -) - -# https://gitlab.utu.fi/soft/binutils-gdb/-/blob/d18547d8b08615a58db18ad3e43f721dc92ae298/include/elf/v850.h -ENUM_RELOC_TYPE_V850: Mapping[str, int] = dict( - R_V800_NONE=0, - R_V810_NONE=48, - R_V810_BYTE=49, - R_V810_HWORD=50, - R_V810_WORD=51, - R_V810_WLO=52, - R_V810_WHI=53, - R_V810_WHI1=54, - R_V810_GPBYTE=55, - R_V810_GPHWORD=56, - R_V810_GPWORD=57, - R_V810_GPWLO=58, - R_V810_GPWHI=59, - R_V810_GPWHI1=60, - R_V850_HWLO=61, - R_V810_reserved1=62, - R_V850_EP7BIT=63, - R_V850_EPHBYTE=64, - R_V850_EPWBYTE=65, - R_V850_REGHWLO=66, - R_V810_reserved2=67, - R_V850_GPHWLO=68, - R_V810_reserved3=69, - R_V850_PCR22=70, - R_V850_BLO=71, - R_V850_EP4BIT=72, - R_V850_EP5BIT=73, - R_V850_REGBLO=74, - R_V850_GPBLO=75, - R_V810_WLO_1=76, - R_V810_GPWLO_1=77, - R_V850_BLO_1=78, - R_V850_HWLO_1=79, - R_V810_reserved4=80, - R_V850_GPBLO_1=81, - R_V850_GPHWLO_1=82, - R_V810_reserved5=83, - R_V850_EPBLO=84, - R_V850_EPHWLO=85, - R_V810_reserved6=86, - R_V850_EPWLO_N=87, - R_V850_PC32=88, - R_V850_W23BIT=89, - R_V850_GPW23BIT=90, - R_V850_EPW23BIT=91, - R_V850_B23BIT=92, - R_V850_GPB23BIT=93, - R_V850_EPB23BIT=94, - R_V850_PC16U=95, - R_V850_PC17=96, - R_V850_DW8=97, - R_V850_GPDW8=98, - R_V850_EPDW8=99, - R_V850_PC9=100, - R_V810_REGBYTE=101, - R_V810_REGHWORD=102, - R_V810_REGWORD=103, - R_V810_REGWLO=104, - R_V810_REGWHI=105, - R_V810_REGWHI1=106, - R_V850_REGW23BIT=107, - R_V850_REGB23BIT=108, - R_V850_REGDW8=109, - R_V810_EPBYTE=110, - R_V810_EPHWORD=111, - R_V810_EPWORD=112, - R_V850_WLO23=113, - R_V850_WORD_E=114, - R_V850_REGWORD_E=115, - R_V850_WORD=116, - R_V850_GPWORD=117, - R_V850_REGWORD=118, - R_V850_EPWORD=119, - R_V810_TPBYTE=120, - R_V810_TPHWORD=121, - R_V810_TPWORD=122, - R_V810_TPWLO=123, - R_V810_TPWHI=124, - R_V810_TPWHI1=125, - R_V850_TPHWLO=126, - R_V850_TPBLO=127, - R_V810_TPWLO_1=128, - R_V850_TPBLO_1=129, - R_V850_TPHWLO_1=130, - R_V850_TP23BIT=131, - R_V850_TPW23BIT=132, - R_V850_TPDW8=133, - R_V810_ABS32=160, - R_V850_SYM=224, - R_V850_OPadd=225, - R_V850_OPsub=226, - R_V850_OPsctsize=227, - R_V850_OPscttop=228, -) diff --git a/.tools/python-revlibs/elftools/elf/gnuversions.py b/.tools/python-revlibs/elftools/elf/gnuversions.py deleted file mode 100644 index 9849254..0000000 --- a/.tools/python-revlibs/elftools/elf/gnuversions.py +++ /dev/null @@ -1,266 +0,0 @@ -#------------------------------------------------------------------------------ -# elftools: elf/gnuversions.py -# -# ELF sections -# -# Yann Rouillard (yann@pleiades.fr.eu.org) -# This code is in the public domain -#------------------------------------------------------------------------------ -from __future__ import annotations - -from functools import cached_property -from typing import TYPE_CHECKING, Any - -from ..common.utils import struct_parse, elf_assert -from .sections import Section, Symbol - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct.core import Struct - from ..construct.lib.container import Container - from .elffile import ELFFile - from .sections import StringTableSection, SymbolTableSection - - -class Version: - """ Version object - representing a version definition or dependency - entry from a "Version Needed" or a "Version Dependency" table section. - - This kind of entry contains a pointer to an array of auxiliary entries - that store the information about version names or dependencies. - These entries are not stored in this object and should be accessed - through the appropriate method of a section object which will return - an iterator of VersionAuxiliary objects. - - Similarly to Section objects, allows dictionary-like access to - verdef/verneed entry - """ - def __init__(self, entry: Container, name: str | None = None) -> None: - self.entry = entry - self.name = name - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to entry - """ - return self.entry[name] - - -class VersionAuxiliary: - """ Version Auxiliary object - representing an auxiliary entry of a version - definition or dependency entry - - Similarly to Section objects, allows dictionary-like access to the - verdaux/vernaux entry - """ - def __init__(self, entry: Container, name: str) -> None: - self.entry = entry - self.name = name - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to entries - """ - return self.entry[name] - - -class GNUVersionSection(Section): - """ Common ancestor class for ELF SUNW|GNU Version Needed/Dependency - sections class which contains shareable code - """ - - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - stringtable: StringTableSection, - field_prefix: str, - version_struct: Struct, - version_auxiliaries_struct: Struct, - ) -> None: - super().__init__(header, name, elffile) - self.stringtable = stringtable - self.field_prefix = field_prefix - self.version_struct = version_struct - self.version_auxiliaries_struct = version_auxiliaries_struct - - def num_versions(self) -> int: - """ Number of version entries in the section - """ - return self['sh_info'] - - def _field_name(self, name: str, auxiliary: bool = False) -> str: - """ Return the real field's name of version or a version auxiliary - entry - """ - middle = 'a_' if auxiliary else '_' - return self.field_prefix + middle + name - - def _iter_version_auxiliaries( - self, - entry_offset: int, - count: int, - ) -> Iterator[VersionAuxiliary]: - """ Yield all auxiliary entries of a version entry - """ - name_field = self._field_name('name', auxiliary=True) - next_field = self._field_name('next', auxiliary=True) - - for _ in range(count): - entry = struct_parse( - self.version_auxiliaries_struct, - self.stream, - stream_pos=entry_offset) - - name = self.stringtable.get_string(entry[name_field]) - version_aux = VersionAuxiliary(entry, name) - yield version_aux - - entry_offset += entry[next_field] - - def iter_versions(self) -> Iterator[tuple[Version, Iterator[VersionAuxiliary]]]: - """ Yield all the version entries in the section - Each time it returns the main version structure - and an iterator to walk through its auxiliaries entries - """ - aux_field = self._field_name('aux') - count_field = self._field_name('cnt') - next_field = self._field_name('next') - - entry_offset = self['sh_offset'] - for _ in range(self.num_versions()): - entry = struct_parse( - self.version_struct, - self.stream, - stream_pos=entry_offset) - - elf_assert(entry[count_field] > 0, - 'Expected number of version auxiliary entries (%s) to be > 0' - 'for the following version entry: %s' % ( - count_field, str(entry))) - - version = Version(entry) - aux_entries_offset = entry_offset + entry[aux_field] - version_auxiliaries_iter = self._iter_version_auxiliaries( - aux_entries_offset, entry[count_field]) - - yield version, version_auxiliaries_iter - - entry_offset += entry[next_field] - - -class GNUVerNeedSection(GNUVersionSection): - """ ELF SUNW or GNU Version Needed table section. - Has an associated StringTableSection that's passed in the constructor. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - stringtable: StringTableSection, - ) -> None: - super().__init__( - header, name, elffile, stringtable, 'vn', - elffile.structs.Elf_Verneed, elffile.structs.Elf_Vernaux) - - def has_indexes(self) -> bool: - """ Return True if at least one version definition entry has an index - that is stored in the vna_other field. - This information is used for symbol versioning - """ - return self._has_indexes - - @cached_property - def _has_indexes(self) -> bool: - return any( - vernaux['vna_other'] - for _, vernaux_iter in self.iter_versions() - for vernaux in vernaux_iter - ) - - def iter_versions(self) -> Iterator[tuple[Version, Iterator[VersionAuxiliary]]]: - for verneed, vernaux in super().iter_versions(): - verneed.name = self.stringtable.get_string(verneed['vn_file']) - yield verneed, vernaux - - def get_version(self, index: int) -> tuple[Version, VersionAuxiliary] | None: - """ Get the version information located at index #n in the table - Return boths the verneed structure and the vernaux structure - that contains the name of the version - """ - for verneed, vernaux_iter in self.iter_versions(): - for vernaux in vernaux_iter: - if vernaux['vna_other'] == index: - return verneed, vernaux - - return None - - -class GNUVerDefSection(GNUVersionSection): - """ ELF SUNW or GNU Version Definition table section. - Has an associated StringTableSection that's passed in the constructor. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - stringtable: StringTableSection, - ) -> None: - super().__init__( - header, name, elffile, stringtable, 'vd', - elffile.structs.Elf_Verdef, elffile.structs.Elf_Verdaux) - - def get_version(self, index: int) -> tuple[Version, Iterator[VersionAuxiliary]] | None: - """ Get the version information located at index #n in the table - Return boths the verdef structure and an iterator to retrieve - both the version names and dependencies in the form of - verdaux entries - """ - for verdef, verdaux_iter in self.iter_versions(): - if verdef['vd_ndx'] == index: - return verdef, verdaux_iter - - return None - - -class GNUVerSymSection(Section): - """ ELF SUNW or GNU Versym table section. - Has an associated SymbolTableSection that's passed in the constructor. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - symboltable: SymbolTableSection, - ) -> None: - super().__init__(header, name, elffile) - self.symboltable = symboltable - - def num_symbols(self) -> int: - """ Number of symbols in the table - """ - return self['sh_size'] // self['sh_entsize'] - - def get_symbol(self, n: int) -> Symbol: - """ Get the symbol at index #n from the table (Symbol object) - It begins at 1 and not 0 since the first entry is used to - store the current version of the syminfo table - """ - # Grab the symbol's entry from the stream - entry_offset = self['sh_offset'] + n * self['sh_entsize'] - entry = struct_parse( - self.structs.Elf_Versym, - self.stream, - stream_pos=entry_offset) - # Find the symbol name in the associated symbol table - name = self.symboltable.get_symbol(n).name - return Symbol(entry, name) - - def iter_symbols(self) -> Iterator[Symbol]: - """ Yield all the symbols in the table - """ - for i in range(self.num_symbols()): - yield self.get_symbol(i) diff --git a/.tools/python-revlibs/elftools/elf/hash.py b/.tools/python-revlibs/elftools/elf/hash.py deleted file mode 100644 index c033e3a..0000000 --- a/.tools/python-revlibs/elftools/elf/hash.py +++ /dev/null @@ -1,238 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/hash.py -# -# ELF hash table sections -# -# Andreas Ziegler (andreas.ziegler@fau.de) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import struct -from typing import TYPE_CHECKING, Protocol - -from ..common.utils import struct_parse -from ..construct.lib.container import Container -from .sections import Section - -if TYPE_CHECKING: - from .elffile import ELFFile - from .sections import Symbol - - -class _SymbolTable(Protocol): - """Common base-class of elftools.elf.sections.SymbolTableSection and - elftools.elf.dynamic.DynamicSegment to be consumed by - (ELF|GNU)Hash(Section|Table).""" - def get_symbol(self, index: int, /) -> Symbol | None: ... - - -class ELFHashTable: - """ Representation of an ELF hash table to find symbols in the - symbol table - useful for super-stripped binaries without section - headers where only the start of the symbol table is known from the - dynamic segment. The layout and contents are nicely described at - https://flapenguin.me/2017/04/24/elf-lookup-dt-hash/. - - The symboltable argument needs to implement a get_symbol() method - - in a regular ELF file, this will be the linked symbol table section - as indicated by the sh_link attribute. For super-stripped binaries, - one should use the DynamicSegment object as the symboltable as it - supports symbol lookup without access to a symbol table section. - """ - - def __init__( - self, - elffile: ELFFile, - start_offset: int, - size: int | None, - symboltable: _SymbolTable, - ) -> None: - """ - Args: - elffile (ELFFile): The ELF file. - start_offset: The offset of the start of the symbol table in the ELF file. - size: Size of the table in bytes (can be None if unknown). - symboltable: A symbol table with a get_symbol() method to do symbol lookup. - """ - self.elffile = elffile - self._symboltable = symboltable - if size == 0: # size may also be None if its unknown - self.params = Container(**{ - 'nbuckets': 0, - 'nchains': 0, - 'buckets': [], - 'chains': [], - }) - else: - self.params = struct_parse(self.elffile.structs.Elf_Hash, - self.elffile.stream, - start_offset) - - def get_number_of_symbols(self) -> int: - """ Get the number of symbols from the hash table parameters. - """ - return self.params['nchains'] - - def get_symbol(self, name: str) -> Symbol | None: - """ Look up a symbol from this hash table with the given name. - """ - if self.params['nbuckets'] == 0: - return None - hval = self.elf_hash(name) % self.params['nbuckets'] - symndx = self.params['buckets'][hval] - while symndx != 0: - sym = self._symboltable.get_symbol(symndx) - if sym and sym.name == name: - return sym - symndx = self.params['chains'][symndx] - return None - - @staticmethod - def elf_hash(name: bytes | str) -> int: - """ Compute the hash value for a given symbol name. - """ - if not isinstance(name, bytes): - name = name.encode('utf-8') - h = 0 - x = 0 - for c in bytearray(name): - h = (h << 4) + c - x = h & 0xF0000000 - if x != 0: - h ^= (x >> 24) - h &= ~x - return h - - -class ELFHashSection(Section, ELFHashTable): - """ Section representation of an ELF hash table. In regular ELF files, this - allows us to use the common functions defined on Section objects when - dealing with the hash table. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - symboltable: _SymbolTable, - ) -> None: - Section.__init__(self, header, name, elffile) - ELFHashTable.__init__(self, elffile, self['sh_offset'], self['sh_size'], symboltable) - - -class GNUHashTable: - """ Representation of a GNU hash table to find symbols in the - symbol table - useful for super-stripped binaries without section - headers where only the start of the symbol table is known from the - dynamic segment. The layout and contents are nicely described at - https://flapenguin.me/2017/05/10/elf-lookup-dt-gnu-hash/. - - The symboltable argument needs to implement a get_symbol() method - - in a regular ELF file, this will be the linked symbol table section - as indicated by the sh_link attribute. For super-stripped binaries, - one should use the DynamicSegment object as the symboltable as it - supports symbol lookup without access to a symbol table section. - """ - def __init__( - self, - elffile: ELFFile, - start_offset: int, - symboltable: _SymbolTable, - ) -> None: - self.elffile = elffile - self._symboltable = symboltable - self.params: Container = struct_parse(self.elffile.structs.Gnu_Hash, - self.elffile.stream, - start_offset) - # Element sizes in the hash table - self._wordsize: int = self.elffile.structs.Elf_word('').sizeof() - self._xwordsize: int = self.elffile.structs.Elf_xword('').sizeof() - self._chain_pos: int = start_offset + 4 * self._wordsize + \ - self.params['bloom_size'] * self._xwordsize + \ - self.params['nbuckets'] * self._wordsize - - def get_number_of_symbols(self) -> int: - """ Get the number of symbols in the hash table by finding the bucket - with the highest symbol index and walking to the end of its chain. - """ - # Find highest index in buckets array - max_idx = max(self.params['buckets']) - if max_idx < self.params['symoffset']: - return self.params['symoffset'] - - # Position the stream at the start of the corresponding chain - max_chain_pos = self._chain_pos + \ - (max_idx - self.params['symoffset']) * self._wordsize - self.elffile.stream.seek(max_chain_pos) - hash_format = 'I' - - # Walk the chain to its end (lowest bit is set) - while True: - cur_hash = struct.unpack(hash_format, self.elffile.stream.read(self._wordsize))[0] - if cur_hash & 1: - return max_idx + 1 - - max_idx += 1 - - def _matches_bloom(self, H1: int) -> bool: - """ Helper function to check if the given hash could be in the hash - table by testing it against the bloom filter. - """ - arch_bits = self.elffile.elfclass - H2 = H1 >> self.params['bloom_shift'] - word_idx = int(H1 / arch_bits) % self.params['bloom_size'] - BITMASK = (1 << (H1 % arch_bits)) | (1 << (H2 % arch_bits)) - return (self.params['bloom'][word_idx] & BITMASK) == BITMASK - - def get_symbol(self, name: str) -> Symbol | None: - """ Look up a symbol from this hash table with the given name. - """ - namehash = self.gnu_hash(name) - if not self._matches_bloom(namehash): - return None - - symidx = self.params['buckets'][namehash % self.params['nbuckets']] - if symidx < self.params['symoffset']: - return None - - self.elffile.stream.seek(self._chain_pos + (symidx - self.params['symoffset']) * self._wordsize) - hash_format = 'I' - while True: - cur_hash = struct.unpack(hash_format, self.elffile.stream.read(self._wordsize))[0] - if cur_hash | 1 == namehash | 1: - symbol = self._symboltable.get_symbol(symidx) - if symbol and name == symbol.name: - return symbol - - if cur_hash & 1: - break - symidx += 1 - return None - - @staticmethod - def gnu_hash(key: bytes | str) -> int: - """ Compute the GNU-style hash value for a given symbol name. - """ - if not isinstance(key, bytes): - key = key.encode('utf-8') - h = 5381 - for c in bytearray(key): - h = h * 33 + c - return h & 0xFFFFFFFF - - -class GNUHashSection(Section, GNUHashTable): - """ Section representation of a GNU hash table. In regular ELF files, this - allows us to use the common functions defined on Section objects when - dealing with the hash table. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - symboltable: _SymbolTable, - ) -> None: - Section.__init__(self, header, name, elffile) - GNUHashTable.__init__(self, elffile, self['sh_offset'], symboltable) diff --git a/.tools/python-revlibs/elftools/elf/notes.py b/.tools/python-revlibs/elftools/elf/notes.py deleted file mode 100644 index 120dd7d..0000000 --- a/.tools/python-revlibs/elftools/elf/notes.py +++ /dev/null @@ -1,80 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/notes.py -# -# ELF notes -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import TYPE_CHECKING - -from ..common.utils import struct_parse, roundup, bytes2str -from ..construct import CString - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct.lib.container import Container - from .elffile import ELFFile - - -def iter_notes(elffile: ELFFile, offset: int, size: int) -> Iterator[Container]: - """ Yield all the notes in a section or segment. - """ - end = offset + size - nhdr_size = elffile.structs.Elf_Nhdr.sizeof() - # Note: a note's name and data are 4-byte aligned, but it's possible there's - # additional padding at the end to satisfy the alignment requirement of the segment. - while offset + nhdr_size < end: - note: Container = struct_parse( - elffile.structs.Elf_Nhdr, - elffile.stream, - stream_pos=offset) - note['n_offset'] = offset - offset += nhdr_size - elffile.stream.seek(offset) - if note['n_namesz']: - # n_namesz is 4-byte aligned. - disk_namesz: int = roundup(note['n_namesz'], 2) - note['n_name'] = bytes2str( - CString('').parse(elffile.stream.read(disk_namesz))) - offset += disk_namesz - else: - note['n_name'] = None - - desc_data: bytes = elffile.stream.read(note['n_descsz']) - note['n_descdata'] = desc_data - if note['n_type'] == 'NT_GNU_ABI_TAG' and note['n_name'] == 'GNU': - note['n_desc'] = struct_parse(elffile.structs.Elf_abi, - elffile.stream, - offset) - elif note['n_type'] == 'NT_GNU_BUILD_ID' and note['n_name'] == 'GNU': - note['n_desc'] = bytes(desc_data).hex() - elif note['n_type'] == 'NT_GNU_GOLD_VERSION' and note['n_name'] == 'GNU': - note['n_desc'] = bytes2str(desc_data) - elif note['n_type'] == 'NT_PRPSINFO': - note['n_desc'] = struct_parse(elffile.structs.Elf_Prpsinfo, - elffile.stream, - offset) - elif note['n_type'] == 'NT_FILE': - note['n_desc'] = struct_parse(elffile.structs.Elf_Nt_File, - elffile.stream, - offset) - elif note['n_type'] == 'NT_GNU_PROPERTY_TYPE_0' and note['n_name'] == 'GNU': - off = offset - props: list[Container] = [] - # n_descsz contains the size of the note "descriptor" (the data payload), - # excluding padding. See "Note Section" in https://refspecs.linuxfoundation.org/elf/elf.pdf - current_note_end: int = offset + note['n_descsz'] - while off < current_note_end: - p: Container = struct_parse(elffile.structs.Elf_Prop, elffile.stream, off) - off += roundup(p.pr_datasz + 8, 2 if elffile.elfclass == 32 else 3) - props.append(p) - note['n_desc'] = props - else: - note['n_desc'] = desc_data - offset += roundup(note['n_descsz'], 2) - note['n_size'] = offset - note['n_offset'] - yield note diff --git a/.tools/python-revlibs/elftools/elf/relocation.py b/.tools/python-revlibs/elftools/elf/relocation.py deleted file mode 100644 index 8a60709..0000000 --- a/.tools/python-revlibs/elftools/elf/relocation.py +++ /dev/null @@ -1,543 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/relocation.py -# -# ELF relocations -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from functools import cached_property -from typing import IO, TYPE_CHECKING, Any, NamedTuple, Protocol - -from ..common.exceptions import ELFRelocationError -from ..common.utils import elf_assert, struct_parse -from .sections import Section, SymbolTableSection -from .enums import ( - ENUM_RELOC_TYPE_i386, ENUM_RELOC_TYPE_x64, ENUM_RELOC_TYPE_MIPS, - ENUM_RELOC_TYPE_ARM, ENUM_RELOC_TYPE_AARCH64, ENUM_RELOC_TYPE_PPC64, - ENUM_RELOC_TYPE_S390X, ENUM_RELOC_TYPE_BPF, ENUM_RELOC_TYPE_LOONGARCH) -from ..construct import Container - -if TYPE_CHECKING: - from collections.abc import Iterator, Mapping - - from .elffile import ELFFile - - -class Relocation: - """ Relocation object - representing a single relocation entry. Allows - dictionary-like access to the entry's fields. - - Can be either a REL or RELA relocation. - """ - def __init__(self, entry: Container, elffile: ELFFile) -> None: - self.entry = entry - self.elffile = elffile - - def is_RELA(self) -> bool: - """ Is this a RELA relocation? If not, it's REL. - """ - return 'r_addend' in self.entry - - def __getitem__(self, name: str) -> Any: - """ Dict-like access to entries - """ - return self.entry[name] - - def __repr__(self) -> str: - return '' % ( - 'RELA' if self.is_RELA() else 'REL', - self.entry) - - def __str__(self) -> str: - return self.__repr__() - - -class RelocationTable: - """ Shared functionality between relocation sections and relocation tables - """ - - def __init__( - self, - elffile: ELFFile, - offset: int, - size: int, - is_rela: bool, - ) -> None: - self._stream = elffile.stream - self._elffile = elffile - self._elfstructs = elffile.structs - self._size = size - self._offset = offset - self._is_rela = is_rela - - if is_rela: - self.entry_struct = self._elfstructs.Elf_Rela - else: - self.entry_struct = self._elfstructs.Elf_Rel - - self.entry_size = self.entry_struct.sizeof() - - def is_RELA(self) -> bool: - """ Is this a RELA relocation section? If not, it's REL. - """ - return self._is_rela - - def num_relocations(self) -> int: - """ Number of relocations in the section - """ - return self._size // self.entry_size - - def get_relocation(self, n: int) -> Relocation: - """ Get the relocation at index #n from the section (Relocation object) - """ - entry_offset = self._offset + n * self.entry_size - entry = struct_parse( - self.entry_struct, - self._stream, - stream_pos=entry_offset) - return Relocation(entry, self._elffile) - - def iter_relocations(self) -> Iterator[Relocation]: - """ Yield all the relocations in the section - """ - for i in range(self.num_relocations()): - yield self.get_relocation(i) - - -class RelocationSection(Section, RelocationTable): - """ ELF relocation section. Serves as a collection of Relocation entries. - """ - def __init__(self, header: Container, name: str, elffile: ELFFile) -> None: - Section.__init__(self, header, name, elffile) - RelocationTable.__init__(self, self.elffile, - self['sh_offset'], self['sh_size'], header['sh_type'] == 'SHT_RELA') - - elf_assert(header['sh_type'] in ('SHT_REL', 'SHT_RELA'), - 'Unknown relocation type section') - elf_assert(header['sh_entsize'] == self.entry_size, - 'Expected sh_entsize of %s section to be %s' % ( - header['sh_type'], self.entry_size)) - - -class RelrRelocationTable: - """ RELR compressed relocation table. This stores relative relocations - in a compressed format. An entry with an even value serves as an - 'anchor' that defines a base address. Following this entry are one or - more bitmaps for consecutive addresses after the anchor which determine - if the corresponding relocation exists (if the bit is 1) or if it is - skipped. Addends are stored at the respective addresses (as in REL - relocations). - """ - - def __init__(self, elffile: ELFFile, offset: int, size: int, entrysize: int) -> None: - self._elffile = elffile - self._offset = offset - self._size = size - self._relr_struct = self._elffile.structs.Elf_Relr - self._entrysize = self._relr_struct.sizeof() - - elf_assert(self._entrysize == entrysize, - 'Expected RELR entry size to be %s, got %s' % ( - self._entrysize, entrysize)) - - def iter_relocations(self) -> Iterator[Relocation]: - """ Yield all the relocations in the section - """ - - # If DT_RELRSZ is zero, offset is meaningless and could be None. - if self._size == 0: - return - - limit = self._offset + self._size - relr = self._offset - # The addresses of relocations in a bitmap are calculated from a base - # value provided in an initial 'anchor' relocation. - base: int | None = None - while relr < limit: - entry = struct_parse(self._relr_struct, - self._elffile.stream, - stream_pos=relr) - entry_offset: int = entry['r_offset'] - if (entry_offset & 1) == 0: - # We found an anchor, take the current value as the base address - # for the following bitmaps and move the 'where' pointer to the - # beginning of the first bitmap. - base = entry_offset - base += self._entrysize - yield Relocation(entry, self._elffile) - else: - # We're processing a bitmap. - elf_assert(base is not None, 'RELR bitmap without base address') - assert base is not None - i = 0 - while True: - # Iterate over all bits except the least significant one. - entry_offset = (entry_offset >> 1) - if entry_offset == 0: - break - # if the current LSB is set, we have a relocation at the - # corresponding address so generate a Relocation with the - # matching offset - if (entry_offset & 1) != 0: - calc_offset = base + i * self._entrysize - yield Relocation(Container(r_offset = calc_offset), - self._elffile) - i += 1 - # Advance 'base' past the current bitmap (8 == CHAR_BIT). There - # are 63 (or 31 for 32-bit ELFs) entries in each bitmap, and - # every bit corresponds to an ELF_addr-sized relocation. - base += (8 * self._entrysize - 1) * self._elffile.structs.Elf_addr('').sizeof() - # Advance to the next entry - relr += self._entrysize - - def num_relocations(self) -> int: - """ Number of relocations in the section - """ - return len(self._cached_relocations) - - def get_relocation(self, n: int) -> Relocation: - """ Get the relocation at index #n from the section (Relocation object) - """ - return self._cached_relocations[n] - - @cached_property - def _cached_relocations(self) -> list[Relocation]: - return list(self.iter_relocations()) - - -class RelrRelocationSection(Section, RelrRelocationTable): - """ ELF RELR relocation section. Serves as a collection of RELR relocation entries. - """ - def __init__(self, header: Container, name: str, elffile: ELFFile) -> None: - Section.__init__(self, header, name, elffile) - RelrRelocationTable.__init__(self, self.elffile, - self['sh_offset'], self['sh_size'], self['sh_entsize']) - - -class _RelocationFunction(Protocol): - def __call__(self, value: int, sym_value: int, offset: int, addend: int = 0) -> int: ... - - -def _reloc_calc_identity(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return value - - -def _reloc_calc_sym_plus_value(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return sym_value + value + addend - - -def _reloc_calc_sym_plus_value_pcrel(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return sym_value + value - offset - - -def _reloc_calc_sym_plus_addend(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return sym_value + addend - - -def _reloc_calc_sym_plus_addend_pcrel(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return sym_value + addend - offset - - -def _reloc_calc_value_minus_sym_addend(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return value - sym_value - addend - - -def _arm_reloc_calc_sym_plus_value_pcrel(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return sym_value // 4 + value - offset // 4 - - -def _bpf_64_32_reloc_calc_sym_plus_addend(value: int, sym_value: int, offset: int, addend: int = 0) -> int: - return (sym_value + addend) // 8 - 1 - - -class RelocationHandler: - """ Handles the logic of relocations in ELF files. - """ - def __init__(self, elffile: ELFFile) -> None: - self.elffile = elffile - - def find_relocations_for_section(self, section: Section) -> RelocationSection | None: - """ Given a section, find the relocation section for it in the ELF - file. Return a RelocationSection object, or None if none was - found. - """ - reloc_section_names = ( - '.rel' + section.name, - '.rela' + section.name) - # Find the relocation section aimed at this one. Currently assume - # that either .rel or .rela section exists for this section, but - # not both. - for relsection in self.elffile.iter_sections(): - if ( isinstance(relsection, RelocationSection) and - relsection.name in reloc_section_names): - return relsection - return None - - def apply_section_relocations( - self, - stream: IO[bytes], - reloc_section: RelocationSection, - ) -> None: - """ Apply all relocations in reloc_section (a RelocationSection object) - to the given stream, that contains the data of the section that is - being relocated. The stream is modified as a result. - """ - # The symbol table associated with this relocation section - symtab = self.elffile.get_section(reloc_section['sh_link']) - assert isinstance(symtab, SymbolTableSection) - for reloc in reloc_section.iter_relocations(): - self._do_apply_relocation(stream, reloc, symtab) - - def _do_apply_relocation( - self, - stream: IO[bytes], - reloc: Relocation, - symtab: SymbolTableSection, - ) -> None: - # Preparations for performing the relocation: obtain the value of - # the symbol mentioned in the relocation, as well as the relocation - # recipe which tells us how to actually perform it. - # All peppered with some sanity checking. - if reloc['r_info_sym'] >= symtab.num_symbols(): - raise ELFRelocationError( - 'Invalid symbol reference in relocation: index %s' % ( - reloc['r_info_sym'])) - sym_value = symtab.get_symbol(reloc['r_info_sym'])['st_value'] - - reloc_type = reloc['r_info_type'] - recipe = None - - if self.elffile.get_machine_arch() == 'x86': - if reloc.is_RELA(): - raise ELFRelocationError( - 'Unexpected RELA relocation for x86: %s' % reloc) - recipe = self._RELOCATION_RECIPES_X86.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'x64': - if not reloc.is_RELA(): - raise ELFRelocationError( - 'Unexpected REL relocation for x64: %s' % reloc) - recipe = self._RELOCATION_RECIPES_X64.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'MIPS': - if reloc.is_RELA(): - if reloc_type == ENUM_RELOC_TYPE_MIPS['R_MIPS_64']: - if reloc['r_type2'] != 0 or reloc['r_type3'] != 0 or reloc['r_ssym'] != 0: - raise ELFRelocationError( - 'Multiple relocations in R_MIPS_64 are not implemented: %s' % reloc) - recipe = self._RELOCATION_RECIPES_MIPS_RELA.get(reloc_type, None) - else: - recipe = self._RELOCATION_RECIPES_MIPS_REL.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'ARM': - if reloc.is_RELA(): - raise ELFRelocationError( - 'Unexpected RELA relocation for ARM: %s' % reloc) - recipe = self._RELOCATION_RECIPES_ARM.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'AArch64': - recipe = self._RELOCATION_RECIPES_AARCH64.get(reloc_type, None) - elif self.elffile.get_machine_arch() == '64-bit PowerPC': - recipe = self._RELOCATION_RECIPES_PPC64.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'IBM S/390': - recipe = self._RELOCATION_RECIPES_S390X.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'Linux BPF - in-kernel virtual machine': - recipe = self._RELOCATION_RECIPES_EBPF.get(reloc_type, None) - elif self.elffile.get_machine_arch() == 'LoongArch': - if not reloc.is_RELA(): - raise ELFRelocationError( - 'Unexpected REL relocation for LoongArch: %s' % reloc) - recipe = self._RELOCATION_RECIPES_LOONGARCH.get(reloc_type, None) - - if recipe is None: - raise ELFRelocationError( - 'Unsupported relocation type: %s' % reloc_type) - - # So now we have everything we need to actually perform the relocation. - # Let's get to it: - - # 0. Find out which struct we're going to be using to read this value - # from the stream and write it back. - if recipe.bytesize == 4: - value_struct = self.elffile.structs.Elf_word('') - elif recipe.bytesize == 8: - value_struct = self.elffile.structs.Elf_word64('') - elif recipe.bytesize == 1: - value_struct = self.elffile.structs.Elf_byte('') - elif recipe.bytesize == 2: - value_struct = self.elffile.structs.Elf_half('') - else: - raise ELFRelocationError('Invalid bytesize %s for relocation' % - recipe.bytesize) - - # 1. Read the value from the stream (with correct size and endianness) - original_value = struct_parse( - value_struct, - stream, - stream_pos=reloc['r_offset']) - # 2. Apply the relocation to the value, acting according to the recipe - relocated_value = recipe.calc_func( - value=original_value, - sym_value=sym_value, - offset=reloc['r_offset'], - addend=reloc['r_addend'] if recipe.has_addend else 0) - # 3. Write the relocated value back into the stream - stream.seek(reloc['r_offset']) - - # Make sure the relocated value fits back by wrapping it around. This - # looks like a problem, but it seems to be the way this is done in - # binutils too. - relocated_value = relocated_value % (2 ** (recipe.bytesize * 8)) - value_struct.build_stream(relocated_value, stream) - - # Relocations are represented by "recipes". Each recipe specifies: - # bytesize: The number of bytes to read (and write back) to the section. - # This is the unit of data on which relocation is performed. - # has_addend: Does this relocation have an extra addend? - # calc_func: A function that performs the relocation on an extracted - # value, and returns the updated value. - # - class _RELOCATION_RECIPE_TYPE(NamedTuple): - bytesize: int - has_addend: bool - calc_func: _RelocationFunction - - _RELOCATION_RECIPES_ARM: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_ARM['R_ARM_ABS32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_ARM['R_ARM_CALL']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, - calc_func=_arm_reloc_calc_sym_plus_value_pcrel), - } - - _RELOCATION_RECIPES_AARCH64: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_AARCH64['R_AARCH64_ABS64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_AARCH64['R_AARCH64_ABS32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_AARCH64['R_AARCH64_PREL32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_sym_plus_addend_pcrel), - } - - # https://dmz-portal.mips.com/wiki/MIPS_relocation_types - _RELOCATION_RECIPES_MIPS_REL: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_MIPS['R_MIPS_NONE']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_MIPS['R_MIPS_32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, - calc_func=_reloc_calc_sym_plus_value), - } - _RELOCATION_RECIPES_MIPS_RELA: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_MIPS['R_MIPS_NONE']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_MIPS['R_MIPS_32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_MIPS['R_MIPS_64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, - calc_func=_reloc_calc_sym_plus_value), - } - - _RELOCATION_RECIPES_PPC64: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_PPC64['R_PPC64_ADDR32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_PPC64['R_PPC64_REL32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend_pcrel), - ENUM_RELOC_TYPE_PPC64['R_PPC64_ADDR64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - } - - _RELOCATION_RECIPES_X86: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_i386['R_386_NONE']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_i386['R_386_32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_i386['R_386_PC32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, - calc_func=_reloc_calc_sym_plus_value_pcrel), - } - - _RELOCATION_RECIPES_X64: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_x64['R_X86_64_NONE']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_x64['R_X86_64_64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_x64['R_X86_64_PC32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_sym_plus_addend_pcrel), - ENUM_RELOC_TYPE_x64['R_X86_64_32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_x64['R_X86_64_32S']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - } - - # https://www.kernel.org/doc/html/latest/bpf/llvm_reloc.html#different-relocation-types - _RELOCATION_RECIPES_EBPF: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_BPF['R_BPF_NONE']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_BPF['R_BPF_64_64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_BPF['R_BPF_64_32']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=False, calc_func=_bpf_64_32_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_BPF['R_BPF_64_NODYLD32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_BPF['R_BPF_64_ABS64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_BPF['R_BPF_64_ABS32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), - } - - # https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc - _RELOCATION_RECIPES_LOONGARCH: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_NONE']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=False, calc_func=_reloc_calc_identity), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, - calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_ADD8']: _RELOCATION_RECIPE_TYPE( - bytesize=1, has_addend=True, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_SUB8']: _RELOCATION_RECIPE_TYPE( - bytesize=1, has_addend=True, - calc_func=_reloc_calc_value_minus_sym_addend), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_ADD16']: _RELOCATION_RECIPE_TYPE( - bytesize=2, has_addend=True, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_SUB16']: _RELOCATION_RECIPE_TYPE( - bytesize=2, has_addend=True, - calc_func=_reloc_calc_value_minus_sym_addend), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_ADD32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_SUB32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_value_minus_sym_addend), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_ADD64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, - calc_func=_reloc_calc_sym_plus_value), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_SUB64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, - calc_func=_reloc_calc_value_minus_sym_addend), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_32_PCREL']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, - calc_func=_reloc_calc_sym_plus_addend_pcrel), - ENUM_RELOC_TYPE_LOONGARCH['R_LARCH_64_PCREL']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, - calc_func=_reloc_calc_sym_plus_addend_pcrel), - } - - _RELOCATION_RECIPES_S390X: Mapping[int, _RELOCATION_RECIPE_TYPE] = { - ENUM_RELOC_TYPE_S390X['R_390_32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - ENUM_RELOC_TYPE_S390X['R_390_PC32']: _RELOCATION_RECIPE_TYPE( - bytesize=4, has_addend=True, calc_func=_reloc_calc_sym_plus_addend_pcrel), - ENUM_RELOC_TYPE_S390X['R_390_64']: _RELOCATION_RECIPE_TYPE( - bytesize=8, has_addend=True, calc_func=_reloc_calc_sym_plus_addend), - } - - diff --git a/.tools/python-revlibs/elftools/elf/sections.py b/.tools/python-revlibs/elftools/elf/sections.py deleted file mode 100644 index 2b107ee..0000000 --- a/.tools/python-revlibs/elftools/elf/sections.py +++ /dev/null @@ -1,628 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/sections.py -# -# ELF sections -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import zlib -from functools import cached_property -from typing import IO, TYPE_CHECKING, Any, Literal, overload - -from ..common.exceptions import ELFCompressionError -from ..common.utils import struct_parse, elf_assert, parse_cstring_from_stream -from collections import defaultdict -from .constants import SH_FLAGS -from .notes import iter_notes -from elftools.construct.lib.container import Container - -if TYPE_CHECKING: - from collections.abc import Iterator - - from .elffile import ELFFile - from .structs import ELFStructs - - -class Section: - """ Base class for ELF sections. Also used for all sections types that have - no special functionality. - - Allows dictionary-like access to the section header. For example: - > sec = Section(...) - > sec['sh_type'] # section type - """ - def __init__(self, header: Container, name: str, elffile: ELFFile) -> None: - self.header = header - self.name = name - self.elffile = elffile - self.stream: IO[bytes] = self.elffile.stream - self.structs: ELFStructs = self.elffile.structs - self._compressed: int = header['sh_flags'] & SH_FLAGS.SHF_COMPRESSED - - if self.compressed: - # Read the compression header now to know about the size/alignment - # of the decompressed data. - header = struct_parse(self.structs.Elf_Chdr, - self.stream, - stream_pos=self['sh_offset']) - self._compression_type: str = header['ch_type'] - self._decompressed_size: int = header['ch_size'] - self._decompressed_align: int = header['ch_addralign'] - else: - self._decompressed_size = header['sh_size'] - self._decompressed_align = header['sh_addralign'] - - @property - def compressed(self) -> int: - """ Is this section compressed? - """ - return self._compressed - - @property - def data_size(self) -> int: - """ Return the logical size for this section's data. - - This can be different from the .sh_size header field when the section - is compressed. - """ - return self._decompressed_size - - @property - def data_alignment(self) -> int: - """ Return the logical alignment for this section's data. - - This can be different from the .sh_addralign header field when the - section is compressed. - """ - return self._decompressed_align - - def data(self) -> bytes: - """ The section data from the file. - - Note that data is decompressed if the stored section data is - compressed. - """ - # If this section is NOBITS, there is no data. provide a dummy answer - if self.header['sh_type'] == 'SHT_NOBITS': - return b'\0'*self.data_size - - # If this section is compressed, deflate it - if self.compressed: - c_type = self._compression_type - if c_type == 'ELFCOMPRESS_ZLIB': - # Read the data to decompress starting right after the - # compression header until the end of the section. - hdr_size: int = self.structs.Elf_Chdr.sizeof() - self.stream.seek(self['sh_offset'] + hdr_size) - compressed: bytes = self.stream.read(self['sh_size'] - hdr_size) - - decomp = zlib.decompressobj() - result = decomp.decompress(compressed, self.data_size) - elif isinstance(c_type, int): - raise ELFCompressionError( - 'Unknown compression type: {:#0x}'.format(c_type) - ) - else: - raise ELFCompressionError( - 'Unknown compression type: {!r}'.format(c_type) - ) - - if len(result) != self._decompressed_size: - raise ELFCompressionError( - 'Decompressed data is {} bytes long, should be {} bytes' - ' long'.format(len(result), self._decompressed_size) - ) - else: - self.stream.seek(self['sh_offset']) - result = self.stream.read(self._decompressed_size) - - return result - - def is_null(self) -> bool: - """ Is this a null section? - """ - return False - - @overload - def __getitem__(self, name: Literal["sh_addr", "sh_entsize", "sh_flags", "sh_offset", "sh_size"]) -> int: ... - @overload - def __getitem__(self, name: Literal["st_name", "sh_type"]) -> str: ... - @overload - def __getitem__(self, name: str) -> Any: ... - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - def __eq__(self, other: object) -> bool: - return isinstance(other, Section) and self.header == other.header - - -class NullSection(Section): - """ ELF NULL section - """ - def is_null(self) -> bool: - return True - - -class StringTableSection(Section): - """ ELF string table section. - """ - def get_string(self, offset: int) -> str: - """ Get the string stored at the given offset in this string table. - """ - table_offset = self['sh_offset'] - s = parse_cstring_from_stream(self.stream, table_offset + offset) - return s.decode('utf-8', errors='replace') if s else '' - - -class SymbolTableIndexSection(Section): - """ A section containing the section header table indices corresponding - to symbols in the linked symbol table. This section has to exist if the - symbol table contains an entry with a section header index set to - SHN_XINDEX (0xffff). The format of the section is described at - https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.sheader.html - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - symboltable: Container, - ) -> None: - super().__init__(header, name, elffile) - self.symboltable = symboltable - - def get_section_index(self, n: int) -> int: - """ Get the section header table index for the symbol with index #n. - The section contains an array of Elf32_word values with one entry - for every symbol in the associated symbol table. - """ - return struct_parse(self.elffile.structs.Elf_word(''), self.stream, - self['sh_offset'] + n * self['sh_entsize']) - - -class SymbolTableSection(Section): - """ ELF symbol table section. Has an associated StringTableSection that's - passed in the constructor. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - stringtable: StringTableSection, - ) -> None: - super().__init__(header, name, elffile) - self.stringtable = stringtable - elf_assert(self['sh_entsize'] > 0, - 'Expected entry size of section %r to be > 0' % name) - elf_assert(self['sh_size'] % self['sh_entsize'] == 0, - 'Expected section size to be a multiple of entry size in section %r' % name) - - def num_symbols(self) -> int: - """ Number of symbols in the table - """ - return self['sh_size'] // self['sh_entsize'] - - def get_symbol(self, n: int) -> Symbol: - """ Get the symbol at index #n from the table (Symbol object) - """ - # Grab the symbol's entry from the stream - entry_offset = self['sh_offset'] + n * self['sh_entsize'] - entry = struct_parse( - self.structs.Elf_Sym, - self.stream, - stream_pos=entry_offset) - # Find the symbol name in the associated string table - name = self.stringtable.get_string(entry['st_name']) - return Symbol(entry, name) - - def get_symbol_by_name(self, name: str) -> list[Symbol] | None: - """ Get a symbol(s) by name. Return None if no symbol by the given name - exists. - """ - symnums = self._symbol_name_map.get(name) - return [self.get_symbol(i) for i in symnums] if symnums else None - - @cached_property - def _symbol_name_map(self) -> dict[str, list[int]]: - smap = defaultdict(list) - for i, sym in enumerate(self.iter_symbols()): - smap[sym.name].append(i) - return smap - - def iter_symbols(self) -> Iterator[Symbol]: - """ Yield all the symbols in the table - """ - for i in range(self.num_symbols()): - yield self.get_symbol(i) - - -class Symbol: - """ Symbol object - representing a single symbol entry from a symbol table - section. - - Similarly to Section objects, allows dictionary-like access to the - symbol entry. - """ - def __init__(self, entry: Container, name: str) -> None: - self.entry = entry - self.name = name - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to entries - """ - return self.entry[name] - - -class SUNWSyminfoTableSection(Section): - """ ELF .SUNW Syminfo table section. - Has an associated SymbolTableSection that's passed in the constructor. - """ - def __init__( - self, - header: Container, - name: str, - elffile: ELFFile, - symboltable: SymbolTableSection, - ) -> None: - super().__init__(header, name, elffile) - self.symboltable = symboltable - - def num_symbols(self) -> int: - """ Number of symbols in the table - """ - return self['sh_size'] // self['sh_entsize'] - 1 - - def get_symbol(self, n: int) -> Symbol: - """ Get the symbol at index #n from the table (Symbol object). - It begins at 1 and not 0 since the first entry is used to - store the current version of the syminfo table. - """ - # Grab the symbol's entry from the stream - entry_offset = self['sh_offset'] + n * self['sh_entsize'] - entry = struct_parse( - self.structs.Elf_Sunw_Syminfo, - self.stream, - stream_pos=entry_offset) - # Find the symbol name in the associated symbol table - name = self.symboltable.get_symbol(n).name - return Symbol(entry, name) - - def iter_symbols(self) -> Iterator[Symbol]: - """ Yield all the symbols in the table - """ - for i in range(1, self.num_symbols() + 1): - yield self.get_symbol(i) - - -class NoteSection(Section): - """ ELF NOTE section. Knows how to parse notes. - """ - def iter_notes(self) -> Iterator[Container]: - """ Yield all the notes in the section. Each result is a dictionary- - like object with "n_name", "n_type", and "n_desc" fields, amongst - others. - """ - return iter_notes(self.elffile, self['sh_offset'], self['sh_size']) - - -class StabSection(Section): - """ ELF stab section. - """ - def iter_stabs(self) -> Iterator[Container]: - """ Yield all stab entries. Result type is ELFStructs.Elf_Stabs. - """ - offset: int = self['sh_offset'] - size: int = self['sh_size'] - end = offset + size - while offset < end: - stabs = struct_parse( - self.structs.Elf_Stabs, - self.stream, - stream_pos=offset) - stabs['n_offset'] = offset - offset += self.structs.Elf_Stabs.sizeof() - self.stream.seek(offset) - yield stabs - -class Attribute: - """ Attribute object - representing a build attribute of ELF files. - """ - if TYPE_CHECKING: - value: Any - - def __init__(self, structs: ELFStructs, stream: IO[bytes]) -> None: - self._tag = self._parse(structs, stream) - self.extra: Any | None = None - - @classmethod - def _parse(cls, structs: ELFStructs, stream: IO[bytes]) -> Container: - raise NotImplementedError - - @property - def tag(self) -> str: - return self._tag['tag'] - - def __repr__(self) -> str: - s = '<%s (%s): %r>' % \ - (self.__class__.__name__, self.tag, self.value) - s += ' %s' % self.extra if self.extra is not None else '' - return s - - -class AttributesSubsubsection(Section): - """ Subsubsection of an ELF attribute section's subsection. - """ - attribute: type[Attribute] - - def __init__(self, stream: IO[bytes], structs: ELFStructs, offset: int) -> None: - self.stream = stream - self.offset = offset - self.structs = structs - - self.header: Attribute = self.attribute(self.structs, self.stream) # type: ignore[assignment] - - self.attr_start = self.stream.tell() - - def iter_attributes(self, tag: str | None = None) -> Iterator[Attribute]: - """ Yield all attributes (limit to |tag| if specified). - """ - for attribute in self._make_attributes(): - if tag is None or attribute.tag == tag: - yield attribute - - @property - def num_attributes(self) -> int: - """ Number of attributes in the subsubsection. - """ - return sum(1 for _ in self.iter_attributes()) + 1 - - @property - def attributes(self) -> list[Attribute]: - """ List of all attributes in the subsubsection. - """ - return [self.header, *(self.iter_attributes())] - - def _make_attributes(self) -> Iterator[Attribute]: - """ Create all attributes for this subsubsection except the first one - which is the header. - """ - end = self.offset + self.header.value - - self.stream.seek(self.attr_start) - - while self.stream.tell() != end: - yield self.attribute(self.structs, self.stream) - - def __repr__(self) -> str: - s = "<%s (%s): %d bytes>" - return s % (self.__class__.__name__, - self.header.tag[4:], self.header.value) - - -class AttributesSubsection(Section): - """ Subsection of an ELF attributes section. - """ - subsubsection = AttributesSubsubsection - - def __init__(self, stream: IO[bytes], structs: ELFStructs, offset: int) -> None: - self.stream = stream - self.offset = offset - self.structs = structs - - self.header: Container = struct_parse(structs.Elf_Attr_Subsection_Header, self.stream, self.offset) - - self.subsubsec_start = self.stream.tell() - - def iter_subsubsections(self, scope: str | None = None) -> Iterator[AttributesSubsubsection]: - """ Yield all subsubsections (limit to |scope| if specified). - """ - for subsubsec in self._make_subsubsections(): - if scope is None or subsubsec.header.tag == scope: - yield subsubsec - - @property - def num_subsubsections(self) -> int: - """ Number of subsubsections in the subsection. - """ - return sum(1 for _ in self.iter_subsubsections()) - - @property - def subsubsections(self) -> list[AttributesSubsubsection]: - """ List of all subsubsections in the subsection. - """ - return list(self.iter_subsubsections()) - - def _make_subsubsections(self) -> Iterator[AttributesSubsubsection]: - """ Create all subsubsections for this subsection. - """ - end = self.offset + self['length'] - - self.stream.seek(self.subsubsec_start) - - while self.stream.tell() != end: - subsubsec = self.subsubsection(self.stream, - self.structs, - self.stream.tell()) - self.stream.seek(self.subsubsec_start + subsubsec.header.value) - yield subsubsec - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries. - """ - return self.header[name] - - def __repr__(self) -> str: - s = "<%s (%s): %d bytes>" - return s % (self.__class__.__name__, - self.header['vendor_name'], self.header['length']) - - -class AttributesSection(Section): - """ ELF attributes section. - """ - subsection = AttributesSubsection - - def __init__(self, header: Container, name: str, elffile: ELFFile) -> None: - super().__init__(header, name, elffile) - - fv: int = struct_parse(self.structs.Elf_byte('format_version'), - self.stream, - self['sh_offset']) - - elf_assert(chr(fv) == 'A', - "Unknown attributes version %s, expecting 'A'." % chr(fv)) - - self.subsec_start = self.stream.tell() - - def iter_subsections(self, vendor_name: str | None = None) -> Iterator[AttributesSubsection]: - """ Yield all subsections (limit to |vendor_name| if specified). - """ - for subsec in self._make_subsections(): - if vendor_name is None or subsec['vendor_name'] == vendor_name: - yield subsec - - @property - def num_subsections(self) -> int: - """ Number of subsections in the section. - """ - return sum(1 for _ in self.iter_subsections()) - - @property - def subsections(self) -> list[AttributesSubsection]: - """ List of all subsections in the section. - """ - return list(self.iter_subsections()) - - def _make_subsections(self) -> Iterator[AttributesSubsection]: - """ Create all subsections for this section. - """ - end = self['sh_offset'] + self.data_size - - self.stream.seek(self.subsec_start) - - while self.stream.tell() != end: - subsec = self.subsection(self.stream, - self.structs, - self.stream.tell()) - self.stream.seek(self.subsec_start + subsec['length']) - yield subsec - - -class ARMAttribute(Attribute): - """ ARM attribute object - representing a build attribute of ARM ELF files. - """ - - @classmethod - def _parse(cls, structs: ELFStructs, stream: IO[bytes]) -> Container: - return struct_parse(structs.Elf_Arm_Attribute_Tag, stream) - - def __init__(self, structs: ELFStructs, stream: IO[bytes]) -> None: - super().__init__(structs, stream) - - if self.tag in ('TAG_FILE', 'TAG_SECTION', 'TAG_SYMBOL'): - self.value = struct_parse(structs.Elf_word('value'), stream) - - if self.tag != 'TAG_FILE': - self.extra: list[int] = [] - s_number: int = struct_parse(structs.Elf_uleb128('s_number'), stream) - - while s_number != 0: - self.extra.append(s_number) - s_number = struct_parse(structs.Elf_uleb128('s_number'), - stream) - - elif self.tag in ('TAG_CPU_RAW_NAME', 'TAG_CPU_NAME', 'TAG_CONFORMANCE'): - self.value = struct_parse(structs.Elf_ntbs('value', - encoding='utf-8'), - stream) - - elif self.tag == 'TAG_COMPATIBILITY': - self.value = struct_parse(structs.Elf_uleb128('value'), stream) - self.extra = struct_parse(structs.Elf_ntbs('vendor_name', - encoding='utf-8'), - stream) - - elif self.tag == 'TAG_ALSO_COMPATIBLE_WITH': - self.value = ARMAttribute(structs, stream) - - if type(self.value.value) is not str: - nul: int = struct_parse(structs.Elf_byte('nul'), stream) - elf_assert(nul == 0, - "Invalid terminating byte %r, expecting NUL." % nul) - - else: - self.value = struct_parse(structs.Elf_uleb128('value'), stream) - - -class ARMAttributesSubsubsection(AttributesSubsubsection): - """ Subsubsection of an ELF .ARM.attributes section's subsection. - """ - attribute = ARMAttribute - - -class ARMAttributesSubsection(AttributesSubsection): - """ Subsection of an ELF .ARM.attributes section. - """ - subsubsection = ARMAttributesSubsubsection - - -class ARMAttributesSection(AttributesSection): - """ ELF .ARM.attributes section. - """ - subsection = ARMAttributesSubsection - - -class RISCVAttribute(Attribute): - """ Attribute of an ELF .riscv.attributes section. - """ - - @classmethod - def _parse(cls, structs: ELFStructs, stream: IO[bytes]) -> Container: - return struct_parse(structs.Elf_RiscV_Attribute_Tag, stream) - - def __init__(self, structs: ELFStructs, stream: IO[bytes]) -> None: - super().__init__(structs, stream) - - if self.tag in ('TAG_FILE', 'TAG_SECTION', 'TAG_SYMBOL'): - self.value = struct_parse(structs.Elf_word('value'), stream) - - if self.tag != 'TAG_FILE': - self.extra: list[int] = [] - s_number: int = struct_parse(structs.Elf_uleb128('s_number'), stream) - - while s_number != 0: - self.extra.append(s_number) - s_number = struct_parse(structs.Elf_uleb128('s_number'), - stream) - - elif self.tag == 'TAG_ARCH': - self.value = struct_parse(structs.Elf_ntbs('value', - encoding='utf-8'), - stream) - - else: - self.value = struct_parse(structs.Elf_uleb128('value'), stream) - - -class RISCVAttributesSubsubsection(AttributesSubsubsection): - """ Subsubsection of an ELF .riscv.attributes subsection. - """ - attribute = RISCVAttribute - - -class RISCVAttributesSubsection(AttributesSubsection): - """ Subsection of an ELF .riscv.attributes section. - """ - subsubsection = RISCVAttributesSubsubsection - - -class RISCVAttributesSection(AttributesSection): - """ ELF .riscv.attributes section. - """ - subsection = RISCVAttributesSubsection diff --git a/.tools/python-revlibs/elftools/elf/segments.py b/.tools/python-revlibs/elftools/elf/segments.py deleted file mode 100644 index 63c3b4e..0000000 --- a/.tools/python-revlibs/elftools/elf/segments.py +++ /dev/null @@ -1,143 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/segments.py -# -# ELF segments -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import IO, TYPE_CHECKING, Any, Literal, overload - -from ..construct import CString -from ..common.utils import struct_parse -from .constants import SH_FLAGS -from .notes import iter_notes - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct import Container - from .elffile import ELFFile - from .sections import Section - - -class Segment: - def __init__(self, header: Container, stream: IO[bytes]) -> None: - self.header = header - self.stream = stream - - def data(self) -> bytes: - """ The segment data from the file. - """ - self.stream.seek(self['p_offset']) - return self.stream.read(self['p_filesz']) - - @overload - def __getitem__(self, name: Literal["p_filesz", "p_memsz", "p_offset", "p_vaddr"]) -> int: ... - @overload - def __getitem__(self, name: Literal["p_type"]) -> str: ... - @overload - def __getitem__(self, name: str) -> Any: ... - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - def section_in_segment(self, section: Section) -> bool: - """ Is the given section contained in this segment? - - Note: this tries to reproduce the intricate rules of the - ELF_SECTION_IN_SEGMENT_STRICT macro of the header - elf/include/internal.h in the source of binutils. - """ - # Only the 'strict' checks from ELF_SECTION_IN_SEGMENT_1 are included - segtype: str = self['p_type'] - sectype: str = section['sh_type'] - secflags: int = section['sh_flags'] - - # Only PT_LOAD, PT_GNU_RELRO and PT_TLS segments can contain SHF_TLS - # sections - if ( secflags & SH_FLAGS.SHF_TLS and - segtype in ('PT_TLS', 'PT_GNU_RELRO', 'PT_LOAD')): - pass - # PT_TLS segment contains only SHF_TLS sections, PT_PHDR no sections - # at all - elif ( (secflags & SH_FLAGS.SHF_TLS) == 0 and - segtype not in ('PT_TLS', 'PT_PHDR')): - pass - else: - return False - - # PT_LOAD and similar segments only have SHF_ALLOC sections. - if ( (secflags & SH_FLAGS.SHF_ALLOC) == 0 and - segtype in ('PT_LOAD', 'PT_DYNAMIC', 'PT_GNU_EH_FRAME', - 'PT_GNU_RELRO', 'PT_GNU_STACK')): - return False - - # In ELF_SECTION_IN_SEGMENT_STRICT the flag check_vma is on, so if - # this is an alloc section, check whether its VMA is in bounds. - if secflags & SH_FLAGS.SHF_ALLOC: - secaddr: int = section['sh_addr'] - vaddr: int = self['p_vaddr'] - - # This checks that the section is wholly contained in the segment. - # The third condition is the 'strict' one - an empty section will - # not match at the very end of the segment (unless the segment is - # also zero size, which is handled by the second condition). - - # Seva 2024-07-12: a zero length section at a zero offset - # in a zero length segment should match - in GNU readelf, p_memsz - # is unsigned, on a zero length segment p_memsz-1 wraps around - # and the third condition matches. - if not (secaddr >= vaddr and - secaddr - vaddr + section['sh_size'] <= self['p_memsz'] and - (self['p_memsz'] == 0 or secaddr - vaddr <= self['p_memsz'] - 1)): - return False - - # If we've come this far and it's a NOBITS section, it's in the segment - if sectype == 'SHT_NOBITS': - return True - - secoffset: int = section['sh_offset'] - poffset: int = self['p_offset'] - - # Same logic as with secaddr vs. vaddr checks above, just on offsets in - # the file - # Seva 2024-07-12: similar discrepancy with readelf from unsignedness of p_filesz - return (secoffset >= poffset and - secoffset - poffset + section['sh_size'] <= self['p_filesz'] and - (self['p_filesz'] == 0 or secoffset - poffset <= self['p_filesz'] - 1)) - - -class InterpSegment(Segment): - """ INTERP segment. Knows how to obtain the path to the interpreter used - for this ELF file. - """ - def __init__(self, header: Container, stream: IO[bytes]) -> None: - super().__init__(header, stream) - - def get_interp_name(self) -> str: - """ Obtain the interpreter path used for this ELF file. - """ - path_offset: int = self['p_offset'] - return struct_parse( - CString('', encoding='utf-8'), - self.stream, - stream_pos=path_offset) - - -class NoteSegment(Segment): - """ NOTE segment. Knows how to parse notes. - """ - def __init__(self, header: Container, stream: IO[bytes], elffile: ELFFile) -> None: - super().__init__(header, stream) - self.elffile = elffile - - def iter_notes(self) -> Iterator[Container]: - """ Yield all the notes in the segment. Each result is a dictionary- - like object with "n_name", "n_type", and "n_desc" fields, amongst - others. - """ - return iter_notes(self.elffile, self['p_offset'], self['p_filesz']) diff --git a/.tools/python-revlibs/elftools/elf/structs.py b/.tools/python-revlibs/elftools/elf/structs.py deleted file mode 100644 index 6c03d09..0000000 --- a/.tools/python-revlibs/elftools/elf/structs.py +++ /dev/null @@ -1,600 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: elf/structs.py -# -# Encapsulation of Construct structs for parsing an ELF file, adjusted for -# correct endianness and word-size. -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import TYPE_CHECKING - -import elftools.elf .enums as e -from ..construct import ( - UBInt8, UBInt16, UBInt32, UBInt64, - ULInt8, ULInt16, ULInt32, ULInt64, - SBInt32, SLInt32, SBInt64, SLInt64, - Struct, Array, Enum, Padding, BitStruct, BitField, Value, String, CString, - Switch, Field - ) -from ..common.construct_utils import ULEB128 -from ..common.utils import roundup - -if TYPE_CHECKING: - from collections.abc import Callable - - from ..construct.core import FormatField - from ..construct.lib.container import Container - - -class ELFStructs: - """ Accessible attributes: - - Elf_{byte|half|word|word64|addr|offset|sword|xword|xsword}: - Data chunks, as specified by the ELF standard, adjusted for - correct endianness and word-size. - - Elf_Ehdr: - ELF file header - - Elf_Phdr: - Program header - - Elf_Shdr: - Section header - - Elf_Sym: - Symbol table entry - - Elf_Rel, Elf_Rela: - Entries in relocation sections - """ - if TYPE_CHECKING: - # type hints for dynamically defined instance variables - Elf_byte: Callable[[str], FormatField[int]] - Elf_half: Callable[[str], FormatField[int]] - Elf_word: Callable[[str], FormatField[int]] - Elf_word64: Callable[[str], FormatField[int]] - Elf_addr: Callable[[str], FormatField[int]] - Elf_offset: Callable[[str], FormatField[int]] - Elf_sword: Callable[[str], FormatField[int]] - Elf_sxword: Callable[[str], FormatField[int]] - Elf_xsword: Callable[[str], FormatField[int]] - Elf_Ehdr: Struct - Elf_Phdr: Struct - Elf_Shdr: Struct - Elf_Sym: Struct - Elf_Rel: Struct - Elf_Rela: Struct - - def __init__(self, little_endian: bool = True, elfclass: int = 32) -> None: - assert elfclass == 32 or elfclass == 64 - self.little_endian = little_endian - self.elfclass = elfclass - self.e_type: str | None = None # e.ENUM_E_TYPE - self.e_machine: str | None = None # e.ENUM_E_MACHINE - self.e_ident_osabi: str | None = None # e.ENUM_E_VERSION - - def __getstate__(self) -> tuple[bool, int, str | None, str | None, str | None]: - return self.little_endian, self.elfclass, self.e_type, self.e_machine, self.e_ident_osabi - - def __setstate__(self, state: tuple[bool, int, str | None, str | None, str | None]) -> None: - self.little_endian, self.elfclass, e_type, e_machine, e_osabi = state - self.create_basic_structs() - self.create_advanced_structs(e_type, e_machine, e_osabi) - - def create_basic_structs(self) -> None: - """ Create word-size related structs and ehdr struct needed for - initial determining of ELF type. - """ - if self.little_endian: - self.Elf_byte = ULInt8 - self.Elf_half = ULInt16 - self.Elf_word = ULInt32 - self.Elf_word64 = ULInt64 - self.Elf_addr = ULInt32 if self.elfclass == 32 else ULInt64 - self.Elf_offset = self.Elf_addr - self.Elf_sword = SLInt32 - self.Elf_xword = ULInt32 if self.elfclass == 32 else ULInt64 - self.Elf_sxword = SLInt32 if self.elfclass == 32 else SLInt64 - else: - self.Elf_byte = UBInt8 - self.Elf_half = UBInt16 - self.Elf_word = UBInt32 - self.Elf_word64 = UBInt64 - self.Elf_addr = UBInt32 if self.elfclass == 32 else UBInt64 - self.Elf_offset = self.Elf_addr - self.Elf_sword = SBInt32 - self.Elf_xword = UBInt32 if self.elfclass == 32 else UBInt64 - self.Elf_sxword = SBInt32 if self.elfclass == 32 else SBInt64 - self._create_ehdr() - self._create_leb128() - self._create_ntbs() - - def create_advanced_structs(self, e_type: str | None = None, e_machine: str | None = None, e_ident_osabi: str | None = None) -> None: - """ Create all ELF structs except the ehdr. They may possibly depend - on provided e_type and/or e_machine parsed from ehdr. - """ - self.e_type = e_type - self.e_machine = e_machine - self.e_ident_osabi = e_ident_osabi - - self._create_phdr() - self._create_shdr() - self._create_chdr() - self._create_sym() - self._create_rel() - self._create_dyn() - self._create_sunw_syminfo() - self._create_gnu_verneed() - self._create_gnu_verdef() - self._create_gnu_versym() - self._create_gnu_abi() - self._create_gnu_property() - self._create_note(e_type) - self._create_stabs() - self._create_attributes_subsection() - self._create_arm_attributes() - self._create_riscv_attributes() - self._create_elf_hash() - self._create_gnu_hash() - self._create_gnu_debuglink() - - #-------------------------------- PRIVATE --------------------------------# - - def _create_ehdr(self) -> None: - self.Elf_Ehdr = Struct('Elf_Ehdr', - Struct('e_ident', - Array(4, self.Elf_byte('EI_MAG')), - Enum(self.Elf_byte('EI_CLASS'), **e.ENUM_EI_CLASS), - Enum(self.Elf_byte('EI_DATA'), **e.ENUM_EI_DATA), - Enum(self.Elf_byte('EI_VERSION'), **e.ENUM_E_VERSION), - Enum(self.Elf_byte('EI_OSABI'), **e.ENUM_EI_OSABI), - self.Elf_byte('EI_ABIVERSION'), - Padding(7) - ), - Enum(self.Elf_half('e_type'), **e.ENUM_E_TYPE), - Enum(self.Elf_half('e_machine'), **e.ENUM_E_MACHINE), - Enum(self.Elf_word('e_version'), **e.ENUM_E_VERSION), - self.Elf_addr('e_entry'), - self.Elf_offset('e_phoff'), - self.Elf_offset('e_shoff'), - self.Elf_word('e_flags'), - self.Elf_half('e_ehsize'), - self.Elf_half('e_phentsize'), - self.Elf_half('e_phnum'), - self.Elf_half('e_shentsize'), - self.Elf_half('e_shnum'), - self.Elf_half('e_shstrndx'), - ) - - def _create_leb128(self) -> None: - self.Elf_uleb128 = ULEB128 - - def _create_ntbs(self) -> None: - self.Elf_ntbs = CString - - def _create_phdr(self) -> None: - p_type_dict = e.ENUM_P_TYPE_BASE - if self.e_machine == 'EM_ARM': - p_type_dict = e.ENUM_P_TYPE_ARM - elif self.e_machine == 'EM_AARCH64': - p_type_dict = e.ENUM_P_TYPE_AARCH64 - elif self.e_machine == 'EM_MIPS': - p_type_dict = e.ENUM_P_TYPE_MIPS - elif self.e_machine == 'EM_RISCV': - p_type_dict = e.ENUM_P_TYPE_RISCV - - if self.elfclass == 32: - self.Elf_Phdr = Struct('Elf_Phdr', - Enum(self.Elf_word('p_type'), **p_type_dict), - self.Elf_offset('p_offset'), - self.Elf_addr('p_vaddr'), - self.Elf_addr('p_paddr'), - self.Elf_word('p_filesz'), - self.Elf_word('p_memsz'), - self.Elf_word('p_flags'), - self.Elf_word('p_align'), - ) - else: # 64 - self.Elf_Phdr = Struct('Elf_Phdr', - Enum(self.Elf_word('p_type'), **p_type_dict), - self.Elf_word('p_flags'), - self.Elf_offset('p_offset'), - self.Elf_addr('p_vaddr'), - self.Elf_addr('p_paddr'), - self.Elf_xword('p_filesz'), - self.Elf_xword('p_memsz'), - self.Elf_xword('p_align'), - ) - - def _create_shdr(self) -> None: - """Section header parsing. - - Depends on e_machine because of machine-specific values in sh_type. - """ - sh_type_dict = e.ENUM_SH_TYPE_BASE - if self.e_machine == 'EM_ARM': - sh_type_dict = e.ENUM_SH_TYPE_ARM - elif self.e_machine == 'EM_AARCH64': - sh_type_dict = e.ENUM_SH_TYPE_AARCH64 - elif self.e_machine == 'EM_X86_64': - sh_type_dict = e.ENUM_SH_TYPE_AMD64 - elif self.e_machine == 'EM_MIPS': - sh_type_dict = e.ENUM_SH_TYPE_MIPS - if self.e_machine == 'EM_RISCV': - sh_type_dict = e.ENUM_SH_TYPE_RISCV - - self.Elf_Shdr = Struct('Elf_Shdr', - self.Elf_word('sh_name'), - Enum(self.Elf_word('sh_type'), **sh_type_dict), - self.Elf_xword('sh_flags'), - self.Elf_addr('sh_addr'), - self.Elf_offset('sh_offset'), - self.Elf_xword('sh_size'), - self.Elf_word('sh_link'), - self.Elf_word('sh_info'), - self.Elf_xword('sh_addralign'), - self.Elf_xword('sh_entsize'), - ) - - def _create_chdr(self) -> None: - # Structure of compressed sections header. It is documented in Oracle - # "Linker and Libraries Guide", Part IV ELF Application Binary - # Interface, Chapter 13 Object File Format, Section Compression: - # https://docs.oracle.com/cd/E53394_01/html/E54813/section_compression.html - fields = [ - Enum(self.Elf_word('ch_type'), **e.ENUM_ELFCOMPRESS_TYPE), - self.Elf_xword('ch_size'), - self.Elf_xword('ch_addralign'), - ] - if self.elfclass == 64: - fields.insert(1, self.Elf_word('ch_reserved')) - self.Elf_Chdr = Struct('Elf_Chdr', *fields) - - def _create_rel(self) -> None: - # r_info is also taken apart into r_info_sym and r_info_type. This is - # done in Value to avoid endianity issues while parsing. - if self.elfclass == 32: - fields = [self.Elf_xword('r_info'), - Value('r_info_sym', - lambda ctx: (ctx['r_info'] >> 8) & 0xFFFFFF), - Value('r_info_type', - lambda ctx: ctx['r_info'] & 0xFF)] - elif self.e_machine == 'EM_MIPS': # ELF64 MIPS - fields = [ - # The MIPS ELF64 specification - # (https://www.linux-mips.org/pub/linux/mips/doc/ABI/elf64-2.4.pdf) - # provides a non-standard relocation structure definition. - self.Elf_word('r_sym'), - self.Elf_byte('r_ssym'), - self.Elf_byte('r_type3'), - self.Elf_byte('r_type2'), - self.Elf_byte('r_type'), - - # Synthetize usual fields for compatibility with other - # architectures. This allows relocation consumers (including - # our readelf tests) to work without worrying about MIPS64 - # oddities. - Value('r_info_sym', lambda ctx: ctx['r_sym']), - Value('r_info_ssym', lambda ctx: ctx['r_ssym']), - Value('r_info_type', lambda ctx: ctx['r_type']), - Value('r_info_type2', lambda ctx: ctx['r_type2']), - Value('r_info_type3', lambda ctx: ctx['r_type3']), - Value('r_info', - lambda ctx: (ctx['r_sym'] << 32) - | (ctx['r_ssym'] << 24) - | (ctx['r_type3'] << 16) - | (ctx['r_type2'] << 8) - | ctx['r_type']), - ] - else: # Other 64 ELFs - fields = [self.Elf_xword('r_info'), - Value('r_info_sym', - lambda ctx: (ctx['r_info'] >> 32) & 0xFFFFFFFF), - Value('r_info_type', - lambda ctx: ctx['r_info'] & 0xFFFFFFFF)] - - self.Elf_Rel = Struct('Elf_Rel', - self.Elf_addr('r_offset'), - *fields) - - fields_and_addend = [*fields, self.Elf_sxword('r_addend')] - self.Elf_Rela = Struct('Elf_Rela', - self.Elf_addr('r_offset'), - *fields_and_addend - ) - - # Elf32_Relr is typedef'd as Elf32_Word, Elf64_Relr as Elf64_Xword - # (see the glibc patch, for example: - # https://sourceware.org/pipermail/libc-alpha/2021-October/132029.html) - # For us, this is the same as self.Elf_addr (or self.Elf_xword). - self.Elf_Relr = Struct('Elf_Relr', self.Elf_addr('r_offset')) - - def _create_dyn(self) -> None: - d_tag_dict = dict(e.ENUM_D_TAG_COMMON) - if self.e_machine in e.ENUMMAP_EXTRA_D_TAG_MACHINE: - assert self.e_machine is not None - d_tag_dict.update(e.ENUMMAP_EXTRA_D_TAG_MACHINE[self.e_machine]) - elif self.e_ident_osabi == 'ELFOSABI_SOLARIS': - d_tag_dict.update(e.ENUM_D_TAG_SOLARIS) - - self.Elf_Dyn = Struct('Elf_Dyn', - Enum(self.Elf_sxword('d_tag'), **d_tag_dict), - self.Elf_xword('d_val'), - Value('d_ptr', lambda ctx: ctx['d_val']), - ) - - def _create_sym(self) -> None: - # st_info is hierarchical. To access the type, use - # container['st_info']['type'] - st_info_struct = BitStruct('st_info', - Enum(BitField('bind', 4), **e.ENUM_ST_INFO_BIND), - Enum(BitField('type', 4), **e.ENUM_ST_INFO_TYPE)) - # st_other is hierarchical. To access the visibility, - # use container['st_other']['visibility'] - st_other_struct = BitStruct('st_other', - # https://openpowerfoundation.org/wp-content/uploads/2016/03/ABI64BitOpenPOWERv1.1_16July2015_pub4.pdf - # See 3.4.1 Symbol Values. - Enum(BitField('local', 3), **e.ENUM_ST_LOCAL), - Padding(2), - Enum(BitField('visibility', 3), **e.ENUM_ST_VISIBILITY)) - if self.elfclass == 32: - self.Elf_Sym = Struct('Elf_Sym', - self.Elf_word('st_name'), - self.Elf_addr('st_value'), - self.Elf_word('st_size'), - st_info_struct, - st_other_struct, - Enum(self.Elf_half('st_shndx'), **e.ENUM_ST_SHNDX), - ) - else: - self.Elf_Sym = Struct('Elf_Sym', - self.Elf_word('st_name'), - st_info_struct, - st_other_struct, - Enum(self.Elf_half('st_shndx'), **e.ENUM_ST_SHNDX), - self.Elf_addr('st_value'), - self.Elf_xword('st_size'), - ) - - def _create_sunw_syminfo(self) -> None: - self.Elf_Sunw_Syminfo = Struct('Elf_Sunw_Syminfo', - Enum(self.Elf_half('si_boundto'), **e.ENUM_SUNW_SYMINFO_BOUNDTO), - self.Elf_half('si_flags'), - ) - - def _create_gnu_verneed(self) -> None: - # Structure of "version needed" entries is documented in - # Oracle "Linker and Libraries Guide", Chapter 13 Object File Format - self.Elf_Verneed = Struct('Elf_Verneed', - self.Elf_half('vn_version'), - self.Elf_half('vn_cnt'), - self.Elf_word('vn_file'), - self.Elf_word('vn_aux'), - self.Elf_word('vn_next'), - ) - self.Elf_Vernaux = Struct('Elf_Vernaux', - self.Elf_word('vna_hash'), - self.Elf_half('vna_flags'), - self.Elf_half('vna_other'), - self.Elf_word('vna_name'), - self.Elf_word('vna_next'), - ) - - def _create_gnu_verdef(self) -> None: - # Structure of "version definition" entries are documented in - # Oracle "Linker and Libraries Guide", Chapter 13 Object File Format - self.Elf_Verdef = Struct('Elf_Verdef', - self.Elf_half('vd_version'), - self.Elf_half('vd_flags'), - self.Elf_half('vd_ndx'), - self.Elf_half('vd_cnt'), - self.Elf_word('vd_hash'), - self.Elf_word('vd_aux'), - self.Elf_word('vd_next'), - ) - self.Elf_Verdaux = Struct('Elf_Verdaux', - self.Elf_word('vda_name'), - self.Elf_word('vda_next'), - ) - - def _create_gnu_versym(self) -> None: - # Structure of "version symbol" entries are documented in - # Oracle "Linker and Libraries Guide", Chapter 13 Object File Format - self.Elf_Versym = Struct('Elf_Versym', - Enum(self.Elf_half('ndx'), **e.ENUM_VERSYM), - ) - - def _create_gnu_abi(self) -> None: - # Structure of GNU ABI notes is documented in - # https://code.woboq.org/userspace/glibc/csu/abi-note.S.html - self.Elf_abi = Struct('Elf_abi', - Enum(self.Elf_word('abi_os'), **e.ENUM_NOTE_ABI_TAG_OS), - self.Elf_word('abi_major'), - self.Elf_word('abi_minor'), - self.Elf_word('abi_tiny'), - ) - - def _create_gnu_debugaltlink(self) -> None: - self.Elf_debugaltlink = Struct('Elf_debugaltlink', - CString("sup_filename"), - String("sup_checksum", length=20)) - - def _create_gnu_property(self) -> None: - # Structure of GNU property notes is documented in - # https://github.com/hjl-tools/linux-abi/wiki/linux-abi-draft.pdf - def roundup_padding(ctx: Container) -> int: - if self.elfclass == 32: - return roundup(ctx.pr_datasz, 2) - ctx.pr_datasz - return roundup(ctx.pr_datasz, 3) - ctx.pr_datasz - - def classify_pr_data(ctx: Container) -> tuple[str, int, int] | None: - if type(ctx.pr_type) is not str: - return None - if ctx.pr_type.startswith('GNU_PROPERTY_X86_'): - return ('GNU_PROPERTY_X86_*', 4, 0) - elif ctx.pr_type.startswith('GNU_PROPERTY_AARCH64_'): - return ('GNU_PROPERTY_AARCH64_*', 4, 0) - elif ctx.pr_type.startswith('GNU_PROPERTY_RISCV_'): - return ('GNU_PROPERTY_RISCV_*', 4, 0) - return (ctx.pr_type, ctx.pr_datasz, self.elfclass) - - self.Elf_Prop = Struct('Elf_Prop', - Enum(self.Elf_word('pr_type'), **e.ENUM_NOTE_GNU_PROPERTY_TYPE), - self.Elf_word('pr_datasz'), - Switch[tuple[str, int, int] | None]('pr_data', classify_pr_data, { - ('GNU_PROPERTY_STACK_SIZE', 4, 32): self.Elf_word('pr_data'), - ('GNU_PROPERTY_STACK_SIZE', 8, 64): self.Elf_word64('pr_data'), - ('GNU_PROPERTY_X86_*', 4, 0): self.Elf_word('pr_data'), - ('GNU_PROPERTY_AARCH64_*', 4, 0): self.Elf_word('pr_data'), - ('GNU_PROPERTY_RISCV_*', 4, 0): self.Elf_word('pr_data'), - }, - default=Field('pr_data', lambda ctx: ctx.pr_datasz) - ), - Padding(roundup_padding) - ) - - def _create_note(self, e_type: str | None = None) -> None: - # Structure of "PT_NOTE" section - - self.Elf_ugid = self.Elf_half if self.elfclass == 32 and self.e_machine in { - 'EM_MN10300', - 'EM_ARM', - 'EM_CRIS', - 'EM_CYGNUS_FRV', - 'EM_386', - 'EM_M32R', - 'EM_68K', - 'EM_S390', - 'EM_SH', - 'EM_SPARC', - } else self.Elf_word - - self.Elf_Nhdr = Struct('Elf_Nhdr', - self.Elf_word('n_namesz'), - self.Elf_word('n_descsz'), - Enum(self.Elf_word('n_type'), - **(e.ENUM_NOTE_N_TYPE if e_type != "ET_CORE" - else e.ENUM_CORE_NOTE_N_TYPE)), - ) - - # A process psinfo structure according to - # http://elixir.free-electrons.com/linux/v2.6.35/source/include/linux/elfcore.h#L84 - if self.elfclass == 32: - self.Elf_Prpsinfo = Struct('Elf_Prpsinfo', - self.Elf_byte('pr_state'), - String('pr_sname', 1), - self.Elf_byte('pr_zomb'), - self.Elf_byte('pr_nice'), - self.Elf_xword('pr_flag'), - self.Elf_ugid('pr_uid'), - self.Elf_ugid('pr_gid'), - self.Elf_word('pr_pid'), - self.Elf_word('pr_ppid'), - self.Elf_word('pr_pgrp'), - self.Elf_word('pr_sid'), - String('pr_fname', 16), - String('pr_psargs', 80), - ) - else: # 64 - self.Elf_Prpsinfo = Struct('Elf_Prpsinfo', - self.Elf_byte('pr_state'), - String('pr_sname', 1), - self.Elf_byte('pr_zomb'), - self.Elf_byte('pr_nice'), - Padding(4), - self.Elf_xword('pr_flag'), - self.Elf_ugid('pr_uid'), - self.Elf_ugid('pr_gid'), - self.Elf_word('pr_pid'), - self.Elf_word('pr_ppid'), - self.Elf_word('pr_pgrp'), - self.Elf_word('pr_sid'), - String('pr_fname', 16), - String('pr_psargs', 80), - ) - - # A PT_NOTE of type NT_FILE matching the definition in - # https://chromium.googlesource.com/ - # native_client/nacl-binutils/+/upstream/master/binutils/readelf.c - # Line 15121 - self.Elf_Nt_File = Struct('Elf_Nt_File', - self.Elf_xword("num_map_entries"), - self.Elf_xword("page_size"), - Array(lambda ctx: ctx.num_map_entries, - Struct('Elf_Nt_File_Entry', - self.Elf_addr('vm_start'), - self.Elf_addr('vm_end'), - self.Elf_offset('page_offset'))), - Array(lambda ctx: ctx.num_map_entries, - CString('filename'))) - - def _create_stabs(self) -> None: - # Structure of one stabs entry, see binutils/bfd/stabs.c - # Names taken from https://sourceware.org/gdb/current/onlinedocs/stabs.html#Overview - self.Elf_Stabs = Struct('Elf_Stabs', - self.Elf_word('n_strx'), - self.Elf_byte('n_type'), - self.Elf_byte('n_other'), - self.Elf_half('n_desc'), - self.Elf_word('n_value'), - ) - - def _create_attributes_subsection(self) -> None: - # Structure of a build attributes subsection header. A subsection is - # either public to all tools that process the ELF file or private to - # the vendor's tools. - self.Elf_Attr_Subsection_Header = Struct('Elf_Attr_Subsection', - self.Elf_word('length'), - self.Elf_ntbs('vendor_name', - encoding='utf-8') - ) - - def _create_arm_attributes(self) -> None: - # Structure of an ARM build attribute tag. - self.Elf_Arm_Attribute_Tag = Struct('Elf_Arm_Attribute_Tag', - Enum(self.Elf_uleb128('tag'), - **e.ENUM_ATTR_TAG_ARM) - ) - - def _create_riscv_attributes(self) -> None: - # Structure of a RISC-V build attribute tag. - self.Elf_RiscV_Attribute_Tag = Struct('Elf_RiscV_Attribute_Tag', - Enum(self.Elf_uleb128('tag'), - **e.ENUM_ATTR_TAG_RISCV) - ) - - def _create_elf_hash(self) -> None: - # Structure of the old SYSV-style hash table header. It is documented - # in the Oracle "Linker and Libraries Guide", Part IV ELF Application - # Binary Interface, Chapter 14 Object File Format, Section Hash Table - # Section: - # https://docs.oracle.com/cd/E53394_01/html/E54813/chapter6-48031.html - - self.Elf_Hash = Struct('Elf_Hash', - self.Elf_word('nbuckets'), - self.Elf_word('nchains'), - Array(lambda ctx: ctx['nbuckets'], self.Elf_word('buckets')), - Array(lambda ctx: ctx['nchains'], self.Elf_word('chains'))) - - def _create_gnu_hash(self) -> None: - # Structure of the GNU-style hash table header. Documentation for this - # table is mostly in the GLIBC source code, a good explanation of the - # format can be found in this blog post: - # https://flapenguin.me/2017/05/10/elf-lookup-dt-gnu-hash/ - self.Gnu_Hash = Struct('Gnu_Hash', - self.Elf_word('nbuckets'), - self.Elf_word('symoffset'), - self.Elf_word('bloom_size'), - self.Elf_word('bloom_shift'), - Array(lambda ctx: ctx['bloom_size'], self.Elf_xword('bloom')), - Array(lambda ctx: ctx['nbuckets'], self.Elf_word('buckets'))) - - def _create_gnu_debuglink(self) -> None: - self.Gnu_debuglink = Struct('Gnu_debuglink', - CString("filename"), - Padding(lambda ctx: 3 - len(ctx.filename) % 4, strict=True), - self.Elf_word("checksum")) diff --git a/.tools/python-revlibs/elftools/py.typed b/.tools/python-revlibs/elftools/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/INSTALLER b/.tools/python-revlibs/pyelftools-0.33.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/.tools/python-revlibs/pyelftools-0.33.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/METADATA b/.tools/python-revlibs/pyelftools-0.33.dist-info/METADATA deleted file mode 100644 index 210302f..0000000 --- a/.tools/python-revlibs/pyelftools-0.33.dist-info/METADATA +++ /dev/null @@ -1,24 +0,0 @@ -Metadata-Version: 2.4 -Name: pyelftools -Version: 0.33 -Summary: Library for analyzing ELF files and DWARF debugging information -Author-email: Eli Bendersky -Maintainer-email: Eli Bendersky -License: Public domain -Project-URL: Homepage, https://github.com/eliben/pyelftools -Project-URL: Repository, https://github.com/eliben/pyelftools.git -Project-URL: Issues, https://github.com/eliben/pyelftools/issues -Platform: Cross Platform -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: Public Domain -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3 -Classifier: Topic :: File Formats -Classifier: Topic :: Software Development :: Compilers -Classifier: Topic :: Software Development :: Debuggers -Classifier: Topic :: Software Development :: Disassemblers -Requires-Python: >=3.10 -Description-Content-Type: text/x-rst -License-File: LICENSE -Dynamic: license-file diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/RECORD b/.tools/python-revlibs/pyelftools-0.33.dist-info/RECORD deleted file mode 100644 index 0d72970..0000000 --- a/.tools/python-revlibs/pyelftools-0.33.dist-info/RECORD +++ /dev/null @@ -1,114 +0,0 @@ -../../bin/__pycache__/readelf.cpython-310.pyc,, -../../bin/readelf.py,sha256=hA_fJvqx5A9jL6kL8yjn-uiipAUwgjLpcMaIMCPzf6Q,92925 -elftools/__init__.py,sha256=2KBx6eaFds6rbtIAxfRxgRn31h7g-uM3qGewlfHVxdk,267 -elftools/__pycache__/__init__.cpython-310.pyc,, -elftools/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -elftools/common/__pycache__/__init__.cpython-310.pyc,, -elftools/common/__pycache__/construct_utils.cpython-310.pyc,, -elftools/common/__pycache__/exceptions.cpython-310.pyc,, -elftools/common/__pycache__/utils.cpython-310.pyc,, -elftools/common/construct_utils.py,sha256=lSk3X7taZmKkguj_S2weykhukBFiSjAIpVr3awxYHrY,5070 -elftools/common/exceptions.py,sha256=zonC2LhWtmFfXc5vW2tu66m-J46qw00fL4VLI7slq-E,512 -elftools/common/utils.py,sha256=OFjf6BVnmONflQL0AxrMLXbc6V2s948EBxnMDjk0dW8,4660 -elftools/construct/__init__.py,sha256=FRBOsBGmQOQmipuSIdByAaA2D_CxyLSeJS70H9-7Nd4,5031 -elftools/construct/__pycache__/__init__.cpython-310.pyc,, -elftools/construct/__pycache__/adapters.cpython-310.pyc,, -elftools/construct/__pycache__/core.cpython-310.pyc,, -elftools/construct/__pycache__/debug.cpython-310.pyc,, -elftools/construct/__pycache__/macros.cpython-310.pyc,, -elftools/construct/adapters.py,sha256=V0V0WyXrhJF07lwxebmGewPgRxYz6erIJ2qkOf5MiEE,19495 -elftools/construct/core.py,sha256=hsfJ7wMDvre_57MQxS5EaXzDG2zsdDXrMxaCFrcKll8,49248 -elftools/construct/debug.py,sha256=SRSGd55GTg9KWc_UKdjpPFd6Dw2blphH5pQAo8hqyxw,4304 -elftools/construct/lib/__init__.py,sha256=MiqbWyy-A2pcz46TncvDc0IDBz23D8TyywDw-YuhB88,264 -elftools/construct/lib/__pycache__/__init__.cpython-310.pyc,, -elftools/construct/lib/__pycache__/binary.cpython-310.pyc,, -elftools/construct/lib/__pycache__/bitstream.cpython-310.pyc,, -elftools/construct/lib/__pycache__/container.cpython-310.pyc,, -elftools/construct/lib/__pycache__/hex.cpython-310.pyc,, -elftools/construct/lib/binary.py,sha256=8Y5BYaEbyVcyvQHFd8vpg3MIGv1bQRKwL-xRoOHfLhE,2780 -elftools/construct/lib/bitstream.py,sha256=7oCBdpvtHQCghjmch0moR8Gki40IY3UGv30SKbbhgIo,2641 -elftools/construct/lib/container.py,sha256=A4WkIP6_W6xxQVPOqt0ZL_nQmGK8fhfCA791mqGLK7Q,5363 -elftools/construct/lib/hex.py,sha256=Vfgtw28nM0fAjp5Gn9SXNoJBRTt6Y-aeFnrWsxbl4sc,1368 -elftools/construct/macros.py,sha256=AkToTPT1mKyNp8PY8fCbBhEqUI5x-404Gzd_HARypOM,24996 -elftools/dwarf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -elftools/dwarf/__pycache__/__init__.cpython-310.pyc,, -elftools/dwarf/__pycache__/abbrevtable.cpython-310.pyc,, -elftools/dwarf/__pycache__/aranges.cpython-310.pyc,, -elftools/dwarf/__pycache__/callframe.cpython-310.pyc,, -elftools/dwarf/__pycache__/compileunit.cpython-310.pyc,, -elftools/dwarf/__pycache__/constants.cpython-310.pyc,, -elftools/dwarf/__pycache__/datatype_cpp.cpython-310.pyc,, -elftools/dwarf/__pycache__/descriptions.cpython-310.pyc,, -elftools/dwarf/__pycache__/die.cpython-310.pyc,, -elftools/dwarf/__pycache__/dwarf_expr.cpython-310.pyc,, -elftools/dwarf/__pycache__/dwarf_util.cpython-310.pyc,, -elftools/dwarf/__pycache__/dwarfinfo.cpython-310.pyc,, -elftools/dwarf/__pycache__/enums.cpython-310.pyc,, -elftools/dwarf/__pycache__/lineprogram.cpython-310.pyc,, -elftools/dwarf/__pycache__/locationlists.cpython-310.pyc,, -elftools/dwarf/__pycache__/namelut.cpython-310.pyc,, -elftools/dwarf/__pycache__/ranges.cpython-310.pyc,, -elftools/dwarf/__pycache__/structs.cpython-310.pyc,, -elftools/dwarf/__pycache__/typeunit.cpython-310.pyc,, -elftools/dwarf/abbrevtable.py,sha256=y-Smn7TO1K6H60aUgYzPbEkwK4FYu4uwi244ZM7nqtQ,3036 -elftools/dwarf/aranges.py,sha256=u_pzzRPolmWyuAjAw7bfyYl4MW4POamzknaFBfYmPTY,5559 -elftools/dwarf/callframe.py,sha256=5arnQ3FIAe6A1dxLccQwB6jLFjjtPNC_gl3eKymOcLA,32237 -elftools/dwarf/compileunit.py,sha256=v_9bDaWggTkLDQUF8Y0Z71xwKHt-vS-glGcacTnf3vU,11322 -elftools/dwarf/constants.py,sha256=G5sOMgxct6o6ARdWRDGnPOlk15o6RP8LdK9yGOlvPzI,6576 -elftools/dwarf/datatype_cpp.py,sha256=1wCB4u4zostwNt7Jn6b7mizzEMjWsnOZTCY00P8lTBA,9497 -elftools/dwarf/descriptions.py,sha256=c1vAnI_-wjLfRqbAZ5R6DsNGZzd9H-E_N3EejT97770,28705 -elftools/dwarf/die.py,sha256=_p8UbckjahewU3avvR5N-QGtdzVFTNaZyM6RJ308C44,16485 -elftools/dwarf/dwarf_expr.py,sha256=DCF0afBBqn3rcpstNDMj8FrVtD4qgbUPqYDmFHn0-Xs,11698 -elftools/dwarf/dwarf_util.py,sha256=TwryCUHtLaVmZrPJ-0JgDZVsOxRwF9Gleyo_6V5eyLA,3494 -elftools/dwarf/dwarfinfo.py,sha256=2LFsN286PM8qQfhhBd9w5QNo0D-XOAHmhBhdMV81cgc,32693 -elftools/dwarf/enums.py,sha256=HiNjcBk-aYUT-v4pzUSv3o-fxrZNbcbVJJvGq9yOa_M,22908 -elftools/dwarf/lineprogram.py,sha256=PoUZGijS1hU59SVpwxQQGimpy6rHg3dgriu0Lnty4Pg,12528 -elftools/dwarf/locationlists.py,sha256=mp6mk_CoT0RuUD5ks2dwKv0c6BqAlAcQBkt_fY-jMmc,21017 -elftools/dwarf/namelut.py,sha256=zbCNZc70OE8E9g0HGye83Vp212MOYFedhdWXZhceZYY,7419 -elftools/dwarf/ranges.py,sha256=RM9hr5_6lwZGcyzBehqAbrRKQxdqnKKukEniZgMdW2U,10778 -elftools/dwarf/structs.py,sha256=ZGm20I86Jih1bOeWbEP7E82udL4uA0rcXapenlCRUV8,27067 -elftools/dwarf/typeunit.py,sha256=SxMzQ9mvRDu0IwI2PqMvC2xXapOjwcKJFf-aR8JiFKg,10776 -elftools/ehabi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -elftools/ehabi/__pycache__/__init__.cpython-310.pyc,, -elftools/ehabi/__pycache__/constants.cpython-310.pyc,, -elftools/ehabi/__pycache__/decoder.cpython-310.pyc,, -elftools/ehabi/__pycache__/ehabiinfo.cpython-310.pyc,, -elftools/ehabi/__pycache__/structs.cpython-310.pyc,, -elftools/ehabi/constants.py,sha256=o4bflevlMzjbHN_kmKBqz46XYAe1-rXE7tK4kEkyyqg,32 -elftools/ehabi/decoder.py,sha256=qzvWCb2WWCtE5QfaYUiBtHdJHTviNc19FUUWaX58d_Q,12287 -elftools/ehabi/ehabiinfo.py,sha256=FaNxFftyAgiuDazNPTJEfwq7VTqc6bPm2rR8P5LidH8,8859 -elftools/ehabi/structs.py,sha256=zzgdx5PVnOp4hE9CS3ox2_BFE9nX0xipYvbSXvYPPpA,1417 -elftools/elf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -elftools/elf/__pycache__/__init__.cpython-310.pyc,, -elftools/elf/__pycache__/constants.cpython-310.pyc,, -elftools/elf/__pycache__/descriptions.cpython-310.pyc,, -elftools/elf/__pycache__/dynamic.cpython-310.pyc,, -elftools/elf/__pycache__/elffile.cpython-310.pyc,, -elftools/elf/__pycache__/enums.cpython-310.pyc,, -elftools/elf/__pycache__/gnuversions.cpython-310.pyc,, -elftools/elf/__pycache__/hash.cpython-310.pyc,, -elftools/elf/__pycache__/notes.cpython-310.pyc,, -elftools/elf/__pycache__/relocation.cpython-310.pyc,, -elftools/elf/__pycache__/sections.cpython-310.pyc,, -elftools/elf/__pycache__/segments.cpython-310.pyc,, -elftools/elf/__pycache__/structs.cpython-310.pyc,, -elftools/elf/constants.py,sha256=OkomKiSp7X95b4C23bVMMeupPngpPLSQtXfcjcvKhrg,4888 -elftools/elf/descriptions.py,sha256=Tz5OWXgowc2_u2TmIwuhnFLtMsl45xU_ndtO23_wyMw,33425 -elftools/elf/dynamic.py,sha256=ox9704I230MgaP64E1bnJFIoSRERt-dtUB-14Qftp-0,15775 -elftools/elf/elffile.py,sha256=JhX1BSt52PUGX1c5kgtfKar9SDHkkVqJgwMOvhzJeM8,44966 -elftools/elf/enums.py,sha256=TZdd9Odd5EM8xnPfx1JKmjAnkrHS7Ah6ZJ3STxINrYg,50544 -elftools/elf/gnuversions.py,sha256=DlU-WXGN89dNAor_eV2bRFYtxkir_Hh9dcJ_BIbPgnI,9362 -elftools/elf/hash.py,sha256=uLEM0sloFP68VLsSLM6lrvPs9CcJVK1mE2SpNo8jBtU,9078 -elftools/elf/notes.py,sha256=TD8bwzfjqAiuEYy-vJKETcGhr3STRlnfoU3Ykjds5ko,3483 -elftools/elf/relocation.py,sha256=2bSg5H5Sl7rpIU9qxAueLXeXOHd8j-DNGzFlbMYF7Ug,24376 -elftools/elf/sections.py,sha256=yQzp8x43y3FDQyVlNOJWA9Lu-3MsC0HxZxrnAnq-SzY,22016 -elftools/elf/segments.py,sha256=i4CLLO55dndeXth4iXDCcz9d7IWeLA71iq3N3LLu-Vo,5536 -elftools/elf/structs.py,sha256=EUsgnjt83UccooddVUeBz0oXSs-TwIDTjaUsJPsjMr4,25390 -elftools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pyelftools-0.33.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pyelftools-0.33.dist-info/METADATA,sha256=27tzlQnHlbi35wAFeICog2Uhi7HHIWsZiiLJfIrtzmI,1003 -pyelftools-0.33.dist-info/RECORD,, -pyelftools-0.33.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pyelftools-0.33.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91 -pyelftools-0.33.dist-info/licenses/LICENSE,sha256=rhi_TLgvkq91RyWRd7wovEjk_HMlGLzt_mkCJiiNNEU,1534 -pyelftools-0.33.dist-info/top_level.txt,sha256=InAY9R6th0QPc3XmSpN8vFaYbXTQKstWIyb7HSMQH5E,9 diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/REQUESTED b/.tools/python-revlibs/pyelftools-0.33.dist-info/REQUESTED deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/WHEEL b/.tools/python-revlibs/pyelftools-0.33.dist-info/WHEEL deleted file mode 100644 index 14a883f..0000000 --- a/.tools/python-revlibs/pyelftools-0.33.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: setuptools (82.0.1) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/licenses/LICENSE b/.tools/python-revlibs/pyelftools-0.33.dist-info/licenses/LICENSE deleted file mode 100644 index 26c1b8f..0000000 --- a/.tools/python-revlibs/pyelftools-0.33.dist-info/licenses/LICENSE +++ /dev/null @@ -1,32 +0,0 @@ -pyelftools is in the public domain (see below if you need more details). - -pyelftools uses the construct library for structured parsing of a binary -stream. construct is packaged in pyelftools/construct - see its LICENSE -file for the license. - -------------------------------------------------------------------------------- - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/.tools/python-revlibs/pyelftools-0.33.dist-info/top_level.txt b/.tools/python-revlibs/pyelftools-0.33.dist-info/top_level.txt deleted file mode 100644 index 3009b42..0000000 --- a/.tools/python-revlibs/pyelftools-0.33.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -elftools diff --git a/README.md b/README.md index 8b29e4b..2a2b43d 100644 --- a/README.md +++ b/README.md @@ -1,78 +1,95 @@ -# MAG160C 热像仪统一工程 +# MAG160C 热像仪工程 -MAG160C 热像仪(160×120,15fps,USB VID `0x833C`)的逆向工程与双端实现: -**C 参考实现**(Linux/Windows,源自官方 PC SDK 逆向)与**安卓统一 App** -(Kotlin + Compose,适配 Android 16,整合官方 4 个 App 的功能)。 +MAG160C 热像仪机芯(160×120 @15fps,USB VID `0x833C`)的完整逆向工程与双端实现: -## 从这里开始(新接手者阅读顺序) - -1. `docs/android_app/HANDOFF_DEVELOPMENT.md` — 安卓 App 总交接(必读) -2. `docs/android_app/session_state.md` — 会话心跳与待办(最新进度) -3. `docs/android_app/app_manual.md` — **App 操作手册**(界面/设置/方向/排障) -4. `analysis/README.md` — 逆向工程总目录索引(Linux/Windows/Android 三条线) -5. `analysis/magcx_official_flow.md` — **权威 USB 协议结论**(官方源码逐行核对版) -6. `analysis/protocol_spec.md` — 早期 PC 端协议逆向(硬件验证记录) -7. `csdk/README.md` — C SDK 文档(构建/API/工具/测试) +- **C 参考实现**(`csdk/`,跨平台):官方 PC SDK 渲染/温度/USB 管线的逐像素复刻, + 含 Windows 直连演示程序与 Linux 移植模块; +- **安卓统一 App**(`android/`,Kotlin + Compose,适配 Android 16):整合官方 + 4 个 App(普通版/专业版/ThermoScope/CoreSdkSample)的功能——实时预览、 + 拍照(MDT 温度容器)、录像、媒体库、离线分析、PDF 报告、任务巡检、远程预览; +- **逆向工程档案**(`analysis/`):三条 SDK 产品线(Linux/Windows/Android)的 + 反汇编、全量伪代码、协议结论与验证数据。 ## 仓库结构 -| 路径 | 用途 | +| 路径 | 内容 | |---|---| -| `android/` | **安卓统一 App**(Kotlin + Compose,Gradle 工程,package `com.mag160c.thermal`):实时预览、拍照 MDT、录像、媒体库、离线分析、PDF 报告、任务巡检、设置 | -| `csdk/` | 纯 C SDK(官方管线 C 复刻:渲染/温度/IR 会话/FFC 调度,见 `csdk/README.md`)| -| `analysis/` | 逆向工程总目录(Linux/Windows/Android 三条 SDK 线的解包产物与结论,见 `analysis/README.md`)| +| `android/` | 安卓统一 App(Gradle 工程,package `com.mag160c.thermal`,纯 Kotlin 无 NDK)| +| `csdk/` | 纯 C SDK:USB 会话层、帧解析、温度换算、TCM 板通信、官方渲染管线复刻(见 `csdk/README.md`)| +| `analysis/` | 逆向工程总目录:三条 SDK 线的解包产物、协议规格、差分验证数据(见 `analysis/README.md`)| +| `docs/android_app/` | 安卓 App 文档:`DEVELOPMENT.md` 开发指南 / `app_manual.md` 操作手册 / `session_state.md` 开发进度与验证记录 | | `IR_Camera_SDK-1.0.1/` | 原厂 Windows/Android/Linux SDK 原始包 | | `app/` | 官方安卓 APK 存档(普通版/专业版/ThermoScope/demo)| -| `build-artifacts/` | 构建产物(安卓 APK、PC demo3、DDT 标定数据)| -| `docs/android_app/` | 安卓 App 文档:`app_manual.md` 操作手册 / `HANDOFF_DEVELOPMENT.md` 交接 / `session_state.md` 进度心跳 / 逆向功能总表 | +| `build-artifacts/` | 构建产物(安卓 APK、PC demo、DDT 标定数据)| | `vendor-docs/` | 厂商资料 | -| `tools/` | 会话恢复脚本 | +| `tools/` | 辅助脚本(会话恢复、帧数据检查)| -## 快速入口 +## 构建与测试 + +### 安卓 App + +要求:JDK 21(Temurin)、Android SDK(API 36)、设备为 Android 12+。 -### 安卓 App(构建/测试) ```powershell -cd C:\Project\MAG160C\android -$env:JAVA_HOME = "C:\Tools\jdk-21" +cd android +$env:JAVA_HOME = "C:\Tools\jdk-21" # 按本机 JDK 路径调整 .\gradlew.bat :app:assembleDebug test --no-daemon -# 产物:build-artifacts\mag160c-app-debug.apk +# 产物:android\app\build\outputs\apk\debug\app-debug.apk +#(仓库同步副本:build-artifacts\mag160c-app-debug.apk) ``` -### C 管线复刻 demo3 +单元测试 123 项(渲染管线逐字节黄金比对、协议字节序、网络回环等),无硬件可跑。 + +### C 参考实现(demo3:官方渲染管线复刻) + ```powershell gcc -O2 -w -DMAG160C_STATIC -I"csdk\third_party\libusb\win64" -I"csdk\include" -I"csdk\src" ` -o build-artifacts\mag160c_demo3.exe csdk\tools\mag160c_demo3.c ` csdk\src\mag160c_display.c csdk\src\mag160c_error.c ` csdk\third_party\libusb\win64\libusb-1.0.x64.a -lgdi32 -luser32 -Start-Process "build-artifacts\mag160c_demo3.exe" -WorkingDirectory "build-artifacts" ``` -## 硬件 +更多构建方式(CMake / Linux / CLI 工具 / 测试)见 `csdk/README.md`。 -- 设备:MAG160C 热像仪机芯,160×120 @15fps +## 硬件与协议要点 + +- 设备:MAG160C 机芯,160×120 @15fps,FFC 快门自动校正 - USB:VID `0x833C` PID `0x0001`;端点 0x03 命令 / 0x82 响应 / 0x81 图像流 / 0x84 标定文件 / 0x05 标定上传 -- 协议细节:`analysis/magcx_official_flow.md`(权威) +- 协议:命令 4 字节小端 `{magic}`(FFC 为 8 字节);帧格式 + `0x1bb1b11b | counter | len | type | … | u16LE 像素 | 0x1bb1b11c` +- 权威协议结论:`analysis/magcx_official_flow.md`(官方 Java 源码逐行核对版) -## 里程碑 +## 文档导航 -- 2026-08:官方 PC SDK(libmagcore/CoreSDKLib)逆向 + C 管线逐像素复刻(demo3) -- 2026-09-06~09:安卓 App(纯 Kotlin,无 NDK):渲染管线移植(逐字节验证)、 - USB 层(官方协议 Java 源码逐行复刻)、相机式 UI、拍照/录像/媒体库/分析/PDF -- 2026-09-10:真机联调打通(根因:USB 命令字节序反转,已修复并用单测锁死); - 官方 App 全量解包入库(jadx + Ghidra) -- 2026-09-11~12:真机多轮联调(无线 adb)。修复根因级的三个问题: - **launchMode 缺失**导致 MIUI 重复广播 ATTACHED、建出多个 Activity 争抢相机 - (重连风暴的真凶);`SET_CONFIGURATION` 复位设备导致相机反复重枚举; - **实时画面卡顿**——热像走 `lockCanvas` 软件画布,每帧在 CPU 上放大整屏, - 实测只有 6.5 帧/秒、单帧 134ms,改用硬件画布后 **15.1 帧/秒、单帧 6.4ms**。 - 同期完成:官方 7×7 局部细节增强移植(含混叠系数修正与黄金值测试)、 - 测温点标注风格重做(准星+描边字,去白底)、拍照/录像方向跟随握持角度、 - 录像 3× 分辨率、分析页与照片标记完全对齐、设置持久化 -- 文档:`docs/android_app/app_manual.md`(操作手册)、 - `docs/android_app/session_state.md`(第 18~24 轮修复记录与排查方法) +| 文档 | 内容 | +|---|---| +| `docs/android_app/DEVELOPMENT.md` | 安卓 App 开发指南(架构/约定/构建/注意事项)| +| `docs/android_app/app_manual.md` | App 操作手册(界面/设置/方向/排障)| +| `docs/android_app/session_state.md` | 开发进度与验证记录(39 轮真机验证)| +| `docs/android_app/reverse_apk_features.md` | 官方 4 App 逆向功能总表 | +| `analysis/README.md` | 逆向工程总目录索引 | +| `analysis/magcx_official_flow.md` | 权威 USB 协议结论 | +| `csdk/README.md` | C SDK 文档(构建/API/工具/测试/对齐记录)| -## 仓库说明 +## 主要成果记录 -仓库包含官方 SDK、反编译产物、二进制样本和抓帧数据。部分内容可能受原厂许可 -限制,仅用于本项目的互操作性研究和设备调试。 +- **2026-08**:官方 PC SDK(libmagcore / CoreSDKLib)逆向完成,C 管线逐像素复刻 + (NUC/盲元与官方同帧抓帧 0/19200 误差) +- **2026-09 上旬**:安卓统一 App 完成(渲染管线 Kotlin 移植逐字节验证、USB 层 + 复刻官方 Java 源码、相机式 UI、MDT 拍照/录像/媒体库/分析/PDF/任务巡检) +- **2026-09-10**:真机联调打通(根因:USB 命令字节序反转,修复后单测锁死); + 官方安卓 App 全量解包入库(jadx + Ghidra) +- **2026-09-11~12**:真机多轮联调,修复 launchMode 重连风暴、SET_CONFIGURATION + 重枚举、软件画布掉帧(6.5fps→15.1fps)三个根因级问题;完成官方 7×7 细节 + 增强移植、标注风格重做、方向跟随等 +- **2026-10 上旬**:官方真机渲染链全量逆向(39 轮验证)——逐行固定图案噪声的 + 来源定案:参考减除消除 98.4% 行 FPN,显示域对齐官方(暗区行交替 + 0.14-0.23 ×1e-2 弧长 ≈ 官方 0.15);7×7 细节增强的显示代价量化并写入设置说明 + +## 许可与使用声明 + +仓库包含原厂 SDK、反编译产物、二进制样本与抓帧数据。这些内容仅供本项目的 +互操作性研究与设备调试使用,可能受原厂许可限制,不得用于其他用途; +不得分发账号凭据、访问令牌或私钥。工程代码(`android/`、`csdk/`、`docs/`、 +`analysis/` 中自行编写的部分)按项目内部使用管理。 diff --git a/analysis/README.md b/analysis/README.md index f5b8d23..db48aaf 100644 --- a/analysis/README.md +++ b/analysis/README.md @@ -43,8 +43,8 @@ - `coresdk_arm64_defined.txt`:ARM64 库符号表 ## history/ — 过程记录(按时间) -`task_plan_20260714` → `findings_20260810` / `progress_20260810` / `handoff_20260810..13` / -`交接_完整逆向工程说明_20260811`(PC SDK 全流程报告)→ `reverse_20260813_full` / +`task_plan_20260714` → `findings_20260810` / `progress_20260810` / `worklog_20260810..13` / +`worklog_完整逆向工程说明_20260811`(PC SDK 全流程报告)→ `reverse_20260813_full` / `progress_reverse`。历史参考,协议细节以 `magcx_official_flow.md` 为准。 ## preview/ — 渲染验证截图 @@ -55,4 +55,4 @@ demo2_v3..v7 系列(管线复刻过程对照)、preview_*.png(安卓 UI Kotlin 管线(android/app)与其逐字节差分验证一致。 - `android/app/src/main/java/com/mag160c/thermal/usb/IrSession.kt`:官方 UsbCommunication.java 的 Kotlin 等价实现(含小端命令、800ms 超时、0x84 标定下载)。 -- `docs/android_app/HANDOFF_DEVELOPMENT.md` §4.2 指向本目录。 +- `docs/android_app/DEVELOPMENT.md` §4.2 指向本目录。 diff --git a/analysis/history/findings_20260810.md b/analysis/history/findings_20260810.md index fcf4b7f..f260c04 100644 --- a/analysis/history/findings_20260810.md +++ b/analysis/history/findings_20260810.md @@ -182,7 +182,7 @@ All previously "unknown" protocol facts were recovered by disassembling the x86- analysis/revtools.py (ELF loader, ARM64 PLT resolver, C++-lite demangler, xref scan); objdump/readelf/nm/strings from C:/mingw64/bin. -## Handoff Summary +## 阶段总结 - The key protocol facts to carry into a new conversation are: - IR camera VID/PID: `0x833C/0x0001`. diff --git a/analysis/history/progress_20260810.md b/analysis/history/progress_20260810.md index c5f2325..94d4572 100644 --- a/analysis/history/progress_20260810.md +++ b/analysis/history/progress_20260810.md @@ -39,9 +39,9 @@ - Implemented Task 4 USB device model, endpoint-pair selection, and C ABI device listing/freeing. - Task 4 verification note: cmake remains unavailable in PATH, so substituted direct MinGW g++ compile/run verification for test_c_api and test_device_model; both passed with exit code 0. -## 2026-07-14 Handoff +## 2026-07-14 阶段总结 -- User asked to stop and then requested a compact context handoff for a new conversation. +- User asked to stop and then needed a compact context summary for a new conversation. - Updated `task_plan.md`, `findings.md`, and `progress.md` with a short resume-ready summary. - Current implementation state to remember: - design and plan are already approved @@ -54,7 +54,7 @@ - User explicitly resumed the task and added a Linux SDK under `IR_Camera_SDK-1.0.1/linux`. - Restored context from `task_plan.md`, `findings.md`, and `progress.md`. -- Attempted planning-with-files session catchup via `.claude` skill path; it failed because `C:\Users\ZXC\.claude\skills\planning-with-files\scripts\session-catchup.py` does not exist in this Codex install. +- Attempted planning-with-files session catchup via `.claude` skill path; it failed because `<本地技能目录>/planning-with-files/session-catchup.py` does not exist in this Codex install. - Verified the workspace is still not a git repository, so implementation continues in-place with markdown progress tracking. - Began Linux SDK inventory. Found versioned Linux packages for 1.0.0, 1.0.1, 1.2.1, and 1.2.2; 1.2.2 is extracted with Qt demo sources, headers, Linux shared libraries, and firmware. - Read Linux 1.2.2 `CHANGELOG`, `Coding Tips`, `ThermalSDK.h`, `CameraSDK.h`, `Def.h`, and Qt project file. @@ -173,7 +173,7 @@ ## 2026-08-10 Live Hardware Protocol Verification (WinUSB/libusb-win32) User connected the actual device (Magnity Thermal Camera, VID 0x833C PID 0x0001, -serial 160043865). Full protocol verified live against the official Windows demo +serial ). Full protocol verified live against the official Windows demo (EloThermal.exe, which shows a real thermal image). ### Driver / libusb matrix (important) diff --git a/analysis/history/reverse_20260813_full.md b/analysis/history/reverse_20260813_full.md index 7e2757e..e4331d0 100644 --- a/analysis/history/reverse_20260813_full.md +++ b/analysis/history/reverse_20260813_full.md @@ -176,7 +176,7 @@ LUT 濉厖鍏紡锛氬湪姝g‘ center 涓?834/1024 绮剧‘锛屽叾 - `keyfuncs_decomp_CoreSDKLib.dll.txt`锛堟牳蹇冨嚱鏁颁吉浠g爜锛? - `callers_decomp_CoreSDKLib.dll.txt`锛堣皟鐢ㄥ叧绯?+ 涓荤绾匡級 - `exports_decomp_CoreSDKLib.dll.txt`锛堝叏閮ㄥ鍑哄嚱鏁帮級 - `exports_decomp_ThermalSDK.dll.txt` - - `all_functions_decomp_libcoresdk_arm64.so_00100000.txt`锛圓RM64 21.6MB锛?- DDT 鏂囦欢锛歚build-artifacts/mag160c_official.ddt`銆乣analysis/ida/Core160043865.ddt` + - `all_functions_decomp_libcoresdk_arm64.so_00100000.txt`锛圓RM64 21.6MB锛?- DDT 鏂囦欢锛歚build-artifacts/mag160c_official.ddt`銆乣analysis/ida/mag160c_unit.ddt` - 瀹樻柟鎶撳抚锛歚analysis/pairs_verify_20260813/`銆乣analysis/pairs_final_20260813/` - demo3 v5锛歚csdk/tools/mag160c_demo3.c` - 閲囬泦宸ュ叿锛歚csdk/tools/tsdk_pair3.c`锛堝惈 DDT 澶嶅埗銆佽〃/鐩插厓/蹇棬/绐楀彛鎶撳彇锛? diff --git a/analysis/history/session_state.md b/analysis/history/session_state.md index a4a0cfe..41298e4 100644 --- a/analysis/history/session_state.md +++ b/analysis/history/session_state.md @@ -12,7 +12,7 @@ - [x] 工具链:Ghidra 12.1.2(headless)+ IDA Free 8.4 部署,5 个二进制全量导出 - [x] 官方管线完整反编译(DDT 加载 / 端点选择 / Q12 插值 / ref=4×type1 帧均值 / NUC / 盲元 / 窗口 / LUT1024 / 2x 升采样 / FFC 状态机) -- [x] DDT 文件解析(%TEMP%\Core160043865 → build-artifacts/mag160c_official.ddt) +- [x] DDT 文件解析(%TEMP%\Core → build-artifacts/mag160c_official.ddt) - [x] 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致 - [x] 鬼影根因文档:analysis/reverse_20260813_full.md §7 - [x] demo3 v5 官方复刻实现并实机运行 @@ -73,7 +73,7 @@ Stop-Process -Name mag160c_demo3 -Force -ErrorAction SilentlyContinue # analysis/reverse_tools/verify_full.py 全链路验证 # analysis/reverse_tools/parse_ddt.py DDT 文件解析 # analysis/reverse_tools/parse_pcap.py pcap 抓包解析 -# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_c_pipeline.exe C实现离线复算 +# %TEMP%\opencode\verify_c_pipeline.exe C实现离线复算 ``` ## 心跳约定 diff --git a/analysis/history/task_plan_20260714.md b/analysis/history/task_plan_20260714.md index ce9817a..2b9063e 100644 --- a/analysis/history/task_plan_20260714.md +++ b/analysis/history/task_plan_20260714.md @@ -31,14 +31,14 @@ Create an original, Linux-usable source implementation for the USB thermal camer | Error | Attempt | Resolution | |---|---|---| | Not a git repository | Ran git status | Track with markdown files instead of commits. | -| Old using-superpowers path missing | Tried .system path | Read correct skill path under C:/Users/ZXC/.codex/skills/using-superpowers. | +| Old using-superpowers path missing | Tried .system path | Read correct skill path under <本地技能目录>/using-superpowers. | | Get-PnpDevice access denied | Tried to enumerate attached USB devices from PowerShell | Need elevated device enumeration or user-provided lsusb/USB descriptor if live hardware testing is required. | | ARM64 disassembly unsupported by MinGW objdump | Tried objdump on Android libcoresdk.so | Need LLVM objdump/capstone/ghidra/r2 or USB trace to recover low-level vendor protocol. | | pip install capstone/pyelftools failed | Tried sandbox and escalated pip install into .tools/python-revlibs | Network/proxy unavailable; no new reverse-engineering package installed. | | planning catchup script missing | Tried planning-with-files `.claude` catchup path from Codex session | Logged error; continued because task planning files were read directly. | | PowerShell heredoc/Python quoting failed | Tried Bash heredoc and then malformed `python -c` for PDF extraction | Switched to PowerShell here-string piped into `python -`; PDF extraction succeeded. | -## Handoff Summary +## 阶段总结 - Reverse-engineering evidence is complete enough for a Linux-first source implementation skeleton. - User chose approach 1: C++ core library + stable C ABI + CLI sample + Python-callable wrapper. diff --git a/analysis/history/handoff_20260810.md b/analysis/history/worklog_20260810.md similarity index 99% rename from analysis/history/handoff_20260810.md rename to analysis/history/worklog_20260810.md index 7923524..0e9c08e 100644 --- a/analysis/history/handoff_20260810.md +++ b/analysis/history/worklog_20260810.md @@ -1,4 +1,4 @@ -# MAG160C 项目交接文档 (2026-08-10) +# MAG160C 项目工作记录文档 (2026-08-10) > **2026-08-10 晚更新(本会话)**:FFC 停帧问题已解决并多次实机验证; > 坏点/对比度/标定管线已按开源方案重做并合入 csdk。详见第 10 节。 @@ -15,7 +15,7 @@ Linux/Windows C SDK + Windows GUI Demo。已完成的逆向依据: ## 2. 硬件事实(实机确认) -- 设备名:Magnity Thermal Camera,VID 0x833C PID 0x0001,序列号 160043865 +- 设备名:Magnity Thermal Camera,VID 0x833C PID 0x0001,序列号 - 分辨率 160x120,帧率 ~15fps,每帧 38456 字节 - USB:config 值 1(仅一个配置),interface 0,端点:0x03 OUT、0x81/0x82/0x84 IN - 设备只有 config 1——Linux SDK 逆向中的 set_configuration(2) 在这台机器上失败, diff --git a/analysis/history/handoff_20260811.md b/analysis/history/worklog_20260811.md similarity index 98% rename from analysis/history/handoff_20260811.md rename to analysis/history/worklog_20260811.md index d54e358..ee2227d 100644 --- a/analysis/history/handoff_20260811.md +++ b/analysis/history/worklog_20260811.md @@ -1,4 +1,4 @@ -# MAG160C 逆向交接文档 v2(2026-08-11) +# MAG160C 逆向工作记录文档 v2(2026-08-11) > **本文件是当前最新、最完整的上下文快照。** 覆盖硬件/协议/官方SDK逆向/ > 显示管线演进/全部失败教训。下一轮请从第 1 节开始读,严格按第 7 节 @@ -14,7 +14,7 @@ ## 2. 硬件与协议(已验证,权威) ### 2.1 USB 拓扑 -- VID 0x833C PID 0x0001,序列号 160043865,config 1,interface 0 +- VID 0x833C PID 0x0001,序列号 ,config 1,interface 0 - 端点:0x03 OUT(命令)、0x82 IN(命令响应)、0x81 IN(帧流)、0x84 IN(大读取,未用) - 驱动:libusb-win32 v1.2.6.0;传输库:TI libusb-1.0.dll + dlltool 导入库 @@ -86,7 +86,7 @@ Start(); // 内部:NewChannel(0) -> EnumCameras -> LinkCamera(chan,pid) -> Star | 官方灰度图 | `build-artifacts/official_gray.bin` | 160x120,93% 像素=0,顶部14行坏点带 | | 官方调色板(错误读取) | `build-artifacts/official_palette_live.bin` | Jet 色系 BGR,疑似偏移错误,勿用 | | 官方调色板(帧反推 115色) | `analysis/temp/official_palette_full.npy` | 品红系,可信 | -| 官方探针温度 | 记录在 handoff | 背景 26.7~27.4°C | +| 官方探针温度 | 记录在工作记录 | 背景 26.7~27.4°C | | 官方 T2E 表(已转C头) | `csdk/src/mag160c_official_t2e.h` | 646 项 | | 官方调色板(已转C头,插值) | `csdk/src/mag160c_official_palette.h` | 256 项,品红系(可能需修正) | diff --git a/analysis/history/handoff_20260811_full.md b/analysis/history/worklog_20260811_full.md similarity index 98% rename from analysis/history/handoff_20260811_full.md rename to analysis/history/worklog_20260811_full.md index 8275509..1f3eb28 100644 --- a/analysis/history/handoff_20260811_full.md +++ b/analysis/history/worklog_20260811_full.md @@ -1,4 +1,4 @@ -# MAG160C 热像仪渲染项目交接 - 2026-08-11 +# MAG160C 热像仪渲染项目工作记录 - 2026-08-11 项目目录: `C:\Project\MAG160C` @@ -344,7 +344,7 @@ FFC: - 主程序: [mag160c_demo3.c](/abs/path/C:/Project/MAG160C/csdk/tools/mag160c_demo3.c) - 官方抓帧工具: [tsdk_pair2.c](/abs/path/C:/Project/MAG160C/csdk/tools/tsdk_pair2.c) -- 当前交接: [handoff_20260811_full.md](/abs/path/C:/Project/MAG160C/analysis/handoff_20260811_full.md) +- 当前记录: [worklog_20260811_full.md](/abs/path/C:/Project/MAG160C/analysis/worklog_20260811_full.md) - 历史进展: [progress_reverse.md](/abs/path/C:/Project/MAG160C/analysis/progress_reverse.md) - 官方抓帧预览表: [summary.tsv](/abs/path/C:/Project/MAG160C/analysis/pairs_move/preview/summary.tsv) diff --git a/analysis/history/handoff_20260812.md b/analysis/history/worklog_20260812.md similarity index 98% rename from analysis/history/handoff_20260812.md rename to analysis/history/worklog_20260812.md index 501c863..64bac6a 100644 --- a/analysis/history/handoff_20260812.md +++ b/analysis/history/worklog_20260812.md @@ -1,6 +1,6 @@ -# MAG160C 逆向交接文档 v3(2026-08-12) +# MAG160C 逆向工作记录文档 v3(2026-08-12) -> **本文件是最新、最完整上下文快照。** 上一版:handoff_20260811.md。 +> **本文件是最新、最完整上下文快照。** 上一版:worklog_20260811.md。 > 本轮(2026-08-11 晚)完成**官方"读取→显示"完整管线逆向,全部实机 > 像素级验证(100.0% 精确),并交付 demo3(官方管线版)**。 diff --git a/analysis/history/handoff_20260812_night.md b/analysis/history/worklog_20260812_night.md similarity index 97% rename from analysis/history/handoff_20260812_night.md rename to analysis/history/worklog_20260812_night.md index 4229d84..db05ceb 100644 --- a/analysis/history/handoff_20260812_night.md +++ b/analysis/history/worklog_20260812_night.md @@ -1,6 +1,6 @@ -# MAG160C 逆向交接文档 v4(2026-08-12 深夜) +# MAG160C 逆向工作记录文档 v4(2026-08-12 深夜) -> **最新快照。** 前版:handoff_20260812.md(白天)。 +> **最新快照。** 前版:worklog_20260812.md(白天)。 > 本轮完成:官方 NUC/参考帧机制完整逆向 + demo3 修复(颗粒感/FFC 变色)。 ## 1. 本轮成果 diff --git a/analysis/history/handoff_20260813.md b/analysis/history/worklog_20260813.md similarity index 99% rename from analysis/history/handoff_20260813.md rename to analysis/history/worklog_20260813.md index 35c9286..f076428 100644 --- a/analysis/history/handoff_20260813.md +++ b/analysis/history/worklog_20260813.md @@ -1,4 +1,4 @@ -# MAG160C 热像仪渲染管线交接文档 v5 +# MAG160C 热像仪渲染管线工作记录文档 v5 > 项目:MAG160C 热像仪(160x120, USB, VID 0x833C)自实现渲染管线 demo3 > 目标:复刻官方 CoreSDKLib.dll 渲染效果 diff --git a/analysis/history/交接_完整逆向工程说明_20260811.md b/analysis/history/worklog_完整逆向工程说明_20260811.md similarity index 97% rename from analysis/history/交接_完整逆向工程说明_20260811.md rename to analysis/history/worklog_完整逆向工程说明_20260811.md index f212656..87a7926 100644 --- a/analysis/history/交接_完整逆向工程说明_20260811.md +++ b/analysis/history/worklog_完整逆向工程说明_20260811.md @@ -1,4 +1,4 @@ -# MAG160C 热像仪逆向工程完整交接说明 +# MAG160C 热像仪逆向工程完整工作说明 ## 1. 文档目的 @@ -14,7 +14,7 @@ - 如何继续逆向低温残影,并避免重复走已经验证失败的路线。 - 让下一位 AI 从零开始接手时可以直接使用的中文提示词。 -文档日期:2026-08-11。工作目录:`C:\Project\MAG160C`。远端仓库:`https://git.zxcli.top/zxc/MAG160C.git`。 +文档日期:2026-08-11。工作目录:`C:\Project\MAG160C`。远端仓库:`<内部 Git 服务器>/MAG160C.git`。 ## 2. 一分钟结论 @@ -87,10 +87,10 @@ USB type=0 原始帧 | 路径 | 用途 | |---|---| | `README.md` | 仓库入口和最短说明。 | -| `交接_完整逆向工程说明_20260811.md` | 本完整交接文档。 | +| `worklog_完整逆向工程说明_20260811.md` | 本完整工作记录文档。 | | `findings.md` | 早期和中期的综合逆向发现,包含 Windows、Android、Linux SDK 证据。 | | `progress.md` | 按日期记录的长期工程进度、协议恢复和工具安装记录。 | -| `task_plan.md` | 早期 Linux SDK 实现计划和历史任务状态。后续热像渲染工作应以本交接文档和 `analysis/handoff_*.md` 为准。 | +| `task_plan.md` | 早期 Linux SDK 实现计划和历史任务状态。后续热像渲染工作应以本工作记录文档和 `analysis/worklog_*.md` 为准。 | | `frame_stats.txt` | 历史原始帧统计。 | | `pair_*.win`、`pair_*.win2`、`pair_*.nuctab` | 根目录中遗留的官方抓帧窗口、字段和短 NUC 表样本。完整抓帧在 `analysis/pairs_*`。 | | `.gitattributes` | Git LFS 大文件规则。 | @@ -131,12 +131,12 @@ USB type=0 原始帧 | `analysis/disasm/` | Windows CoreSDK、Linux libmagcore、Android ARM64 的反汇编、符号和函数切片。 | | `analysis/protocol_spec.md` | USB 协议、帧格式、命令、温度和 NUC 公式的正式规格。 | | `analysis/progress_reverse.md` | 官方渲染主链和反汇编阶段性结论。 | -| `analysis/handoff_20260810.md` | demo2 早期路线、MOG、平场和问题演化。 | -| `analysis/handoff_20260811.md` | 较短的 2026-08-11 交接。 | -| `analysis/handoff_20260811_full.md` | 当前残影问题最重要的交接文档之一。 | -| `analysis/handoff_20260812.md` | 官方活体抓帧、NUC 和显示数据分析。 | -| `analysis/handoff_20260812_night.md` | 平滑器、参考和 NUC 查表的夜间逆向结论。 | -| `analysis/handoff_20260813.md` | 黑洞、SBNUC、Hardie/Kalman 路线的历史总结。 | +| `analysis/worklog_20260810.md` | demo2 早期路线、MOG、平场和问题演化。 | +| `analysis/worklog_20260811.md` | 较短的 2026-08-11 记录。 | +| `analysis/worklog_20260811_full.md` | 当前残影问题最重要的工作记录文档之一。 | +| `analysis/worklog_20260812.md` | 官方活体抓帧、NUC 和显示数据分析。 | +| `analysis/worklog_20260812_night.md` | 平滑器、参考和 NUC 查表的夜间逆向结论。 | +| `analysis/worklog_20260813.md` | 黑洞、SBNUC、Hardie/Kalman 路线的历史总结。 | | `analysis/pairs_nuc2/` | 官方 NUC 同帧数据。 | | `analysis/pairs_move/` | 官方移动目标数据。注意旧 `.gain/.thr` 曾被覆盖。 | | `analysis/pairs_recheck_20260811/` | 使用修复后的 `tsdk_pair2_fixed.exe` 重新捕获的数据,包含未覆盖的真实 `.gain/.thr`。 | @@ -756,7 +756,7 @@ build-artifacts\csdk_cli_libusb.exe ir-info 本工程原先只有空的 `.git` 目录,不是有效 Git 仓库。本次移交应初始化真实 Git 仓库并推送到: ```text -https://git.zxcli.top/zxc/MAG160C.git +<内部 Git 服务器>/MAG160C.git ``` 仓库约 0.824 GB,包含大量 DLL、EXE、APK、PDF、PNG、BMP、抓帧和反汇编二进制。已准备 Git LFS 规则。提交前必须检查: @@ -770,7 +770,7 @@ https://git.zxcli.top/zxc/MAG160C.git ### 第一步:确认环境和版本 -1. 阅读本文、`analysis/handoff_20260813.md`、`analysis/handoff_20260811_full.md`。 +1. 阅读本文、`analysis/worklog_20260813.md`、`analysis/worklog_20260811_full.md`。 2. 检查 `git status` 和远端分支,确认没有并行改动。 3. 检查设备 PID、驱动、DLL、表文件。 4. 编译并启动当前 demo3,保存一轮不移动时的日志。 @@ -804,14 +804,14 @@ https://git.zxcli.top/zxc/MAG160C.git 主程序:C:\Project\MAG160C\csdk\tools\mag160c_demo3.c 输出程序:C:\Project\MAG160C\build-artifacts\mag160c_demo3.exe 官方 DLL:IR_Camera_SDK-1.0.1\windows\windows\app\CoreSDKLib.dll 和 ThermalSDK.dll -远端仓库:https://git.zxcli.top/zxc/MAG160C.git +远端仓库:<内部 Git 服务器>/MAG160C.git 严格执行以下步骤: 1. 先读: - - 交接_完整逆向工程说明_20260811.md - - analysis/handoff_20260813.md - - analysis/handoff_20260811_full.md + - worklog_完整逆向工程说明_20260811.md + - analysis/worklog_20260813.md + - analysis/worklog_20260811_full.md - analysis/protocol_spec.md - csdk/tools/mag160c_demo3.c - csdk/tools/tsdk_pair2.c @@ -878,7 +878,7 @@ https://git.zxcli.top/zxc/MAG160C.git 然后再开始修改或抓帧。 ``` -## 16. 交接结束条件 +## 16. 收尾条件 下一位接手者在以下条件都满足前,不应把项目标记为完成: diff --git a/analysis/ida/Core160043865.ddt b/analysis/ida/mag160c_unit.ddt similarity index 100% rename from analysis/ida/Core160043865.ddt rename to analysis/ida/mag160c_unit.ddt diff --git a/analysis/protocol_spec.md b/analysis/protocol_spec.md index 1795034..34770c0 100644 --- a/analysis/protocol_spec.md +++ b/analysis/protocol_spec.md @@ -286,7 +286,7 @@ buffers this+0x10 (u16 acc), this+0x18. ## 2026-08-10 Live Hardware Verification (supplement to sections 3-4) -Measured on a real unit (VID 0x833C PID 0x0001, serial 160043865) by +Measured on a real unit (VID 0x833C PID 0x0001, serial ) by intercepting the official Windows demo (libusb0.dll API shim) and by direct libusb-1.0 probing. These override the earlier Linux-SDK-derived assumptions: diff --git a/analysis/reverse_tools/parse_ddt.py b/analysis/reverse_tools/parse_ddt.py index 8450623..cdf7770 100644 --- a/analysis/reverse_tools/parse_ddt.py +++ b/analysis/reverse_tools/parse_ddt.py @@ -1,6 +1,6 @@ import struct, sys, os -path = r"C:\Project\MAG160C\analysis\ida\Core160043865.ddt" +path = r"C:\Project\MAG160C\analysis\ida\mag160c_unit.ddt" b = open(path, "rb").read() print(f"size: {len(b)}") diff --git a/analysis/reverse_tools/verify_nuc.py b/analysis/reverse_tools/verify_nuc.py index 20bffc7..b2e543e 100644 --- a/analysis/reverse_tools/verify_nuc.py +++ b/analysis/reverse_tools/verify_nuc.py @@ -21,7 +21,7 @@ gain = load16(r"C:\Project\MAG160C\build-artifacts\mag160c_official_nuc_gain.bin thr = loadi16(r"C:\Project\MAG160C\build-artifacts\mag160c_official_nuc_thr.bin", npix*(nsegs-1)) # blind records from DDT (all endpoints identical; use EP2) -ddt = open(r"C:\Project\MAG160C\analysis\ida\Core160043865.ddt", "rb").read() +ddt = open(r"C:\Project\MAG160C\analysis\ida\mag160c_unit.ddt", "rb").read() thr_ep0 = 0x80 block = (nsegs-1)*npix*2 + 1024 + nsegs*npix*4 blind_off = thr_ep0 + 6*block diff --git a/analysis/sdk_re/android_app/palette_extraction_findings.md b/analysis/sdk_re/android_app/palette_extraction_findings.md index e7d6bd4..a71272a 100644 --- a/analysis/sdk_re/android_app/palette_extraction_findings.md +++ b/analysis/sdk_re/android_app/palette_extraction_findings.md @@ -98,17 +98,17 @@ java analysis/tools/PalScan.java \ csdk/src/mag160c_official_palette256.h # 生成物可复现:重新生成后与仓库文件 diff 应为空 -mkdir -p /c/Users/zxc/AppData/Local/Temp/regen_build && \ -cd /c/Users/zxc/AppData/Local/Temp/regen_build && \ +mkdir -p %TEMP%/regen_build && \ +cd %TEMP%/regen_build && \ cp "C:\Project\MAG160C\analysis\tools\PalIdentify.java" . && \ cp "C:\Project\MAG160C\analysis\tools\PalExport2.java" . && \ "C:\Tools\jdk-21\bin\javac" -d out PalIdentify.java PalExport2.java && \ "C:\Tools\jdk-21\bin\java" -cp out PalExport2 \ "C:\Project\MAG160C\android\app\src\main\kotlin\com\mag160c\thermal\core\OfficialTables.kt" \ - "C:\Users\zxc\AppData\Local\Temp\cxres\res\mipmap-hdpi-v4" \ - "C:\Users\zxc\AppData\Local\Temp\regen_core" \ - "C:\Users\zxc\AppData\Local\Temp\regen_out" -diff "C:\Users\zxc\AppData\Local\Temp\regen_core\VendorPalettes.kt" \ + "%TEMP%\cxres\res\mipmap-hdpi-v4" \ + "%TEMP%\regen_core" \ + "%TEMP%\regen_out" +diff "%TEMP%\regen_core\VendorPalettes.kt" \ "C:\Project\MAG160C\android\app\src\main\kotlin\com\mag160c\thermal\core\VendorPalettes.kt" # 实测:diff 为空;铁虹锚点 256/256 ``` diff --git a/android/app/src/test/kotlin/com/mag160c/thermal/core/OfficialTempTest.kt b/android/app/src/test/kotlin/com/mag160c/thermal/core/OfficialTempTest.kt index 3d78ee7..135c08e 100644 --- a/android/app/src/test/kotlin/com/mag160c/thermal/core/OfficialTempTest.kt +++ b/android/app/src/test/kotlin/com/mag160c/thermal/core/OfficialTempTest.kt @@ -91,7 +91,7 @@ class OfficialTempTest { @Test fun ddtTailRecordMatchesCapturedDeviceRecord() { - // The bundled DDT is the same unit (SN 160043865) the fixture was + // The bundled DDT comes from the same calibration unit the fixture was // captured from, so its tail record must reproduce the captured record. val rec = OfficialTemp.parseDdtTail(res("mag160c_official.ddt")) assertNotNull("DDT tail record must parse", rec) @@ -121,7 +121,7 @@ class OfficialTempTest { @Test fun parsesBasePara2AtParameters() { // Ground truth: the 60-byte BasePara2 payload captured from the real - // device (SN 160043865). Offsets follow the official app's own wire + // device (the calibration unit). Offsets follow the official app's own wire // parse (UsbCommunication.parseCmd, D2P_SendParameter2) minus the // leading magic word, which our reader consumes separately. val captured = "0400000000000000000000000000a306050000000400000008070000fa000000" + diff --git a/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteContractTest.kt b/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteContractTest.kt index ee255fd..2983ea3 100644 --- a/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteContractTest.kt +++ b/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteContractTest.kt @@ -134,14 +134,14 @@ class RemoteContractTest { @Test fun beaconRoundTrip() { - val line = RemoteContract.hostBeacon("Pixel 8 \"test\"", 160043865L) + val line = RemoteContract.hostBeacon("Pixel 8 \"test\"", 123456789L) val info = RemoteContract.parseBeacon(line, "192.168.1.23") assertNotNull(info) info!! assertEquals("Pixel 8 \"test\"", info.name) assertEquals("192.168.1.23", info.address) assertEquals(47511, info.tcpPort) - assertEquals(160043865L, info.serial) + assertEquals(123456789L, info.serial) } @Test @@ -175,13 +175,13 @@ class RemoteContractTest { @Test fun welcomeParsing() { - val w = RemoteContract.parseWelcome(RemoteContract.welcomeLine(160, 120, 15, 160043865L)) + val w = RemoteContract.parseWelcome(RemoteContract.welcomeLine(160, 120, 15, 123456789L)) assertNotNull(w) w!! assertEquals(160, w.w) assertEquals(120, w.h) assertEquals(15, w.fps) - assertEquals(160043865L, w.serial) + assertEquals(123456789L, w.serial) assertNull(RemoteContract.parseWelcome(RemoteContract.okLine())) } diff --git a/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteLoopbackTest.kt b/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteLoopbackTest.kt index d5a2823..9e8accb 100644 --- a/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteLoopbackTest.kt +++ b/android/app/src/test/kotlin/com/mag160c/thermal/net/RemoteLoopbackTest.kt @@ -30,7 +30,7 @@ class RemoteLoopbackTest { @Test fun hostStreamsFramesToClientOverLoopback() = runBlocking { val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) - val host = RemoteHost("jvm-test", 160043865L) + val host = RemoteHost("jvm-test", 123456789L) try { host.start() // give the server socket a moment to bind @@ -123,13 +123,13 @@ class RemoteLoopbackTest { @Test fun beaconFormatIsWhatTheClientParses() { - val line = RemoteContract.hostBeacon("Redmi K70", 160043865L) + val line = RemoteContract.hostBeacon("Redmi K70", 123456789L) val info = RemoteContract.parseBeacon(line, "192.168.31.7") assertNotNull(info) assertEquals("Redmi K70", info!!.name) assertEquals("192.168.31.7", info.address) assertEquals(RemoteContract.CONTROL_PORT, info.tcpPort) - assertEquals(160043865L, info.serial) + assertEquals(123456789L, info.serial) } /** diff --git a/csdk/README.md b/csdk/README.md index 8da4112..2f4e1fe 100644 --- a/csdk/README.md +++ b/csdk/README.md @@ -282,7 +282,7 @@ build-artifacts\csdk_test_display.exe | `../analysis/protocol_spec.md` | USB 协议/帧/命令/温度完整规格 | | `../analysis/reverse_20260813_full.md` | 官方管线 Ghidra 全量逆向 + 鬼影根因 | | `../analysis/session_state.md` | 当前会话状态/恢复点(心跳)| -| `../交接_完整逆向工程说明_20260811.md` | 项目总交接(目录/环境/历史)| +| `../analysis/history/worklog_完整逆向工程说明_20260811.md` | 项目总览(目录/环境/历史)| | `WINDOWS_TESTING.md` | Windows 抓包与硬件测试指南 | | `legacy/` | 历史工具源码归档(早期探索,功能已被现工具取代)| diff --git a/csdk/include/mag160c/mag160c_render.h b/csdk/include/mag160c/mag160c_render.h index 6d57d4f..9ab8c83 100644 --- a/csdk/include/mag160c/mag160c_render.h +++ b/csdk/include/mag160c/mag160c_render.h @@ -56,7 +56,7 @@ typedef struct mag160c_render_cfg_t { int android_lut; /* BasePara2.fpaTempFix: the official app interpolates the per-pixel calibration tables with (frame-tail FPA + this). The vendor's own temperature chain keeps - the raw tail value. Device 160043865 reports 1699. */ + the raw tail value. Device reports 1699. */ int fpa_temp_fix; /* Brightness offset for the Android LUT base; the official app passes 0. */ int lut_brightness; diff --git a/csdk/tools/legacy/mag160c_demo.c b/csdk/tools/legacy/mag160c_demo.c index 9ed80a4..a8a60d5 100644 --- a/csdk/tools/legacy/mag160c_demo.c +++ b/csdk/tools/legacy/mag160c_demo.c @@ -340,7 +340,7 @@ static int init_camera(void) { int WINAPI WinMain(HINSTANCE inst, HINSTANCE hprev, LPSTR cmd, int show) { (void)hprev; (void)cmd; (void)show; - g_log = fopen("C:/Users/ZXC/AppData/Local/Temp/opencode/demo_log.txt", "w"); + g_log = fopen("%TEMP%/opencode/demo_log.txt", "w"); if (g_log) { fprintf(g_log, "demo start\n"); fflush(g_log); } libusb_init(&g_usb); @@ -468,7 +468,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE hprev, LPSTR cmd, int show) { } render(g_frame); if ((g_frame_count % 200) == 0) { - FILE *tf = fopen("C:/Users/ZXC/AppData/Local/Temp/opencode/render_test.bmp", "wb"); + FILE *tf = fopen("%TEMP%/opencode/render_test.bmp", "wb"); if (tf) { fwrite(g_bmp, 1, sizeof(g_bmp), tf); fclose(tf); } } DWORD now = GetTickCount(); diff --git a/csdk/tools/legacy/mag160c_demo_usb0.c b/csdk/tools/legacy/mag160c_demo_usb0.c index da4cc82..b5172af 100644 --- a/csdk/tools/legacy/mag160c_demo_usb0.c +++ b/csdk/tools/legacy/mag160c_demo_usb0.c @@ -319,7 +319,7 @@ static int init_camera(void) { int WINAPI WinMain(HINSTANCE inst, HINSTANCE hprev, LPSTR cmd, int show) { (void)hprev; (void)cmd; (void)show; - g_log = fopen("C:/Users/ZXC/AppData/Local/Temp/opencode/demo_usb0_log.txt", "w"); + g_log = fopen("%TEMP%/opencode/demo_usb0_log.txt", "w"); if (g_log) { fprintf(g_log, "demo start\n"); fflush(g_log); } HMODULE l0 = LoadLibraryA("libusb0.dll"); diff --git a/csdk/tools/mag160c_demo3.c b/csdk/tools/mag160c_demo3.c index 85a0289..7370e60 100644 --- a/csdk/tools/mag160c_demo3.c +++ b/csdk/tools/mag160c_demo3.c @@ -617,7 +617,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmd, int show) { per-pixel table interpolation (frame-tail FPA + BasePara2.fpaTempFix). */ cfg.cdf_pivot_75 = 1; /* kept for the PC path */ cfg.android_lut = 1; - cfg.fpa_temp_fix = 1699; /* BasePara2.fpaTempFix of device 160043865 */ + cfg.fpa_temp_fix = 1699; /* BasePara2.fpaTempFix of device */ /* Keep the interpolating 2x: the nearest variant halves the effective resolution (2-sensor-pixel granules / a coarse staircase on hot-cold edges), which was visible on device. A display path that consumes gray160 directly diff --git a/csdk/tools/mag160c_linux_demo.c b/csdk/tools/mag160c_linux_demo.c index 463f170..079ccf3 100644 --- a/csdk/tools/mag160c_linux_demo.c +++ b/csdk/tools/mag160c_linux_demo.c @@ -133,7 +133,7 @@ int main(int argc, char **argv) { per-pixel table interpolation (frame-tail FPA + BasePara2.fpaTempFix). */ cfg.cdf_pivot_75 = 1; /* kept for the PC path */ cfg.android_lut = 1; - cfg.fpa_temp_fix = 1699; /* BasePara2.fpaTempFix of device 160043865 */ + cfg.fpa_temp_fix = 1699; /* BasePara2.fpaTempFix of device */ /* Keep the interpolating 2x: the nearest variant halves the effective resolution (2-sensor-pixel granules / a coarse staircase on hot-cold edges), which was visible on device. A display path that consumes gray160 directly diff --git a/docs/android_app/HANDOFF_DEVELOPMENT.md b/docs/android_app/DEVELOPMENT.md similarity index 82% rename from docs/android_app/HANDOFF_DEVELOPMENT.md rename to docs/android_app/DEVELOPMENT.md index 8595498..0b60947 100644 --- a/docs/android_app/HANDOFF_DEVELOPMENT.md +++ b/docs/android_app/DEVELOPMENT.md @@ -1,16 +1,7 @@ -# MAG160C 统一安卓APP — 完整开发交接文档(换模型用) +# MAG160C 安卓统一 App — 开发指南 -> 生成时间:2026-09-07。给接手模型读取本文件即可恢复全部上下文。 -> 结合 `docs/android_app/session_state.md`(心跳)与 `docs/android_app/reverse_apk_features.md`(逆向总表)。 - ---- - -## 0. 给新模型的读取提示词 - -> 你是本项目的续任开发者。请先完整阅读 `C:\Project\MAG160C\docs\android_app\HANDOFF_DEVELOPMENT.md` -> 和 `C:\Project\MAG160C\docs\android_app\session_state.md`、`C:\Project\MAG160C\docs\android_app\reverse_apk_features.md`、 -> `C:\Project\MAG160C\analysis\protocol_spec.md`,再继续开发。项目根目录 `C:\Project\MAG160C` 是 git 仓库, -> 源码在 `android\` 子目录(Gradle 工程,package `com.mag160c.thermal`)。当前会话状态与待办见 session_state.md。 +> 面向后续开发与维护。配套文档:`session_state.md`(开发进度与验证记录)、 +> `reverse_apk_features.md`(官方 4 App 逆向功能总表)。 --- @@ -28,15 +19,14 @@ ## 2. 技术栈与工具链(已部署) - **纯 Kotlin + Jetpack Compose (Material 3)**,无 NDK、无 .so、无 native。 -- **工具链(2026-09-09 本机重装;交接文档旧机器路径 C:\Tools\gradle-8.14.3、 - Zulu、C:\Users\ZXC\AppData\Local\Android\Sdk 均已失效)**: +- **工具链**: - JDK Temurin 21:`C:\Tools\jdk-21` - Android SDK:`C:\Tools\android-sdk`(cmdline-tools\latest、platforms/android-36、 build-tools 36.0.0、platform-tools/adb;许可已接受;无模拟器/AVD/system-images) - Gradle:用工程 wrapper `android\gradlew.bat`(8.14.3 自动下载) - `android\local.properties` 已写 `sdk.dir`(已 gitignore) - - 构建需 `JAVA_HOME=C:\Tools\jdk-21`;国内下载慢可给 JVM 挂本机代理 - (Clash 7890:`GRADLE_OPTS="-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=7890 ..."`) + - 构建需 `JAVA_HOME=C:\Tools\jdk-21`;依赖下载慢可为本机 JVM 配置代理 + (如 `GRADLE_OPTS="-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=7890 ..."`) - 工程版本目录 `gradle\libs.versions.toml` (AGP 8.11.1 / Kotlin 2.2.0 / Compose BOM 2025.06.01 / lifecycle 2.9.1 / junit 4.13.2)。 - **磁盘轻量约定**:不装 NDK/CMake/zig(曾占用 2.4GB+,已卸载);全 Kotlin。 @@ -208,10 +198,9 @@ git -C C:\Project\MAG160C commit -m "android: ..." ## 6. 严重教训(反复踩坑,务必遵守) -1. **编码**:所有源码必须 UTF-8。本机默认编码是 GBK! +1. **编码**:所有源码必须 UTF-8。本机默认编码可能是 GBK! - **python 读写文件必须显式 `encoding='utf-8'`**(`open(p,'w')` 裸写会变 GBK→编译出的中文全乱码)。 - - 检测/修复脚本:`C:\Users\ZXC\AppData\Local\Temp\opencode\fix_encoding.py`、 - `check_mojibake.py`。改完必须跑一遍确认全 OK,再构建。 + - 改完必须跑一遍编码检查确认全 OK,再构建。 - gradle.properties 已有 `-Dfile.encoding=UTF-8`(gradle + kotlin daemon)。 2. **图标**:手写 pathData 的弧线易坏,一律用双弧圆 `M x,y a r,r 0 1,0 2r,0 a r,r 0 1,0 -2r,0z` + 直线/矩形。 3. **SurfaceView 与旋转**:不要在横竖屏间切换不同布局分支(SurfaceView 会被销毁且 surface 不重建)。 @@ -280,41 +269,16 @@ Android16 沉浸(状态栏隐藏+竖屏锁定+挖孔安全区)、乱码多 - 预览截图:`analysis/preview/preview_*.png` - APK 产物:`build-artifacts/mag160c-app-debug.apk` -## 9. 下一轮提示词(交付新模型直接用) +## 9. 后续工作方向 -> 你是本项目的续任开发者。请先完整阅读 `C:\Project\MAG160C\docs\android_app\HANDOFF_DEVELOPMENT.md` -> 和 `C:\Project\MAG160C\docs\android_app\session_state.md`、`docs\android_app\reverse_apk_features.md`、 -> `C:\Project\MAG160C\analysis\protocol_spec.md`,再继续开发。 -> 项目根 `C:\Project\MAG160C` 是 git 仓库,源码在 `android\`(Gradle 工程,package -> `com.mag160c.thermal`)。Android 16 已适配,目标是一个 MAG160C 热像仪(160×120, 15fps, -> USB VID 0x833C PID 1)统一 APP。 -> -> 当前已完成到第 10 轮反馈修复:核心渲染管线 Kotlin 移植(逐字节验证)、USB 层、 -> 相机式实时布局(顶栏4控制项+底部快门区+底导航)、图标文字持机朝向补偿旋转、 -> 拍照MDT存MediaStore、MP4录像、媒体库、离线分析、PDF报告、任务解析、设置页、 -> Android16沉浸(竖屏锁定+挖孔适配)。 -> 第 10 轮(2026-09-09):按用户要求撤下演示模式合成热像图(无设备只显示 -> "未检测到热像仪"占位),接真机+热像仪实测显示。 -> -> 硬性约定(勿回退):① Activity 竖屏锁定 `portrait`,构图钉死手机竖屏框架, -> 屏显方向必须始终对应镜头方向;图标/文字用 `ui/DeviceOrientation`(加速度计, -> 真机约定 y=+9.81=0°)补偿旋转。② 源码全 UTF-8;python 读写必须显式 -> `encoding='utf-8'`(本机默认 GBK,裸写会乱码)。③ 图标用双弧圆+直线/矩形。 -> -> 下一步建议按 session_state.md「待办」推进: -> 1. 真机 USB 实测——温度绝对值标定(对 DDT 核对 counts→毫度); -> 2. 网络互连远程预览——UDP 广播自动发现 + 手动内网 IP,主机手机插热像仪、 -> 局域网另一台手机远程实时预览(自定义轻量协议:控制通道 JSON + 图像流, -> 不走厂商 33596/33597); -> 3. 离线 MDT 温度解码(ConvertResponse2Temperature + 标定参数); -> 4. 厂商 12 调色板精确提取;5. 可见光 PIP 融合、云模块(Retrofit opt-in 预留)。 -> -> 构建/提交: -> ```powershell -> cd C:\Project\MAG160C\android; $env:JAVA_HOME="C:\Tools\jdk-21" -> .\gradlew.bat :app:assembleDebug test --no-daemon -> git -C C:\Project\MAG160C add -A; git -C C:\Project\MAG160C commit -m "android: ..." -> ``` -> 环境(2026-09-09 本机重装):JDK Temurin 21 `C:\Tools\jdk-21`、SDK `C:\Tools\android-sdk` -> (无模拟器/AVD)、Gradle 用工程 wrapper。注意:git 工作树里有大量与本任务无关的脏文件 -> (`.tools/`、`IR_Camera_SDK/`、`csdk/`、`analysis/` 等),**不要提交它们**,只提交你的改动。 \ No newline at end of file +1. 真机 USB 实测:温度绝对值标定(对 DDT 核对 counts→毫度); +2. 网络互连远程预览的双机实测(清单第 16-24 步,见 + `docs/android_app/real_device_checklist.md`); +3. 离线 MDT 温度解码(ConvertResponse2Temperature + 标定参数); +4. 云服务真实接口对接(当前仅 Retrofit 占位,默认关闭,需账号与接口文档); +5. 红热调色板(索引 11)精确表:需真机抓帧反推。 + +--- + +> 进度与验证记录见 `session_state.md`;官方渲染链逆向定案见 +> `rendering_diff_phone_20261006.md`(39 轮,真机 A/B 逐环排除法)。 \ No newline at end of file diff --git a/docs/android_app/execution_plan.md b/docs/android_app/execution_plan.md index 47c2ffd..988844a 100644 --- a/docs/android_app/execution_plan.md +++ b/docs/android_app/execution_plan.md @@ -42,7 +42,7 @@ 已工作文件。 8. 参考文档(执行某阶段前必读对应部分): - `analysis/magcx_official_flow.md`(协议权威) - - `docs/android_app/HANDOFF_DEVELOPMENT.md`(App 架构与约定) + - `docs/android_app/DEVELOPMENT.md`(App 架构与约定) - `docs/android_app/reverse_apk_features.md` §4(MDT 容器) --- @@ -318,7 +318,7 @@ class PipCameraEngine(val context, val textureView) : ### F1. 协议(`net/RemoteContract.kt`,纯 Kotlin,可单测) - **发现**:UDP 47510。主机每 1000ms 向 `255.255.255.255:47510` 发一行 UTF-8 JSON: - `{"app":"mag160c-remote","role":"host","name":"","tcp":47511,"serial":160043865}` + `{"app":"mag160c-remote","role":"host","name":"","tcp":47511,"serial":}` - **控制**:TCP 47511,换行分隔 JSON(UTF-8,单行 ≤4KB): - 客户端→主机:`{"cmd":"hello","name":"..."}` → 回 `{"type":"welcome","w":160,"h":120,"fps":15,"serial":...}` @@ -403,7 +403,7 @@ class PipCameraEngine(val context, val textureView) : ## Phase Z —— 收尾 1. `docs/android_app/session_state.md`:待办全部勾选/更新,追加本轮总结段。 -2. `docs/android_app/HANDOFF_DEVELOPMENT.md`:§3 结构表加 `net/`、`cloud/`、 +2. `docs/android_app/DEVELOPMENT.md`:§3 结构表加 `net/`、`cloud/`、 `ui/remote/`;§7 待办刷新。 3. 全量 `assembleDebug + test`;提交 APK;`git push origin main`。 4. 汇报:各阶段 commit 列表 + 用户手测清单位置。 diff --git a/docs/android_app/real_device_checklist.md b/docs/android_app/real_device_checklist.md index 886c431..d8d1405 100644 --- a/docs/android_app/real_device_checklist.md +++ b/docs/android_app/real_device_checklist.md @@ -13,7 +13,7 @@ | # | 操作 | 预期 DebugLog 行(原文) | 通过标准 | |---|------|--------------------------|----------| | 1 | 插入热像仪,系统弹出 USB 权限对话框,点"允许" | `[usb] requestPermission: no device`(无设备时)/ `[usb] requesting permission (dialog)` → `[usb] permission result: true` | 授予权限后自动开始连接 | -| 2 | 等待连接(首次约 1~3 s,首次装机需下载标定文件时更久) | `[vm] connect()` → `[vm] permission ok, ddt bytes, starting session` → `[session] state -> LINKING msg=null` → `[cmd] GetParameter1 write=4/4` → `[cmd] GetParameter1 resp=0x5BB5B55B len=60 head=...` → `[cmd] BasePara1: serial=160043865 devType=3 160x120 @15fps` | 五条全出现;serial/devType 与实际相机一致(devType=3 即 core160) | +| 2 | 等待连接(首次约 1~3 s,首次装机需下载标定文件时更久) | `[vm] connect()` → `[vm] permission ok, ddt bytes, starting session` → `[session] state -> LINKING msg=null` → `[cmd] GetParameter1 write=4/4` → `[cmd] GetParameter1 resp=0x5BB5B55B len=60 head=...` → `[cmd] BasePara1: serial= devType=3 160x120 @15fps` | 五条全出现;serial/devType 与实际相机一致(devType=3 即 core160) | | 3 | 同上(参数/标定握手) | `[cmd] GetParameter2 resp=0x5BB5B55C len=...` → `[cmd] GetCaliInfo resp=0x5BB5B55E len=...` → `[session] cali info: size= date=` → `[session] device lifetime=ms` | GetParameter2/GetCaliInfo 有响应;lifetime 非 -1(0 或正数均可,首次上电后很小正常) | | 4 | 首次安装运行(无 cali 缓存) | `[session] first run on this host: downloading cali file B (EP 0x84)` → `[session] cali download

%`(若干行)→ `[session] cali downloaded+cached: .. ( B)`;第二次运行改为 `[session] cali cache hit: ` + `[session] cali cache vs bundled DDT: identical`(或 `differ`,两者都不算失败) | 缓存命中或下载成功二者之一 | | 5 | 等待 DDT 加载 + 出流 | `[session] ddt bytes ` → `[session] state -> STREAMING msg=null` → `[cmd] StartTransferImg write=4/4` → `[cmd] StartTransferImg ack=0x...` → `[stream] reader loop start: sync bulkTransfer (800 ms) + halt recovery` → `[stream] first reads [0] n= head=...` → `[vm] first rendered frame -> UI` | 出现 `first rendered frame -> UI` 即画面已出(实时页显示热像,不再黑屏) | diff --git a/docs/android_app/rendering_diff_phone_20261006.md b/docs/android_app/rendering_diff_phone_20261006.md index 6f8cfdb..f33379b 100644 --- a/docs/android_app/rendering_diff_phone_20261006.md +++ b/docs/android_app/rendering_diff_phone_20261006.md @@ -422,7 +422,7 @@ PC 端 NUC 是逐字节相同的,所以嫌疑在"实时状态机采到的参 用户:"把'计数'噪声偏大修一下"。做法:在管线里临时插桩(DebugLog 打开、逐级打印 raw/参考/差值/NUC 的 mean/std/HF),真机跑一遍,把噪声预算算清楚,再看 A/B 差在哪里。 -### 12.1 真机实测的噪声预算(设备 160043865,同一静止场景) +### 12.1 真机实测的噪声预算(设备 ,同一静止场景) ``` [diag] ffcRefFrame mean=15084 std=3625 hfdx=1172 ×4 帧(快门帧) @@ -600,7 +600,7 @@ JPEG 只能解释一部分:把我们那张(960×720 q95,202 KB)按 640× → 修好后我们**比官方更平滑**(官方因最近邻 4× 反而有 4 像素大块,见 x8 放大对照图)。 单测 119 全绿(`PhotoNucMappingTest` 更新为 160×120→960×720 的新策略)。 -## 16. 「官方背景条纹更不明显」——逆向排除全部候选后,定位为**我们独有的逐行固定偏移**(2026-10-06 深夜,交接轮) +## 16. 「官方背景条纹更不明显」——逆向排除全部候选后,定位为**我们独有的逐行固定偏移**(2026-10-06 深夜,记录轮) 用户发了同场景双截图(官方 vs 我们,均为竖屏、12 px/传感器像素、同一调色板铁虹)并要求 "看逆向出来的代码是不是还漏了什么"。本轮做了两件事:把官方每帧链路逐条再对一遍(IDA 批量 @@ -656,7 +656,7 @@ JPEG 只能解释一部分:把我们那张(960×720 q95,202 KB)按 640× 分块统计(背景块):scene 比 0.95、1-8px 频带比 1.58、时间比 2.0 —— 我们多出来的 能量集中在 1~8px 频带且**逐帧可复现(固定)**。 -### 16.3 结论与交接(下一步) +### 16.3 结论与下一步 - **缺陷**:我们的渲染里有一个官方没有的**逐传感器行固定偏移**(残余行 FPN)。 显示旋转 90° 后,传感器行=屏幕水平线 → 就是用户看到的"背景条纹"。 @@ -850,7 +850,7 @@ Kotlin 一致),与 App 自己 `copyNuc` 的 dump 对拍:corr=0.9996,仅 ### 17.7 第三十九轮:GPU 画布假设被真机 A/B 推翻,真因 = 7×7 细节增强(2026-10-07) -按 §16.3/17.6 交接清单执行(首验 GPU 硬件画布 → 正式修复 → A/B 验收)。全部测量用 +按 §16.3/17.6 待办清单执行(首验 GPU 硬件画布 → 正式修复 → A/B 验收)。全部测量用 39 轮新脚本 `final39.py/final39b/c/d/e.py`(口径:12px 网格 + UI mask + 弧长反演 + 鲁棒 std;暗区 = sensor 行 0..40 × 列 90..160;官方横屏直接同区;38 轮存档截图全部 可复现,官方 FULL 0.10/0.28、暗区 0.15 与 17.6 表逐位一致,DARK 对照里照片 JPEG diff --git a/docs/android_app/reverse_apk_features.md b/docs/android_app/reverse_apk_features.md index bca5d1b..47d4882 100644 --- a/docs/android_app/reverse_apk_features.md +++ b/docs/android_app/reverse_apk_features.md @@ -99,7 +99,7 @@ ## 7. 反编译复现命令 ```powershell -$w='C:\Users\ZXC\AppData\Local\Temp\opencode\apkwork' +$w='%TEMP%\opencode\apkwork' & 'C:\Tools\jadx\bin\jadx.bat' -d "$w\jadx_pro" --show-bad-code -j 8 "$w\orig\pro.apk" # Ghidra: & 'C:\Tools\ghidra_12.1.2_PUBLIC\support\analyzeHeadless.bat' C:\Tools\ghidra_proj Mag160C -import -scriptPath C:\Tools\ghidra_scripts_user -postScript DumpJni.java ``` diff --git a/docs/android_app/session_state.md b/docs/android_app/session_state.md index 7bed9d0..c8fedf6 100644 --- a/docs/android_app/session_state.md +++ b/docs/android_app/session_state.md @@ -26,7 +26,7 @@ - 协议/渲染/温度算法全部已逆向:analysis/protocol_spec.md + csdk/(逐像素验证过的官方管线) - csdk 的 mag160c_render 无平台依赖:USB 帧 → 320×240 RGB24 + 探针测温(毫度) - DDT 标定文件:可从设备经 0x6BB6B66D/E 下载(官方 prepareProcessImage 同款),仓库有 - build-artifacts/mag160c_official.ddt(1.8MB,SN 160043865) + build-artifacts/mag160c_official.ddt(1.8MB,the calibration unit) - MDT 文件格式:reverse_apk_features.md §4(152B Tail + 5 段布局 + ROI 256B 记录) - 温度:毫度 int;MDT 解码走 ConvertResponse2Temperature + T2E(Revise) + CorrectTemperature @@ -119,7 +119,7 @@ - [x] **顶栏适配挖孔屏**:`WindowInsets.safeDrawing.only(Top)` 顶部安全区 padding - [x] 去掉 display-rotation 依赖(uiRotation/drawRotationDeg 已删,tapImage/probeToScreen 用固定 90° 映射) -- [x] 完整交接文档:docs/android_app/HANDOFF_DEVELOPMENT.md(含给新模型的读取提示词) +- [x] 开发指南:docs/android_app/DEVELOPMENT.md ## 用户反馈修复 第五轮(2026-09-07,布局约定最终定稿:构图钉死竖屏框架) @@ -200,8 +200,8 @@ 勿把演示模式加回来。 - [x] 工具链在本机重装并重建 APK(2026-09-09):JDK Temurin 21 `C:\Tools\jdk-21`、 SDK `C:\Tools\android-sdk`(platform 36 / build-tools 36.0.0 / platform-tools,许可已接受)、 - Gradle 用工程 wrapper(8.14.3);交接文档旧路径 C:\Tools\gradle-8.14.3 / Zulu / - AppData SDK 属另一台开发机已失效(HANDOFF §2/§5 已改为本机路径)。 + Gradle 用工程 wrapper(8.14.3);旧文档路径 C:\Tools\gradle-8.14.3 / Zulu / + AppData SDK 属另一台开发机已失效(DEVELOPMENT §2/§5 已改为本机路径)。 assembleDebug+test 全过;dex 抽查中文 UTF-8 正常、无 startDemo 残留; build-artifacts/mag160c-app-debug.apk 已更新(11.8MB),可直接装真机。 - 待办不变(真机 USB 实测温度标定、网络互连远程预览、离线MDT温度解码、 @@ -252,7 +252,7 @@ ## 用户反馈修复 第十三轮(2026-09-10,真机日志分析:端点静默 + 重枚举) - [x] **用户回传 debug 日志**(vivo V2509A, Android16):相机识别/DDT/66b 响应全正常 - (SN 160043865),但 66c/66f 响应超时、FFC/START 第一轮写失败(write=-1, + (the calibration unit),但 66c/66f 响应超时、FFC/START 第一轮写失败(write=-1, 端点疑似 halt)、流端点 19 秒 0 字节;00:51:10 相机重新枚举(权限再次弹出) ——相机在会话中途疑似断电/复位;且新旧两个 Activity 的会话同时在抢同一设备 (claimInterface 互相夺走)。 @@ -353,7 +353,7 @@ ## 用户反馈修复 第十七轮(2026-09-10,根因确认:命令字节序反转) - [x] **第 16 轮日志**:官方序列下 GetParameter1 仍唯一有响应(60B BasePara1 完整 - 解析成功:serial=160043865 devType=3=core160 160x120@15fps),66c/66f/673 全部 + 解析成功:serial= devType=3=core160 160x120@15fps),66c/66f/673 全部 800ms 超时 → 与"字节内容"相关而非流程顺序。 - [x] **根因**:`MagProtocol.cmd4/cmd8` 用 `ByteBuffer.putInt` —— **默认大端**! 官方 `GlobalFunc.intToByteArray` 是小端。66b=0x6BB6B66B 是回文数,大小端 @@ -441,7 +441,7 @@ 单测 44 个全绿,含 **loopback 端到端测试**(真实 TCP:hello→welcome→ start→stream-start→5 帧逐字节往返→ffc→stop→stream-stop)与粘包/截断/ 坏长度/重同步用例。debug+release 双构建通过。真机双机步骤写入清单第 16-24 步。 -- [x] Phase Z(2026-09-10):收尾完成。docs 更新(本文件 + HANDOFF_DEVELOPMENT +- [x] Phase Z(2026-09-10):收尾完成。docs 更新(本文件 + DEVELOPMENT.md §3 结构表加入 net/ cloud/ ui/remote/ 与 VendorPalettes/PipCameraView, §7 状态与待办重写 + 禁改清单);全量 `assembleDebug test`(44 单测全绿) + `assembleRelease`(R8)通过;APK 已覆盖提交 @@ -491,7 +491,7 @@ ## 用户反馈修复 第三十九轮(2026-10-07 凌晨,"官方背景条纹更不明显"结案:GPU 画布假设被真机 A/B 推翻,真因 = 我们开着官方从不开启的 7×7 细节增强) -按 38 轮交接清单执行(首验软件画布 → 正式修复 → A/B 验收 → NUC 域收尾)。 +按 38 轮待办清单执行(首验软件画布 → 正式修复 → A/B 验收 → NUC 域收尾)。 完整数据与口径见 `rendering_diff_phone_20261006.md` §17.7。测量脚本 `%TEMP%\mag160c_re\final39*.py`(38 轮存档数字全部复现:官方 FULL 0.10/0.28、 暗区 0.15、照片 JPEG 0.25——口径互锁)。 @@ -525,7 +525,7 @@ ## 用户反馈修复 第三十八轮(2026-10-07 凌晨,原始帧录制 + 逐级重放全链路定案 + 显示链与官方对齐) -按第三十七轮交接清单执行。用户中途解锁手机并配合真机操作。完整数据表与 +按第三十七轮待办清单执行。用户中途解锁手机并配合真机操作。完整数据表与 排除清单见 `docs/android_app/rendering_diff_phone_20261006.md` §17。 - [x] **原始帧录制调试开关**:`usb/RawFrameRecorder`(单文件,帧头 magic/seq/ @@ -562,11 +562,11 @@ 拉回我们 App:切官方前先 force-stop 我们,USB 弹窗用 `TAB×2+ENTER` 过 (横屏 input tap 坐标不可靠)。 -## 用户反馈修复 第三十七轮(2026-10-06 深夜,"官方背景条纹更不明显"——逆向排除全部候选,定位为逐行固定偏移;交接轮) +## 用户反馈修复 第三十七轮(2026-10-06 深夜,"官方背景条纹更不明显"——逆向排除全部候选,定位为逐行固定偏移;记录轮) 用户:"很明显啊,官方背景里面的条纹就是要更不明显,你看看逆向出来的代码,是不是还漏掉了什么"。 本轮**只做了调查与测量,无代码改动**。完整证据与数据表见 -`docs/android_app/rendering_diff_phone_20261006.md` §16,交接清单也在那里(16.3)。 +`docs/android_app/rendering_diff_phone_20261006.md` §16,待办清单也在那里(16.3)。 - 逆向:官方每帧链路(CalibrationMain_RTV + BlindCompensation + TempRangeStat + GrayEnlarge/HistDeRedundance)、内参(0x3808=1、0x380c=1、0x3804=baseLineAcc=4、 @@ -1574,6 +1574,6 @@ SDK 内部默认档——无法据此对齐具体档位,故本应用把它做 - 每完成一个阶段:更新本文件勾选 + git commit(不 push)。 - 中断恢复:读本文件 → 按"下一步"继续 → 环境检查命令: ```powershell - Test-Path C:\Users\ZXC\AppData\Local\Android\Sdk\ndk\ + Test-Path %LOCALAPPDATA%\Android\Sdk\ndk\ Get-Command java; Get-Command gradle ``` diff --git a/docs/android_app/verification_guide.md b/docs/android_app/verification_guide.md index 530a64e..b1c04b4 100644 --- a/docs/android_app/verification_guide.md +++ b/docs/android_app/verification_guide.md @@ -244,13 +244,13 @@ cd /c/Project/MAG160C ```bash # ① 解包官方普通版的调色板预览图(交叉验证用) -mkdir -p /c/Users/zxc/AppData/Local/Temp/cxres && \ -cd /c/Users/zxc/AppData/Local/Temp/cxres && \ +mkdir -p %TEMP%/cxres && \ +cd %TEMP%/cxres && \ "C:\Tools\jdk-21\bin\jar" xf "C:\Project\MAG160C\app\【普通版】MAG-Cx.apk" res/mipmap-hdpi-v4/ # ② 两文件编译 -mkdir -p /c/Users/zxc/AppData/Local/Temp/regen_build && \ -cd /c/Users/zxc/AppData/Local/Temp/regen_build && \ +mkdir -p %TEMP%/regen_build && \ +cd %TEMP%/regen_build && \ cp "C:\Project\MAG160C\analysis\tools\PalIdentify.java" . && \ cp "C:\Project\MAG160C\analysis\tools\PalExport2.java" . && \ "C:\Tools\jdk-21\bin\javac" -d out PalIdentify.java PalExport2.java @@ -258,15 +258,15 @@ cp "C:\Project\MAG160C\analysis\tools\PalExport2.java" . && \ # ③ 重新生成(输出到临时目录,勿覆盖仓库) "C:\Tools\jdk-21\bin\java" -cp out PalExport2 \ "C:\Project\MAG160C\android\app\src\main\kotlin\com\mag160c\thermal\core\OfficialTables.kt" \ - "C:\Users\zxc\AppData\Local\Temp\cxres\res\mipmap-hdpi-v4" \ - "C:\Users\zxc\AppData\Local\Temp\regen_core" \ - "C:\Users\zxc\AppData\Local\Temp\regen_out" + "%TEMP%\cxres\res\mipmap-hdpi-v4" \ + "%TEMP%\regen_core" \ + "%TEMP%\regen_out" # 期望最后一行:iron_bow vs OfficialTables anchor: 256/256 # ④ 与仓库文件逐字节比对(两条都必须为空) -diff "C:\Users\zxc\AppData\Local\Temp\regen_core\VendorPalettes.kt" \ +diff "%TEMP%\regen_core\VendorPalettes.kt" \ "C:\Project\MAG160C\android\app\src\main\kotlin\com\mag160c\thermal\core\VendorPalettes.kt" -diff "C:\Users\zxc\AppData\Local\Temp\regen_out\palette_candidates.json" \ +diff "%TEMP%\regen_out\palette_candidates.json" \ "C:\Project\MAG160C\analysis\sdk_re\android_app\palette_candidates.json" ``` @@ -419,5 +419,5 @@ unzip -p build-artifacts/mag160c-app-debug.apk 'classes*.dex' | grep -ac '正在 | node | 未安装 | | 模拟器 / 连接设备 | 无(`adb devices` 为空,SDK 无 emulator 组件) | | `analysis/tools/PalExport2.java` | **不能单文件直跑**:依赖 `PalIdentify.java` 的 `PalBody`,须两文件一起 `javac -d out` | -| Git Bash 的 `/tmp` 路径 | Windows 版 java **不认**,必须写 `C:\Users\zxc\AppData\Local\Temp\...` | +| Git Bash 的 `/tmp` 路径 | Windows 版 java **不认**,必须写 `%TEMP%\...` | | `analysis/tools/CheckStrings.java` | 可单文件直跑(无外部依赖) | diff --git a/docs/android_app/verification_report.md b/docs/android_app/verification_report.md index 7cbdbdc..7b33fe1 100644 --- a/docs/android_app/verification_report.md +++ b/docs/android_app/verification_report.md @@ -311,7 +311,7 @@ |---|---|---| | 消息无强制格式 | `git log -1 --format=%B` | 证实 | | 内容仅为文档/清单/APK | `git show --stat`:3 份文档 + APK,**外加 Manifest(+3 条 uses-feature)** | **证伪**(见 FIX-5) | -| 文档更新到位 | HANDOFF §3 含 `ui/remote/`、`net/`、`cloud/CloudApi.kt`;session_state 勾选 A–Z 并追加总结;execution_plan 顶部加执行状态 | 证实 | +| 文档更新到位 | DEVELOPMENT §3 含 `ui/remote/`、`net/`、`cloud/CloudApi.kt`;session_state 勾选 A–Z 并追加总结;execution_plan 顶部加执行状态 | 证实 | | 全量构建 + 提交 APK,且不 push | 重跑 debug+release+test 成功;`origin/main` 仍 `087e15c` | 证实 | | 提交的 APK 与 HEAD 一致 | 对已提交 APK 核验:`screenOrientation=1`、camera 系列 not-required、INTERNET/CAMERA 已声明、dex 内含 `画中画`/`正在扫描局域网主机`/`云同步`(E/D/F 代码确在包内)。APK 字节不可复现(时间戳),故以内容核验替代字节比对 | 证实(以内容为准) | @@ -384,20 +384,20 @@ cd /c/Project/MAG160C analysis/sdk_re/android_app/bin/libcxsdk.so csdk/src/mag160c_official_palette256.h # 期望:三种编码全部 not found;[A] 段自校准 detected 1 candidate -mkdir -p /c/Users/zxc/AppData/Local/Temp/regen_build && \ -cd /c/Users/zxc/AppData/Local/Temp/regen_build && \ +mkdir -p %TEMP%/regen_build && \ +cd %TEMP%/regen_build && \ cp "C:\Project\MAG160C\analysis\tools\PalIdentify.java" . && \ cp "C:\Project\MAG160C\analysis\tools\PalExport2.java" . && \ "C:\Tools\jdk-21\bin\javac" -d out PalIdentify.java PalExport2.java && \ "C:\Tools\jdk-21\bin\java" -cp out PalExport2 \ "C:\Project\MAG160C\android\app\src\main\kotlin\com\mag160c\thermal\core\OfficialTables.kt" \ - "C:\Users\zxc\AppData\Local\Temp\cxres\res\mipmap-hdpi-v4" \ - "C:\Users\zxc\AppData\Local\Temp\regen_core" \ - "C:\Users\zxc\AppData\Local\Temp\regen_out" + "%TEMP%\cxres\res\mipmap-hdpi-v4" \ + "%TEMP%\regen_core" \ + "%TEMP%\regen_out" # 期望末行:iron_bow vs OfficialTables anchor: 256/256 -diff "C:\Users\zxc\AppData\Local\Temp\regen_core\VendorPalettes.kt" \ +diff "%TEMP%\regen_core\VendorPalettes.kt" \ "C:\Project\MAG160C\android\app\src\main\kotlin\com\mag160c\thermal\core\VendorPalettes.kt" -diff "C:\Users\zxc\AppData\Local\Temp\regen_out\palette_candidates.json" \ +diff "%TEMP%\regen_out\palette_candidates.json" \ "C:\Project\MAG160C\analysis\sdk_re\android_app\palette_candidates.json" # 期望:两条 diff 均为空 ``` @@ -407,13 +407,13 @@ diff "C:\Users\zxc\AppData\Local\Temp\regen_out\palette_candidates.json" \ 无 gcc / 无 kotlinc,用 Gradle 缓存内的编译器: ```bash -KC=/c/Users/zxc/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin -KX=/c/Users/zxc/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx +KC=%USERPROFILE%/\.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin +KX=%USERPROFILE%/\.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx STDLIB=$KC/kotlin-stdlib/2.2.0/fdfc65fbc42fda253a26f61dac3c0aca335fae96/kotlin-stdlib-2.2.0.jar COMPILER=$KC/kotlin-compiler-embeddable/2.2.0/8cfa2b049a4006d94474296df4abd9b50f288821/kotlin-compiler-embeddable-2.2.0.jar SCRIPT=$KC/kotlin-script-runtime/2.2.0/87c92e866fcd68680966a3005a2992e1ab8ec6ad/kotlin-script-runtime-2.2.0.jar CORO=$KX/kotlinx-coroutines-core-jvm/1.8.0/ac1dc37a30a93150b704022f8d895ee1bd3a36b3/kotlinx-coroutines-core-jvm-1.8.0.jar -ANNOT=/c/Users/zxc/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/23.0.0/8cc20c07506ec18e0834947b84a864bfc094484e/annotations-23.0.0.jar +ANNOT=%USERPROFILE%/\.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/23.0.0/8cc20c07506ec18e0834947b84a864bfc094484e/annotations-23.0.0.jar # 编译(示例:Phase F;Phase B 同理,只换成 core/media 源码 + 自己的断言) java -cp "$COMPILER;$STDLIB;$SCRIPT;$CORO;$ANNOT" org.jetbrains.kotlin.cli.jvm.K2JVMCompiler \ diff --git a/tools/resume_android.ps1 b/tools/resume_android.ps1 index 3d1958a..bfbc31d 100644 --- a/tools/resume_android.ps1 +++ b/tools/resume_android.ps1 @@ -5,17 +5,16 @@ $proj = "C:\Project\MAG160C" $andr = "$proj\android" Write-Host "=== 1. 工具链 ===" Write-Host "Java: $env:JAVA_HOME" -$gradle = "C:\Tools\gradle-8.14.3\bin\gradle.bat" -Write-Host "Gradle: $(Test-Path $gradle)" +Write-Host "Gradle: 工程wrapper android\gradlew.bat (JDK 21: C:\Tools\jdk-21)" Write-Host "SDK: $(Test-Path "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe")" Write-Host "=== 2. 设备 ===" -cmd /c "C:\Users\ZXC\AppData\Local\Android\Sdk\platform-tools\adb.exe devices" +adb devices Write-Host "=== 3. 构建 ===" Push-Location $andr -$env:JAVA_HOME = "C:\Program Files\Zulu\zulu-21" -& $gradle :app:assembleDebug --no-daemon -q 2>&1 | Out-Null +$env:JAVA_HOME = "C:\Tools\jdk-21" +& .\gradlew.bat :app:assembleDebug --no-daemon -q 2>&1 | Out-Null Pop-Location $apk = "$andr\app\build\outputs\apk\debug\app-debug.apk" if (Test-Path $apk) { diff --git a/tools/resume_rev.ps1 b/tools/resume_rev.ps1 index 367c9a6..13a9c22 100644 --- a/tools/resume_rev.ps1 +++ b/tools/resume_rev.ps1 @@ -28,9 +28,11 @@ Write-Host "编译 OK" Write-Host "=== 5. 检查 DDT ===" if (-not (Test-Path "$art\mag160c_official.ddt")) { - if (Test-Path "$env:TEMP\Core160043865") { - Copy-Item "$env:TEMP\Core160043865" "$art\mag160c_official.ddt" -Force - Write-Host "DDT 从 %TEMP% 复制" + # 官方标定缓存:%TEMP%\Core<设备序列号>(运行官方 App 时生成) + $coreDir = Get-ChildItem "$env:TEMP" -Directory -Filter "Core*" -ErrorAction SilentlyContinue | Select-Object -First 1 + if ($coreDir) { + Copy-Item $coreDir.FullName "$art\mag160c_official.ddt" -Force + Write-Host "DDT 从 %TEMP%\Core<序列号> 复制" } else { Write-Host "!!! DDT 缺失" } } else { Write-Host "DDT OK" } @@ -54,6 +56,6 @@ if (-not (Test-Path "$pairsDir\pair_000.raw")) { } else { Write-Host "官方数据已存在, 跳过" } Write-Host "=== 8. 对比 ===" -python "C:\Users\ZXC\AppData\Local\Temp\opencode\compare_live.py" +python "%TEMP%\compare_live.py" Write-Host "=== 完成。下一步见 analysis\session_state.md ==="

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 diff --git a/.tools/python-revlibs/capstone/__pycache__/riscv.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/riscv.cpython-310.pyc deleted file mode 100644 index 5096767c2457368ad1c5f9e55ea9278ef4c07745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 zcmb7EON$&g5SG+0P0!5QnROm^NMZ;v9)s;1j4>gEO(qZm$;NnXW10rh+fv&-^vhDu z!i3zs`7!&Kbj@kcz6D}Zr5W!onVmx#>g(!H>XNGJliKk(Ch!biKbb%F3Hb{@E;&Z|)aNGI$3CD_9ar57zK){N(3@+4JAJUsY}W!_26}m!;|Ur;+7C zG+C{Lu(1$zD;E{|BOzWdvT8jNt~O-DTrA3_w^1(O_3#1wT$HMkMw}4616y(M_v6_& z=`*9WNs|||^!u*+G3&GRmp0F;^r@=5v@5&2eWqWk{%(=Wh4^~@D6PuFv|IMC+9u7j z&h%}g?(5RzNB6p=4j?uMGYFh;#wma2*p1ShweuEC-BudusSpYT4U;|;D6pe-fu3j8 zLRn9%m)0xm+IqFB_orM(5KQCZdVqk6(nEw10&Y)_5zdOR@~$9v6##jIf2}qjQvQ$Q zH@1J)*&kr?CEH*3RYlU1{xNw&6Ar%9CHMpIog%@Hh1l5 zKH3cIEhhN~nUguF^MvkCnf?eEJpnkO);FpuE@bHv#IaAo-ZB8rejlz^yayHBx{&@D zChJcC-Y@Y164w#VtLWn6z!%8lBInVeN&h4IE(W+PIu3lf8QnF0xV`b%Ro8RNJKc6l z_e)nK?b2|oou}bEm&-Ny?L#nw4vHb9{yP@LlzC`7RO7&gEKp&4VCD|MC9-e_9#t*< zYh~5o!6sjmx-j_#8WKwF&+fL-|0?sseN@tBUr>KA}n#UX9ux%^6 z0q`bx>BlI2 zhj0@C1%j7l_8;}wFLrC)@_lnzC)&xn1RrX}BmC);w#q<=?KZ)9>(X8Pp4BBg*N-n}m~SvO9|Y1*qsd A@c;k- diff --git a/.tools/python-revlibs/capstone/__pycache__/riscv_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/riscv_const.cpython-310.pyc deleted file mode 100644 index c27b5a6f22440952c809378750dff34582a05515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12611 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 E2LfXlCjbBd diff --git a/.tools/python-revlibs/capstone/__pycache__/sh.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/sh.cpython-310.pyc deleted file mode 100644 index c8507b86b2f5b8d9d401493fccdc302ba091ade8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2104 zcmb7F-)|d55Z=9?>mNx|3kiy#D$uI9&=j=@MF=6IR3Z;FNTfyRWa)I=t{Yot-*xwl zl!_-B{+RqD{1N-gQ=WON0P)S96GyRw)U$SOZgzKe=bLZF<;F&v;c312Ve&`F*q`)q z@d@xTz%ai-NG5r~5+*(A7kug^9w$90{HN?&CPNt=GZ`s1310b02umylEMj4aU}?!V zENxg~tP!wuWEYn1VoeK{4Y>)+=EBmJ*W}hQOFEJtu>SQ^+=K0(a>zcnTX|U>rFnf+ zDU%jsQ^UsZ<+SGFa~{RVuqu{t$r4X;w!E1LJC zhuA$Dt3sOegz0Ozm=mv`?0z|XW|TI=6 zT%Sht_VV2NlO*RyzY?bLfE*$aL0yu3QYAT&74EnXj^2v4ncN9 zUle_pcPW1Qy>_!J7!Y6s+VUyHS`5Gu=_^DC6k@~~BtnLWGqNq>%a2(xSNa|7)`X|^ zry!6oi7~BpAyG64;)~B+Y%VeGW>-h`9^Br*Fa$=E(}+i0{H=jQ0bXU#LThLt{LvKTO6%4&2JBYb!1B%%ORDw4Ag<{XCIL{u^Y3ySB zMG5_tP1ppbe8Ttpp8gOPht&y3-c>QWkVcn5!tpNcC9VkXrJ&=sL6a*_(I1h|+Yo2| zDGmA#i6uvzbDH>s>~zAyH46L9TA>~l_5i~? zgjhp8*Kkox%{x$0(^61Uv5Y{k*ao}iU{Ck3T@&T4D62Ft=hR3SUBsLc!T+yc=yz%R zEfQCDiaus{FfP=T;BBfYnpsI31xA!Mgc?yAgV!FUFG&x6_imt)M*hKqis3Q_P50G~ zclV&tUsiUBnRWy1J$z6T xK4QaXvvE0dy`cetB65B%oO+&aE52&}$-bttHH191O~HG9FYdK_qW5-J{0GYgcd7sY diff --git a/.tools/python-revlibs/capstone/__pycache__/sh_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/sh_const.cpython-310.pyc deleted file mode 100644 index 1f1f4ae1170c6378b490c3b2cf943948966c03cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8794 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 diff --git a/.tools/python-revlibs/capstone/__pycache__/sparc.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/sparc.cpython-310.pyc deleted file mode 100644 index 087b0012cb7e092db48179b2715d13251302ce36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmb7E-H#MS5by5!>Yd#?-~bJ32nqq#1XMJJ7-CM(#1}n{2ZT%}nGDmtce9y~rhAsS zgg4GV=KiIA<>{VzGit2rnZpgY_uy=*ruNr0)m>G;u6AQ1Ch&}&{WjnC33-iwRv*B~ zHi%K61QE0%2@yuVd#+yzDXY$sZE+Z*-5`s>W93`)1TTRuhNIIR;eo0oi5k=vb!@Y#3K8Aem||sr>RA+2A>5 zS|AZm9<)(*K;B@&FUg$Dfwo6xi`Y$^4>VHJPgaOt?$AufGqr3i(*Y#gtMsMt% z>$&Ahw@T`6>58OX8g93BWOyGwdk@5*2U0qu{y!{;Df3V^sYZ`evM-15&^3CNhCs`L1d#H@XFj8) z(~F{8Xz8xF4IVXR+w`r+Ho1IUl$AYQ*YRFh{-B?%-{R#m2yr%n3AW{JMew^g;r{{v CZ$m@? diff --git a/.tools/python-revlibs/capstone/__pycache__/sparc_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/sparc_const.cpython-310.pyc deleted file mode 100644 index 8800c4e44946a106ca46bd143594c46864f46bfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11798 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 B?ZE&5 diff --git a/.tools/python-revlibs/capstone/__pycache__/systemz.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/systemz.cpython-310.pyc deleted file mode 100644 index e54d19008913e320408538a36ecc23f25b9eee46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1711 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 diff --git a/.tools/python-revlibs/capstone/__pycache__/tms320c64x.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/tms320c64x.cpython-310.pyc deleted file mode 100644 index 5268c5d2966a279e29d18cc216d219a311f3b3a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2261 zcmb7FTW=dh6yE#Ac5ZGF6a-YLAY9QlYO5+j2&EVS57d=Ng3!v+YP&PrthM%TXVwT; zyfsKX@)O`Oe`#KM%5$Fpwc8BO5Npku@poqTT;@Ax%C)tYfhTIEr z`3dl67ejsn!43FqL>4o-J#sROS3I&FDJ?ymn_d_gPx~?IG!Y9 z9>=N`$AG5=tvhl2Y?>5}#!Kk~Qn_iIPinl9<-A}rJ~qS#0@LE}gZ`((1IdLPMnCk2 z53B0Sq)vw4mT+UZ&&SoU%Bx#-BA)X4R+h49ygk|(7WtE5HLDNH$uLbSS(g)jryfhh zmLj&>)l3itd`e*#A}|6gFqeLRY5j$~pYi4+ytFd!F7j`4FS9Z`@|lCIx@v1VtKTQZ zlq*~Cr^?R9V`Y!|c+d+(h%X9at!R_zKqxPbr<539=jYyC?UYz2{aJqIt4+eTASfD1 zpP7f`nZYZKUkJsk0u3o{C^ zcA2NwA=W+%^t#1D96(ET7J)oQG3wHDebQ%+RCvx=vm@j zAmR$dv8f!%i)<-WO(N2Lg7MOV2(0Iu%Vuwbv6osC@8JzW89KE?^bprcEa<9@kYbzg z4POX{?)qc3hwe@o*PIK7d$76=q*G&{iC3E4Yk&NNV8$DC9;V z^Ffb5b^3B~QYt8`I4!5tRLTEj!sH2&L51mQ@hUf?hK>*ukrV|l2EEp*lu-AfF0`Y) z*TtzR{~x7&1J-sZDr#4hjF#!)hl=?}knX}6lY2y3Nm?Q;hKXU-_U{g6ml5LqVqG)- zFf(-4In{hY4MFrs+=Nh0T2?a^FwQGl2|5w+Ap~8e$vK*+HC!8UBGN`xu%AYEnY{S2iftpB!BOL9E^hYV$Uqw~@)l}VILp9L|SJ5PnP%T%}WUiqpJc*`4 zn+9z7ig$0neoic^+NF^XXztrQ9iL0}ynw{5YT%XB$QRIhzL1*uBHF+g(?-68Ht{Oj%&X}NzLd7` zWppK9PFr~mUBzo@8?U1T*OSFDN^+cRZlDx5QZuioG&fO(H&B*0(stfNExef=zJhYR zg5BZB*n0dGN|-i%OiNR<@~)Q`FAQ)WK;Y&d^TIQYUYxtGR`)VTZan zN7u4T-JGXgT%aD_LCi(!Wsi2VPkXpTd%2bNaU1RDcDjx`sE>*Ic_$6@E}_BRl{5s; z55V(bcs>HpN8$NFcz!)RzX6^fg6D_f`Hk@WCU|}`Jii5=-wMxfgXg!y^CR&5C_Fy~ z&yU0N6Y%^bJih~;-wDs}g6DU`^Lya=z3}`#cz!=Te*m7Jg69vy^M~O1!|?nOc>XMS z{%m;u9C-dHJbx}ce;z!4K0JQ`JbxiPe-S)?F+6_>Jbx)Xe;GV~IXr&_JbxuTe-%7` zH9UU}Jbw(HzZRaq4xYarp1%Q}zY(6l37)?hp1%d2zZIUp4W7Rpp1%X0zZ0In3!c9l zp1%j4zZagr51zjto__$Ie-NI32%di!o__?Me-xg744!`+o__+Ke-fU53Z8!&o__|O ze-@s9jyvh|d^LT6uc0q;7k!DZr7v?geT8??SGkA2#!O%5Uit>_rf>2d`WEk{Z}UF- z4)3Sad>wt4`{;YzPv7SO`T-Bp4|#}w#0TidJWM~~5qg|Q>8E^arz6Npuh4-`WxRt zf9E^tAAA@6lkcV{_#XNf-%J1I`{+M>KmC^fmK`uR&xZb;UnNA zJ_^?IF>o>;2dD4}a4Me!rb^NrLN}oB*=5l8abE(`IN=3$G=NhXPY!hJnii}MX)CwjGrU<4A zWD^{lE|?*x6U-FM63iCN5zH0L6U-MZ5G)id5-b)h5iAuf6JS$~jGZGmSFl2Gp5T1J zO2Gw!3k4SmE*4xOSS463xKwbN;Bvtl!CJvOLA@X*hzlA7je_-pCcy^5M!_b*X2BJL zErKfrTLo7M5&}z*6xf24pjnU>WCU5kc0r545#$7}ATKBgb_j|BPv8qmf>uGBpk2@* zAi+*Sr{HSAHG(d|wSsQJEr z2L;y)ZV((292VRtxJhuc;1-h=SH(y1)Sukw7?YbmCsxRx5U)TpKP zT58hL1}$yW(k3;cM6BMR#SB{9pfwn@MuWEApfwq^4F+waK{JdaZWu@0Fpjuk9C5=q z;)Zd=4daL##t}D+BW@T++%S#?!#EmrK3O{JEJKveI!kArrL)e`S!e02vvk&3I_oSw zO3RRSR!q;971Oh2#q?}hF+E#WOwX1T)3as8^lVu%JzG}HFb+f3S%$2$3|VIxvd%JO zon^>6%aC=JA?qwd)>($EvkX~hA?w0>Zy}kAsasLXwX<$otE`n}XART;)|c7#>tUB29F}F;?REB{gO{m2gxIcHS@OK8xzc zX>rK%vRw2^@xYU%bVRO{FN9ZwT=3BI%IEtt1t3>0Dv?v|zUnu$k}97T`$}p!kUMm( zj;)ggnzqQX?KagX#|}PGNk5_K#vR*5@ydN>Jk&MSX$Z_&dX?l7?Rr5#gm>YFa#>7S zI71*BY=%p^c%egYGYHh1gos%+BV|>u6_Fiduv1cbF2Nr3aJH0nZMewhN=lArtfb^= zhYB4|#uV%rrWh?c#-TfSxeVvN1bgNVI;D)UC!TTavVhcV7dniFAXMc5LiNU$YYo2j zNUr8uZI%AH))w7(Ym44W5C|i~E84Wty7^-8rCr+2>)a_Mk}Z035;b!cxlv6*IodIY zJLYf)wTJC4=6y$rUIMr4u-hW)=0wHRgj1v}d-^%ROZdu3FQxZJFVh@+vlAyhEI8Gx zjFSt#HjhUJU)v`%y^VO8B8rDifvR&*MD3r4#h^O{(a;uDy&$Cm!$u;qVflLFsiW)` z*|3;Aqh(&E)nFu4gK1vL;I415%s1R&JYR3Jo^QIDK-D)B&o^l3kD9KMWtf-}UYS(3 zlq@_*D)&V7%+ZDcAX?w#;FEr4glNd4wnRZMn37v)$ru)r=nnMo_S0_IR@w_LR%m$4 zqUvonYdfjHw+C4wxmMMVi!YPmw%xq1TJbO{JqeU5=G84|;$5V27ShG1zgAYxuISrK zxk6ydL~Jg(S-;CZi|(97&z(j00?&O<*N;z-m3M5pFwyzSC&=->O#Bx}z^pU9tTb?3 z3vO=XTJWRdxE6f98rR(XW0B!UiPj)7ThV1Uq?oMa0r@ODy z@9iJz9NIUuX0&^FPw(iO-93D;tA78+&c1!SI)@IA?j0QH?CBmF866zxT{qf4f-luQ zO^t`TdIkqZM%NA)nbk+>w!`_`me2bXK3<=?7_zvE}o+NaK^MgIrQ+^h5e diff --git a/.tools/python-revlibs/capstone/__pycache__/tricore.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/tricore.cpython-310.pyc deleted file mode 100644 index f904584142b57adfe09a4170c75e16883469c01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1726 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 diff --git a/.tools/python-revlibs/capstone/__pycache__/wasm.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/wasm.cpython-310.pyc deleted file mode 100644 index b2222dbbf0e0394c4120b2fdc87d0d2883f95da9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2284 zcmb7F-H+Qu5a0E;osUb? zO)#J1fu_aUplQ!FKI^dV2?+y6_sL-645E_VGYWD*RWB*ZS(H?>lFKL?$qIDz(*)<7 zf0{Ml04*mWWh68h<>uH*4Q9aGhPPRNr)KCd3u4)-_2kk1Pv3}x_%P$j$$0*>I#O=T znBY=|UB=URnpII1i>JKW9k|MiqCB4PC{jTbO$s*65Vxb~*)-1P7N=gW@{(ve%B#C~ z7U=#x_W%+Gf#ls(qB+iBhd{Pd}QF*go z#LYBe)9Chidzg(5hvlp~D)M0xm$E8ye(U#GPPWRKu)#HES)%ZWXLuBTueAOGc^=Gp zh?9Q+@ka6-AkmtWX~P@89sFkQCIRemH#Jf>^q3Fy1~t8VRr(Fz{%A7cY!p}g%z#BH_fS-rquqfoaJj-qftwR8v^z-z-nT^?H60Ylfas!V zXs%HYb(cWkkbMvhKfqC&I@J4H+b{6c9I|8h(;IjKR^W)a++!BAPsj@z`hXqgY8(It zel%_Y4p>X$HsChvXxstZWg8lI0r%J?jW<{yc)hF~JhpqKval|cB}d0x+0T*X1nXw; zAjYu+<0aDe2N{zwRM{!r9T?&R&jF*@L&p6iAvR7_lB3A|y zAHrnu5r{>I%c!`D;&m#te>8l8dJJ;ht2edP9FR3aY@(NCA<*#Isu1_@tr6m_RUy!D zs|nGW@1j1?YxsYAm47tcUFv_W^}n;qKN=o1{ufzj3UG}rTv-(Y4PP`Nx^s$}n(nQt zX(X|(X)IP<&dMuAQF2ku^wAaiaOw2x1ZfuaR`p_DA2^Nlse2Dxy$?fv45F@mhgz=; zC!mJ8Y;>u>|E%r@*TA}@AK1*qu9zClb>r;FC(xmlSCmmwO!Ep67je#{co&?&4YQOA zx4ucX^*UB}HQdnGFeKJG?ku3*zXG)vl8C(w+k!;uDr^jJWr8&RG_F9$+MidjDNL}7 z8z`_+@%D}XSH`LXcViTbjZok#P-gf>2bJ3q8 diff --git a/.tools/python-revlibs/capstone/__pycache__/wasm_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/wasm_const.cpython-310.pyc deleted file mode 100644 index b2490ce121f457173face71829f99b02c51d2717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6018 zcmeI0*IN|X7R4LI4CbseW11N;N5pK?U9_zou(}&?iMGf_ML`fS>zH%SIj1qF$@%^p zzTPMPh5K~(>R46H^L@Jb`TMA~_c>>ubwzG7Mv7IL65cd@UpKjeLP`p>4pZc7 zOqFjiO}@o+8IKuKgqbn{vt%M>%On)bWXzE%D3Pg{E7LGfrenU$zyg_xg)$3^WHuH{ zF_y?2xTOT8G8Z112d~VBAq!9@3*nPRSSpL*mnB#xZY-Bl1jK`&co7lt!`I$Qo>vIO=6BHc1UO%Q`ejEgD6zMe5Kb>(MM5uvIpqMe5Nio6shku}vDV zT^g}NwqU0;VV5*xw`|28X~AA;#Xf1ncd`xpWjhYY4jh!7I3&ApSa#!x?7>mli(|46 z$K^Ymko`C*2XIOb;jJt9L_v9+>%QZZZ>v$+P@JMdrvE0HFxs9iC2hZd#p36Oa zFZc069^j=s#4CA(*YX%|caTR@P&(m{Jl>fQV6N!h*EJK*}pZT)zX>BC%P!m zr_vn>T8=IX(n2U4GO}0xP;?IZrDGLtGp5SS897q%Ec8xirBZCy8t;{k>pdYmeyJIC zmj(9(N#s!I?sMskcL~-!wc?OPbfz0<+yj zi~!^PGwpmvG_G@U2P|5o11)M8sk{NUw!T2PR2yeSHcpAz3HfKv(AI9RWsd&hSx%`e zH>)h2m0hNEUnTK~W%06V41+Qirq$`in%torv-Xi1%+Yg3we_4*ojqsejcNMp&Q74MyNS& z5vCE$$)jf5L)xEPA3RwfIYQWU6j7Cbk>I zDt1p*$@Nr4ho`DIJXOWvsVX_1rZk(Us^xf^(rlip=I~S%yMrn?JXOWvX+m*$n$m2Z zs^;`GDOo+`nRAy$EbB@oWcVygk+_K(e(SFMa@{qW4U`LJ9C?c-l?;< zNve?*rghs>vM*60$+qpOaEY>~jEXLiLkaprPQ_hid5p7_CtSWV;`iAS)g6ZwsyM7r z#pAF-r5r0%%dsNSS&kK|I;~L2VFi=yR;c2zLKTM<%&}WR#cqWv87u5BI+boyKa}-7 zc&P0unV42Q7FQEHj6~x4?$u#L+h}B1wl^KysEX?QZCu}gwYv^Ou|&vHgSJZ6pd;C9 z$V76g%S3Xj%S4jZ4bN1U+$5n2!;GfN>o}IIuj80bOK041OxtNJ`vS!Ay!!GJH4-*i z8fl683e#~RmRL?9mRL?9mRPcotigPBE;qx;O4Q(y8B6#GFb(~lGR$)Qu1MH#iE2Ar zRHv7Xa(dP%*V__xw52uKQ=a;3jpbpad&VE~rBZy{r^!F)r0y|PLa|_}VfsC(=Pjjj zx9JWVQHsfX5k>t(^d~;ul8-t{sdvz10Tk5!s2L8V3ZRlK;DxJ&-@Xa_C+3+~9c!&? zX{|<;r`p}z?5%05sSY&N)-+T{>l&M@o9mk=x7D<4sB4?NzE-xyr)?^!Zm3^Z-Mp)9 zW7C%E+M4Fpwx%t0Q+L#~HpXk4wzRfQY2Nj@`+~+M+160EC{IUf-K`wz%I}V!Z diff --git a/.tools/python-revlibs/capstone/__pycache__/x86.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/x86.cpython-310.pyc deleted file mode 100644 index ec431262288124d0c4bf603c7d842b16791aecbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3078 zcmb7GOK%)S5T5tW?9*O5j-4RIB)lAm6HqWFgy3KT9Kc8(G)C}Wy zY8?MLXly{_uK;E+b6|u9vzR?FhgN8rWIF@!*lk5|lIc}X*2}KsvDo4Hm2Seu(Y5}1XVBa3WV`vp zbks@WOy=o`U!AP4t!BHzMPwiHyr~V}^3C%9r|vtE(nG4eg$Jgllu~GON+8I<93;?H zRh_^e;=!0JTksua_l84d5BU)35}>3Z>I4k}nu=%<%o5NPMVsI-4TUvNz6Agclf-b} zpapoQ|F`y^n0y6eHfZoRV9Ml+sq5Wm#0D%vvw_&+poPr33*Oi_LI>!`ZycU%&iqmyatb01Uxg9Bl)0vEL%EJ)OQi`+yeO4UZ7{TihVfs zHR1w>ie5|%gNRd{68|4T-V-x^^_oeigK8!;Y9{UnT{9b-5)8XDN>bJv?Wj7+pcqDJw<~$B zYE&r?8i8);Ls11C58OW4cEodL(X3F*~5726(MbYPY zmCft9oZ&SjcrL8-23uffpBgALP1uWUN!u-U4v9anT%CC3WrBBmlYJ`K%1blsgRZ?3 z6~v4Qomu7TT~W5|Z3`-(Du9K1h%Pm478jdOUVY(tlQfHxM0rwjt*K<8T_G)FDr+#r zP`L$reHxyQak0VTA|5fhPaIS}FPZWGD#UF(BiN&0P#a~kJ0p3%6FpM_pz^u{H6^AoeXc(=TH z&Iwwq&`0@0vepPbB3LIN+KP_}ZV-GzaFc)%C2kRXMzBF}l-@hke2?G?0ToAamEanI zO+ZNzp9ARQGJfgCQw@A#MX^X8Vq3du2g4+N!YrHf=CXOwY@5zs;%j=ip+9I;5i|@Y z>uWd>Bblq VYQAPh+inN#N_(O0wS)SFe*sT2Tzdcj diff --git a/.tools/python-revlibs/capstone/__pycache__/x86_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/x86_const.cpython-310.pyc deleted file mode 100644 index 1584aa2340aad7d97ab33b554e587a5343fb5d7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59711 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 gd*Hv<|Nms~{!~g&Q diff --git a/.tools/python-revlibs/capstone/__pycache__/xcore.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/xcore.cpython-310.pyc deleted file mode 100644 index f5f4e13c4ff74e12ae5cfaeabaf4a5d4ea7d336a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmb7EOK%%D5GJ`VY9+a;>^4asDB20UJRos+&Vxmty|Pd5G)p0Y?f5K!oEzd z3ajYN?vL?b;x#9qeJdIxGt}BOEagxN9L|0-8ggbnvK|gY0;6~I`*g=8lQG&nW4|k;lal) zOuYp{l86ctF+rs>btg=)ZgpVw;M;}OpRkD=1;T?peG|USY9)VdevzedU!__aFRz3= zj$D!J#`q#vGHdt8-0&o+(o!ag36rF(#jHSmkR(U5wCF7U;=Crvl38B0+o-_$-M7ZG z3Iv(tvJg5sBkDsqu@(RPwzm^M*HY;?dbt<>*fdYlHjRI-v$Tkx$+C%?ym{27>a}bi zO)@b{wx-*0k-v(Yd3#t_ah5i^ttF(&i4nJX*{$FdBp!WpOb_ph}qRq?v>55aw9 z6|s7b#M(h`g$uRw%%H2?i?oQiu5pMkjAVgmt;b2~m7zC`>B5dTGoKK+mA zA7g-3(b4c=IlAqAe^u|*UG&DT+MXNUsJfA=o!cTQn}*$O6&dcq-|+t$-H;4EbuXD0 zQs&@XqY6EiXmL&KufV#B7Q)#e3u<(v4)(NdgW+|PWc93SQIjgIgg(b6?~j9(*$u&F z5Al9RV>32kYK((Pgp^+@M3)+Z2S;And|PA|ylf!Z-|RlH_n@PIqmcOOYZRCwK9cDz z9+)A#8%e6NLwJiOH9nLY8Mi?dUiWc-aWjbx74?tt4S~!n-J0G(t7cg{Q_|j5<2|qP sx?1!Q>ut|&qukijwhswz`1gx<@&~*n8t*b^19*r=&WMkK(fYuD2ZUNZUjP6A diff --git a/.tools/python-revlibs/capstone/__pycache__/xcore_const.cpython-310.pyc b/.tools/python-revlibs/capstone/__pycache__/xcore_const.cpython-310.pyc deleted file mode 100644 index 56748f58c1b7d00ae376a22967d5061d059bb7d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4323 zcmd6qSzA+C7KX#1f{ODz&x(pNC?byGoCAcM9O5}A5I&=btf(N67=lVwbyxK~RnPO> zec6A>+rHv2^i{792(@>-si&_R9$vH79=^SXy^&H|+t!4BwY~{wpS2|t|E6JnHLCGY ze-^*gPm+*^xx{<}8s;0(INyY(`DQdXB%~3WB!SJ+ge}sH7PVW|-m3OCwYSSAw8>`d zkS*9LE!ZWk*ezSJN48{M zC*=@M$zhz9BRC^RaaOg?sn&Vbx}aJYRqK*!wX4=;)w-fuS5>P+wXUhwb=B%rtuEE- zR;?b@x}jP(RjXIEZmCwEYTZ_?e$~38T6b0Jo@(8fV|XCP@lZ}6DJL-?r{KtGxN-)b zoW-D=!;qZEuv|b&E@DJ3Aua9j(3*w_B8I&c!8yQ7KvRITys7i<>iSSlpyptT>%NUkr9G^%YpUMP2 z6W|;27~hlvK9?u>LZ0GVGKp`?Gkiy;@LhS1@5wa2FM=OP5kHg{_>sKCkL4A9A~X0> zX7N*bji1RJelGL)g)HEgQo^sKj9<$e{6;GHtt{eqQpN9O34f5c_@lhTpX5FMEX(+d ze1gAfo&TnF{=3%sAM$CGX#Z@bLHn}3`9qr%O^#+KQ^8o$Pq`mj*UZoxs(nmlGPREx zFSDYn5-aTMl_sK@*hFk5wh%2uE5X~bvW?hI=oLw<>>zd$yNKPy9%3)CkJwKfAPy3T zh{MDY;wW*9I8K}(P7pj+eANchqz1JBkmIqh=)Xy7$6+NB|Kt~7$Sy=6fr`i37^Oi0WnHsiAO|8 zL_|#Fh%sWE$P*I;h{r^MctSiSCW&Xn6!DyxCWI&wFNl}KD`JM2C0-MA#5}P;l!!9% zhNuvWM3q<~-V*PK_r$UyX#eMjM1{>&VRKd3TopDKcIBPX&@&np+c!MgtA?fRYFOH_ z*u6GWr`5W=Hi0fDYg(>l`Jp)$Sz}?RITm(VR<~vKSk?{8x@lRxmUYXr`Yh`<+P(@a z?CP{l>oi%%9E>zzV`&swF?zA7;6p`g6dzyhqk>KGsWZ6vNANzTp@QJuj?xSmn}0ZQKMZ zsBNY|&7jV<_S11KrlClORc>{}R^n5E-7u*jWl5%j?6|q3p31%qsle*kRAA0d*EdJ{ zqvl9|TxoS#XYhGpji`LLtJey`cl)f;`EIhS*G!Z;tX@)k+$_ECZaiH~yYE^t``WEJ zYr9O&x0XltaiZLSJ#3vWlXRTOjE4?;#>l9h$4ojCrL85=L|`4c?nHrJH>0)rz8Q@> zYBkAdF4i6}@~aLl`ucA|=0hEs2unBQJLR zv>AeW%pEzQ&bE3)$MtD6POOfgP9YmPX4pDI-$wfop*vAG#lB#=CLXVosguoHiHe4; z&S6@O%txzbHBTLDBO8T`;y&B7+L(Q3?xsBwngPZ7sA{Q=rC(bt^;&uPL(ARyk}S;?@AFTb#eU_X fL~~Pf!|HeA`oC+|*X94V>g(?Q|2a=%ZfW>0uW5ot diff --git a/.tools/python-revlibs/capstone/arm.py b/.tools/python-revlibs/capstone/arm.py deleted file mode 100644 index 3bc2ab2..0000000 --- a/.tools/python-revlibs/capstone/arm.py +++ /dev/null @@ -1,83 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .arm_const import * - -# define the API -class ArmOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint), - ('index', ctypes.c_uint), - ('scale', ctypes.c_int), - ('disp', ctypes.c_int), - ('lshift', ctypes.c_int), - ) - -class ArmOpShift(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', ctypes.c_uint), - ) - -class ArmOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int32), - ('fp', ctypes.c_double), - ('mem', ArmOpMem), - ('setend', ctypes.c_int), - ) - -class ArmOp(ctypes.Structure): - _fields_ = ( - ('vector_index', ctypes.c_int), - ('shift', ArmOpShift), - ('type', ctypes.c_uint), - ('value', ArmOpValue), - ('subtracted', ctypes.c_bool), - ('access', ctypes.c_uint8), - ('neon_lane', ctypes.c_int8), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def fp(self): - return self.value.fp - - @property - def mem(self): - return self.value.mem - - @property - def setend(self): - return self.value.setend - - -class CsArm(ctypes.Structure): - _fields_ = ( - ('usermode', ctypes.c_bool), - ('vector_size', ctypes.c_int), - ('vector_data', ctypes.c_int), - ('cps_mode', ctypes.c_int), - ('cps_flag', ctypes.c_int), - ('cc', ctypes.c_uint), - ('update_flags', ctypes.c_bool), - ('writeback', ctypes.c_bool), - ('post_index', ctypes.c_bool), - ('mem_barrier', ctypes.c_int), - ('op_count', ctypes.c_uint8), - ('operands', ArmOp * 36), - ) - -def get_arch_info(a): - return (a.usermode, a.vector_size, a.vector_data, a.cps_mode, a.cps_flag, a.cc, a.update_flags, \ - a.writeback, a.post_index, a.mem_barrier, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/arm64.py b/.tools/python-revlibs/capstone/arm64.py deleted file mode 100644 index f5eb3ae..0000000 --- a/.tools/python-revlibs/capstone/arm64.py +++ /dev/null @@ -1,103 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .arm64_const import * - -# define the API -class Arm64OpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint), - ('index', ctypes.c_uint), - ('disp', ctypes.c_int32), - ) - -class Arm64OpSmeIndex(ctypes.Structure): - _fields_ = ( - ('reg', ctypes.c_uint), - ('base', ctypes.c_uint), - ('disp', ctypes.c_int32), - ) - -class Arm64OpShift(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', ctypes.c_uint), - ) - -class Arm64OpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('fp', ctypes.c_double), - ('mem', Arm64OpMem), - ('pstate', ctypes.c_int), - ('sys', ctypes.c_uint), - ('prefetch', ctypes.c_int), - ('barrier', ctypes.c_int), - ('sme_index', Arm64OpSmeIndex), - ) - -class Arm64Op(ctypes.Structure): - _fields_ = ( - ('vector_index', ctypes.c_int), - ('vas', ctypes.c_int), - ('shift', Arm64OpShift), - ('ext', ctypes.c_uint), - ('type', ctypes.c_uint), - ('svcr', ctypes.c_uint), - ('value', Arm64OpValue), - ('access', ctypes.c_uint8), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def fp(self): - return self.value.fp - - @property - def mem(self): - return self.value.mem - - @property - def pstate(self): - return self.value.pstate - - @property - def sys(self): - return self.value.sys - - @property - def prefetch(self): - return self.value.prefetch - - @property - def barrier(self): - return self.value.barrier - - @property - def sme_index(self): - return self.value.sme_index - - - -class CsArm64(ctypes.Structure): - _fields_ = ( - ('cc', ctypes.c_uint), - ('update_flags', ctypes.c_bool), - ('writeback', ctypes.c_bool), - ('post_index', ctypes.c_bool), - ('op_count', ctypes.c_uint8), - ('operands', Arm64Op * 8), - ) - -def get_arch_info(a): - return (a.cc, a.update_flags, a.writeback, a.post_index, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/arm64_const.py b/.tools/python-revlibs/capstone/arm64_const.py deleted file mode 100644 index f2210ff..0000000 --- a/.tools/python-revlibs/capstone/arm64_const.py +++ /dev/null @@ -1,3008 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [arm64_const.py] - -ARM64_SFT_INVALID = 0 -ARM64_SFT_LSL = 1 -ARM64_SFT_MSL = 2 -ARM64_SFT_LSR = 3 -ARM64_SFT_ASR = 4 -ARM64_SFT_ROR = 5 - -ARM64_EXT_INVALID = 0 -ARM64_EXT_UXTB = 1 -ARM64_EXT_UXTH = 2 -ARM64_EXT_UXTW = 3 -ARM64_EXT_UXTX = 4 -ARM64_EXT_SXTB = 5 -ARM64_EXT_SXTH = 6 -ARM64_EXT_SXTW = 7 -ARM64_EXT_SXTX = 8 - -ARM64_CC_INVALID = 0 -ARM64_CC_EQ = 1 -ARM64_CC_NE = 2 -ARM64_CC_HS = 3 -ARM64_CC_LO = 4 -ARM64_CC_MI = 5 -ARM64_CC_PL = 6 -ARM64_CC_VS = 7 -ARM64_CC_VC = 8 -ARM64_CC_HI = 9 -ARM64_CC_LS = 10 -ARM64_CC_GE = 11 -ARM64_CC_LT = 12 -ARM64_CC_GT = 13 -ARM64_CC_LE = 14 -ARM64_CC_AL = 15 -ARM64_CC_NV = 16 - -ARM64_SYSREG_INVALID = 0 -ARM64_SYSREG_ACCDATA_EL1 = 0xC685 -ARM64_SYSREG_ACTLR_EL1 = 0xC081 -ARM64_SYSREG_ACTLR_EL2 = 0xE081 -ARM64_SYSREG_ACTLR_EL3 = 0xF081 -ARM64_SYSREG_AFSR0_EL1 = 0xC288 -ARM64_SYSREG_AFSR0_EL12 = 0xEA88 -ARM64_SYSREG_AFSR0_EL2 = 0xE288 -ARM64_SYSREG_AFSR0_EL3 = 0xF288 -ARM64_SYSREG_AFSR1_EL1 = 0xC289 -ARM64_SYSREG_AFSR1_EL12 = 0xEA89 -ARM64_SYSREG_AFSR1_EL2 = 0xE289 -ARM64_SYSREG_AFSR1_EL3 = 0xF289 -ARM64_SYSREG_AIDR_EL1 = 0xC807 -ARM64_SYSREG_AMAIR_EL1 = 0xC518 -ARM64_SYSREG_AMAIR_EL12 = 0xED18 -ARM64_SYSREG_AMAIR_EL2 = 0xE518 -ARM64_SYSREG_AMAIR_EL3 = 0xF518 -ARM64_SYSREG_AMCFGR_EL0 = 0xDE91 -ARM64_SYSREG_AMCGCR_EL0 = 0xDE92 -ARM64_SYSREG_AMCNTENCLR0_EL0 = 0xDE94 -ARM64_SYSREG_AMCNTENCLR1_EL0 = 0xDE98 -ARM64_SYSREG_AMCNTENSET0_EL0 = 0xDE95 -ARM64_SYSREG_AMCNTENSET1_EL0 = 0xDE99 -ARM64_SYSREG_AMCR_EL0 = 0xDE90 -ARM64_SYSREG_AMEVCNTR00_EL0 = 0xDEA0 -ARM64_SYSREG_AMEVCNTR01_EL0 = 0xDEA1 -ARM64_SYSREG_AMEVCNTR02_EL0 = 0xDEA2 -ARM64_SYSREG_AMEVCNTR03_EL0 = 0xDEA3 -ARM64_SYSREG_AMEVCNTR10_EL0 = 0xDEE0 -ARM64_SYSREG_AMEVCNTR110_EL0 = 0xDEEA -ARM64_SYSREG_AMEVCNTR111_EL0 = 0xDEEB -ARM64_SYSREG_AMEVCNTR112_EL0 = 0xDEEC -ARM64_SYSREG_AMEVCNTR113_EL0 = 0xDEED -ARM64_SYSREG_AMEVCNTR114_EL0 = 0xDEEE -ARM64_SYSREG_AMEVCNTR115_EL0 = 0xDEEF -ARM64_SYSREG_AMEVCNTR11_EL0 = 0xDEE1 -ARM64_SYSREG_AMEVCNTR12_EL0 = 0xDEE2 -ARM64_SYSREG_AMEVCNTR13_EL0 = 0xDEE3 -ARM64_SYSREG_AMEVCNTR14_EL0 = 0xDEE4 -ARM64_SYSREG_AMEVCNTR15_EL0 = 0xDEE5 -ARM64_SYSREG_AMEVCNTR16_EL0 = 0xDEE6 -ARM64_SYSREG_AMEVCNTR17_EL0 = 0xDEE7 -ARM64_SYSREG_AMEVCNTR18_EL0 = 0xDEE8 -ARM64_SYSREG_AMEVCNTR19_EL0 = 0xDEE9 -ARM64_SYSREG_AMEVCNTVOFF00_EL2 = 0xE6C0 -ARM64_SYSREG_AMEVCNTVOFF010_EL2 = 0xE6CA -ARM64_SYSREG_AMEVCNTVOFF011_EL2 = 0xE6CB -ARM64_SYSREG_AMEVCNTVOFF012_EL2 = 0xE6CC -ARM64_SYSREG_AMEVCNTVOFF013_EL2 = 0xE6CD -ARM64_SYSREG_AMEVCNTVOFF014_EL2 = 0xE6CE -ARM64_SYSREG_AMEVCNTVOFF015_EL2 = 0xE6CF -ARM64_SYSREG_AMEVCNTVOFF01_EL2 = 0xE6C1 -ARM64_SYSREG_AMEVCNTVOFF02_EL2 = 0xE6C2 -ARM64_SYSREG_AMEVCNTVOFF03_EL2 = 0xE6C3 -ARM64_SYSREG_AMEVCNTVOFF04_EL2 = 0xE6C4 -ARM64_SYSREG_AMEVCNTVOFF05_EL2 = 0xE6C5 -ARM64_SYSREG_AMEVCNTVOFF06_EL2 = 0xE6C6 -ARM64_SYSREG_AMEVCNTVOFF07_EL2 = 0xE6C7 -ARM64_SYSREG_AMEVCNTVOFF08_EL2 = 0xE6C8 -ARM64_SYSREG_AMEVCNTVOFF09_EL2 = 0xE6C9 -ARM64_SYSREG_AMEVCNTVOFF10_EL2 = 0xE6D0 -ARM64_SYSREG_AMEVCNTVOFF110_EL2 = 0xE6DA -ARM64_SYSREG_AMEVCNTVOFF111_EL2 = 0xE6DB -ARM64_SYSREG_AMEVCNTVOFF112_EL2 = 0xE6DC -ARM64_SYSREG_AMEVCNTVOFF113_EL2 = 0xE6DD -ARM64_SYSREG_AMEVCNTVOFF114_EL2 = 0xE6DE -ARM64_SYSREG_AMEVCNTVOFF115_EL2 = 0xE6DF -ARM64_SYSREG_AMEVCNTVOFF11_EL2 = 0xE6D1 -ARM64_SYSREG_AMEVCNTVOFF12_EL2 = 0xE6D2 -ARM64_SYSREG_AMEVCNTVOFF13_EL2 = 0xE6D3 -ARM64_SYSREG_AMEVCNTVOFF14_EL2 = 0xE6D4 -ARM64_SYSREG_AMEVCNTVOFF15_EL2 = 0xE6D5 -ARM64_SYSREG_AMEVCNTVOFF16_EL2 = 0xE6D6 -ARM64_SYSREG_AMEVCNTVOFF17_EL2 = 0xE6D7 -ARM64_SYSREG_AMEVCNTVOFF18_EL2 = 0xE6D8 -ARM64_SYSREG_AMEVCNTVOFF19_EL2 = 0xE6D9 -ARM64_SYSREG_AMEVTYPER00_EL0 = 0xDEB0 -ARM64_SYSREG_AMEVTYPER01_EL0 = 0xDEB1 -ARM64_SYSREG_AMEVTYPER02_EL0 = 0xDEB2 -ARM64_SYSREG_AMEVTYPER03_EL0 = 0xDEB3 -ARM64_SYSREG_AMEVTYPER10_EL0 = 0xDEF0 -ARM64_SYSREG_AMEVTYPER110_EL0 = 0xDEFA -ARM64_SYSREG_AMEVTYPER111_EL0 = 0xDEFB -ARM64_SYSREG_AMEVTYPER112_EL0 = 0xDEFC -ARM64_SYSREG_AMEVTYPER113_EL0 = 0xDEFD -ARM64_SYSREG_AMEVTYPER114_EL0 = 0xDEFE -ARM64_SYSREG_AMEVTYPER115_EL0 = 0xDEFF -ARM64_SYSREG_AMEVTYPER11_EL0 = 0xDEF1 -ARM64_SYSREG_AMEVTYPER12_EL0 = 0xDEF2 -ARM64_SYSREG_AMEVTYPER13_EL0 = 0xDEF3 -ARM64_SYSREG_AMEVTYPER14_EL0 = 0xDEF4 -ARM64_SYSREG_AMEVTYPER15_EL0 = 0xDEF5 -ARM64_SYSREG_AMEVTYPER16_EL0 = 0xDEF6 -ARM64_SYSREG_AMEVTYPER17_EL0 = 0xDEF7 -ARM64_SYSREG_AMEVTYPER18_EL0 = 0xDEF8 -ARM64_SYSREG_AMEVTYPER19_EL0 = 0xDEF9 -ARM64_SYSREG_AMUSERENR_EL0 = 0xDE93 -ARM64_SYSREG_APDAKEYHI_EL1 = 0xC111 -ARM64_SYSREG_APDAKEYLO_EL1 = 0xC110 -ARM64_SYSREG_APDBKEYHI_EL1 = 0xC113 -ARM64_SYSREG_APDBKEYLO_EL1 = 0xC112 -ARM64_SYSREG_APGAKEYHI_EL1 = 0xC119 -ARM64_SYSREG_APGAKEYLO_EL1 = 0xC118 -ARM64_SYSREG_APIAKEYHI_EL1 = 0xC109 -ARM64_SYSREG_APIAKEYLO_EL1 = 0xC108 -ARM64_SYSREG_APIBKEYHI_EL1 = 0xC10B -ARM64_SYSREG_APIBKEYLO_EL1 = 0xC10A -ARM64_SYSREG_BRBCR_EL1 = 0x8C80 -ARM64_SYSREG_BRBCR_EL12 = 0xAC80 -ARM64_SYSREG_BRBCR_EL2 = 0xA480 -ARM64_SYSREG_BRBFCR_EL1 = 0x8C81 -ARM64_SYSREG_BRBIDR0_EL1 = 0x8C90 -ARM64_SYSREG_BRBINF0_EL1 = 0x8C00 -ARM64_SYSREG_BRBINF10_EL1 = 0x8C50 -ARM64_SYSREG_BRBINF11_EL1 = 0x8C58 -ARM64_SYSREG_BRBINF12_EL1 = 0x8C60 -ARM64_SYSREG_BRBINF13_EL1 = 0x8C68 -ARM64_SYSREG_BRBINF14_EL1 = 0x8C70 -ARM64_SYSREG_BRBINF15_EL1 = 0x8C78 -ARM64_SYSREG_BRBINF16_EL1 = 0x8C04 -ARM64_SYSREG_BRBINF17_EL1 = 0x8C0C -ARM64_SYSREG_BRBINF18_EL1 = 0x8C14 -ARM64_SYSREG_BRBINF19_EL1 = 0x8C1C -ARM64_SYSREG_BRBINF1_EL1 = 0x8C08 -ARM64_SYSREG_BRBINF20_EL1 = 0x8C24 -ARM64_SYSREG_BRBINF21_EL1 = 0x8C2C -ARM64_SYSREG_BRBINF22_EL1 = 0x8C34 -ARM64_SYSREG_BRBINF23_EL1 = 0x8C3C -ARM64_SYSREG_BRBINF24_EL1 = 0x8C44 -ARM64_SYSREG_BRBINF25_EL1 = 0x8C4C -ARM64_SYSREG_BRBINF26_EL1 = 0x8C54 -ARM64_SYSREG_BRBINF27_EL1 = 0x8C5C -ARM64_SYSREG_BRBINF28_EL1 = 0x8C64 -ARM64_SYSREG_BRBINF29_EL1 = 0x8C6C -ARM64_SYSREG_BRBINF2_EL1 = 0x8C10 -ARM64_SYSREG_BRBINF30_EL1 = 0x8C74 -ARM64_SYSREG_BRBINF31_EL1 = 0x8C7C -ARM64_SYSREG_BRBINF3_EL1 = 0x8C18 -ARM64_SYSREG_BRBINF4_EL1 = 0x8C20 -ARM64_SYSREG_BRBINF5_EL1 = 0x8C28 -ARM64_SYSREG_BRBINF6_EL1 = 0x8C30 -ARM64_SYSREG_BRBINF7_EL1 = 0x8C38 -ARM64_SYSREG_BRBINF8_EL1 = 0x8C40 -ARM64_SYSREG_BRBINF9_EL1 = 0x8C48 -ARM64_SYSREG_BRBINFINJ_EL1 = 0x8C88 -ARM64_SYSREG_BRBSRC0_EL1 = 0x8C01 -ARM64_SYSREG_BRBSRC10_EL1 = 0x8C51 -ARM64_SYSREG_BRBSRC11_EL1 = 0x8C59 -ARM64_SYSREG_BRBSRC12_EL1 = 0x8C61 -ARM64_SYSREG_BRBSRC13_EL1 = 0x8C69 -ARM64_SYSREG_BRBSRC14_EL1 = 0x8C71 -ARM64_SYSREG_BRBSRC15_EL1 = 0x8C79 -ARM64_SYSREG_BRBSRC16_EL1 = 0x8C05 -ARM64_SYSREG_BRBSRC17_EL1 = 0x8C0D -ARM64_SYSREG_BRBSRC18_EL1 = 0x8C15 -ARM64_SYSREG_BRBSRC19_EL1 = 0x8C1D -ARM64_SYSREG_BRBSRC1_EL1 = 0x8C09 -ARM64_SYSREG_BRBSRC20_EL1 = 0x8C25 -ARM64_SYSREG_BRBSRC21_EL1 = 0x8C2D -ARM64_SYSREG_BRBSRC22_EL1 = 0x8C35 -ARM64_SYSREG_BRBSRC23_EL1 = 0x8C3D -ARM64_SYSREG_BRBSRC24_EL1 = 0x8C45 -ARM64_SYSREG_BRBSRC25_EL1 = 0x8C4D -ARM64_SYSREG_BRBSRC26_EL1 = 0x8C55 -ARM64_SYSREG_BRBSRC27_EL1 = 0x8C5D -ARM64_SYSREG_BRBSRC28_EL1 = 0x8C65 -ARM64_SYSREG_BRBSRC29_EL1 = 0x8C6D -ARM64_SYSREG_BRBSRC2_EL1 = 0x8C11 -ARM64_SYSREG_BRBSRC30_EL1 = 0x8C75 -ARM64_SYSREG_BRBSRC31_EL1 = 0x8C7D -ARM64_SYSREG_BRBSRC3_EL1 = 0x8C19 -ARM64_SYSREG_BRBSRC4_EL1 = 0x8C21 -ARM64_SYSREG_BRBSRC5_EL1 = 0x8C29 -ARM64_SYSREG_BRBSRC6_EL1 = 0x8C31 -ARM64_SYSREG_BRBSRC7_EL1 = 0x8C39 -ARM64_SYSREG_BRBSRC8_EL1 = 0x8C41 -ARM64_SYSREG_BRBSRC9_EL1 = 0x8C49 -ARM64_SYSREG_BRBSRCINJ_EL1 = 0x8C89 -ARM64_SYSREG_BRBTGT0_EL1 = 0x8C02 -ARM64_SYSREG_BRBTGT10_EL1 = 0x8C52 -ARM64_SYSREG_BRBTGT11_EL1 = 0x8C5A -ARM64_SYSREG_BRBTGT12_EL1 = 0x8C62 -ARM64_SYSREG_BRBTGT13_EL1 = 0x8C6A -ARM64_SYSREG_BRBTGT14_EL1 = 0x8C72 -ARM64_SYSREG_BRBTGT15_EL1 = 0x8C7A -ARM64_SYSREG_BRBTGT16_EL1 = 0x8C06 -ARM64_SYSREG_BRBTGT17_EL1 = 0x8C0E -ARM64_SYSREG_BRBTGT18_EL1 = 0x8C16 -ARM64_SYSREG_BRBTGT19_EL1 = 0x8C1E -ARM64_SYSREG_BRBTGT1_EL1 = 0x8C0A -ARM64_SYSREG_BRBTGT20_EL1 = 0x8C26 -ARM64_SYSREG_BRBTGT21_EL1 = 0x8C2E -ARM64_SYSREG_BRBTGT22_EL1 = 0x8C36 -ARM64_SYSREG_BRBTGT23_EL1 = 0x8C3E -ARM64_SYSREG_BRBTGT24_EL1 = 0x8C46 -ARM64_SYSREG_BRBTGT25_EL1 = 0x8C4E -ARM64_SYSREG_BRBTGT26_EL1 = 0x8C56 -ARM64_SYSREG_BRBTGT27_EL1 = 0x8C5E -ARM64_SYSREG_BRBTGT28_EL1 = 0x8C66 -ARM64_SYSREG_BRBTGT29_EL1 = 0x8C6E -ARM64_SYSREG_BRBTGT2_EL1 = 0x8C12 -ARM64_SYSREG_BRBTGT30_EL1 = 0x8C76 -ARM64_SYSREG_BRBTGT31_EL1 = 0x8C7E -ARM64_SYSREG_BRBTGT3_EL1 = 0x8C1A -ARM64_SYSREG_BRBTGT4_EL1 = 0x8C22 -ARM64_SYSREG_BRBTGT5_EL1 = 0x8C2A -ARM64_SYSREG_BRBTGT6_EL1 = 0x8C32 -ARM64_SYSREG_BRBTGT7_EL1 = 0x8C3A -ARM64_SYSREG_BRBTGT8_EL1 = 0x8C42 -ARM64_SYSREG_BRBTGT9_EL1 = 0x8C4A -ARM64_SYSREG_BRBTGTINJ_EL1 = 0x8C8A -ARM64_SYSREG_BRBTS_EL1 = 0x8C82 -ARM64_SYSREG_CCSIDR2_EL1 = 0xC802 -ARM64_SYSREG_CCSIDR_EL1 = 0xC800 -ARM64_SYSREG_CLIDR_EL1 = 0xC801 -ARM64_SYSREG_CNTFRQ_EL0 = 0xDF00 -ARM64_SYSREG_CNTHCTL_EL2 = 0xE708 -ARM64_SYSREG_CNTHPS_CTL_EL2 = 0xE729 -ARM64_SYSREG_CNTHPS_CVAL_EL2 = 0xE72A -ARM64_SYSREG_CNTHPS_TVAL_EL2 = 0xE728 -ARM64_SYSREG_CNTHP_CTL_EL2 = 0xE711 -ARM64_SYSREG_CNTHP_CVAL_EL2 = 0xE712 -ARM64_SYSREG_CNTHP_TVAL_EL2 = 0xE710 -ARM64_SYSREG_CNTHVS_CTL_EL2 = 0xE721 -ARM64_SYSREG_CNTHVS_CVAL_EL2 = 0xE722 -ARM64_SYSREG_CNTHVS_TVAL_EL2 = 0xE720 -ARM64_SYSREG_CNTHV_CTL_EL2 = 0xE719 -ARM64_SYSREG_CNTHV_CVAL_EL2 = 0xE71A -ARM64_SYSREG_CNTHV_TVAL_EL2 = 0xE718 -ARM64_SYSREG_CNTISCALE_EL2 = 0xE705 -ARM64_SYSREG_CNTKCTL_EL1 = 0xC708 -ARM64_SYSREG_CNTKCTL_EL12 = 0xEF08 -ARM64_SYSREG_CNTPCTSS_EL0 = 0xDF05 -ARM64_SYSREG_CNTPCT_EL0 = 0xDF01 -ARM64_SYSREG_CNTPOFF_EL2 = 0xE706 -ARM64_SYSREG_CNTPS_CTL_EL1 = 0xFF11 -ARM64_SYSREG_CNTPS_CVAL_EL1 = 0xFF12 -ARM64_SYSREG_CNTPS_TVAL_EL1 = 0xFF10 -ARM64_SYSREG_CNTP_CTL_EL0 = 0xDF11 -ARM64_SYSREG_CNTP_CTL_EL02 = 0xEF11 -ARM64_SYSREG_CNTP_CVAL_EL0 = 0xDF12 -ARM64_SYSREG_CNTP_CVAL_EL02 = 0xEF12 -ARM64_SYSREG_CNTP_TVAL_EL0 = 0xDF10 -ARM64_SYSREG_CNTP_TVAL_EL02 = 0xEF10 -ARM64_SYSREG_CNTSCALE_EL2 = 0xE704 -ARM64_SYSREG_CNTVCTSS_EL0 = 0xDF06 -ARM64_SYSREG_CNTVCT_EL0 = 0xDF02 -ARM64_SYSREG_CNTVFRQ_EL2 = 0xE707 -ARM64_SYSREG_CNTVOFF_EL2 = 0xE703 -ARM64_SYSREG_CNTV_CTL_EL0 = 0xDF19 -ARM64_SYSREG_CNTV_CTL_EL02 = 0xEF19 -ARM64_SYSREG_CNTV_CVAL_EL0 = 0xDF1A -ARM64_SYSREG_CNTV_CVAL_EL02 = 0xEF1A -ARM64_SYSREG_CNTV_TVAL_EL0 = 0xDF18 -ARM64_SYSREG_CNTV_TVAL_EL02 = 0xEF18 -ARM64_SYSREG_CONTEXTIDR_EL1 = 0xC681 -ARM64_SYSREG_CONTEXTIDR_EL12 = 0xEE81 -ARM64_SYSREG_CONTEXTIDR_EL2 = 0xE681 -ARM64_SYSREG_CPACR_EL1 = 0xC082 -ARM64_SYSREG_CPACR_EL12 = 0xE882 -ARM64_SYSREG_CPM_IOACC_CTL_EL3 = 0xFF90 -ARM64_SYSREG_CPTR_EL2 = 0xE08A -ARM64_SYSREG_CPTR_EL3 = 0xF08A -ARM64_SYSREG_CSSELR_EL1 = 0xD000 -ARM64_SYSREG_CTR_EL0 = 0xD801 -ARM64_SYSREG_CURRENTEL = 0xC212 -ARM64_SYSREG_DACR32_EL2 = 0xE180 -ARM64_SYSREG_DAIF = 0xDA11 -ARM64_SYSREG_DBGAUTHSTATUS_EL1 = 0x83F6 -ARM64_SYSREG_DBGBCR0_EL1 = 0x8005 -ARM64_SYSREG_DBGBCR10_EL1 = 0x8055 -ARM64_SYSREG_DBGBCR11_EL1 = 0x805D -ARM64_SYSREG_DBGBCR12_EL1 = 0x8065 -ARM64_SYSREG_DBGBCR13_EL1 = 0x806D -ARM64_SYSREG_DBGBCR14_EL1 = 0x8075 -ARM64_SYSREG_DBGBCR15_EL1 = 0x807D -ARM64_SYSREG_DBGBCR1_EL1 = 0x800D -ARM64_SYSREG_DBGBCR2_EL1 = 0x8015 -ARM64_SYSREG_DBGBCR3_EL1 = 0x801D -ARM64_SYSREG_DBGBCR4_EL1 = 0x8025 -ARM64_SYSREG_DBGBCR5_EL1 = 0x802D -ARM64_SYSREG_DBGBCR6_EL1 = 0x8035 -ARM64_SYSREG_DBGBCR7_EL1 = 0x803D -ARM64_SYSREG_DBGBCR8_EL1 = 0x8045 -ARM64_SYSREG_DBGBCR9_EL1 = 0x804D -ARM64_SYSREG_DBGBVR0_EL1 = 0x8004 -ARM64_SYSREG_DBGBVR10_EL1 = 0x8054 -ARM64_SYSREG_DBGBVR11_EL1 = 0x805C -ARM64_SYSREG_DBGBVR12_EL1 = 0x8064 -ARM64_SYSREG_DBGBVR13_EL1 = 0x806C -ARM64_SYSREG_DBGBVR14_EL1 = 0x8074 -ARM64_SYSREG_DBGBVR15_EL1 = 0x807C -ARM64_SYSREG_DBGBVR1_EL1 = 0x800C -ARM64_SYSREG_DBGBVR2_EL1 = 0x8014 -ARM64_SYSREG_DBGBVR3_EL1 = 0x801C -ARM64_SYSREG_DBGBVR4_EL1 = 0x8024 -ARM64_SYSREG_DBGBVR5_EL1 = 0x802C -ARM64_SYSREG_DBGBVR6_EL1 = 0x8034 -ARM64_SYSREG_DBGBVR7_EL1 = 0x803C -ARM64_SYSREG_DBGBVR8_EL1 = 0x8044 -ARM64_SYSREG_DBGBVR9_EL1 = 0x804C -ARM64_SYSREG_DBGCLAIMCLR_EL1 = 0x83CE -ARM64_SYSREG_DBGCLAIMSET_EL1 = 0x83C6 -ARM64_SYSREG_DBGDTRRX_EL0 = 0x9828 -ARM64_SYSREG_DBGDTRTX_EL0 = 0x9828 -ARM64_SYSREG_DBGDTR_EL0 = 0x9820 -ARM64_SYSREG_DBGPRCR_EL1 = 0x80A4 -ARM64_SYSREG_DBGVCR32_EL2 = 0xA038 -ARM64_SYSREG_DBGWCR0_EL1 = 0x8007 -ARM64_SYSREG_DBGWCR10_EL1 = 0x8057 -ARM64_SYSREG_DBGWCR11_EL1 = 0x805F -ARM64_SYSREG_DBGWCR12_EL1 = 0x8067 -ARM64_SYSREG_DBGWCR13_EL1 = 0x806F -ARM64_SYSREG_DBGWCR14_EL1 = 0x8077 -ARM64_SYSREG_DBGWCR15_EL1 = 0x807F -ARM64_SYSREG_DBGWCR1_EL1 = 0x800F -ARM64_SYSREG_DBGWCR2_EL1 = 0x8017 -ARM64_SYSREG_DBGWCR3_EL1 = 0x801F -ARM64_SYSREG_DBGWCR4_EL1 = 0x8027 -ARM64_SYSREG_DBGWCR5_EL1 = 0x802F -ARM64_SYSREG_DBGWCR6_EL1 = 0x8037 -ARM64_SYSREG_DBGWCR7_EL1 = 0x803F -ARM64_SYSREG_DBGWCR8_EL1 = 0x8047 -ARM64_SYSREG_DBGWCR9_EL1 = 0x804F -ARM64_SYSREG_DBGWVR0_EL1 = 0x8006 -ARM64_SYSREG_DBGWVR10_EL1 = 0x8056 -ARM64_SYSREG_DBGWVR11_EL1 = 0x805E -ARM64_SYSREG_DBGWVR12_EL1 = 0x8066 -ARM64_SYSREG_DBGWVR13_EL1 = 0x806E -ARM64_SYSREG_DBGWVR14_EL1 = 0x8076 -ARM64_SYSREG_DBGWVR15_EL1 = 0x807E -ARM64_SYSREG_DBGWVR1_EL1 = 0x800E -ARM64_SYSREG_DBGWVR2_EL1 = 0x8016 -ARM64_SYSREG_DBGWVR3_EL1 = 0x801E -ARM64_SYSREG_DBGWVR4_EL1 = 0x8026 -ARM64_SYSREG_DBGWVR5_EL1 = 0x802E -ARM64_SYSREG_DBGWVR6_EL1 = 0x8036 -ARM64_SYSREG_DBGWVR7_EL1 = 0x803E -ARM64_SYSREG_DBGWVR8_EL1 = 0x8046 -ARM64_SYSREG_DBGWVR9_EL1 = 0x804E -ARM64_SYSREG_DCZID_EL0 = 0xD807 -ARM64_SYSREG_DISR_EL1 = 0xC609 -ARM64_SYSREG_DIT = 0xDA15 -ARM64_SYSREG_DLR_EL0 = 0xDA29 -ARM64_SYSREG_DSPSR_EL0 = 0xDA28 -ARM64_SYSREG_ELR_EL1 = 0xC201 -ARM64_SYSREG_ELR_EL12 = 0xEA01 -ARM64_SYSREG_ELR_EL2 = 0xE201 -ARM64_SYSREG_ELR_EL3 = 0xF201 -ARM64_SYSREG_ERRIDR_EL1 = 0xC298 -ARM64_SYSREG_ERRSELR_EL1 = 0xC299 -ARM64_SYSREG_ERXADDR_EL1 = 0xC2A3 -ARM64_SYSREG_ERXCTLR_EL1 = 0xC2A1 -ARM64_SYSREG_ERXFR_EL1 = 0xC2A0 -ARM64_SYSREG_ERXMISC0_EL1 = 0xC2A8 -ARM64_SYSREG_ERXMISC1_EL1 = 0xC2A9 -ARM64_SYSREG_ERXMISC2_EL1 = 0xC2AA -ARM64_SYSREG_ERXMISC3_EL1 = 0xC2AB -ARM64_SYSREG_ERXPFGCDN_EL1 = 0xC2A6 -ARM64_SYSREG_ERXPFGCTL_EL1 = 0xC2A5 -ARM64_SYSREG_ERXPFGF_EL1 = 0xC2A4 -ARM64_SYSREG_ERXSTATUS_EL1 = 0xC2A2 -ARM64_SYSREG_ESR_EL1 = 0xC290 -ARM64_SYSREG_ESR_EL12 = 0xEA90 -ARM64_SYSREG_ESR_EL2 = 0xE290 -ARM64_SYSREG_ESR_EL3 = 0xF290 -ARM64_SYSREG_FAR_EL1 = 0xC300 -ARM64_SYSREG_FAR_EL12 = 0xEB00 -ARM64_SYSREG_FAR_EL2 = 0xE300 -ARM64_SYSREG_FAR_EL3 = 0xF300 -ARM64_SYSREG_FPCR = 0xDA20 -ARM64_SYSREG_FPEXC32_EL2 = 0xE298 -ARM64_SYSREG_FPSR = 0xDA21 -ARM64_SYSREG_GCR_EL1 = 0xC086 -ARM64_SYSREG_GMID_EL1 = 0xC804 -ARM64_SYSREG_GPCCR_EL3 = 0xF10E -ARM64_SYSREG_GPTBR_EL3 = 0xF10C -ARM64_SYSREG_HACR_EL2 = 0xE08F -ARM64_SYSREG_HCRX_EL2 = 0xE092 -ARM64_SYSREG_HCR_EL2 = 0xE088 -ARM64_SYSREG_HDFGRTR_EL2 = 0xE18C -ARM64_SYSREG_HDFGWTR_EL2 = 0xE18D -ARM64_SYSREG_HFGITR_EL2 = 0xE08E -ARM64_SYSREG_HFGRTR_EL2 = 0xE08C -ARM64_SYSREG_HFGWTR_EL2 = 0xE08D -ARM64_SYSREG_HPFAR_EL2 = 0xE304 -ARM64_SYSREG_HSTR_EL2 = 0xE08B -ARM64_SYSREG_ICC_AP0R0_EL1 = 0xC644 -ARM64_SYSREG_ICC_AP0R1_EL1 = 0xC645 -ARM64_SYSREG_ICC_AP0R2_EL1 = 0xC646 -ARM64_SYSREG_ICC_AP0R3_EL1 = 0xC647 -ARM64_SYSREG_ICC_AP1R0_EL1 = 0xC648 -ARM64_SYSREG_ICC_AP1R1_EL1 = 0xC649 -ARM64_SYSREG_ICC_AP1R2_EL1 = 0xC64A -ARM64_SYSREG_ICC_AP1R3_EL1 = 0xC64B -ARM64_SYSREG_ICC_ASGI1R_EL1 = 0xC65E -ARM64_SYSREG_ICC_BPR0_EL1 = 0xC643 -ARM64_SYSREG_ICC_BPR1_EL1 = 0xC663 -ARM64_SYSREG_ICC_CTLR_EL1 = 0xC664 -ARM64_SYSREG_ICC_CTLR_EL3 = 0xF664 -ARM64_SYSREG_ICC_DIR_EL1 = 0xC659 -ARM64_SYSREG_ICC_EOIR0_EL1 = 0xC641 -ARM64_SYSREG_ICC_EOIR1_EL1 = 0xC661 -ARM64_SYSREG_ICC_HPPIR0_EL1 = 0xC642 -ARM64_SYSREG_ICC_HPPIR1_EL1 = 0xC662 -ARM64_SYSREG_ICC_IAR0_EL1 = 0xC640 -ARM64_SYSREG_ICC_IAR1_EL1 = 0xC660 -ARM64_SYSREG_ICC_IGRPEN0_EL1 = 0xC666 -ARM64_SYSREG_ICC_IGRPEN1_EL1 = 0xC667 -ARM64_SYSREG_ICC_IGRPEN1_EL3 = 0xF667 -ARM64_SYSREG_ICC_PMR_EL1 = 0xC230 -ARM64_SYSREG_ICC_RPR_EL1 = 0xC65B -ARM64_SYSREG_ICC_SGI0R_EL1 = 0xC65F -ARM64_SYSREG_ICC_SGI1R_EL1 = 0xC65D -ARM64_SYSREG_ICC_SRE_EL1 = 0xC665 -ARM64_SYSREG_ICC_SRE_EL2 = 0xE64D -ARM64_SYSREG_ICC_SRE_EL3 = 0xF665 -ARM64_SYSREG_ICH_AP0R0_EL2 = 0xE640 -ARM64_SYSREG_ICH_AP0R1_EL2 = 0xE641 -ARM64_SYSREG_ICH_AP0R2_EL2 = 0xE642 -ARM64_SYSREG_ICH_AP0R3_EL2 = 0xE643 -ARM64_SYSREG_ICH_AP1R0_EL2 = 0xE648 -ARM64_SYSREG_ICH_AP1R1_EL2 = 0xE649 -ARM64_SYSREG_ICH_AP1R2_EL2 = 0xE64A -ARM64_SYSREG_ICH_AP1R3_EL2 = 0xE64B -ARM64_SYSREG_ICH_EISR_EL2 = 0xE65B -ARM64_SYSREG_ICH_ELRSR_EL2 = 0xE65D -ARM64_SYSREG_ICH_HCR_EL2 = 0xE658 -ARM64_SYSREG_ICH_LR0_EL2 = 0xE660 -ARM64_SYSREG_ICH_LR10_EL2 = 0xE66A -ARM64_SYSREG_ICH_LR11_EL2 = 0xE66B -ARM64_SYSREG_ICH_LR12_EL2 = 0xE66C -ARM64_SYSREG_ICH_LR13_EL2 = 0xE66D -ARM64_SYSREG_ICH_LR14_EL2 = 0xE66E -ARM64_SYSREG_ICH_LR15_EL2 = 0xE66F -ARM64_SYSREG_ICH_LR1_EL2 = 0xE661 -ARM64_SYSREG_ICH_LR2_EL2 = 0xE662 -ARM64_SYSREG_ICH_LR3_EL2 = 0xE663 -ARM64_SYSREG_ICH_LR4_EL2 = 0xE664 -ARM64_SYSREG_ICH_LR5_EL2 = 0xE665 -ARM64_SYSREG_ICH_LR6_EL2 = 0xE666 -ARM64_SYSREG_ICH_LR7_EL2 = 0xE667 -ARM64_SYSREG_ICH_LR8_EL2 = 0xE668 -ARM64_SYSREG_ICH_LR9_EL2 = 0xE669 -ARM64_SYSREG_ICH_MISR_EL2 = 0xE65A -ARM64_SYSREG_ICH_VMCR_EL2 = 0xE65F -ARM64_SYSREG_ICH_VTR_EL2 = 0xE659 -ARM64_SYSREG_ID_AA64AFR0_EL1 = 0xC02C -ARM64_SYSREG_ID_AA64AFR1_EL1 = 0xC02D -ARM64_SYSREG_ID_AA64DFR0_EL1 = 0xC028 -ARM64_SYSREG_ID_AA64DFR1_EL1 = 0xC029 -ARM64_SYSREG_ID_AA64ISAR0_EL1 = 0xC030 -ARM64_SYSREG_ID_AA64ISAR1_EL1 = 0xC031 -ARM64_SYSREG_ID_AA64ISAR2_EL1 = 0xC032 -ARM64_SYSREG_ID_AA64MMFR0_EL1 = 0xC038 -ARM64_SYSREG_ID_AA64MMFR1_EL1 = 0xC039 -ARM64_SYSREG_ID_AA64MMFR2_EL1 = 0xC03A -ARM64_SYSREG_ID_AA64PFR0_EL1 = 0xC020 -ARM64_SYSREG_ID_AA64PFR1_EL1 = 0xC021 -ARM64_SYSREG_ID_AA64SMFR0_EL1 = 0xC025 -ARM64_SYSREG_ID_AA64ZFR0_EL1 = 0xC024 -ARM64_SYSREG_ID_AFR0_EL1 = 0xC00B -ARM64_SYSREG_ID_DFR0_EL1 = 0xC00A -ARM64_SYSREG_ID_ISAR0_EL1 = 0xC010 -ARM64_SYSREG_ID_ISAR1_EL1 = 0xC011 -ARM64_SYSREG_ID_ISAR2_EL1 = 0xC012 -ARM64_SYSREG_ID_ISAR3_EL1 = 0xC013 -ARM64_SYSREG_ID_ISAR4_EL1 = 0xC014 -ARM64_SYSREG_ID_ISAR5_EL1 = 0xC015 -ARM64_SYSREG_ID_ISAR6_EL1 = 0xC017 -ARM64_SYSREG_ID_MMFR0_EL1 = 0xC00C -ARM64_SYSREG_ID_MMFR1_EL1 = 0xC00D -ARM64_SYSREG_ID_MMFR2_EL1 = 0xC00E -ARM64_SYSREG_ID_MMFR3_EL1 = 0xC00F -ARM64_SYSREG_ID_MMFR4_EL1 = 0xC016 -ARM64_SYSREG_ID_MMFR5_EL1 = 0xC01E -ARM64_SYSREG_ID_PFR0_EL1 = 0xC008 -ARM64_SYSREG_ID_PFR1_EL1 = 0xC009 -ARM64_SYSREG_ID_PFR2_EL1 = 0xC01C -ARM64_SYSREG_IFSR32_EL2 = 0xE281 -ARM64_SYSREG_ISR_EL1 = 0xC608 -ARM64_SYSREG_LORC_EL1 = 0xC523 -ARM64_SYSREG_LOREA_EL1 = 0xC521 -ARM64_SYSREG_LORID_EL1 = 0xC527 -ARM64_SYSREG_LORN_EL1 = 0xC522 -ARM64_SYSREG_LORSA_EL1 = 0xC520 -ARM64_SYSREG_MAIR_EL1 = 0xC510 -ARM64_SYSREG_MAIR_EL12 = 0xED10 -ARM64_SYSREG_MAIR_EL2 = 0xE510 -ARM64_SYSREG_MAIR_EL3 = 0xF510 -ARM64_SYSREG_MDCCINT_EL1 = 0x8010 -ARM64_SYSREG_MDCCSR_EL0 = 0x9808 -ARM64_SYSREG_MDCR_EL2 = 0xE089 -ARM64_SYSREG_MDCR_EL3 = 0xF099 -ARM64_SYSREG_MDRAR_EL1 = 0x8080 -ARM64_SYSREG_MDSCR_EL1 = 0x8012 -ARM64_SYSREG_MFAR_EL3 = 0xF305 -ARM64_SYSREG_MIDR_EL1 = 0xC000 -ARM64_SYSREG_MPAM0_EL1 = 0xC529 -ARM64_SYSREG_MPAM1_EL1 = 0xC528 -ARM64_SYSREG_MPAM1_EL12 = 0xED28 -ARM64_SYSREG_MPAM2_EL2 = 0xE528 -ARM64_SYSREG_MPAM3_EL3 = 0xF528 -ARM64_SYSREG_MPAMHCR_EL2 = 0xE520 -ARM64_SYSREG_MPAMIDR_EL1 = 0xC524 -ARM64_SYSREG_MPAMSM_EL1 = 0xC52B -ARM64_SYSREG_MPAMVPM0_EL2 = 0xE530 -ARM64_SYSREG_MPAMVPM1_EL2 = 0xE531 -ARM64_SYSREG_MPAMVPM2_EL2 = 0xE532 -ARM64_SYSREG_MPAMVPM3_EL2 = 0xE533 -ARM64_SYSREG_MPAMVPM4_EL2 = 0xE534 -ARM64_SYSREG_MPAMVPM5_EL2 = 0xE535 -ARM64_SYSREG_MPAMVPM6_EL2 = 0xE536 -ARM64_SYSREG_MPAMVPM7_EL2 = 0xE537 -ARM64_SYSREG_MPAMVPMV_EL2 = 0xE521 -ARM64_SYSREG_MPIDR_EL1 = 0xC005 -ARM64_SYSREG_MPUIR_EL1 = 0xC004 -ARM64_SYSREG_MPUIR_EL2 = 0xE004 -ARM64_SYSREG_MVFR0_EL1 = 0xC018 -ARM64_SYSREG_MVFR1_EL1 = 0xC019 -ARM64_SYSREG_MVFR2_EL1 = 0xC01A -ARM64_SYSREG_NZCV = 0xDA10 -ARM64_SYSREG_OSDLR_EL1 = 0x809C -ARM64_SYSREG_OSDTRRX_EL1 = 0x8002 -ARM64_SYSREG_OSDTRTX_EL1 = 0x801A -ARM64_SYSREG_OSECCR_EL1 = 0x8032 -ARM64_SYSREG_OSLAR_EL1 = 0x8084 -ARM64_SYSREG_OSLSR_EL1 = 0x808C -ARM64_SYSREG_PAN = 0xC213 -ARM64_SYSREG_PAR_EL1 = 0xC3A0 -ARM64_SYSREG_PMBIDR_EL1 = 0xC4D7 -ARM64_SYSREG_PMBLIMITR_EL1 = 0xC4D0 -ARM64_SYSREG_PMBPTR_EL1 = 0xC4D1 -ARM64_SYSREG_PMBSR_EL1 = 0xC4D3 -ARM64_SYSREG_PMCCFILTR_EL0 = 0xDF7F -ARM64_SYSREG_PMCCNTR_EL0 = 0xDCE8 -ARM64_SYSREG_PMCEID0_EL0 = 0xDCE6 -ARM64_SYSREG_PMCEID1_EL0 = 0xDCE7 -ARM64_SYSREG_PMCNTENCLR_EL0 = 0xDCE2 -ARM64_SYSREG_PMCNTENSET_EL0 = 0xDCE1 -ARM64_SYSREG_PMCR_EL0 = 0xDCE0 -ARM64_SYSREG_PMEVCNTR0_EL0 = 0xDF40 -ARM64_SYSREG_PMEVCNTR10_EL0 = 0xDF4A -ARM64_SYSREG_PMEVCNTR11_EL0 = 0xDF4B -ARM64_SYSREG_PMEVCNTR12_EL0 = 0xDF4C -ARM64_SYSREG_PMEVCNTR13_EL0 = 0xDF4D -ARM64_SYSREG_PMEVCNTR14_EL0 = 0xDF4E -ARM64_SYSREG_PMEVCNTR15_EL0 = 0xDF4F -ARM64_SYSREG_PMEVCNTR16_EL0 = 0xDF50 -ARM64_SYSREG_PMEVCNTR17_EL0 = 0xDF51 -ARM64_SYSREG_PMEVCNTR18_EL0 = 0xDF52 -ARM64_SYSREG_PMEVCNTR19_EL0 = 0xDF53 -ARM64_SYSREG_PMEVCNTR1_EL0 = 0xDF41 -ARM64_SYSREG_PMEVCNTR20_EL0 = 0xDF54 -ARM64_SYSREG_PMEVCNTR21_EL0 = 0xDF55 -ARM64_SYSREG_PMEVCNTR22_EL0 = 0xDF56 -ARM64_SYSREG_PMEVCNTR23_EL0 = 0xDF57 -ARM64_SYSREG_PMEVCNTR24_EL0 = 0xDF58 -ARM64_SYSREG_PMEVCNTR25_EL0 = 0xDF59 -ARM64_SYSREG_PMEVCNTR26_EL0 = 0xDF5A -ARM64_SYSREG_PMEVCNTR27_EL0 = 0xDF5B -ARM64_SYSREG_PMEVCNTR28_EL0 = 0xDF5C -ARM64_SYSREG_PMEVCNTR29_EL0 = 0xDF5D -ARM64_SYSREG_PMEVCNTR2_EL0 = 0xDF42 -ARM64_SYSREG_PMEVCNTR30_EL0 = 0xDF5E -ARM64_SYSREG_PMEVCNTR3_EL0 = 0xDF43 -ARM64_SYSREG_PMEVCNTR4_EL0 = 0xDF44 -ARM64_SYSREG_PMEVCNTR5_EL0 = 0xDF45 -ARM64_SYSREG_PMEVCNTR6_EL0 = 0xDF46 -ARM64_SYSREG_PMEVCNTR7_EL0 = 0xDF47 -ARM64_SYSREG_PMEVCNTR8_EL0 = 0xDF48 -ARM64_SYSREG_PMEVCNTR9_EL0 = 0xDF49 -ARM64_SYSREG_PMEVTYPER0_EL0 = 0xDF60 -ARM64_SYSREG_PMEVTYPER10_EL0 = 0xDF6A -ARM64_SYSREG_PMEVTYPER11_EL0 = 0xDF6B -ARM64_SYSREG_PMEVTYPER12_EL0 = 0xDF6C -ARM64_SYSREG_PMEVTYPER13_EL0 = 0xDF6D -ARM64_SYSREG_PMEVTYPER14_EL0 = 0xDF6E -ARM64_SYSREG_PMEVTYPER15_EL0 = 0xDF6F -ARM64_SYSREG_PMEVTYPER16_EL0 = 0xDF70 -ARM64_SYSREG_PMEVTYPER17_EL0 = 0xDF71 -ARM64_SYSREG_PMEVTYPER18_EL0 = 0xDF72 -ARM64_SYSREG_PMEVTYPER19_EL0 = 0xDF73 -ARM64_SYSREG_PMEVTYPER1_EL0 = 0xDF61 -ARM64_SYSREG_PMEVTYPER20_EL0 = 0xDF74 -ARM64_SYSREG_PMEVTYPER21_EL0 = 0xDF75 -ARM64_SYSREG_PMEVTYPER22_EL0 = 0xDF76 -ARM64_SYSREG_PMEVTYPER23_EL0 = 0xDF77 -ARM64_SYSREG_PMEVTYPER24_EL0 = 0xDF78 -ARM64_SYSREG_PMEVTYPER25_EL0 = 0xDF79 -ARM64_SYSREG_PMEVTYPER26_EL0 = 0xDF7A -ARM64_SYSREG_PMEVTYPER27_EL0 = 0xDF7B -ARM64_SYSREG_PMEVTYPER28_EL0 = 0xDF7C -ARM64_SYSREG_PMEVTYPER29_EL0 = 0xDF7D -ARM64_SYSREG_PMEVTYPER2_EL0 = 0xDF62 -ARM64_SYSREG_PMEVTYPER30_EL0 = 0xDF7E -ARM64_SYSREG_PMEVTYPER3_EL0 = 0xDF63 -ARM64_SYSREG_PMEVTYPER4_EL0 = 0xDF64 -ARM64_SYSREG_PMEVTYPER5_EL0 = 0xDF65 -ARM64_SYSREG_PMEVTYPER6_EL0 = 0xDF66 -ARM64_SYSREG_PMEVTYPER7_EL0 = 0xDF67 -ARM64_SYSREG_PMEVTYPER8_EL0 = 0xDF68 -ARM64_SYSREG_PMEVTYPER9_EL0 = 0xDF69 -ARM64_SYSREG_PMINTENCLR_EL1 = 0xC4F2 -ARM64_SYSREG_PMINTENSET_EL1 = 0xC4F1 -ARM64_SYSREG_PMMIR_EL1 = 0xC4F6 -ARM64_SYSREG_PMOVSCLR_EL0 = 0xDCE3 -ARM64_SYSREG_PMOVSSET_EL0 = 0xDCF3 -ARM64_SYSREG_PMSCR_EL1 = 0xC4C8 -ARM64_SYSREG_PMSCR_EL12 = 0xECC8 -ARM64_SYSREG_PMSCR_EL2 = 0xE4C8 -ARM64_SYSREG_PMSELR_EL0 = 0xDCE5 -ARM64_SYSREG_PMSEVFR_EL1 = 0xC4CD -ARM64_SYSREG_PMSFCR_EL1 = 0xC4CC -ARM64_SYSREG_PMSICR_EL1 = 0xC4CA -ARM64_SYSREG_PMSIDR_EL1 = 0xC4CF -ARM64_SYSREG_PMSIRR_EL1 = 0xC4CB -ARM64_SYSREG_PMSLATFR_EL1 = 0xC4CE -ARM64_SYSREG_PMSNEVFR_EL1 = 0xC4C9 -ARM64_SYSREG_PMSWINC_EL0 = 0xDCE4 -ARM64_SYSREG_PMUSERENR_EL0 = 0xDCF0 -ARM64_SYSREG_PMXEVCNTR_EL0 = 0xDCEA -ARM64_SYSREG_PMXEVTYPER_EL0 = 0xDCE9 -ARM64_SYSREG_PRBAR10_EL1 = 0xC368 -ARM64_SYSREG_PRBAR10_EL2 = 0xE368 -ARM64_SYSREG_PRBAR11_EL1 = 0xC36C -ARM64_SYSREG_PRBAR11_EL2 = 0xE36C -ARM64_SYSREG_PRBAR12_EL1 = 0xC370 -ARM64_SYSREG_PRBAR12_EL2 = 0xE370 -ARM64_SYSREG_PRBAR13_EL1 = 0xC374 -ARM64_SYSREG_PRBAR13_EL2 = 0xE374 -ARM64_SYSREG_PRBAR14_EL1 = 0xC378 -ARM64_SYSREG_PRBAR14_EL2 = 0xE378 -ARM64_SYSREG_PRBAR15_EL1 = 0xC37C -ARM64_SYSREG_PRBAR15_EL2 = 0xE37C -ARM64_SYSREG_PRBAR1_EL1 = 0xC344 -ARM64_SYSREG_PRBAR1_EL2 = 0xE344 -ARM64_SYSREG_PRBAR2_EL1 = 0xC348 -ARM64_SYSREG_PRBAR2_EL2 = 0xE348 -ARM64_SYSREG_PRBAR3_EL1 = 0xC34C -ARM64_SYSREG_PRBAR3_EL2 = 0xE34C -ARM64_SYSREG_PRBAR4_EL1 = 0xC350 -ARM64_SYSREG_PRBAR4_EL2 = 0xE350 -ARM64_SYSREG_PRBAR5_EL1 = 0xC354 -ARM64_SYSREG_PRBAR5_EL2 = 0xE354 -ARM64_SYSREG_PRBAR6_EL1 = 0xC358 -ARM64_SYSREG_PRBAR6_EL2 = 0xE358 -ARM64_SYSREG_PRBAR7_EL1 = 0xC35C -ARM64_SYSREG_PRBAR7_EL2 = 0xE35C -ARM64_SYSREG_PRBAR8_EL1 = 0xC360 -ARM64_SYSREG_PRBAR8_EL2 = 0xE360 -ARM64_SYSREG_PRBAR9_EL1 = 0xC364 -ARM64_SYSREG_PRBAR9_EL2 = 0xE364 -ARM64_SYSREG_PRBAR_EL1 = 0xC340 -ARM64_SYSREG_PRBAR_EL2 = 0xE340 -ARM64_SYSREG_PRENR_EL1 = 0xC309 -ARM64_SYSREG_PRENR_EL2 = 0xE309 -ARM64_SYSREG_PRLAR10_EL1 = 0xC369 -ARM64_SYSREG_PRLAR10_EL2 = 0xE369 -ARM64_SYSREG_PRLAR11_EL1 = 0xC36D -ARM64_SYSREG_PRLAR11_EL2 = 0xE36D -ARM64_SYSREG_PRLAR12_EL1 = 0xC371 -ARM64_SYSREG_PRLAR12_EL2 = 0xE371 -ARM64_SYSREG_PRLAR13_EL1 = 0xC375 -ARM64_SYSREG_PRLAR13_EL2 = 0xE375 -ARM64_SYSREG_PRLAR14_EL1 = 0xC379 -ARM64_SYSREG_PRLAR14_EL2 = 0xE379 -ARM64_SYSREG_PRLAR15_EL1 = 0xC37D -ARM64_SYSREG_PRLAR15_EL2 = 0xE37D -ARM64_SYSREG_PRLAR1_EL1 = 0xC345 -ARM64_SYSREG_PRLAR1_EL2 = 0xE345 -ARM64_SYSREG_PRLAR2_EL1 = 0xC349 -ARM64_SYSREG_PRLAR2_EL2 = 0xE349 -ARM64_SYSREG_PRLAR3_EL1 = 0xC34D -ARM64_SYSREG_PRLAR3_EL2 = 0xE34D -ARM64_SYSREG_PRLAR4_EL1 = 0xC351 -ARM64_SYSREG_PRLAR4_EL2 = 0xE351 -ARM64_SYSREG_PRLAR5_EL1 = 0xC355 -ARM64_SYSREG_PRLAR5_EL2 = 0xE355 -ARM64_SYSREG_PRLAR6_EL1 = 0xC359 -ARM64_SYSREG_PRLAR6_EL2 = 0xE359 -ARM64_SYSREG_PRLAR7_EL1 = 0xC35D -ARM64_SYSREG_PRLAR7_EL2 = 0xE35D -ARM64_SYSREG_PRLAR8_EL1 = 0xC361 -ARM64_SYSREG_PRLAR8_EL2 = 0xE361 -ARM64_SYSREG_PRLAR9_EL1 = 0xC365 -ARM64_SYSREG_PRLAR9_EL2 = 0xE365 -ARM64_SYSREG_PRLAR_EL1 = 0xC341 -ARM64_SYSREG_PRLAR_EL2 = 0xE341 -ARM64_SYSREG_PRSELR_EL1 = 0xC311 -ARM64_SYSREG_PRSELR_EL2 = 0xE311 -ARM64_SYSREG_REVIDR_EL1 = 0xC006 -ARM64_SYSREG_RGSR_EL1 = 0xC085 -ARM64_SYSREG_RMR_EL1 = 0xC602 -ARM64_SYSREG_RMR_EL2 = 0xE602 -ARM64_SYSREG_RMR_EL3 = 0xF602 -ARM64_SYSREG_RNDR = 0xD920 -ARM64_SYSREG_RNDRRS = 0xD921 -ARM64_SYSREG_RVBAR_EL1 = 0xC601 -ARM64_SYSREG_RVBAR_EL2 = 0xE601 -ARM64_SYSREG_RVBAR_EL3 = 0xF601 -ARM64_SYSREG_SCR_EL3 = 0xF088 -ARM64_SYSREG_SCTLR_EL1 = 0xC080 -ARM64_SYSREG_SCTLR_EL12 = 0xE880 -ARM64_SYSREG_SCTLR_EL2 = 0xE080 -ARM64_SYSREG_SCTLR_EL3 = 0xF080 -ARM64_SYSREG_SCXTNUM_EL0 = 0xDE87 -ARM64_SYSREG_SCXTNUM_EL1 = 0xC687 -ARM64_SYSREG_SCXTNUM_EL12 = 0xEE87 -ARM64_SYSREG_SCXTNUM_EL2 = 0xE687 -ARM64_SYSREG_SCXTNUM_EL3 = 0xF687 -ARM64_SYSREG_SDER32_EL2 = 0xE099 -ARM64_SYSREG_SDER32_EL3 = 0xF089 -ARM64_SYSREG_SMCR_EL1 = 0xC096 -ARM64_SYSREG_SMCR_EL12 = 0xE896 -ARM64_SYSREG_SMCR_EL2 = 0xE096 -ARM64_SYSREG_SMCR_EL3 = 0xF096 -ARM64_SYSREG_SMIDR_EL1 = 0xC806 -ARM64_SYSREG_SMPRIMAP_EL2 = 0xE095 -ARM64_SYSREG_SMPRI_EL1 = 0xC094 -ARM64_SYSREG_SPSEL = 0xC210 -ARM64_SYSREG_SPSR_ABT = 0xE219 -ARM64_SYSREG_SPSR_EL1 = 0xC200 -ARM64_SYSREG_SPSR_EL12 = 0xEA00 -ARM64_SYSREG_SPSR_EL2 = 0xE200 -ARM64_SYSREG_SPSR_EL3 = 0xF200 -ARM64_SYSREG_SPSR_FIQ = 0xE21B -ARM64_SYSREG_SPSR_IRQ = 0xE218 -ARM64_SYSREG_SPSR_UND = 0xE21A -ARM64_SYSREG_SP_EL0 = 0xC208 -ARM64_SYSREG_SP_EL1 = 0xE208 -ARM64_SYSREG_SP_EL2 = 0xF208 -ARM64_SYSREG_SSBS = 0xDA16 -ARM64_SYSREG_SVCR = 0xDA12 -ARM64_SYSREG_TCO = 0xDA17 -ARM64_SYSREG_TCR_EL1 = 0xC102 -ARM64_SYSREG_TCR_EL12 = 0xE902 -ARM64_SYSREG_TCR_EL2 = 0xE102 -ARM64_SYSREG_TCR_EL3 = 0xF102 -ARM64_SYSREG_TEECR32_EL1 = 0x9000 -ARM64_SYSREG_TEEHBR32_EL1 = 0x9080 -ARM64_SYSREG_TFSRE0_EL1 = 0xC2B1 -ARM64_SYSREG_TFSR_EL1 = 0xC2B0 -ARM64_SYSREG_TFSR_EL12 = 0xEAB0 -ARM64_SYSREG_TFSR_EL2 = 0xE2B0 -ARM64_SYSREG_TFSR_EL3 = 0xF2B0 -ARM64_SYSREG_TPIDR2_EL0 = 0xDE85 -ARM64_SYSREG_TPIDRRO_EL0 = 0xDE83 -ARM64_SYSREG_TPIDR_EL0 = 0xDE82 -ARM64_SYSREG_TPIDR_EL1 = 0xC684 -ARM64_SYSREG_TPIDR_EL2 = 0xE682 -ARM64_SYSREG_TPIDR_EL3 = 0xF682 -ARM64_SYSREG_TRBBASER_EL1 = 0xC4DA -ARM64_SYSREG_TRBIDR_EL1 = 0xC4DF -ARM64_SYSREG_TRBLIMITR_EL1 = 0xC4D8 -ARM64_SYSREG_TRBMAR_EL1 = 0xC4DC -ARM64_SYSREG_TRBPTR_EL1 = 0xC4D9 -ARM64_SYSREG_TRBSR_EL1 = 0xC4DB -ARM64_SYSREG_TRBTRG_EL1 = 0xC4DE -ARM64_SYSREG_TRCACATR0 = 0x8902 -ARM64_SYSREG_TRCACATR1 = 0x8912 -ARM64_SYSREG_TRCACATR10 = 0x8923 -ARM64_SYSREG_TRCACATR11 = 0x8933 -ARM64_SYSREG_TRCACATR12 = 0x8943 -ARM64_SYSREG_TRCACATR13 = 0x8953 -ARM64_SYSREG_TRCACATR14 = 0x8963 -ARM64_SYSREG_TRCACATR15 = 0x8973 -ARM64_SYSREG_TRCACATR2 = 0x8922 -ARM64_SYSREG_TRCACATR3 = 0x8932 -ARM64_SYSREG_TRCACATR4 = 0x8942 -ARM64_SYSREG_TRCACATR5 = 0x8952 -ARM64_SYSREG_TRCACATR6 = 0x8962 -ARM64_SYSREG_TRCACATR7 = 0x8972 -ARM64_SYSREG_TRCACATR8 = 0x8903 -ARM64_SYSREG_TRCACATR9 = 0x8913 -ARM64_SYSREG_TRCACVR0 = 0x8900 -ARM64_SYSREG_TRCACVR1 = 0x8910 -ARM64_SYSREG_TRCACVR10 = 0x8921 -ARM64_SYSREG_TRCACVR11 = 0x8931 -ARM64_SYSREG_TRCACVR12 = 0x8941 -ARM64_SYSREG_TRCACVR13 = 0x8951 -ARM64_SYSREG_TRCACVR14 = 0x8961 -ARM64_SYSREG_TRCACVR15 = 0x8971 -ARM64_SYSREG_TRCACVR2 = 0x8920 -ARM64_SYSREG_TRCACVR3 = 0x8930 -ARM64_SYSREG_TRCACVR4 = 0x8940 -ARM64_SYSREG_TRCACVR5 = 0x8950 -ARM64_SYSREG_TRCACVR6 = 0x8960 -ARM64_SYSREG_TRCACVR7 = 0x8970 -ARM64_SYSREG_TRCACVR8 = 0x8901 -ARM64_SYSREG_TRCACVR9 = 0x8911 -ARM64_SYSREG_TRCAUTHSTATUS = 0x8BF6 -ARM64_SYSREG_TRCAUXCTLR = 0x8830 -ARM64_SYSREG_TRCBBCTLR = 0x8878 -ARM64_SYSREG_TRCCCCTLR = 0x8870 -ARM64_SYSREG_TRCCIDCCTLR0 = 0x8982 -ARM64_SYSREG_TRCCIDCCTLR1 = 0x898A -ARM64_SYSREG_TRCCIDCVR0 = 0x8980 -ARM64_SYSREG_TRCCIDCVR1 = 0x8990 -ARM64_SYSREG_TRCCIDCVR2 = 0x89A0 -ARM64_SYSREG_TRCCIDCVR3 = 0x89B0 -ARM64_SYSREG_TRCCIDCVR4 = 0x89C0 -ARM64_SYSREG_TRCCIDCVR5 = 0x89D0 -ARM64_SYSREG_TRCCIDCVR6 = 0x89E0 -ARM64_SYSREG_TRCCIDCVR7 = 0x89F0 -ARM64_SYSREG_TRCCIDR0 = 0x8BE7 -ARM64_SYSREG_TRCCIDR1 = 0x8BEF -ARM64_SYSREG_TRCCIDR2 = 0x8BF7 -ARM64_SYSREG_TRCCIDR3 = 0x8BFF -ARM64_SYSREG_TRCCLAIMCLR = 0x8BCE -ARM64_SYSREG_TRCCLAIMSET = 0x8BC6 -ARM64_SYSREG_TRCCNTCTLR0 = 0x8825 -ARM64_SYSREG_TRCCNTCTLR1 = 0x882D -ARM64_SYSREG_TRCCNTCTLR2 = 0x8835 -ARM64_SYSREG_TRCCNTCTLR3 = 0x883D -ARM64_SYSREG_TRCCNTRLDVR0 = 0x8805 -ARM64_SYSREG_TRCCNTRLDVR1 = 0x880D -ARM64_SYSREG_TRCCNTRLDVR2 = 0x8815 -ARM64_SYSREG_TRCCNTRLDVR3 = 0x881D -ARM64_SYSREG_TRCCNTVR0 = 0x8845 -ARM64_SYSREG_TRCCNTVR1 = 0x884D -ARM64_SYSREG_TRCCNTVR2 = 0x8855 -ARM64_SYSREG_TRCCNTVR3 = 0x885D -ARM64_SYSREG_TRCCONFIGR = 0x8820 -ARM64_SYSREG_TRCDEVAFF0 = 0x8BD6 -ARM64_SYSREG_TRCDEVAFF1 = 0x8BDE -ARM64_SYSREG_TRCDEVARCH = 0x8BFE -ARM64_SYSREG_TRCDEVID = 0x8B97 -ARM64_SYSREG_TRCDEVTYPE = 0x8B9F -ARM64_SYSREG_TRCDVCMR0 = 0x8906 -ARM64_SYSREG_TRCDVCMR1 = 0x8926 -ARM64_SYSREG_TRCDVCMR2 = 0x8946 -ARM64_SYSREG_TRCDVCMR3 = 0x8966 -ARM64_SYSREG_TRCDVCMR4 = 0x8907 -ARM64_SYSREG_TRCDVCMR5 = 0x8927 -ARM64_SYSREG_TRCDVCMR6 = 0x8947 -ARM64_SYSREG_TRCDVCMR7 = 0x8967 -ARM64_SYSREG_TRCDVCVR0 = 0x8904 -ARM64_SYSREG_TRCDVCVR1 = 0x8924 -ARM64_SYSREG_TRCDVCVR2 = 0x8944 -ARM64_SYSREG_TRCDVCVR3 = 0x8964 -ARM64_SYSREG_TRCDVCVR4 = 0x8905 -ARM64_SYSREG_TRCDVCVR5 = 0x8925 -ARM64_SYSREG_TRCDVCVR6 = 0x8945 -ARM64_SYSREG_TRCDVCVR7 = 0x8965 -ARM64_SYSREG_TRCEVENTCTL0R = 0x8840 -ARM64_SYSREG_TRCEVENTCTL1R = 0x8848 -ARM64_SYSREG_TRCEXTINSELR = 0x8844 -ARM64_SYSREG_TRCEXTINSELR0 = 0x8844 -ARM64_SYSREG_TRCEXTINSELR1 = 0x884C -ARM64_SYSREG_TRCEXTINSELR2 = 0x8854 -ARM64_SYSREG_TRCEXTINSELR3 = 0x885C -ARM64_SYSREG_TRCIDR0 = 0x8847 -ARM64_SYSREG_TRCIDR1 = 0x884F -ARM64_SYSREG_TRCIDR10 = 0x8816 -ARM64_SYSREG_TRCIDR11 = 0x881E -ARM64_SYSREG_TRCIDR12 = 0x8826 -ARM64_SYSREG_TRCIDR13 = 0x882E -ARM64_SYSREG_TRCIDR2 = 0x8857 -ARM64_SYSREG_TRCIDR3 = 0x885F -ARM64_SYSREG_TRCIDR4 = 0x8867 -ARM64_SYSREG_TRCIDR5 = 0x886F -ARM64_SYSREG_TRCIDR6 = 0x8877 -ARM64_SYSREG_TRCIDR7 = 0x887F -ARM64_SYSREG_TRCIDR8 = 0x8806 -ARM64_SYSREG_TRCIDR9 = 0x880E -ARM64_SYSREG_TRCIMSPEC0 = 0x8807 -ARM64_SYSREG_TRCIMSPEC1 = 0x880F -ARM64_SYSREG_TRCIMSPEC2 = 0x8817 -ARM64_SYSREG_TRCIMSPEC3 = 0x881F -ARM64_SYSREG_TRCIMSPEC4 = 0x8827 -ARM64_SYSREG_TRCIMSPEC5 = 0x882F -ARM64_SYSREG_TRCIMSPEC6 = 0x8837 -ARM64_SYSREG_TRCIMSPEC7 = 0x883F -ARM64_SYSREG_TRCITCTRL = 0x8B84 -ARM64_SYSREG_TRCLAR = 0x8BE6 -ARM64_SYSREG_TRCLSR = 0x8BEE -ARM64_SYSREG_TRCOSLAR = 0x8884 -ARM64_SYSREG_TRCOSLSR = 0x888C -ARM64_SYSREG_TRCPDCR = 0x88A4 -ARM64_SYSREG_TRCPDSR = 0x88AC -ARM64_SYSREG_TRCPIDR0 = 0x8BC7 -ARM64_SYSREG_TRCPIDR1 = 0x8BCF -ARM64_SYSREG_TRCPIDR2 = 0x8BD7 -ARM64_SYSREG_TRCPIDR3 = 0x8BDF -ARM64_SYSREG_TRCPIDR4 = 0x8BA7 -ARM64_SYSREG_TRCPIDR5 = 0x8BAF -ARM64_SYSREG_TRCPIDR6 = 0x8BB7 -ARM64_SYSREG_TRCPIDR7 = 0x8BBF -ARM64_SYSREG_TRCPRGCTLR = 0x8808 -ARM64_SYSREG_TRCPROCSELR = 0x8810 -ARM64_SYSREG_TRCQCTLR = 0x8809 -ARM64_SYSREG_TRCRSCTLR10 = 0x88D0 -ARM64_SYSREG_TRCRSCTLR11 = 0x88D8 -ARM64_SYSREG_TRCRSCTLR12 = 0x88E0 -ARM64_SYSREG_TRCRSCTLR13 = 0x88E8 -ARM64_SYSREG_TRCRSCTLR14 = 0x88F0 -ARM64_SYSREG_TRCRSCTLR15 = 0x88F8 -ARM64_SYSREG_TRCRSCTLR16 = 0x8881 -ARM64_SYSREG_TRCRSCTLR17 = 0x8889 -ARM64_SYSREG_TRCRSCTLR18 = 0x8891 -ARM64_SYSREG_TRCRSCTLR19 = 0x8899 -ARM64_SYSREG_TRCRSCTLR2 = 0x8890 -ARM64_SYSREG_TRCRSCTLR20 = 0x88A1 -ARM64_SYSREG_TRCRSCTLR21 = 0x88A9 -ARM64_SYSREG_TRCRSCTLR22 = 0x88B1 -ARM64_SYSREG_TRCRSCTLR23 = 0x88B9 -ARM64_SYSREG_TRCRSCTLR24 = 0x88C1 -ARM64_SYSREG_TRCRSCTLR25 = 0x88C9 -ARM64_SYSREG_TRCRSCTLR26 = 0x88D1 -ARM64_SYSREG_TRCRSCTLR27 = 0x88D9 -ARM64_SYSREG_TRCRSCTLR28 = 0x88E1 -ARM64_SYSREG_TRCRSCTLR29 = 0x88E9 -ARM64_SYSREG_TRCRSCTLR3 = 0x8898 -ARM64_SYSREG_TRCRSCTLR30 = 0x88F1 -ARM64_SYSREG_TRCRSCTLR31 = 0x88F9 -ARM64_SYSREG_TRCRSCTLR4 = 0x88A0 -ARM64_SYSREG_TRCRSCTLR5 = 0x88A8 -ARM64_SYSREG_TRCRSCTLR6 = 0x88B0 -ARM64_SYSREG_TRCRSCTLR7 = 0x88B8 -ARM64_SYSREG_TRCRSCTLR8 = 0x88C0 -ARM64_SYSREG_TRCRSCTLR9 = 0x88C8 -ARM64_SYSREG_TRCRSR = 0x8850 -ARM64_SYSREG_TRCSEQEVR0 = 0x8804 -ARM64_SYSREG_TRCSEQEVR1 = 0x880C -ARM64_SYSREG_TRCSEQEVR2 = 0x8814 -ARM64_SYSREG_TRCSEQRSTEVR = 0x8834 -ARM64_SYSREG_TRCSEQSTR = 0x883C -ARM64_SYSREG_TRCSSCCR0 = 0x8882 -ARM64_SYSREG_TRCSSCCR1 = 0x888A -ARM64_SYSREG_TRCSSCCR2 = 0x8892 -ARM64_SYSREG_TRCSSCCR3 = 0x889A -ARM64_SYSREG_TRCSSCCR4 = 0x88A2 -ARM64_SYSREG_TRCSSCCR5 = 0x88AA -ARM64_SYSREG_TRCSSCCR6 = 0x88B2 -ARM64_SYSREG_TRCSSCCR7 = 0x88BA -ARM64_SYSREG_TRCSSCSR0 = 0x88C2 -ARM64_SYSREG_TRCSSCSR1 = 0x88CA -ARM64_SYSREG_TRCSSCSR2 = 0x88D2 -ARM64_SYSREG_TRCSSCSR3 = 0x88DA -ARM64_SYSREG_TRCSSCSR4 = 0x88E2 -ARM64_SYSREG_TRCSSCSR5 = 0x88EA -ARM64_SYSREG_TRCSSCSR6 = 0x88F2 -ARM64_SYSREG_TRCSSCSR7 = 0x88FA -ARM64_SYSREG_TRCSSPCICR0 = 0x8883 -ARM64_SYSREG_TRCSSPCICR1 = 0x888B -ARM64_SYSREG_TRCSSPCICR2 = 0x8893 -ARM64_SYSREG_TRCSSPCICR3 = 0x889B -ARM64_SYSREG_TRCSSPCICR4 = 0x88A3 -ARM64_SYSREG_TRCSSPCICR5 = 0x88AB -ARM64_SYSREG_TRCSSPCICR6 = 0x88B3 -ARM64_SYSREG_TRCSSPCICR7 = 0x88BB -ARM64_SYSREG_TRCSTALLCTLR = 0x8858 -ARM64_SYSREG_TRCSTATR = 0x8818 -ARM64_SYSREG_TRCSYNCPR = 0x8868 -ARM64_SYSREG_TRCTRACEIDR = 0x8801 -ARM64_SYSREG_TRCTSCTLR = 0x8860 -ARM64_SYSREG_TRCVDARCCTLR = 0x8852 -ARM64_SYSREG_TRCVDCTLR = 0x8842 -ARM64_SYSREG_TRCVDSACCTLR = 0x884A -ARM64_SYSREG_TRCVICTLR = 0x8802 -ARM64_SYSREG_TRCVIIECTLR = 0x880A -ARM64_SYSREG_TRCVIPCSSCTLR = 0x881A -ARM64_SYSREG_TRCVISSCTLR = 0x8812 -ARM64_SYSREG_TRCVMIDCCTLR0 = 0x8992 -ARM64_SYSREG_TRCVMIDCCTLR1 = 0x899A -ARM64_SYSREG_TRCVMIDCVR0 = 0x8981 -ARM64_SYSREG_TRCVMIDCVR1 = 0x8991 -ARM64_SYSREG_TRCVMIDCVR2 = 0x89A1 -ARM64_SYSREG_TRCVMIDCVR3 = 0x89B1 -ARM64_SYSREG_TRCVMIDCVR4 = 0x89C1 -ARM64_SYSREG_TRCVMIDCVR5 = 0x89D1 -ARM64_SYSREG_TRCVMIDCVR6 = 0x89E1 -ARM64_SYSREG_TRCVMIDCVR7 = 0x89F1 -ARM64_SYSREG_TRFCR_EL1 = 0xC091 -ARM64_SYSREG_TRFCR_EL12 = 0xE891 -ARM64_SYSREG_TRFCR_EL2 = 0xE091 -ARM64_SYSREG_TTBR0_EL1 = 0xC100 -ARM64_SYSREG_TTBR0_EL12 = 0xE900 -ARM64_SYSREG_TTBR0_EL2 = 0xE100 -ARM64_SYSREG_TTBR0_EL3 = 0xF100 -ARM64_SYSREG_TTBR1_EL1 = 0xC101 -ARM64_SYSREG_TTBR1_EL12 = 0xE901 -ARM64_SYSREG_TTBR1_EL2 = 0xE101 -ARM64_SYSREG_UAO = 0xC214 -ARM64_SYSREG_VBAR_EL1 = 0xC600 -ARM64_SYSREG_VBAR_EL12 = 0xEE00 -ARM64_SYSREG_VBAR_EL2 = 0xE600 -ARM64_SYSREG_VBAR_EL3 = 0xF600 -ARM64_SYSREG_VDISR_EL2 = 0xE609 -ARM64_SYSREG_VMPIDR_EL2 = 0xE005 -ARM64_SYSREG_VNCR_EL2 = 0xE110 -ARM64_SYSREG_VPIDR_EL2 = 0xE000 -ARM64_SYSREG_VSCTLR_EL2 = 0xE100 -ARM64_SYSREG_VSESR_EL2 = 0xE293 -ARM64_SYSREG_VSTCR_EL2 = 0xE132 -ARM64_SYSREG_VSTTBR_EL2 = 0xE130 -ARM64_SYSREG_VTCR_EL2 = 0xE10A -ARM64_SYSREG_VTTBR_EL2 = 0xE108 -ARM64_SYSREG_ZCR_EL1 = 0xC090 -ARM64_SYSREG_ZCR_EL12 = 0xE890 -ARM64_SYSREG_ZCR_EL2 = 0xE090 -ARM64_SYSREG_ZCR_EL3 = 0xF090 - -ARM64_PSTATE_INVALID = 0 -ARM64_PSTATE_SPSEL = 0x05 -ARM64_PSTATE_DAIFSET = 0x1e -ARM64_PSTATE_DAIFCLR = 0x1f -ARM64_PSTATE_PAN = 0x4 -ARM64_PSTATE_UAO = 0x3 -ARM64_PSTATE_DIT = 0x1a - -ARM64_VAS_INVALID = 0 -ARM64_VAS_16B = 1 -ARM64_VAS_8B = 2 -ARM64_VAS_4B = 3 -ARM64_VAS_1B = 4 -ARM64_VAS_8H = 5 -ARM64_VAS_4H = 6 -ARM64_VAS_2H = 7 -ARM64_VAS_1H = 8 -ARM64_VAS_4S = 9 -ARM64_VAS_2S = 10 -ARM64_VAS_1S = 11 -ARM64_VAS_2D = 12 -ARM64_VAS_1D = 13 -ARM64_VAS_1Q = 14 - -ARM64_BARRIER_INVALID = 0 -ARM64_BARRIER_OSHLD = 0x1 -ARM64_BARRIER_OSHST = 0x2 -ARM64_BARRIER_OSH = 0x3 -ARM64_BARRIER_NSHLD = 0x5 -ARM64_BARRIER_NSHST = 0x6 -ARM64_BARRIER_NSH = 0x7 -ARM64_BARRIER_ISHLD = 0x9 -ARM64_BARRIER_ISHST = 0xa -ARM64_BARRIER_ISH = 0xb -ARM64_BARRIER_LD = 0xd -ARM64_BARRIER_ST = 0xe -ARM64_BARRIER_SY = 0xf - -ARM64_OP_INVALID = 0 -ARM64_OP_REG = 1 -ARM64_OP_IMM = 2 -ARM64_OP_MEM = 3 -ARM64_OP_FP = 4 -ARM64_OP_CIMM = 64 -ARM64_OP_REG_MRS = 65 -ARM64_OP_REG_MSR = 66 -ARM64_OP_PSTATE = 67 -ARM64_OP_SYS = 68 -ARM64_OP_SVCR = 69 -ARM64_OP_PREFETCH = 70 -ARM64_OP_BARRIER = 71 -ARM64_OP_SME_INDEX = 72 - -ARM64_SYS_INVALID = 0 -ARM64_TLBI_ALLE1 = 1 -ARM64_TLBI_ALLE1IS = 2 -ARM64_TLBI_ALLE1ISNXS = 3 -ARM64_TLBI_ALLE1NXS = 4 -ARM64_TLBI_ALLE1OS = 5 -ARM64_TLBI_ALLE1OSNXS = 6 -ARM64_TLBI_ALLE2 = 7 -ARM64_TLBI_ALLE2IS = 8 -ARM64_TLBI_ALLE2ISNXS = 9 -ARM64_TLBI_ALLE2NXS = 10 -ARM64_TLBI_ALLE2OS = 11 -ARM64_TLBI_ALLE2OSNXS = 12 -ARM64_TLBI_ALLE3 = 13 -ARM64_TLBI_ALLE3IS = 14 -ARM64_TLBI_ALLE3ISNXS = 15 -ARM64_TLBI_ALLE3NXS = 16 -ARM64_TLBI_ALLE3OS = 17 -ARM64_TLBI_ALLE3OSNXS = 18 -ARM64_TLBI_ASIDE1 = 19 -ARM64_TLBI_ASIDE1IS = 20 -ARM64_TLBI_ASIDE1ISNXS = 21 -ARM64_TLBI_ASIDE1NXS = 22 -ARM64_TLBI_ASIDE1OS = 23 -ARM64_TLBI_ASIDE1OSNXS = 24 -ARM64_TLBI_IPAS2E1 = 25 -ARM64_TLBI_IPAS2E1IS = 26 -ARM64_TLBI_IPAS2E1ISNXS = 27 -ARM64_TLBI_IPAS2E1NXS = 28 -ARM64_TLBI_IPAS2E1OS = 29 -ARM64_TLBI_IPAS2E1OSNXS = 30 -ARM64_TLBI_IPAS2LE1 = 31 -ARM64_TLBI_IPAS2LE1IS = 32 -ARM64_TLBI_IPAS2LE1ISNXS = 33 -ARM64_TLBI_IPAS2LE1NXS = 34 -ARM64_TLBI_IPAS2LE1OS = 35 -ARM64_TLBI_IPAS2LE1OSNXS = 36 -ARM64_TLBI_PAALL = 37 -ARM64_TLBI_PAALLNXS = 38 -ARM64_TLBI_PAALLOS = 39 -ARM64_TLBI_PAALLOSNXS = 40 -ARM64_TLBI_RIPAS2E1 = 41 -ARM64_TLBI_RIPAS2E1IS = 42 -ARM64_TLBI_RIPAS2E1ISNXS = 43 -ARM64_TLBI_RIPAS2E1NXS = 44 -ARM64_TLBI_RIPAS2E1OS = 45 -ARM64_TLBI_RIPAS2E1OSNXS = 46 -ARM64_TLBI_RIPAS2LE1 = 47 -ARM64_TLBI_RIPAS2LE1IS = 48 -ARM64_TLBI_RIPAS2LE1ISNXS = 49 -ARM64_TLBI_RIPAS2LE1NXS = 50 -ARM64_TLBI_RIPAS2LE1OS = 51 -ARM64_TLBI_RIPAS2LE1OSNXS = 52 -ARM64_TLBI_RPALOS = 53 -ARM64_TLBI_RPALOSNXS = 54 -ARM64_TLBI_RPAOS = 55 -ARM64_TLBI_RPAOSNXS = 56 -ARM64_TLBI_RVAAE1 = 57 -ARM64_TLBI_RVAAE1IS = 58 -ARM64_TLBI_RVAAE1ISNXS = 59 -ARM64_TLBI_RVAAE1NXS = 60 -ARM64_TLBI_RVAAE1OS = 61 -ARM64_TLBI_RVAAE1OSNXS = 62 -ARM64_TLBI_RVAALE1 = 63 -ARM64_TLBI_RVAALE1IS = 64 -ARM64_TLBI_RVAALE1ISNXS = 65 -ARM64_TLBI_RVAALE1NXS = 66 -ARM64_TLBI_RVAALE1OS = 67 -ARM64_TLBI_RVAALE1OSNXS = 68 -ARM64_TLBI_RVAE1 = 69 -ARM64_TLBI_RVAE1IS = 70 -ARM64_TLBI_RVAE1ISNXS = 71 -ARM64_TLBI_RVAE1NXS = 72 -ARM64_TLBI_RVAE1OS = 73 -ARM64_TLBI_RVAE1OSNXS = 74 -ARM64_TLBI_RVAE2 = 75 -ARM64_TLBI_RVAE2IS = 76 -ARM64_TLBI_RVAE2ISNXS = 77 -ARM64_TLBI_RVAE2NXS = 78 -ARM64_TLBI_RVAE2OS = 79 -ARM64_TLBI_RVAE2OSNXS = 80 -ARM64_TLBI_RVAE3 = 81 -ARM64_TLBI_RVAE3IS = 82 -ARM64_TLBI_RVAE3ISNXS = 83 -ARM64_TLBI_RVAE3NXS = 84 -ARM64_TLBI_RVAE3OS = 85 -ARM64_TLBI_RVAE3OSNXS = 86 -ARM64_TLBI_RVALE1 = 87 -ARM64_TLBI_RVALE1IS = 88 -ARM64_TLBI_RVALE1ISNXS = 89 -ARM64_TLBI_RVALE1NXS = 90 -ARM64_TLBI_RVALE1OS = 91 -ARM64_TLBI_RVALE1OSNXS = 92 -ARM64_TLBI_RVALE2 = 93 -ARM64_TLBI_RVALE2IS = 94 -ARM64_TLBI_RVALE2ISNXS = 95 -ARM64_TLBI_RVALE2NXS = 96 -ARM64_TLBI_RVALE2OS = 97 -ARM64_TLBI_RVALE2OSNXS = 98 -ARM64_TLBI_RVALE3 = 99 -ARM64_TLBI_RVALE3IS = 100 -ARM64_TLBI_RVALE3ISNXS = 101 -ARM64_TLBI_RVALE3NXS = 102 -ARM64_TLBI_RVALE3OS = 103 -ARM64_TLBI_RVALE3OSNXS = 104 -ARM64_TLBI_VAAE1 = 105 -ARM64_TLBI_VAAE1IS = 106 -ARM64_TLBI_VAAE1ISNXS = 107 -ARM64_TLBI_VAAE1NXS = 108 -ARM64_TLBI_VAAE1OS = 109 -ARM64_TLBI_VAAE1OSNXS = 110 -ARM64_TLBI_VAALE1 = 111 -ARM64_TLBI_VAALE1IS = 112 -ARM64_TLBI_VAALE1ISNXS = 113 -ARM64_TLBI_VAALE1NXS = 114 -ARM64_TLBI_VAALE1OS = 115 -ARM64_TLBI_VAALE1OSNXS = 116 -ARM64_TLBI_VAE1 = 117 -ARM64_TLBI_VAE1IS = 118 -ARM64_TLBI_VAE1ISNXS = 119 -ARM64_TLBI_VAE1NXS = 120 -ARM64_TLBI_VAE1OS = 121 -ARM64_TLBI_VAE1OSNXS = 122 -ARM64_TLBI_VAE2 = 123 -ARM64_TLBI_VAE2IS = 124 -ARM64_TLBI_VAE2ISNXS = 125 -ARM64_TLBI_VAE2NXS = 126 -ARM64_TLBI_VAE2OS = 127 -ARM64_TLBI_VAE2OSNXS = 128 -ARM64_TLBI_VAE3 = 129 -ARM64_TLBI_VAE3IS = 130 -ARM64_TLBI_VAE3ISNXS = 131 -ARM64_TLBI_VAE3NXS = 132 -ARM64_TLBI_VAE3OS = 133 -ARM64_TLBI_VAE3OSNXS = 134 -ARM64_TLBI_VALE1 = 135 -ARM64_TLBI_VALE1IS = 136 -ARM64_TLBI_VALE1ISNXS = 137 -ARM64_TLBI_VALE1NXS = 138 -ARM64_TLBI_VALE1OS = 139 -ARM64_TLBI_VALE1OSNXS = 140 -ARM64_TLBI_VALE2 = 141 -ARM64_TLBI_VALE2IS = 142 -ARM64_TLBI_VALE2ISNXS = 143 -ARM64_TLBI_VALE2NXS = 144 -ARM64_TLBI_VALE2OS = 145 -ARM64_TLBI_VALE2OSNXS = 146 -ARM64_TLBI_VALE3 = 147 -ARM64_TLBI_VALE3IS = 148 -ARM64_TLBI_VALE3ISNXS = 149 -ARM64_TLBI_VALE3NXS = 150 -ARM64_TLBI_VALE3OS = 151 -ARM64_TLBI_VALE3OSNXS = 152 -ARM64_TLBI_VMALLE1 = 153 -ARM64_TLBI_VMALLE1IS = 154 -ARM64_TLBI_VMALLE1ISNXS = 155 -ARM64_TLBI_VMALLE1NXS = 156 -ARM64_TLBI_VMALLE1OS = 157 -ARM64_TLBI_VMALLE1OSNXS = 158 -ARM64_TLBI_VMALLS12E1 = 159 -ARM64_TLBI_VMALLS12E1IS = 160 -ARM64_TLBI_VMALLS12E1ISNXS = 161 -ARM64_TLBI_VMALLS12E1NXS = 162 -ARM64_TLBI_VMALLS12E1OS = 163 -ARM64_TLBI_VMALLS12E1OSNXS = 164 -ARM64_AT_S1E1R = 165 -ARM64_AT_S1E2R = 166 -ARM64_AT_S1E3R = 167 -ARM64_AT_S1E1W = 168 -ARM64_AT_S1E2W = 169 -ARM64_AT_S1E3W = 170 -ARM64_AT_S1E0R = 171 -ARM64_AT_S1E0W = 172 -ARM64_AT_S12E1R = 173 -ARM64_AT_S12E1W = 174 -ARM64_AT_S12E0R = 175 -ARM64_AT_S12E0W = 176 -ARM64_AT_S1E1RP = 177 -ARM64_AT_S1E1WP = 178 -ARM64_DC_CGDSW = 179 -ARM64_DC_CGDVAC = 180 -ARM64_DC_CGDVADP = 181 -ARM64_DC_CGDVAP = 182 -ARM64_DC_CGSW = 183 -ARM64_DC_CGVAC = 184 -ARM64_DC_CGVADP = 185 -ARM64_DC_CGVAP = 186 -ARM64_DC_CIGDSW = 187 -ARM64_DC_CIGDVAC = 188 -ARM64_DC_CIGSW = 189 -ARM64_DC_CIGVAC = 190 -ARM64_DC_CISW = 191 -ARM64_DC_CIVAC = 192 -ARM64_DC_CSW = 193 -ARM64_DC_CVAC = 194 -ARM64_DC_CVADP = 195 -ARM64_DC_CVAP = 196 -ARM64_DC_CVAU = 197 -ARM64_DC_GVA = 198 -ARM64_DC_GZVA = 199 -ARM64_DC_IGDSW = 200 -ARM64_DC_IGDVAC = 201 -ARM64_DC_IGSW = 202 -ARM64_DC_IGVAC = 203 -ARM64_DC_ISW = 204 -ARM64_DC_IVAC = 205 -ARM64_DC_ZVA = 206 -ARM64_IC_IALLUIS = 207 -ARM64_IC_IALLU = 208 -ARM64_IC_IVAU = 209 - -ARM64_SVCR_INVALID = 0 -ARM64_SVCR_SVCRSM = 0x1 -ARM64_SVCR_SVCRSMZA = 0x3 -ARM64_SVCR_SVCRZA = 0x2 - -ARM64_PRFM_INVALID = 0 -ARM64_PRFM_PLDL1KEEP = 0x00+1 -ARM64_PRFM_PLDL1STRM = 0x01+1 -ARM64_PRFM_PLDL2KEEP = 0x02+1 -ARM64_PRFM_PLDL2STRM = 0x03+1 -ARM64_PRFM_PLDL3KEEP = 0x04+1 -ARM64_PRFM_PLDL3STRM = 0x05+1 -ARM64_PRFM_PLIL1KEEP = 0x08+1 -ARM64_PRFM_PLIL1STRM = 0x09+1 -ARM64_PRFM_PLIL2KEEP = 0x0a+1 -ARM64_PRFM_PLIL2STRM = 0x0b+1 -ARM64_PRFM_PLIL3KEEP = 0x0c+1 -ARM64_PRFM_PLIL3STRM = 0x0d+1 -ARM64_PRFM_PSTL1KEEP = 0x10+1 -ARM64_PRFM_PSTL1STRM = 0x11+1 -ARM64_PRFM_PSTL2KEEP = 0x12+1 -ARM64_PRFM_PSTL2STRM = 0x13+1 -ARM64_PRFM_PSTL3KEEP = 0x14+1 -ARM64_PRFM_PSTL3STRM = 0x15+1 - -ARM64_REG_INVALID = 0 -ARM64_REG_FFR = 1 -ARM64_REG_FP = 2 -ARM64_REG_LR = 3 -ARM64_REG_NZCV = 4 -ARM64_REG_SP = 5 -ARM64_REG_VG = 6 -ARM64_REG_WSP = 7 -ARM64_REG_WZR = 8 -ARM64_REG_XZR = 9 -ARM64_REG_ZA = 10 -ARM64_REG_B0 = 11 -ARM64_REG_B1 = 12 -ARM64_REG_B2 = 13 -ARM64_REG_B3 = 14 -ARM64_REG_B4 = 15 -ARM64_REG_B5 = 16 -ARM64_REG_B6 = 17 -ARM64_REG_B7 = 18 -ARM64_REG_B8 = 19 -ARM64_REG_B9 = 20 -ARM64_REG_B10 = 21 -ARM64_REG_B11 = 22 -ARM64_REG_B12 = 23 -ARM64_REG_B13 = 24 -ARM64_REG_B14 = 25 -ARM64_REG_B15 = 26 -ARM64_REG_B16 = 27 -ARM64_REG_B17 = 28 -ARM64_REG_B18 = 29 -ARM64_REG_B19 = 30 -ARM64_REG_B20 = 31 -ARM64_REG_B21 = 32 -ARM64_REG_B22 = 33 -ARM64_REG_B23 = 34 -ARM64_REG_B24 = 35 -ARM64_REG_B25 = 36 -ARM64_REG_B26 = 37 -ARM64_REG_B27 = 38 -ARM64_REG_B28 = 39 -ARM64_REG_B29 = 40 -ARM64_REG_B30 = 41 -ARM64_REG_B31 = 42 -ARM64_REG_D0 = 43 -ARM64_REG_D1 = 44 -ARM64_REG_D2 = 45 -ARM64_REG_D3 = 46 -ARM64_REG_D4 = 47 -ARM64_REG_D5 = 48 -ARM64_REG_D6 = 49 -ARM64_REG_D7 = 50 -ARM64_REG_D8 = 51 -ARM64_REG_D9 = 52 -ARM64_REG_D10 = 53 -ARM64_REG_D11 = 54 -ARM64_REG_D12 = 55 -ARM64_REG_D13 = 56 -ARM64_REG_D14 = 57 -ARM64_REG_D15 = 58 -ARM64_REG_D16 = 59 -ARM64_REG_D17 = 60 -ARM64_REG_D18 = 61 -ARM64_REG_D19 = 62 -ARM64_REG_D20 = 63 -ARM64_REG_D21 = 64 -ARM64_REG_D22 = 65 -ARM64_REG_D23 = 66 -ARM64_REG_D24 = 67 -ARM64_REG_D25 = 68 -ARM64_REG_D26 = 69 -ARM64_REG_D27 = 70 -ARM64_REG_D28 = 71 -ARM64_REG_D29 = 72 -ARM64_REG_D30 = 73 -ARM64_REG_D31 = 74 -ARM64_REG_H0 = 75 -ARM64_REG_H1 = 76 -ARM64_REG_H2 = 77 -ARM64_REG_H3 = 78 -ARM64_REG_H4 = 79 -ARM64_REG_H5 = 80 -ARM64_REG_H6 = 81 -ARM64_REG_H7 = 82 -ARM64_REG_H8 = 83 -ARM64_REG_H9 = 84 -ARM64_REG_H10 = 85 -ARM64_REG_H11 = 86 -ARM64_REG_H12 = 87 -ARM64_REG_H13 = 88 -ARM64_REG_H14 = 89 -ARM64_REG_H15 = 90 -ARM64_REG_H16 = 91 -ARM64_REG_H17 = 92 -ARM64_REG_H18 = 93 -ARM64_REG_H19 = 94 -ARM64_REG_H20 = 95 -ARM64_REG_H21 = 96 -ARM64_REG_H22 = 97 -ARM64_REG_H23 = 98 -ARM64_REG_H24 = 99 -ARM64_REG_H25 = 100 -ARM64_REG_H26 = 101 -ARM64_REG_H27 = 102 -ARM64_REG_H28 = 103 -ARM64_REG_H29 = 104 -ARM64_REG_H30 = 105 -ARM64_REG_H31 = 106 -ARM64_REG_P0 = 107 -ARM64_REG_P1 = 108 -ARM64_REG_P2 = 109 -ARM64_REG_P3 = 110 -ARM64_REG_P4 = 111 -ARM64_REG_P5 = 112 -ARM64_REG_P6 = 113 -ARM64_REG_P7 = 114 -ARM64_REG_P8 = 115 -ARM64_REG_P9 = 116 -ARM64_REG_P10 = 117 -ARM64_REG_P11 = 118 -ARM64_REG_P12 = 119 -ARM64_REG_P13 = 120 -ARM64_REG_P14 = 121 -ARM64_REG_P15 = 122 -ARM64_REG_Q0 = 123 -ARM64_REG_Q1 = 124 -ARM64_REG_Q2 = 125 -ARM64_REG_Q3 = 126 -ARM64_REG_Q4 = 127 -ARM64_REG_Q5 = 128 -ARM64_REG_Q6 = 129 -ARM64_REG_Q7 = 130 -ARM64_REG_Q8 = 131 -ARM64_REG_Q9 = 132 -ARM64_REG_Q10 = 133 -ARM64_REG_Q11 = 134 -ARM64_REG_Q12 = 135 -ARM64_REG_Q13 = 136 -ARM64_REG_Q14 = 137 -ARM64_REG_Q15 = 138 -ARM64_REG_Q16 = 139 -ARM64_REG_Q17 = 140 -ARM64_REG_Q18 = 141 -ARM64_REG_Q19 = 142 -ARM64_REG_Q20 = 143 -ARM64_REG_Q21 = 144 -ARM64_REG_Q22 = 145 -ARM64_REG_Q23 = 146 -ARM64_REG_Q24 = 147 -ARM64_REG_Q25 = 148 -ARM64_REG_Q26 = 149 -ARM64_REG_Q27 = 150 -ARM64_REG_Q28 = 151 -ARM64_REG_Q29 = 152 -ARM64_REG_Q30 = 153 -ARM64_REG_Q31 = 154 -ARM64_REG_S0 = 155 -ARM64_REG_S1 = 156 -ARM64_REG_S2 = 157 -ARM64_REG_S3 = 158 -ARM64_REG_S4 = 159 -ARM64_REG_S5 = 160 -ARM64_REG_S6 = 161 -ARM64_REG_S7 = 162 -ARM64_REG_S8 = 163 -ARM64_REG_S9 = 164 -ARM64_REG_S10 = 165 -ARM64_REG_S11 = 166 -ARM64_REG_S12 = 167 -ARM64_REG_S13 = 168 -ARM64_REG_S14 = 169 -ARM64_REG_S15 = 170 -ARM64_REG_S16 = 171 -ARM64_REG_S17 = 172 -ARM64_REG_S18 = 173 -ARM64_REG_S19 = 174 -ARM64_REG_S20 = 175 -ARM64_REG_S21 = 176 -ARM64_REG_S22 = 177 -ARM64_REG_S23 = 178 -ARM64_REG_S24 = 179 -ARM64_REG_S25 = 180 -ARM64_REG_S26 = 181 -ARM64_REG_S27 = 182 -ARM64_REG_S28 = 183 -ARM64_REG_S29 = 184 -ARM64_REG_S30 = 185 -ARM64_REG_S31 = 186 -ARM64_REG_W0 = 187 -ARM64_REG_W1 = 188 -ARM64_REG_W2 = 189 -ARM64_REG_W3 = 190 -ARM64_REG_W4 = 191 -ARM64_REG_W5 = 192 -ARM64_REG_W6 = 193 -ARM64_REG_W7 = 194 -ARM64_REG_W8 = 195 -ARM64_REG_W9 = 196 -ARM64_REG_W10 = 197 -ARM64_REG_W11 = 198 -ARM64_REG_W12 = 199 -ARM64_REG_W13 = 200 -ARM64_REG_W14 = 201 -ARM64_REG_W15 = 202 -ARM64_REG_W16 = 203 -ARM64_REG_W17 = 204 -ARM64_REG_W18 = 205 -ARM64_REG_W19 = 206 -ARM64_REG_W20 = 207 -ARM64_REG_W21 = 208 -ARM64_REG_W22 = 209 -ARM64_REG_W23 = 210 -ARM64_REG_W24 = 211 -ARM64_REG_W25 = 212 -ARM64_REG_W26 = 213 -ARM64_REG_W27 = 214 -ARM64_REG_W28 = 215 -ARM64_REG_W29 = 216 -ARM64_REG_W30 = 217 -ARM64_REG_X0 = 218 -ARM64_REG_X1 = 219 -ARM64_REG_X2 = 220 -ARM64_REG_X3 = 221 -ARM64_REG_X4 = 222 -ARM64_REG_X5 = 223 -ARM64_REG_X6 = 224 -ARM64_REG_X7 = 225 -ARM64_REG_X8 = 226 -ARM64_REG_X9 = 227 -ARM64_REG_X10 = 228 -ARM64_REG_X11 = 229 -ARM64_REG_X12 = 230 -ARM64_REG_X13 = 231 -ARM64_REG_X14 = 232 -ARM64_REG_X15 = 233 -ARM64_REG_X16 = 234 -ARM64_REG_X17 = 235 -ARM64_REG_X18 = 236 -ARM64_REG_X19 = 237 -ARM64_REG_X20 = 238 -ARM64_REG_X21 = 239 -ARM64_REG_X22 = 240 -ARM64_REG_X23 = 241 -ARM64_REG_X24 = 242 -ARM64_REG_X25 = 243 -ARM64_REG_X26 = 244 -ARM64_REG_X27 = 245 -ARM64_REG_X28 = 246 -ARM64_REG_Z0 = 247 -ARM64_REG_Z1 = 248 -ARM64_REG_Z2 = 249 -ARM64_REG_Z3 = 250 -ARM64_REG_Z4 = 251 -ARM64_REG_Z5 = 252 -ARM64_REG_Z6 = 253 -ARM64_REG_Z7 = 254 -ARM64_REG_Z8 = 255 -ARM64_REG_Z9 = 256 -ARM64_REG_Z10 = 257 -ARM64_REG_Z11 = 258 -ARM64_REG_Z12 = 259 -ARM64_REG_Z13 = 260 -ARM64_REG_Z14 = 261 -ARM64_REG_Z15 = 262 -ARM64_REG_Z16 = 263 -ARM64_REG_Z17 = 264 -ARM64_REG_Z18 = 265 -ARM64_REG_Z19 = 266 -ARM64_REG_Z20 = 267 -ARM64_REG_Z21 = 268 -ARM64_REG_Z22 = 269 -ARM64_REG_Z23 = 270 -ARM64_REG_Z24 = 271 -ARM64_REG_Z25 = 272 -ARM64_REG_Z26 = 273 -ARM64_REG_Z27 = 274 -ARM64_REG_Z28 = 275 -ARM64_REG_Z29 = 276 -ARM64_REG_Z30 = 277 -ARM64_REG_Z31 = 278 -ARM64_REG_ZAB0 = 279 -ARM64_REG_ZAD0 = 280 -ARM64_REG_ZAD1 = 281 -ARM64_REG_ZAD2 = 282 -ARM64_REG_ZAD3 = 283 -ARM64_REG_ZAD4 = 284 -ARM64_REG_ZAD5 = 285 -ARM64_REG_ZAD6 = 286 -ARM64_REG_ZAD7 = 287 -ARM64_REG_ZAH0 = 288 -ARM64_REG_ZAH1 = 289 -ARM64_REG_ZAQ0 = 290 -ARM64_REG_ZAQ1 = 291 -ARM64_REG_ZAQ2 = 292 -ARM64_REG_ZAQ3 = 293 -ARM64_REG_ZAQ4 = 294 -ARM64_REG_ZAQ5 = 295 -ARM64_REG_ZAQ6 = 296 -ARM64_REG_ZAQ7 = 297 -ARM64_REG_ZAQ8 = 298 -ARM64_REG_ZAQ9 = 299 -ARM64_REG_ZAQ10 = 300 -ARM64_REG_ZAQ11 = 301 -ARM64_REG_ZAQ12 = 302 -ARM64_REG_ZAQ13 = 303 -ARM64_REG_ZAQ14 = 304 -ARM64_REG_ZAQ15 = 305 -ARM64_REG_ZAS0 = 306 -ARM64_REG_ZAS1 = 307 -ARM64_REG_ZAS2 = 308 -ARM64_REG_ZAS3 = 309 -ARM64_REG_V0 = 310 -ARM64_REG_V1 = 311 -ARM64_REG_V2 = 312 -ARM64_REG_V3 = 313 -ARM64_REG_V4 = 314 -ARM64_REG_V5 = 315 -ARM64_REG_V6 = 316 -ARM64_REG_V7 = 317 -ARM64_REG_V8 = 318 -ARM64_REG_V9 = 319 -ARM64_REG_V10 = 320 -ARM64_REG_V11 = 321 -ARM64_REG_V12 = 322 -ARM64_REG_V13 = 323 -ARM64_REG_V14 = 324 -ARM64_REG_V15 = 325 -ARM64_REG_V16 = 326 -ARM64_REG_V17 = 327 -ARM64_REG_V18 = 328 -ARM64_REG_V19 = 329 -ARM64_REG_V20 = 330 -ARM64_REG_V21 = 331 -ARM64_REG_V22 = 332 -ARM64_REG_V23 = 333 -ARM64_REG_V24 = 334 -ARM64_REG_V25 = 335 -ARM64_REG_V26 = 336 -ARM64_REG_V27 = 337 -ARM64_REG_V28 = 338 -ARM64_REG_V29 = 339 -ARM64_REG_V30 = 340 -ARM64_REG_V31 = 341 -ARM64_REG_ENDING = 342 -ARM64_REG_IP0 = ARM64_REG_X16 -ARM64_REG_IP1 = ARM64_REG_X17 -ARM64_REG_X29 = ARM64_REG_FP -ARM64_REG_X30 = ARM64_REG_LR - -ARM64_INS_INVALID = 0 -ARM64_INS_ABS = 1 -ARM64_INS_ADC = 2 -ARM64_INS_ADCLB = 3 -ARM64_INS_ADCLT = 4 -ARM64_INS_ADCS = 5 -ARM64_INS_ADD = 6 -ARM64_INS_ADDG = 7 -ARM64_INS_ADDHA = 8 -ARM64_INS_ADDHN = 9 -ARM64_INS_ADDHN2 = 10 -ARM64_INS_ADDHNB = 11 -ARM64_INS_ADDHNT = 12 -ARM64_INS_ADDP = 13 -ARM64_INS_ADDPL = 14 -ARM64_INS_ADDS = 15 -ARM64_INS_ADDV = 16 -ARM64_INS_ADDVA = 17 -ARM64_INS_ADDVL = 18 -ARM64_INS_ADR = 19 -ARM64_INS_ADRP = 20 -ARM64_INS_AESD = 21 -ARM64_INS_AESE = 22 -ARM64_INS_AESIMC = 23 -ARM64_INS_AESMC = 24 -ARM64_INS_AND = 25 -ARM64_INS_ANDS = 26 -ARM64_INS_ANDV = 27 -ARM64_INS_ASR = 28 -ARM64_INS_ASRD = 29 -ARM64_INS_ASRR = 30 -ARM64_INS_ASRV = 31 -ARM64_INS_AUTDA = 32 -ARM64_INS_AUTDB = 33 -ARM64_INS_AUTDZA = 34 -ARM64_INS_AUTDZB = 35 -ARM64_INS_AUTIA = 36 -ARM64_INS_AUTIA1716 = 37 -ARM64_INS_AUTIASP = 38 -ARM64_INS_AUTIAZ = 39 -ARM64_INS_AUTIB = 40 -ARM64_INS_AUTIB1716 = 41 -ARM64_INS_AUTIBSP = 42 -ARM64_INS_AUTIBZ = 43 -ARM64_INS_AUTIZA = 44 -ARM64_INS_AUTIZB = 45 -ARM64_INS_AXFLAG = 46 -ARM64_INS_B = 47 -ARM64_INS_BC = 48 -ARM64_INS_BCAX = 49 -ARM64_INS_BDEP = 50 -ARM64_INS_BEXT = 51 -ARM64_INS_BFCVT = 52 -ARM64_INS_BFCVTN = 53 -ARM64_INS_BFCVTN2 = 54 -ARM64_INS_BFCVTNT = 55 -ARM64_INS_BFDOT = 56 -ARM64_INS_BFM = 57 -ARM64_INS_BFMLALB = 58 -ARM64_INS_BFMLALT = 59 -ARM64_INS_BFMMLA = 60 -ARM64_INS_BFMOPA = 61 -ARM64_INS_BFMOPS = 62 -ARM64_INS_BGRP = 63 -ARM64_INS_BIC = 64 -ARM64_INS_BICS = 65 -ARM64_INS_BIF = 66 -ARM64_INS_BIT = 67 -ARM64_INS_BL = 68 -ARM64_INS_BLR = 69 -ARM64_INS_BLRAA = 70 -ARM64_INS_BLRAAZ = 71 -ARM64_INS_BLRAB = 72 -ARM64_INS_BLRABZ = 73 -ARM64_INS_BR = 74 -ARM64_INS_BRAA = 75 -ARM64_INS_BRAAZ = 76 -ARM64_INS_BRAB = 77 -ARM64_INS_BRABZ = 78 -ARM64_INS_BRB = 79 -ARM64_INS_BRK = 80 -ARM64_INS_BRKA = 81 -ARM64_INS_BRKAS = 82 -ARM64_INS_BRKB = 83 -ARM64_INS_BRKBS = 84 -ARM64_INS_BRKN = 85 -ARM64_INS_BRKNS = 86 -ARM64_INS_BRKPA = 87 -ARM64_INS_BRKPAS = 88 -ARM64_INS_BRKPB = 89 -ARM64_INS_BRKPBS = 90 -ARM64_INS_BSL = 91 -ARM64_INS_BSL1N = 92 -ARM64_INS_BSL2N = 93 -ARM64_INS_BTI = 94 -ARM64_INS_CADD = 95 -ARM64_INS_CAS = 96 -ARM64_INS_CASA = 97 -ARM64_INS_CASAB = 98 -ARM64_INS_CASAH = 99 -ARM64_INS_CASAL = 100 -ARM64_INS_CASALB = 101 -ARM64_INS_CASALH = 102 -ARM64_INS_CASB = 103 -ARM64_INS_CASH = 104 -ARM64_INS_CASL = 105 -ARM64_INS_CASLB = 106 -ARM64_INS_CASLH = 107 -ARM64_INS_CASP = 108 -ARM64_INS_CASPA = 109 -ARM64_INS_CASPAL = 110 -ARM64_INS_CASPL = 111 -ARM64_INS_CBNZ = 112 -ARM64_INS_CBZ = 113 -ARM64_INS_CCMN = 114 -ARM64_INS_CCMP = 115 -ARM64_INS_CDOT = 116 -ARM64_INS_CFINV = 117 -ARM64_INS_CINC = 118 -ARM64_INS_CINV = 119 -ARM64_INS_CLASTA = 120 -ARM64_INS_CLASTB = 121 -ARM64_INS_CLREX = 122 -ARM64_INS_CLS = 123 -ARM64_INS_CLZ = 124 -ARM64_INS_CMEQ = 125 -ARM64_INS_CMGE = 126 -ARM64_INS_CMGT = 127 -ARM64_INS_CMHI = 128 -ARM64_INS_CMHS = 129 -ARM64_INS_CMLA = 130 -ARM64_INS_CMLE = 131 -ARM64_INS_CMLO = 132 -ARM64_INS_CMLS = 133 -ARM64_INS_CMLT = 134 -ARM64_INS_CMN = 135 -ARM64_INS_CMP = 136 -ARM64_INS_CMPEQ = 137 -ARM64_INS_CMPGE = 138 -ARM64_INS_CMPGT = 139 -ARM64_INS_CMPHI = 140 -ARM64_INS_CMPHS = 141 -ARM64_INS_CMPLE = 142 -ARM64_INS_CMPLO = 143 -ARM64_INS_CMPLS = 144 -ARM64_INS_CMPLT = 145 -ARM64_INS_CMPNE = 146 -ARM64_INS_CMPP = 147 -ARM64_INS_CMTST = 148 -ARM64_INS_CNEG = 149 -ARM64_INS_CNOT = 150 -ARM64_INS_CNT = 151 -ARM64_INS_CNTB = 152 -ARM64_INS_CNTD = 153 -ARM64_INS_CNTH = 154 -ARM64_INS_CNTP = 155 -ARM64_INS_CNTW = 156 -ARM64_INS_COMPACT = 157 -ARM64_INS_CPY = 158 -ARM64_INS_CPYE = 159 -ARM64_INS_CPYEN = 160 -ARM64_INS_CPYERN = 161 -ARM64_INS_CPYERT = 162 -ARM64_INS_CPYERTN = 163 -ARM64_INS_CPYERTRN = 164 -ARM64_INS_CPYERTWN = 165 -ARM64_INS_CPYET = 166 -ARM64_INS_CPYETN = 167 -ARM64_INS_CPYETRN = 168 -ARM64_INS_CPYETWN = 169 -ARM64_INS_CPYEWN = 170 -ARM64_INS_CPYEWT = 171 -ARM64_INS_CPYEWTN = 172 -ARM64_INS_CPYEWTRN = 173 -ARM64_INS_CPYEWTWN = 174 -ARM64_INS_CPYFE = 175 -ARM64_INS_CPYFEN = 176 -ARM64_INS_CPYFERN = 177 -ARM64_INS_CPYFERT = 178 -ARM64_INS_CPYFERTN = 179 -ARM64_INS_CPYFERTRN = 180 -ARM64_INS_CPYFERTWN = 181 -ARM64_INS_CPYFET = 182 -ARM64_INS_CPYFETN = 183 -ARM64_INS_CPYFETRN = 184 -ARM64_INS_CPYFETWN = 185 -ARM64_INS_CPYFEWN = 186 -ARM64_INS_CPYFEWT = 187 -ARM64_INS_CPYFEWTN = 188 -ARM64_INS_CPYFEWTRN = 189 -ARM64_INS_CPYFEWTWN = 190 -ARM64_INS_CPYFM = 191 -ARM64_INS_CPYFMN = 192 -ARM64_INS_CPYFMRN = 193 -ARM64_INS_CPYFMRT = 194 -ARM64_INS_CPYFMRTN = 195 -ARM64_INS_CPYFMRTRN = 196 -ARM64_INS_CPYFMRTWN = 197 -ARM64_INS_CPYFMT = 198 -ARM64_INS_CPYFMTN = 199 -ARM64_INS_CPYFMTRN = 200 -ARM64_INS_CPYFMTWN = 201 -ARM64_INS_CPYFMWN = 202 -ARM64_INS_CPYFMWT = 203 -ARM64_INS_CPYFMWTN = 204 -ARM64_INS_CPYFMWTRN = 205 -ARM64_INS_CPYFMWTWN = 206 -ARM64_INS_CPYFP = 207 -ARM64_INS_CPYFPN = 208 -ARM64_INS_CPYFPRN = 209 -ARM64_INS_CPYFPRT = 210 -ARM64_INS_CPYFPRTN = 211 -ARM64_INS_CPYFPRTRN = 212 -ARM64_INS_CPYFPRTWN = 213 -ARM64_INS_CPYFPT = 214 -ARM64_INS_CPYFPTN = 215 -ARM64_INS_CPYFPTRN = 216 -ARM64_INS_CPYFPTWN = 217 -ARM64_INS_CPYFPWN = 218 -ARM64_INS_CPYFPWT = 219 -ARM64_INS_CPYFPWTN = 220 -ARM64_INS_CPYFPWTRN = 221 -ARM64_INS_CPYFPWTWN = 222 -ARM64_INS_CPYM = 223 -ARM64_INS_CPYMN = 224 -ARM64_INS_CPYMRN = 225 -ARM64_INS_CPYMRT = 226 -ARM64_INS_CPYMRTN = 227 -ARM64_INS_CPYMRTRN = 228 -ARM64_INS_CPYMRTWN = 229 -ARM64_INS_CPYMT = 230 -ARM64_INS_CPYMTN = 231 -ARM64_INS_CPYMTRN = 232 -ARM64_INS_CPYMTWN = 233 -ARM64_INS_CPYMWN = 234 -ARM64_INS_CPYMWT = 235 -ARM64_INS_CPYMWTN = 236 -ARM64_INS_CPYMWTRN = 237 -ARM64_INS_CPYMWTWN = 238 -ARM64_INS_CPYP = 239 -ARM64_INS_CPYPN = 240 -ARM64_INS_CPYPRN = 241 -ARM64_INS_CPYPRT = 242 -ARM64_INS_CPYPRTN = 243 -ARM64_INS_CPYPRTRN = 244 -ARM64_INS_CPYPRTWN = 245 -ARM64_INS_CPYPT = 246 -ARM64_INS_CPYPTN = 247 -ARM64_INS_CPYPTRN = 248 -ARM64_INS_CPYPTWN = 249 -ARM64_INS_CPYPWN = 250 -ARM64_INS_CPYPWT = 251 -ARM64_INS_CPYPWTN = 252 -ARM64_INS_CPYPWTRN = 253 -ARM64_INS_CPYPWTWN = 254 -ARM64_INS_CRC32B = 255 -ARM64_INS_CRC32CB = 256 -ARM64_INS_CRC32CH = 257 -ARM64_INS_CRC32CW = 258 -ARM64_INS_CRC32CX = 259 -ARM64_INS_CRC32H = 260 -ARM64_INS_CRC32W = 261 -ARM64_INS_CRC32X = 262 -ARM64_INS_CSDB = 263 -ARM64_INS_CSEL = 264 -ARM64_INS_CSET = 265 -ARM64_INS_CSETM = 266 -ARM64_INS_CSINC = 267 -ARM64_INS_CSINV = 268 -ARM64_INS_CSNEG = 269 -ARM64_INS_CTERMEQ = 270 -ARM64_INS_CTERMNE = 271 -ARM64_INS_DCPS1 = 272 -ARM64_INS_DCPS2 = 273 -ARM64_INS_DCPS3 = 274 -ARM64_INS_DECB = 275 -ARM64_INS_DECD = 276 -ARM64_INS_DECH = 277 -ARM64_INS_DECP = 278 -ARM64_INS_DECW = 279 -ARM64_INS_DFB = 280 -ARM64_INS_DGH = 281 -ARM64_INS_DMB = 282 -ARM64_INS_DRPS = 283 -ARM64_INS_DSB = 284 -ARM64_INS_DUP = 285 -ARM64_INS_DUPM = 286 -ARM64_INS_EON = 287 -ARM64_INS_EOR = 288 -ARM64_INS_EOR3 = 289 -ARM64_INS_EORBT = 290 -ARM64_INS_EORS = 291 -ARM64_INS_EORTB = 292 -ARM64_INS_EORV = 293 -ARM64_INS_ERET = 294 -ARM64_INS_ERETAA = 295 -ARM64_INS_ERETAB = 296 -ARM64_INS_ESB = 297 -ARM64_INS_EXT = 298 -ARM64_INS_EXTR = 299 -ARM64_INS_FABD = 300 -ARM64_INS_FABS = 301 -ARM64_INS_FACGE = 302 -ARM64_INS_FACGT = 303 -ARM64_INS_FACLE = 304 -ARM64_INS_FACLT = 305 -ARM64_INS_FADD = 306 -ARM64_INS_FADDA = 307 -ARM64_INS_FADDP = 308 -ARM64_INS_FADDV = 309 -ARM64_INS_FCADD = 310 -ARM64_INS_FCCMP = 311 -ARM64_INS_FCCMPE = 312 -ARM64_INS_FCMEQ = 313 -ARM64_INS_FCMGE = 314 -ARM64_INS_FCMGT = 315 -ARM64_INS_FCMLA = 316 -ARM64_INS_FCMLE = 317 -ARM64_INS_FCMLT = 318 -ARM64_INS_FCMNE = 319 -ARM64_INS_FCMP = 320 -ARM64_INS_FCMPE = 321 -ARM64_INS_FCMUO = 322 -ARM64_INS_FCPY = 323 -ARM64_INS_FCSEL = 324 -ARM64_INS_FCVT = 325 -ARM64_INS_FCVTAS = 326 -ARM64_INS_FCVTAU = 327 -ARM64_INS_FCVTL = 328 -ARM64_INS_FCVTL2 = 329 -ARM64_INS_FCVTLT = 330 -ARM64_INS_FCVTMS = 331 -ARM64_INS_FCVTMU = 332 -ARM64_INS_FCVTN = 333 -ARM64_INS_FCVTN2 = 334 -ARM64_INS_FCVTNS = 335 -ARM64_INS_FCVTNT = 336 -ARM64_INS_FCVTNU = 337 -ARM64_INS_FCVTPS = 338 -ARM64_INS_FCVTPU = 339 -ARM64_INS_FCVTX = 340 -ARM64_INS_FCVTXN = 341 -ARM64_INS_FCVTXN2 = 342 -ARM64_INS_FCVTXNT = 343 -ARM64_INS_FCVTZS = 344 -ARM64_INS_FCVTZU = 345 -ARM64_INS_FDIV = 346 -ARM64_INS_FDIVR = 347 -ARM64_INS_FDUP = 348 -ARM64_INS_FEXPA = 349 -ARM64_INS_FJCVTZS = 350 -ARM64_INS_FLOGB = 351 -ARM64_INS_FMAD = 352 -ARM64_INS_FMADD = 353 -ARM64_INS_FMAX = 354 -ARM64_INS_FMAXNM = 355 -ARM64_INS_FMAXNMP = 356 -ARM64_INS_FMAXNMV = 357 -ARM64_INS_FMAXP = 358 -ARM64_INS_FMAXV = 359 -ARM64_INS_FMIN = 360 -ARM64_INS_FMINNM = 361 -ARM64_INS_FMINNMP = 362 -ARM64_INS_FMINNMV = 363 -ARM64_INS_FMINP = 364 -ARM64_INS_FMINV = 365 -ARM64_INS_FMLA = 366 -ARM64_INS_FMLAL = 367 -ARM64_INS_FMLAL2 = 368 -ARM64_INS_FMLALB = 369 -ARM64_INS_FMLALT = 370 -ARM64_INS_FMLS = 371 -ARM64_INS_FMLSL = 372 -ARM64_INS_FMLSL2 = 373 -ARM64_INS_FMLSLB = 374 -ARM64_INS_FMLSLT = 375 -ARM64_INS_FMMLA = 376 -ARM64_INS_FMOPA = 377 -ARM64_INS_FMOPS = 378 -ARM64_INS_FMOV = 379 -ARM64_INS_FMSB = 380 -ARM64_INS_FMSUB = 381 -ARM64_INS_FMUL = 382 -ARM64_INS_FMULX = 383 -ARM64_INS_FNEG = 384 -ARM64_INS_FNMAD = 385 -ARM64_INS_FNMADD = 386 -ARM64_INS_FNMLA = 387 -ARM64_INS_FNMLS = 388 -ARM64_INS_FNMSB = 389 -ARM64_INS_FNMSUB = 390 -ARM64_INS_FNMUL = 391 -ARM64_INS_FRECPE = 392 -ARM64_INS_FRECPS = 393 -ARM64_INS_FRECPX = 394 -ARM64_INS_FRINT32X = 395 -ARM64_INS_FRINT32Z = 396 -ARM64_INS_FRINT64X = 397 -ARM64_INS_FRINT64Z = 398 -ARM64_INS_FRINTA = 399 -ARM64_INS_FRINTI = 400 -ARM64_INS_FRINTM = 401 -ARM64_INS_FRINTN = 402 -ARM64_INS_FRINTP = 403 -ARM64_INS_FRINTX = 404 -ARM64_INS_FRINTZ = 405 -ARM64_INS_FRSQRTE = 406 -ARM64_INS_FRSQRTS = 407 -ARM64_INS_FSCALE = 408 -ARM64_INS_FSQRT = 409 -ARM64_INS_FSUB = 410 -ARM64_INS_FSUBR = 411 -ARM64_INS_FTMAD = 412 -ARM64_INS_FTSMUL = 413 -ARM64_INS_FTSSEL = 414 -ARM64_INS_GMI = 415 -ARM64_INS_HINT = 416 -ARM64_INS_HISTCNT = 417 -ARM64_INS_HISTSEG = 418 -ARM64_INS_HLT = 419 -ARM64_INS_HVC = 420 -ARM64_INS_INCB = 421 -ARM64_INS_INCD = 422 -ARM64_INS_INCH = 423 -ARM64_INS_INCP = 424 -ARM64_INS_INCW = 425 -ARM64_INS_INDEX = 426 -ARM64_INS_INS = 427 -ARM64_INS_INSR = 428 -ARM64_INS_IRG = 429 -ARM64_INS_ISB = 430 -ARM64_INS_LASTA = 431 -ARM64_INS_LASTB = 432 -ARM64_INS_LD1 = 433 -ARM64_INS_LD1B = 434 -ARM64_INS_LD1D = 435 -ARM64_INS_LD1H = 436 -ARM64_INS_LD1Q = 437 -ARM64_INS_LD1R = 438 -ARM64_INS_LD1RB = 439 -ARM64_INS_LD1RD = 440 -ARM64_INS_LD1RH = 441 -ARM64_INS_LD1ROB = 442 -ARM64_INS_LD1ROD = 443 -ARM64_INS_LD1ROH = 444 -ARM64_INS_LD1ROW = 445 -ARM64_INS_LD1RQB = 446 -ARM64_INS_LD1RQD = 447 -ARM64_INS_LD1RQH = 448 -ARM64_INS_LD1RQW = 449 -ARM64_INS_LD1RSB = 450 -ARM64_INS_LD1RSH = 451 -ARM64_INS_LD1RSW = 452 -ARM64_INS_LD1RW = 453 -ARM64_INS_LD1SB = 454 -ARM64_INS_LD1SH = 455 -ARM64_INS_LD1SW = 456 -ARM64_INS_LD1W = 457 -ARM64_INS_LD2 = 458 -ARM64_INS_LD2B = 459 -ARM64_INS_LD2D = 460 -ARM64_INS_LD2H = 461 -ARM64_INS_LD2R = 462 -ARM64_INS_LD2W = 463 -ARM64_INS_LD3 = 464 -ARM64_INS_LD3B = 465 -ARM64_INS_LD3D = 466 -ARM64_INS_LD3H = 467 -ARM64_INS_LD3R = 468 -ARM64_INS_LD3W = 469 -ARM64_INS_LD4 = 470 -ARM64_INS_LD4B = 471 -ARM64_INS_LD4D = 472 -ARM64_INS_LD4H = 473 -ARM64_INS_LD4R = 474 -ARM64_INS_LD4W = 475 -ARM64_INS_LD64B = 476 -ARM64_INS_LDADD = 477 -ARM64_INS_LDADDA = 478 -ARM64_INS_LDADDAB = 479 -ARM64_INS_LDADDAH = 480 -ARM64_INS_LDADDAL = 481 -ARM64_INS_LDADDALB = 482 -ARM64_INS_LDADDALH = 483 -ARM64_INS_LDADDB = 484 -ARM64_INS_LDADDH = 485 -ARM64_INS_LDADDL = 486 -ARM64_INS_LDADDLB = 487 -ARM64_INS_LDADDLH = 488 -ARM64_INS_LDAPR = 489 -ARM64_INS_LDAPRB = 490 -ARM64_INS_LDAPRH = 491 -ARM64_INS_LDAPUR = 492 -ARM64_INS_LDAPURB = 493 -ARM64_INS_LDAPURH = 494 -ARM64_INS_LDAPURSB = 495 -ARM64_INS_LDAPURSH = 496 -ARM64_INS_LDAPURSW = 497 -ARM64_INS_LDAR = 498 -ARM64_INS_LDARB = 499 -ARM64_INS_LDARH = 500 -ARM64_INS_LDAXP = 501 -ARM64_INS_LDAXR = 502 -ARM64_INS_LDAXRB = 503 -ARM64_INS_LDAXRH = 504 -ARM64_INS_LDCLR = 505 -ARM64_INS_LDCLRA = 506 -ARM64_INS_LDCLRAB = 507 -ARM64_INS_LDCLRAH = 508 -ARM64_INS_LDCLRAL = 509 -ARM64_INS_LDCLRALB = 510 -ARM64_INS_LDCLRALH = 511 -ARM64_INS_LDCLRB = 512 -ARM64_INS_LDCLRH = 513 -ARM64_INS_LDCLRL = 514 -ARM64_INS_LDCLRLB = 515 -ARM64_INS_LDCLRLH = 516 -ARM64_INS_LDEOR = 517 -ARM64_INS_LDEORA = 518 -ARM64_INS_LDEORAB = 519 -ARM64_INS_LDEORAH = 520 -ARM64_INS_LDEORAL = 521 -ARM64_INS_LDEORALB = 522 -ARM64_INS_LDEORALH = 523 -ARM64_INS_LDEORB = 524 -ARM64_INS_LDEORH = 525 -ARM64_INS_LDEORL = 526 -ARM64_INS_LDEORLB = 527 -ARM64_INS_LDEORLH = 528 -ARM64_INS_LDFF1B = 529 -ARM64_INS_LDFF1D = 530 -ARM64_INS_LDFF1H = 531 -ARM64_INS_LDFF1SB = 532 -ARM64_INS_LDFF1SH = 533 -ARM64_INS_LDFF1SW = 534 -ARM64_INS_LDFF1W = 535 -ARM64_INS_LDG = 536 -ARM64_INS_LDGM = 537 -ARM64_INS_LDLAR = 538 -ARM64_INS_LDLARB = 539 -ARM64_INS_LDLARH = 540 -ARM64_INS_LDNF1B = 541 -ARM64_INS_LDNF1D = 542 -ARM64_INS_LDNF1H = 543 -ARM64_INS_LDNF1SB = 544 -ARM64_INS_LDNF1SH = 545 -ARM64_INS_LDNF1SW = 546 -ARM64_INS_LDNF1W = 547 -ARM64_INS_LDNP = 548 -ARM64_INS_LDNT1B = 549 -ARM64_INS_LDNT1D = 550 -ARM64_INS_LDNT1H = 551 -ARM64_INS_LDNT1SB = 552 -ARM64_INS_LDNT1SH = 553 -ARM64_INS_LDNT1SW = 554 -ARM64_INS_LDNT1W = 555 -ARM64_INS_LDP = 556 -ARM64_INS_LDPSW = 557 -ARM64_INS_LDR = 558 -ARM64_INS_LDRAA = 559 -ARM64_INS_LDRAB = 560 -ARM64_INS_LDRB = 561 -ARM64_INS_LDRH = 562 -ARM64_INS_LDRSB = 563 -ARM64_INS_LDRSH = 564 -ARM64_INS_LDRSW = 565 -ARM64_INS_LDSET = 566 -ARM64_INS_LDSETA = 567 -ARM64_INS_LDSETAB = 568 -ARM64_INS_LDSETAH = 569 -ARM64_INS_LDSETAL = 570 -ARM64_INS_LDSETALB = 571 -ARM64_INS_LDSETALH = 572 -ARM64_INS_LDSETB = 573 -ARM64_INS_LDSETH = 574 -ARM64_INS_LDSETL = 575 -ARM64_INS_LDSETLB = 576 -ARM64_INS_LDSETLH = 577 -ARM64_INS_LDSMAX = 578 -ARM64_INS_LDSMAXA = 579 -ARM64_INS_LDSMAXAB = 580 -ARM64_INS_LDSMAXAH = 581 -ARM64_INS_LDSMAXAL = 582 -ARM64_INS_LDSMAXALB = 583 -ARM64_INS_LDSMAXALH = 584 -ARM64_INS_LDSMAXB = 585 -ARM64_INS_LDSMAXH = 586 -ARM64_INS_LDSMAXL = 587 -ARM64_INS_LDSMAXLB = 588 -ARM64_INS_LDSMAXLH = 589 -ARM64_INS_LDSMIN = 590 -ARM64_INS_LDSMINA = 591 -ARM64_INS_LDSMINAB = 592 -ARM64_INS_LDSMINAH = 593 -ARM64_INS_LDSMINAL = 594 -ARM64_INS_LDSMINALB = 595 -ARM64_INS_LDSMINALH = 596 -ARM64_INS_LDSMINB = 597 -ARM64_INS_LDSMINH = 598 -ARM64_INS_LDSMINL = 599 -ARM64_INS_LDSMINLB = 600 -ARM64_INS_LDSMINLH = 601 -ARM64_INS_LDTR = 602 -ARM64_INS_LDTRB = 603 -ARM64_INS_LDTRH = 604 -ARM64_INS_LDTRSB = 605 -ARM64_INS_LDTRSH = 606 -ARM64_INS_LDTRSW = 607 -ARM64_INS_LDUMAX = 608 -ARM64_INS_LDUMAXA = 609 -ARM64_INS_LDUMAXAB = 610 -ARM64_INS_LDUMAXAH = 611 -ARM64_INS_LDUMAXAL = 612 -ARM64_INS_LDUMAXALB = 613 -ARM64_INS_LDUMAXALH = 614 -ARM64_INS_LDUMAXB = 615 -ARM64_INS_LDUMAXH = 616 -ARM64_INS_LDUMAXL = 617 -ARM64_INS_LDUMAXLB = 618 -ARM64_INS_LDUMAXLH = 619 -ARM64_INS_LDUMIN = 620 -ARM64_INS_LDUMINA = 621 -ARM64_INS_LDUMINAB = 622 -ARM64_INS_LDUMINAH = 623 -ARM64_INS_LDUMINAL = 624 -ARM64_INS_LDUMINALB = 625 -ARM64_INS_LDUMINALH = 626 -ARM64_INS_LDUMINB = 627 -ARM64_INS_LDUMINH = 628 -ARM64_INS_LDUMINL = 629 -ARM64_INS_LDUMINLB = 630 -ARM64_INS_LDUMINLH = 631 -ARM64_INS_LDUR = 632 -ARM64_INS_LDURB = 633 -ARM64_INS_LDURH = 634 -ARM64_INS_LDURSB = 635 -ARM64_INS_LDURSH = 636 -ARM64_INS_LDURSW = 637 -ARM64_INS_LDXP = 638 -ARM64_INS_LDXR = 639 -ARM64_INS_LDXRB = 640 -ARM64_INS_LDXRH = 641 -ARM64_INS_LSL = 642 -ARM64_INS_LSLR = 643 -ARM64_INS_LSLV = 644 -ARM64_INS_LSR = 645 -ARM64_INS_LSRR = 646 -ARM64_INS_LSRV = 647 -ARM64_INS_MAD = 648 -ARM64_INS_MADD = 649 -ARM64_INS_MATCH = 650 -ARM64_INS_MLA = 651 -ARM64_INS_MLS = 652 -ARM64_INS_MNEG = 653 -ARM64_INS_MOV = 654 -ARM64_INS_MOVA = 655 -ARM64_INS_MOVI = 656 -ARM64_INS_MOVK = 657 -ARM64_INS_MOVN = 658 -ARM64_INS_MOVPRFX = 659 -ARM64_INS_MOVS = 660 -ARM64_INS_MOVZ = 661 -ARM64_INS_MRS = 662 -ARM64_INS_MSB = 663 -ARM64_INS_MSR = 664 -ARM64_INS_MSUB = 665 -ARM64_INS_MUL = 666 -ARM64_INS_MVN = 667 -ARM64_INS_MVNI = 668 -ARM64_INS_NAND = 669 -ARM64_INS_NANDS = 670 -ARM64_INS_NBSL = 671 -ARM64_INS_NEG = 672 -ARM64_INS_NEGS = 673 -ARM64_INS_NGC = 674 -ARM64_INS_NGCS = 675 -ARM64_INS_NMATCH = 676 -ARM64_INS_NOP = 677 -ARM64_INS_NOR = 678 -ARM64_INS_NORS = 679 -ARM64_INS_NOT = 680 -ARM64_INS_NOTS = 681 -ARM64_INS_ORN = 682 -ARM64_INS_ORNS = 683 -ARM64_INS_ORR = 684 -ARM64_INS_ORRS = 685 -ARM64_INS_ORV = 686 -ARM64_INS_PACDA = 687 -ARM64_INS_PACDB = 688 -ARM64_INS_PACDZA = 689 -ARM64_INS_PACDZB = 690 -ARM64_INS_PACGA = 691 -ARM64_INS_PACIA = 692 -ARM64_INS_PACIA1716 = 693 -ARM64_INS_PACIASP = 694 -ARM64_INS_PACIAZ = 695 -ARM64_INS_PACIB = 696 -ARM64_INS_PACIB1716 = 697 -ARM64_INS_PACIBSP = 698 -ARM64_INS_PACIBZ = 699 -ARM64_INS_PACIZA = 700 -ARM64_INS_PACIZB = 701 -ARM64_INS_PFALSE = 702 -ARM64_INS_PFIRST = 703 -ARM64_INS_PMUL = 704 -ARM64_INS_PMULL = 705 -ARM64_INS_PMULL2 = 706 -ARM64_INS_PMULLB = 707 -ARM64_INS_PMULLT = 708 -ARM64_INS_PNEXT = 709 -ARM64_INS_PRFB = 710 -ARM64_INS_PRFD = 711 -ARM64_INS_PRFH = 712 -ARM64_INS_PRFM = 713 -ARM64_INS_PRFUM = 714 -ARM64_INS_PRFW = 715 -ARM64_INS_PSB = 716 -ARM64_INS_PSEL = 717 -ARM64_INS_PSSBB = 718 -ARM64_INS_PTEST = 719 -ARM64_INS_PTRUE = 720 -ARM64_INS_PTRUES = 721 -ARM64_INS_PUNPKHI = 722 -ARM64_INS_PUNPKLO = 723 -ARM64_INS_RADDHN = 724 -ARM64_INS_RADDHN2 = 725 -ARM64_INS_RADDHNB = 726 -ARM64_INS_RADDHNT = 727 -ARM64_INS_RAX1 = 728 -ARM64_INS_RBIT = 729 -ARM64_INS_RDFFR = 730 -ARM64_INS_RDFFRS = 731 -ARM64_INS_RDVL = 732 -ARM64_INS_RET = 733 -ARM64_INS_RETAA = 734 -ARM64_INS_RETAB = 735 -ARM64_INS_REV = 736 -ARM64_INS_REV16 = 737 -ARM64_INS_REV32 = 738 -ARM64_INS_REV64 = 739 -ARM64_INS_REVB = 740 -ARM64_INS_REVD = 741 -ARM64_INS_REVH = 742 -ARM64_INS_REVW = 743 -ARM64_INS_RMIF = 744 -ARM64_INS_ROR = 745 -ARM64_INS_RORV = 746 -ARM64_INS_RSHRN = 747 -ARM64_INS_RSHRN2 = 748 -ARM64_INS_RSHRNB = 749 -ARM64_INS_RSHRNT = 750 -ARM64_INS_RSUBHN = 751 -ARM64_INS_RSUBHN2 = 752 -ARM64_INS_RSUBHNB = 753 -ARM64_INS_RSUBHNT = 754 -ARM64_INS_SABA = 755 -ARM64_INS_SABAL = 756 -ARM64_INS_SABAL2 = 757 -ARM64_INS_SABALB = 758 -ARM64_INS_SABALT = 759 -ARM64_INS_SABD = 760 -ARM64_INS_SABDL = 761 -ARM64_INS_SABDL2 = 762 -ARM64_INS_SABDLB = 763 -ARM64_INS_SABDLT = 764 -ARM64_INS_SADALP = 765 -ARM64_INS_SADDL = 766 -ARM64_INS_SADDL2 = 767 -ARM64_INS_SADDLB = 768 -ARM64_INS_SADDLBT = 769 -ARM64_INS_SADDLP = 770 -ARM64_INS_SADDLT = 771 -ARM64_INS_SADDLV = 772 -ARM64_INS_SADDV = 773 -ARM64_INS_SADDW = 774 -ARM64_INS_SADDW2 = 775 -ARM64_INS_SADDWB = 776 -ARM64_INS_SADDWT = 777 -ARM64_INS_SB = 778 -ARM64_INS_SBC = 779 -ARM64_INS_SBCLB = 780 -ARM64_INS_SBCLT = 781 -ARM64_INS_SBCS = 782 -ARM64_INS_SBFM = 783 -ARM64_INS_SCLAMP = 784 -ARM64_INS_SCVTF = 785 -ARM64_INS_SDIV = 786 -ARM64_INS_SDIVR = 787 -ARM64_INS_SDOT = 788 -ARM64_INS_SEL = 789 -ARM64_INS_SETE = 790 -ARM64_INS_SETEN = 791 -ARM64_INS_SETET = 792 -ARM64_INS_SETETN = 793 -ARM64_INS_SETF16 = 794 -ARM64_INS_SETF8 = 795 -ARM64_INS_SETFFR = 796 -ARM64_INS_SETGE = 797 -ARM64_INS_SETGEN = 798 -ARM64_INS_SETGET = 799 -ARM64_INS_SETGETN = 800 -ARM64_INS_SETGM = 801 -ARM64_INS_SETGMN = 802 -ARM64_INS_SETGMT = 803 -ARM64_INS_SETGMTN = 804 -ARM64_INS_SETGP = 805 -ARM64_INS_SETGPN = 806 -ARM64_INS_SETGPT = 807 -ARM64_INS_SETGPTN = 808 -ARM64_INS_SETM = 809 -ARM64_INS_SETMN = 810 -ARM64_INS_SETMT = 811 -ARM64_INS_SETMTN = 812 -ARM64_INS_SETP = 813 -ARM64_INS_SETPN = 814 -ARM64_INS_SETPT = 815 -ARM64_INS_SETPTN = 816 -ARM64_INS_SEV = 817 -ARM64_INS_SEVL = 818 -ARM64_INS_SHA1C = 819 -ARM64_INS_SHA1H = 820 -ARM64_INS_SHA1M = 821 -ARM64_INS_SHA1P = 822 -ARM64_INS_SHA1SU0 = 823 -ARM64_INS_SHA1SU1 = 824 -ARM64_INS_SHA256H = 825 -ARM64_INS_SHA256H2 = 826 -ARM64_INS_SHA256SU0 = 827 -ARM64_INS_SHA256SU1 = 828 -ARM64_INS_SHA512H = 829 -ARM64_INS_SHA512H2 = 830 -ARM64_INS_SHA512SU0 = 831 -ARM64_INS_SHA512SU1 = 832 -ARM64_INS_SHADD = 833 -ARM64_INS_SHL = 834 -ARM64_INS_SHLL = 835 -ARM64_INS_SHLL2 = 836 -ARM64_INS_SHRN = 837 -ARM64_INS_SHRN2 = 838 -ARM64_INS_SHRNB = 839 -ARM64_INS_SHRNT = 840 -ARM64_INS_SHSUB = 841 -ARM64_INS_SHSUBR = 842 -ARM64_INS_SLI = 843 -ARM64_INS_SM3PARTW1 = 844 -ARM64_INS_SM3PARTW2 = 845 -ARM64_INS_SM3SS1 = 846 -ARM64_INS_SM3TT1A = 847 -ARM64_INS_SM3TT1B = 848 -ARM64_INS_SM3TT2A = 849 -ARM64_INS_SM3TT2B = 850 -ARM64_INS_SM4E = 851 -ARM64_INS_SM4EKEY = 852 -ARM64_INS_SMADDL = 853 -ARM64_INS_SMAX = 854 -ARM64_INS_SMAXP = 855 -ARM64_INS_SMAXV = 856 -ARM64_INS_SMC = 857 -ARM64_INS_SMIN = 858 -ARM64_INS_SMINP = 859 -ARM64_INS_SMINV = 860 -ARM64_INS_SMLAL = 861 -ARM64_INS_SMLAL2 = 862 -ARM64_INS_SMLALB = 863 -ARM64_INS_SMLALT = 864 -ARM64_INS_SMLSL = 865 -ARM64_INS_SMLSL2 = 866 -ARM64_INS_SMLSLB = 867 -ARM64_INS_SMLSLT = 868 -ARM64_INS_SMMLA = 869 -ARM64_INS_SMNEGL = 870 -ARM64_INS_SMOPA = 871 -ARM64_INS_SMOPS = 872 -ARM64_INS_SMOV = 873 -ARM64_INS_SMSTART = 874 -ARM64_INS_SMSTOP = 875 -ARM64_INS_SMSUBL = 876 -ARM64_INS_SMULH = 877 -ARM64_INS_SMULL = 878 -ARM64_INS_SMULL2 = 879 -ARM64_INS_SMULLB = 880 -ARM64_INS_SMULLT = 881 -ARM64_INS_SPLICE = 882 -ARM64_INS_SQABS = 883 -ARM64_INS_SQADD = 884 -ARM64_INS_SQCADD = 885 -ARM64_INS_SQDECB = 886 -ARM64_INS_SQDECD = 887 -ARM64_INS_SQDECH = 888 -ARM64_INS_SQDECP = 889 -ARM64_INS_SQDECW = 890 -ARM64_INS_SQDMLAL = 891 -ARM64_INS_SQDMLAL2 = 892 -ARM64_INS_SQDMLALB = 893 -ARM64_INS_SQDMLALBT = 894 -ARM64_INS_SQDMLALT = 895 -ARM64_INS_SQDMLSL = 896 -ARM64_INS_SQDMLSL2 = 897 -ARM64_INS_SQDMLSLB = 898 -ARM64_INS_SQDMLSLBT = 899 -ARM64_INS_SQDMLSLT = 900 -ARM64_INS_SQDMULH = 901 -ARM64_INS_SQDMULL = 902 -ARM64_INS_SQDMULL2 = 903 -ARM64_INS_SQDMULLB = 904 -ARM64_INS_SQDMULLT = 905 -ARM64_INS_SQINCB = 906 -ARM64_INS_SQINCD = 907 -ARM64_INS_SQINCH = 908 -ARM64_INS_SQINCP = 909 -ARM64_INS_SQINCW = 910 -ARM64_INS_SQNEG = 911 -ARM64_INS_SQRDCMLAH = 912 -ARM64_INS_SQRDMLAH = 913 -ARM64_INS_SQRDMLSH = 914 -ARM64_INS_SQRDMULH = 915 -ARM64_INS_SQRSHL = 916 -ARM64_INS_SQRSHLR = 917 -ARM64_INS_SQRSHRN = 918 -ARM64_INS_SQRSHRN2 = 919 -ARM64_INS_SQRSHRNB = 920 -ARM64_INS_SQRSHRNT = 921 -ARM64_INS_SQRSHRUN = 922 -ARM64_INS_SQRSHRUN2 = 923 -ARM64_INS_SQRSHRUNB = 924 -ARM64_INS_SQRSHRUNT = 925 -ARM64_INS_SQSHL = 926 -ARM64_INS_SQSHLR = 927 -ARM64_INS_SQSHLU = 928 -ARM64_INS_SQSHRN = 929 -ARM64_INS_SQSHRN2 = 930 -ARM64_INS_SQSHRNB = 931 -ARM64_INS_SQSHRNT = 932 -ARM64_INS_SQSHRUN = 933 -ARM64_INS_SQSHRUN2 = 934 -ARM64_INS_SQSHRUNB = 935 -ARM64_INS_SQSHRUNT = 936 -ARM64_INS_SQSUB = 937 -ARM64_INS_SQSUBR = 938 -ARM64_INS_SQXTN = 939 -ARM64_INS_SQXTN2 = 940 -ARM64_INS_SQXTNB = 941 -ARM64_INS_SQXTNT = 942 -ARM64_INS_SQXTUN = 943 -ARM64_INS_SQXTUN2 = 944 -ARM64_INS_SQXTUNB = 945 -ARM64_INS_SQXTUNT = 946 -ARM64_INS_SRHADD = 947 -ARM64_INS_SRI = 948 -ARM64_INS_SRSHL = 949 -ARM64_INS_SRSHLR = 950 -ARM64_INS_SRSHR = 951 -ARM64_INS_SRSRA = 952 -ARM64_INS_SSBB = 953 -ARM64_INS_SSHL = 954 -ARM64_INS_SSHLL = 955 -ARM64_INS_SSHLL2 = 956 -ARM64_INS_SSHLLB = 957 -ARM64_INS_SSHLLT = 958 -ARM64_INS_SSHR = 959 -ARM64_INS_SSRA = 960 -ARM64_INS_SSUBL = 961 -ARM64_INS_SSUBL2 = 962 -ARM64_INS_SSUBLB = 963 -ARM64_INS_SSUBLBT = 964 -ARM64_INS_SSUBLT = 965 -ARM64_INS_SSUBLTB = 966 -ARM64_INS_SSUBW = 967 -ARM64_INS_SSUBW2 = 968 -ARM64_INS_SSUBWB = 969 -ARM64_INS_SSUBWT = 970 -ARM64_INS_ST1 = 971 -ARM64_INS_ST1B = 972 -ARM64_INS_ST1D = 973 -ARM64_INS_ST1H = 974 -ARM64_INS_ST1Q = 975 -ARM64_INS_ST1W = 976 -ARM64_INS_ST2 = 977 -ARM64_INS_ST2B = 978 -ARM64_INS_ST2D = 979 -ARM64_INS_ST2G = 980 -ARM64_INS_ST2H = 981 -ARM64_INS_ST2W = 982 -ARM64_INS_ST3 = 983 -ARM64_INS_ST3B = 984 -ARM64_INS_ST3D = 985 -ARM64_INS_ST3H = 986 -ARM64_INS_ST3W = 987 -ARM64_INS_ST4 = 988 -ARM64_INS_ST4B = 989 -ARM64_INS_ST4D = 990 -ARM64_INS_ST4H = 991 -ARM64_INS_ST4W = 992 -ARM64_INS_ST64B = 993 -ARM64_INS_ST64BV = 994 -ARM64_INS_ST64BV0 = 995 -ARM64_INS_STADD = 996 -ARM64_INS_STADDB = 997 -ARM64_INS_STADDH = 998 -ARM64_INS_STADDL = 999 -ARM64_INS_STADDLB = 1000 -ARM64_INS_STADDLH = 1001 -ARM64_INS_STCLR = 1002 -ARM64_INS_STCLRB = 1003 -ARM64_INS_STCLRH = 1004 -ARM64_INS_STCLRL = 1005 -ARM64_INS_STCLRLB = 1006 -ARM64_INS_STCLRLH = 1007 -ARM64_INS_STEOR = 1008 -ARM64_INS_STEORB = 1009 -ARM64_INS_STEORH = 1010 -ARM64_INS_STEORL = 1011 -ARM64_INS_STEORLB = 1012 -ARM64_INS_STEORLH = 1013 -ARM64_INS_STG = 1014 -ARM64_INS_STGM = 1015 -ARM64_INS_STGP = 1016 -ARM64_INS_STLLR = 1017 -ARM64_INS_STLLRB = 1018 -ARM64_INS_STLLRH = 1019 -ARM64_INS_STLR = 1020 -ARM64_INS_STLRB = 1021 -ARM64_INS_STLRH = 1022 -ARM64_INS_STLUR = 1023 -ARM64_INS_STLURB = 1024 -ARM64_INS_STLURH = 1025 -ARM64_INS_STLXP = 1026 -ARM64_INS_STLXR = 1027 -ARM64_INS_STLXRB = 1028 -ARM64_INS_STLXRH = 1029 -ARM64_INS_STNP = 1030 -ARM64_INS_STNT1B = 1031 -ARM64_INS_STNT1D = 1032 -ARM64_INS_STNT1H = 1033 -ARM64_INS_STNT1W = 1034 -ARM64_INS_STP = 1035 -ARM64_INS_STR = 1036 -ARM64_INS_STRB = 1037 -ARM64_INS_STRH = 1038 -ARM64_INS_STSET = 1039 -ARM64_INS_STSETB = 1040 -ARM64_INS_STSETH = 1041 -ARM64_INS_STSETL = 1042 -ARM64_INS_STSETLB = 1043 -ARM64_INS_STSETLH = 1044 -ARM64_INS_STSMAX = 1045 -ARM64_INS_STSMAXB = 1046 -ARM64_INS_STSMAXH = 1047 -ARM64_INS_STSMAXL = 1048 -ARM64_INS_STSMAXLB = 1049 -ARM64_INS_STSMAXLH = 1050 -ARM64_INS_STSMIN = 1051 -ARM64_INS_STSMINB = 1052 -ARM64_INS_STSMINH = 1053 -ARM64_INS_STSMINL = 1054 -ARM64_INS_STSMINLB = 1055 -ARM64_INS_STSMINLH = 1056 -ARM64_INS_STTR = 1057 -ARM64_INS_STTRB = 1058 -ARM64_INS_STTRH = 1059 -ARM64_INS_STUMAX = 1060 -ARM64_INS_STUMAXB = 1061 -ARM64_INS_STUMAXH = 1062 -ARM64_INS_STUMAXL = 1063 -ARM64_INS_STUMAXLB = 1064 -ARM64_INS_STUMAXLH = 1065 -ARM64_INS_STUMIN = 1066 -ARM64_INS_STUMINB = 1067 -ARM64_INS_STUMINH = 1068 -ARM64_INS_STUMINL = 1069 -ARM64_INS_STUMINLB = 1070 -ARM64_INS_STUMINLH = 1071 -ARM64_INS_STUR = 1072 -ARM64_INS_STURB = 1073 -ARM64_INS_STURH = 1074 -ARM64_INS_STXP = 1075 -ARM64_INS_STXR = 1076 -ARM64_INS_STXRB = 1077 -ARM64_INS_STXRH = 1078 -ARM64_INS_STZ2G = 1079 -ARM64_INS_STZG = 1080 -ARM64_INS_STZGM = 1081 -ARM64_INS_SUB = 1082 -ARM64_INS_SUBG = 1083 -ARM64_INS_SUBHN = 1084 -ARM64_INS_SUBHN2 = 1085 -ARM64_INS_SUBHNB = 1086 -ARM64_INS_SUBHNT = 1087 -ARM64_INS_SUBP = 1088 -ARM64_INS_SUBPS = 1089 -ARM64_INS_SUBR = 1090 -ARM64_INS_SUBS = 1091 -ARM64_INS_SUDOT = 1092 -ARM64_INS_SUMOPA = 1093 -ARM64_INS_SUMOPS = 1094 -ARM64_INS_SUNPKHI = 1095 -ARM64_INS_SUNPKLO = 1096 -ARM64_INS_SUQADD = 1097 -ARM64_INS_SVC = 1098 -ARM64_INS_SWP = 1099 -ARM64_INS_SWPA = 1100 -ARM64_INS_SWPAB = 1101 -ARM64_INS_SWPAH = 1102 -ARM64_INS_SWPAL = 1103 -ARM64_INS_SWPALB = 1104 -ARM64_INS_SWPALH = 1105 -ARM64_INS_SWPB = 1106 -ARM64_INS_SWPH = 1107 -ARM64_INS_SWPL = 1108 -ARM64_INS_SWPLB = 1109 -ARM64_INS_SWPLH = 1110 -ARM64_INS_SXTB = 1111 -ARM64_INS_SXTH = 1112 -ARM64_INS_SXTL = 1113 -ARM64_INS_SXTL2 = 1114 -ARM64_INS_SXTW = 1115 -ARM64_INS_SYS = 1116 -ARM64_INS_SYSL = 1117 -ARM64_INS_TBL = 1118 -ARM64_INS_TBNZ = 1119 -ARM64_INS_TBX = 1120 -ARM64_INS_TBZ = 1121 -ARM64_INS_TCANCEL = 1122 -ARM64_INS_TCOMMIT = 1123 -ARM64_INS_TRN1 = 1124 -ARM64_INS_TRN2 = 1125 -ARM64_INS_TSB = 1126 -ARM64_INS_TST = 1127 -ARM64_INS_TSTART = 1128 -ARM64_INS_TTEST = 1129 -ARM64_INS_UABA = 1130 -ARM64_INS_UABAL = 1131 -ARM64_INS_UABAL2 = 1132 -ARM64_INS_UABALB = 1133 -ARM64_INS_UABALT = 1134 -ARM64_INS_UABD = 1135 -ARM64_INS_UABDL = 1136 -ARM64_INS_UABDL2 = 1137 -ARM64_INS_UABDLB = 1138 -ARM64_INS_UABDLT = 1139 -ARM64_INS_UADALP = 1140 -ARM64_INS_UADDL = 1141 -ARM64_INS_UADDL2 = 1142 -ARM64_INS_UADDLB = 1143 -ARM64_INS_UADDLP = 1144 -ARM64_INS_UADDLT = 1145 -ARM64_INS_UADDLV = 1146 -ARM64_INS_UADDV = 1147 -ARM64_INS_UADDW = 1148 -ARM64_INS_UADDW2 = 1149 -ARM64_INS_UADDWB = 1150 -ARM64_INS_UADDWT = 1151 -ARM64_INS_UBFM = 1152 -ARM64_INS_UCLAMP = 1153 -ARM64_INS_UCVTF = 1154 -ARM64_INS_UDF = 1155 -ARM64_INS_UDIV = 1156 -ARM64_INS_UDIVR = 1157 -ARM64_INS_UDOT = 1158 -ARM64_INS_UHADD = 1159 -ARM64_INS_UHSUB = 1160 -ARM64_INS_UHSUBR = 1161 -ARM64_INS_UMADDL = 1162 -ARM64_INS_UMAX = 1163 -ARM64_INS_UMAXP = 1164 -ARM64_INS_UMAXV = 1165 -ARM64_INS_UMIN = 1166 -ARM64_INS_UMINP = 1167 -ARM64_INS_UMINV = 1168 -ARM64_INS_UMLAL = 1169 -ARM64_INS_UMLAL2 = 1170 -ARM64_INS_UMLALB = 1171 -ARM64_INS_UMLALT = 1172 -ARM64_INS_UMLSL = 1173 -ARM64_INS_UMLSL2 = 1174 -ARM64_INS_UMLSLB = 1175 -ARM64_INS_UMLSLT = 1176 -ARM64_INS_UMMLA = 1177 -ARM64_INS_UMNEGL = 1178 -ARM64_INS_UMOPA = 1179 -ARM64_INS_UMOPS = 1180 -ARM64_INS_UMOV = 1181 -ARM64_INS_UMSUBL = 1182 -ARM64_INS_UMULH = 1183 -ARM64_INS_UMULL = 1184 -ARM64_INS_UMULL2 = 1185 -ARM64_INS_UMULLB = 1186 -ARM64_INS_UMULLT = 1187 -ARM64_INS_UQADD = 1188 -ARM64_INS_UQDECB = 1189 -ARM64_INS_UQDECD = 1190 -ARM64_INS_UQDECH = 1191 -ARM64_INS_UQDECP = 1192 -ARM64_INS_UQDECW = 1193 -ARM64_INS_UQINCB = 1194 -ARM64_INS_UQINCD = 1195 -ARM64_INS_UQINCH = 1196 -ARM64_INS_UQINCP = 1197 -ARM64_INS_UQINCW = 1198 -ARM64_INS_UQRSHL = 1199 -ARM64_INS_UQRSHLR = 1200 -ARM64_INS_UQRSHRN = 1201 -ARM64_INS_UQRSHRN2 = 1202 -ARM64_INS_UQRSHRNB = 1203 -ARM64_INS_UQRSHRNT = 1204 -ARM64_INS_UQSHL = 1205 -ARM64_INS_UQSHLR = 1206 -ARM64_INS_UQSHRN = 1207 -ARM64_INS_UQSHRN2 = 1208 -ARM64_INS_UQSHRNB = 1209 -ARM64_INS_UQSHRNT = 1210 -ARM64_INS_UQSUB = 1211 -ARM64_INS_UQSUBR = 1212 -ARM64_INS_UQXTN = 1213 -ARM64_INS_UQXTN2 = 1214 -ARM64_INS_UQXTNB = 1215 -ARM64_INS_UQXTNT = 1216 -ARM64_INS_URECPE = 1217 -ARM64_INS_URHADD = 1218 -ARM64_INS_URSHL = 1219 -ARM64_INS_URSHLR = 1220 -ARM64_INS_URSHR = 1221 -ARM64_INS_URSQRTE = 1222 -ARM64_INS_URSRA = 1223 -ARM64_INS_USDOT = 1224 -ARM64_INS_USHL = 1225 -ARM64_INS_USHLL = 1226 -ARM64_INS_USHLL2 = 1227 -ARM64_INS_USHLLB = 1228 -ARM64_INS_USHLLT = 1229 -ARM64_INS_USHR = 1230 -ARM64_INS_USMMLA = 1231 -ARM64_INS_USMOPA = 1232 -ARM64_INS_USMOPS = 1233 -ARM64_INS_USQADD = 1234 -ARM64_INS_USRA = 1235 -ARM64_INS_USUBL = 1236 -ARM64_INS_USUBL2 = 1237 -ARM64_INS_USUBLB = 1238 -ARM64_INS_USUBLT = 1239 -ARM64_INS_USUBW = 1240 -ARM64_INS_USUBW2 = 1241 -ARM64_INS_USUBWB = 1242 -ARM64_INS_USUBWT = 1243 -ARM64_INS_UUNPKHI = 1244 -ARM64_INS_UUNPKLO = 1245 -ARM64_INS_UXTB = 1246 -ARM64_INS_UXTH = 1247 -ARM64_INS_UXTL = 1248 -ARM64_INS_UXTL2 = 1249 -ARM64_INS_UXTW = 1250 -ARM64_INS_UZP1 = 1251 -ARM64_INS_UZP2 = 1252 -ARM64_INS_WFE = 1253 -ARM64_INS_WFET = 1254 -ARM64_INS_WFI = 1255 -ARM64_INS_WFIT = 1256 -ARM64_INS_WHILEGE = 1257 -ARM64_INS_WHILEGT = 1258 -ARM64_INS_WHILEHI = 1259 -ARM64_INS_WHILEHS = 1260 -ARM64_INS_WHILELE = 1261 -ARM64_INS_WHILELO = 1262 -ARM64_INS_WHILELS = 1263 -ARM64_INS_WHILELT = 1264 -ARM64_INS_WHILERW = 1265 -ARM64_INS_WHILEWR = 1266 -ARM64_INS_WRFFR = 1267 -ARM64_INS_XAFLAG = 1268 -ARM64_INS_XAR = 1269 -ARM64_INS_XPACD = 1270 -ARM64_INS_XPACI = 1271 -ARM64_INS_XPACLRI = 1272 -ARM64_INS_XTN = 1273 -ARM64_INS_XTN2 = 1274 -ARM64_INS_YIELD = 1275 -ARM64_INS_ZERO = 1276 -ARM64_INS_ZIP1 = 1277 -ARM64_INS_ZIP2 = 1278 -ARM64_INS_SBFIZ = 1279 -ARM64_INS_UBFIZ = 1280 -ARM64_INS_SBFX = 1281 -ARM64_INS_UBFX = 1282 -ARM64_INS_BFI = 1283 -ARM64_INS_BFXIL = 1284 -ARM64_INS_IC = 1285 -ARM64_INS_DC = 1286 -ARM64_INS_AT = 1287 -ARM64_INS_TLBI = 1288 -ARM64_INS_ENDING = 1289 - -ARM64_GRP_INVALID = 0 -ARM64_GRP_JUMP = 1 -ARM64_GRP_CALL = 2 -ARM64_GRP_RET = 3 -ARM64_GRP_INT = 4 -ARM64_GRP_PRIVILEGE = 6 -ARM64_GRP_BRANCH_RELATIVE = 7 -ARM64_GRP_PAC = 8 -ARM64_GRP_CRYPTO = 128 -ARM64_GRP_FPARMV8 = 129 -ARM64_GRP_NEON = 130 -ARM64_GRP_CRC = 131 -ARM64_GRP_AES = 132 -ARM64_GRP_DOTPROD = 133 -ARM64_GRP_FULLFP16 = 134 -ARM64_GRP_LSE = 135 -ARM64_GRP_RCPC = 136 -ARM64_GRP_RDM = 137 -ARM64_GRP_SHA2 = 138 -ARM64_GRP_SHA3 = 139 -ARM64_GRP_SM4 = 140 -ARM64_GRP_SVE = 141 -ARM64_GRP_SVE2 = 142 -ARM64_GRP_SVE2AES = 143 -ARM64_GRP_SVE2BitPerm = 144 -ARM64_GRP_SVE2SHA3 = 145 -ARM64_GRP_SVE2SM4 = 146 -ARM64_GRP_SME = 147 -ARM64_GRP_SMEF64 = 148 -ARM64_GRP_SMEI64 = 149 -ARM64_GRP_MatMulFP32 = 150 -ARM64_GRP_MatMulFP64 = 151 -ARM64_GRP_MatMulInt8 = 152 -ARM64_GRP_V8_1A = 153 -ARM64_GRP_V8_3A = 154 -ARM64_GRP_V8_4A = 155 -ARM64_GRP_ENDING = 156 diff --git a/.tools/python-revlibs/capstone/arm_const.py b/.tools/python-revlibs/capstone/arm_const.py deleted file mode 100644 index 22c4f6d..0000000 --- a/.tools/python-revlibs/capstone/arm_const.py +++ /dev/null @@ -1,831 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [arm_const.py] - -ARM_SFT_INVALID = 0 -ARM_SFT_ASR = 1 -ARM_SFT_LSL = 2 -ARM_SFT_LSR = 3 -ARM_SFT_ROR = 4 -ARM_SFT_RRX = 5 -ARM_SFT_ASR_REG = 6 -ARM_SFT_LSL_REG = 7 -ARM_SFT_LSR_REG = 8 -ARM_SFT_ROR_REG = 9 -ARM_SFT_RRX_REG = 10 - -ARM_CC_INVALID = 0 -ARM_CC_EQ = 1 -ARM_CC_NE = 2 -ARM_CC_HS = 3 -ARM_CC_LO = 4 -ARM_CC_MI = 5 -ARM_CC_PL = 6 -ARM_CC_VS = 7 -ARM_CC_VC = 8 -ARM_CC_HI = 9 -ARM_CC_LS = 10 -ARM_CC_GE = 11 -ARM_CC_LT = 12 -ARM_CC_GT = 13 -ARM_CC_LE = 14 -ARM_CC_AL = 15 - -ARM_SYSREG_INVALID = 0 -ARM_SYSREG_SPSR_C = 1 -ARM_SYSREG_SPSR_X = 2 -ARM_SYSREG_SPSR_S = 4 -ARM_SYSREG_SPSR_F = 8 -ARM_SYSREG_CPSR_C = 16 -ARM_SYSREG_CPSR_X = 32 -ARM_SYSREG_CPSR_S = 64 -ARM_SYSREG_CPSR_F = 128 -ARM_SYSREG_APSR = 256 -ARM_SYSREG_APSR_G = 257 -ARM_SYSREG_APSR_NZCVQ = 258 -ARM_SYSREG_APSR_NZCVQG = 259 -ARM_SYSREG_IAPSR = 260 -ARM_SYSREG_IAPSR_G = 261 -ARM_SYSREG_IAPSR_NZCVQG = 262 -ARM_SYSREG_IAPSR_NZCVQ = 263 -ARM_SYSREG_EAPSR = 264 -ARM_SYSREG_EAPSR_G = 265 -ARM_SYSREG_EAPSR_NZCVQG = 266 -ARM_SYSREG_EAPSR_NZCVQ = 267 -ARM_SYSREG_XPSR = 268 -ARM_SYSREG_XPSR_G = 269 -ARM_SYSREG_XPSR_NZCVQG = 270 -ARM_SYSREG_XPSR_NZCVQ = 271 -ARM_SYSREG_IPSR = 272 -ARM_SYSREG_EPSR = 273 -ARM_SYSREG_IEPSR = 274 -ARM_SYSREG_MSP = 275 -ARM_SYSREG_PSP = 276 -ARM_SYSREG_PRIMASK = 277 -ARM_SYSREG_BASEPRI = 278 -ARM_SYSREG_BASEPRI_MAX = 279 -ARM_SYSREG_FAULTMASK = 280 -ARM_SYSREG_CONTROL = 281 -ARM_SYSREG_MSPLIM = 282 -ARM_SYSREG_PSPLIM = 283 -ARM_SYSREG_MSP_NS = 284 -ARM_SYSREG_PSP_NS = 285 -ARM_SYSREG_MSPLIM_NS = 286 -ARM_SYSREG_PSPLIM_NS = 287 -ARM_SYSREG_PRIMASK_NS = 288 -ARM_SYSREG_BASEPRI_NS = 289 -ARM_SYSREG_FAULTMASK_NS = 290 -ARM_SYSREG_CONTROL_NS = 291 -ARM_SYSREG_SP_NS = 292 -ARM_SYSREG_R8_USR = 293 -ARM_SYSREG_R9_USR = 294 -ARM_SYSREG_R10_USR = 295 -ARM_SYSREG_R11_USR = 296 -ARM_SYSREG_R12_USR = 297 -ARM_SYSREG_SP_USR = 298 -ARM_SYSREG_LR_USR = 299 -ARM_SYSREG_R8_FIQ = 300 -ARM_SYSREG_R9_FIQ = 301 -ARM_SYSREG_R10_FIQ = 302 -ARM_SYSREG_R11_FIQ = 303 -ARM_SYSREG_R12_FIQ = 304 -ARM_SYSREG_SP_FIQ = 305 -ARM_SYSREG_LR_FIQ = 306 -ARM_SYSREG_LR_IRQ = 307 -ARM_SYSREG_SP_IRQ = 308 -ARM_SYSREG_LR_SVC = 309 -ARM_SYSREG_SP_SVC = 310 -ARM_SYSREG_LR_ABT = 311 -ARM_SYSREG_SP_ABT = 312 -ARM_SYSREG_LR_UND = 313 -ARM_SYSREG_SP_UND = 314 -ARM_SYSREG_LR_MON = 315 -ARM_SYSREG_SP_MON = 316 -ARM_SYSREG_ELR_HYP = 317 -ARM_SYSREG_SP_HYP = 318 -ARM_SYSREG_SPSR_FIQ = 319 -ARM_SYSREG_SPSR_IRQ = 320 -ARM_SYSREG_SPSR_SVC = 321 -ARM_SYSREG_SPSR_ABT = 322 -ARM_SYSREG_SPSR_UND = 323 -ARM_SYSREG_SPSR_MON = 324 -ARM_SYSREG_SPSR_HYP = 325 - -ARM_MB_INVALID = 0 -ARM_MB_RESERVED_0 = 1 -ARM_MB_OSHLD = 2 -ARM_MB_OSHST = 3 -ARM_MB_OSH = 4 -ARM_MB_RESERVED_4 = 5 -ARM_MB_NSHLD = 6 -ARM_MB_NSHST = 7 -ARM_MB_NSH = 8 -ARM_MB_RESERVED_8 = 9 -ARM_MB_ISHLD = 10 -ARM_MB_ISHST = 11 -ARM_MB_ISH = 12 -ARM_MB_RESERVED_12 = 13 -ARM_MB_LD = 14 -ARM_MB_ST = 15 -ARM_MB_SY = 16 - -ARM_OP_INVALID = 0 -ARM_OP_REG = 1 -ARM_OP_IMM = 2 -ARM_OP_MEM = 3 -ARM_OP_FP = 4 -ARM_OP_CIMM = 64 -ARM_OP_PIMM = 65 -ARM_OP_SETEND = 66 -ARM_OP_SYSREG = 67 - -ARM_SETEND_INVALID = 0 -ARM_SETEND_BE = 1 -ARM_SETEND_LE = 2 - -ARM_CPSMODE_INVALID = 0 -ARM_CPSMODE_IE = 2 -ARM_CPSMODE_ID = 3 - -ARM_CPSFLAG_INVALID = 0 -ARM_CPSFLAG_F = 1 -ARM_CPSFLAG_I = 2 -ARM_CPSFLAG_A = 4 -ARM_CPSFLAG_NONE = 16 - -ARM_VECTORDATA_INVALID = 0 -ARM_VECTORDATA_I8 = 1 -ARM_VECTORDATA_I16 = 2 -ARM_VECTORDATA_I32 = 3 -ARM_VECTORDATA_I64 = 4 -ARM_VECTORDATA_S8 = 5 -ARM_VECTORDATA_S16 = 6 -ARM_VECTORDATA_S32 = 7 -ARM_VECTORDATA_S64 = 8 -ARM_VECTORDATA_U8 = 9 -ARM_VECTORDATA_U16 = 10 -ARM_VECTORDATA_U32 = 11 -ARM_VECTORDATA_U64 = 12 -ARM_VECTORDATA_P8 = 13 -ARM_VECTORDATA_F16 = 14 -ARM_VECTORDATA_F32 = 15 -ARM_VECTORDATA_F64 = 16 -ARM_VECTORDATA_F16F64 = 17 -ARM_VECTORDATA_F64F16 = 18 -ARM_VECTORDATA_F32F16 = 19 -ARM_VECTORDATA_F16F32 = 20 -ARM_VECTORDATA_F64F32 = 21 -ARM_VECTORDATA_F32F64 = 22 -ARM_VECTORDATA_S32F32 = 23 -ARM_VECTORDATA_U32F32 = 24 -ARM_VECTORDATA_F32S32 = 25 -ARM_VECTORDATA_F32U32 = 26 -ARM_VECTORDATA_F64S16 = 27 -ARM_VECTORDATA_F32S16 = 28 -ARM_VECTORDATA_F64S32 = 29 -ARM_VECTORDATA_S16F64 = 30 -ARM_VECTORDATA_S16F32 = 31 -ARM_VECTORDATA_S32F64 = 32 -ARM_VECTORDATA_U16F64 = 33 -ARM_VECTORDATA_U16F32 = 34 -ARM_VECTORDATA_U32F64 = 35 -ARM_VECTORDATA_F64U16 = 36 -ARM_VECTORDATA_F32U16 = 37 -ARM_VECTORDATA_F64U32 = 38 -ARM_VECTORDATA_F16U16 = 39 -ARM_VECTORDATA_U16F16 = 40 -ARM_VECTORDATA_F16U32 = 41 -ARM_VECTORDATA_U32F16 = 42 - -ARM_REG_INVALID = 0 -ARM_REG_APSR = 1 -ARM_REG_APSR_NZCV = 2 -ARM_REG_CPSR = 3 -ARM_REG_FPEXC = 4 -ARM_REG_FPINST = 5 -ARM_REG_FPSCR = 6 -ARM_REG_FPSCR_NZCV = 7 -ARM_REG_FPSID = 8 -ARM_REG_ITSTATE = 9 -ARM_REG_LR = 10 -ARM_REG_PC = 11 -ARM_REG_SP = 12 -ARM_REG_SPSR = 13 -ARM_REG_D0 = 14 -ARM_REG_D1 = 15 -ARM_REG_D2 = 16 -ARM_REG_D3 = 17 -ARM_REG_D4 = 18 -ARM_REG_D5 = 19 -ARM_REG_D6 = 20 -ARM_REG_D7 = 21 -ARM_REG_D8 = 22 -ARM_REG_D9 = 23 -ARM_REG_D10 = 24 -ARM_REG_D11 = 25 -ARM_REG_D12 = 26 -ARM_REG_D13 = 27 -ARM_REG_D14 = 28 -ARM_REG_D15 = 29 -ARM_REG_D16 = 30 -ARM_REG_D17 = 31 -ARM_REG_D18 = 32 -ARM_REG_D19 = 33 -ARM_REG_D20 = 34 -ARM_REG_D21 = 35 -ARM_REG_D22 = 36 -ARM_REG_D23 = 37 -ARM_REG_D24 = 38 -ARM_REG_D25 = 39 -ARM_REG_D26 = 40 -ARM_REG_D27 = 41 -ARM_REG_D28 = 42 -ARM_REG_D29 = 43 -ARM_REG_D30 = 44 -ARM_REG_D31 = 45 -ARM_REG_FPINST2 = 46 -ARM_REG_MVFR0 = 47 -ARM_REG_MVFR1 = 48 -ARM_REG_MVFR2 = 49 -ARM_REG_Q0 = 50 -ARM_REG_Q1 = 51 -ARM_REG_Q2 = 52 -ARM_REG_Q3 = 53 -ARM_REG_Q4 = 54 -ARM_REG_Q5 = 55 -ARM_REG_Q6 = 56 -ARM_REG_Q7 = 57 -ARM_REG_Q8 = 58 -ARM_REG_Q9 = 59 -ARM_REG_Q10 = 60 -ARM_REG_Q11 = 61 -ARM_REG_Q12 = 62 -ARM_REG_Q13 = 63 -ARM_REG_Q14 = 64 -ARM_REG_Q15 = 65 -ARM_REG_R0 = 66 -ARM_REG_R1 = 67 -ARM_REG_R2 = 68 -ARM_REG_R3 = 69 -ARM_REG_R4 = 70 -ARM_REG_R5 = 71 -ARM_REG_R6 = 72 -ARM_REG_R7 = 73 -ARM_REG_R8 = 74 -ARM_REG_R9 = 75 -ARM_REG_R10 = 76 -ARM_REG_R11 = 77 -ARM_REG_R12 = 78 -ARM_REG_S0 = 79 -ARM_REG_S1 = 80 -ARM_REG_S2 = 81 -ARM_REG_S3 = 82 -ARM_REG_S4 = 83 -ARM_REG_S5 = 84 -ARM_REG_S6 = 85 -ARM_REG_S7 = 86 -ARM_REG_S8 = 87 -ARM_REG_S9 = 88 -ARM_REG_S10 = 89 -ARM_REG_S11 = 90 -ARM_REG_S12 = 91 -ARM_REG_S13 = 92 -ARM_REG_S14 = 93 -ARM_REG_S15 = 94 -ARM_REG_S16 = 95 -ARM_REG_S17 = 96 -ARM_REG_S18 = 97 -ARM_REG_S19 = 98 -ARM_REG_S20 = 99 -ARM_REG_S21 = 100 -ARM_REG_S22 = 101 -ARM_REG_S23 = 102 -ARM_REG_S24 = 103 -ARM_REG_S25 = 104 -ARM_REG_S26 = 105 -ARM_REG_S27 = 106 -ARM_REG_S28 = 107 -ARM_REG_S29 = 108 -ARM_REG_S30 = 109 -ARM_REG_S31 = 110 -ARM_REG_ENDING = 111 -ARM_REG_R13 = ARM_REG_SP -ARM_REG_R14 = ARM_REG_LR -ARM_REG_R15 = ARM_REG_PC -ARM_REG_SB = ARM_REG_R9 -ARM_REG_SL = ARM_REG_R10 -ARM_REG_FP = ARM_REG_R11 -ARM_REG_IP = ARM_REG_R12 - -ARM_INS_INVALID = 0 -ARM_INS_ADC = 1 -ARM_INS_ADD = 2 -ARM_INS_ADDW = 3 -ARM_INS_ADR = 4 -ARM_INS_AESD = 5 -ARM_INS_AESE = 6 -ARM_INS_AESIMC = 7 -ARM_INS_AESMC = 8 -ARM_INS_AND = 9 -ARM_INS_ASR = 10 -ARM_INS_B = 11 -ARM_INS_BFC = 12 -ARM_INS_BFI = 13 -ARM_INS_BIC = 14 -ARM_INS_BKPT = 15 -ARM_INS_BL = 16 -ARM_INS_BLX = 17 -ARM_INS_BLXNS = 18 -ARM_INS_BX = 19 -ARM_INS_BXJ = 20 -ARM_INS_BXNS = 21 -ARM_INS_CBNZ = 22 -ARM_INS_CBZ = 23 -ARM_INS_CDP = 24 -ARM_INS_CDP2 = 25 -ARM_INS_CLREX = 26 -ARM_INS_CLZ = 27 -ARM_INS_CMN = 28 -ARM_INS_CMP = 29 -ARM_INS_CPS = 30 -ARM_INS_CRC32B = 31 -ARM_INS_CRC32CB = 32 -ARM_INS_CRC32CH = 33 -ARM_INS_CRC32CW = 34 -ARM_INS_CRC32H = 35 -ARM_INS_CRC32W = 36 -ARM_INS_CSDB = 37 -ARM_INS_DBG = 38 -ARM_INS_DCPS1 = 39 -ARM_INS_DCPS2 = 40 -ARM_INS_DCPS3 = 41 -ARM_INS_DFB = 42 -ARM_INS_DMB = 43 -ARM_INS_DSB = 44 -ARM_INS_EOR = 45 -ARM_INS_ERET = 46 -ARM_INS_ESB = 47 -ARM_INS_FADDD = 48 -ARM_INS_FADDS = 49 -ARM_INS_FCMPZD = 50 -ARM_INS_FCMPZS = 51 -ARM_INS_FCONSTD = 52 -ARM_INS_FCONSTS = 53 -ARM_INS_FLDMDBX = 54 -ARM_INS_FLDMIAX = 55 -ARM_INS_FMDHR = 56 -ARM_INS_FMDLR = 57 -ARM_INS_FMSTAT = 58 -ARM_INS_FSTMDBX = 59 -ARM_INS_FSTMIAX = 60 -ARM_INS_FSUBD = 61 -ARM_INS_FSUBS = 62 -ARM_INS_HINT = 63 -ARM_INS_HLT = 64 -ARM_INS_HVC = 65 -ARM_INS_ISB = 66 -ARM_INS_IT = 67 -ARM_INS_LDA = 68 -ARM_INS_LDAB = 69 -ARM_INS_LDAEX = 70 -ARM_INS_LDAEXB = 71 -ARM_INS_LDAEXD = 72 -ARM_INS_LDAEXH = 73 -ARM_INS_LDAH = 74 -ARM_INS_LDC = 75 -ARM_INS_LDC2 = 76 -ARM_INS_LDC2L = 77 -ARM_INS_LDCL = 78 -ARM_INS_LDM = 79 -ARM_INS_LDMDA = 80 -ARM_INS_LDMDB = 81 -ARM_INS_LDMIB = 82 -ARM_INS_LDR = 83 -ARM_INS_LDRB = 84 -ARM_INS_LDRBT = 85 -ARM_INS_LDRD = 86 -ARM_INS_LDREX = 87 -ARM_INS_LDREXB = 88 -ARM_INS_LDREXD = 89 -ARM_INS_LDREXH = 90 -ARM_INS_LDRH = 91 -ARM_INS_LDRHT = 92 -ARM_INS_LDRSB = 93 -ARM_INS_LDRSBT = 94 -ARM_INS_LDRSH = 95 -ARM_INS_LDRSHT = 96 -ARM_INS_LDRT = 97 -ARM_INS_LSL = 98 -ARM_INS_LSR = 99 -ARM_INS_MCR = 100 -ARM_INS_MCR2 = 101 -ARM_INS_MCRR = 102 -ARM_INS_MCRR2 = 103 -ARM_INS_MLA = 104 -ARM_INS_MLS = 105 -ARM_INS_MOV = 106 -ARM_INS_MOVS = 107 -ARM_INS_MOVT = 108 -ARM_INS_MOVW = 109 -ARM_INS_MRC = 110 -ARM_INS_MRC2 = 111 -ARM_INS_MRRC = 112 -ARM_INS_MRRC2 = 113 -ARM_INS_MRS = 114 -ARM_INS_MSR = 115 -ARM_INS_MUL = 116 -ARM_INS_MVN = 117 -ARM_INS_NEG = 118 -ARM_INS_NOP = 119 -ARM_INS_ORN = 120 -ARM_INS_ORR = 121 -ARM_INS_PKHBT = 122 -ARM_INS_PKHTB = 123 -ARM_INS_PLD = 124 -ARM_INS_PLDW = 125 -ARM_INS_PLI = 126 -ARM_INS_POP = 127 -ARM_INS_PUSH = 128 -ARM_INS_QADD = 129 -ARM_INS_QADD16 = 130 -ARM_INS_QADD8 = 131 -ARM_INS_QASX = 132 -ARM_INS_QDADD = 133 -ARM_INS_QDSUB = 134 -ARM_INS_QSAX = 135 -ARM_INS_QSUB = 136 -ARM_INS_QSUB16 = 137 -ARM_INS_QSUB8 = 138 -ARM_INS_RBIT = 139 -ARM_INS_REV = 140 -ARM_INS_REV16 = 141 -ARM_INS_REVSH = 142 -ARM_INS_RFEDA = 143 -ARM_INS_RFEDB = 144 -ARM_INS_RFEIA = 145 -ARM_INS_RFEIB = 146 -ARM_INS_ROR = 147 -ARM_INS_RRX = 148 -ARM_INS_RSB = 149 -ARM_INS_RSC = 150 -ARM_INS_SADD16 = 151 -ARM_INS_SADD8 = 152 -ARM_INS_SASX = 153 -ARM_INS_SBC = 154 -ARM_INS_SBFX = 155 -ARM_INS_SDIV = 156 -ARM_INS_SEL = 157 -ARM_INS_SETEND = 158 -ARM_INS_SETPAN = 159 -ARM_INS_SEV = 160 -ARM_INS_SEVL = 161 -ARM_INS_SG = 162 -ARM_INS_SHA1C = 163 -ARM_INS_SHA1H = 164 -ARM_INS_SHA1M = 165 -ARM_INS_SHA1P = 166 -ARM_INS_SHA1SU0 = 167 -ARM_INS_SHA1SU1 = 168 -ARM_INS_SHA256H = 169 -ARM_INS_SHA256H2 = 170 -ARM_INS_SHA256SU0 = 171 -ARM_INS_SHA256SU1 = 172 -ARM_INS_SHADD16 = 173 -ARM_INS_SHADD8 = 174 -ARM_INS_SHASX = 175 -ARM_INS_SHSAX = 176 -ARM_INS_SHSUB16 = 177 -ARM_INS_SHSUB8 = 178 -ARM_INS_SMC = 179 -ARM_INS_SMLABB = 180 -ARM_INS_SMLABT = 181 -ARM_INS_SMLAD = 182 -ARM_INS_SMLADX = 183 -ARM_INS_SMLAL = 184 -ARM_INS_SMLALBB = 185 -ARM_INS_SMLALBT = 186 -ARM_INS_SMLALD = 187 -ARM_INS_SMLALDX = 188 -ARM_INS_SMLALTB = 189 -ARM_INS_SMLALTT = 190 -ARM_INS_SMLATB = 191 -ARM_INS_SMLATT = 192 -ARM_INS_SMLAWB = 193 -ARM_INS_SMLAWT = 194 -ARM_INS_SMLSD = 195 -ARM_INS_SMLSDX = 196 -ARM_INS_SMLSLD = 197 -ARM_INS_SMLSLDX = 198 -ARM_INS_SMMLA = 199 -ARM_INS_SMMLAR = 200 -ARM_INS_SMMLS = 201 -ARM_INS_SMMLSR = 202 -ARM_INS_SMMUL = 203 -ARM_INS_SMMULR = 204 -ARM_INS_SMUAD = 205 -ARM_INS_SMUADX = 206 -ARM_INS_SMULBB = 207 -ARM_INS_SMULBT = 208 -ARM_INS_SMULL = 209 -ARM_INS_SMULTB = 210 -ARM_INS_SMULTT = 211 -ARM_INS_SMULWB = 212 -ARM_INS_SMULWT = 213 -ARM_INS_SMUSD = 214 -ARM_INS_SMUSDX = 215 -ARM_INS_SRSDA = 216 -ARM_INS_SRSDB = 217 -ARM_INS_SRSIA = 218 -ARM_INS_SRSIB = 219 -ARM_INS_SSAT = 220 -ARM_INS_SSAT16 = 221 -ARM_INS_SSAX = 222 -ARM_INS_SSUB16 = 223 -ARM_INS_SSUB8 = 224 -ARM_INS_STC = 225 -ARM_INS_STC2 = 226 -ARM_INS_STC2L = 227 -ARM_INS_STCL = 228 -ARM_INS_STL = 229 -ARM_INS_STLB = 230 -ARM_INS_STLEX = 231 -ARM_INS_STLEXB = 232 -ARM_INS_STLEXD = 233 -ARM_INS_STLEXH = 234 -ARM_INS_STLH = 235 -ARM_INS_STM = 236 -ARM_INS_STMDA = 237 -ARM_INS_STMDB = 238 -ARM_INS_STMIB = 239 -ARM_INS_STR = 240 -ARM_INS_STRB = 241 -ARM_INS_STRBT = 242 -ARM_INS_STRD = 243 -ARM_INS_STREX = 244 -ARM_INS_STREXB = 245 -ARM_INS_STREXD = 246 -ARM_INS_STREXH = 247 -ARM_INS_STRH = 248 -ARM_INS_STRHT = 249 -ARM_INS_STRT = 250 -ARM_INS_SUB = 251 -ARM_INS_SUBS = 252 -ARM_INS_SUBW = 253 -ARM_INS_SVC = 254 -ARM_INS_SWP = 255 -ARM_INS_SWPB = 256 -ARM_INS_SXTAB = 257 -ARM_INS_SXTAB16 = 258 -ARM_INS_SXTAH = 259 -ARM_INS_SXTB = 260 -ARM_INS_SXTB16 = 261 -ARM_INS_SXTH = 262 -ARM_INS_TBB = 263 -ARM_INS_TBH = 264 -ARM_INS_TEQ = 265 -ARM_INS_TRAP = 266 -ARM_INS_TSB = 267 -ARM_INS_TST = 268 -ARM_INS_TT = 269 -ARM_INS_TTA = 270 -ARM_INS_TTAT = 271 -ARM_INS_TTT = 272 -ARM_INS_UADD16 = 273 -ARM_INS_UADD8 = 274 -ARM_INS_UASX = 275 -ARM_INS_UBFX = 276 -ARM_INS_UDF = 277 -ARM_INS_UDIV = 278 -ARM_INS_UHADD16 = 279 -ARM_INS_UHADD8 = 280 -ARM_INS_UHASX = 281 -ARM_INS_UHSAX = 282 -ARM_INS_UHSUB16 = 283 -ARM_INS_UHSUB8 = 284 -ARM_INS_UMAAL = 285 -ARM_INS_UMLAL = 286 -ARM_INS_UMULL = 287 -ARM_INS_UQADD16 = 288 -ARM_INS_UQADD8 = 289 -ARM_INS_UQASX = 290 -ARM_INS_UQSAX = 291 -ARM_INS_UQSUB16 = 292 -ARM_INS_UQSUB8 = 293 -ARM_INS_USAD8 = 294 -ARM_INS_USADA8 = 295 -ARM_INS_USAT = 296 -ARM_INS_USAT16 = 297 -ARM_INS_USAX = 298 -ARM_INS_USUB16 = 299 -ARM_INS_USUB8 = 300 -ARM_INS_UXTAB = 301 -ARM_INS_UXTAB16 = 302 -ARM_INS_UXTAH = 303 -ARM_INS_UXTB = 304 -ARM_INS_UXTB16 = 305 -ARM_INS_UXTH = 306 -ARM_INS_VABA = 307 -ARM_INS_VABAL = 308 -ARM_INS_VABD = 309 -ARM_INS_VABDL = 310 -ARM_INS_VABS = 311 -ARM_INS_VACGE = 312 -ARM_INS_VACGT = 313 -ARM_INS_VACLE = 314 -ARM_INS_VACLT = 315 -ARM_INS_VADD = 316 -ARM_INS_VADDHN = 317 -ARM_INS_VADDL = 318 -ARM_INS_VADDW = 319 -ARM_INS_VAND = 320 -ARM_INS_VBIC = 321 -ARM_INS_VBIF = 322 -ARM_INS_VBIT = 323 -ARM_INS_VBSL = 324 -ARM_INS_VCADD = 325 -ARM_INS_VCEQ = 326 -ARM_INS_VCGE = 327 -ARM_INS_VCGT = 328 -ARM_INS_VCLE = 329 -ARM_INS_VCLS = 330 -ARM_INS_VCLT = 331 -ARM_INS_VCLZ = 332 -ARM_INS_VCMLA = 333 -ARM_INS_VCMP = 334 -ARM_INS_VCMPE = 335 -ARM_INS_VCNT = 336 -ARM_INS_VCVT = 337 -ARM_INS_VCVTA = 338 -ARM_INS_VCVTB = 339 -ARM_INS_VCVTM = 340 -ARM_INS_VCVTN = 341 -ARM_INS_VCVTP = 342 -ARM_INS_VCVTR = 343 -ARM_INS_VCVTT = 344 -ARM_INS_VDIV = 345 -ARM_INS_VDUP = 346 -ARM_INS_VEOR = 347 -ARM_INS_VEXT = 348 -ARM_INS_VFMA = 349 -ARM_INS_VFMS = 350 -ARM_INS_VFNMA = 351 -ARM_INS_VFNMS = 352 -ARM_INS_VHADD = 353 -ARM_INS_VHSUB = 354 -ARM_INS_VINS = 355 -ARM_INS_VJCVT = 356 -ARM_INS_VLD1 = 357 -ARM_INS_VLD2 = 358 -ARM_INS_VLD3 = 359 -ARM_INS_VLD4 = 360 -ARM_INS_VLDMDB = 361 -ARM_INS_VLDMIA = 362 -ARM_INS_VLDR = 363 -ARM_INS_VLLDM = 364 -ARM_INS_VLSTM = 365 -ARM_INS_VMAX = 366 -ARM_INS_VMAXNM = 367 -ARM_INS_VMIN = 368 -ARM_INS_VMINNM = 369 -ARM_INS_VMLA = 370 -ARM_INS_VMLAL = 371 -ARM_INS_VMLS = 372 -ARM_INS_VMLSL = 373 -ARM_INS_VMOV = 374 -ARM_INS_VMOVL = 375 -ARM_INS_VMOVN = 376 -ARM_INS_VMOVX = 377 -ARM_INS_VMRS = 378 -ARM_INS_VMSR = 379 -ARM_INS_VMUL = 380 -ARM_INS_VMULL = 381 -ARM_INS_VMVN = 382 -ARM_INS_VNEG = 383 -ARM_INS_VNMLA = 384 -ARM_INS_VNMLS = 385 -ARM_INS_VNMUL = 386 -ARM_INS_VORN = 387 -ARM_INS_VORR = 388 -ARM_INS_VPADAL = 389 -ARM_INS_VPADD = 390 -ARM_INS_VPADDL = 391 -ARM_INS_VPMAX = 392 -ARM_INS_VPMIN = 393 -ARM_INS_VPOP = 394 -ARM_INS_VPUSH = 395 -ARM_INS_VQABS = 396 -ARM_INS_VQADD = 397 -ARM_INS_VQDMLAL = 398 -ARM_INS_VQDMLSL = 399 -ARM_INS_VQDMULH = 400 -ARM_INS_VQDMULL = 401 -ARM_INS_VQMOVN = 402 -ARM_INS_VQMOVUN = 403 -ARM_INS_VQNEG = 404 -ARM_INS_VQRDMLAH = 405 -ARM_INS_VQRDMLSH = 406 -ARM_INS_VQRDMULH = 407 -ARM_INS_VQRSHL = 408 -ARM_INS_VQRSHRN = 409 -ARM_INS_VQRSHRUN = 410 -ARM_INS_VQSHL = 411 -ARM_INS_VQSHLU = 412 -ARM_INS_VQSHRN = 413 -ARM_INS_VQSHRUN = 414 -ARM_INS_VQSUB = 415 -ARM_INS_VRADDHN = 416 -ARM_INS_VRECPE = 417 -ARM_INS_VRECPS = 418 -ARM_INS_VREV16 = 419 -ARM_INS_VREV32 = 420 -ARM_INS_VREV64 = 421 -ARM_INS_VRHADD = 422 -ARM_INS_VRINTA = 423 -ARM_INS_VRINTM = 424 -ARM_INS_VRINTN = 425 -ARM_INS_VRINTP = 426 -ARM_INS_VRINTR = 427 -ARM_INS_VRINTX = 428 -ARM_INS_VRINTZ = 429 -ARM_INS_VRSHL = 430 -ARM_INS_VRSHR = 431 -ARM_INS_VRSHRN = 432 -ARM_INS_VRSQRTE = 433 -ARM_INS_VRSQRTS = 434 -ARM_INS_VRSRA = 435 -ARM_INS_VRSUBHN = 436 -ARM_INS_VSDOT = 437 -ARM_INS_VSELEQ = 438 -ARM_INS_VSELGE = 439 -ARM_INS_VSELGT = 440 -ARM_INS_VSELVS = 441 -ARM_INS_VSHL = 442 -ARM_INS_VSHLL = 443 -ARM_INS_VSHR = 444 -ARM_INS_VSHRN = 445 -ARM_INS_VSLI = 446 -ARM_INS_VSQRT = 447 -ARM_INS_VSRA = 448 -ARM_INS_VSRI = 449 -ARM_INS_VST1 = 450 -ARM_INS_VST2 = 451 -ARM_INS_VST3 = 452 -ARM_INS_VST4 = 453 -ARM_INS_VSTMDB = 454 -ARM_INS_VSTMIA = 455 -ARM_INS_VSTR = 456 -ARM_INS_VSUB = 457 -ARM_INS_VSUBHN = 458 -ARM_INS_VSUBL = 459 -ARM_INS_VSUBW = 460 -ARM_INS_VSWP = 461 -ARM_INS_VTBL = 462 -ARM_INS_VTBX = 463 -ARM_INS_VTRN = 464 -ARM_INS_VTST = 465 -ARM_INS_VUDOT = 466 -ARM_INS_VUZP = 467 -ARM_INS_VZIP = 468 -ARM_INS_WFE = 469 -ARM_INS_WFI = 470 -ARM_INS_YIELD = 471 -ARM_INS_ENDING = 472 - -ARM_GRP_INVALID = 0 -ARM_GRP_JUMP = 1 -ARM_GRP_CALL = 2 -ARM_GRP_INT = 4 -ARM_GRP_PRIVILEGE = 6 -ARM_GRP_BRANCH_RELATIVE = 7 -ARM_GRP_CRYPTO = 128 -ARM_GRP_DATABARRIER = 129 -ARM_GRP_DIVIDE = 130 -ARM_GRP_FPARMV8 = 131 -ARM_GRP_MULTPRO = 132 -ARM_GRP_NEON = 133 -ARM_GRP_T2EXTRACTPACK = 134 -ARM_GRP_THUMB2DSP = 135 -ARM_GRP_TRUSTZONE = 136 -ARM_GRP_V4T = 137 -ARM_GRP_V5T = 138 -ARM_GRP_V5TE = 139 -ARM_GRP_V6 = 140 -ARM_GRP_V6T2 = 141 -ARM_GRP_V7 = 142 -ARM_GRP_V8 = 143 -ARM_GRP_VFP2 = 144 -ARM_GRP_VFP3 = 145 -ARM_GRP_VFP4 = 146 -ARM_GRP_ARM = 147 -ARM_GRP_MCLASS = 148 -ARM_GRP_NOTMCLASS = 149 -ARM_GRP_THUMB = 150 -ARM_GRP_THUMB1ONLY = 151 -ARM_GRP_THUMB2 = 152 -ARM_GRP_PREV8 = 153 -ARM_GRP_FPVMLX = 154 -ARM_GRP_MULOPS = 155 -ARM_GRP_CRC = 156 -ARM_GRP_DPVFP = 157 -ARM_GRP_V6M = 158 -ARM_GRP_VIRTUALIZATION = 159 -ARM_GRP_ENDING = 160 diff --git a/.tools/python-revlibs/capstone/bpf.py b/.tools/python-revlibs/capstone/bpf.py deleted file mode 100644 index d6263bd..0000000 --- a/.tools/python-revlibs/capstone/bpf.py +++ /dev/null @@ -1,69 +0,0 @@ -# Capstone Python bindings -# BPF by david942j , 2019 - -import ctypes -from . import copy_ctypes_list -from .bpf_const import * - -class BPFOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint8), - ('disp', ctypes.c_int32), - ) - -class BPFOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint8), - ('imm', ctypes.c_uint64), - ('off', ctypes.c_uint32), - ('mem', BPFOpMem), - ('mmem', ctypes.c_uint32), - ('msh', ctypes.c_uint32), - ('ext', ctypes.c_uint32), - ) - -class BPFOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', BPFOpValue), - ('access', ctypes.c_uint8), - ) - - @property - def reg(self): - return self.value.reg - - @property - def imm(self): - return self.value.imm - - @property - def off(self): - return self.value.off - - @property - def mem(self): - return self.value.mem - - @property - def mmem(self): - return self.value.mmem - - @property - def msh(self): - return self.value.msh - - @property - def ext(self): - return self.value.ext - - -class CsBPF(ctypes.Structure): - _fields_ = ( - ('op_count', ctypes.c_uint8), - ('operands', BPFOp * 4), - ) - -def get_arch_info(a): - return (copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/bpf_const.py b/.tools/python-revlibs/capstone/bpf_const.py deleted file mode 100644 index 6b89081..0000000 --- a/.tools/python-revlibs/capstone/bpf_const.py +++ /dev/null @@ -1,115 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [bpf_const.py] - -BPF_OP_INVALID = 0 -BPF_OP_REG = 1 -BPF_OP_IMM = 2 -BPF_OP_OFF = 3 -BPF_OP_MEM = 4 -BPF_OP_MMEM = 5 -BPF_OP_MSH = 6 -BPF_OP_EXT = 7 - -BPF_REG_INVALID = 0 -BPF_REG_A = 1 -BPF_REG_X = 2 -BPF_REG_R0 = 3 -BPF_REG_R1 = 4 -BPF_REG_R2 = 5 -BPF_REG_R3 = 6 -BPF_REG_R4 = 7 -BPF_REG_R5 = 8 -BPF_REG_R6 = 9 -BPF_REG_R7 = 10 -BPF_REG_R8 = 11 -BPF_REG_R9 = 12 -BPF_REG_R10 = 13 -BPF_REG_ENDING = 14 - -BPF_EXT_INVALID = 0 -BPF_EXT_LEN = 1 - -BPF_INS_INVALID = 0 -BPF_INS_ADD = 1 -BPF_INS_SUB = 2 -BPF_INS_MUL = 3 -BPF_INS_DIV = 4 -BPF_INS_OR = 5 -BPF_INS_AND = 6 -BPF_INS_LSH = 7 -BPF_INS_RSH = 8 -BPF_INS_NEG = 9 -BPF_INS_MOD = 10 -BPF_INS_XOR = 11 -BPF_INS_MOV = 12 -BPF_INS_ARSH = 13 -BPF_INS_ADD64 = 14 -BPF_INS_SUB64 = 15 -BPF_INS_MUL64 = 16 -BPF_INS_DIV64 = 17 -BPF_INS_OR64 = 18 -BPF_INS_AND64 = 19 -BPF_INS_LSH64 = 20 -BPF_INS_RSH64 = 21 -BPF_INS_NEG64 = 22 -BPF_INS_MOD64 = 23 -BPF_INS_XOR64 = 24 -BPF_INS_MOV64 = 25 -BPF_INS_ARSH64 = 26 -BPF_INS_LE16 = 27 -BPF_INS_LE32 = 28 -BPF_INS_LE64 = 29 -BPF_INS_BE16 = 30 -BPF_INS_BE32 = 31 -BPF_INS_BE64 = 32 -BPF_INS_LDW = 33 -BPF_INS_LDH = 34 -BPF_INS_LDB = 35 -BPF_INS_LDDW = 36 -BPF_INS_LDXW = 37 -BPF_INS_LDXH = 38 -BPF_INS_LDXB = 39 -BPF_INS_LDXDW = 40 -BPF_INS_STW = 41 -BPF_INS_STH = 42 -BPF_INS_STB = 43 -BPF_INS_STDW = 44 -BPF_INS_STXW = 45 -BPF_INS_STXH = 46 -BPF_INS_STXB = 47 -BPF_INS_STXDW = 48 -BPF_INS_XADDW = 49 -BPF_INS_XADDDW = 50 -BPF_INS_JMP = 51 -BPF_INS_JEQ = 52 -BPF_INS_JGT = 53 -BPF_INS_JGE = 54 -BPF_INS_JSET = 55 -BPF_INS_JNE = 56 -BPF_INS_JSGT = 57 -BPF_INS_JSGE = 58 -BPF_INS_CALL = 59 -BPF_INS_CALLX = 60 -BPF_INS_EXIT = 61 -BPF_INS_JLT = 62 -BPF_INS_JLE = 63 -BPF_INS_JSLT = 64 -BPF_INS_JSLE = 65 -BPF_INS_RET = 66 -BPF_INS_TAX = 67 -BPF_INS_TXA = 68 -BPF_INS_ENDING = 69 -BPF_INS_LD = BPF_INS_LDW -BPF_INS_LDX = BPF_INS_LDXW -BPF_INS_ST = BPF_INS_STW -BPF_INS_STX = BPF_INS_STXW - -BPF_GRP_INVALID = 0 -BPF_GRP_LOAD = 1 -BPF_GRP_STORE = 2 -BPF_GRP_ALU = 3 -BPF_GRP_JUMP = 4 -BPF_GRP_CALL = 5 -BPF_GRP_RETURN = 6 -BPF_GRP_MISC = 7 -BPF_GRP_ENDING = 8 diff --git a/.tools/python-revlibs/capstone/evm.py b/.tools/python-revlibs/capstone/evm.py deleted file mode 100644 index 5ddec6a..0000000 --- a/.tools/python-revlibs/capstone/evm.py +++ /dev/null @@ -1,17 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .evm_const import * - -# define the API -class CsEvm(ctypes.Structure): - _fields_ = ( - ('pop', ctypes.c_byte), - ('push', ctypes.c_byte), - ('fee', ctypes.c_uint), - ) - -def get_arch_info(a): - return (a.pop, a.push, a.fee) - diff --git a/.tools/python-revlibs/capstone/evm_const.py b/.tools/python-revlibs/capstone/evm_const.py deleted file mode 100644 index 5013b0f..0000000 --- a/.tools/python-revlibs/capstone/evm_const.py +++ /dev/null @@ -1,152 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [evm_const.py] - -EVM_INS_STOP = 0 -EVM_INS_ADD = 1 -EVM_INS_MUL = 2 -EVM_INS_SUB = 3 -EVM_INS_DIV = 4 -EVM_INS_SDIV = 5 -EVM_INS_MOD = 6 -EVM_INS_SMOD = 7 -EVM_INS_ADDMOD = 8 -EVM_INS_MULMOD = 9 -EVM_INS_EXP = 10 -EVM_INS_SIGNEXTEND = 11 -EVM_INS_LT = 16 -EVM_INS_GT = 17 -EVM_INS_SLT = 18 -EVM_INS_SGT = 19 -EVM_INS_EQ = 20 -EVM_INS_ISZERO = 21 -EVM_INS_AND = 22 -EVM_INS_OR = 23 -EVM_INS_XOR = 24 -EVM_INS_NOT = 25 -EVM_INS_BYTE = 26 -EVM_INS_SHA3 = 32 -EVM_INS_ADDRESS = 48 -EVM_INS_BALANCE = 49 -EVM_INS_ORIGIN = 50 -EVM_INS_CALLER = 51 -EVM_INS_CALLVALUE = 52 -EVM_INS_CALLDATALOAD = 53 -EVM_INS_CALLDATASIZE = 54 -EVM_INS_CALLDATACOPY = 55 -EVM_INS_CODESIZE = 56 -EVM_INS_CODECOPY = 57 -EVM_INS_GASPRICE = 58 -EVM_INS_EXTCODESIZE = 59 -EVM_INS_EXTCODECOPY = 60 -EVM_INS_RETURNDATASIZE = 61 -EVM_INS_RETURNDATACOPY = 62 -EVM_INS_BLOCKHASH = 64 -EVM_INS_COINBASE = 65 -EVM_INS_TIMESTAMP = 66 -EVM_INS_NUMBER = 67 -EVM_INS_DIFFICULTY = 68 -EVM_INS_GASLIMIT = 69 -EVM_INS_POP = 80 -EVM_INS_MLOAD = 81 -EVM_INS_MSTORE = 82 -EVM_INS_MSTORE8 = 83 -EVM_INS_SLOAD = 84 -EVM_INS_SSTORE = 85 -EVM_INS_JUMP = 86 -EVM_INS_JUMPI = 87 -EVM_INS_PC = 88 -EVM_INS_MSIZE = 89 -EVM_INS_GAS = 90 -EVM_INS_JUMPDEST = 91 -EVM_INS_PUSH1 = 96 -EVM_INS_PUSH2 = 97 -EVM_INS_PUSH3 = 98 -EVM_INS_PUSH4 = 99 -EVM_INS_PUSH5 = 100 -EVM_INS_PUSH6 = 101 -EVM_INS_PUSH7 = 102 -EVM_INS_PUSH8 = 103 -EVM_INS_PUSH9 = 104 -EVM_INS_PUSH10 = 105 -EVM_INS_PUSH11 = 106 -EVM_INS_PUSH12 = 107 -EVM_INS_PUSH13 = 108 -EVM_INS_PUSH14 = 109 -EVM_INS_PUSH15 = 110 -EVM_INS_PUSH16 = 111 -EVM_INS_PUSH17 = 112 -EVM_INS_PUSH18 = 113 -EVM_INS_PUSH19 = 114 -EVM_INS_PUSH20 = 115 -EVM_INS_PUSH21 = 116 -EVM_INS_PUSH22 = 117 -EVM_INS_PUSH23 = 118 -EVM_INS_PUSH24 = 119 -EVM_INS_PUSH25 = 120 -EVM_INS_PUSH26 = 121 -EVM_INS_PUSH27 = 122 -EVM_INS_PUSH28 = 123 -EVM_INS_PUSH29 = 124 -EVM_INS_PUSH30 = 125 -EVM_INS_PUSH31 = 126 -EVM_INS_PUSH32 = 127 -EVM_INS_DUP1 = 128 -EVM_INS_DUP2 = 129 -EVM_INS_DUP3 = 130 -EVM_INS_DUP4 = 131 -EVM_INS_DUP5 = 132 -EVM_INS_DUP6 = 133 -EVM_INS_DUP7 = 134 -EVM_INS_DUP8 = 135 -EVM_INS_DUP9 = 136 -EVM_INS_DUP10 = 137 -EVM_INS_DUP11 = 138 -EVM_INS_DUP12 = 139 -EVM_INS_DUP13 = 140 -EVM_INS_DUP14 = 141 -EVM_INS_DUP15 = 142 -EVM_INS_DUP16 = 143 -EVM_INS_SWAP1 = 144 -EVM_INS_SWAP2 = 145 -EVM_INS_SWAP3 = 146 -EVM_INS_SWAP4 = 147 -EVM_INS_SWAP5 = 148 -EVM_INS_SWAP6 = 149 -EVM_INS_SWAP7 = 150 -EVM_INS_SWAP8 = 151 -EVM_INS_SWAP9 = 152 -EVM_INS_SWAP10 = 153 -EVM_INS_SWAP11 = 154 -EVM_INS_SWAP12 = 155 -EVM_INS_SWAP13 = 156 -EVM_INS_SWAP14 = 157 -EVM_INS_SWAP15 = 158 -EVM_INS_SWAP16 = 159 -EVM_INS_LOG0 = 160 -EVM_INS_LOG1 = 161 -EVM_INS_LOG2 = 162 -EVM_INS_LOG3 = 163 -EVM_INS_LOG4 = 164 -EVM_INS_CREATE = 240 -EVM_INS_CALL = 241 -EVM_INS_CALLCODE = 242 -EVM_INS_RETURN = 243 -EVM_INS_DELEGATECALL = 244 -EVM_INS_CALLBLACKBOX = 245 -EVM_INS_STATICCALL = 250 -EVM_INS_REVERT = 253 -EVM_INS_SUICIDE = 255 -EVM_INS_INVALID = 512 -EVM_INS_ENDING = 513 - -EVM_GRP_INVALID = 0 -EVM_GRP_JUMP = 1 -EVM_GRP_MATH = 8 -EVM_GRP_STACK_WRITE = 9 -EVM_GRP_STACK_READ = 10 -EVM_GRP_MEM_WRITE = 11 -EVM_GRP_MEM_READ = 12 -EVM_GRP_STORE_WRITE = 13 -EVM_GRP_STORE_READ = 14 -EVM_GRP_HALT = 15 -EVM_GRP_ENDING = 16 diff --git a/.tools/python-revlibs/capstone/include/capstone/arm.h b/.tools/python-revlibs/capstone/include/capstone/arm.h deleted file mode 100644 index 37675a7..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/arm.h +++ /dev/null @@ -1,991 +0,0 @@ -#ifndef CAPSTONE_ARM_H -#define CAPSTONE_ARM_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// ARM shift type -typedef enum arm_shifter { - ARM_SFT_INVALID = 0, - ARM_SFT_ASR, ///< shift with immediate const - ARM_SFT_LSL, ///< shift with immediate const - ARM_SFT_LSR, ///< shift with immediate const - ARM_SFT_ROR, ///< shift with immediate const - ARM_SFT_RRX, ///< shift with immediate const - ARM_SFT_ASR_REG, ///< shift with register - ARM_SFT_LSL_REG, ///< shift with register - ARM_SFT_LSR_REG, ///< shift with register - ARM_SFT_ROR_REG, ///< shift with register - ARM_SFT_RRX_REG, ///< shift with register -} arm_shifter; - -/// ARM condition code -typedef enum arm_cc { - ARM_CC_INVALID = 0, - ARM_CC_EQ, ///< Equal Equal - ARM_CC_NE, ///< Not equal Not equal, or unordered - ARM_CC_HS, ///< Carry set >, ==, or unordered - ARM_CC_LO, ///< Carry clear Less than - ARM_CC_MI, ///< Minus, negative Less than - ARM_CC_PL, ///< Plus, positive or zero >, ==, or unordered - ARM_CC_VS, ///< Overflow Unordered - ARM_CC_VC, ///< No overflow Not unordered - ARM_CC_HI, ///< Unsigned higher Greater than, or unordered - ARM_CC_LS, ///< Unsigned lower or same Less than or equal - ARM_CC_GE, ///< Greater than or equal Greater than or equal - ARM_CC_LT, ///< Less than Less than, or unordered - ARM_CC_GT, ///< Greater than Greater than - ARM_CC_LE, ///< Less than or equal <, ==, or unordered - ARM_CC_AL ///< Always (unconditional) Always (unconditional) -} arm_cc; - -typedef enum arm_sysreg { - /// Special registers for MSR - ARM_SYSREG_INVALID = 0, - - // SPSR* registers can be OR combined - ARM_SYSREG_SPSR_C = 1, - ARM_SYSREG_SPSR_X = 2, - ARM_SYSREG_SPSR_S = 4, - ARM_SYSREG_SPSR_F = 8, - - // CPSR* registers can be OR combined - ARM_SYSREG_CPSR_C = 16, - ARM_SYSREG_CPSR_X = 32, - ARM_SYSREG_CPSR_S = 64, - ARM_SYSREG_CPSR_F = 128, - - // independent registers - ARM_SYSREG_APSR = 256, - ARM_SYSREG_APSR_G, - ARM_SYSREG_APSR_NZCVQ, - ARM_SYSREG_APSR_NZCVQG, - - ARM_SYSREG_IAPSR, - ARM_SYSREG_IAPSR_G, - ARM_SYSREG_IAPSR_NZCVQG, - ARM_SYSREG_IAPSR_NZCVQ, - - ARM_SYSREG_EAPSR, - ARM_SYSREG_EAPSR_G, - ARM_SYSREG_EAPSR_NZCVQG, - ARM_SYSREG_EAPSR_NZCVQ, - - ARM_SYSREG_XPSR, - ARM_SYSREG_XPSR_G, - ARM_SYSREG_XPSR_NZCVQG, - ARM_SYSREG_XPSR_NZCVQ, - - ARM_SYSREG_IPSR, - ARM_SYSREG_EPSR, - ARM_SYSREG_IEPSR, - - ARM_SYSREG_MSP, - ARM_SYSREG_PSP, - ARM_SYSREG_PRIMASK, - ARM_SYSREG_BASEPRI, - ARM_SYSREG_BASEPRI_MAX, - ARM_SYSREG_FAULTMASK, - ARM_SYSREG_CONTROL, - ARM_SYSREG_MSPLIM, - ARM_SYSREG_PSPLIM, - ARM_SYSREG_MSP_NS, - ARM_SYSREG_PSP_NS, - ARM_SYSREG_MSPLIM_NS, - ARM_SYSREG_PSPLIM_NS, - ARM_SYSREG_PRIMASK_NS, - ARM_SYSREG_BASEPRI_NS, - ARM_SYSREG_FAULTMASK_NS, - ARM_SYSREG_CONTROL_NS, - ARM_SYSREG_SP_NS, - - // Banked Registers - ARM_SYSREG_R8_USR, - ARM_SYSREG_R9_USR, - ARM_SYSREG_R10_USR, - ARM_SYSREG_R11_USR, - ARM_SYSREG_R12_USR, - ARM_SYSREG_SP_USR, - ARM_SYSREG_LR_USR, - ARM_SYSREG_R8_FIQ, - ARM_SYSREG_R9_FIQ, - ARM_SYSREG_R10_FIQ, - ARM_SYSREG_R11_FIQ, - ARM_SYSREG_R12_FIQ, - ARM_SYSREG_SP_FIQ, - ARM_SYSREG_LR_FIQ, - ARM_SYSREG_LR_IRQ, - ARM_SYSREG_SP_IRQ, - ARM_SYSREG_LR_SVC, - ARM_SYSREG_SP_SVC, - ARM_SYSREG_LR_ABT, - ARM_SYSREG_SP_ABT, - ARM_SYSREG_LR_UND, - ARM_SYSREG_SP_UND, - ARM_SYSREG_LR_MON, - ARM_SYSREG_SP_MON, - ARM_SYSREG_ELR_HYP, - ARM_SYSREG_SP_HYP, - - ARM_SYSREG_SPSR_FIQ, - ARM_SYSREG_SPSR_IRQ, - ARM_SYSREG_SPSR_SVC, - ARM_SYSREG_SPSR_ABT, - ARM_SYSREG_SPSR_UND, - ARM_SYSREG_SPSR_MON, - ARM_SYSREG_SPSR_HYP, -} arm_sysreg; - -/// The memory barrier constants map directly to the 4-bit encoding of -/// the option field for Memory Barrier operations. -typedef enum arm_mem_barrier { - ARM_MB_INVALID = 0, - ARM_MB_RESERVED_0, - ARM_MB_OSHLD, - ARM_MB_OSHST, - ARM_MB_OSH, - ARM_MB_RESERVED_4, - ARM_MB_NSHLD, - ARM_MB_NSHST, - ARM_MB_NSH, - ARM_MB_RESERVED_8, - ARM_MB_ISHLD, - ARM_MB_ISHST, - ARM_MB_ISH, - ARM_MB_RESERVED_12, - ARM_MB_LD, - ARM_MB_ST, - ARM_MB_SY, -} arm_mem_barrier; - -/// Operand type for instruction's operands -typedef enum arm_op_type { - ARM_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - ARM_OP_REG, ///< = CS_OP_REG (Register operand). - ARM_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - ARM_OP_MEM, ///< = CS_OP_MEM (Memory operand). - ARM_OP_FP, ///< = CS_OP_FP (Floating-Point operand). - ARM_OP_CIMM = 64, ///< C-Immediate (coprocessor registers) - ARM_OP_PIMM, ///< P-Immediate (coprocessor registers) - ARM_OP_SETEND, ///< operand for SETEND instruction - ARM_OP_SYSREG, ///< MSR/MRS special register operand -} arm_op_type; - -/// Operand type for SETEND instruction -typedef enum arm_setend_type { - ARM_SETEND_INVALID = 0, ///< Uninitialized. - ARM_SETEND_BE, ///< BE operand. - ARM_SETEND_LE, ///< LE operand -} arm_setend_type; - -typedef enum arm_cpsmode_type { - ARM_CPSMODE_INVALID = 0, - ARM_CPSMODE_IE = 2, - ARM_CPSMODE_ID = 3 -} arm_cpsmode_type; - -/// Operand type for SETEND instruction -typedef enum arm_cpsflag_type { - ARM_CPSFLAG_INVALID = 0, - ARM_CPSFLAG_F = 1, - ARM_CPSFLAG_I = 2, - ARM_CPSFLAG_A = 4, - ARM_CPSFLAG_NONE = 16, ///< no flag -} arm_cpsflag_type; - -/// Data type for elements of vector instructions. -typedef enum arm_vectordata_type { - ARM_VECTORDATA_INVALID = 0, - - // Integer type - ARM_VECTORDATA_I8, - ARM_VECTORDATA_I16, - ARM_VECTORDATA_I32, - ARM_VECTORDATA_I64, - - // Signed integer type - ARM_VECTORDATA_S8, - ARM_VECTORDATA_S16, - ARM_VECTORDATA_S32, - ARM_VECTORDATA_S64, - - // Unsigned integer type - ARM_VECTORDATA_U8, - ARM_VECTORDATA_U16, - ARM_VECTORDATA_U32, - ARM_VECTORDATA_U64, - - // Data type for VMUL/VMULL - ARM_VECTORDATA_P8, - - // Floating type - ARM_VECTORDATA_F16, - ARM_VECTORDATA_F32, - ARM_VECTORDATA_F64, - - // Convert float <-> float - ARM_VECTORDATA_F16F64, // f16.f64 - ARM_VECTORDATA_F64F16, // f64.f16 - ARM_VECTORDATA_F32F16, // f32.f16 - ARM_VECTORDATA_F16F32, // f32.f16 - ARM_VECTORDATA_F64F32, // f64.f32 - ARM_VECTORDATA_F32F64, // f32.f64 - - // Convert integer <-> float - ARM_VECTORDATA_S32F32, // s32.f32 - ARM_VECTORDATA_U32F32, // u32.f32 - ARM_VECTORDATA_F32S32, // f32.s32 - ARM_VECTORDATA_F32U32, // f32.u32 - ARM_VECTORDATA_F64S16, // f64.s16 - ARM_VECTORDATA_F32S16, // f32.s16 - ARM_VECTORDATA_F64S32, // f64.s32 - ARM_VECTORDATA_S16F64, // s16.f64 - ARM_VECTORDATA_S16F32, // s16.f64 - ARM_VECTORDATA_S32F64, // s32.f64 - ARM_VECTORDATA_U16F64, // u16.f64 - ARM_VECTORDATA_U16F32, // u16.f32 - ARM_VECTORDATA_U32F64, // u32.f64 - ARM_VECTORDATA_F64U16, // f64.u16 - ARM_VECTORDATA_F32U16, // f32.u16 - ARM_VECTORDATA_F64U32, // f64.u32 - ARM_VECTORDATA_F16U16, // f16.u16 - ARM_VECTORDATA_U16F16, // u16.f16 - ARM_VECTORDATA_F16U32, // f16.u32 - ARM_VECTORDATA_U32F16, // u32.f16 -} arm_vectordata_type; - -/// ARM registers -typedef enum arm_reg { - ARM_REG_INVALID = 0, - ARM_REG_APSR, - ARM_REG_APSR_NZCV, - ARM_REG_CPSR, - ARM_REG_FPEXC, - ARM_REG_FPINST, - ARM_REG_FPSCR, - ARM_REG_FPSCR_NZCV, - ARM_REG_FPSID, - ARM_REG_ITSTATE, - ARM_REG_LR, - ARM_REG_PC, - ARM_REG_SP, - ARM_REG_SPSR, - ARM_REG_D0, - ARM_REG_D1, - ARM_REG_D2, - ARM_REG_D3, - ARM_REG_D4, - ARM_REG_D5, - ARM_REG_D6, - ARM_REG_D7, - ARM_REG_D8, - ARM_REG_D9, - ARM_REG_D10, - ARM_REG_D11, - ARM_REG_D12, - ARM_REG_D13, - ARM_REG_D14, - ARM_REG_D15, - ARM_REG_D16, - ARM_REG_D17, - ARM_REG_D18, - ARM_REG_D19, - ARM_REG_D20, - ARM_REG_D21, - ARM_REG_D22, - ARM_REG_D23, - ARM_REG_D24, - ARM_REG_D25, - ARM_REG_D26, - ARM_REG_D27, - ARM_REG_D28, - ARM_REG_D29, - ARM_REG_D30, - ARM_REG_D31, - ARM_REG_FPINST2, - ARM_REG_MVFR0, - ARM_REG_MVFR1, - ARM_REG_MVFR2, - ARM_REG_Q0, - ARM_REG_Q1, - ARM_REG_Q2, - ARM_REG_Q3, - ARM_REG_Q4, - ARM_REG_Q5, - ARM_REG_Q6, - ARM_REG_Q7, - ARM_REG_Q8, - ARM_REG_Q9, - ARM_REG_Q10, - ARM_REG_Q11, - ARM_REG_Q12, - ARM_REG_Q13, - ARM_REG_Q14, - ARM_REG_Q15, - ARM_REG_R0, - ARM_REG_R1, - ARM_REG_R2, - ARM_REG_R3, - ARM_REG_R4, - ARM_REG_R5, - ARM_REG_R6, - ARM_REG_R7, - ARM_REG_R8, - ARM_REG_R9, - ARM_REG_R10, - ARM_REG_R11, - ARM_REG_R12, - ARM_REG_S0, - ARM_REG_S1, - ARM_REG_S2, - ARM_REG_S3, - ARM_REG_S4, - ARM_REG_S5, - ARM_REG_S6, - ARM_REG_S7, - ARM_REG_S8, - ARM_REG_S9, - ARM_REG_S10, - ARM_REG_S11, - ARM_REG_S12, - ARM_REG_S13, - ARM_REG_S14, - ARM_REG_S15, - ARM_REG_S16, - ARM_REG_S17, - ARM_REG_S18, - ARM_REG_S19, - ARM_REG_S20, - ARM_REG_S21, - ARM_REG_S22, - ARM_REG_S23, - ARM_REG_S24, - ARM_REG_S25, - ARM_REG_S26, - ARM_REG_S27, - ARM_REG_S28, - ARM_REG_S29, - ARM_REG_S30, - ARM_REG_S31, - - ARM_REG_ENDING, // <-- mark the end of the list or registers - - // alias registers - ARM_REG_R13 = ARM_REG_SP, - ARM_REG_R14 = ARM_REG_LR, - ARM_REG_R15 = ARM_REG_PC, - - ARM_REG_SB = ARM_REG_R9, - ARM_REG_SL = ARM_REG_R10, - ARM_REG_FP = ARM_REG_R11, - ARM_REG_IP = ARM_REG_R12, -} arm_reg; - -/// Instruction's operand referring to memory -/// This is associated with ARM_OP_MEM operand type above -typedef struct arm_op_mem { - arm_reg base; ///< base register - arm_reg index; ///< index register - int scale; ///< scale for index register (can be 1, or -1) - int disp; ///< displacement/offset value - /// left-shift on index register, or 0 if irrelevant - /// NOTE: this value can also be fetched via operand.shift.value - int lshift; -} arm_op_mem; - -/// Instruction operand -typedef struct cs_arm_op { - int vector_index; ///< Vector Index for some vector operands (or -1 if irrelevant) - - struct { - arm_shifter type; - unsigned int value; - } shift; - - arm_op_type type; ///< operand type - - union { - int reg; ///< register value for REG/SYSREG operand - int32_t imm; ///< immediate value for C-IMM, P-IMM or IMM operand - double fp; ///< floating point value for FP operand - arm_op_mem mem; ///< base/index/scale/disp value for MEM operand - arm_setend_type setend; ///< SETEND instruction's operand type - }; - - /// in some instructions, an operand can be subtracted or added to - /// the base register, - /// if TRUE, this operand is subtracted. otherwise, it is added. - bool subtracted; - - /// How is this operand accessed? (READ, WRITE or READ|WRITE) - /// This field is combined of cs_ac_type. - /// NOTE: this field is irrelevant if engine is compiled in DIET mode. - uint8_t access; - - /// Neon lane index for NEON instructions (or -1 if irrelevant) - int8_t neon_lane; -} cs_arm_op; - -/// Instruction structure -typedef struct cs_arm { - bool usermode; ///< User-mode registers to be loaded (for LDM/STM instructions) - int vector_size; ///< Scalar size for vector instructions - arm_vectordata_type vector_data; ///< Data type for elements of vector instructions - arm_cpsmode_type cps_mode; ///< CPS mode for CPS instruction - arm_cpsflag_type cps_flag; ///< CPS mode for CPS instruction - arm_cc cc; ///< conditional code for this insn - bool update_flags; ///< does this insn update flags? - bool writeback; ///< does this insn write-back? - bool post_index; ///< only set if writeback is 'True', if 'False' pre-index, otherwise post. - arm_mem_barrier mem_barrier; ///< Option for some memory barrier instructions - - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - - cs_arm_op operands[36]; ///< operands for this instruction. -} cs_arm; - -/// ARM instruction -typedef enum arm_insn { - ARM_INS_INVALID = 0, - - ARM_INS_ADC, - ARM_INS_ADD, - ARM_INS_ADDW, - ARM_INS_ADR, - ARM_INS_AESD, - ARM_INS_AESE, - ARM_INS_AESIMC, - ARM_INS_AESMC, - ARM_INS_AND, - ARM_INS_ASR, - ARM_INS_B, - ARM_INS_BFC, - ARM_INS_BFI, - ARM_INS_BIC, - ARM_INS_BKPT, - ARM_INS_BL, - ARM_INS_BLX, - ARM_INS_BLXNS, - ARM_INS_BX, - ARM_INS_BXJ, - ARM_INS_BXNS, - ARM_INS_CBNZ, - ARM_INS_CBZ, - ARM_INS_CDP, - ARM_INS_CDP2, - ARM_INS_CLREX, - ARM_INS_CLZ, - ARM_INS_CMN, - ARM_INS_CMP, - ARM_INS_CPS, - ARM_INS_CRC32B, - ARM_INS_CRC32CB, - ARM_INS_CRC32CH, - ARM_INS_CRC32CW, - ARM_INS_CRC32H, - ARM_INS_CRC32W, - ARM_INS_CSDB, - ARM_INS_DBG, - ARM_INS_DCPS1, - ARM_INS_DCPS2, - ARM_INS_DCPS3, - ARM_INS_DFB, - ARM_INS_DMB, - ARM_INS_DSB, - ARM_INS_EOR, - ARM_INS_ERET, - ARM_INS_ESB, - ARM_INS_FADDD, - ARM_INS_FADDS, - ARM_INS_FCMPZD, - ARM_INS_FCMPZS, - ARM_INS_FCONSTD, - ARM_INS_FCONSTS, - ARM_INS_FLDMDBX, - ARM_INS_FLDMIAX, - ARM_INS_FMDHR, - ARM_INS_FMDLR, - ARM_INS_FMSTAT, - ARM_INS_FSTMDBX, - ARM_INS_FSTMIAX, - ARM_INS_FSUBD, - ARM_INS_FSUBS, - ARM_INS_HINT, - ARM_INS_HLT, - ARM_INS_HVC, - ARM_INS_ISB, - ARM_INS_IT, - ARM_INS_LDA, - ARM_INS_LDAB, - ARM_INS_LDAEX, - ARM_INS_LDAEXB, - ARM_INS_LDAEXD, - ARM_INS_LDAEXH, - ARM_INS_LDAH, - ARM_INS_LDC, - ARM_INS_LDC2, - ARM_INS_LDC2L, - ARM_INS_LDCL, - ARM_INS_LDM, - ARM_INS_LDMDA, - ARM_INS_LDMDB, - ARM_INS_LDMIB, - ARM_INS_LDR, - ARM_INS_LDRB, - ARM_INS_LDRBT, - ARM_INS_LDRD, - ARM_INS_LDREX, - ARM_INS_LDREXB, - ARM_INS_LDREXD, - ARM_INS_LDREXH, - ARM_INS_LDRH, - ARM_INS_LDRHT, - ARM_INS_LDRSB, - ARM_INS_LDRSBT, - ARM_INS_LDRSH, - ARM_INS_LDRSHT, - ARM_INS_LDRT, - ARM_INS_LSL, - ARM_INS_LSR, - ARM_INS_MCR, - ARM_INS_MCR2, - ARM_INS_MCRR, - ARM_INS_MCRR2, - ARM_INS_MLA, - ARM_INS_MLS, - ARM_INS_MOV, - ARM_INS_MOVS, - ARM_INS_MOVT, - ARM_INS_MOVW, - ARM_INS_MRC, - ARM_INS_MRC2, - ARM_INS_MRRC, - ARM_INS_MRRC2, - ARM_INS_MRS, - ARM_INS_MSR, - ARM_INS_MUL, - ARM_INS_MVN, - ARM_INS_NEG, - ARM_INS_NOP, - ARM_INS_ORN, - ARM_INS_ORR, - ARM_INS_PKHBT, - ARM_INS_PKHTB, - ARM_INS_PLD, - ARM_INS_PLDW, - ARM_INS_PLI, - ARM_INS_POP, - ARM_INS_PUSH, - ARM_INS_QADD, - ARM_INS_QADD16, - ARM_INS_QADD8, - ARM_INS_QASX, - ARM_INS_QDADD, - ARM_INS_QDSUB, - ARM_INS_QSAX, - ARM_INS_QSUB, - ARM_INS_QSUB16, - ARM_INS_QSUB8, - ARM_INS_RBIT, - ARM_INS_REV, - ARM_INS_REV16, - ARM_INS_REVSH, - ARM_INS_RFEDA, - ARM_INS_RFEDB, - ARM_INS_RFEIA, - ARM_INS_RFEIB, - ARM_INS_ROR, - ARM_INS_RRX, - ARM_INS_RSB, - ARM_INS_RSC, - ARM_INS_SADD16, - ARM_INS_SADD8, - ARM_INS_SASX, - ARM_INS_SBC, - ARM_INS_SBFX, - ARM_INS_SDIV, - ARM_INS_SEL, - ARM_INS_SETEND, - ARM_INS_SETPAN, - ARM_INS_SEV, - ARM_INS_SEVL, - ARM_INS_SG, - ARM_INS_SHA1C, - ARM_INS_SHA1H, - ARM_INS_SHA1M, - ARM_INS_SHA1P, - ARM_INS_SHA1SU0, - ARM_INS_SHA1SU1, - ARM_INS_SHA256H, - ARM_INS_SHA256H2, - ARM_INS_SHA256SU0, - ARM_INS_SHA256SU1, - ARM_INS_SHADD16, - ARM_INS_SHADD8, - ARM_INS_SHASX, - ARM_INS_SHSAX, - ARM_INS_SHSUB16, - ARM_INS_SHSUB8, - ARM_INS_SMC, - ARM_INS_SMLABB, - ARM_INS_SMLABT, - ARM_INS_SMLAD, - ARM_INS_SMLADX, - ARM_INS_SMLAL, - ARM_INS_SMLALBB, - ARM_INS_SMLALBT, - ARM_INS_SMLALD, - ARM_INS_SMLALDX, - ARM_INS_SMLALTB, - ARM_INS_SMLALTT, - ARM_INS_SMLATB, - ARM_INS_SMLATT, - ARM_INS_SMLAWB, - ARM_INS_SMLAWT, - ARM_INS_SMLSD, - ARM_INS_SMLSDX, - ARM_INS_SMLSLD, - ARM_INS_SMLSLDX, - ARM_INS_SMMLA, - ARM_INS_SMMLAR, - ARM_INS_SMMLS, - ARM_INS_SMMLSR, - ARM_INS_SMMUL, - ARM_INS_SMMULR, - ARM_INS_SMUAD, - ARM_INS_SMUADX, - ARM_INS_SMULBB, - ARM_INS_SMULBT, - ARM_INS_SMULL, - ARM_INS_SMULTB, - ARM_INS_SMULTT, - ARM_INS_SMULWB, - ARM_INS_SMULWT, - ARM_INS_SMUSD, - ARM_INS_SMUSDX, - ARM_INS_SRSDA, - ARM_INS_SRSDB, - ARM_INS_SRSIA, - ARM_INS_SRSIB, - ARM_INS_SSAT, - ARM_INS_SSAT16, - ARM_INS_SSAX, - ARM_INS_SSUB16, - ARM_INS_SSUB8, - ARM_INS_STC, - ARM_INS_STC2, - ARM_INS_STC2L, - ARM_INS_STCL, - ARM_INS_STL, - ARM_INS_STLB, - ARM_INS_STLEX, - ARM_INS_STLEXB, - ARM_INS_STLEXD, - ARM_INS_STLEXH, - ARM_INS_STLH, - ARM_INS_STM, - ARM_INS_STMDA, - ARM_INS_STMDB, - ARM_INS_STMIB, - ARM_INS_STR, - ARM_INS_STRB, - ARM_INS_STRBT, - ARM_INS_STRD, - ARM_INS_STREX, - ARM_INS_STREXB, - ARM_INS_STREXD, - ARM_INS_STREXH, - ARM_INS_STRH, - ARM_INS_STRHT, - ARM_INS_STRT, - ARM_INS_SUB, - ARM_INS_SUBS, - ARM_INS_SUBW, - ARM_INS_SVC, - ARM_INS_SWP, - ARM_INS_SWPB, - ARM_INS_SXTAB, - ARM_INS_SXTAB16, - ARM_INS_SXTAH, - ARM_INS_SXTB, - ARM_INS_SXTB16, - ARM_INS_SXTH, - ARM_INS_TBB, - ARM_INS_TBH, - ARM_INS_TEQ, - ARM_INS_TRAP, - ARM_INS_TSB, - ARM_INS_TST, - ARM_INS_TT, - ARM_INS_TTA, - ARM_INS_TTAT, - ARM_INS_TTT, - ARM_INS_UADD16, - ARM_INS_UADD8, - ARM_INS_UASX, - ARM_INS_UBFX, - ARM_INS_UDF, - ARM_INS_UDIV, - ARM_INS_UHADD16, - ARM_INS_UHADD8, - ARM_INS_UHASX, - ARM_INS_UHSAX, - ARM_INS_UHSUB16, - ARM_INS_UHSUB8, - ARM_INS_UMAAL, - ARM_INS_UMLAL, - ARM_INS_UMULL, - ARM_INS_UQADD16, - ARM_INS_UQADD8, - ARM_INS_UQASX, - ARM_INS_UQSAX, - ARM_INS_UQSUB16, - ARM_INS_UQSUB8, - ARM_INS_USAD8, - ARM_INS_USADA8, - ARM_INS_USAT, - ARM_INS_USAT16, - ARM_INS_USAX, - ARM_INS_USUB16, - ARM_INS_USUB8, - ARM_INS_UXTAB, - ARM_INS_UXTAB16, - ARM_INS_UXTAH, - ARM_INS_UXTB, - ARM_INS_UXTB16, - ARM_INS_UXTH, - ARM_INS_VABA, - ARM_INS_VABAL, - ARM_INS_VABD, - ARM_INS_VABDL, - ARM_INS_VABS, - ARM_INS_VACGE, - ARM_INS_VACGT, - ARM_INS_VACLE, - ARM_INS_VACLT, - ARM_INS_VADD, - ARM_INS_VADDHN, - ARM_INS_VADDL, - ARM_INS_VADDW, - ARM_INS_VAND, - ARM_INS_VBIC, - ARM_INS_VBIF, - ARM_INS_VBIT, - ARM_INS_VBSL, - ARM_INS_VCADD, - ARM_INS_VCEQ, - ARM_INS_VCGE, - ARM_INS_VCGT, - ARM_INS_VCLE, - ARM_INS_VCLS, - ARM_INS_VCLT, - ARM_INS_VCLZ, - ARM_INS_VCMLA, - ARM_INS_VCMP, - ARM_INS_VCMPE, - ARM_INS_VCNT, - ARM_INS_VCVT, - ARM_INS_VCVTA, - ARM_INS_VCVTB, - ARM_INS_VCVTM, - ARM_INS_VCVTN, - ARM_INS_VCVTP, - ARM_INS_VCVTR, - ARM_INS_VCVTT, - ARM_INS_VDIV, - ARM_INS_VDUP, - ARM_INS_VEOR, - ARM_INS_VEXT, - ARM_INS_VFMA, - ARM_INS_VFMS, - ARM_INS_VFNMA, - ARM_INS_VFNMS, - ARM_INS_VHADD, - ARM_INS_VHSUB, - ARM_INS_VINS, - ARM_INS_VJCVT, - ARM_INS_VLD1, - ARM_INS_VLD2, - ARM_INS_VLD3, - ARM_INS_VLD4, - ARM_INS_VLDMDB, - ARM_INS_VLDMIA, - ARM_INS_VLDR, - ARM_INS_VLLDM, - ARM_INS_VLSTM, - ARM_INS_VMAX, - ARM_INS_VMAXNM, - ARM_INS_VMIN, - ARM_INS_VMINNM, - ARM_INS_VMLA, - ARM_INS_VMLAL, - ARM_INS_VMLS, - ARM_INS_VMLSL, - ARM_INS_VMOV, - ARM_INS_VMOVL, - ARM_INS_VMOVN, - ARM_INS_VMOVX, - ARM_INS_VMRS, - ARM_INS_VMSR, - ARM_INS_VMUL, - ARM_INS_VMULL, - ARM_INS_VMVN, - ARM_INS_VNEG, - ARM_INS_VNMLA, - ARM_INS_VNMLS, - ARM_INS_VNMUL, - ARM_INS_VORN, - ARM_INS_VORR, - ARM_INS_VPADAL, - ARM_INS_VPADD, - ARM_INS_VPADDL, - ARM_INS_VPMAX, - ARM_INS_VPMIN, - ARM_INS_VPOP, - ARM_INS_VPUSH, - ARM_INS_VQABS, - ARM_INS_VQADD, - ARM_INS_VQDMLAL, - ARM_INS_VQDMLSL, - ARM_INS_VQDMULH, - ARM_INS_VQDMULL, - ARM_INS_VQMOVN, - ARM_INS_VQMOVUN, - ARM_INS_VQNEG, - ARM_INS_VQRDMLAH, - ARM_INS_VQRDMLSH, - ARM_INS_VQRDMULH, - ARM_INS_VQRSHL, - ARM_INS_VQRSHRN, - ARM_INS_VQRSHRUN, - ARM_INS_VQSHL, - ARM_INS_VQSHLU, - ARM_INS_VQSHRN, - ARM_INS_VQSHRUN, - ARM_INS_VQSUB, - ARM_INS_VRADDHN, - ARM_INS_VRECPE, - ARM_INS_VRECPS, - ARM_INS_VREV16, - ARM_INS_VREV32, - ARM_INS_VREV64, - ARM_INS_VRHADD, - ARM_INS_VRINTA, - ARM_INS_VRINTM, - ARM_INS_VRINTN, - ARM_INS_VRINTP, - ARM_INS_VRINTR, - ARM_INS_VRINTX, - ARM_INS_VRINTZ, - ARM_INS_VRSHL, - ARM_INS_VRSHR, - ARM_INS_VRSHRN, - ARM_INS_VRSQRTE, - ARM_INS_VRSQRTS, - ARM_INS_VRSRA, - ARM_INS_VRSUBHN, - ARM_INS_VSDOT, - ARM_INS_VSELEQ, - ARM_INS_VSELGE, - ARM_INS_VSELGT, - ARM_INS_VSELVS, - ARM_INS_VSHL, - ARM_INS_VSHLL, - ARM_INS_VSHR, - ARM_INS_VSHRN, - ARM_INS_VSLI, - ARM_INS_VSQRT, - ARM_INS_VSRA, - ARM_INS_VSRI, - ARM_INS_VST1, - ARM_INS_VST2, - ARM_INS_VST3, - ARM_INS_VST4, - ARM_INS_VSTMDB, - ARM_INS_VSTMIA, - ARM_INS_VSTR, - ARM_INS_VSUB, - ARM_INS_VSUBHN, - ARM_INS_VSUBL, - ARM_INS_VSUBW, - ARM_INS_VSWP, - ARM_INS_VTBL, - ARM_INS_VTBX, - ARM_INS_VTRN, - ARM_INS_VTST, - ARM_INS_VUDOT, - ARM_INS_VUZP, - ARM_INS_VZIP, - ARM_INS_WFE, - ARM_INS_WFI, - ARM_INS_YIELD, - - ARM_INS_ENDING, // <-- mark the end of the list of instructions -} arm_insn; - -/// Group of ARM instructions -typedef enum arm_insn_group { - ARM_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - ARM_GRP_JUMP, ///< = CS_GRP_JUMP - ARM_GRP_CALL, ///< = CS_GRP_CALL - ARM_GRP_INT = 4, ///< = CS_GRP_INT - ARM_GRP_PRIVILEGE = 6, ///< = CS_GRP_PRIVILEGE - ARM_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE - - // Architecture-specific groups - ARM_GRP_CRYPTO = 128, - ARM_GRP_DATABARRIER, - ARM_GRP_DIVIDE, - ARM_GRP_FPARMV8, - ARM_GRP_MULTPRO, - ARM_GRP_NEON, - ARM_GRP_T2EXTRACTPACK, - ARM_GRP_THUMB2DSP, - ARM_GRP_TRUSTZONE, - ARM_GRP_V4T, - ARM_GRP_V5T, - ARM_GRP_V5TE, - ARM_GRP_V6, - ARM_GRP_V6T2, - ARM_GRP_V7, - ARM_GRP_V8, - ARM_GRP_VFP2, - ARM_GRP_VFP3, - ARM_GRP_VFP4, - ARM_GRP_ARM, - ARM_GRP_MCLASS, - ARM_GRP_NOTMCLASS, - ARM_GRP_THUMB, - ARM_GRP_THUMB1ONLY, - ARM_GRP_THUMB2, - ARM_GRP_PREV8, - ARM_GRP_FPVMLX, - ARM_GRP_MULOPS, - ARM_GRP_CRC, - ARM_GRP_DPVFP, - ARM_GRP_V6M, - ARM_GRP_VIRTUALIZATION, - - ARM_GRP_ENDING, -} arm_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/arm64.h b/.tools/python-revlibs/capstone/include/capstone/arm64.h deleted file mode 100644 index cbb689d..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/arm64.h +++ /dev/null @@ -1,3159 +0,0 @@ -#ifndef CAPSTONE_ARM64_H -#define CAPSTONE_ARM64_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable : 4201) -#endif - -/// ARM64 shift type -typedef enum arm64_shifter { - ARM64_SFT_INVALID = 0, - ARM64_SFT_LSL = 1, - ARM64_SFT_MSL = 2, - ARM64_SFT_LSR = 3, - ARM64_SFT_ASR = 4, - ARM64_SFT_ROR = 5, -} arm64_shifter; - -/// ARM64 extender type -typedef enum arm64_extender { - ARM64_EXT_INVALID = 0, - ARM64_EXT_UXTB = 1, - ARM64_EXT_UXTH = 2, - ARM64_EXT_UXTW = 3, - ARM64_EXT_UXTX = 4, - ARM64_EXT_SXTB = 5, - ARM64_EXT_SXTH = 6, - ARM64_EXT_SXTW = 7, - ARM64_EXT_SXTX = 8, -} arm64_extender; - -/// ARM64 condition code -typedef enum arm64_cc { - ARM64_CC_INVALID = 0, - ARM64_CC_EQ = 1, ///< Equal - ARM64_CC_NE = 2, ///< Not equal: Not equal, or unordered - ARM64_CC_HS = 3, ///< Unsigned higher or same: >, ==, or unordered - ARM64_CC_LO = 4, ///< Unsigned lower or same: Less than - ARM64_CC_MI = 5, ///< Minus, negative: Less than - ARM64_CC_PL = 6, ///< Plus, positive or zero: >, ==, or unordered - ARM64_CC_VS = 7, ///< Overflow: Unordered - ARM64_CC_VC = 8, ///< No overflow: Ordered - ARM64_CC_HI = 9, ///< Unsigned higher: Greater than, or unordered - ARM64_CC_LS = 10, ///< Unsigned lower or same: Less than or equal - ARM64_CC_GE = 11, ///< Greater than or equal: Greater than or equal - ARM64_CC_LT = 12, ///< Less than: Less than, or unordered - ARM64_CC_GT = 13, ///< Signed greater than: Greater than - ARM64_CC_LE = 14, ///< Signed less than or equal: <, ==, or unordered - ARM64_CC_AL = 15, ///< Always (unconditional): Always (unconditional) - ARM64_CC_NV = 16, ///< Always (unconditional): Always (unconditional) - //< Note the NV exists purely to disassemble 0b1111. Execution is "always". -} arm64_cc; - -/// System registers -typedef enum arm64_sysreg { - // System registers for MRS - ARM64_SYSREG_INVALID = 0, - - ARM64_SYSREG_ACCDATA_EL1 = 0xC685, - ARM64_SYSREG_ACTLR_EL1 = 0xC081, - ARM64_SYSREG_ACTLR_EL2 = 0xE081, - ARM64_SYSREG_ACTLR_EL3 = 0xF081, - ARM64_SYSREG_AFSR0_EL1 = 0xC288, - ARM64_SYSREG_AFSR0_EL12 = 0xEA88, - ARM64_SYSREG_AFSR0_EL2 = 0xE288, - ARM64_SYSREG_AFSR0_EL3 = 0xF288, - ARM64_SYSREG_AFSR1_EL1 = 0xC289, - ARM64_SYSREG_AFSR1_EL12 = 0xEA89, - ARM64_SYSREG_AFSR1_EL2 = 0xE289, - ARM64_SYSREG_AFSR1_EL3 = 0xF289, - ARM64_SYSREG_AIDR_EL1 = 0xC807, - ARM64_SYSREG_AMAIR_EL1 = 0xC518, - ARM64_SYSREG_AMAIR_EL12 = 0xED18, - ARM64_SYSREG_AMAIR_EL2 = 0xE518, - ARM64_SYSREG_AMAIR_EL3 = 0xF518, - ARM64_SYSREG_AMCFGR_EL0 = 0xDE91, - ARM64_SYSREG_AMCGCR_EL0 = 0xDE92, - ARM64_SYSREG_AMCNTENCLR0_EL0 = 0xDE94, - ARM64_SYSREG_AMCNTENCLR1_EL0 = 0xDE98, - ARM64_SYSREG_AMCNTENSET0_EL0 = 0xDE95, - ARM64_SYSREG_AMCNTENSET1_EL0 = 0xDE99, - ARM64_SYSREG_AMCR_EL0 = 0xDE90, - ARM64_SYSREG_AMEVCNTR00_EL0 = 0xDEA0, - ARM64_SYSREG_AMEVCNTR01_EL0 = 0xDEA1, - ARM64_SYSREG_AMEVCNTR02_EL0 = 0xDEA2, - ARM64_SYSREG_AMEVCNTR03_EL0 = 0xDEA3, - ARM64_SYSREG_AMEVCNTR10_EL0 = 0xDEE0, - ARM64_SYSREG_AMEVCNTR110_EL0 = 0xDEEA, - ARM64_SYSREG_AMEVCNTR111_EL0 = 0xDEEB, - ARM64_SYSREG_AMEVCNTR112_EL0 = 0xDEEC, - ARM64_SYSREG_AMEVCNTR113_EL0 = 0xDEED, - ARM64_SYSREG_AMEVCNTR114_EL0 = 0xDEEE, - ARM64_SYSREG_AMEVCNTR115_EL0 = 0xDEEF, - ARM64_SYSREG_AMEVCNTR11_EL0 = 0xDEE1, - ARM64_SYSREG_AMEVCNTR12_EL0 = 0xDEE2, - ARM64_SYSREG_AMEVCNTR13_EL0 = 0xDEE3, - ARM64_SYSREG_AMEVCNTR14_EL0 = 0xDEE4, - ARM64_SYSREG_AMEVCNTR15_EL0 = 0xDEE5, - ARM64_SYSREG_AMEVCNTR16_EL0 = 0xDEE6, - ARM64_SYSREG_AMEVCNTR17_EL0 = 0xDEE7, - ARM64_SYSREG_AMEVCNTR18_EL0 = 0xDEE8, - ARM64_SYSREG_AMEVCNTR19_EL0 = 0xDEE9, - ARM64_SYSREG_AMEVCNTVOFF00_EL2 = 0xE6C0, - ARM64_SYSREG_AMEVCNTVOFF010_EL2 = 0xE6CA, - ARM64_SYSREG_AMEVCNTVOFF011_EL2 = 0xE6CB, - ARM64_SYSREG_AMEVCNTVOFF012_EL2 = 0xE6CC, - ARM64_SYSREG_AMEVCNTVOFF013_EL2 = 0xE6CD, - ARM64_SYSREG_AMEVCNTVOFF014_EL2 = 0xE6CE, - ARM64_SYSREG_AMEVCNTVOFF015_EL2 = 0xE6CF, - ARM64_SYSREG_AMEVCNTVOFF01_EL2 = 0xE6C1, - ARM64_SYSREG_AMEVCNTVOFF02_EL2 = 0xE6C2, - ARM64_SYSREG_AMEVCNTVOFF03_EL2 = 0xE6C3, - ARM64_SYSREG_AMEVCNTVOFF04_EL2 = 0xE6C4, - ARM64_SYSREG_AMEVCNTVOFF05_EL2 = 0xE6C5, - ARM64_SYSREG_AMEVCNTVOFF06_EL2 = 0xE6C6, - ARM64_SYSREG_AMEVCNTVOFF07_EL2 = 0xE6C7, - ARM64_SYSREG_AMEVCNTVOFF08_EL2 = 0xE6C8, - ARM64_SYSREG_AMEVCNTVOFF09_EL2 = 0xE6C9, - ARM64_SYSREG_AMEVCNTVOFF10_EL2 = 0xE6D0, - ARM64_SYSREG_AMEVCNTVOFF110_EL2 = 0xE6DA, - ARM64_SYSREG_AMEVCNTVOFF111_EL2 = 0xE6DB, - ARM64_SYSREG_AMEVCNTVOFF112_EL2 = 0xE6DC, - ARM64_SYSREG_AMEVCNTVOFF113_EL2 = 0xE6DD, - ARM64_SYSREG_AMEVCNTVOFF114_EL2 = 0xE6DE, - ARM64_SYSREG_AMEVCNTVOFF115_EL2 = 0xE6DF, - ARM64_SYSREG_AMEVCNTVOFF11_EL2 = 0xE6D1, - ARM64_SYSREG_AMEVCNTVOFF12_EL2 = 0xE6D2, - ARM64_SYSREG_AMEVCNTVOFF13_EL2 = 0xE6D3, - ARM64_SYSREG_AMEVCNTVOFF14_EL2 = 0xE6D4, - ARM64_SYSREG_AMEVCNTVOFF15_EL2 = 0xE6D5, - ARM64_SYSREG_AMEVCNTVOFF16_EL2 = 0xE6D6, - ARM64_SYSREG_AMEVCNTVOFF17_EL2 = 0xE6D7, - ARM64_SYSREG_AMEVCNTVOFF18_EL2 = 0xE6D8, - ARM64_SYSREG_AMEVCNTVOFF19_EL2 = 0xE6D9, - ARM64_SYSREG_AMEVTYPER00_EL0 = 0xDEB0, - ARM64_SYSREG_AMEVTYPER01_EL0 = 0xDEB1, - ARM64_SYSREG_AMEVTYPER02_EL0 = 0xDEB2, - ARM64_SYSREG_AMEVTYPER03_EL0 = 0xDEB3, - ARM64_SYSREG_AMEVTYPER10_EL0 = 0xDEF0, - ARM64_SYSREG_AMEVTYPER110_EL0 = 0xDEFA, - ARM64_SYSREG_AMEVTYPER111_EL0 = 0xDEFB, - ARM64_SYSREG_AMEVTYPER112_EL0 = 0xDEFC, - ARM64_SYSREG_AMEVTYPER113_EL0 = 0xDEFD, - ARM64_SYSREG_AMEVTYPER114_EL0 = 0xDEFE, - ARM64_SYSREG_AMEVTYPER115_EL0 = 0xDEFF, - ARM64_SYSREG_AMEVTYPER11_EL0 = 0xDEF1, - ARM64_SYSREG_AMEVTYPER12_EL0 = 0xDEF2, - ARM64_SYSREG_AMEVTYPER13_EL0 = 0xDEF3, - ARM64_SYSREG_AMEVTYPER14_EL0 = 0xDEF4, - ARM64_SYSREG_AMEVTYPER15_EL0 = 0xDEF5, - ARM64_SYSREG_AMEVTYPER16_EL0 = 0xDEF6, - ARM64_SYSREG_AMEVTYPER17_EL0 = 0xDEF7, - ARM64_SYSREG_AMEVTYPER18_EL0 = 0xDEF8, - ARM64_SYSREG_AMEVTYPER19_EL0 = 0xDEF9, - ARM64_SYSREG_AMUSERENR_EL0 = 0xDE93, - ARM64_SYSREG_APDAKEYHI_EL1 = 0xC111, - ARM64_SYSREG_APDAKEYLO_EL1 = 0xC110, - ARM64_SYSREG_APDBKEYHI_EL1 = 0xC113, - ARM64_SYSREG_APDBKEYLO_EL1 = 0xC112, - ARM64_SYSREG_APGAKEYHI_EL1 = 0xC119, - ARM64_SYSREG_APGAKEYLO_EL1 = 0xC118, - ARM64_SYSREG_APIAKEYHI_EL1 = 0xC109, - ARM64_SYSREG_APIAKEYLO_EL1 = 0xC108, - ARM64_SYSREG_APIBKEYHI_EL1 = 0xC10B, - ARM64_SYSREG_APIBKEYLO_EL1 = 0xC10A, - ARM64_SYSREG_BRBCR_EL1 = 0x8C80, - ARM64_SYSREG_BRBCR_EL12 = 0xAC80, - ARM64_SYSREG_BRBCR_EL2 = 0xA480, - ARM64_SYSREG_BRBFCR_EL1 = 0x8C81, - ARM64_SYSREG_BRBIDR0_EL1 = 0x8C90, - ARM64_SYSREG_BRBINF0_EL1 = 0x8C00, - ARM64_SYSREG_BRBINF10_EL1 = 0x8C50, - ARM64_SYSREG_BRBINF11_EL1 = 0x8C58, - ARM64_SYSREG_BRBINF12_EL1 = 0x8C60, - ARM64_SYSREG_BRBINF13_EL1 = 0x8C68, - ARM64_SYSREG_BRBINF14_EL1 = 0x8C70, - ARM64_SYSREG_BRBINF15_EL1 = 0x8C78, - ARM64_SYSREG_BRBINF16_EL1 = 0x8C04, - ARM64_SYSREG_BRBINF17_EL1 = 0x8C0C, - ARM64_SYSREG_BRBINF18_EL1 = 0x8C14, - ARM64_SYSREG_BRBINF19_EL1 = 0x8C1C, - ARM64_SYSREG_BRBINF1_EL1 = 0x8C08, - ARM64_SYSREG_BRBINF20_EL1 = 0x8C24, - ARM64_SYSREG_BRBINF21_EL1 = 0x8C2C, - ARM64_SYSREG_BRBINF22_EL1 = 0x8C34, - ARM64_SYSREG_BRBINF23_EL1 = 0x8C3C, - ARM64_SYSREG_BRBINF24_EL1 = 0x8C44, - ARM64_SYSREG_BRBINF25_EL1 = 0x8C4C, - ARM64_SYSREG_BRBINF26_EL1 = 0x8C54, - ARM64_SYSREG_BRBINF27_EL1 = 0x8C5C, - ARM64_SYSREG_BRBINF28_EL1 = 0x8C64, - ARM64_SYSREG_BRBINF29_EL1 = 0x8C6C, - ARM64_SYSREG_BRBINF2_EL1 = 0x8C10, - ARM64_SYSREG_BRBINF30_EL1 = 0x8C74, - ARM64_SYSREG_BRBINF31_EL1 = 0x8C7C, - ARM64_SYSREG_BRBINF3_EL1 = 0x8C18, - ARM64_SYSREG_BRBINF4_EL1 = 0x8C20, - ARM64_SYSREG_BRBINF5_EL1 = 0x8C28, - ARM64_SYSREG_BRBINF6_EL1 = 0x8C30, - ARM64_SYSREG_BRBINF7_EL1 = 0x8C38, - ARM64_SYSREG_BRBINF8_EL1 = 0x8C40, - ARM64_SYSREG_BRBINF9_EL1 = 0x8C48, - ARM64_SYSREG_BRBINFINJ_EL1 = 0x8C88, - ARM64_SYSREG_BRBSRC0_EL1 = 0x8C01, - ARM64_SYSREG_BRBSRC10_EL1 = 0x8C51, - ARM64_SYSREG_BRBSRC11_EL1 = 0x8C59, - ARM64_SYSREG_BRBSRC12_EL1 = 0x8C61, - ARM64_SYSREG_BRBSRC13_EL1 = 0x8C69, - ARM64_SYSREG_BRBSRC14_EL1 = 0x8C71, - ARM64_SYSREG_BRBSRC15_EL1 = 0x8C79, - ARM64_SYSREG_BRBSRC16_EL1 = 0x8C05, - ARM64_SYSREG_BRBSRC17_EL1 = 0x8C0D, - ARM64_SYSREG_BRBSRC18_EL1 = 0x8C15, - ARM64_SYSREG_BRBSRC19_EL1 = 0x8C1D, - ARM64_SYSREG_BRBSRC1_EL1 = 0x8C09, - ARM64_SYSREG_BRBSRC20_EL1 = 0x8C25, - ARM64_SYSREG_BRBSRC21_EL1 = 0x8C2D, - ARM64_SYSREG_BRBSRC22_EL1 = 0x8C35, - ARM64_SYSREG_BRBSRC23_EL1 = 0x8C3D, - ARM64_SYSREG_BRBSRC24_EL1 = 0x8C45, - ARM64_SYSREG_BRBSRC25_EL1 = 0x8C4D, - ARM64_SYSREG_BRBSRC26_EL1 = 0x8C55, - ARM64_SYSREG_BRBSRC27_EL1 = 0x8C5D, - ARM64_SYSREG_BRBSRC28_EL1 = 0x8C65, - ARM64_SYSREG_BRBSRC29_EL1 = 0x8C6D, - ARM64_SYSREG_BRBSRC2_EL1 = 0x8C11, - ARM64_SYSREG_BRBSRC30_EL1 = 0x8C75, - ARM64_SYSREG_BRBSRC31_EL1 = 0x8C7D, - ARM64_SYSREG_BRBSRC3_EL1 = 0x8C19, - ARM64_SYSREG_BRBSRC4_EL1 = 0x8C21, - ARM64_SYSREG_BRBSRC5_EL1 = 0x8C29, - ARM64_SYSREG_BRBSRC6_EL1 = 0x8C31, - ARM64_SYSREG_BRBSRC7_EL1 = 0x8C39, - ARM64_SYSREG_BRBSRC8_EL1 = 0x8C41, - ARM64_SYSREG_BRBSRC9_EL1 = 0x8C49, - ARM64_SYSREG_BRBSRCINJ_EL1 = 0x8C89, - ARM64_SYSREG_BRBTGT0_EL1 = 0x8C02, - ARM64_SYSREG_BRBTGT10_EL1 = 0x8C52, - ARM64_SYSREG_BRBTGT11_EL1 = 0x8C5A, - ARM64_SYSREG_BRBTGT12_EL1 = 0x8C62, - ARM64_SYSREG_BRBTGT13_EL1 = 0x8C6A, - ARM64_SYSREG_BRBTGT14_EL1 = 0x8C72, - ARM64_SYSREG_BRBTGT15_EL1 = 0x8C7A, - ARM64_SYSREG_BRBTGT16_EL1 = 0x8C06, - ARM64_SYSREG_BRBTGT17_EL1 = 0x8C0E, - ARM64_SYSREG_BRBTGT18_EL1 = 0x8C16, - ARM64_SYSREG_BRBTGT19_EL1 = 0x8C1E, - ARM64_SYSREG_BRBTGT1_EL1 = 0x8C0A, - ARM64_SYSREG_BRBTGT20_EL1 = 0x8C26, - ARM64_SYSREG_BRBTGT21_EL1 = 0x8C2E, - ARM64_SYSREG_BRBTGT22_EL1 = 0x8C36, - ARM64_SYSREG_BRBTGT23_EL1 = 0x8C3E, - ARM64_SYSREG_BRBTGT24_EL1 = 0x8C46, - ARM64_SYSREG_BRBTGT25_EL1 = 0x8C4E, - ARM64_SYSREG_BRBTGT26_EL1 = 0x8C56, - ARM64_SYSREG_BRBTGT27_EL1 = 0x8C5E, - ARM64_SYSREG_BRBTGT28_EL1 = 0x8C66, - ARM64_SYSREG_BRBTGT29_EL1 = 0x8C6E, - ARM64_SYSREG_BRBTGT2_EL1 = 0x8C12, - ARM64_SYSREG_BRBTGT30_EL1 = 0x8C76, - ARM64_SYSREG_BRBTGT31_EL1 = 0x8C7E, - ARM64_SYSREG_BRBTGT3_EL1 = 0x8C1A, - ARM64_SYSREG_BRBTGT4_EL1 = 0x8C22, - ARM64_SYSREG_BRBTGT5_EL1 = 0x8C2A, - ARM64_SYSREG_BRBTGT6_EL1 = 0x8C32, - ARM64_SYSREG_BRBTGT7_EL1 = 0x8C3A, - ARM64_SYSREG_BRBTGT8_EL1 = 0x8C42, - ARM64_SYSREG_BRBTGT9_EL1 = 0x8C4A, - ARM64_SYSREG_BRBTGTINJ_EL1 = 0x8C8A, - ARM64_SYSREG_BRBTS_EL1 = 0x8C82, - ARM64_SYSREG_CCSIDR2_EL1 = 0xC802, - ARM64_SYSREG_CCSIDR_EL1 = 0xC800, - ARM64_SYSREG_CLIDR_EL1 = 0xC801, - ARM64_SYSREG_CNTFRQ_EL0 = 0xDF00, - ARM64_SYSREG_CNTHCTL_EL2 = 0xE708, - ARM64_SYSREG_CNTHPS_CTL_EL2 = 0xE729, - ARM64_SYSREG_CNTHPS_CVAL_EL2 = 0xE72A, - ARM64_SYSREG_CNTHPS_TVAL_EL2 = 0xE728, - ARM64_SYSREG_CNTHP_CTL_EL2 = 0xE711, - ARM64_SYSREG_CNTHP_CVAL_EL2 = 0xE712, - ARM64_SYSREG_CNTHP_TVAL_EL2 = 0xE710, - ARM64_SYSREG_CNTHVS_CTL_EL2 = 0xE721, - ARM64_SYSREG_CNTHVS_CVAL_EL2 = 0xE722, - ARM64_SYSREG_CNTHVS_TVAL_EL2 = 0xE720, - ARM64_SYSREG_CNTHV_CTL_EL2 = 0xE719, - ARM64_SYSREG_CNTHV_CVAL_EL2 = 0xE71A, - ARM64_SYSREG_CNTHV_TVAL_EL2 = 0xE718, - ARM64_SYSREG_CNTISCALE_EL2 = 0xE705, - ARM64_SYSREG_CNTKCTL_EL1 = 0xC708, - ARM64_SYSREG_CNTKCTL_EL12 = 0xEF08, - ARM64_SYSREG_CNTPCTSS_EL0 = 0xDF05, - ARM64_SYSREG_CNTPCT_EL0 = 0xDF01, - ARM64_SYSREG_CNTPOFF_EL2 = 0xE706, - ARM64_SYSREG_CNTPS_CTL_EL1 = 0xFF11, - ARM64_SYSREG_CNTPS_CVAL_EL1 = 0xFF12, - ARM64_SYSREG_CNTPS_TVAL_EL1 = 0xFF10, - ARM64_SYSREG_CNTP_CTL_EL0 = 0xDF11, - ARM64_SYSREG_CNTP_CTL_EL02 = 0xEF11, - ARM64_SYSREG_CNTP_CVAL_EL0 = 0xDF12, - ARM64_SYSREG_CNTP_CVAL_EL02 = 0xEF12, - ARM64_SYSREG_CNTP_TVAL_EL0 = 0xDF10, - ARM64_SYSREG_CNTP_TVAL_EL02 = 0xEF10, - ARM64_SYSREG_CNTSCALE_EL2 = 0xE704, - ARM64_SYSREG_CNTVCTSS_EL0 = 0xDF06, - ARM64_SYSREG_CNTVCT_EL0 = 0xDF02, - ARM64_SYSREG_CNTVFRQ_EL2 = 0xE707, - ARM64_SYSREG_CNTVOFF_EL2 = 0xE703, - ARM64_SYSREG_CNTV_CTL_EL0 = 0xDF19, - ARM64_SYSREG_CNTV_CTL_EL02 = 0xEF19, - ARM64_SYSREG_CNTV_CVAL_EL0 = 0xDF1A, - ARM64_SYSREG_CNTV_CVAL_EL02 = 0xEF1A, - ARM64_SYSREG_CNTV_TVAL_EL0 = 0xDF18, - ARM64_SYSREG_CNTV_TVAL_EL02 = 0xEF18, - ARM64_SYSREG_CONTEXTIDR_EL1 = 0xC681, - ARM64_SYSREG_CONTEXTIDR_EL12 = 0xEE81, - ARM64_SYSREG_CONTEXTIDR_EL2 = 0xE681, - ARM64_SYSREG_CPACR_EL1 = 0xC082, - ARM64_SYSREG_CPACR_EL12 = 0xE882, - ARM64_SYSREG_CPM_IOACC_CTL_EL3 = 0xFF90, - ARM64_SYSREG_CPTR_EL2 = 0xE08A, - ARM64_SYSREG_CPTR_EL3 = 0xF08A, - ARM64_SYSREG_CSSELR_EL1 = 0xD000, - ARM64_SYSREG_CTR_EL0 = 0xD801, - ARM64_SYSREG_CURRENTEL = 0xC212, - ARM64_SYSREG_DACR32_EL2 = 0xE180, - ARM64_SYSREG_DAIF = 0xDA11, - ARM64_SYSREG_DBGAUTHSTATUS_EL1 = 0x83F6, - ARM64_SYSREG_DBGBCR0_EL1 = 0x8005, - ARM64_SYSREG_DBGBCR10_EL1 = 0x8055, - ARM64_SYSREG_DBGBCR11_EL1 = 0x805D, - ARM64_SYSREG_DBGBCR12_EL1 = 0x8065, - ARM64_SYSREG_DBGBCR13_EL1 = 0x806D, - ARM64_SYSREG_DBGBCR14_EL1 = 0x8075, - ARM64_SYSREG_DBGBCR15_EL1 = 0x807D, - ARM64_SYSREG_DBGBCR1_EL1 = 0x800D, - ARM64_SYSREG_DBGBCR2_EL1 = 0x8015, - ARM64_SYSREG_DBGBCR3_EL1 = 0x801D, - ARM64_SYSREG_DBGBCR4_EL1 = 0x8025, - ARM64_SYSREG_DBGBCR5_EL1 = 0x802D, - ARM64_SYSREG_DBGBCR6_EL1 = 0x8035, - ARM64_SYSREG_DBGBCR7_EL1 = 0x803D, - ARM64_SYSREG_DBGBCR8_EL1 = 0x8045, - ARM64_SYSREG_DBGBCR9_EL1 = 0x804D, - ARM64_SYSREG_DBGBVR0_EL1 = 0x8004, - ARM64_SYSREG_DBGBVR10_EL1 = 0x8054, - ARM64_SYSREG_DBGBVR11_EL1 = 0x805C, - ARM64_SYSREG_DBGBVR12_EL1 = 0x8064, - ARM64_SYSREG_DBGBVR13_EL1 = 0x806C, - ARM64_SYSREG_DBGBVR14_EL1 = 0x8074, - ARM64_SYSREG_DBGBVR15_EL1 = 0x807C, - ARM64_SYSREG_DBGBVR1_EL1 = 0x800C, - ARM64_SYSREG_DBGBVR2_EL1 = 0x8014, - ARM64_SYSREG_DBGBVR3_EL1 = 0x801C, - ARM64_SYSREG_DBGBVR4_EL1 = 0x8024, - ARM64_SYSREG_DBGBVR5_EL1 = 0x802C, - ARM64_SYSREG_DBGBVR6_EL1 = 0x8034, - ARM64_SYSREG_DBGBVR7_EL1 = 0x803C, - ARM64_SYSREG_DBGBVR8_EL1 = 0x8044, - ARM64_SYSREG_DBGBVR9_EL1 = 0x804C, - ARM64_SYSREG_DBGCLAIMCLR_EL1 = 0x83CE, - ARM64_SYSREG_DBGCLAIMSET_EL1 = 0x83C6, - ARM64_SYSREG_DBGDTRRX_EL0 = 0x9828, - ARM64_SYSREG_DBGDTRTX_EL0 = 0x9828, - ARM64_SYSREG_DBGDTR_EL0 = 0x9820, - ARM64_SYSREG_DBGPRCR_EL1 = 0x80A4, - ARM64_SYSREG_DBGVCR32_EL2 = 0xA038, - ARM64_SYSREG_DBGWCR0_EL1 = 0x8007, - ARM64_SYSREG_DBGWCR10_EL1 = 0x8057, - ARM64_SYSREG_DBGWCR11_EL1 = 0x805F, - ARM64_SYSREG_DBGWCR12_EL1 = 0x8067, - ARM64_SYSREG_DBGWCR13_EL1 = 0x806F, - ARM64_SYSREG_DBGWCR14_EL1 = 0x8077, - ARM64_SYSREG_DBGWCR15_EL1 = 0x807F, - ARM64_SYSREG_DBGWCR1_EL1 = 0x800F, - ARM64_SYSREG_DBGWCR2_EL1 = 0x8017, - ARM64_SYSREG_DBGWCR3_EL1 = 0x801F, - ARM64_SYSREG_DBGWCR4_EL1 = 0x8027, - ARM64_SYSREG_DBGWCR5_EL1 = 0x802F, - ARM64_SYSREG_DBGWCR6_EL1 = 0x8037, - ARM64_SYSREG_DBGWCR7_EL1 = 0x803F, - ARM64_SYSREG_DBGWCR8_EL1 = 0x8047, - ARM64_SYSREG_DBGWCR9_EL1 = 0x804F, - ARM64_SYSREG_DBGWVR0_EL1 = 0x8006, - ARM64_SYSREG_DBGWVR10_EL1 = 0x8056, - ARM64_SYSREG_DBGWVR11_EL1 = 0x805E, - ARM64_SYSREG_DBGWVR12_EL1 = 0x8066, - ARM64_SYSREG_DBGWVR13_EL1 = 0x806E, - ARM64_SYSREG_DBGWVR14_EL1 = 0x8076, - ARM64_SYSREG_DBGWVR15_EL1 = 0x807E, - ARM64_SYSREG_DBGWVR1_EL1 = 0x800E, - ARM64_SYSREG_DBGWVR2_EL1 = 0x8016, - ARM64_SYSREG_DBGWVR3_EL1 = 0x801E, - ARM64_SYSREG_DBGWVR4_EL1 = 0x8026, - ARM64_SYSREG_DBGWVR5_EL1 = 0x802E, - ARM64_SYSREG_DBGWVR6_EL1 = 0x8036, - ARM64_SYSREG_DBGWVR7_EL1 = 0x803E, - ARM64_SYSREG_DBGWVR8_EL1 = 0x8046, - ARM64_SYSREG_DBGWVR9_EL1 = 0x804E, - ARM64_SYSREG_DCZID_EL0 = 0xD807, - ARM64_SYSREG_DISR_EL1 = 0xC609, - ARM64_SYSREG_DIT = 0xDA15, - ARM64_SYSREG_DLR_EL0 = 0xDA29, - ARM64_SYSREG_DSPSR_EL0 = 0xDA28, - ARM64_SYSREG_ELR_EL1 = 0xC201, - ARM64_SYSREG_ELR_EL12 = 0xEA01, - ARM64_SYSREG_ELR_EL2 = 0xE201, - ARM64_SYSREG_ELR_EL3 = 0xF201, - ARM64_SYSREG_ERRIDR_EL1 = 0xC298, - ARM64_SYSREG_ERRSELR_EL1 = 0xC299, - ARM64_SYSREG_ERXADDR_EL1 = 0xC2A3, - ARM64_SYSREG_ERXCTLR_EL1 = 0xC2A1, - ARM64_SYSREG_ERXFR_EL1 = 0xC2A0, - ARM64_SYSREG_ERXMISC0_EL1 = 0xC2A8, - ARM64_SYSREG_ERXMISC1_EL1 = 0xC2A9, - ARM64_SYSREG_ERXMISC2_EL1 = 0xC2AA, - ARM64_SYSREG_ERXMISC3_EL1 = 0xC2AB, - ARM64_SYSREG_ERXPFGCDN_EL1 = 0xC2A6, - ARM64_SYSREG_ERXPFGCTL_EL1 = 0xC2A5, - ARM64_SYSREG_ERXPFGF_EL1 = 0xC2A4, - ARM64_SYSREG_ERXSTATUS_EL1 = 0xC2A2, - ARM64_SYSREG_ESR_EL1 = 0xC290, - ARM64_SYSREG_ESR_EL12 = 0xEA90, - ARM64_SYSREG_ESR_EL2 = 0xE290, - ARM64_SYSREG_ESR_EL3 = 0xF290, - ARM64_SYSREG_FAR_EL1 = 0xC300, - ARM64_SYSREG_FAR_EL12 = 0xEB00, - ARM64_SYSREG_FAR_EL2 = 0xE300, - ARM64_SYSREG_FAR_EL3 = 0xF300, - ARM64_SYSREG_FPCR = 0xDA20, - ARM64_SYSREG_FPEXC32_EL2 = 0xE298, - ARM64_SYSREG_FPSR = 0xDA21, - ARM64_SYSREG_GCR_EL1 = 0xC086, - ARM64_SYSREG_GMID_EL1 = 0xC804, - ARM64_SYSREG_GPCCR_EL3 = 0xF10E, - ARM64_SYSREG_GPTBR_EL3 = 0xF10C, - ARM64_SYSREG_HACR_EL2 = 0xE08F, - ARM64_SYSREG_HCRX_EL2 = 0xE092, - ARM64_SYSREG_HCR_EL2 = 0xE088, - ARM64_SYSREG_HDFGRTR_EL2 = 0xE18C, - ARM64_SYSREG_HDFGWTR_EL2 = 0xE18D, - ARM64_SYSREG_HFGITR_EL2 = 0xE08E, - ARM64_SYSREG_HFGRTR_EL2 = 0xE08C, - ARM64_SYSREG_HFGWTR_EL2 = 0xE08D, - ARM64_SYSREG_HPFAR_EL2 = 0xE304, - ARM64_SYSREG_HSTR_EL2 = 0xE08B, - ARM64_SYSREG_ICC_AP0R0_EL1 = 0xC644, - ARM64_SYSREG_ICC_AP0R1_EL1 = 0xC645, - ARM64_SYSREG_ICC_AP0R2_EL1 = 0xC646, - ARM64_SYSREG_ICC_AP0R3_EL1 = 0xC647, - ARM64_SYSREG_ICC_AP1R0_EL1 = 0xC648, - ARM64_SYSREG_ICC_AP1R1_EL1 = 0xC649, - ARM64_SYSREG_ICC_AP1R2_EL1 = 0xC64A, - ARM64_SYSREG_ICC_AP1R3_EL1 = 0xC64B, - ARM64_SYSREG_ICC_ASGI1R_EL1 = 0xC65E, - ARM64_SYSREG_ICC_BPR0_EL1 = 0xC643, - ARM64_SYSREG_ICC_BPR1_EL1 = 0xC663, - ARM64_SYSREG_ICC_CTLR_EL1 = 0xC664, - ARM64_SYSREG_ICC_CTLR_EL3 = 0xF664, - ARM64_SYSREG_ICC_DIR_EL1 = 0xC659, - ARM64_SYSREG_ICC_EOIR0_EL1 = 0xC641, - ARM64_SYSREG_ICC_EOIR1_EL1 = 0xC661, - ARM64_SYSREG_ICC_HPPIR0_EL1 = 0xC642, - ARM64_SYSREG_ICC_HPPIR1_EL1 = 0xC662, - ARM64_SYSREG_ICC_IAR0_EL1 = 0xC640, - ARM64_SYSREG_ICC_IAR1_EL1 = 0xC660, - ARM64_SYSREG_ICC_IGRPEN0_EL1 = 0xC666, - ARM64_SYSREG_ICC_IGRPEN1_EL1 = 0xC667, - ARM64_SYSREG_ICC_IGRPEN1_EL3 = 0xF667, - ARM64_SYSREG_ICC_PMR_EL1 = 0xC230, - ARM64_SYSREG_ICC_RPR_EL1 = 0xC65B, - ARM64_SYSREG_ICC_SGI0R_EL1 = 0xC65F, - ARM64_SYSREG_ICC_SGI1R_EL1 = 0xC65D, - ARM64_SYSREG_ICC_SRE_EL1 = 0xC665, - ARM64_SYSREG_ICC_SRE_EL2 = 0xE64D, - ARM64_SYSREG_ICC_SRE_EL3 = 0xF665, - ARM64_SYSREG_ICH_AP0R0_EL2 = 0xE640, - ARM64_SYSREG_ICH_AP0R1_EL2 = 0xE641, - ARM64_SYSREG_ICH_AP0R2_EL2 = 0xE642, - ARM64_SYSREG_ICH_AP0R3_EL2 = 0xE643, - ARM64_SYSREG_ICH_AP1R0_EL2 = 0xE648, - ARM64_SYSREG_ICH_AP1R1_EL2 = 0xE649, - ARM64_SYSREG_ICH_AP1R2_EL2 = 0xE64A, - ARM64_SYSREG_ICH_AP1R3_EL2 = 0xE64B, - ARM64_SYSREG_ICH_EISR_EL2 = 0xE65B, - ARM64_SYSREG_ICH_ELRSR_EL2 = 0xE65D, - ARM64_SYSREG_ICH_HCR_EL2 = 0xE658, - ARM64_SYSREG_ICH_LR0_EL2 = 0xE660, - ARM64_SYSREG_ICH_LR10_EL2 = 0xE66A, - ARM64_SYSREG_ICH_LR11_EL2 = 0xE66B, - ARM64_SYSREG_ICH_LR12_EL2 = 0xE66C, - ARM64_SYSREG_ICH_LR13_EL2 = 0xE66D, - ARM64_SYSREG_ICH_LR14_EL2 = 0xE66E, - ARM64_SYSREG_ICH_LR15_EL2 = 0xE66F, - ARM64_SYSREG_ICH_LR1_EL2 = 0xE661, - ARM64_SYSREG_ICH_LR2_EL2 = 0xE662, - ARM64_SYSREG_ICH_LR3_EL2 = 0xE663, - ARM64_SYSREG_ICH_LR4_EL2 = 0xE664, - ARM64_SYSREG_ICH_LR5_EL2 = 0xE665, - ARM64_SYSREG_ICH_LR6_EL2 = 0xE666, - ARM64_SYSREG_ICH_LR7_EL2 = 0xE667, - ARM64_SYSREG_ICH_LR8_EL2 = 0xE668, - ARM64_SYSREG_ICH_LR9_EL2 = 0xE669, - ARM64_SYSREG_ICH_MISR_EL2 = 0xE65A, - ARM64_SYSREG_ICH_VMCR_EL2 = 0xE65F, - ARM64_SYSREG_ICH_VTR_EL2 = 0xE659, - ARM64_SYSREG_ID_AA64AFR0_EL1 = 0xC02C, - ARM64_SYSREG_ID_AA64AFR1_EL1 = 0xC02D, - ARM64_SYSREG_ID_AA64DFR0_EL1 = 0xC028, - ARM64_SYSREG_ID_AA64DFR1_EL1 = 0xC029, - ARM64_SYSREG_ID_AA64ISAR0_EL1 = 0xC030, - ARM64_SYSREG_ID_AA64ISAR1_EL1 = 0xC031, - ARM64_SYSREG_ID_AA64ISAR2_EL1 = 0xC032, - ARM64_SYSREG_ID_AA64MMFR0_EL1 = 0xC038, - ARM64_SYSREG_ID_AA64MMFR1_EL1 = 0xC039, - ARM64_SYSREG_ID_AA64MMFR2_EL1 = 0xC03A, - ARM64_SYSREG_ID_AA64PFR0_EL1 = 0xC020, - ARM64_SYSREG_ID_AA64PFR1_EL1 = 0xC021, - ARM64_SYSREG_ID_AA64SMFR0_EL1 = 0xC025, - ARM64_SYSREG_ID_AA64ZFR0_EL1 = 0xC024, - ARM64_SYSREG_ID_AFR0_EL1 = 0xC00B, - ARM64_SYSREG_ID_DFR0_EL1 = 0xC00A, - ARM64_SYSREG_ID_ISAR0_EL1 = 0xC010, - ARM64_SYSREG_ID_ISAR1_EL1 = 0xC011, - ARM64_SYSREG_ID_ISAR2_EL1 = 0xC012, - ARM64_SYSREG_ID_ISAR3_EL1 = 0xC013, - ARM64_SYSREG_ID_ISAR4_EL1 = 0xC014, - ARM64_SYSREG_ID_ISAR5_EL1 = 0xC015, - ARM64_SYSREG_ID_ISAR6_EL1 = 0xC017, - ARM64_SYSREG_ID_MMFR0_EL1 = 0xC00C, - ARM64_SYSREG_ID_MMFR1_EL1 = 0xC00D, - ARM64_SYSREG_ID_MMFR2_EL1 = 0xC00E, - ARM64_SYSREG_ID_MMFR3_EL1 = 0xC00F, - ARM64_SYSREG_ID_MMFR4_EL1 = 0xC016, - ARM64_SYSREG_ID_MMFR5_EL1 = 0xC01E, - ARM64_SYSREG_ID_PFR0_EL1 = 0xC008, - ARM64_SYSREG_ID_PFR1_EL1 = 0xC009, - ARM64_SYSREG_ID_PFR2_EL1 = 0xC01C, - ARM64_SYSREG_IFSR32_EL2 = 0xE281, - ARM64_SYSREG_ISR_EL1 = 0xC608, - ARM64_SYSREG_LORC_EL1 = 0xC523, - ARM64_SYSREG_LOREA_EL1 = 0xC521, - ARM64_SYSREG_LORID_EL1 = 0xC527, - ARM64_SYSREG_LORN_EL1 = 0xC522, - ARM64_SYSREG_LORSA_EL1 = 0xC520, - ARM64_SYSREG_MAIR_EL1 = 0xC510, - ARM64_SYSREG_MAIR_EL12 = 0xED10, - ARM64_SYSREG_MAIR_EL2 = 0xE510, - ARM64_SYSREG_MAIR_EL3 = 0xF510, - ARM64_SYSREG_MDCCINT_EL1 = 0x8010, - ARM64_SYSREG_MDCCSR_EL0 = 0x9808, - ARM64_SYSREG_MDCR_EL2 = 0xE089, - ARM64_SYSREG_MDCR_EL3 = 0xF099, - ARM64_SYSREG_MDRAR_EL1 = 0x8080, - ARM64_SYSREG_MDSCR_EL1 = 0x8012, - ARM64_SYSREG_MFAR_EL3 = 0xF305, - ARM64_SYSREG_MIDR_EL1 = 0xC000, - ARM64_SYSREG_MPAM0_EL1 = 0xC529, - ARM64_SYSREG_MPAM1_EL1 = 0xC528, - ARM64_SYSREG_MPAM1_EL12 = 0xED28, - ARM64_SYSREG_MPAM2_EL2 = 0xE528, - ARM64_SYSREG_MPAM3_EL3 = 0xF528, - ARM64_SYSREG_MPAMHCR_EL2 = 0xE520, - ARM64_SYSREG_MPAMIDR_EL1 = 0xC524, - ARM64_SYSREG_MPAMSM_EL1 = 0xC52B, - ARM64_SYSREG_MPAMVPM0_EL2 = 0xE530, - ARM64_SYSREG_MPAMVPM1_EL2 = 0xE531, - ARM64_SYSREG_MPAMVPM2_EL2 = 0xE532, - ARM64_SYSREG_MPAMVPM3_EL2 = 0xE533, - ARM64_SYSREG_MPAMVPM4_EL2 = 0xE534, - ARM64_SYSREG_MPAMVPM5_EL2 = 0xE535, - ARM64_SYSREG_MPAMVPM6_EL2 = 0xE536, - ARM64_SYSREG_MPAMVPM7_EL2 = 0xE537, - ARM64_SYSREG_MPAMVPMV_EL2 = 0xE521, - ARM64_SYSREG_MPIDR_EL1 = 0xC005, - ARM64_SYSREG_MPUIR_EL1 = 0xC004, - ARM64_SYSREG_MPUIR_EL2 = 0xE004, - ARM64_SYSREG_MVFR0_EL1 = 0xC018, - ARM64_SYSREG_MVFR1_EL1 = 0xC019, - ARM64_SYSREG_MVFR2_EL1 = 0xC01A, - ARM64_SYSREG_NZCV = 0xDA10, - ARM64_SYSREG_OSDLR_EL1 = 0x809C, - ARM64_SYSREG_OSDTRRX_EL1 = 0x8002, - ARM64_SYSREG_OSDTRTX_EL1 = 0x801A, - ARM64_SYSREG_OSECCR_EL1 = 0x8032, - ARM64_SYSREG_OSLAR_EL1 = 0x8084, - ARM64_SYSREG_OSLSR_EL1 = 0x808C, - ARM64_SYSREG_PAN = 0xC213, - ARM64_SYSREG_PAR_EL1 = 0xC3A0, - ARM64_SYSREG_PMBIDR_EL1 = 0xC4D7, - ARM64_SYSREG_PMBLIMITR_EL1 = 0xC4D0, - ARM64_SYSREG_PMBPTR_EL1 = 0xC4D1, - ARM64_SYSREG_PMBSR_EL1 = 0xC4D3, - ARM64_SYSREG_PMCCFILTR_EL0 = 0xDF7F, - ARM64_SYSREG_PMCCNTR_EL0 = 0xDCE8, - ARM64_SYSREG_PMCEID0_EL0 = 0xDCE6, - ARM64_SYSREG_PMCEID1_EL0 = 0xDCE7, - ARM64_SYSREG_PMCNTENCLR_EL0 = 0xDCE2, - ARM64_SYSREG_PMCNTENSET_EL0 = 0xDCE1, - ARM64_SYSREG_PMCR_EL0 = 0xDCE0, - ARM64_SYSREG_PMEVCNTR0_EL0 = 0xDF40, - ARM64_SYSREG_PMEVCNTR10_EL0 = 0xDF4A, - ARM64_SYSREG_PMEVCNTR11_EL0 = 0xDF4B, - ARM64_SYSREG_PMEVCNTR12_EL0 = 0xDF4C, - ARM64_SYSREG_PMEVCNTR13_EL0 = 0xDF4D, - ARM64_SYSREG_PMEVCNTR14_EL0 = 0xDF4E, - ARM64_SYSREG_PMEVCNTR15_EL0 = 0xDF4F, - ARM64_SYSREG_PMEVCNTR16_EL0 = 0xDF50, - ARM64_SYSREG_PMEVCNTR17_EL0 = 0xDF51, - ARM64_SYSREG_PMEVCNTR18_EL0 = 0xDF52, - ARM64_SYSREG_PMEVCNTR19_EL0 = 0xDF53, - ARM64_SYSREG_PMEVCNTR1_EL0 = 0xDF41, - ARM64_SYSREG_PMEVCNTR20_EL0 = 0xDF54, - ARM64_SYSREG_PMEVCNTR21_EL0 = 0xDF55, - ARM64_SYSREG_PMEVCNTR22_EL0 = 0xDF56, - ARM64_SYSREG_PMEVCNTR23_EL0 = 0xDF57, - ARM64_SYSREG_PMEVCNTR24_EL0 = 0xDF58, - ARM64_SYSREG_PMEVCNTR25_EL0 = 0xDF59, - ARM64_SYSREG_PMEVCNTR26_EL0 = 0xDF5A, - ARM64_SYSREG_PMEVCNTR27_EL0 = 0xDF5B, - ARM64_SYSREG_PMEVCNTR28_EL0 = 0xDF5C, - ARM64_SYSREG_PMEVCNTR29_EL0 = 0xDF5D, - ARM64_SYSREG_PMEVCNTR2_EL0 = 0xDF42, - ARM64_SYSREG_PMEVCNTR30_EL0 = 0xDF5E, - ARM64_SYSREG_PMEVCNTR3_EL0 = 0xDF43, - ARM64_SYSREG_PMEVCNTR4_EL0 = 0xDF44, - ARM64_SYSREG_PMEVCNTR5_EL0 = 0xDF45, - ARM64_SYSREG_PMEVCNTR6_EL0 = 0xDF46, - ARM64_SYSREG_PMEVCNTR7_EL0 = 0xDF47, - ARM64_SYSREG_PMEVCNTR8_EL0 = 0xDF48, - ARM64_SYSREG_PMEVCNTR9_EL0 = 0xDF49, - ARM64_SYSREG_PMEVTYPER0_EL0 = 0xDF60, - ARM64_SYSREG_PMEVTYPER10_EL0 = 0xDF6A, - ARM64_SYSREG_PMEVTYPER11_EL0 = 0xDF6B, - ARM64_SYSREG_PMEVTYPER12_EL0 = 0xDF6C, - ARM64_SYSREG_PMEVTYPER13_EL0 = 0xDF6D, - ARM64_SYSREG_PMEVTYPER14_EL0 = 0xDF6E, - ARM64_SYSREG_PMEVTYPER15_EL0 = 0xDF6F, - ARM64_SYSREG_PMEVTYPER16_EL0 = 0xDF70, - ARM64_SYSREG_PMEVTYPER17_EL0 = 0xDF71, - ARM64_SYSREG_PMEVTYPER18_EL0 = 0xDF72, - ARM64_SYSREG_PMEVTYPER19_EL0 = 0xDF73, - ARM64_SYSREG_PMEVTYPER1_EL0 = 0xDF61, - ARM64_SYSREG_PMEVTYPER20_EL0 = 0xDF74, - ARM64_SYSREG_PMEVTYPER21_EL0 = 0xDF75, - ARM64_SYSREG_PMEVTYPER22_EL0 = 0xDF76, - ARM64_SYSREG_PMEVTYPER23_EL0 = 0xDF77, - ARM64_SYSREG_PMEVTYPER24_EL0 = 0xDF78, - ARM64_SYSREG_PMEVTYPER25_EL0 = 0xDF79, - ARM64_SYSREG_PMEVTYPER26_EL0 = 0xDF7A, - ARM64_SYSREG_PMEVTYPER27_EL0 = 0xDF7B, - ARM64_SYSREG_PMEVTYPER28_EL0 = 0xDF7C, - ARM64_SYSREG_PMEVTYPER29_EL0 = 0xDF7D, - ARM64_SYSREG_PMEVTYPER2_EL0 = 0xDF62, - ARM64_SYSREG_PMEVTYPER30_EL0 = 0xDF7E, - ARM64_SYSREG_PMEVTYPER3_EL0 = 0xDF63, - ARM64_SYSREG_PMEVTYPER4_EL0 = 0xDF64, - ARM64_SYSREG_PMEVTYPER5_EL0 = 0xDF65, - ARM64_SYSREG_PMEVTYPER6_EL0 = 0xDF66, - ARM64_SYSREG_PMEVTYPER7_EL0 = 0xDF67, - ARM64_SYSREG_PMEVTYPER8_EL0 = 0xDF68, - ARM64_SYSREG_PMEVTYPER9_EL0 = 0xDF69, - ARM64_SYSREG_PMINTENCLR_EL1 = 0xC4F2, - ARM64_SYSREG_PMINTENSET_EL1 = 0xC4F1, - ARM64_SYSREG_PMMIR_EL1 = 0xC4F6, - ARM64_SYSREG_PMOVSCLR_EL0 = 0xDCE3, - ARM64_SYSREG_PMOVSSET_EL0 = 0xDCF3, - ARM64_SYSREG_PMSCR_EL1 = 0xC4C8, - ARM64_SYSREG_PMSCR_EL12 = 0xECC8, - ARM64_SYSREG_PMSCR_EL2 = 0xE4C8, - ARM64_SYSREG_PMSELR_EL0 = 0xDCE5, - ARM64_SYSREG_PMSEVFR_EL1 = 0xC4CD, - ARM64_SYSREG_PMSFCR_EL1 = 0xC4CC, - ARM64_SYSREG_PMSICR_EL1 = 0xC4CA, - ARM64_SYSREG_PMSIDR_EL1 = 0xC4CF, - ARM64_SYSREG_PMSIRR_EL1 = 0xC4CB, - ARM64_SYSREG_PMSLATFR_EL1 = 0xC4CE, - ARM64_SYSREG_PMSNEVFR_EL1 = 0xC4C9, - ARM64_SYSREG_PMSWINC_EL0 = 0xDCE4, - ARM64_SYSREG_PMUSERENR_EL0 = 0xDCF0, - ARM64_SYSREG_PMXEVCNTR_EL0 = 0xDCEA, - ARM64_SYSREG_PMXEVTYPER_EL0 = 0xDCE9, - ARM64_SYSREG_PRBAR10_EL1 = 0xC368, - ARM64_SYSREG_PRBAR10_EL2 = 0xE368, - ARM64_SYSREG_PRBAR11_EL1 = 0xC36C, - ARM64_SYSREG_PRBAR11_EL2 = 0xE36C, - ARM64_SYSREG_PRBAR12_EL1 = 0xC370, - ARM64_SYSREG_PRBAR12_EL2 = 0xE370, - ARM64_SYSREG_PRBAR13_EL1 = 0xC374, - ARM64_SYSREG_PRBAR13_EL2 = 0xE374, - ARM64_SYSREG_PRBAR14_EL1 = 0xC378, - ARM64_SYSREG_PRBAR14_EL2 = 0xE378, - ARM64_SYSREG_PRBAR15_EL1 = 0xC37C, - ARM64_SYSREG_PRBAR15_EL2 = 0xE37C, - ARM64_SYSREG_PRBAR1_EL1 = 0xC344, - ARM64_SYSREG_PRBAR1_EL2 = 0xE344, - ARM64_SYSREG_PRBAR2_EL1 = 0xC348, - ARM64_SYSREG_PRBAR2_EL2 = 0xE348, - ARM64_SYSREG_PRBAR3_EL1 = 0xC34C, - ARM64_SYSREG_PRBAR3_EL2 = 0xE34C, - ARM64_SYSREG_PRBAR4_EL1 = 0xC350, - ARM64_SYSREG_PRBAR4_EL2 = 0xE350, - ARM64_SYSREG_PRBAR5_EL1 = 0xC354, - ARM64_SYSREG_PRBAR5_EL2 = 0xE354, - ARM64_SYSREG_PRBAR6_EL1 = 0xC358, - ARM64_SYSREG_PRBAR6_EL2 = 0xE358, - ARM64_SYSREG_PRBAR7_EL1 = 0xC35C, - ARM64_SYSREG_PRBAR7_EL2 = 0xE35C, - ARM64_SYSREG_PRBAR8_EL1 = 0xC360, - ARM64_SYSREG_PRBAR8_EL2 = 0xE360, - ARM64_SYSREG_PRBAR9_EL1 = 0xC364, - ARM64_SYSREG_PRBAR9_EL2 = 0xE364, - ARM64_SYSREG_PRBAR_EL1 = 0xC340, - ARM64_SYSREG_PRBAR_EL2 = 0xE340, - ARM64_SYSREG_PRENR_EL1 = 0xC309, - ARM64_SYSREG_PRENR_EL2 = 0xE309, - ARM64_SYSREG_PRLAR10_EL1 = 0xC369, - ARM64_SYSREG_PRLAR10_EL2 = 0xE369, - ARM64_SYSREG_PRLAR11_EL1 = 0xC36D, - ARM64_SYSREG_PRLAR11_EL2 = 0xE36D, - ARM64_SYSREG_PRLAR12_EL1 = 0xC371, - ARM64_SYSREG_PRLAR12_EL2 = 0xE371, - ARM64_SYSREG_PRLAR13_EL1 = 0xC375, - ARM64_SYSREG_PRLAR13_EL2 = 0xE375, - ARM64_SYSREG_PRLAR14_EL1 = 0xC379, - ARM64_SYSREG_PRLAR14_EL2 = 0xE379, - ARM64_SYSREG_PRLAR15_EL1 = 0xC37D, - ARM64_SYSREG_PRLAR15_EL2 = 0xE37D, - ARM64_SYSREG_PRLAR1_EL1 = 0xC345, - ARM64_SYSREG_PRLAR1_EL2 = 0xE345, - ARM64_SYSREG_PRLAR2_EL1 = 0xC349, - ARM64_SYSREG_PRLAR2_EL2 = 0xE349, - ARM64_SYSREG_PRLAR3_EL1 = 0xC34D, - ARM64_SYSREG_PRLAR3_EL2 = 0xE34D, - ARM64_SYSREG_PRLAR4_EL1 = 0xC351, - ARM64_SYSREG_PRLAR4_EL2 = 0xE351, - ARM64_SYSREG_PRLAR5_EL1 = 0xC355, - ARM64_SYSREG_PRLAR5_EL2 = 0xE355, - ARM64_SYSREG_PRLAR6_EL1 = 0xC359, - ARM64_SYSREG_PRLAR6_EL2 = 0xE359, - ARM64_SYSREG_PRLAR7_EL1 = 0xC35D, - ARM64_SYSREG_PRLAR7_EL2 = 0xE35D, - ARM64_SYSREG_PRLAR8_EL1 = 0xC361, - ARM64_SYSREG_PRLAR8_EL2 = 0xE361, - ARM64_SYSREG_PRLAR9_EL1 = 0xC365, - ARM64_SYSREG_PRLAR9_EL2 = 0xE365, - ARM64_SYSREG_PRLAR_EL1 = 0xC341, - ARM64_SYSREG_PRLAR_EL2 = 0xE341, - ARM64_SYSREG_PRSELR_EL1 = 0xC311, - ARM64_SYSREG_PRSELR_EL2 = 0xE311, - ARM64_SYSREG_REVIDR_EL1 = 0xC006, - ARM64_SYSREG_RGSR_EL1 = 0xC085, - ARM64_SYSREG_RMR_EL1 = 0xC602, - ARM64_SYSREG_RMR_EL2 = 0xE602, - ARM64_SYSREG_RMR_EL3 = 0xF602, - ARM64_SYSREG_RNDR = 0xD920, - ARM64_SYSREG_RNDRRS = 0xD921, - ARM64_SYSREG_RVBAR_EL1 = 0xC601, - ARM64_SYSREG_RVBAR_EL2 = 0xE601, - ARM64_SYSREG_RVBAR_EL3 = 0xF601, - ARM64_SYSREG_SCR_EL3 = 0xF088, - ARM64_SYSREG_SCTLR_EL1 = 0xC080, - ARM64_SYSREG_SCTLR_EL12 = 0xE880, - ARM64_SYSREG_SCTLR_EL2 = 0xE080, - ARM64_SYSREG_SCTLR_EL3 = 0xF080, - ARM64_SYSREG_SCXTNUM_EL0 = 0xDE87, - ARM64_SYSREG_SCXTNUM_EL1 = 0xC687, - ARM64_SYSREG_SCXTNUM_EL12 = 0xEE87, - ARM64_SYSREG_SCXTNUM_EL2 = 0xE687, - ARM64_SYSREG_SCXTNUM_EL3 = 0xF687, - ARM64_SYSREG_SDER32_EL2 = 0xE099, - ARM64_SYSREG_SDER32_EL3 = 0xF089, - ARM64_SYSREG_SMCR_EL1 = 0xC096, - ARM64_SYSREG_SMCR_EL12 = 0xE896, - ARM64_SYSREG_SMCR_EL2 = 0xE096, - ARM64_SYSREG_SMCR_EL3 = 0xF096, - ARM64_SYSREG_SMIDR_EL1 = 0xC806, - ARM64_SYSREG_SMPRIMAP_EL2 = 0xE095, - ARM64_SYSREG_SMPRI_EL1 = 0xC094, - ARM64_SYSREG_SPSEL = 0xC210, - ARM64_SYSREG_SPSR_ABT = 0xE219, - ARM64_SYSREG_SPSR_EL1 = 0xC200, - ARM64_SYSREG_SPSR_EL12 = 0xEA00, - ARM64_SYSREG_SPSR_EL2 = 0xE200, - ARM64_SYSREG_SPSR_EL3 = 0xF200, - ARM64_SYSREG_SPSR_FIQ = 0xE21B, - ARM64_SYSREG_SPSR_IRQ = 0xE218, - ARM64_SYSREG_SPSR_UND = 0xE21A, - ARM64_SYSREG_SP_EL0 = 0xC208, - ARM64_SYSREG_SP_EL1 = 0xE208, - ARM64_SYSREG_SP_EL2 = 0xF208, - ARM64_SYSREG_SSBS = 0xDA16, - ARM64_SYSREG_SVCR = 0xDA12, - ARM64_SYSREG_TCO = 0xDA17, - ARM64_SYSREG_TCR_EL1 = 0xC102, - ARM64_SYSREG_TCR_EL12 = 0xE902, - ARM64_SYSREG_TCR_EL2 = 0xE102, - ARM64_SYSREG_TCR_EL3 = 0xF102, - ARM64_SYSREG_TEECR32_EL1 = 0x9000, - ARM64_SYSREG_TEEHBR32_EL1 = 0x9080, - ARM64_SYSREG_TFSRE0_EL1 = 0xC2B1, - ARM64_SYSREG_TFSR_EL1 = 0xC2B0, - ARM64_SYSREG_TFSR_EL12 = 0xEAB0, - ARM64_SYSREG_TFSR_EL2 = 0xE2B0, - ARM64_SYSREG_TFSR_EL3 = 0xF2B0, - ARM64_SYSREG_TPIDR2_EL0 = 0xDE85, - ARM64_SYSREG_TPIDRRO_EL0 = 0xDE83, - ARM64_SYSREG_TPIDR_EL0 = 0xDE82, - ARM64_SYSREG_TPIDR_EL1 = 0xC684, - ARM64_SYSREG_TPIDR_EL2 = 0xE682, - ARM64_SYSREG_TPIDR_EL3 = 0xF682, - ARM64_SYSREG_TRBBASER_EL1 = 0xC4DA, - ARM64_SYSREG_TRBIDR_EL1 = 0xC4DF, - ARM64_SYSREG_TRBLIMITR_EL1 = 0xC4D8, - ARM64_SYSREG_TRBMAR_EL1 = 0xC4DC, - ARM64_SYSREG_TRBPTR_EL1 = 0xC4D9, - ARM64_SYSREG_TRBSR_EL1 = 0xC4DB, - ARM64_SYSREG_TRBTRG_EL1 = 0xC4DE, - ARM64_SYSREG_TRCACATR0 = 0x8902, - ARM64_SYSREG_TRCACATR1 = 0x8912, - ARM64_SYSREG_TRCACATR10 = 0x8923, - ARM64_SYSREG_TRCACATR11 = 0x8933, - ARM64_SYSREG_TRCACATR12 = 0x8943, - ARM64_SYSREG_TRCACATR13 = 0x8953, - ARM64_SYSREG_TRCACATR14 = 0x8963, - ARM64_SYSREG_TRCACATR15 = 0x8973, - ARM64_SYSREG_TRCACATR2 = 0x8922, - ARM64_SYSREG_TRCACATR3 = 0x8932, - ARM64_SYSREG_TRCACATR4 = 0x8942, - ARM64_SYSREG_TRCACATR5 = 0x8952, - ARM64_SYSREG_TRCACATR6 = 0x8962, - ARM64_SYSREG_TRCACATR7 = 0x8972, - ARM64_SYSREG_TRCACATR8 = 0x8903, - ARM64_SYSREG_TRCACATR9 = 0x8913, - ARM64_SYSREG_TRCACVR0 = 0x8900, - ARM64_SYSREG_TRCACVR1 = 0x8910, - ARM64_SYSREG_TRCACVR10 = 0x8921, - ARM64_SYSREG_TRCACVR11 = 0x8931, - ARM64_SYSREG_TRCACVR12 = 0x8941, - ARM64_SYSREG_TRCACVR13 = 0x8951, - ARM64_SYSREG_TRCACVR14 = 0x8961, - ARM64_SYSREG_TRCACVR15 = 0x8971, - ARM64_SYSREG_TRCACVR2 = 0x8920, - ARM64_SYSREG_TRCACVR3 = 0x8930, - ARM64_SYSREG_TRCACVR4 = 0x8940, - ARM64_SYSREG_TRCACVR5 = 0x8950, - ARM64_SYSREG_TRCACVR6 = 0x8960, - ARM64_SYSREG_TRCACVR7 = 0x8970, - ARM64_SYSREG_TRCACVR8 = 0x8901, - ARM64_SYSREG_TRCACVR9 = 0x8911, - ARM64_SYSREG_TRCAUTHSTATUS = 0x8BF6, - ARM64_SYSREG_TRCAUXCTLR = 0x8830, - ARM64_SYSREG_TRCBBCTLR = 0x8878, - ARM64_SYSREG_TRCCCCTLR = 0x8870, - ARM64_SYSREG_TRCCIDCCTLR0 = 0x8982, - ARM64_SYSREG_TRCCIDCCTLR1 = 0x898A, - ARM64_SYSREG_TRCCIDCVR0 = 0x8980, - ARM64_SYSREG_TRCCIDCVR1 = 0x8990, - ARM64_SYSREG_TRCCIDCVR2 = 0x89A0, - ARM64_SYSREG_TRCCIDCVR3 = 0x89B0, - ARM64_SYSREG_TRCCIDCVR4 = 0x89C0, - ARM64_SYSREG_TRCCIDCVR5 = 0x89D0, - ARM64_SYSREG_TRCCIDCVR6 = 0x89E0, - ARM64_SYSREG_TRCCIDCVR7 = 0x89F0, - ARM64_SYSREG_TRCCIDR0 = 0x8BE7, - ARM64_SYSREG_TRCCIDR1 = 0x8BEF, - ARM64_SYSREG_TRCCIDR2 = 0x8BF7, - ARM64_SYSREG_TRCCIDR3 = 0x8BFF, - ARM64_SYSREG_TRCCLAIMCLR = 0x8BCE, - ARM64_SYSREG_TRCCLAIMSET = 0x8BC6, - ARM64_SYSREG_TRCCNTCTLR0 = 0x8825, - ARM64_SYSREG_TRCCNTCTLR1 = 0x882D, - ARM64_SYSREG_TRCCNTCTLR2 = 0x8835, - ARM64_SYSREG_TRCCNTCTLR3 = 0x883D, - ARM64_SYSREG_TRCCNTRLDVR0 = 0x8805, - ARM64_SYSREG_TRCCNTRLDVR1 = 0x880D, - ARM64_SYSREG_TRCCNTRLDVR2 = 0x8815, - ARM64_SYSREG_TRCCNTRLDVR3 = 0x881D, - ARM64_SYSREG_TRCCNTVR0 = 0x8845, - ARM64_SYSREG_TRCCNTVR1 = 0x884D, - ARM64_SYSREG_TRCCNTVR2 = 0x8855, - ARM64_SYSREG_TRCCNTVR3 = 0x885D, - ARM64_SYSREG_TRCCONFIGR = 0x8820, - ARM64_SYSREG_TRCDEVAFF0 = 0x8BD6, - ARM64_SYSREG_TRCDEVAFF1 = 0x8BDE, - ARM64_SYSREG_TRCDEVARCH = 0x8BFE, - ARM64_SYSREG_TRCDEVID = 0x8B97, - ARM64_SYSREG_TRCDEVTYPE = 0x8B9F, - ARM64_SYSREG_TRCDVCMR0 = 0x8906, - ARM64_SYSREG_TRCDVCMR1 = 0x8926, - ARM64_SYSREG_TRCDVCMR2 = 0x8946, - ARM64_SYSREG_TRCDVCMR3 = 0x8966, - ARM64_SYSREG_TRCDVCMR4 = 0x8907, - ARM64_SYSREG_TRCDVCMR5 = 0x8927, - ARM64_SYSREG_TRCDVCMR6 = 0x8947, - ARM64_SYSREG_TRCDVCMR7 = 0x8967, - ARM64_SYSREG_TRCDVCVR0 = 0x8904, - ARM64_SYSREG_TRCDVCVR1 = 0x8924, - ARM64_SYSREG_TRCDVCVR2 = 0x8944, - ARM64_SYSREG_TRCDVCVR3 = 0x8964, - ARM64_SYSREG_TRCDVCVR4 = 0x8905, - ARM64_SYSREG_TRCDVCVR5 = 0x8925, - ARM64_SYSREG_TRCDVCVR6 = 0x8945, - ARM64_SYSREG_TRCDVCVR7 = 0x8965, - ARM64_SYSREG_TRCEVENTCTL0R = 0x8840, - ARM64_SYSREG_TRCEVENTCTL1R = 0x8848, - ARM64_SYSREG_TRCEXTINSELR = 0x8844, - ARM64_SYSREG_TRCEXTINSELR0 = 0x8844, - ARM64_SYSREG_TRCEXTINSELR1 = 0x884C, - ARM64_SYSREG_TRCEXTINSELR2 = 0x8854, - ARM64_SYSREG_TRCEXTINSELR3 = 0x885C, - ARM64_SYSREG_TRCIDR0 = 0x8847, - ARM64_SYSREG_TRCIDR1 = 0x884F, - ARM64_SYSREG_TRCIDR10 = 0x8816, - ARM64_SYSREG_TRCIDR11 = 0x881E, - ARM64_SYSREG_TRCIDR12 = 0x8826, - ARM64_SYSREG_TRCIDR13 = 0x882E, - ARM64_SYSREG_TRCIDR2 = 0x8857, - ARM64_SYSREG_TRCIDR3 = 0x885F, - ARM64_SYSREG_TRCIDR4 = 0x8867, - ARM64_SYSREG_TRCIDR5 = 0x886F, - ARM64_SYSREG_TRCIDR6 = 0x8877, - ARM64_SYSREG_TRCIDR7 = 0x887F, - ARM64_SYSREG_TRCIDR8 = 0x8806, - ARM64_SYSREG_TRCIDR9 = 0x880E, - ARM64_SYSREG_TRCIMSPEC0 = 0x8807, - ARM64_SYSREG_TRCIMSPEC1 = 0x880F, - ARM64_SYSREG_TRCIMSPEC2 = 0x8817, - ARM64_SYSREG_TRCIMSPEC3 = 0x881F, - ARM64_SYSREG_TRCIMSPEC4 = 0x8827, - ARM64_SYSREG_TRCIMSPEC5 = 0x882F, - ARM64_SYSREG_TRCIMSPEC6 = 0x8837, - ARM64_SYSREG_TRCIMSPEC7 = 0x883F, - ARM64_SYSREG_TRCITCTRL = 0x8B84, - ARM64_SYSREG_TRCLAR = 0x8BE6, - ARM64_SYSREG_TRCLSR = 0x8BEE, - ARM64_SYSREG_TRCOSLAR = 0x8884, - ARM64_SYSREG_TRCOSLSR = 0x888C, - ARM64_SYSREG_TRCPDCR = 0x88A4, - ARM64_SYSREG_TRCPDSR = 0x88AC, - ARM64_SYSREG_TRCPIDR0 = 0x8BC7, - ARM64_SYSREG_TRCPIDR1 = 0x8BCF, - ARM64_SYSREG_TRCPIDR2 = 0x8BD7, - ARM64_SYSREG_TRCPIDR3 = 0x8BDF, - ARM64_SYSREG_TRCPIDR4 = 0x8BA7, - ARM64_SYSREG_TRCPIDR5 = 0x8BAF, - ARM64_SYSREG_TRCPIDR6 = 0x8BB7, - ARM64_SYSREG_TRCPIDR7 = 0x8BBF, - ARM64_SYSREG_TRCPRGCTLR = 0x8808, - ARM64_SYSREG_TRCPROCSELR = 0x8810, - ARM64_SYSREG_TRCQCTLR = 0x8809, - ARM64_SYSREG_TRCRSCTLR10 = 0x88D0, - ARM64_SYSREG_TRCRSCTLR11 = 0x88D8, - ARM64_SYSREG_TRCRSCTLR12 = 0x88E0, - ARM64_SYSREG_TRCRSCTLR13 = 0x88E8, - ARM64_SYSREG_TRCRSCTLR14 = 0x88F0, - ARM64_SYSREG_TRCRSCTLR15 = 0x88F8, - ARM64_SYSREG_TRCRSCTLR16 = 0x8881, - ARM64_SYSREG_TRCRSCTLR17 = 0x8889, - ARM64_SYSREG_TRCRSCTLR18 = 0x8891, - ARM64_SYSREG_TRCRSCTLR19 = 0x8899, - ARM64_SYSREG_TRCRSCTLR2 = 0x8890, - ARM64_SYSREG_TRCRSCTLR20 = 0x88A1, - ARM64_SYSREG_TRCRSCTLR21 = 0x88A9, - ARM64_SYSREG_TRCRSCTLR22 = 0x88B1, - ARM64_SYSREG_TRCRSCTLR23 = 0x88B9, - ARM64_SYSREG_TRCRSCTLR24 = 0x88C1, - ARM64_SYSREG_TRCRSCTLR25 = 0x88C9, - ARM64_SYSREG_TRCRSCTLR26 = 0x88D1, - ARM64_SYSREG_TRCRSCTLR27 = 0x88D9, - ARM64_SYSREG_TRCRSCTLR28 = 0x88E1, - ARM64_SYSREG_TRCRSCTLR29 = 0x88E9, - ARM64_SYSREG_TRCRSCTLR3 = 0x8898, - ARM64_SYSREG_TRCRSCTLR30 = 0x88F1, - ARM64_SYSREG_TRCRSCTLR31 = 0x88F9, - ARM64_SYSREG_TRCRSCTLR4 = 0x88A0, - ARM64_SYSREG_TRCRSCTLR5 = 0x88A8, - ARM64_SYSREG_TRCRSCTLR6 = 0x88B0, - ARM64_SYSREG_TRCRSCTLR7 = 0x88B8, - ARM64_SYSREG_TRCRSCTLR8 = 0x88C0, - ARM64_SYSREG_TRCRSCTLR9 = 0x88C8, - ARM64_SYSREG_TRCRSR = 0x8850, - ARM64_SYSREG_TRCSEQEVR0 = 0x8804, - ARM64_SYSREG_TRCSEQEVR1 = 0x880C, - ARM64_SYSREG_TRCSEQEVR2 = 0x8814, - ARM64_SYSREG_TRCSEQRSTEVR = 0x8834, - ARM64_SYSREG_TRCSEQSTR = 0x883C, - ARM64_SYSREG_TRCSSCCR0 = 0x8882, - ARM64_SYSREG_TRCSSCCR1 = 0x888A, - ARM64_SYSREG_TRCSSCCR2 = 0x8892, - ARM64_SYSREG_TRCSSCCR3 = 0x889A, - ARM64_SYSREG_TRCSSCCR4 = 0x88A2, - ARM64_SYSREG_TRCSSCCR5 = 0x88AA, - ARM64_SYSREG_TRCSSCCR6 = 0x88B2, - ARM64_SYSREG_TRCSSCCR7 = 0x88BA, - ARM64_SYSREG_TRCSSCSR0 = 0x88C2, - ARM64_SYSREG_TRCSSCSR1 = 0x88CA, - ARM64_SYSREG_TRCSSCSR2 = 0x88D2, - ARM64_SYSREG_TRCSSCSR3 = 0x88DA, - ARM64_SYSREG_TRCSSCSR4 = 0x88E2, - ARM64_SYSREG_TRCSSCSR5 = 0x88EA, - ARM64_SYSREG_TRCSSCSR6 = 0x88F2, - ARM64_SYSREG_TRCSSCSR7 = 0x88FA, - ARM64_SYSREG_TRCSSPCICR0 = 0x8883, - ARM64_SYSREG_TRCSSPCICR1 = 0x888B, - ARM64_SYSREG_TRCSSPCICR2 = 0x8893, - ARM64_SYSREG_TRCSSPCICR3 = 0x889B, - ARM64_SYSREG_TRCSSPCICR4 = 0x88A3, - ARM64_SYSREG_TRCSSPCICR5 = 0x88AB, - ARM64_SYSREG_TRCSSPCICR6 = 0x88B3, - ARM64_SYSREG_TRCSSPCICR7 = 0x88BB, - ARM64_SYSREG_TRCSTALLCTLR = 0x8858, - ARM64_SYSREG_TRCSTATR = 0x8818, - ARM64_SYSREG_TRCSYNCPR = 0x8868, - ARM64_SYSREG_TRCTRACEIDR = 0x8801, - ARM64_SYSREG_TRCTSCTLR = 0x8860, - ARM64_SYSREG_TRCVDARCCTLR = 0x8852, - ARM64_SYSREG_TRCVDCTLR = 0x8842, - ARM64_SYSREG_TRCVDSACCTLR = 0x884A, - ARM64_SYSREG_TRCVICTLR = 0x8802, - ARM64_SYSREG_TRCVIIECTLR = 0x880A, - ARM64_SYSREG_TRCVIPCSSCTLR = 0x881A, - ARM64_SYSREG_TRCVISSCTLR = 0x8812, - ARM64_SYSREG_TRCVMIDCCTLR0 = 0x8992, - ARM64_SYSREG_TRCVMIDCCTLR1 = 0x899A, - ARM64_SYSREG_TRCVMIDCVR0 = 0x8981, - ARM64_SYSREG_TRCVMIDCVR1 = 0x8991, - ARM64_SYSREG_TRCVMIDCVR2 = 0x89A1, - ARM64_SYSREG_TRCVMIDCVR3 = 0x89B1, - ARM64_SYSREG_TRCVMIDCVR4 = 0x89C1, - ARM64_SYSREG_TRCVMIDCVR5 = 0x89D1, - ARM64_SYSREG_TRCVMIDCVR6 = 0x89E1, - ARM64_SYSREG_TRCVMIDCVR7 = 0x89F1, - ARM64_SYSREG_TRFCR_EL1 = 0xC091, - ARM64_SYSREG_TRFCR_EL12 = 0xE891, - ARM64_SYSREG_TRFCR_EL2 = 0xE091, - ARM64_SYSREG_TTBR0_EL1 = 0xC100, - ARM64_SYSREG_TTBR0_EL12 = 0xE900, - ARM64_SYSREG_TTBR0_EL2 = 0xE100, - ARM64_SYSREG_TTBR0_EL3 = 0xF100, - ARM64_SYSREG_TTBR1_EL1 = 0xC101, - ARM64_SYSREG_TTBR1_EL12 = 0xE901, - ARM64_SYSREG_TTBR1_EL2 = 0xE101, - ARM64_SYSREG_UAO = 0xC214, - ARM64_SYSREG_VBAR_EL1 = 0xC600, - ARM64_SYSREG_VBAR_EL12 = 0xEE00, - ARM64_SYSREG_VBAR_EL2 = 0xE600, - ARM64_SYSREG_VBAR_EL3 = 0xF600, - ARM64_SYSREG_VDISR_EL2 = 0xE609, - ARM64_SYSREG_VMPIDR_EL2 = 0xE005, - ARM64_SYSREG_VNCR_EL2 = 0xE110, - ARM64_SYSREG_VPIDR_EL2 = 0xE000, - ARM64_SYSREG_VSCTLR_EL2 = 0xE100, - ARM64_SYSREG_VSESR_EL2 = 0xE293, - ARM64_SYSREG_VSTCR_EL2 = 0xE132, - ARM64_SYSREG_VSTTBR_EL2 = 0xE130, - ARM64_SYSREG_VTCR_EL2 = 0xE10A, - ARM64_SYSREG_VTTBR_EL2 = 0xE108, - ARM64_SYSREG_ZCR_EL1 = 0xC090, - ARM64_SYSREG_ZCR_EL12 = 0xE890, - ARM64_SYSREG_ZCR_EL2 = 0xE090, - ARM64_SYSREG_ZCR_EL3 = 0xF090, -} arm64_sysreg; - -/// System PState Field (MSR instruction) -typedef enum arm64_pstate { - ARM64_PSTATE_INVALID = 0, - ARM64_PSTATE_SPSEL = 0x05, - ARM64_PSTATE_DAIFSET = 0x1e, - ARM64_PSTATE_DAIFCLR = 0x1f, - ARM64_PSTATE_PAN = 0x4, - ARM64_PSTATE_UAO = 0x3, - ARM64_PSTATE_DIT = 0x1a, -} arm64_pstate; - -/// Vector arrangement specifier (for FloatingPoint/Advanced SIMD insn) -typedef enum arm64_vas { - ARM64_VAS_INVALID = 0, - ARM64_VAS_16B, - ARM64_VAS_8B, - ARM64_VAS_4B, - ARM64_VAS_1B, - ARM64_VAS_8H, - ARM64_VAS_4H, - ARM64_VAS_2H, - ARM64_VAS_1H, - ARM64_VAS_4S, - ARM64_VAS_2S, - ARM64_VAS_1S, - ARM64_VAS_2D, - ARM64_VAS_1D, - ARM64_VAS_1Q, -} arm64_vas; - -/// Memory barrier operands -typedef enum arm64_barrier_op { - ARM64_BARRIER_INVALID = 0, - ARM64_BARRIER_OSHLD = 0x1, - ARM64_BARRIER_OSHST = 0x2, - ARM64_BARRIER_OSH = 0x3, - ARM64_BARRIER_NSHLD = 0x5, - ARM64_BARRIER_NSHST = 0x6, - ARM64_BARRIER_NSH = 0x7, - ARM64_BARRIER_ISHLD = 0x9, - ARM64_BARRIER_ISHST = 0xa, - ARM64_BARRIER_ISH = 0xb, - ARM64_BARRIER_LD = 0xd, - ARM64_BARRIER_ST = 0xe, - ARM64_BARRIER_SY = 0xf -} arm64_barrier_op; - -/// Operand type for instruction's operands -typedef enum arm64_op_type { - ARM64_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - ARM64_OP_REG, ///< = CS_OP_REG (Register operand). - ARM64_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - ARM64_OP_MEM, ///< = CS_OP_MEM (Memory operand). - ARM64_OP_FP, ///< = CS_OP_FP (Floating-Point operand). - ARM64_OP_CIMM = 64, ///< C-Immediate - ARM64_OP_REG_MRS, ///< MRS register operand. - ARM64_OP_REG_MSR, ///< MSR register operand. - ARM64_OP_PSTATE, ///< PState operand. - ARM64_OP_SYS, ///< SYS operand for IC/DC/AT/TLBI instructions. - ARM64_OP_SVCR, ///< SVCR operand for MSR SVCR instructions. - ARM64_OP_PREFETCH, ///< Prefetch operand (PRFM). - ARM64_OP_BARRIER, ///< Memory barrier operand (ISB/DMB/DSB instructions). - ARM64_OP_SME_INDEX, ///< SME instruction operand with with index. -} arm64_op_type; - -/// SYS operands (IC/DC/AC/TLBI) -typedef enum arm64_sys_op { - ARM64_SYS_INVALID = 0, - - /// TLBI operations - ARM64_TLBI_ALLE1, - ARM64_TLBI_ALLE1IS, - ARM64_TLBI_ALLE1ISNXS, - ARM64_TLBI_ALLE1NXS, - ARM64_TLBI_ALLE1OS, - ARM64_TLBI_ALLE1OSNXS, - ARM64_TLBI_ALLE2, - ARM64_TLBI_ALLE2IS, - ARM64_TLBI_ALLE2ISNXS, - ARM64_TLBI_ALLE2NXS, - ARM64_TLBI_ALLE2OS, - ARM64_TLBI_ALLE2OSNXS, - ARM64_TLBI_ALLE3, - ARM64_TLBI_ALLE3IS, - ARM64_TLBI_ALLE3ISNXS, - ARM64_TLBI_ALLE3NXS, - ARM64_TLBI_ALLE3OS, - ARM64_TLBI_ALLE3OSNXS, - ARM64_TLBI_ASIDE1, - ARM64_TLBI_ASIDE1IS, - ARM64_TLBI_ASIDE1ISNXS, - ARM64_TLBI_ASIDE1NXS, - ARM64_TLBI_ASIDE1OS, - ARM64_TLBI_ASIDE1OSNXS, - ARM64_TLBI_IPAS2E1, - ARM64_TLBI_IPAS2E1IS, - ARM64_TLBI_IPAS2E1ISNXS, - ARM64_TLBI_IPAS2E1NXS, - ARM64_TLBI_IPAS2E1OS, - ARM64_TLBI_IPAS2E1OSNXS, - ARM64_TLBI_IPAS2LE1, - ARM64_TLBI_IPAS2LE1IS, - ARM64_TLBI_IPAS2LE1ISNXS, - ARM64_TLBI_IPAS2LE1NXS, - ARM64_TLBI_IPAS2LE1OS, - ARM64_TLBI_IPAS2LE1OSNXS, - ARM64_TLBI_PAALL, - ARM64_TLBI_PAALLNXS, - ARM64_TLBI_PAALLOS, - ARM64_TLBI_PAALLOSNXS, - ARM64_TLBI_RIPAS2E1, - ARM64_TLBI_RIPAS2E1IS, - ARM64_TLBI_RIPAS2E1ISNXS, - ARM64_TLBI_RIPAS2E1NXS, - ARM64_TLBI_RIPAS2E1OS, - ARM64_TLBI_RIPAS2E1OSNXS, - ARM64_TLBI_RIPAS2LE1, - ARM64_TLBI_RIPAS2LE1IS, - ARM64_TLBI_RIPAS2LE1ISNXS, - ARM64_TLBI_RIPAS2LE1NXS, - ARM64_TLBI_RIPAS2LE1OS, - ARM64_TLBI_RIPAS2LE1OSNXS, - ARM64_TLBI_RPALOS, - ARM64_TLBI_RPALOSNXS, - ARM64_TLBI_RPAOS, - ARM64_TLBI_RPAOSNXS, - ARM64_TLBI_RVAAE1, - ARM64_TLBI_RVAAE1IS, - ARM64_TLBI_RVAAE1ISNXS, - ARM64_TLBI_RVAAE1NXS, - ARM64_TLBI_RVAAE1OS, - ARM64_TLBI_RVAAE1OSNXS, - ARM64_TLBI_RVAALE1, - ARM64_TLBI_RVAALE1IS, - ARM64_TLBI_RVAALE1ISNXS, - ARM64_TLBI_RVAALE1NXS, - ARM64_TLBI_RVAALE1OS, - ARM64_TLBI_RVAALE1OSNXS, - ARM64_TLBI_RVAE1, - ARM64_TLBI_RVAE1IS, - ARM64_TLBI_RVAE1ISNXS, - ARM64_TLBI_RVAE1NXS, - ARM64_TLBI_RVAE1OS, - ARM64_TLBI_RVAE1OSNXS, - ARM64_TLBI_RVAE2, - ARM64_TLBI_RVAE2IS, - ARM64_TLBI_RVAE2ISNXS, - ARM64_TLBI_RVAE2NXS, - ARM64_TLBI_RVAE2OS, - ARM64_TLBI_RVAE2OSNXS, - ARM64_TLBI_RVAE3, - ARM64_TLBI_RVAE3IS, - ARM64_TLBI_RVAE3ISNXS, - ARM64_TLBI_RVAE3NXS, - ARM64_TLBI_RVAE3OS, - ARM64_TLBI_RVAE3OSNXS, - ARM64_TLBI_RVALE1, - ARM64_TLBI_RVALE1IS, - ARM64_TLBI_RVALE1ISNXS, - ARM64_TLBI_RVALE1NXS, - ARM64_TLBI_RVALE1OS, - ARM64_TLBI_RVALE1OSNXS, - ARM64_TLBI_RVALE2, - ARM64_TLBI_RVALE2IS, - ARM64_TLBI_RVALE2ISNXS, - ARM64_TLBI_RVALE2NXS, - ARM64_TLBI_RVALE2OS, - ARM64_TLBI_RVALE2OSNXS, - ARM64_TLBI_RVALE3, - ARM64_TLBI_RVALE3IS, - ARM64_TLBI_RVALE3ISNXS, - ARM64_TLBI_RVALE3NXS, - ARM64_TLBI_RVALE3OS, - ARM64_TLBI_RVALE3OSNXS, - ARM64_TLBI_VAAE1, - ARM64_TLBI_VAAE1IS, - ARM64_TLBI_VAAE1ISNXS, - ARM64_TLBI_VAAE1NXS, - ARM64_TLBI_VAAE1OS, - ARM64_TLBI_VAAE1OSNXS, - ARM64_TLBI_VAALE1, - ARM64_TLBI_VAALE1IS, - ARM64_TLBI_VAALE1ISNXS, - ARM64_TLBI_VAALE1NXS, - ARM64_TLBI_VAALE1OS, - ARM64_TLBI_VAALE1OSNXS, - ARM64_TLBI_VAE1, - ARM64_TLBI_VAE1IS, - ARM64_TLBI_VAE1ISNXS, - ARM64_TLBI_VAE1NXS, - ARM64_TLBI_VAE1OS, - ARM64_TLBI_VAE1OSNXS, - ARM64_TLBI_VAE2, - ARM64_TLBI_VAE2IS, - ARM64_TLBI_VAE2ISNXS, - ARM64_TLBI_VAE2NXS, - ARM64_TLBI_VAE2OS, - ARM64_TLBI_VAE2OSNXS, - ARM64_TLBI_VAE3, - ARM64_TLBI_VAE3IS, - ARM64_TLBI_VAE3ISNXS, - ARM64_TLBI_VAE3NXS, - ARM64_TLBI_VAE3OS, - ARM64_TLBI_VAE3OSNXS, - ARM64_TLBI_VALE1, - ARM64_TLBI_VALE1IS, - ARM64_TLBI_VALE1ISNXS, - ARM64_TLBI_VALE1NXS, - ARM64_TLBI_VALE1OS, - ARM64_TLBI_VALE1OSNXS, - ARM64_TLBI_VALE2, - ARM64_TLBI_VALE2IS, - ARM64_TLBI_VALE2ISNXS, - ARM64_TLBI_VALE2NXS, - ARM64_TLBI_VALE2OS, - ARM64_TLBI_VALE2OSNXS, - ARM64_TLBI_VALE3, - ARM64_TLBI_VALE3IS, - ARM64_TLBI_VALE3ISNXS, - ARM64_TLBI_VALE3NXS, - ARM64_TLBI_VALE3OS, - ARM64_TLBI_VALE3OSNXS, - ARM64_TLBI_VMALLE1, - ARM64_TLBI_VMALLE1IS, - ARM64_TLBI_VMALLE1ISNXS, - ARM64_TLBI_VMALLE1NXS, - ARM64_TLBI_VMALLE1OS, - ARM64_TLBI_VMALLE1OSNXS, - ARM64_TLBI_VMALLS12E1, - ARM64_TLBI_VMALLS12E1IS, - ARM64_TLBI_VMALLS12E1ISNXS, - ARM64_TLBI_VMALLS12E1NXS, - ARM64_TLBI_VMALLS12E1OS, - ARM64_TLBI_VMALLS12E1OSNXS, - - /// AT operations - ARM64_AT_S1E1R, - ARM64_AT_S1E2R, - ARM64_AT_S1E3R, - ARM64_AT_S1E1W, - ARM64_AT_S1E2W, - ARM64_AT_S1E3W, - ARM64_AT_S1E0R, - ARM64_AT_S1E0W, - ARM64_AT_S12E1R, - ARM64_AT_S12E1W, - ARM64_AT_S12E0R, - ARM64_AT_S12E0W, - ARM64_AT_S1E1RP, - ARM64_AT_S1E1WP, - - /// DC operations - ARM64_DC_CGDSW, - ARM64_DC_CGDVAC, - ARM64_DC_CGDVADP, - ARM64_DC_CGDVAP, - ARM64_DC_CGSW, - ARM64_DC_CGVAC, - ARM64_DC_CGVADP, - ARM64_DC_CGVAP, - ARM64_DC_CIGDSW, - ARM64_DC_CIGDVAC, - ARM64_DC_CIGSW, - ARM64_DC_CIGVAC, - ARM64_DC_CISW, - ARM64_DC_CIVAC, - ARM64_DC_CSW, - ARM64_DC_CVAC, - ARM64_DC_CVADP, - ARM64_DC_CVAP, - ARM64_DC_CVAU, - ARM64_DC_GVA, - ARM64_DC_GZVA, - ARM64_DC_IGDSW, - ARM64_DC_IGDVAC, - ARM64_DC_IGSW, - ARM64_DC_IGVAC, - ARM64_DC_ISW, - ARM64_DC_IVAC, - ARM64_DC_ZVA, - - /// IC operations - ARM64_IC_IALLUIS, - ARM64_IC_IALLU, - ARM64_IC_IVAU, -} arm64_sys_op; - -/// SVCR operands -typedef enum arm64_svcr_op { - ARM64_SVCR_INVALID = 0, - - ARM64_SVCR_SVCRSM = 0x1, - ARM64_SVCR_SVCRSMZA = 0x3, - ARM64_SVCR_SVCRZA = 0x2, -} arm64_svcr_op; - -/// Prefetch operations (PRFM) -typedef enum arm64_prefetch_op { - ARM64_PRFM_INVALID = 0, - ARM64_PRFM_PLDL1KEEP = 0x00 + 1, - ARM64_PRFM_PLDL1STRM = 0x01 + 1, - ARM64_PRFM_PLDL2KEEP = 0x02 + 1, - ARM64_PRFM_PLDL2STRM = 0x03 + 1, - ARM64_PRFM_PLDL3KEEP = 0x04 + 1, - ARM64_PRFM_PLDL3STRM = 0x05 + 1, - ARM64_PRFM_PLIL1KEEP = 0x08 + 1, - ARM64_PRFM_PLIL1STRM = 0x09 + 1, - ARM64_PRFM_PLIL2KEEP = 0x0a + 1, - ARM64_PRFM_PLIL2STRM = 0x0b + 1, - ARM64_PRFM_PLIL3KEEP = 0x0c + 1, - ARM64_PRFM_PLIL3STRM = 0x0d + 1, - ARM64_PRFM_PSTL1KEEP = 0x10 + 1, - ARM64_PRFM_PSTL1STRM = 0x11 + 1, - ARM64_PRFM_PSTL2KEEP = 0x12 + 1, - ARM64_PRFM_PSTL2STRM = 0x13 + 1, - ARM64_PRFM_PSTL3KEEP = 0x14 + 1, - ARM64_PRFM_PSTL3STRM = 0x15 + 1, -} arm64_prefetch_op; - -/// ARM64 registers -typedef enum arm64_reg { - ARM64_REG_INVALID = 0, - - ARM64_REG_FFR = 1, - ARM64_REG_FP = 2, - ARM64_REG_LR = 3, - ARM64_REG_NZCV = 4, - ARM64_REG_SP = 5, - ARM64_REG_VG = 6, - ARM64_REG_WSP = 7, - ARM64_REG_WZR = 8, - ARM64_REG_XZR = 9, - ARM64_REG_ZA = 10, - ARM64_REG_B0 = 11, - ARM64_REG_B1 = 12, - ARM64_REG_B2 = 13, - ARM64_REG_B3 = 14, - ARM64_REG_B4 = 15, - ARM64_REG_B5 = 16, - ARM64_REG_B6 = 17, - ARM64_REG_B7 = 18, - ARM64_REG_B8 = 19, - ARM64_REG_B9 = 20, - ARM64_REG_B10 = 21, - ARM64_REG_B11 = 22, - ARM64_REG_B12 = 23, - ARM64_REG_B13 = 24, - ARM64_REG_B14 = 25, - ARM64_REG_B15 = 26, - ARM64_REG_B16 = 27, - ARM64_REG_B17 = 28, - ARM64_REG_B18 = 29, - ARM64_REG_B19 = 30, - ARM64_REG_B20 = 31, - ARM64_REG_B21 = 32, - ARM64_REG_B22 = 33, - ARM64_REG_B23 = 34, - ARM64_REG_B24 = 35, - ARM64_REG_B25 = 36, - ARM64_REG_B26 = 37, - ARM64_REG_B27 = 38, - ARM64_REG_B28 = 39, - ARM64_REG_B29 = 40, - ARM64_REG_B30 = 41, - ARM64_REG_B31 = 42, - ARM64_REG_D0 = 43, - ARM64_REG_D1 = 44, - ARM64_REG_D2 = 45, - ARM64_REG_D3 = 46, - ARM64_REG_D4 = 47, - ARM64_REG_D5 = 48, - ARM64_REG_D6 = 49, - ARM64_REG_D7 = 50, - ARM64_REG_D8 = 51, - ARM64_REG_D9 = 52, - ARM64_REG_D10 = 53, - ARM64_REG_D11 = 54, - ARM64_REG_D12 = 55, - ARM64_REG_D13 = 56, - ARM64_REG_D14 = 57, - ARM64_REG_D15 = 58, - ARM64_REG_D16 = 59, - ARM64_REG_D17 = 60, - ARM64_REG_D18 = 61, - ARM64_REG_D19 = 62, - ARM64_REG_D20 = 63, - ARM64_REG_D21 = 64, - ARM64_REG_D22 = 65, - ARM64_REG_D23 = 66, - ARM64_REG_D24 = 67, - ARM64_REG_D25 = 68, - ARM64_REG_D26 = 69, - ARM64_REG_D27 = 70, - ARM64_REG_D28 = 71, - ARM64_REG_D29 = 72, - ARM64_REG_D30 = 73, - ARM64_REG_D31 = 74, - ARM64_REG_H0 = 75, - ARM64_REG_H1 = 76, - ARM64_REG_H2 = 77, - ARM64_REG_H3 = 78, - ARM64_REG_H4 = 79, - ARM64_REG_H5 = 80, - ARM64_REG_H6 = 81, - ARM64_REG_H7 = 82, - ARM64_REG_H8 = 83, - ARM64_REG_H9 = 84, - ARM64_REG_H10 = 85, - ARM64_REG_H11 = 86, - ARM64_REG_H12 = 87, - ARM64_REG_H13 = 88, - ARM64_REG_H14 = 89, - ARM64_REG_H15 = 90, - ARM64_REG_H16 = 91, - ARM64_REG_H17 = 92, - ARM64_REG_H18 = 93, - ARM64_REG_H19 = 94, - ARM64_REG_H20 = 95, - ARM64_REG_H21 = 96, - ARM64_REG_H22 = 97, - ARM64_REG_H23 = 98, - ARM64_REG_H24 = 99, - ARM64_REG_H25 = 100, - ARM64_REG_H26 = 101, - ARM64_REG_H27 = 102, - ARM64_REG_H28 = 103, - ARM64_REG_H29 = 104, - ARM64_REG_H30 = 105, - ARM64_REG_H31 = 106, - ARM64_REG_P0 = 107, - ARM64_REG_P1 = 108, - ARM64_REG_P2 = 109, - ARM64_REG_P3 = 110, - ARM64_REG_P4 = 111, - ARM64_REG_P5 = 112, - ARM64_REG_P6 = 113, - ARM64_REG_P7 = 114, - ARM64_REG_P8 = 115, - ARM64_REG_P9 = 116, - ARM64_REG_P10 = 117, - ARM64_REG_P11 = 118, - ARM64_REG_P12 = 119, - ARM64_REG_P13 = 120, - ARM64_REG_P14 = 121, - ARM64_REG_P15 = 122, - ARM64_REG_Q0 = 123, - ARM64_REG_Q1 = 124, - ARM64_REG_Q2 = 125, - ARM64_REG_Q3 = 126, - ARM64_REG_Q4 = 127, - ARM64_REG_Q5 = 128, - ARM64_REG_Q6 = 129, - ARM64_REG_Q7 = 130, - ARM64_REG_Q8 = 131, - ARM64_REG_Q9 = 132, - ARM64_REG_Q10 = 133, - ARM64_REG_Q11 = 134, - ARM64_REG_Q12 = 135, - ARM64_REG_Q13 = 136, - ARM64_REG_Q14 = 137, - ARM64_REG_Q15 = 138, - ARM64_REG_Q16 = 139, - ARM64_REG_Q17 = 140, - ARM64_REG_Q18 = 141, - ARM64_REG_Q19 = 142, - ARM64_REG_Q20 = 143, - ARM64_REG_Q21 = 144, - ARM64_REG_Q22 = 145, - ARM64_REG_Q23 = 146, - ARM64_REG_Q24 = 147, - ARM64_REG_Q25 = 148, - ARM64_REG_Q26 = 149, - ARM64_REG_Q27 = 150, - ARM64_REG_Q28 = 151, - ARM64_REG_Q29 = 152, - ARM64_REG_Q30 = 153, - ARM64_REG_Q31 = 154, - ARM64_REG_S0 = 155, - ARM64_REG_S1 = 156, - ARM64_REG_S2 = 157, - ARM64_REG_S3 = 158, - ARM64_REG_S4 = 159, - ARM64_REG_S5 = 160, - ARM64_REG_S6 = 161, - ARM64_REG_S7 = 162, - ARM64_REG_S8 = 163, - ARM64_REG_S9 = 164, - ARM64_REG_S10 = 165, - ARM64_REG_S11 = 166, - ARM64_REG_S12 = 167, - ARM64_REG_S13 = 168, - ARM64_REG_S14 = 169, - ARM64_REG_S15 = 170, - ARM64_REG_S16 = 171, - ARM64_REG_S17 = 172, - ARM64_REG_S18 = 173, - ARM64_REG_S19 = 174, - ARM64_REG_S20 = 175, - ARM64_REG_S21 = 176, - ARM64_REG_S22 = 177, - ARM64_REG_S23 = 178, - ARM64_REG_S24 = 179, - ARM64_REG_S25 = 180, - ARM64_REG_S26 = 181, - ARM64_REG_S27 = 182, - ARM64_REG_S28 = 183, - ARM64_REG_S29 = 184, - ARM64_REG_S30 = 185, - ARM64_REG_S31 = 186, - ARM64_REG_W0 = 187, - ARM64_REG_W1 = 188, - ARM64_REG_W2 = 189, - ARM64_REG_W3 = 190, - ARM64_REG_W4 = 191, - ARM64_REG_W5 = 192, - ARM64_REG_W6 = 193, - ARM64_REG_W7 = 194, - ARM64_REG_W8 = 195, - ARM64_REG_W9 = 196, - ARM64_REG_W10 = 197, - ARM64_REG_W11 = 198, - ARM64_REG_W12 = 199, - ARM64_REG_W13 = 200, - ARM64_REG_W14 = 201, - ARM64_REG_W15 = 202, - ARM64_REG_W16 = 203, - ARM64_REG_W17 = 204, - ARM64_REG_W18 = 205, - ARM64_REG_W19 = 206, - ARM64_REG_W20 = 207, - ARM64_REG_W21 = 208, - ARM64_REG_W22 = 209, - ARM64_REG_W23 = 210, - ARM64_REG_W24 = 211, - ARM64_REG_W25 = 212, - ARM64_REG_W26 = 213, - ARM64_REG_W27 = 214, - ARM64_REG_W28 = 215, - ARM64_REG_W29 = 216, - ARM64_REG_W30 = 217, - ARM64_REG_X0 = 218, - ARM64_REG_X1 = 219, - ARM64_REG_X2 = 220, - ARM64_REG_X3 = 221, - ARM64_REG_X4 = 222, - ARM64_REG_X5 = 223, - ARM64_REG_X6 = 224, - ARM64_REG_X7 = 225, - ARM64_REG_X8 = 226, - ARM64_REG_X9 = 227, - ARM64_REG_X10 = 228, - ARM64_REG_X11 = 229, - ARM64_REG_X12 = 230, - ARM64_REG_X13 = 231, - ARM64_REG_X14 = 232, - ARM64_REG_X15 = 233, - ARM64_REG_X16 = 234, - ARM64_REG_X17 = 235, - ARM64_REG_X18 = 236, - ARM64_REG_X19 = 237, - ARM64_REG_X20 = 238, - ARM64_REG_X21 = 239, - ARM64_REG_X22 = 240, - ARM64_REG_X23 = 241, - ARM64_REG_X24 = 242, - ARM64_REG_X25 = 243, - ARM64_REG_X26 = 244, - ARM64_REG_X27 = 245, - ARM64_REG_X28 = 246, - ARM64_REG_Z0 = 247, - ARM64_REG_Z1 = 248, - ARM64_REG_Z2 = 249, - ARM64_REG_Z3 = 250, - ARM64_REG_Z4 = 251, - ARM64_REG_Z5 = 252, - ARM64_REG_Z6 = 253, - ARM64_REG_Z7 = 254, - ARM64_REG_Z8 = 255, - ARM64_REG_Z9 = 256, - ARM64_REG_Z10 = 257, - ARM64_REG_Z11 = 258, - ARM64_REG_Z12 = 259, - ARM64_REG_Z13 = 260, - ARM64_REG_Z14 = 261, - ARM64_REG_Z15 = 262, - ARM64_REG_Z16 = 263, - ARM64_REG_Z17 = 264, - ARM64_REG_Z18 = 265, - ARM64_REG_Z19 = 266, - ARM64_REG_Z20 = 267, - ARM64_REG_Z21 = 268, - ARM64_REG_Z22 = 269, - ARM64_REG_Z23 = 270, - ARM64_REG_Z24 = 271, - ARM64_REG_Z25 = 272, - ARM64_REG_Z26 = 273, - ARM64_REG_Z27 = 274, - ARM64_REG_Z28 = 275, - ARM64_REG_Z29 = 276, - ARM64_REG_Z30 = 277, - ARM64_REG_Z31 = 278, - ARM64_REG_ZAB0 = 279, - ARM64_REG_ZAD0 = 280, - ARM64_REG_ZAD1 = 281, - ARM64_REG_ZAD2 = 282, - ARM64_REG_ZAD3 = 283, - ARM64_REG_ZAD4 = 284, - ARM64_REG_ZAD5 = 285, - ARM64_REG_ZAD6 = 286, - ARM64_REG_ZAD7 = 287, - ARM64_REG_ZAH0 = 288, - ARM64_REG_ZAH1 = 289, - ARM64_REG_ZAQ0 = 290, - ARM64_REG_ZAQ1 = 291, - ARM64_REG_ZAQ2 = 292, - ARM64_REG_ZAQ3 = 293, - ARM64_REG_ZAQ4 = 294, - ARM64_REG_ZAQ5 = 295, - ARM64_REG_ZAQ6 = 296, - ARM64_REG_ZAQ7 = 297, - ARM64_REG_ZAQ8 = 298, - ARM64_REG_ZAQ9 = 299, - ARM64_REG_ZAQ10 = 300, - ARM64_REG_ZAQ11 = 301, - ARM64_REG_ZAQ12 = 302, - ARM64_REG_ZAQ13 = 303, - ARM64_REG_ZAQ14 = 304, - ARM64_REG_ZAQ15 = 305, - ARM64_REG_ZAS0 = 306, - ARM64_REG_ZAS1 = 307, - ARM64_REG_ZAS2 = 308, - ARM64_REG_ZAS3 = 309, - - ARM64_REG_V0, - ARM64_REG_V1, - ARM64_REG_V2, - ARM64_REG_V3, - ARM64_REG_V4, - ARM64_REG_V5, - ARM64_REG_V6, - ARM64_REG_V7, - ARM64_REG_V8, - ARM64_REG_V9, - ARM64_REG_V10, - ARM64_REG_V11, - ARM64_REG_V12, - ARM64_REG_V13, - ARM64_REG_V14, - ARM64_REG_V15, - ARM64_REG_V16, - ARM64_REG_V17, - ARM64_REG_V18, - ARM64_REG_V19, - ARM64_REG_V20, - ARM64_REG_V21, - ARM64_REG_V22, - ARM64_REG_V23, - ARM64_REG_V24, - ARM64_REG_V25, - ARM64_REG_V26, - ARM64_REG_V27, - ARM64_REG_V28, - ARM64_REG_V29, - ARM64_REG_V30, - ARM64_REG_V31, - - ARM64_REG_ENDING, // <-- mark the end of the list of registers - - // alias registers - ARM64_REG_IP0 = ARM64_REG_X16, - ARM64_REG_IP1 = ARM64_REG_X17, - ARM64_REG_X29 = ARM64_REG_FP, - ARM64_REG_X30 = ARM64_REG_LR, -} arm64_reg; - -/// Instruction's operand referring to memory -/// This is associated with ARM64_OP_MEM operand type above -typedef struct arm64_op_mem { - arm64_reg base; ///< base register - arm64_reg index; ///< index register - int32_t disp; ///< displacement/offset value -} arm64_op_mem; - -/// SME Instruction's operand has index -/// This is associated with ARM64_OP_SME_INDEX operand type above -typedef struct arm64_op_sme_index { - arm64_reg reg; ///< register being indexed - arm64_reg base; ///< base register - int32_t disp; ///< displacement/offset value -} arm64_op_sme_index; - -/// Instruction operand -typedef struct cs_arm64_op { - int vector_index; ///< Vector Index for some vector operands (or -1 if - ///< irrelevant) - arm64_vas vas; ///< Vector Arrangement Specifier - struct { - arm64_shifter type; ///< shifter type of this operand - unsigned int value; ///< shifter value of this operand - } shift; - arm64_extender ext; ///< extender type of this operand - arm64_op_type type; ///< operand type - arm64_svcr_op svcr; ///< MSR/MRS SVCR instruction variant. - union { - arm64_reg reg; ///< register value for REG operand - int64_t imm; ///< immediate value, or index for C-IMM or IMM operand - double fp; ///< floating point value for FP operand - arm64_op_mem mem; ///< base/index/scale/disp value for MEM operand - arm64_pstate pstate; ///< PState field of MSR instruction. - arm64_sys_op sys; ///< IC/DC/AT/TLBI operation (see arm64_ic_op, - ///< arm64_dc_op, arm64_at_op, arm64_tlbi_op) - arm64_prefetch_op prefetch; ///< PRFM operation. - arm64_barrier_op - barrier; ///< Memory barrier operation (ISB/DMB/DSB instructions). - arm64_op_sme_index sme_index; ///< base/disp value for matrix tile slice - ///< instructions. - }; - - /// How is this operand accessed? (READ, WRITE or READ|WRITE) - /// This field is combined of cs_ac_type. - /// NOTE: this field is irrelevant if engine is compiled in DIET mode. - uint8_t access; -} cs_arm64_op; - -/// Instruction structure -typedef struct cs_arm64 { - arm64_cc cc; ///< conditional code for this insn - bool update_flags; ///< does this insn update flags? - bool writeback; ///< does this insn request writeback? 'True' means 'yes' - bool post_index; ///< only set if writeback is 'True', if 'False' pre-index, otherwise post. - - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - - cs_arm64_op operands[8]; ///< operands for this instruction. -} cs_arm64; - -/// ARM64 instruction -typedef enum arm64_insn { - ARM64_INS_INVALID = 0, - - ARM64_INS_ABS, - ARM64_INS_ADC, - ARM64_INS_ADCLB, - ARM64_INS_ADCLT, - ARM64_INS_ADCS, - ARM64_INS_ADD, - ARM64_INS_ADDG, - ARM64_INS_ADDHA, - ARM64_INS_ADDHN, - ARM64_INS_ADDHN2, - ARM64_INS_ADDHNB, - ARM64_INS_ADDHNT, - ARM64_INS_ADDP, - ARM64_INS_ADDPL, - ARM64_INS_ADDS, - ARM64_INS_ADDV, - ARM64_INS_ADDVA, - ARM64_INS_ADDVL, - ARM64_INS_ADR, - ARM64_INS_ADRP, - ARM64_INS_AESD, - ARM64_INS_AESE, - ARM64_INS_AESIMC, - ARM64_INS_AESMC, - ARM64_INS_AND, - ARM64_INS_ANDS, - ARM64_INS_ANDV, - ARM64_INS_ASR, - ARM64_INS_ASRD, - ARM64_INS_ASRR, - ARM64_INS_ASRV, - ARM64_INS_AUTDA, - ARM64_INS_AUTDB, - ARM64_INS_AUTDZA, - ARM64_INS_AUTDZB, - ARM64_INS_AUTIA, - ARM64_INS_AUTIA1716, - ARM64_INS_AUTIASP, - ARM64_INS_AUTIAZ, - ARM64_INS_AUTIB, - ARM64_INS_AUTIB1716, - ARM64_INS_AUTIBSP, - ARM64_INS_AUTIBZ, - ARM64_INS_AUTIZA, - ARM64_INS_AUTIZB, - ARM64_INS_AXFLAG, - ARM64_INS_B, - ARM64_INS_BC, - ARM64_INS_BCAX, - ARM64_INS_BDEP, - ARM64_INS_BEXT, - ARM64_INS_BFCVT, - ARM64_INS_BFCVTN, - ARM64_INS_BFCVTN2, - ARM64_INS_BFCVTNT, - ARM64_INS_BFDOT, - ARM64_INS_BFM, - ARM64_INS_BFMLALB, - ARM64_INS_BFMLALT, - ARM64_INS_BFMMLA, - ARM64_INS_BFMOPA, - ARM64_INS_BFMOPS, - ARM64_INS_BGRP, - ARM64_INS_BIC, - ARM64_INS_BICS, - ARM64_INS_BIF, - ARM64_INS_BIT, - ARM64_INS_BL, - ARM64_INS_BLR, - ARM64_INS_BLRAA, - ARM64_INS_BLRAAZ, - ARM64_INS_BLRAB, - ARM64_INS_BLRABZ, - ARM64_INS_BR, - ARM64_INS_BRAA, - ARM64_INS_BRAAZ, - ARM64_INS_BRAB, - ARM64_INS_BRABZ, - ARM64_INS_BRB, - ARM64_INS_BRK, - ARM64_INS_BRKA, - ARM64_INS_BRKAS, - ARM64_INS_BRKB, - ARM64_INS_BRKBS, - ARM64_INS_BRKN, - ARM64_INS_BRKNS, - ARM64_INS_BRKPA, - ARM64_INS_BRKPAS, - ARM64_INS_BRKPB, - ARM64_INS_BRKPBS, - ARM64_INS_BSL, - ARM64_INS_BSL1N, - ARM64_INS_BSL2N, - ARM64_INS_BTI, - ARM64_INS_CADD, - ARM64_INS_CAS, - ARM64_INS_CASA, - ARM64_INS_CASAB, - ARM64_INS_CASAH, - ARM64_INS_CASAL, - ARM64_INS_CASALB, - ARM64_INS_CASALH, - ARM64_INS_CASB, - ARM64_INS_CASH, - ARM64_INS_CASL, - ARM64_INS_CASLB, - ARM64_INS_CASLH, - ARM64_INS_CASP, - ARM64_INS_CASPA, - ARM64_INS_CASPAL, - ARM64_INS_CASPL, - ARM64_INS_CBNZ, - ARM64_INS_CBZ, - ARM64_INS_CCMN, - ARM64_INS_CCMP, - ARM64_INS_CDOT, - ARM64_INS_CFINV, - ARM64_INS_CINC, - ARM64_INS_CINV, - ARM64_INS_CLASTA, - ARM64_INS_CLASTB, - ARM64_INS_CLREX, - ARM64_INS_CLS, - ARM64_INS_CLZ, - ARM64_INS_CMEQ, - ARM64_INS_CMGE, - ARM64_INS_CMGT, - ARM64_INS_CMHI, - ARM64_INS_CMHS, - ARM64_INS_CMLA, - ARM64_INS_CMLE, - ARM64_INS_CMLO, - ARM64_INS_CMLS, - ARM64_INS_CMLT, - ARM64_INS_CMN, - ARM64_INS_CMP, - ARM64_INS_CMPEQ, - ARM64_INS_CMPGE, - ARM64_INS_CMPGT, - ARM64_INS_CMPHI, - ARM64_INS_CMPHS, - ARM64_INS_CMPLE, - ARM64_INS_CMPLO, - ARM64_INS_CMPLS, - ARM64_INS_CMPLT, - ARM64_INS_CMPNE, - ARM64_INS_CMPP, - ARM64_INS_CMTST, - ARM64_INS_CNEG, - ARM64_INS_CNOT, - ARM64_INS_CNT, - ARM64_INS_CNTB, - ARM64_INS_CNTD, - ARM64_INS_CNTH, - ARM64_INS_CNTP, - ARM64_INS_CNTW, - ARM64_INS_COMPACT, - ARM64_INS_CPY, - ARM64_INS_CPYE, - ARM64_INS_CPYEN, - ARM64_INS_CPYERN, - ARM64_INS_CPYERT, - ARM64_INS_CPYERTN, - ARM64_INS_CPYERTRN, - ARM64_INS_CPYERTWN, - ARM64_INS_CPYET, - ARM64_INS_CPYETN, - ARM64_INS_CPYETRN, - ARM64_INS_CPYETWN, - ARM64_INS_CPYEWN, - ARM64_INS_CPYEWT, - ARM64_INS_CPYEWTN, - ARM64_INS_CPYEWTRN, - ARM64_INS_CPYEWTWN, - ARM64_INS_CPYFE, - ARM64_INS_CPYFEN, - ARM64_INS_CPYFERN, - ARM64_INS_CPYFERT, - ARM64_INS_CPYFERTN, - ARM64_INS_CPYFERTRN, - ARM64_INS_CPYFERTWN, - ARM64_INS_CPYFET, - ARM64_INS_CPYFETN, - ARM64_INS_CPYFETRN, - ARM64_INS_CPYFETWN, - ARM64_INS_CPYFEWN, - ARM64_INS_CPYFEWT, - ARM64_INS_CPYFEWTN, - ARM64_INS_CPYFEWTRN, - ARM64_INS_CPYFEWTWN, - ARM64_INS_CPYFM, - ARM64_INS_CPYFMN, - ARM64_INS_CPYFMRN, - ARM64_INS_CPYFMRT, - ARM64_INS_CPYFMRTN, - ARM64_INS_CPYFMRTRN, - ARM64_INS_CPYFMRTWN, - ARM64_INS_CPYFMT, - ARM64_INS_CPYFMTN, - ARM64_INS_CPYFMTRN, - ARM64_INS_CPYFMTWN, - ARM64_INS_CPYFMWN, - ARM64_INS_CPYFMWT, - ARM64_INS_CPYFMWTN, - ARM64_INS_CPYFMWTRN, - ARM64_INS_CPYFMWTWN, - ARM64_INS_CPYFP, - ARM64_INS_CPYFPN, - ARM64_INS_CPYFPRN, - ARM64_INS_CPYFPRT, - ARM64_INS_CPYFPRTN, - ARM64_INS_CPYFPRTRN, - ARM64_INS_CPYFPRTWN, - ARM64_INS_CPYFPT, - ARM64_INS_CPYFPTN, - ARM64_INS_CPYFPTRN, - ARM64_INS_CPYFPTWN, - ARM64_INS_CPYFPWN, - ARM64_INS_CPYFPWT, - ARM64_INS_CPYFPWTN, - ARM64_INS_CPYFPWTRN, - ARM64_INS_CPYFPWTWN, - ARM64_INS_CPYM, - ARM64_INS_CPYMN, - ARM64_INS_CPYMRN, - ARM64_INS_CPYMRT, - ARM64_INS_CPYMRTN, - ARM64_INS_CPYMRTRN, - ARM64_INS_CPYMRTWN, - ARM64_INS_CPYMT, - ARM64_INS_CPYMTN, - ARM64_INS_CPYMTRN, - ARM64_INS_CPYMTWN, - ARM64_INS_CPYMWN, - ARM64_INS_CPYMWT, - ARM64_INS_CPYMWTN, - ARM64_INS_CPYMWTRN, - ARM64_INS_CPYMWTWN, - ARM64_INS_CPYP, - ARM64_INS_CPYPN, - ARM64_INS_CPYPRN, - ARM64_INS_CPYPRT, - ARM64_INS_CPYPRTN, - ARM64_INS_CPYPRTRN, - ARM64_INS_CPYPRTWN, - ARM64_INS_CPYPT, - ARM64_INS_CPYPTN, - ARM64_INS_CPYPTRN, - ARM64_INS_CPYPTWN, - ARM64_INS_CPYPWN, - ARM64_INS_CPYPWT, - ARM64_INS_CPYPWTN, - ARM64_INS_CPYPWTRN, - ARM64_INS_CPYPWTWN, - ARM64_INS_CRC32B, - ARM64_INS_CRC32CB, - ARM64_INS_CRC32CH, - ARM64_INS_CRC32CW, - ARM64_INS_CRC32CX, - ARM64_INS_CRC32H, - ARM64_INS_CRC32W, - ARM64_INS_CRC32X, - ARM64_INS_CSDB, - ARM64_INS_CSEL, - ARM64_INS_CSET, - ARM64_INS_CSETM, - ARM64_INS_CSINC, - ARM64_INS_CSINV, - ARM64_INS_CSNEG, - ARM64_INS_CTERMEQ, - ARM64_INS_CTERMNE, - ARM64_INS_DCPS1, - ARM64_INS_DCPS2, - ARM64_INS_DCPS3, - ARM64_INS_DECB, - ARM64_INS_DECD, - ARM64_INS_DECH, - ARM64_INS_DECP, - ARM64_INS_DECW, - ARM64_INS_DFB, - ARM64_INS_DGH, - ARM64_INS_DMB, - ARM64_INS_DRPS, - ARM64_INS_DSB, - ARM64_INS_DUP, - ARM64_INS_DUPM, - ARM64_INS_EON, - ARM64_INS_EOR, - ARM64_INS_EOR3, - ARM64_INS_EORBT, - ARM64_INS_EORS, - ARM64_INS_EORTB, - ARM64_INS_EORV, - ARM64_INS_ERET, - ARM64_INS_ERETAA, - ARM64_INS_ERETAB, - ARM64_INS_ESB, - ARM64_INS_EXT, - ARM64_INS_EXTR, - ARM64_INS_FABD, - ARM64_INS_FABS, - ARM64_INS_FACGE, - ARM64_INS_FACGT, - ARM64_INS_FACLE, - ARM64_INS_FACLT, - ARM64_INS_FADD, - ARM64_INS_FADDA, - ARM64_INS_FADDP, - ARM64_INS_FADDV, - ARM64_INS_FCADD, - ARM64_INS_FCCMP, - ARM64_INS_FCCMPE, - ARM64_INS_FCMEQ, - ARM64_INS_FCMGE, - ARM64_INS_FCMGT, - ARM64_INS_FCMLA, - ARM64_INS_FCMLE, - ARM64_INS_FCMLT, - ARM64_INS_FCMNE, - ARM64_INS_FCMP, - ARM64_INS_FCMPE, - ARM64_INS_FCMUO, - ARM64_INS_FCPY, - ARM64_INS_FCSEL, - ARM64_INS_FCVT, - ARM64_INS_FCVTAS, - ARM64_INS_FCVTAU, - ARM64_INS_FCVTL, - ARM64_INS_FCVTL2, - ARM64_INS_FCVTLT, - ARM64_INS_FCVTMS, - ARM64_INS_FCVTMU, - ARM64_INS_FCVTN, - ARM64_INS_FCVTN2, - ARM64_INS_FCVTNS, - ARM64_INS_FCVTNT, - ARM64_INS_FCVTNU, - ARM64_INS_FCVTPS, - ARM64_INS_FCVTPU, - ARM64_INS_FCVTX, - ARM64_INS_FCVTXN, - ARM64_INS_FCVTXN2, - ARM64_INS_FCVTXNT, - ARM64_INS_FCVTZS, - ARM64_INS_FCVTZU, - ARM64_INS_FDIV, - ARM64_INS_FDIVR, - ARM64_INS_FDUP, - ARM64_INS_FEXPA, - ARM64_INS_FJCVTZS, - ARM64_INS_FLOGB, - ARM64_INS_FMAD, - ARM64_INS_FMADD, - ARM64_INS_FMAX, - ARM64_INS_FMAXNM, - ARM64_INS_FMAXNMP, - ARM64_INS_FMAXNMV, - ARM64_INS_FMAXP, - ARM64_INS_FMAXV, - ARM64_INS_FMIN, - ARM64_INS_FMINNM, - ARM64_INS_FMINNMP, - ARM64_INS_FMINNMV, - ARM64_INS_FMINP, - ARM64_INS_FMINV, - ARM64_INS_FMLA, - ARM64_INS_FMLAL, - ARM64_INS_FMLAL2, - ARM64_INS_FMLALB, - ARM64_INS_FMLALT, - ARM64_INS_FMLS, - ARM64_INS_FMLSL, - ARM64_INS_FMLSL2, - ARM64_INS_FMLSLB, - ARM64_INS_FMLSLT, - ARM64_INS_FMMLA, - ARM64_INS_FMOPA, - ARM64_INS_FMOPS, - ARM64_INS_FMOV, - ARM64_INS_FMSB, - ARM64_INS_FMSUB, - ARM64_INS_FMUL, - ARM64_INS_FMULX, - ARM64_INS_FNEG, - ARM64_INS_FNMAD, - ARM64_INS_FNMADD, - ARM64_INS_FNMLA, - ARM64_INS_FNMLS, - ARM64_INS_FNMSB, - ARM64_INS_FNMSUB, - ARM64_INS_FNMUL, - ARM64_INS_FRECPE, - ARM64_INS_FRECPS, - ARM64_INS_FRECPX, - ARM64_INS_FRINT32X, - ARM64_INS_FRINT32Z, - ARM64_INS_FRINT64X, - ARM64_INS_FRINT64Z, - ARM64_INS_FRINTA, - ARM64_INS_FRINTI, - ARM64_INS_FRINTM, - ARM64_INS_FRINTN, - ARM64_INS_FRINTP, - ARM64_INS_FRINTX, - ARM64_INS_FRINTZ, - ARM64_INS_FRSQRTE, - ARM64_INS_FRSQRTS, - ARM64_INS_FSCALE, - ARM64_INS_FSQRT, - ARM64_INS_FSUB, - ARM64_INS_FSUBR, - ARM64_INS_FTMAD, - ARM64_INS_FTSMUL, - ARM64_INS_FTSSEL, - ARM64_INS_GMI, - ARM64_INS_HINT, - ARM64_INS_HISTCNT, - ARM64_INS_HISTSEG, - ARM64_INS_HLT, - ARM64_INS_HVC, - ARM64_INS_INCB, - ARM64_INS_INCD, - ARM64_INS_INCH, - ARM64_INS_INCP, - ARM64_INS_INCW, - ARM64_INS_INDEX, - ARM64_INS_INS, - ARM64_INS_INSR, - ARM64_INS_IRG, - ARM64_INS_ISB, - ARM64_INS_LASTA, - ARM64_INS_LASTB, - ARM64_INS_LD1, - ARM64_INS_LD1B, - ARM64_INS_LD1D, - ARM64_INS_LD1H, - ARM64_INS_LD1Q, - ARM64_INS_LD1R, - ARM64_INS_LD1RB, - ARM64_INS_LD1RD, - ARM64_INS_LD1RH, - ARM64_INS_LD1ROB, - ARM64_INS_LD1ROD, - ARM64_INS_LD1ROH, - ARM64_INS_LD1ROW, - ARM64_INS_LD1RQB, - ARM64_INS_LD1RQD, - ARM64_INS_LD1RQH, - ARM64_INS_LD1RQW, - ARM64_INS_LD1RSB, - ARM64_INS_LD1RSH, - ARM64_INS_LD1RSW, - ARM64_INS_LD1RW, - ARM64_INS_LD1SB, - ARM64_INS_LD1SH, - ARM64_INS_LD1SW, - ARM64_INS_LD1W, - ARM64_INS_LD2, - ARM64_INS_LD2B, - ARM64_INS_LD2D, - ARM64_INS_LD2H, - ARM64_INS_LD2R, - ARM64_INS_LD2W, - ARM64_INS_LD3, - ARM64_INS_LD3B, - ARM64_INS_LD3D, - ARM64_INS_LD3H, - ARM64_INS_LD3R, - ARM64_INS_LD3W, - ARM64_INS_LD4, - ARM64_INS_LD4B, - ARM64_INS_LD4D, - ARM64_INS_LD4H, - ARM64_INS_LD4R, - ARM64_INS_LD4W, - ARM64_INS_LD64B, - ARM64_INS_LDADD, - ARM64_INS_LDADDA, - ARM64_INS_LDADDAB, - ARM64_INS_LDADDAH, - ARM64_INS_LDADDAL, - ARM64_INS_LDADDALB, - ARM64_INS_LDADDALH, - ARM64_INS_LDADDB, - ARM64_INS_LDADDH, - ARM64_INS_LDADDL, - ARM64_INS_LDADDLB, - ARM64_INS_LDADDLH, - ARM64_INS_LDAPR, - ARM64_INS_LDAPRB, - ARM64_INS_LDAPRH, - ARM64_INS_LDAPUR, - ARM64_INS_LDAPURB, - ARM64_INS_LDAPURH, - ARM64_INS_LDAPURSB, - ARM64_INS_LDAPURSH, - ARM64_INS_LDAPURSW, - ARM64_INS_LDAR, - ARM64_INS_LDARB, - ARM64_INS_LDARH, - ARM64_INS_LDAXP, - ARM64_INS_LDAXR, - ARM64_INS_LDAXRB, - ARM64_INS_LDAXRH, - ARM64_INS_LDCLR, - ARM64_INS_LDCLRA, - ARM64_INS_LDCLRAB, - ARM64_INS_LDCLRAH, - ARM64_INS_LDCLRAL, - ARM64_INS_LDCLRALB, - ARM64_INS_LDCLRALH, - ARM64_INS_LDCLRB, - ARM64_INS_LDCLRH, - ARM64_INS_LDCLRL, - ARM64_INS_LDCLRLB, - ARM64_INS_LDCLRLH, - ARM64_INS_LDEOR, - ARM64_INS_LDEORA, - ARM64_INS_LDEORAB, - ARM64_INS_LDEORAH, - ARM64_INS_LDEORAL, - ARM64_INS_LDEORALB, - ARM64_INS_LDEORALH, - ARM64_INS_LDEORB, - ARM64_INS_LDEORH, - ARM64_INS_LDEORL, - ARM64_INS_LDEORLB, - ARM64_INS_LDEORLH, - ARM64_INS_LDFF1B, - ARM64_INS_LDFF1D, - ARM64_INS_LDFF1H, - ARM64_INS_LDFF1SB, - ARM64_INS_LDFF1SH, - ARM64_INS_LDFF1SW, - ARM64_INS_LDFF1W, - ARM64_INS_LDG, - ARM64_INS_LDGM, - ARM64_INS_LDLAR, - ARM64_INS_LDLARB, - ARM64_INS_LDLARH, - ARM64_INS_LDNF1B, - ARM64_INS_LDNF1D, - ARM64_INS_LDNF1H, - ARM64_INS_LDNF1SB, - ARM64_INS_LDNF1SH, - ARM64_INS_LDNF1SW, - ARM64_INS_LDNF1W, - ARM64_INS_LDNP, - ARM64_INS_LDNT1B, - ARM64_INS_LDNT1D, - ARM64_INS_LDNT1H, - ARM64_INS_LDNT1SB, - ARM64_INS_LDNT1SH, - ARM64_INS_LDNT1SW, - ARM64_INS_LDNT1W, - ARM64_INS_LDP, - ARM64_INS_LDPSW, - ARM64_INS_LDR, - ARM64_INS_LDRAA, - ARM64_INS_LDRAB, - ARM64_INS_LDRB, - ARM64_INS_LDRH, - ARM64_INS_LDRSB, - ARM64_INS_LDRSH, - ARM64_INS_LDRSW, - ARM64_INS_LDSET, - ARM64_INS_LDSETA, - ARM64_INS_LDSETAB, - ARM64_INS_LDSETAH, - ARM64_INS_LDSETAL, - ARM64_INS_LDSETALB, - ARM64_INS_LDSETALH, - ARM64_INS_LDSETB, - ARM64_INS_LDSETH, - ARM64_INS_LDSETL, - ARM64_INS_LDSETLB, - ARM64_INS_LDSETLH, - ARM64_INS_LDSMAX, - ARM64_INS_LDSMAXA, - ARM64_INS_LDSMAXAB, - ARM64_INS_LDSMAXAH, - ARM64_INS_LDSMAXAL, - ARM64_INS_LDSMAXALB, - ARM64_INS_LDSMAXALH, - ARM64_INS_LDSMAXB, - ARM64_INS_LDSMAXH, - ARM64_INS_LDSMAXL, - ARM64_INS_LDSMAXLB, - ARM64_INS_LDSMAXLH, - ARM64_INS_LDSMIN, - ARM64_INS_LDSMINA, - ARM64_INS_LDSMINAB, - ARM64_INS_LDSMINAH, - ARM64_INS_LDSMINAL, - ARM64_INS_LDSMINALB, - ARM64_INS_LDSMINALH, - ARM64_INS_LDSMINB, - ARM64_INS_LDSMINH, - ARM64_INS_LDSMINL, - ARM64_INS_LDSMINLB, - ARM64_INS_LDSMINLH, - ARM64_INS_LDTR, - ARM64_INS_LDTRB, - ARM64_INS_LDTRH, - ARM64_INS_LDTRSB, - ARM64_INS_LDTRSH, - ARM64_INS_LDTRSW, - ARM64_INS_LDUMAX, - ARM64_INS_LDUMAXA, - ARM64_INS_LDUMAXAB, - ARM64_INS_LDUMAXAH, - ARM64_INS_LDUMAXAL, - ARM64_INS_LDUMAXALB, - ARM64_INS_LDUMAXALH, - ARM64_INS_LDUMAXB, - ARM64_INS_LDUMAXH, - ARM64_INS_LDUMAXL, - ARM64_INS_LDUMAXLB, - ARM64_INS_LDUMAXLH, - ARM64_INS_LDUMIN, - ARM64_INS_LDUMINA, - ARM64_INS_LDUMINAB, - ARM64_INS_LDUMINAH, - ARM64_INS_LDUMINAL, - ARM64_INS_LDUMINALB, - ARM64_INS_LDUMINALH, - ARM64_INS_LDUMINB, - ARM64_INS_LDUMINH, - ARM64_INS_LDUMINL, - ARM64_INS_LDUMINLB, - ARM64_INS_LDUMINLH, - ARM64_INS_LDUR, - ARM64_INS_LDURB, - ARM64_INS_LDURH, - ARM64_INS_LDURSB, - ARM64_INS_LDURSH, - ARM64_INS_LDURSW, - ARM64_INS_LDXP, - ARM64_INS_LDXR, - ARM64_INS_LDXRB, - ARM64_INS_LDXRH, - ARM64_INS_LSL, - ARM64_INS_LSLR, - ARM64_INS_LSLV, - ARM64_INS_LSR, - ARM64_INS_LSRR, - ARM64_INS_LSRV, - ARM64_INS_MAD, - ARM64_INS_MADD, - ARM64_INS_MATCH, - ARM64_INS_MLA, - ARM64_INS_MLS, - ARM64_INS_MNEG, - ARM64_INS_MOV, - ARM64_INS_MOVA, - ARM64_INS_MOVI, - ARM64_INS_MOVK, - ARM64_INS_MOVN, - ARM64_INS_MOVPRFX, - ARM64_INS_MOVS, - ARM64_INS_MOVZ, - ARM64_INS_MRS, - ARM64_INS_MSB, - ARM64_INS_MSR, - ARM64_INS_MSUB, - ARM64_INS_MUL, - ARM64_INS_MVN, - ARM64_INS_MVNI, - ARM64_INS_NAND, - ARM64_INS_NANDS, - ARM64_INS_NBSL, - ARM64_INS_NEG, - ARM64_INS_NEGS, - ARM64_INS_NGC, - ARM64_INS_NGCS, - ARM64_INS_NMATCH, - ARM64_INS_NOP, - ARM64_INS_NOR, - ARM64_INS_NORS, - ARM64_INS_NOT, - ARM64_INS_NOTS, - ARM64_INS_ORN, - ARM64_INS_ORNS, - ARM64_INS_ORR, - ARM64_INS_ORRS, - ARM64_INS_ORV, - ARM64_INS_PACDA, - ARM64_INS_PACDB, - ARM64_INS_PACDZA, - ARM64_INS_PACDZB, - ARM64_INS_PACGA, - ARM64_INS_PACIA, - ARM64_INS_PACIA1716, - ARM64_INS_PACIASP, - ARM64_INS_PACIAZ, - ARM64_INS_PACIB, - ARM64_INS_PACIB1716, - ARM64_INS_PACIBSP, - ARM64_INS_PACIBZ, - ARM64_INS_PACIZA, - ARM64_INS_PACIZB, - ARM64_INS_PFALSE, - ARM64_INS_PFIRST, - ARM64_INS_PMUL, - ARM64_INS_PMULL, - ARM64_INS_PMULL2, - ARM64_INS_PMULLB, - ARM64_INS_PMULLT, - ARM64_INS_PNEXT, - ARM64_INS_PRFB, - ARM64_INS_PRFD, - ARM64_INS_PRFH, - ARM64_INS_PRFM, - ARM64_INS_PRFUM, - ARM64_INS_PRFW, - ARM64_INS_PSB, - ARM64_INS_PSEL, - ARM64_INS_PSSBB, - ARM64_INS_PTEST, - ARM64_INS_PTRUE, - ARM64_INS_PTRUES, - ARM64_INS_PUNPKHI, - ARM64_INS_PUNPKLO, - ARM64_INS_RADDHN, - ARM64_INS_RADDHN2, - ARM64_INS_RADDHNB, - ARM64_INS_RADDHNT, - ARM64_INS_RAX1, - ARM64_INS_RBIT, - ARM64_INS_RDFFR, - ARM64_INS_RDFFRS, - ARM64_INS_RDVL, - ARM64_INS_RET, - ARM64_INS_RETAA, - ARM64_INS_RETAB, - ARM64_INS_REV, - ARM64_INS_REV16, - ARM64_INS_REV32, - ARM64_INS_REV64, - ARM64_INS_REVB, - ARM64_INS_REVD, - ARM64_INS_REVH, - ARM64_INS_REVW, - ARM64_INS_RMIF, - ARM64_INS_ROR, - ARM64_INS_RORV, - ARM64_INS_RSHRN, - ARM64_INS_RSHRN2, - ARM64_INS_RSHRNB, - ARM64_INS_RSHRNT, - ARM64_INS_RSUBHN, - ARM64_INS_RSUBHN2, - ARM64_INS_RSUBHNB, - ARM64_INS_RSUBHNT, - ARM64_INS_SABA, - ARM64_INS_SABAL, - ARM64_INS_SABAL2, - ARM64_INS_SABALB, - ARM64_INS_SABALT, - ARM64_INS_SABD, - ARM64_INS_SABDL, - ARM64_INS_SABDL2, - ARM64_INS_SABDLB, - ARM64_INS_SABDLT, - ARM64_INS_SADALP, - ARM64_INS_SADDL, - ARM64_INS_SADDL2, - ARM64_INS_SADDLB, - ARM64_INS_SADDLBT, - ARM64_INS_SADDLP, - ARM64_INS_SADDLT, - ARM64_INS_SADDLV, - ARM64_INS_SADDV, - ARM64_INS_SADDW, - ARM64_INS_SADDW2, - ARM64_INS_SADDWB, - ARM64_INS_SADDWT, - ARM64_INS_SB, - ARM64_INS_SBC, - ARM64_INS_SBCLB, - ARM64_INS_SBCLT, - ARM64_INS_SBCS, - ARM64_INS_SBFM, - ARM64_INS_SCLAMP, - ARM64_INS_SCVTF, - ARM64_INS_SDIV, - ARM64_INS_SDIVR, - ARM64_INS_SDOT, - ARM64_INS_SEL, - ARM64_INS_SETE, - ARM64_INS_SETEN, - ARM64_INS_SETET, - ARM64_INS_SETETN, - ARM64_INS_SETF16, - ARM64_INS_SETF8, - ARM64_INS_SETFFR, - ARM64_INS_SETGE, - ARM64_INS_SETGEN, - ARM64_INS_SETGET, - ARM64_INS_SETGETN, - ARM64_INS_SETGM, - ARM64_INS_SETGMN, - ARM64_INS_SETGMT, - ARM64_INS_SETGMTN, - ARM64_INS_SETGP, - ARM64_INS_SETGPN, - ARM64_INS_SETGPT, - ARM64_INS_SETGPTN, - ARM64_INS_SETM, - ARM64_INS_SETMN, - ARM64_INS_SETMT, - ARM64_INS_SETMTN, - ARM64_INS_SETP, - ARM64_INS_SETPN, - ARM64_INS_SETPT, - ARM64_INS_SETPTN, - ARM64_INS_SEV, - ARM64_INS_SEVL, - ARM64_INS_SHA1C, - ARM64_INS_SHA1H, - ARM64_INS_SHA1M, - ARM64_INS_SHA1P, - ARM64_INS_SHA1SU0, - ARM64_INS_SHA1SU1, - ARM64_INS_SHA256H, - ARM64_INS_SHA256H2, - ARM64_INS_SHA256SU0, - ARM64_INS_SHA256SU1, - ARM64_INS_SHA512H, - ARM64_INS_SHA512H2, - ARM64_INS_SHA512SU0, - ARM64_INS_SHA512SU1, - ARM64_INS_SHADD, - ARM64_INS_SHL, - ARM64_INS_SHLL, - ARM64_INS_SHLL2, - ARM64_INS_SHRN, - ARM64_INS_SHRN2, - ARM64_INS_SHRNB, - ARM64_INS_SHRNT, - ARM64_INS_SHSUB, - ARM64_INS_SHSUBR, - ARM64_INS_SLI, - ARM64_INS_SM3PARTW1, - ARM64_INS_SM3PARTW2, - ARM64_INS_SM3SS1, - ARM64_INS_SM3TT1A, - ARM64_INS_SM3TT1B, - ARM64_INS_SM3TT2A, - ARM64_INS_SM3TT2B, - ARM64_INS_SM4E, - ARM64_INS_SM4EKEY, - ARM64_INS_SMADDL, - ARM64_INS_SMAX, - ARM64_INS_SMAXP, - ARM64_INS_SMAXV, - ARM64_INS_SMC, - ARM64_INS_SMIN, - ARM64_INS_SMINP, - ARM64_INS_SMINV, - ARM64_INS_SMLAL, - ARM64_INS_SMLAL2, - ARM64_INS_SMLALB, - ARM64_INS_SMLALT, - ARM64_INS_SMLSL, - ARM64_INS_SMLSL2, - ARM64_INS_SMLSLB, - ARM64_INS_SMLSLT, - ARM64_INS_SMMLA, - ARM64_INS_SMNEGL, - ARM64_INS_SMOPA, - ARM64_INS_SMOPS, - ARM64_INS_SMOV, - ARM64_INS_SMSTART, - ARM64_INS_SMSTOP, - ARM64_INS_SMSUBL, - ARM64_INS_SMULH, - ARM64_INS_SMULL, - ARM64_INS_SMULL2, - ARM64_INS_SMULLB, - ARM64_INS_SMULLT, - ARM64_INS_SPLICE, - ARM64_INS_SQABS, - ARM64_INS_SQADD, - ARM64_INS_SQCADD, - ARM64_INS_SQDECB, - ARM64_INS_SQDECD, - ARM64_INS_SQDECH, - ARM64_INS_SQDECP, - ARM64_INS_SQDECW, - ARM64_INS_SQDMLAL, - ARM64_INS_SQDMLAL2, - ARM64_INS_SQDMLALB, - ARM64_INS_SQDMLALBT, - ARM64_INS_SQDMLALT, - ARM64_INS_SQDMLSL, - ARM64_INS_SQDMLSL2, - ARM64_INS_SQDMLSLB, - ARM64_INS_SQDMLSLBT, - ARM64_INS_SQDMLSLT, - ARM64_INS_SQDMULH, - ARM64_INS_SQDMULL, - ARM64_INS_SQDMULL2, - ARM64_INS_SQDMULLB, - ARM64_INS_SQDMULLT, - ARM64_INS_SQINCB, - ARM64_INS_SQINCD, - ARM64_INS_SQINCH, - ARM64_INS_SQINCP, - ARM64_INS_SQINCW, - ARM64_INS_SQNEG, - ARM64_INS_SQRDCMLAH, - ARM64_INS_SQRDMLAH, - ARM64_INS_SQRDMLSH, - ARM64_INS_SQRDMULH, - ARM64_INS_SQRSHL, - ARM64_INS_SQRSHLR, - ARM64_INS_SQRSHRN, - ARM64_INS_SQRSHRN2, - ARM64_INS_SQRSHRNB, - ARM64_INS_SQRSHRNT, - ARM64_INS_SQRSHRUN, - ARM64_INS_SQRSHRUN2, - ARM64_INS_SQRSHRUNB, - ARM64_INS_SQRSHRUNT, - ARM64_INS_SQSHL, - ARM64_INS_SQSHLR, - ARM64_INS_SQSHLU, - ARM64_INS_SQSHRN, - ARM64_INS_SQSHRN2, - ARM64_INS_SQSHRNB, - ARM64_INS_SQSHRNT, - ARM64_INS_SQSHRUN, - ARM64_INS_SQSHRUN2, - ARM64_INS_SQSHRUNB, - ARM64_INS_SQSHRUNT, - ARM64_INS_SQSUB, - ARM64_INS_SQSUBR, - ARM64_INS_SQXTN, - ARM64_INS_SQXTN2, - ARM64_INS_SQXTNB, - ARM64_INS_SQXTNT, - ARM64_INS_SQXTUN, - ARM64_INS_SQXTUN2, - ARM64_INS_SQXTUNB, - ARM64_INS_SQXTUNT, - ARM64_INS_SRHADD, - ARM64_INS_SRI, - ARM64_INS_SRSHL, - ARM64_INS_SRSHLR, - ARM64_INS_SRSHR, - ARM64_INS_SRSRA, - ARM64_INS_SSBB, - ARM64_INS_SSHL, - ARM64_INS_SSHLL, - ARM64_INS_SSHLL2, - ARM64_INS_SSHLLB, - ARM64_INS_SSHLLT, - ARM64_INS_SSHR, - ARM64_INS_SSRA, - ARM64_INS_SSUBL, - ARM64_INS_SSUBL2, - ARM64_INS_SSUBLB, - ARM64_INS_SSUBLBT, - ARM64_INS_SSUBLT, - ARM64_INS_SSUBLTB, - ARM64_INS_SSUBW, - ARM64_INS_SSUBW2, - ARM64_INS_SSUBWB, - ARM64_INS_SSUBWT, - ARM64_INS_ST1, - ARM64_INS_ST1B, - ARM64_INS_ST1D, - ARM64_INS_ST1H, - ARM64_INS_ST1Q, - ARM64_INS_ST1W, - ARM64_INS_ST2, - ARM64_INS_ST2B, - ARM64_INS_ST2D, - ARM64_INS_ST2G, - ARM64_INS_ST2H, - ARM64_INS_ST2W, - ARM64_INS_ST3, - ARM64_INS_ST3B, - ARM64_INS_ST3D, - ARM64_INS_ST3H, - ARM64_INS_ST3W, - ARM64_INS_ST4, - ARM64_INS_ST4B, - ARM64_INS_ST4D, - ARM64_INS_ST4H, - ARM64_INS_ST4W, - ARM64_INS_ST64B, - ARM64_INS_ST64BV, - ARM64_INS_ST64BV0, - ARM64_INS_STADD, - ARM64_INS_STADDB, - ARM64_INS_STADDH, - ARM64_INS_STADDL, - ARM64_INS_STADDLB, - ARM64_INS_STADDLH, - ARM64_INS_STCLR, - ARM64_INS_STCLRB, - ARM64_INS_STCLRH, - ARM64_INS_STCLRL, - ARM64_INS_STCLRLB, - ARM64_INS_STCLRLH, - ARM64_INS_STEOR, - ARM64_INS_STEORB, - ARM64_INS_STEORH, - ARM64_INS_STEORL, - ARM64_INS_STEORLB, - ARM64_INS_STEORLH, - ARM64_INS_STG, - ARM64_INS_STGM, - ARM64_INS_STGP, - ARM64_INS_STLLR, - ARM64_INS_STLLRB, - ARM64_INS_STLLRH, - ARM64_INS_STLR, - ARM64_INS_STLRB, - ARM64_INS_STLRH, - ARM64_INS_STLUR, - ARM64_INS_STLURB, - ARM64_INS_STLURH, - ARM64_INS_STLXP, - ARM64_INS_STLXR, - ARM64_INS_STLXRB, - ARM64_INS_STLXRH, - ARM64_INS_STNP, - ARM64_INS_STNT1B, - ARM64_INS_STNT1D, - ARM64_INS_STNT1H, - ARM64_INS_STNT1W, - ARM64_INS_STP, - ARM64_INS_STR, - ARM64_INS_STRB, - ARM64_INS_STRH, - ARM64_INS_STSET, - ARM64_INS_STSETB, - ARM64_INS_STSETH, - ARM64_INS_STSETL, - ARM64_INS_STSETLB, - ARM64_INS_STSETLH, - ARM64_INS_STSMAX, - ARM64_INS_STSMAXB, - ARM64_INS_STSMAXH, - ARM64_INS_STSMAXL, - ARM64_INS_STSMAXLB, - ARM64_INS_STSMAXLH, - ARM64_INS_STSMIN, - ARM64_INS_STSMINB, - ARM64_INS_STSMINH, - ARM64_INS_STSMINL, - ARM64_INS_STSMINLB, - ARM64_INS_STSMINLH, - ARM64_INS_STTR, - ARM64_INS_STTRB, - ARM64_INS_STTRH, - ARM64_INS_STUMAX, - ARM64_INS_STUMAXB, - ARM64_INS_STUMAXH, - ARM64_INS_STUMAXL, - ARM64_INS_STUMAXLB, - ARM64_INS_STUMAXLH, - ARM64_INS_STUMIN, - ARM64_INS_STUMINB, - ARM64_INS_STUMINH, - ARM64_INS_STUMINL, - ARM64_INS_STUMINLB, - ARM64_INS_STUMINLH, - ARM64_INS_STUR, - ARM64_INS_STURB, - ARM64_INS_STURH, - ARM64_INS_STXP, - ARM64_INS_STXR, - ARM64_INS_STXRB, - ARM64_INS_STXRH, - ARM64_INS_STZ2G, - ARM64_INS_STZG, - ARM64_INS_STZGM, - ARM64_INS_SUB, - ARM64_INS_SUBG, - ARM64_INS_SUBHN, - ARM64_INS_SUBHN2, - ARM64_INS_SUBHNB, - ARM64_INS_SUBHNT, - ARM64_INS_SUBP, - ARM64_INS_SUBPS, - ARM64_INS_SUBR, - ARM64_INS_SUBS, - ARM64_INS_SUDOT, - ARM64_INS_SUMOPA, - ARM64_INS_SUMOPS, - ARM64_INS_SUNPKHI, - ARM64_INS_SUNPKLO, - ARM64_INS_SUQADD, - ARM64_INS_SVC, - ARM64_INS_SWP, - ARM64_INS_SWPA, - ARM64_INS_SWPAB, - ARM64_INS_SWPAH, - ARM64_INS_SWPAL, - ARM64_INS_SWPALB, - ARM64_INS_SWPALH, - ARM64_INS_SWPB, - ARM64_INS_SWPH, - ARM64_INS_SWPL, - ARM64_INS_SWPLB, - ARM64_INS_SWPLH, - ARM64_INS_SXTB, - ARM64_INS_SXTH, - ARM64_INS_SXTL, - ARM64_INS_SXTL2, - ARM64_INS_SXTW, - ARM64_INS_SYS, - ARM64_INS_SYSL, - ARM64_INS_TBL, - ARM64_INS_TBNZ, - ARM64_INS_TBX, - ARM64_INS_TBZ, - ARM64_INS_TCANCEL, - ARM64_INS_TCOMMIT, - ARM64_INS_TRN1, - ARM64_INS_TRN2, - ARM64_INS_TSB, - ARM64_INS_TST, - ARM64_INS_TSTART, - ARM64_INS_TTEST, - ARM64_INS_UABA, - ARM64_INS_UABAL, - ARM64_INS_UABAL2, - ARM64_INS_UABALB, - ARM64_INS_UABALT, - ARM64_INS_UABD, - ARM64_INS_UABDL, - ARM64_INS_UABDL2, - ARM64_INS_UABDLB, - ARM64_INS_UABDLT, - ARM64_INS_UADALP, - ARM64_INS_UADDL, - ARM64_INS_UADDL2, - ARM64_INS_UADDLB, - ARM64_INS_UADDLP, - ARM64_INS_UADDLT, - ARM64_INS_UADDLV, - ARM64_INS_UADDV, - ARM64_INS_UADDW, - ARM64_INS_UADDW2, - ARM64_INS_UADDWB, - ARM64_INS_UADDWT, - ARM64_INS_UBFM, - ARM64_INS_UCLAMP, - ARM64_INS_UCVTF, - ARM64_INS_UDF, - ARM64_INS_UDIV, - ARM64_INS_UDIVR, - ARM64_INS_UDOT, - ARM64_INS_UHADD, - ARM64_INS_UHSUB, - ARM64_INS_UHSUBR, - ARM64_INS_UMADDL, - ARM64_INS_UMAX, - ARM64_INS_UMAXP, - ARM64_INS_UMAXV, - ARM64_INS_UMIN, - ARM64_INS_UMINP, - ARM64_INS_UMINV, - ARM64_INS_UMLAL, - ARM64_INS_UMLAL2, - ARM64_INS_UMLALB, - ARM64_INS_UMLALT, - ARM64_INS_UMLSL, - ARM64_INS_UMLSL2, - ARM64_INS_UMLSLB, - ARM64_INS_UMLSLT, - ARM64_INS_UMMLA, - ARM64_INS_UMNEGL, - ARM64_INS_UMOPA, - ARM64_INS_UMOPS, - ARM64_INS_UMOV, - ARM64_INS_UMSUBL, - ARM64_INS_UMULH, - ARM64_INS_UMULL, - ARM64_INS_UMULL2, - ARM64_INS_UMULLB, - ARM64_INS_UMULLT, - ARM64_INS_UQADD, - ARM64_INS_UQDECB, - ARM64_INS_UQDECD, - ARM64_INS_UQDECH, - ARM64_INS_UQDECP, - ARM64_INS_UQDECW, - ARM64_INS_UQINCB, - ARM64_INS_UQINCD, - ARM64_INS_UQINCH, - ARM64_INS_UQINCP, - ARM64_INS_UQINCW, - ARM64_INS_UQRSHL, - ARM64_INS_UQRSHLR, - ARM64_INS_UQRSHRN, - ARM64_INS_UQRSHRN2, - ARM64_INS_UQRSHRNB, - ARM64_INS_UQRSHRNT, - ARM64_INS_UQSHL, - ARM64_INS_UQSHLR, - ARM64_INS_UQSHRN, - ARM64_INS_UQSHRN2, - ARM64_INS_UQSHRNB, - ARM64_INS_UQSHRNT, - ARM64_INS_UQSUB, - ARM64_INS_UQSUBR, - ARM64_INS_UQXTN, - ARM64_INS_UQXTN2, - ARM64_INS_UQXTNB, - ARM64_INS_UQXTNT, - ARM64_INS_URECPE, - ARM64_INS_URHADD, - ARM64_INS_URSHL, - ARM64_INS_URSHLR, - ARM64_INS_URSHR, - ARM64_INS_URSQRTE, - ARM64_INS_URSRA, - ARM64_INS_USDOT, - ARM64_INS_USHL, - ARM64_INS_USHLL, - ARM64_INS_USHLL2, - ARM64_INS_USHLLB, - ARM64_INS_USHLLT, - ARM64_INS_USHR, - ARM64_INS_USMMLA, - ARM64_INS_USMOPA, - ARM64_INS_USMOPS, - ARM64_INS_USQADD, - ARM64_INS_USRA, - ARM64_INS_USUBL, - ARM64_INS_USUBL2, - ARM64_INS_USUBLB, - ARM64_INS_USUBLT, - ARM64_INS_USUBW, - ARM64_INS_USUBW2, - ARM64_INS_USUBWB, - ARM64_INS_USUBWT, - ARM64_INS_UUNPKHI, - ARM64_INS_UUNPKLO, - ARM64_INS_UXTB, - ARM64_INS_UXTH, - ARM64_INS_UXTL, - ARM64_INS_UXTL2, - ARM64_INS_UXTW, - ARM64_INS_UZP1, - ARM64_INS_UZP2, - ARM64_INS_WFE, - ARM64_INS_WFET, - ARM64_INS_WFI, - ARM64_INS_WFIT, - ARM64_INS_WHILEGE, - ARM64_INS_WHILEGT, - ARM64_INS_WHILEHI, - ARM64_INS_WHILEHS, - ARM64_INS_WHILELE, - ARM64_INS_WHILELO, - ARM64_INS_WHILELS, - ARM64_INS_WHILELT, - ARM64_INS_WHILERW, - ARM64_INS_WHILEWR, - ARM64_INS_WRFFR, - ARM64_INS_XAFLAG, - ARM64_INS_XAR, - ARM64_INS_XPACD, - ARM64_INS_XPACI, - ARM64_INS_XPACLRI, - ARM64_INS_XTN, - ARM64_INS_XTN2, - ARM64_INS_YIELD, - ARM64_INS_ZERO, - ARM64_INS_ZIP1, - ARM64_INS_ZIP2, - - // alias insn - ARM64_INS_SBFIZ, - ARM64_INS_UBFIZ, - ARM64_INS_SBFX, - ARM64_INS_UBFX, - ARM64_INS_BFI, - ARM64_INS_BFXIL, - ARM64_INS_IC, - ARM64_INS_DC, - ARM64_INS_AT, - ARM64_INS_TLBI, - - ARM64_INS_ENDING, // <-- mark the end of the list of insn -} arm64_insn; - -/// Group of ARM64 instructions -typedef enum arm64_insn_group { - ARM64_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - ARM64_GRP_JUMP, ///< = CS_GRP_JUMP - ARM64_GRP_CALL, - ARM64_GRP_RET, - ARM64_GRP_INT, - ARM64_GRP_PRIVILEGE = 6, ///< = CS_GRP_PRIVILEGE - ARM64_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE - ARM64_GRP_PAC, - - // Architecture-specific groups - ARM64_GRP_CRYPTO = 128, - ARM64_GRP_FPARMV8, - ARM64_GRP_NEON, - ARM64_GRP_CRC, - ARM64_GRP_AES, - ARM64_GRP_DOTPROD, - ARM64_GRP_FULLFP16, - ARM64_GRP_LSE, - ARM64_GRP_RCPC, - ARM64_GRP_RDM, - ARM64_GRP_SHA2, - ARM64_GRP_SHA3, - ARM64_GRP_SM4, - ARM64_GRP_SVE, - ARM64_GRP_SVE2, - ARM64_GRP_SVE2AES, - ARM64_GRP_SVE2BitPerm, - ARM64_GRP_SVE2SHA3, - ARM64_GRP_SVE2SM4, - ARM64_GRP_SME, - ARM64_GRP_SMEF64, - ARM64_GRP_SMEI64, - ARM64_GRP_MatMulFP32, - ARM64_GRP_MatMulFP64, - ARM64_GRP_MatMulInt8, - ARM64_GRP_V8_1A, - ARM64_GRP_V8_3A, - ARM64_GRP_V8_4A, - - ARM64_GRP_ENDING, // <-- mark the end of the list of groups -} arm64_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/bpf.h b/.tools/python-revlibs/capstone/include/capstone/bpf.h deleted file mode 100644 index 5a5c927..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/bpf.h +++ /dev/null @@ -1,209 +0,0 @@ -/* Capstone Disassembly Engine */ -/* BPF Backend by david942j , 2019 */ - -#ifndef CAPSTONE_BPF_H -#define CAPSTONE_BPF_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// Operand type for instruction's operands -typedef enum bpf_op_type { - BPF_OP_INVALID = 0, - - BPF_OP_REG, - BPF_OP_IMM, - BPF_OP_OFF, - BPF_OP_MEM, - BPF_OP_MMEM, ///< M[k] in cBPF - BPF_OP_MSH, ///< corresponds to cBPF's BPF_MSH mode - BPF_OP_EXT, ///< cBPF's extension (not eBPF) -} bpf_op_type; - -/// BPF registers -typedef enum bpf_reg { - BPF_REG_INVALID = 0, - - ///< cBPF - BPF_REG_A, - BPF_REG_X, - - ///< eBPF - BPF_REG_R0, - BPF_REG_R1, - BPF_REG_R2, - BPF_REG_R3, - BPF_REG_R4, - BPF_REG_R5, - BPF_REG_R6, - BPF_REG_R7, - BPF_REG_R8, - BPF_REG_R9, - BPF_REG_R10, - - BPF_REG_ENDING, -} bpf_reg; - -/// Instruction's operand referring to memory -/// This is associated with BPF_OP_MEM operand type above -typedef struct bpf_op_mem { - bpf_reg base; ///< base register - uint32_t disp; ///< offset value -} bpf_op_mem; - -typedef enum bpf_ext_type { - BPF_EXT_INVALID = 0, - - BPF_EXT_LEN, -} bpf_ext_type; - -/// Instruction operand -typedef struct cs_bpf_op { - bpf_op_type type; - union { - uint8_t reg; ///< register value for REG operand - uint64_t imm; ///< immediate value IMM operand - uint32_t off; ///< offset value, used in jump & call - bpf_op_mem mem; ///< base/disp value for MEM operand - /* cBPF only */ - uint32_t mmem; ///< M[k] in cBPF - uint32_t msh; ///< corresponds to cBPF's BPF_MSH mode - uint32_t ext; ///< cBPF's extension (not eBPF) - }; - - /// How is this operand accessed? (READ, WRITE or READ|WRITE) - /// This field is combined of cs_ac_type. - /// NOTE: this field is irrelevant if engine is compiled in DIET mode. - uint8_t access; -} cs_bpf_op; - -/// Instruction structure -typedef struct cs_bpf { - uint8_t op_count; - cs_bpf_op operands[4]; -} cs_bpf; - -/// BPF instruction -typedef enum bpf_insn { - BPF_INS_INVALID = 0, - - ///< ALU - BPF_INS_ADD, - BPF_INS_SUB, - BPF_INS_MUL, - BPF_INS_DIV, - BPF_INS_OR, - BPF_INS_AND, - BPF_INS_LSH, - BPF_INS_RSH, - BPF_INS_NEG, - BPF_INS_MOD, - BPF_INS_XOR, - BPF_INS_MOV, ///< eBPF only - BPF_INS_ARSH, ///< eBPF only - - ///< ALU64, eBPF only - BPF_INS_ADD64, - BPF_INS_SUB64, - BPF_INS_MUL64, - BPF_INS_DIV64, - BPF_INS_OR64, - BPF_INS_AND64, - BPF_INS_LSH64, - BPF_INS_RSH64, - BPF_INS_NEG64, - BPF_INS_MOD64, - BPF_INS_XOR64, - BPF_INS_MOV64, - BPF_INS_ARSH64, - - ///< Byteswap, eBPF only - BPF_INS_LE16, - BPF_INS_LE32, - BPF_INS_LE64, - BPF_INS_BE16, - BPF_INS_BE32, - BPF_INS_BE64, - - ///< Load - BPF_INS_LDW, ///< eBPF only - BPF_INS_LDH, - BPF_INS_LDB, - BPF_INS_LDDW, ///< eBPF only: load 64-bit imm - BPF_INS_LDXW, ///< eBPF only - BPF_INS_LDXH, ///< eBPF only - BPF_INS_LDXB, ///< eBPF only - BPF_INS_LDXDW, ///< eBPF only - - ///< Store - BPF_INS_STW, ///< eBPF only - BPF_INS_STH, ///< eBPF only - BPF_INS_STB, ///< eBPF only - BPF_INS_STDW, ///< eBPF only - BPF_INS_STXW, ///< eBPF only - BPF_INS_STXH, ///< eBPF only - BPF_INS_STXB, ///< eBPF only - BPF_INS_STXDW, ///< eBPF only - BPF_INS_XADDW, ///< eBPF only - BPF_INS_XADDDW, ///< eBPF only - - ///< Jump - BPF_INS_JMP, - BPF_INS_JEQ, - BPF_INS_JGT, - BPF_INS_JGE, - BPF_INS_JSET, - BPF_INS_JNE, ///< eBPF only - BPF_INS_JSGT, ///< eBPF only - BPF_INS_JSGE, ///< eBPF only - BPF_INS_CALL, ///< eBPF only - BPF_INS_CALLX, ///< eBPF only - BPF_INS_EXIT, ///< eBPF only - BPF_INS_JLT, ///< eBPF only - BPF_INS_JLE, ///< eBPF only - BPF_INS_JSLT, ///< eBPF only - BPF_INS_JSLE, ///< eBPF only - - ///< Return, cBPF only - BPF_INS_RET, - - ///< Misc, cBPF only - BPF_INS_TAX, - BPF_INS_TXA, - - BPF_INS_ENDING, - - // alias instructions - BPF_INS_LD = BPF_INS_LDW, ///< cBPF only - BPF_INS_LDX = BPF_INS_LDXW, ///< cBPF only - BPF_INS_ST = BPF_INS_STW, ///< cBPF only - BPF_INS_STX = BPF_INS_STXW, ///< cBPF only -} bpf_insn; - -/// Group of BPF instructions -typedef enum bpf_insn_group { - BPF_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - BPF_GRP_LOAD, - BPF_GRP_STORE, - BPF_GRP_ALU, - BPF_GRP_JUMP, - BPF_GRP_CALL, ///< eBPF only - BPF_GRP_RETURN, - BPF_GRP_MISC, ///< cBPF only - - BPF_GRP_ENDING, -} bpf_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/capstone.h b/.tools/python-revlibs/capstone/include/capstone/capstone.h deleted file mode 100644 index 79ab317..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/capstone.h +++ /dev/null @@ -1,890 +0,0 @@ -#ifndef CAPSTONE_ENGINE_H -#define CAPSTONE_ENGINE_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2016 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#if defined(CAPSTONE_HAS_OSXKERNEL) -#include -#else -#include -#include -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#pragma warning(disable:4100) -#define CAPSTONE_API __cdecl -#ifdef CAPSTONE_SHARED -#define CAPSTONE_EXPORT __declspec(dllexport) -#else // defined(CAPSTONE_STATIC) -#define CAPSTONE_EXPORT -#endif -#else -#define CAPSTONE_API -#if (defined(__GNUC__) || defined(__IBMC__)) && !defined(CAPSTONE_STATIC) -#define CAPSTONE_EXPORT __attribute__((visibility("default"))) -#else // defined(CAPSTONE_STATIC) -#define CAPSTONE_EXPORT -#endif -#endif - -#if (defined(__GNUC__) || defined(__IBMC__)) -#define CAPSTONE_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define CAPSTONE_DEPRECATED __declspec(deprecated) -#else -#pragma message("WARNING: You need to implement CAPSTONE_DEPRECATED for this compiler") -#define CAPSTONE_DEPRECATED -#endif - -// Capstone API version -#define CS_API_MAJOR 5 -#define CS_API_MINOR 0 - -// Version for bleeding edge code of the Github's "next" branch. -// Use this if you want the absolutely latest development code. -// This version number will be bumped up whenever we have a new major change. -#define CS_NEXT_VERSION 5 - -// Capstone package version -#define CS_VERSION_MAJOR CS_API_MAJOR -#define CS_VERSION_MINOR CS_API_MINOR -#define CS_VERSION_EXTRA 9 - -// Pre-release identifier. -// A stable release. -#define CS_VERSION_STABLE 0xffff - -// The postfix version: Alpha1, Alpha2, ..., Beta1, ... -#define CS_VERSION_ALPHA 0xa000 -#define CS_VERSION_ALPHA9 (CS_VERSION_ALPHA | 9) - -#define CS_VERSION_BETA 0xb000 -#define CS_VERSION_BETA1 (CS_VERSION_BETA | 1) - -// The identifier of a pre-release (Alpha, Beta, ...). -// It is set to CS_VERSION_STABLE, if this code is part of a stable release. -#define CS_VERSION_PRE_RELEASE CS_VERSION_STABLE - -/// Macro for meta programming. -/// Meant for projects using Capstone and need to support multiple -/// versions of it. -/// These macros replace several instances of the old "ARM64" with -/// the new "AArch64" name depending on the CS version. -#if CS_NEXT_VERSION < 6 -#define CS_AARCH64(x) ARM64##x -#else -#define CS_AARCH64(x) AArch64##x -#endif - -#if CS_NEXT_VERSION < 6 -#define CS_AARCH64pre(x) x##ARM64 -#else -#define CS_AARCH64pre(x) x##AARCH64 -#endif - -#if CS_NEXT_VERSION < 6 -#define CS_AARCH64CC(x) ARM64_CC##x -#else -#define CS_AARCH64CC(x) AArch64CC##x -#endif - -#if CS_NEXT_VERSION < 6 -#define CS_AARCH64_VL_(x) ARM64_VAS_##x -#else -#define CS_AARCH64_VL_(x) AArch64Layout_VL_##x -#endif - -#if CS_NEXT_VERSION < 6 -#define CS_aarch64_ arm64 -#else -#define CS_aarch64_ aarch64 -#endif - -#if CS_NEXT_VERSION < 6 -#define CS_aarch64(x) arm64##x -#else -#define CS_aarch64(x) aarch64##x -#endif - -#if CS_NEXT_VERSION < 6 -#define CS_aarch64_op() cs_arm64_op -#define CS_aarch64_reg() arm64_reg -#define CS_aarch64_cc() arm64_cc -#define CS_cs_aarch64() cs_arm64 -#define CS_aarch64_extender() arm64_extender -#define CS_aarch64_shifter() arm64_shifter -#define CS_aarch64_vas() arm64_vas -#else -#define CS_aarch64_op() cs_aarch64_op -#define CS_aarch64_reg() aarch64_reg -#define CS_aarch64_cc() AArch64CC_CondCode -#define CS_cs_aarch64() cs_aarch64 -#define CS_aarch64_extender() aarch64_extender -#define CS_aarch64_shifter() aarch64_shifter -#define CS_aarch64_vas() AArch64Layout_VectorLayout -#endif - -/// Macro to create combined version which can be compared to -/// result of cs_version() API. -#define CS_MAKE_VERSION(major, minor) ((major << 8) + minor) - -/// Maximum size of an instruction mnemonic string. -#define CS_MNEMONIC_SIZE 32 - -// Handle using with all API -typedef size_t csh; - -/// Architecture type -typedef enum cs_arch { - CS_ARCH_ARM = 0, ///< ARM architecture (including Thumb, Thumb-2) - CS_ARCH_ARM64, ///< ARM-64, also called AArch64 - CS_ARCH_MIPS, ///< Mips architecture - CS_ARCH_X86, ///< X86 architecture (including x86 & x86-64) - CS_ARCH_PPC, ///< PowerPC architecture - CS_ARCH_SPARC, ///< Sparc architecture - CS_ARCH_SYSZ, ///< SystemZ architecture - CS_ARCH_XCORE, ///< XCore architecture - CS_ARCH_M68K, ///< 68K architecture - CS_ARCH_TMS320C64X, ///< TMS320C64x architecture - CS_ARCH_M680X, ///< 680X architecture - CS_ARCH_EVM, ///< Ethereum architecture - CS_ARCH_MOS65XX, ///< MOS65XX architecture (including MOS6502) - CS_ARCH_WASM, ///< WebAssembly architecture - CS_ARCH_BPF, ///< Berkeley Packet Filter architecture (including eBPF) - CS_ARCH_RISCV, ///< RISCV architecture - CS_ARCH_SH, ///< SH architecture - CS_ARCH_TRICORE, ///< TriCore architecture - CS_ARCH_MAX, - CS_ARCH_ALL = 0xFFFF, // All architectures - for cs_support() -} cs_arch; - -// Support value to verify diet mode of the engine. -// If cs_support(CS_SUPPORT_DIET) return True, the engine was compiled -// in diet mode. -#define CS_SUPPORT_DIET (CS_ARCH_ALL + 1) - -// Support value to verify X86 reduce mode of the engine. -// If cs_support(CS_SUPPORT_X86_REDUCE) return True, the engine was compiled -// in X86 reduce mode. -#define CS_SUPPORT_X86_REDUCE (CS_ARCH_ALL + 2) - -/// Mode type -typedef enum cs_mode { - CS_MODE_LITTLE_ENDIAN = 0, ///< little-endian mode (default mode) - CS_MODE_ARM = 0, ///< 32-bit ARM - CS_MODE_16 = 1 << 1, ///< 16-bit mode (X86) - CS_MODE_32 = 1 << 2, ///< 32-bit mode (X86) - CS_MODE_64 = 1 << 3, ///< 64-bit mode (X86, PPC) - CS_MODE_THUMB = 1 << 4, ///< ARM's Thumb mode, including Thumb-2 - CS_MODE_MCLASS = 1 << 5, ///< ARM's Cortex-M series - CS_MODE_V8 = 1 << 6, ///< ARMv8 A32 encodings for ARM - CS_MODE_MICRO = 1 << 4, ///< MicroMips mode (MIPS) - CS_MODE_MIPS3 = 1 << 5, ///< Mips III ISA - CS_MODE_MIPS32R6 = 1 << 6, ///< Mips32r6 ISA - CS_MODE_MIPS2 = 1 << 7, ///< Mips II ISA - CS_MODE_V9 = 1 << 4, ///< SparcV9 mode (Sparc) - CS_MODE_QPX = 1 << 4, ///< Quad Processing eXtensions mode (PPC) - CS_MODE_SPE = 1 << 5, ///< Signal Processing Engine mode (PPC) - CS_MODE_BOOKE = 1 << 6, ///< Book-E mode (PPC) - CS_MODE_PS = 1 << 7, ///< Paired-singles mode (PPC) - CS_MODE_M68K_000 = 1 << 1, ///< M68K 68000 mode - CS_MODE_M68K_010 = 1 << 2, ///< M68K 68010 mode - CS_MODE_M68K_020 = 1 << 3, ///< M68K 68020 mode - CS_MODE_M68K_030 = 1 << 4, ///< M68K 68030 mode - CS_MODE_M68K_040 = 1 << 5, ///< M68K 68040 mode - CS_MODE_M68K_060 = 1 << 6, ///< M68K 68060 mode - CS_MODE_BIG_ENDIAN = 1U << 31, ///< big-endian mode - CS_MODE_MIPS32 = CS_MODE_32, ///< Mips32 ISA (Mips) - CS_MODE_MIPS64 = CS_MODE_64, ///< Mips64 ISA (Mips) - CS_MODE_M680X_6301 = 1 << 1, ///< M680X Hitachi 6301,6303 mode - CS_MODE_M680X_6309 = 1 << 2, ///< M680X Hitachi 6309 mode - CS_MODE_M680X_6800 = 1 << 3, ///< M680X Motorola 6800,6802 mode - CS_MODE_M680X_6801 = 1 << 4, ///< M680X Motorola 6801,6803 mode - CS_MODE_M680X_6805 = 1 << 5, ///< M680X Motorola/Freescale 6805 mode - CS_MODE_M680X_6808 = 1 << 6, ///< M680X Motorola/Freescale/NXP 68HC08 mode - CS_MODE_M680X_6809 = 1 << 7, ///< M680X Motorola 6809 mode - CS_MODE_M680X_6811 = 1 << 8, ///< M680X Motorola/Freescale/NXP 68HC11 mode - CS_MODE_M680X_CPU12 = 1 << 9, ///< M680X Motorola/Freescale/NXP CPU12 - ///< used on M68HC12/HCS12 - CS_MODE_M680X_HCS08 = 1 << 10, ///< M680X Freescale/NXP HCS08 mode - CS_MODE_BPF_CLASSIC = 0, ///< Classic BPF mode (default) - CS_MODE_BPF_EXTENDED = 1 << 0, ///< Extended BPF mode - CS_MODE_RISCV32 = 1 << 0, ///< RISCV RV32G - CS_MODE_RISCV64 = 1 << 1, ///< RISCV RV64G - CS_MODE_RISCVC = 1 << 2, ///< RISCV compressed instructure mode - CS_MODE_MOS65XX_6502 = 1 << 1, ///< MOS65XXX MOS 6502 - CS_MODE_MOS65XX_65C02 = 1 << 2, ///< MOS65XXX WDC 65c02 - CS_MODE_MOS65XX_W65C02 = 1 << 3, ///< MOS65XXX WDC W65c02 - CS_MODE_MOS65XX_65816 = 1 << 4, ///< MOS65XXX WDC 65816, 8-bit m/x - CS_MODE_MOS65XX_65816_LONG_M = (1 << 5), ///< MOS65XXX WDC 65816, 16-bit m, 8-bit x - CS_MODE_MOS65XX_65816_LONG_X = (1 << 6), ///< MOS65XXX WDC 65816, 8-bit m, 16-bit x - CS_MODE_MOS65XX_65816_LONG_MX = CS_MODE_MOS65XX_65816_LONG_M | CS_MODE_MOS65XX_65816_LONG_X, - CS_MODE_SH2 = 1 << 1, ///< SH2 - CS_MODE_SH2A = 1 << 2, ///< SH2A - CS_MODE_SH3 = 1 << 3, ///< SH3 - CS_MODE_SH4 = 1 << 4, ///< SH4 - CS_MODE_SH4A = 1 << 5, ///< SH4A - CS_MODE_SHFPU = 1 << 6, ///< w/ FPU - CS_MODE_SHDSP = 1 << 7, ///< w/ DSP - CS_MODE_TRICORE_110 = 1 << 1, ///< Tricore 1.1 - CS_MODE_TRICORE_120 = 1 << 2, ///< Tricore 1.2 - CS_MODE_TRICORE_130 = 1 << 3, ///< Tricore 1.3 - CS_MODE_TRICORE_131 = 1 << 4, ///< Tricore 1.3.1 - CS_MODE_TRICORE_160 = 1 << 5, ///< Tricore 1.6 - CS_MODE_TRICORE_161 = 1 << 6, ///< Tricore 1.6.1 - CS_MODE_TRICORE_162 = 1 << 7, ///< Tricore 1.6.2 -} cs_mode; - -typedef void* (CAPSTONE_API *cs_malloc_t)(size_t size); -typedef void* (CAPSTONE_API *cs_calloc_t)(size_t nmemb, size_t size); -typedef void* (CAPSTONE_API *cs_realloc_t)(void *ptr, size_t size); -typedef void (CAPSTONE_API *cs_free_t)(void *ptr); -typedef int (CAPSTONE_API *cs_vsnprintf_t)(char *str, size_t size, const char *format, va_list ap); - - -/// User-defined dynamic memory related functions: malloc/calloc/realloc/free/vsnprintf() -/// By default, Capstone uses system's malloc(), calloc(), realloc(), free() & vsnprintf(). -typedef struct cs_opt_mem { - cs_malloc_t malloc; - cs_calloc_t calloc; - cs_realloc_t realloc; - cs_free_t free; - cs_vsnprintf_t vsnprintf; -} cs_opt_mem; - -/// Customize mnemonic for instructions with alternative name. -/// To reset existing customized instruction to its default mnemonic, -/// call cs_option(CS_OPT_MNEMONIC) again with the same @id and NULL value -/// for @mnemonic. -typedef struct cs_opt_mnem { - /// ID of instruction to be customized. - unsigned int id; - /// Customized instruction mnemonic. - const char *mnemonic; -} cs_opt_mnem; - -/// Runtime option for the disassembled engine -typedef enum cs_opt_type { - CS_OPT_INVALID = 0, ///< No option specified - CS_OPT_SYNTAX, ///< Assembly output syntax - CS_OPT_DETAIL, ///< Break down instruction structure into details - CS_OPT_MODE, ///< Change engine's mode at run-time - CS_OPT_MEM, ///< User-defined dynamic memory related functions - CS_OPT_SKIPDATA, ///< Skip data when disassembling. Then engine is in SKIPDATA mode. - CS_OPT_SKIPDATA_SETUP, ///< Setup user-defined function for SKIPDATA option - CS_OPT_MNEMONIC, ///< Customize instruction mnemonic - CS_OPT_UNSIGNED, ///< print immediate operands in unsigned form - CS_OPT_NO_BRANCH_OFFSET, ///< ARM, prints branch immediates without offset. -} cs_opt_type; - -/// Runtime option value (associated with option type above) -typedef enum cs_opt_value { - CS_OPT_OFF = 0, ///< Turn OFF an option - default for CS_OPT_DETAIL, CS_OPT_SKIPDATA, CS_OPT_UNSIGNED. - CS_OPT_ON = 3, ///< Turn ON an option (CS_OPT_DETAIL, CS_OPT_SKIPDATA). - CS_OPT_SYNTAX_DEFAULT = 0, ///< Default asm syntax (CS_OPT_SYNTAX). - CS_OPT_SYNTAX_INTEL, ///< X86 Intel asm syntax - default on X86 (CS_OPT_SYNTAX). - CS_OPT_SYNTAX_ATT, ///< X86 ATT asm syntax (CS_OPT_SYNTAX). - CS_OPT_SYNTAX_NOREGNAME, ///< Prints register name with only number (CS_OPT_SYNTAX) - CS_OPT_SYNTAX_MASM, ///< X86 Intel Masm syntax (CS_OPT_SYNTAX). - CS_OPT_SYNTAX_MOTOROLA, ///< MOS65XX use $ as hex prefix -} cs_opt_value; - -/// Common instruction operand types - to be consistent across all architectures. -typedef enum cs_op_type { - CS_OP_INVALID = 0, ///< uninitialized/invalid operand. - CS_OP_REG, ///< Register operand. - CS_OP_IMM, ///< Immediate operand. - CS_OP_MEM, ///< Memory operand. Can be ORed with another operand type. - CS_OP_FP, ///< Floating-Point operand. -} cs_op_type; - -/// Common instruction operand access types - to be consistent across all architectures. -/// It is possible to combine access types, for example: CS_AC_READ | CS_AC_WRITE -typedef enum cs_ac_type { - CS_AC_INVALID = 0, ///< Uninitialized/invalid access type. - CS_AC_READ = 1 << 0, ///< Operand read from memory or register. - CS_AC_WRITE = 1 << 1, ///< Operand write to memory or register. -} cs_ac_type; - -/// Common instruction groups - to be consistent across all architectures. -typedef enum cs_group_type { - CS_GRP_INVALID = 0, ///< uninitialized/invalid group. - CS_GRP_JUMP, ///< all jump instructions (conditional+direct+indirect jumps) - CS_GRP_CALL, ///< all call instructions - CS_GRP_RET, ///< all return instructions - CS_GRP_INT, ///< all interrupt instructions (int+syscall) - CS_GRP_IRET, ///< all interrupt return instructions - CS_GRP_PRIVILEGE, ///< all privileged instructions - CS_GRP_BRANCH_RELATIVE, ///< all relative branching instructions -} cs_group_type; - -/** - User-defined callback function for SKIPDATA option. - See tests/test_skipdata.c for sample code demonstrating this API. - - @code: the input buffer containing code to be disassembled. - This is the same buffer passed to cs_disasm(). - @code_size: size (in bytes) of the above @code buffer. - @offset: the position of the currently-examining byte in the input - buffer @code mentioned above. - @user_data: user-data passed to cs_option() via @user_data field in - cs_opt_skipdata struct below. - - @return: return number of bytes to skip, or 0 to immediately stop disassembling. -*/ -typedef size_t (CAPSTONE_API *cs_skipdata_cb_t)(const uint8_t *code, size_t code_size, size_t offset, void *user_data); - -/// User-customized setup for SKIPDATA option -typedef struct cs_opt_skipdata { - /// Capstone considers data to skip as special "instructions". - /// User can specify the string for this instruction's "mnemonic" here. - /// By default (if @mnemonic is NULL), Capstone use ".byte". - const char *mnemonic; - - /// User-defined callback function to be called when Capstone hits data. - /// If the returned value from this callback is positive (>0), Capstone - /// will skip exactly that number of bytes & continue. Otherwise, if - /// the callback returns 0, Capstone stops disassembling and returns - /// immediately from cs_disasm() - /// NOTE: if this callback pointer is NULL, Capstone would skip a number - /// of bytes depending on architectures, as following: - /// Arm: 2 bytes (Thumb mode) or 4 bytes. - /// Arm64: 4 bytes. - /// Mips: 4 bytes. - /// M680x: 1 byte. - /// PowerPC: 4 bytes. - /// Sparc: 4 bytes. - /// SystemZ: 2 bytes. - /// X86: 1 bytes. - /// XCore: 2 bytes. - /// EVM: 1 bytes. - /// RISCV: 4 bytes. - /// WASM: 1 bytes. - /// MOS65XX: 1 bytes. - /// BPF: 8 bytes. - /// TriCore: 2 bytes. - cs_skipdata_cb_t callback; // default value is NULL - - /// User-defined data to be passed to @callback function pointer. - void *user_data; -} cs_opt_skipdata; - - -#include "arm.h" -#include "arm64.h" -#include "m68k.h" -#include "mips.h" -#include "ppc.h" -#include "sparc.h" -#include "systemz.h" -#include "x86.h" -#include "xcore.h" -#include "tms320c64x.h" -#include "m680x.h" -#include "evm.h" -#include "riscv.h" -#include "wasm.h" -#include "mos65xx.h" -#include "bpf.h" -#include "sh.h" -#include "tricore.h" - -#define MAX_IMPL_W_REGS 20 -#define MAX_IMPL_R_REGS 20 -#define MAX_NUM_GROUPS 8 - -/// NOTE: All information in cs_detail is only available when CS_OPT_DETAIL = CS_OPT_ON -/// Initialized as memset(., 0, offsetof(cs_detail, ARCH)+sizeof(cs_ARCH)) -/// by ARCH_getInstruction in arch/ARCH/ARCHDisassembler.c -/// if cs_detail changes, in particular if a field is added after the union, -/// then update arch/ARCH/ARCHDisassembler.c accordingly -typedef struct cs_detail { - uint16_t regs_read - [MAX_IMPL_R_REGS]; ///< list of implicit registers read by this insn - uint8_t regs_read_count; ///< number of implicit registers read by this insn - - uint16_t regs_write - [MAX_IMPL_W_REGS]; ///< list of implicit registers modified by this insn - uint8_t regs_write_count; ///< number of implicit registers modified by this insn - - uint8_t groups[MAX_NUM_GROUPS]; ///< list of group this instruction belong to - uint8_t groups_count; ///< number of groups this insn belongs to - - bool writeback; ///< Instruction has writeback operands. - - /// Architecture-specific instruction info - union { - cs_x86 x86; ///< X86 architecture, including 16-bit, 32-bit & 64-bit mode - cs_arm64 arm64; ///< ARM64 architecture (aka AArch64) - cs_arm arm; ///< ARM architecture (including Thumb/Thumb2) - cs_m68k m68k; ///< M68K architecture - cs_mips mips; ///< MIPS architecture - cs_ppc ppc; ///< PowerPC architecture - cs_sparc sparc; ///< Sparc architecture - cs_sysz sysz; ///< SystemZ architecture - cs_xcore xcore; ///< XCore architecture - cs_tms320c64x tms320c64x; ///< TMS320C64x architecture - cs_m680x m680x; ///< M680X architecture - cs_evm evm; ///< Ethereum architecture - cs_mos65xx mos65xx; ///< MOS65XX architecture (including MOS6502) - cs_wasm wasm; ///< Web Assembly architecture - cs_bpf bpf; ///< Berkeley Packet Filter architecture (including eBPF) - cs_riscv riscv; ///< RISCV architecture - cs_sh sh; ///< SH architecture - cs_tricore tricore; ///< TriCore architecture - }; -} cs_detail; - -/// Detail information of disassembled instruction -typedef struct cs_insn { - /// Instruction ID (basically a numeric ID for the instruction mnemonic) - /// Find the instruction id in the '[ARCH]_insn' enum in the header file - /// of corresponding architecture, such as 'arm_insn' in arm.h for ARM, - /// 'x86_insn' in x86.h for X86, etc... - /// This information is available even when CS_OPT_DETAIL = CS_OPT_OFF - /// NOTE: in Skipdata mode, "data" instruction has 0 for this id field. - unsigned int id; - - /// Address (EIP) of this instruction - /// This information is available even when CS_OPT_DETAIL = CS_OPT_OFF - uint64_t address; - - /// Size of this instruction - /// This information is available even when CS_OPT_DETAIL = CS_OPT_OFF - uint16_t size; - - /// Machine bytes of this instruction, with number of bytes indicated by @size above - /// This information is available even when CS_OPT_DETAIL = CS_OPT_OFF - uint8_t bytes[24]; - - /// Ascii text of instruction mnemonic - /// This information is available even when CS_OPT_DETAIL = CS_OPT_OFF - char mnemonic[CS_MNEMONIC_SIZE]; - - /// Ascii text of instruction operands - /// This information is available even when CS_OPT_DETAIL = CS_OPT_OFF - char op_str[160]; - - /// Pointer to cs_detail. - /// NOTE: detail pointer is only valid when both requirements below are met: - /// (1) CS_OP_DETAIL = CS_OPT_ON - /// (2) Engine is not in Skipdata mode (CS_OP_SKIPDATA option set to CS_OPT_ON) - /// - /// NOTE 2: when in Skipdata mode, or when detail mode is OFF, even if this pointer - /// is not NULL, its content is still irrelevant. - cs_detail *detail; -} cs_insn; - - -/// Calculate the offset of a disassembled instruction in its buffer, given its position -/// in its array of disassembled insn -/// NOTE: this macro works with position (>=1), not index -#define CS_INSN_OFFSET(insns, post) (insns[post - 1].address - insns[0].address) - - -/// All type of errors encountered by Capstone API. -/// These are values returned by cs_errno() -typedef enum cs_err { - CS_ERR_OK = 0, ///< No error: everything was fine - CS_ERR_MEM, ///< Out-Of-Memory error: cs_open(), cs_disasm(), cs_disasm_iter() - CS_ERR_ARCH, ///< Unsupported architecture: cs_open() - CS_ERR_HANDLE, ///< Invalid handle: cs_op_count(), cs_op_index() - CS_ERR_CSH, ///< Invalid csh argument: cs_close(), cs_errno(), cs_option() - CS_ERR_MODE, ///< Invalid/unsupported mode: cs_open() - CS_ERR_OPTION, ///< Invalid/unsupported option: cs_option() - CS_ERR_DETAIL, ///< Information is unavailable because detail option is OFF - CS_ERR_MEMSETUP, ///< Dynamic memory management uninitialized (see CS_OPT_MEM) - CS_ERR_VERSION, ///< Unsupported version (bindings) - CS_ERR_DIET, ///< Access irrelevant data in "diet" engine - CS_ERR_SKIPDATA, ///< Access irrelevant data for "data" instruction in SKIPDATA mode - CS_ERR_X86_ATT, ///< X86 AT&T syntax is unsupported (opt-out at compile time) - CS_ERR_X86_INTEL, ///< X86 Intel syntax is unsupported (opt-out at compile time) - CS_ERR_X86_MASM, ///< X86 Masm syntax is unsupported (opt-out at compile time) -} cs_err; - -/** - Return combined API version & major and minor version numbers. - - @major: major number of API version - @minor: minor number of API version - - @return hexical number as (major << 8 | minor), which encodes both - major & minor versions. - NOTE: This returned value can be compared with version number made - with macro CS_MAKE_VERSION - - For example, second API version would return 1 in @major, and 1 in @minor - The return value would be 0x0101 - - NOTE: if you only care about returned value, but not major and minor values, - set both @major & @minor arguments to NULL. -*/ -CAPSTONE_EXPORT -unsigned int CAPSTONE_API cs_version(int *major, int *minor); - - -/** - This API can be used to either ask for archs supported by this library, - or check to see if the library was compile with 'diet' option (or called - in 'diet' mode). - - To check if a particular arch is supported by this library, set @query to - arch mode (CS_ARCH_* value). - To verify if this library supports all the archs, use CS_ARCH_ALL. - - To check if this library is in 'diet' mode, set @query to CS_SUPPORT_DIET. - - @return True if this library supports the given arch, or in 'diet' mode. -*/ -CAPSTONE_EXPORT -bool CAPSTONE_API cs_support(int query); - -/** - Initialize CS handle: this must be done before any usage of CS. - - @arch: architecture type (CS_ARCH_*) - @mode: hardware mode. This is combined of CS_MODE_* - @handle: pointer to handle, which will be updated at return time - - @return CS_ERR_OK on success, or other value on failure (refer to cs_err enum - for detailed error). -*/ -CAPSTONE_EXPORT -cs_err CAPSTONE_API cs_open(cs_arch arch, cs_mode mode, csh *handle); - -/** - Close CS handle: MUST do to release the handle when it is not used anymore. - NOTE: this must be only called when there is no longer usage of Capstone, - not even access to cs_insn array. The reason is the this API releases some - cached memory, thus access to any Capstone API after cs_close() might crash - your application. - - In fact,this API invalidate @handle by ZERO out its value (i.e *handle = 0). - - @handle: pointer to a handle returned by cs_open() - - @return CS_ERR_OK on success, or other value on failure (refer to cs_err enum - for detailed error). -*/ -CAPSTONE_EXPORT -cs_err CAPSTONE_API cs_close(csh *handle); - -/** - Set option for disassembling engine at runtime - - @handle: handle returned by cs_open() - @type: type of option to be set - @value: option value corresponding with @type - - @return: CS_ERR_OK on success, or other value on failure. - Refer to cs_err enum for detailed error. - - NOTE: in the case of CS_OPT_MEM, handle's value can be anything, - so that cs_option(handle, CS_OPT_MEM, value) can (i.e must) be called - even before cs_open() -*/ -CAPSTONE_EXPORT -cs_err CAPSTONE_API cs_option(csh handle, cs_opt_type type, size_t value); - -/** - Report the last error number when some API function fail. - Like glibc's errno, cs_errno might not retain its old value once accessed. - - @handle: handle returned by cs_open() - - @return: error code of cs_err enum type (CS_ERR_*, see above) -*/ -CAPSTONE_EXPORT -cs_err CAPSTONE_API cs_errno(csh handle); - - -/** - Return a string describing given error code. - - @code: error code (see CS_ERR_* above) - - @return: returns a pointer to a string that describes the error code - passed in the argument @code -*/ -CAPSTONE_EXPORT -const char * CAPSTONE_API cs_strerror(cs_err code); - -/** - Disassemble binary code, given the code buffer, size, address and number - of instructions to be decoded. - This API dynamically allocate memory to contain disassembled instruction. - Resulting instructions will be put into @*insn - - NOTE 1: this API will automatically determine memory needed to contain - output disassembled instructions in @insn. - - NOTE 2: caller must free the allocated memory itself to avoid memory leaking. - - NOTE 3: for system with scarce memory to be dynamically allocated such as - OS kernel or firmware, the API cs_disasm_iter() might be a better choice than - cs_disasm(). The reason is that with cs_disasm(), based on limited available - memory, we have to calculate in advance how many instructions to be disassembled, - which complicates things. This is especially troublesome for the case @count=0, - when cs_disasm() runs uncontrollably (until either end of input buffer, or - when it encounters an invalid instruction). - - @handle: handle returned by cs_open() - @code: buffer containing raw binary code to be disassembled. - @code_size: size of the above code buffer. - @address: address of the first instruction in given raw code buffer. - @insn: array of instructions filled in by this API. - NOTE: @insn will be allocated by this function, and should be freed - with cs_free() API. - @count: number of instructions to be disassembled, or 0 to get all of them - - @return: the number of successfully disassembled instructions, - or 0 if this function failed to disassemble the given code - - On failure, call cs_errno() for error code. -*/ -CAPSTONE_EXPORT -size_t CAPSTONE_API cs_disasm(csh handle, - const uint8_t *code, size_t code_size, - uint64_t address, - size_t count, - cs_insn **insn); - -/** - Free memory allocated by cs_malloc() or cs_disasm() (argument @insn) - - @insn: pointer returned by @insn argument in cs_disasm() or cs_malloc() - @count: number of cs_insn structures returned by cs_disasm(), or 1 - to free memory allocated by cs_malloc(). -*/ -CAPSTONE_EXPORT -void CAPSTONE_API cs_free(cs_insn *insn, size_t count); - - -/** - Allocate memory for 1 instruction to be used by cs_disasm_iter(). - - @handle: handle returned by cs_open() - - NOTE: when no longer in use, you can reclaim the memory allocated for - this instruction with cs_free(insn, 1) -*/ -CAPSTONE_EXPORT -cs_insn * CAPSTONE_API cs_malloc(csh handle); - -/** - Fast API to disassemble binary code, given the code buffer, size, address - and number of instructions to be decoded. - This API puts the resulting instruction into a given cache in @insn. - See tests/test_iter.c for sample code demonstrating this API. - - NOTE 1: this API will update @code, @size & @address to point to the next - instruction in the input buffer. Therefore, it is convenient to use - cs_disasm_iter() inside a loop to quickly iterate all the instructions. - While decoding one instruction at a time can also be achieved with - cs_disasm(count=1), some benchmarks shown that cs_disasm_iter() can be 30% - faster on random input. - - NOTE 2: the cache in @insn can be created with cs_malloc() API. - - NOTE 3: for system with scarce memory to be dynamically allocated such as - OS kernel or firmware, this API is recommended over cs_disasm(), which - allocates memory based on the number of instructions to be disassembled. - The reason is that with cs_disasm(), based on limited available memory, - we have to calculate in advance how many instructions to be disassembled, - which complicates things. This is especially troublesome for the case - @count=0, when cs_disasm() runs uncontrollably (until either end of input - buffer, or when it encounters an invalid instruction). - - @handle: handle returned by cs_open() - @code: buffer containing raw binary code to be disassembled - @size: size of above code - @address: address of the first insn in given raw code buffer - @insn: pointer to instruction to be filled in by this API. - - @return: true if this API successfully decode 1 instruction, - or false otherwise. - - On failure, call cs_errno() for error code. -*/ -CAPSTONE_EXPORT -bool CAPSTONE_API cs_disasm_iter(csh handle, - const uint8_t **code, size_t *size, - uint64_t *address, cs_insn *insn); - -/** - Return friendly name of register in a string. - Find the instruction id from header file of corresponding architecture (arm.h for ARM, - x86.h for X86, ...) - - WARN: when in 'diet' mode, this API is irrelevant because engine does not - store register name. - - @handle: handle returned by cs_open() - @reg_id: register id - - @return: string name of the register, or NULL if @reg_id is invalid. -*/ -CAPSTONE_EXPORT -const char * CAPSTONE_API cs_reg_name(csh handle, unsigned int reg_id); - -/** - Return friendly name of an instruction in a string. - Find the instruction id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - - WARN: when in 'diet' mode, this API is irrelevant because the engine does not - store instruction name. - - @handle: handle returned by cs_open() - @insn_id: instruction id - - @return: string name of the instruction, or NULL if @insn_id is invalid. -*/ -CAPSTONE_EXPORT -const char * CAPSTONE_API cs_insn_name(csh handle, unsigned int insn_id); - -/** - Return friendly name of a group id (that an instruction can belong to) - Find the group id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - - WARN: when in 'diet' mode, this API is irrelevant because the engine does not - store group name. - - @handle: handle returned by cs_open() - @group_id: group id - - @return: string name of the group, or NULL if @group_id is invalid. -*/ -CAPSTONE_EXPORT -const char * CAPSTONE_API cs_group_name(csh handle, unsigned int group_id); - -/** - Check if a disassembled instruction belong to a particular group. - Find the group id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - Internally, this simply verifies if @group_id matches any member of insn->groups array. - - NOTE: this API is only valid when detail option is ON (which is OFF by default). - - WARN: when in 'diet' mode, this API is irrelevant because the engine does not - update @groups array. - - @handle: handle returned by cs_open() - @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() - @group_id: group that you want to check if this instruction belong to. - - @return: true if this instruction indeed belongs to the given group, or false otherwise. -*/ -CAPSTONE_EXPORT -bool CAPSTONE_API cs_insn_group(csh handle, const cs_insn *insn, unsigned int group_id); - -/** - Check if a disassembled instruction IMPLICITLY used a particular register. - Find the register id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - Internally, this simply verifies if @reg_id matches any member of insn->regs_read array. - - NOTE: this API is only valid when detail option is ON (which is OFF by default) - - WARN: when in 'diet' mode, this API is irrelevant because the engine does not - update @regs_read array. - - @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() - @reg_id: register that you want to check if this instruction used it. - - @return: true if this instruction indeed implicitly used the given register, or false otherwise. -*/ -CAPSTONE_EXPORT -bool CAPSTONE_API cs_reg_read(csh handle, const cs_insn *insn, unsigned int reg_id); - -/** - Check if a disassembled instruction IMPLICITLY modified a particular register. - Find the register id from header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - Internally, this simply verifies if @reg_id matches any member of insn->regs_write array. - - NOTE: this API is only valid when detail option is ON (which is OFF by default) - - WARN: when in 'diet' mode, this API is irrelevant because the engine does not - update @regs_write array. - - @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() - @reg_id: register that you want to check if this instruction modified it. - - @return: true if this instruction indeed implicitly modified the given register, or false otherwise. -*/ -CAPSTONE_EXPORT -bool CAPSTONE_API cs_reg_write(csh handle, const cs_insn *insn, unsigned int reg_id); - -/** - Count the number of operands of a given type. - Find the operand type in header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - - NOTE: this API is only valid when detail option is ON (which is OFF by default) - - @handle: handle returned by cs_open() - @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() - @op_type: Operand type to be found. - - @return: number of operands of given type @op_type in instruction @insn, - or -1 on failure. -*/ -CAPSTONE_EXPORT -int CAPSTONE_API cs_op_count(csh handle, const cs_insn *insn, unsigned int op_type); - -/** - Retrieve the position of operand of given type in .operands[] array. - Later, the operand can be accessed using the returned position. - Find the operand type in header file of corresponding architecture (arm.h for ARM, x86.h for X86, ...) - - NOTE: this API is only valid when detail option is ON (which is OFF by default) - - @handle: handle returned by cs_open() - @insn: disassembled instruction structure received from cs_disasm() or cs_disasm_iter() - @op_type: Operand type to be found. - @position: position of the operand to be found. This must be in the range - [1, cs_op_count(handle, insn, op_type)] - - @return: index of operand of given type @op_type in .operands[] array - in instruction @insn, or -1 on failure. -*/ -CAPSTONE_EXPORT -int CAPSTONE_API cs_op_index(csh handle, const cs_insn *insn, unsigned int op_type, - unsigned int position); - -/// Type of array to keep the list of registers -typedef uint16_t cs_regs[64]; - -/** - Retrieve all the registers accessed by an instruction, either explicitly or - implicitly. - - WARN: when in 'diet' mode, this API is irrelevant because engine does not - store registers. - - @handle: handle returned by cs_open() - @insn: disassembled instruction structure returned from cs_disasm() or cs_disasm_iter() - @regs_read: on return, this array contains all registers read by instruction. - @regs_read_count: number of registers kept inside @regs_read array. - @regs_write: on return, this array contains all registers written by instruction. - @regs_write_count: number of registers kept inside @regs_write array. - - @return CS_ERR_OK on success, or other value on failure (refer to cs_err enum - for detailed error). -*/ -CAPSTONE_EXPORT -cs_err CAPSTONE_API cs_regs_access(csh handle, const cs_insn *insn, - cs_regs regs_read, uint8_t *regs_read_count, - cs_regs regs_write, uint8_t *regs_write_count); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/evm.h b/.tools/python-revlibs/capstone/include/capstone/evm.h deleted file mode 100644 index 78fb7c0..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/evm.h +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef CAPSTONE_EVM_H -#define CAPSTONE_EVM_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2018 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// Instruction structure -typedef struct cs_evm { - unsigned char pop; ///< number of items popped from the stack - unsigned char push; ///< number of items pushed into the stack - unsigned int fee; ///< gas fee for the instruction -} cs_evm; - -/// EVM instruction -typedef enum evm_insn { - EVM_INS_STOP = 0, - EVM_INS_ADD = 1, - EVM_INS_MUL = 2, - EVM_INS_SUB = 3, - EVM_INS_DIV = 4, - EVM_INS_SDIV = 5, - EVM_INS_MOD = 6, - EVM_INS_SMOD = 7, - EVM_INS_ADDMOD = 8, - EVM_INS_MULMOD = 9, - EVM_INS_EXP = 10, - EVM_INS_SIGNEXTEND = 11, - EVM_INS_LT = 16, - EVM_INS_GT = 17, - EVM_INS_SLT = 18, - EVM_INS_SGT = 19, - EVM_INS_EQ = 20, - EVM_INS_ISZERO = 21, - EVM_INS_AND = 22, - EVM_INS_OR = 23, - EVM_INS_XOR = 24, - EVM_INS_NOT = 25, - EVM_INS_BYTE = 26, - EVM_INS_SHA3 = 32, - EVM_INS_ADDRESS = 48, - EVM_INS_BALANCE = 49, - EVM_INS_ORIGIN = 50, - EVM_INS_CALLER = 51, - EVM_INS_CALLVALUE = 52, - EVM_INS_CALLDATALOAD = 53, - EVM_INS_CALLDATASIZE = 54, - EVM_INS_CALLDATACOPY = 55, - EVM_INS_CODESIZE = 56, - EVM_INS_CODECOPY = 57, - EVM_INS_GASPRICE = 58, - EVM_INS_EXTCODESIZE = 59, - EVM_INS_EXTCODECOPY = 60, - EVM_INS_RETURNDATASIZE = 61, - EVM_INS_RETURNDATACOPY = 62, - EVM_INS_BLOCKHASH = 64, - EVM_INS_COINBASE = 65, - EVM_INS_TIMESTAMP = 66, - EVM_INS_NUMBER = 67, - EVM_INS_DIFFICULTY = 68, - EVM_INS_GASLIMIT = 69, - EVM_INS_POP = 80, - EVM_INS_MLOAD = 81, - EVM_INS_MSTORE = 82, - EVM_INS_MSTORE8 = 83, - EVM_INS_SLOAD = 84, - EVM_INS_SSTORE = 85, - EVM_INS_JUMP = 86, - EVM_INS_JUMPI = 87, - EVM_INS_PC = 88, - EVM_INS_MSIZE = 89, - EVM_INS_GAS = 90, - EVM_INS_JUMPDEST = 91, - EVM_INS_PUSH1 = 96, - EVM_INS_PUSH2 = 97, - EVM_INS_PUSH3 = 98, - EVM_INS_PUSH4 = 99, - EVM_INS_PUSH5 = 100, - EVM_INS_PUSH6 = 101, - EVM_INS_PUSH7 = 102, - EVM_INS_PUSH8 = 103, - EVM_INS_PUSH9 = 104, - EVM_INS_PUSH10 = 105, - EVM_INS_PUSH11 = 106, - EVM_INS_PUSH12 = 107, - EVM_INS_PUSH13 = 108, - EVM_INS_PUSH14 = 109, - EVM_INS_PUSH15 = 110, - EVM_INS_PUSH16 = 111, - EVM_INS_PUSH17 = 112, - EVM_INS_PUSH18 = 113, - EVM_INS_PUSH19 = 114, - EVM_INS_PUSH20 = 115, - EVM_INS_PUSH21 = 116, - EVM_INS_PUSH22 = 117, - EVM_INS_PUSH23 = 118, - EVM_INS_PUSH24 = 119, - EVM_INS_PUSH25 = 120, - EVM_INS_PUSH26 = 121, - EVM_INS_PUSH27 = 122, - EVM_INS_PUSH28 = 123, - EVM_INS_PUSH29 = 124, - EVM_INS_PUSH30 = 125, - EVM_INS_PUSH31 = 126, - EVM_INS_PUSH32 = 127, - EVM_INS_DUP1 = 128, - EVM_INS_DUP2 = 129, - EVM_INS_DUP3 = 130, - EVM_INS_DUP4 = 131, - EVM_INS_DUP5 = 132, - EVM_INS_DUP6 = 133, - EVM_INS_DUP7 = 134, - EVM_INS_DUP8 = 135, - EVM_INS_DUP9 = 136, - EVM_INS_DUP10 = 137, - EVM_INS_DUP11 = 138, - EVM_INS_DUP12 = 139, - EVM_INS_DUP13 = 140, - EVM_INS_DUP14 = 141, - EVM_INS_DUP15 = 142, - EVM_INS_DUP16 = 143, - EVM_INS_SWAP1 = 144, - EVM_INS_SWAP2 = 145, - EVM_INS_SWAP3 = 146, - EVM_INS_SWAP4 = 147, - EVM_INS_SWAP5 = 148, - EVM_INS_SWAP6 = 149, - EVM_INS_SWAP7 = 150, - EVM_INS_SWAP8 = 151, - EVM_INS_SWAP9 = 152, - EVM_INS_SWAP10 = 153, - EVM_INS_SWAP11 = 154, - EVM_INS_SWAP12 = 155, - EVM_INS_SWAP13 = 156, - EVM_INS_SWAP14 = 157, - EVM_INS_SWAP15 = 158, - EVM_INS_SWAP16 = 159, - EVM_INS_LOG0 = 160, - EVM_INS_LOG1 = 161, - EVM_INS_LOG2 = 162, - EVM_INS_LOG3 = 163, - EVM_INS_LOG4 = 164, - EVM_INS_CREATE = 240, - EVM_INS_CALL = 241, - EVM_INS_CALLCODE = 242, - EVM_INS_RETURN = 243, - EVM_INS_DELEGATECALL = 244, - EVM_INS_CALLBLACKBOX = 245, - EVM_INS_STATICCALL = 250, - EVM_INS_REVERT = 253, - EVM_INS_SUICIDE = 255, - - EVM_INS_INVALID = 512, - EVM_INS_ENDING, // <-- mark the end of the list of instructions -} evm_insn; - -/// Group of EVM instructions -typedef enum evm_insn_group { - EVM_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - EVM_GRP_JUMP, ///< all jump instructions - - EVM_GRP_MATH = 8, ///< math instructions - EVM_GRP_STACK_WRITE, ///< instructions write to stack - EVM_GRP_STACK_READ, ///< instructions read from stack - EVM_GRP_MEM_WRITE, ///< instructions write to memory - EVM_GRP_MEM_READ, ///< instructions read from memory - EVM_GRP_STORE_WRITE, ///< instructions write to storage - EVM_GRP_STORE_READ, ///< instructions read from storage - EVM_GRP_HALT, ///< instructions halt execution - - EVM_GRP_ENDING, ///< <-- mark the end of the list of groups -} evm_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/m680x.h b/.tools/python-revlibs/capstone/include/capstone/m680x.h deleted file mode 100644 index c8296e4..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/m680x.h +++ /dev/null @@ -1,537 +0,0 @@ -#ifndef CAPSTONE_M680X_H -#define CAPSTONE_M680X_H - -/* Capstone Disassembly Engine */ -/* M680X Backend by Wolfgang Schwotzer 2017 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -#define M680X_OPERAND_COUNT 9 - -/// M680X registers and special registers -typedef enum m680x_reg { - M680X_REG_INVALID = 0, - - M680X_REG_A, ///< M6800/1/2/3/9, HD6301/9 - M680X_REG_B, ///< M6800/1/2/3/9, HD6301/9 - M680X_REG_E, ///< HD6309 - M680X_REG_F, ///< HD6309 - M680X_REG_0, ///< HD6309 - - M680X_REG_D, ///< M6801/3/9, HD6301/9 - M680X_REG_W, ///< HD6309 - - M680X_REG_CC, ///< M6800/1/2/3/9, M6301/9 - M680X_REG_DP, ///< M6809/M6309 - M680X_REG_MD, ///< M6309 - - M680X_REG_HX, ///< M6808 - M680X_REG_H, ///< M6808 - M680X_REG_X, ///< M6800/1/2/3/9, M6301/9 - M680X_REG_Y, ///< M6809/M6309 - M680X_REG_S, ///< M6809/M6309 - M680X_REG_U, ///< M6809/M6309 - M680X_REG_V, ///< M6309 - - M680X_REG_Q, ///< M6309 - - M680X_REG_PC, ///< M6800/1/2/3/9, M6301/9 - - M680X_REG_TMP2, ///< CPU12 - M680X_REG_TMP3, ///< CPU12 - - M680X_REG_ENDING, ///< <-- mark the end of the list of registers -} m680x_reg; - -/// Operand type for instruction's operands -typedef enum m680x_op_type { - M680X_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - M680X_OP_REGISTER, ///< = Register operand. - M680X_OP_IMMEDIATE, ///< = Immediate operand. - M680X_OP_INDEXED, ///< = Indexed addressing operand. - M680X_OP_EXTENDED, ///< = Extended addressing operand. - M680X_OP_DIRECT, ///< = Direct addressing operand. - M680X_OP_RELATIVE, ///< = Relative addressing operand. - M680X_OP_CONSTANT, ///< = constant operand (Displayed as number only). - ///< Used e.g. for a bit index or page number. -} m680x_op_type; - -// Supported bit values for mem.idx.offset_bits -#define M680X_OFFSET_NONE 0 -#define M680X_OFFSET_BITS_5 5 -#define M680X_OFFSET_BITS_8 8 -#define M680X_OFFSET_BITS_9 9 -#define M680X_OFFSET_BITS_16 16 - -// Supported bit flags for mem.idx.flags -// These flags can be combined -#define M680X_IDX_INDIRECT 1 -#define M680X_IDX_NO_COMMA 2 -#define M680X_IDX_POST_INC_DEC 4 - -/// Instruction's operand referring to indexed addressing -typedef struct m680x_op_idx { - m680x_reg base_reg; ///< base register (or M680X_REG_INVALID if - ///< irrelevant) - m680x_reg offset_reg; ///< offset register (or M680X_REG_INVALID if - ///< irrelevant) - int16_t offset; ///< 5-,8- or 16-bit offset. See also offset_bits. - uint16_t offset_addr; ///< = offset addr. if base_reg == M680X_REG_PC. - ///< calculated as offset + PC - uint8_t offset_bits; ///< offset width in bits for indexed addressing - int8_t inc_dec; ///< inc. or dec. value: - ///< 0: no inc-/decrement - ///< 1 .. 8: increment by 1 .. 8 - ///< -1 .. -8: decrement by 1 .. 8 - ///< if flag M680X_IDX_POST_INC_DEC set it is post - ///< inc-/decrement otherwise pre inc-/decrement - uint8_t flags; ///< 8-bit flags (see above) -} m680x_op_idx; - -/// Instruction's memory operand referring to relative addressing (Bcc/LBcc) -typedef struct m680x_op_rel { - uint16_t address; ///< The absolute address. - ///< calculated as PC + offset. PC is the first - ///< address after the instruction. - int16_t offset; ///< the offset/displacement value -} m680x_op_rel; - -/// Instruction's operand referring to extended addressing -typedef struct m680x_op_ext { - uint16_t address; ///< The absolute address - bool indirect; ///< true if extended indirect addressing -} m680x_op_ext; - -/// Instruction operand -typedef struct cs_m680x_op { - m680x_op_type type; - union { - int32_t imm; ///< immediate value for IMM operand - m680x_reg reg; ///< register value for REG operand - m680x_op_idx idx; ///< Indexed addressing operand - m680x_op_rel rel; ///< Relative address. operand (Bcc/LBcc) - m680x_op_ext ext; ///< Extended address - uint8_t direct_addr; ///<, 2015-2016 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -#define M68K_OPERAND_COUNT 4 - -/// M68K registers and special registers -typedef enum m68k_reg { - M68K_REG_INVALID = 0, - - M68K_REG_D0, - M68K_REG_D1, - M68K_REG_D2, - M68K_REG_D3, - M68K_REG_D4, - M68K_REG_D5, - M68K_REG_D6, - M68K_REG_D7, - - M68K_REG_A0, - M68K_REG_A1, - M68K_REG_A2, - M68K_REG_A3, - M68K_REG_A4, - M68K_REG_A5, - M68K_REG_A6, - M68K_REG_A7, - - M68K_REG_FP0, - M68K_REG_FP1, - M68K_REG_FP2, - M68K_REG_FP3, - M68K_REG_FP4, - M68K_REG_FP5, - M68K_REG_FP6, - M68K_REG_FP7, - - M68K_REG_PC, - - M68K_REG_SR, - M68K_REG_CCR, - M68K_REG_SFC, - M68K_REG_DFC, - M68K_REG_USP, - M68K_REG_VBR, - M68K_REG_CACR, - M68K_REG_CAAR, - M68K_REG_MSP, - M68K_REG_ISP, - M68K_REG_TC, - M68K_REG_ITT0, - M68K_REG_ITT1, - M68K_REG_DTT0, - M68K_REG_DTT1, - M68K_REG_MMUSR, - M68K_REG_URP, - M68K_REG_SRP, - - M68K_REG_FPCR, - M68K_REG_FPSR, - M68K_REG_FPIAR, - - M68K_REG_ENDING, // <-- mark the end of the list of registers -} m68k_reg; - -/// M68K Addressing Modes -typedef enum m68k_address_mode { - M68K_AM_NONE = 0, ///< No address mode. - - M68K_AM_REG_DIRECT_DATA, ///< Register Direct - Data - M68K_AM_REG_DIRECT_ADDR, ///< Register Direct - Address - - M68K_AM_REGI_ADDR, ///< Register Indirect - Address - M68K_AM_REGI_ADDR_POST_INC, ///< Register Indirect - Address with Postincrement - M68K_AM_REGI_ADDR_PRE_DEC, ///< Register Indirect - Address with Predecrement - M68K_AM_REGI_ADDR_DISP, ///< Register Indirect - Address with Displacement - - M68K_AM_AREGI_INDEX_8_BIT_DISP, ///< Address Register Indirect With Index- 8-bit displacement - M68K_AM_AREGI_INDEX_BASE_DISP, ///< Address Register Indirect With Index- Base displacement - - M68K_AM_MEMI_POST_INDEX, ///< Memory indirect - Postindex - M68K_AM_MEMI_PRE_INDEX, ///< Memory indirect - Preindex - - M68K_AM_PCI_DISP, ///< Program Counter Indirect - with Displacement - - M68K_AM_PCI_INDEX_8_BIT_DISP, ///< Program Counter Indirect with Index - with 8-Bit Displacement - M68K_AM_PCI_INDEX_BASE_DISP, ///< Program Counter Indirect with Index - with Base Displacement - - M68K_AM_PC_MEMI_POST_INDEX, ///< Program Counter Memory Indirect - Postindexed - M68K_AM_PC_MEMI_PRE_INDEX, ///< Program Counter Memory Indirect - Preindexed - - M68K_AM_ABSOLUTE_DATA_SHORT, ///< Absolute Data Addressing - Short - M68K_AM_ABSOLUTE_DATA_LONG, ///< Absolute Data Addressing - Long - M68K_AM_IMMEDIATE, ///< Immediate value - - M68K_AM_BRANCH_DISPLACEMENT, ///< Address as displacement from (PC+2) used by branches -} m68k_address_mode; - -/// Operand type for instruction's operands -typedef enum m68k_op_type { - M68K_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - M68K_OP_REG, ///< = CS_OP_REG (Register operand). - M68K_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - M68K_OP_MEM, ///< = CS_OP_MEM (Memory operand). - M68K_OP_FP_SINGLE, ///< single precision Floating-Point operand - M68K_OP_FP_DOUBLE, ///< double precision Floating-Point operand - M68K_OP_REG_BITS, ///< Register bits move - M68K_OP_REG_PAIR, ///< Register pair in the same op (upper 4 bits for first reg, lower for second) - M68K_OP_BR_DISP, ///< Branch displacement -} m68k_op_type; - -/// Instruction's operand referring to memory -/// This is associated with M68K_OP_MEM operand type above -typedef struct m68k_op_mem { - m68k_reg base_reg; ///< base register (or M68K_REG_INVALID if irrelevant) - m68k_reg index_reg; ///< index register (or M68K_REG_INVALID if irrelevant) - m68k_reg in_base_reg; ///< indirect base register (or M68K_REG_INVALID if irrelevant) - uint32_t in_disp; ///< indirect displacement - uint32_t out_disp; ///< other displacement - int16_t disp; ///< displacement value - uint8_t scale; ///< scale for index register - uint8_t bitfield; ///< set to true if the two values below should be used - uint8_t width; ///< used for bf* instructions - uint8_t offset; ///< used for bf* instructions - uint8_t index_size; ///< 0 = w, 1 = l -} m68k_op_mem; - -/// Operand type for instruction's operands -typedef enum m68k_op_br_disp_size { - M68K_OP_BR_DISP_SIZE_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - M68K_OP_BR_DISP_SIZE_BYTE = 1, ///< signed 8-bit displacement - M68K_OP_BR_DISP_SIZE_WORD = 2, ///< signed 16-bit displacement - M68K_OP_BR_DISP_SIZE_LONG = 4, ///< signed 32-bit displacement -} m68k_op_br_disp_size; - -typedef struct m68k_op_br_disp { - int32_t disp; ///< displacement value - uint8_t disp_size; ///< Size from m68k_op_br_disp_size type above -} m68k_op_br_disp; - -/// Register pair in one operand. -typedef struct cs_m68k_op_reg_pair { - m68k_reg reg_0; - m68k_reg reg_1; -} cs_m68k_op_reg_pair; - -/// Instruction operand -typedef struct cs_m68k_op { - union { - uint64_t imm; ///< immediate value for IMM operand - double dimm; ///< double imm - float simm; ///< float imm - m68k_reg reg; ///< register value for REG operand - cs_m68k_op_reg_pair reg_pair; ///< register pair in one operand - }; - - m68k_op_mem mem; ///< data when operand is targeting memory - m68k_op_br_disp br_disp; ///< data when operand is a branch displacement - uint32_t register_bits; ///< register bits for movem etc. (always in d0-d7, a0-a7, fp0 - fp7 order) - m68k_op_type type; - m68k_address_mode address_mode; ///< M68K addressing mode for this op -} cs_m68k_op; - -/// Operation size of the CPU instructions -typedef enum m68k_cpu_size { - M68K_CPU_SIZE_NONE = 0, ///< unsized or unspecified - M68K_CPU_SIZE_BYTE = 1, ///< 1 byte in size - M68K_CPU_SIZE_WORD = 2, ///< 2 bytes in size - M68K_CPU_SIZE_LONG = 4, ///< 4 bytes in size -} m68k_cpu_size; - -/// Operation size of the FPU instructions (Notice that FPU instruction can also use CPU sizes if needed) -typedef enum m68k_fpu_size { - M68K_FPU_SIZE_NONE = 0, ///< unsized like fsave/frestore - M68K_FPU_SIZE_SINGLE = 4, ///< 4 byte in size (single float) - M68K_FPU_SIZE_DOUBLE = 8, ///< 8 byte in size (double) - M68K_FPU_SIZE_EXTENDED = 12, ///< 12 byte in size (extended real format) -} m68k_fpu_size; - -/// Type of size that is being used for the current instruction -typedef enum m68k_size_type { - M68K_SIZE_TYPE_INVALID = 0, - - M68K_SIZE_TYPE_CPU, - M68K_SIZE_TYPE_FPU, -} m68k_size_type; - -/// Operation size of the current instruction (NOT the actually size of instruction) -typedef struct m68k_op_size { - m68k_size_type type; - union { - m68k_cpu_size cpu_size; - m68k_fpu_size fpu_size; - }; -} m68k_op_size; - -/// The M68K instruction and it's operands -typedef struct cs_m68k { - // Number of operands of this instruction or 0 when instruction has no operand. - cs_m68k_op operands[M68K_OPERAND_COUNT]; ///< operands for this instruction. - m68k_op_size op_size; ///< size of data operand works on in bytes (.b, .w, .l, etc) - uint8_t op_count; ///< number of operands for the instruction -} cs_m68k; - -/// M68K instruction -typedef enum m68k_insn { - M68K_INS_INVALID = 0, - - M68K_INS_ABCD, - M68K_INS_ADD, - M68K_INS_ADDA, - M68K_INS_ADDI, - M68K_INS_ADDQ, - M68K_INS_ADDX, - M68K_INS_AND, - M68K_INS_ANDI, - M68K_INS_ASL, - M68K_INS_ASR, - M68K_INS_BHS, - M68K_INS_BLO, - M68K_INS_BHI, - M68K_INS_BLS, - M68K_INS_BCC, - M68K_INS_BCS, - M68K_INS_BNE, - M68K_INS_BEQ, - M68K_INS_BVC, - M68K_INS_BVS, - M68K_INS_BPL, - M68K_INS_BMI, - M68K_INS_BGE, - M68K_INS_BLT, - M68K_INS_BGT, - M68K_INS_BLE, - M68K_INS_BRA, - M68K_INS_BSR, - M68K_INS_BCHG, - M68K_INS_BCLR, - M68K_INS_BSET, - M68K_INS_BTST, - M68K_INS_BFCHG, - M68K_INS_BFCLR, - M68K_INS_BFEXTS, - M68K_INS_BFEXTU, - M68K_INS_BFFFO, - M68K_INS_BFINS, - M68K_INS_BFSET, - M68K_INS_BFTST, - M68K_INS_BKPT, - M68K_INS_CALLM, - M68K_INS_CAS, - M68K_INS_CAS2, - M68K_INS_CHK, - M68K_INS_CHK2, - M68K_INS_CLR, - M68K_INS_CMP, - M68K_INS_CMPA, - M68K_INS_CMPI, - M68K_INS_CMPM, - M68K_INS_CMP2, - M68K_INS_CINVL, - M68K_INS_CINVP, - M68K_INS_CINVA, - M68K_INS_CPUSHL, - M68K_INS_CPUSHP, - M68K_INS_CPUSHA, - M68K_INS_DBT, - M68K_INS_DBF, - M68K_INS_DBHI, - M68K_INS_DBLS, - M68K_INS_DBCC, - M68K_INS_DBCS, - M68K_INS_DBNE, - M68K_INS_DBEQ, - M68K_INS_DBVC, - M68K_INS_DBVS, - M68K_INS_DBPL, - M68K_INS_DBMI, - M68K_INS_DBGE, - M68K_INS_DBLT, - M68K_INS_DBGT, - M68K_INS_DBLE, - M68K_INS_DBRA, - M68K_INS_DIVS, - M68K_INS_DIVSL, - M68K_INS_DIVU, - M68K_INS_DIVUL, - M68K_INS_EOR, - M68K_INS_EORI, - M68K_INS_EXG, - M68K_INS_EXT, - M68K_INS_EXTB, - M68K_INS_FABS, - M68K_INS_FSABS, - M68K_INS_FDABS, - M68K_INS_FACOS, - M68K_INS_FADD, - M68K_INS_FSADD, - M68K_INS_FDADD, - M68K_INS_FASIN, - M68K_INS_FATAN, - M68K_INS_FATANH, - M68K_INS_FBF, - M68K_INS_FBEQ, - M68K_INS_FBOGT, - M68K_INS_FBOGE, - M68K_INS_FBOLT, - M68K_INS_FBOLE, - M68K_INS_FBOGL, - M68K_INS_FBOR, - M68K_INS_FBUN, - M68K_INS_FBUEQ, - M68K_INS_FBUGT, - M68K_INS_FBUGE, - M68K_INS_FBULT, - M68K_INS_FBULE, - M68K_INS_FBNE, - M68K_INS_FBT, - M68K_INS_FBSF, - M68K_INS_FBSEQ, - M68K_INS_FBGT, - M68K_INS_FBGE, - M68K_INS_FBLT, - M68K_INS_FBLE, - M68K_INS_FBGL, - M68K_INS_FBGLE, - M68K_INS_FBNGLE, - M68K_INS_FBNGL, - M68K_INS_FBNLE, - M68K_INS_FBNLT, - M68K_INS_FBNGE, - M68K_INS_FBNGT, - M68K_INS_FBSNE, - M68K_INS_FBST, - M68K_INS_FCMP, - M68K_INS_FCOS, - M68K_INS_FCOSH, - M68K_INS_FDBF, - M68K_INS_FDBEQ, - M68K_INS_FDBOGT, - M68K_INS_FDBOGE, - M68K_INS_FDBOLT, - M68K_INS_FDBOLE, - M68K_INS_FDBOGL, - M68K_INS_FDBOR, - M68K_INS_FDBUN, - M68K_INS_FDBUEQ, - M68K_INS_FDBUGT, - M68K_INS_FDBUGE, - M68K_INS_FDBULT, - M68K_INS_FDBULE, - M68K_INS_FDBNE, - M68K_INS_FDBT, - M68K_INS_FDBSF, - M68K_INS_FDBSEQ, - M68K_INS_FDBGT, - M68K_INS_FDBGE, - M68K_INS_FDBLT, - M68K_INS_FDBLE, - M68K_INS_FDBGL, - M68K_INS_FDBGLE, - M68K_INS_FDBNGLE, - M68K_INS_FDBNGL, - M68K_INS_FDBNLE, - M68K_INS_FDBNLT, - M68K_INS_FDBNGE, - M68K_INS_FDBNGT, - M68K_INS_FDBSNE, - M68K_INS_FDBST, - M68K_INS_FDIV, - M68K_INS_FSDIV, - M68K_INS_FDDIV, - M68K_INS_FETOX, - M68K_INS_FETOXM1, - M68K_INS_FGETEXP, - M68K_INS_FGETMAN, - M68K_INS_FINT, - M68K_INS_FINTRZ, - M68K_INS_FLOG10, - M68K_INS_FLOG2, - M68K_INS_FLOGN, - M68K_INS_FLOGNP1, - M68K_INS_FMOD, - M68K_INS_FMOVE, - M68K_INS_FSMOVE, - M68K_INS_FDMOVE, - M68K_INS_FMOVECR, - M68K_INS_FMOVEM, - M68K_INS_FMUL, - M68K_INS_FSMUL, - M68K_INS_FDMUL, - M68K_INS_FNEG, - M68K_INS_FSNEG, - M68K_INS_FDNEG, - M68K_INS_FNOP, - M68K_INS_FREM, - M68K_INS_FRESTORE, - M68K_INS_FSAVE, - M68K_INS_FSCALE, - M68K_INS_FSGLDIV, - M68K_INS_FSGLMUL, - M68K_INS_FSIN, - M68K_INS_FSINCOS, - M68K_INS_FSINH, - M68K_INS_FSQRT, - M68K_INS_FSSQRT, - M68K_INS_FDSQRT, - M68K_INS_FSF, - M68K_INS_FSBEQ, - M68K_INS_FSOGT, - M68K_INS_FSOGE, - M68K_INS_FSOLT, - M68K_INS_FSOLE, - M68K_INS_FSOGL, - M68K_INS_FSOR, - M68K_INS_FSUN, - M68K_INS_FSUEQ, - M68K_INS_FSUGT, - M68K_INS_FSUGE, - M68K_INS_FSULT, - M68K_INS_FSULE, - M68K_INS_FSNE, - M68K_INS_FST, - M68K_INS_FSSF, - M68K_INS_FSSEQ, - M68K_INS_FSGT, - M68K_INS_FSGE, - M68K_INS_FSLT, - M68K_INS_FSLE, - M68K_INS_FSGL, - M68K_INS_FSGLE, - M68K_INS_FSNGLE, - M68K_INS_FSNGL, - M68K_INS_FSNLE, - M68K_INS_FSNLT, - M68K_INS_FSNGE, - M68K_INS_FSNGT, - M68K_INS_FSSNE, - M68K_INS_FSST, - M68K_INS_FSUB, - M68K_INS_FSSUB, - M68K_INS_FDSUB, - M68K_INS_FTAN, - M68K_INS_FTANH, - M68K_INS_FTENTOX, - M68K_INS_FTRAPF, - M68K_INS_FTRAPEQ, - M68K_INS_FTRAPOGT, - M68K_INS_FTRAPOGE, - M68K_INS_FTRAPOLT, - M68K_INS_FTRAPOLE, - M68K_INS_FTRAPOGL, - M68K_INS_FTRAPOR, - M68K_INS_FTRAPUN, - M68K_INS_FTRAPUEQ, - M68K_INS_FTRAPUGT, - M68K_INS_FTRAPUGE, - M68K_INS_FTRAPULT, - M68K_INS_FTRAPULE, - M68K_INS_FTRAPNE, - M68K_INS_FTRAPT, - M68K_INS_FTRAPSF, - M68K_INS_FTRAPSEQ, - M68K_INS_FTRAPGT, - M68K_INS_FTRAPGE, - M68K_INS_FTRAPLT, - M68K_INS_FTRAPLE, - M68K_INS_FTRAPGL, - M68K_INS_FTRAPGLE, - M68K_INS_FTRAPNGLE, - M68K_INS_FTRAPNGL, - M68K_INS_FTRAPNLE, - M68K_INS_FTRAPNLT, - M68K_INS_FTRAPNGE, - M68K_INS_FTRAPNGT, - M68K_INS_FTRAPSNE, - M68K_INS_FTRAPST, - M68K_INS_FTST, - M68K_INS_FTWOTOX, - M68K_INS_HALT, - M68K_INS_ILLEGAL, - M68K_INS_JMP, - M68K_INS_JSR, - M68K_INS_LEA, - M68K_INS_LINK, - M68K_INS_LPSTOP, - M68K_INS_LSL, - M68K_INS_LSR, - M68K_INS_MOVE, - M68K_INS_MOVEA, - M68K_INS_MOVEC, - M68K_INS_MOVEM, - M68K_INS_MOVEP, - M68K_INS_MOVEQ, - M68K_INS_MOVES, - M68K_INS_MOVE16, - M68K_INS_MULS, - M68K_INS_MULU, - M68K_INS_NBCD, - M68K_INS_NEG, - M68K_INS_NEGX, - M68K_INS_NOP, - M68K_INS_NOT, - M68K_INS_OR, - M68K_INS_ORI, - M68K_INS_PACK, - M68K_INS_PEA, - M68K_INS_PFLUSH, - M68K_INS_PFLUSHA, - M68K_INS_PFLUSHAN, - M68K_INS_PFLUSHN, - M68K_INS_PLOADR, - M68K_INS_PLOADW, - M68K_INS_PLPAR, - M68K_INS_PLPAW, - M68K_INS_PMOVE, - M68K_INS_PMOVEFD, - M68K_INS_PTESTR, - M68K_INS_PTESTW, - M68K_INS_PULSE, - M68K_INS_REMS, - M68K_INS_REMU, - M68K_INS_RESET, - M68K_INS_ROL, - M68K_INS_ROR, - M68K_INS_ROXL, - M68K_INS_ROXR, - M68K_INS_RTD, - M68K_INS_RTE, - M68K_INS_RTM, - M68K_INS_RTR, - M68K_INS_RTS, - M68K_INS_SBCD, - M68K_INS_ST, - M68K_INS_SF, - M68K_INS_SHI, - M68K_INS_SLS, - M68K_INS_SCC, - M68K_INS_SHS, - M68K_INS_SCS, - M68K_INS_SLO, - M68K_INS_SNE, - M68K_INS_SEQ, - M68K_INS_SVC, - M68K_INS_SVS, - M68K_INS_SPL, - M68K_INS_SMI, - M68K_INS_SGE, - M68K_INS_SLT, - M68K_INS_SGT, - M68K_INS_SLE, - M68K_INS_STOP, - M68K_INS_SUB, - M68K_INS_SUBA, - M68K_INS_SUBI, - M68K_INS_SUBQ, - M68K_INS_SUBX, - M68K_INS_SWAP, - M68K_INS_TAS, - M68K_INS_TRAP, - M68K_INS_TRAPV, - M68K_INS_TRAPT, - M68K_INS_TRAPF, - M68K_INS_TRAPHI, - M68K_INS_TRAPLS, - M68K_INS_TRAPCC, - M68K_INS_TRAPHS, - M68K_INS_TRAPCS, - M68K_INS_TRAPLO, - M68K_INS_TRAPNE, - M68K_INS_TRAPEQ, - M68K_INS_TRAPVC, - M68K_INS_TRAPVS, - M68K_INS_TRAPPL, - M68K_INS_TRAPMI, - M68K_INS_TRAPGE, - M68K_INS_TRAPLT, - M68K_INS_TRAPGT, - M68K_INS_TRAPLE, - M68K_INS_TST, - M68K_INS_UNLK, - M68K_INS_UNPK, - M68K_INS_ENDING, // <-- mark the end of the list of instructions -} m68k_insn; - -/// Group of M68K instructions -typedef enum m68k_group_type { - M68K_GRP_INVALID = 0, ///< CS_GRUP_INVALID - M68K_GRP_JUMP, ///< = CS_GRP_JUMP - M68K_GRP_RET = 3, ///< = CS_GRP_RET - M68K_GRP_IRET = 5, ///< = CS_GRP_IRET - M68K_GRP_BRANCH_RELATIVE = 7, ///< = CS_GRP_BRANCH_RELATIVE - - M68K_GRP_ENDING,// <-- mark the end of the list of groups -} m68k_group_type; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/mips.h b/.tools/python-revlibs/capstone/include/capstone/mips.h deleted file mode 100644 index 3394456..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/mips.h +++ /dev/null @@ -1,956 +0,0 @@ -#ifndef CAPSTONE_MIPS_H -#define CAPSTONE_MIPS_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -// GCC MIPS toolchain has a default macro called "mips" which breaks -// compilation -#undef mips - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// Operand type for instruction's operands -typedef enum mips_op_type { - MIPS_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - MIPS_OP_REG, ///< = CS_OP_REG (Register operand). - MIPS_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - MIPS_OP_MEM, ///< = CS_OP_MEM (Memory operand). -} mips_op_type; - -/// MIPS registers -typedef enum mips_reg { - MIPS_REG_INVALID = 0, - // General purpose registers - MIPS_REG_PC, - - MIPS_REG_0, - MIPS_REG_1, - MIPS_REG_2, - MIPS_REG_3, - MIPS_REG_4, - MIPS_REG_5, - MIPS_REG_6, - MIPS_REG_7, - MIPS_REG_8, - MIPS_REG_9, - MIPS_REG_10, - MIPS_REG_11, - MIPS_REG_12, - MIPS_REG_13, - MIPS_REG_14, - MIPS_REG_15, - MIPS_REG_16, - MIPS_REG_17, - MIPS_REG_18, - MIPS_REG_19, - MIPS_REG_20, - MIPS_REG_21, - MIPS_REG_22, - MIPS_REG_23, - MIPS_REG_24, - MIPS_REG_25, - MIPS_REG_26, - MIPS_REG_27, - MIPS_REG_28, - MIPS_REG_29, - MIPS_REG_30, - MIPS_REG_31, - - // DSP registers - MIPS_REG_DSPCCOND, - MIPS_REG_DSPCARRY, - MIPS_REG_DSPEFI, - MIPS_REG_DSPOUTFLAG, - MIPS_REG_DSPOUTFLAG16_19, - MIPS_REG_DSPOUTFLAG20, - MIPS_REG_DSPOUTFLAG21, - MIPS_REG_DSPOUTFLAG22, - MIPS_REG_DSPOUTFLAG23, - MIPS_REG_DSPPOS, - MIPS_REG_DSPSCOUNT, - - // ACC registers - MIPS_REG_AC0, - MIPS_REG_AC1, - MIPS_REG_AC2, - MIPS_REG_AC3, - - // COP registers - MIPS_REG_CC0, - MIPS_REG_CC1, - MIPS_REG_CC2, - MIPS_REG_CC3, - MIPS_REG_CC4, - MIPS_REG_CC5, - MIPS_REG_CC6, - MIPS_REG_CC7, - - // FPU registers - MIPS_REG_F0, - MIPS_REG_F1, - MIPS_REG_F2, - MIPS_REG_F3, - MIPS_REG_F4, - MIPS_REG_F5, - MIPS_REG_F6, - MIPS_REG_F7, - MIPS_REG_F8, - MIPS_REG_F9, - MIPS_REG_F10, - MIPS_REG_F11, - MIPS_REG_F12, - MIPS_REG_F13, - MIPS_REG_F14, - MIPS_REG_F15, - MIPS_REG_F16, - MIPS_REG_F17, - MIPS_REG_F18, - MIPS_REG_F19, - MIPS_REG_F20, - MIPS_REG_F21, - MIPS_REG_F22, - MIPS_REG_F23, - MIPS_REG_F24, - MIPS_REG_F25, - MIPS_REG_F26, - MIPS_REG_F27, - MIPS_REG_F28, - MIPS_REG_F29, - MIPS_REG_F30, - MIPS_REG_F31, - - MIPS_REG_FCC0, - MIPS_REG_FCC1, - MIPS_REG_FCC2, - MIPS_REG_FCC3, - MIPS_REG_FCC4, - MIPS_REG_FCC5, - MIPS_REG_FCC6, - MIPS_REG_FCC7, - - // AFPR128 - MIPS_REG_W0, - MIPS_REG_W1, - MIPS_REG_W2, - MIPS_REG_W3, - MIPS_REG_W4, - MIPS_REG_W5, - MIPS_REG_W6, - MIPS_REG_W7, - MIPS_REG_W8, - MIPS_REG_W9, - MIPS_REG_W10, - MIPS_REG_W11, - MIPS_REG_W12, - MIPS_REG_W13, - MIPS_REG_W14, - MIPS_REG_W15, - MIPS_REG_W16, - MIPS_REG_W17, - MIPS_REG_W18, - MIPS_REG_W19, - MIPS_REG_W20, - MIPS_REG_W21, - MIPS_REG_W22, - MIPS_REG_W23, - MIPS_REG_W24, - MIPS_REG_W25, - MIPS_REG_W26, - MIPS_REG_W27, - MIPS_REG_W28, - MIPS_REG_W29, - MIPS_REG_W30, - MIPS_REG_W31, - - MIPS_REG_HI, - MIPS_REG_LO, - - MIPS_REG_P0, - MIPS_REG_P1, - MIPS_REG_P2, - - MIPS_REG_MPL0, - MIPS_REG_MPL1, - MIPS_REG_MPL2, - - MIPS_REG_ENDING, // <-- mark the end of the list or registers - - // alias registers - MIPS_REG_ZERO = MIPS_REG_0, - MIPS_REG_AT = MIPS_REG_1, - MIPS_REG_V0 = MIPS_REG_2, - MIPS_REG_V1 = MIPS_REG_3, - MIPS_REG_A0 = MIPS_REG_4, - MIPS_REG_A1 = MIPS_REG_5, - MIPS_REG_A2 = MIPS_REG_6, - MIPS_REG_A3 = MIPS_REG_7, - MIPS_REG_T0 = MIPS_REG_8, - MIPS_REG_T1 = MIPS_REG_9, - MIPS_REG_T2 = MIPS_REG_10, - MIPS_REG_T3 = MIPS_REG_11, - MIPS_REG_T4 = MIPS_REG_12, - MIPS_REG_T5 = MIPS_REG_13, - MIPS_REG_T6 = MIPS_REG_14, - MIPS_REG_T7 = MIPS_REG_15, - MIPS_REG_S0 = MIPS_REG_16, - MIPS_REG_S1 = MIPS_REG_17, - MIPS_REG_S2 = MIPS_REG_18, - MIPS_REG_S3 = MIPS_REG_19, - MIPS_REG_S4 = MIPS_REG_20, - MIPS_REG_S5 = MIPS_REG_21, - MIPS_REG_S6 = MIPS_REG_22, - MIPS_REG_S7 = MIPS_REG_23, - MIPS_REG_T8 = MIPS_REG_24, - MIPS_REG_T9 = MIPS_REG_25, - MIPS_REG_K0 = MIPS_REG_26, - MIPS_REG_K1 = MIPS_REG_27, - MIPS_REG_GP = MIPS_REG_28, - MIPS_REG_SP = MIPS_REG_29, - MIPS_REG_FP = MIPS_REG_30, MIPS_REG_S8 = MIPS_REG_30, - MIPS_REG_RA = MIPS_REG_31, - - MIPS_REG_HI0 = MIPS_REG_AC0, - MIPS_REG_HI1 = MIPS_REG_AC1, - MIPS_REG_HI2 = MIPS_REG_AC2, - MIPS_REG_HI3 = MIPS_REG_AC3, - - MIPS_REG_LO0 = MIPS_REG_HI0, - MIPS_REG_LO1 = MIPS_REG_HI1, - MIPS_REG_LO2 = MIPS_REG_HI2, - MIPS_REG_LO3 = MIPS_REG_HI3, -} mips_reg; - -/// Instruction's operand referring to memory -/// This is associated with MIPS_OP_MEM operand type above -typedef struct mips_op_mem { - mips_reg base; ///< base register - int64_t disp; ///< displacement/offset value -} mips_op_mem; - -/// Instruction operand -typedef struct cs_mips_op { - mips_op_type type; ///< operand type - union { - mips_reg reg; ///< register id for REG operand - int64_t imm; ///< immediate value for IMM operand - mips_op_mem mem; ///< base/index/scale/disp value for MEM operand - }; -} cs_mips_op; - -/// Instruction structure -typedef struct cs_mips { - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - cs_mips_op operands[10]; ///< operands for this instruction. -} cs_mips; - -/// MIPS instruction -typedef enum mips_insn { - MIPS_INS_INVALID = 0, - - MIPS_INS_ABSQ_S, - MIPS_INS_ADD, - MIPS_INS_ADDIUPC, - MIPS_INS_ADDIUR1SP, - MIPS_INS_ADDIUR2, - MIPS_INS_ADDIUS5, - MIPS_INS_ADDIUSP, - MIPS_INS_ADDQH, - MIPS_INS_ADDQH_R, - MIPS_INS_ADDQ, - MIPS_INS_ADDQ_S, - MIPS_INS_ADDSC, - MIPS_INS_ADDS_A, - MIPS_INS_ADDS_S, - MIPS_INS_ADDS_U, - MIPS_INS_ADDU16, - MIPS_INS_ADDUH, - MIPS_INS_ADDUH_R, - MIPS_INS_ADDU, - MIPS_INS_ADDU_S, - MIPS_INS_ADDVI, - MIPS_INS_ADDV, - MIPS_INS_ADDWC, - MIPS_INS_ADD_A, - MIPS_INS_ADDI, - MIPS_INS_ADDIU, - MIPS_INS_ALIGN, - MIPS_INS_ALUIPC, - MIPS_INS_AND, - MIPS_INS_AND16, - MIPS_INS_ANDI16, - MIPS_INS_ANDI, - MIPS_INS_APPEND, - MIPS_INS_ASUB_S, - MIPS_INS_ASUB_U, - MIPS_INS_AUI, - MIPS_INS_AUIPC, - MIPS_INS_AVER_S, - MIPS_INS_AVER_U, - MIPS_INS_AVE_S, - MIPS_INS_AVE_U, - MIPS_INS_B16, - MIPS_INS_BADDU, - MIPS_INS_BAL, - MIPS_INS_BALC, - MIPS_INS_BALIGN, - MIPS_INS_BBIT0, - MIPS_INS_BBIT032, - MIPS_INS_BBIT1, - MIPS_INS_BBIT132, - MIPS_INS_BC, - MIPS_INS_BC0F, - MIPS_INS_BC0FL, - MIPS_INS_BC0T, - MIPS_INS_BC0TL, - MIPS_INS_BC1EQZ, - MIPS_INS_BC1F, - MIPS_INS_BC1FL, - MIPS_INS_BC1NEZ, - MIPS_INS_BC1T, - MIPS_INS_BC1TL, - MIPS_INS_BC2EQZ, - MIPS_INS_BC2F, - MIPS_INS_BC2FL, - MIPS_INS_BC2NEZ, - MIPS_INS_BC2T, - MIPS_INS_BC2TL, - MIPS_INS_BC3F, - MIPS_INS_BC3FL, - MIPS_INS_BC3T, - MIPS_INS_BC3TL, - MIPS_INS_BCLRI, - MIPS_INS_BCLR, - MIPS_INS_BEQ, - MIPS_INS_BEQC, - MIPS_INS_BEQL, - MIPS_INS_BEQZ16, - MIPS_INS_BEQZALC, - MIPS_INS_BEQZC, - MIPS_INS_BGEC, - MIPS_INS_BGEUC, - MIPS_INS_BGEZ, - MIPS_INS_BGEZAL, - MIPS_INS_BGEZALC, - MIPS_INS_BGEZALL, - MIPS_INS_BGEZALS, - MIPS_INS_BGEZC, - MIPS_INS_BGEZL, - MIPS_INS_BGTZ, - MIPS_INS_BGTZALC, - MIPS_INS_BGTZC, - MIPS_INS_BGTZL, - MIPS_INS_BINSLI, - MIPS_INS_BINSL, - MIPS_INS_BINSRI, - MIPS_INS_BINSR, - MIPS_INS_BITREV, - MIPS_INS_BITSWAP, - MIPS_INS_BLEZ, - MIPS_INS_BLEZALC, - MIPS_INS_BLEZC, - MIPS_INS_BLEZL, - MIPS_INS_BLTC, - MIPS_INS_BLTUC, - MIPS_INS_BLTZ, - MIPS_INS_BLTZAL, - MIPS_INS_BLTZALC, - MIPS_INS_BLTZALL, - MIPS_INS_BLTZALS, - MIPS_INS_BLTZC, - MIPS_INS_BLTZL, - MIPS_INS_BMNZI, - MIPS_INS_BMNZ, - MIPS_INS_BMZI, - MIPS_INS_BMZ, - MIPS_INS_BNE, - MIPS_INS_BNEC, - MIPS_INS_BNEGI, - MIPS_INS_BNEG, - MIPS_INS_BNEL, - MIPS_INS_BNEZ16, - MIPS_INS_BNEZALC, - MIPS_INS_BNEZC, - MIPS_INS_BNVC, - MIPS_INS_BNZ, - MIPS_INS_BOVC, - MIPS_INS_BPOSGE32, - MIPS_INS_BREAK, - MIPS_INS_BREAK16, - MIPS_INS_BSELI, - MIPS_INS_BSEL, - MIPS_INS_BSETI, - MIPS_INS_BSET, - MIPS_INS_BZ, - MIPS_INS_BEQZ, - MIPS_INS_B, - MIPS_INS_BNEZ, - MIPS_INS_BTEQZ, - MIPS_INS_BTNEZ, - MIPS_INS_CACHE, - MIPS_INS_CEIL, - MIPS_INS_CEQI, - MIPS_INS_CEQ, - MIPS_INS_CFC1, - MIPS_INS_CFCMSA, - MIPS_INS_CINS, - MIPS_INS_CINS32, - MIPS_INS_CLASS, - MIPS_INS_CLEI_S, - MIPS_INS_CLEI_U, - MIPS_INS_CLE_S, - MIPS_INS_CLE_U, - MIPS_INS_CLO, - MIPS_INS_CLTI_S, - MIPS_INS_CLTI_U, - MIPS_INS_CLT_S, - MIPS_INS_CLT_U, - MIPS_INS_CLZ, - MIPS_INS_CMPGDU, - MIPS_INS_CMPGU, - MIPS_INS_CMPU, - MIPS_INS_CMP, - MIPS_INS_COPY_S, - MIPS_INS_COPY_U, - MIPS_INS_CTC1, - MIPS_INS_CTCMSA, - MIPS_INS_CVT, - MIPS_INS_C, - MIPS_INS_CMPI, - MIPS_INS_DADD, - MIPS_INS_DADDI, - MIPS_INS_DADDIU, - MIPS_INS_DADDU, - MIPS_INS_DAHI, - MIPS_INS_DALIGN, - MIPS_INS_DATI, - MIPS_INS_DAUI, - MIPS_INS_DBITSWAP, - MIPS_INS_DCLO, - MIPS_INS_DCLZ, - MIPS_INS_DDIV, - MIPS_INS_DDIVU, - MIPS_INS_DERET, - MIPS_INS_DEXT, - MIPS_INS_DEXTM, - MIPS_INS_DEXTU, - MIPS_INS_DI, - MIPS_INS_DINS, - MIPS_INS_DINSM, - MIPS_INS_DINSU, - MIPS_INS_DIV, - MIPS_INS_DIVU, - MIPS_INS_DIV_S, - MIPS_INS_DIV_U, - MIPS_INS_DLSA, - MIPS_INS_DMFC0, - MIPS_INS_DMFC1, - MIPS_INS_DMFC2, - MIPS_INS_DMOD, - MIPS_INS_DMODU, - MIPS_INS_DMTC0, - MIPS_INS_DMTC1, - MIPS_INS_DMTC2, - MIPS_INS_DMUH, - MIPS_INS_DMUHU, - MIPS_INS_DMUL, - MIPS_INS_DMULT, - MIPS_INS_DMULTU, - MIPS_INS_DMULU, - MIPS_INS_DOTP_S, - MIPS_INS_DOTP_U, - MIPS_INS_DPADD_S, - MIPS_INS_DPADD_U, - MIPS_INS_DPAQX_SA, - MIPS_INS_DPAQX_S, - MIPS_INS_DPAQ_SA, - MIPS_INS_DPAQ_S, - MIPS_INS_DPAU, - MIPS_INS_DPAX, - MIPS_INS_DPA, - MIPS_INS_DPOP, - MIPS_INS_DPSQX_SA, - MIPS_INS_DPSQX_S, - MIPS_INS_DPSQ_SA, - MIPS_INS_DPSQ_S, - MIPS_INS_DPSUB_S, - MIPS_INS_DPSUB_U, - MIPS_INS_DPSU, - MIPS_INS_DPSX, - MIPS_INS_DPS, - MIPS_INS_DROTR, - MIPS_INS_DROTR32, - MIPS_INS_DROTRV, - MIPS_INS_DSBH, - MIPS_INS_DSHD, - MIPS_INS_DSLL, - MIPS_INS_DSLL32, - MIPS_INS_DSLLV, - MIPS_INS_DSRA, - MIPS_INS_DSRA32, - MIPS_INS_DSRAV, - MIPS_INS_DSRL, - MIPS_INS_DSRL32, - MIPS_INS_DSRLV, - MIPS_INS_DSUB, - MIPS_INS_DSUBU, - MIPS_INS_EHB, - MIPS_INS_EI, - MIPS_INS_ERET, - MIPS_INS_EXT, - MIPS_INS_EXTP, - MIPS_INS_EXTPDP, - MIPS_INS_EXTPDPV, - MIPS_INS_EXTPV, - MIPS_INS_EXTRV_RS, - MIPS_INS_EXTRV_R, - MIPS_INS_EXTRV_S, - MIPS_INS_EXTRV, - MIPS_INS_EXTR_RS, - MIPS_INS_EXTR_R, - MIPS_INS_EXTR_S, - MIPS_INS_EXTR, - MIPS_INS_EXTS, - MIPS_INS_EXTS32, - MIPS_INS_ABS, - MIPS_INS_FADD, - MIPS_INS_FCAF, - MIPS_INS_FCEQ, - MIPS_INS_FCLASS, - MIPS_INS_FCLE, - MIPS_INS_FCLT, - MIPS_INS_FCNE, - MIPS_INS_FCOR, - MIPS_INS_FCUEQ, - MIPS_INS_FCULE, - MIPS_INS_FCULT, - MIPS_INS_FCUNE, - MIPS_INS_FCUN, - MIPS_INS_FDIV, - MIPS_INS_FEXDO, - MIPS_INS_FEXP2, - MIPS_INS_FEXUPL, - MIPS_INS_FEXUPR, - MIPS_INS_FFINT_S, - MIPS_INS_FFINT_U, - MIPS_INS_FFQL, - MIPS_INS_FFQR, - MIPS_INS_FILL, - MIPS_INS_FLOG2, - MIPS_INS_FLOOR, - MIPS_INS_FMADD, - MIPS_INS_FMAX_A, - MIPS_INS_FMAX, - MIPS_INS_FMIN_A, - MIPS_INS_FMIN, - MIPS_INS_MOV, - MIPS_INS_FMSUB, - MIPS_INS_FMUL, - MIPS_INS_MUL, - MIPS_INS_NEG, - MIPS_INS_FRCP, - MIPS_INS_FRINT, - MIPS_INS_FRSQRT, - MIPS_INS_FSAF, - MIPS_INS_FSEQ, - MIPS_INS_FSLE, - MIPS_INS_FSLT, - MIPS_INS_FSNE, - MIPS_INS_FSOR, - MIPS_INS_FSQRT, - MIPS_INS_SQRT, - MIPS_INS_FSUB, - MIPS_INS_SUB, - MIPS_INS_FSUEQ, - MIPS_INS_FSULE, - MIPS_INS_FSULT, - MIPS_INS_FSUNE, - MIPS_INS_FSUN, - MIPS_INS_FTINT_S, - MIPS_INS_FTINT_U, - MIPS_INS_FTQ, - MIPS_INS_FTRUNC_S, - MIPS_INS_FTRUNC_U, - MIPS_INS_HADD_S, - MIPS_INS_HADD_U, - MIPS_INS_HSUB_S, - MIPS_INS_HSUB_U, - MIPS_INS_ILVEV, - MIPS_INS_ILVL, - MIPS_INS_ILVOD, - MIPS_INS_ILVR, - MIPS_INS_INS, - MIPS_INS_INSERT, - MIPS_INS_INSV, - MIPS_INS_INSVE, - MIPS_INS_J, - MIPS_INS_JAL, - MIPS_INS_JALR, - MIPS_INS_JALRS16, - MIPS_INS_JALRS, - MIPS_INS_JALS, - MIPS_INS_JALX, - MIPS_INS_JIALC, - MIPS_INS_JIC, - MIPS_INS_JR, - MIPS_INS_JR16, - MIPS_INS_JRADDIUSP, - MIPS_INS_JRC, - MIPS_INS_JALRC, - MIPS_INS_LB, - MIPS_INS_LBU16, - MIPS_INS_LBUX, - MIPS_INS_LBU, - MIPS_INS_LD, - MIPS_INS_LDC1, - MIPS_INS_LDC2, - MIPS_INS_LDC3, - MIPS_INS_LDI, - MIPS_INS_LDL, - MIPS_INS_LDPC, - MIPS_INS_LDR, - MIPS_INS_LDXC1, - MIPS_INS_LH, - MIPS_INS_LHU16, - MIPS_INS_LHX, - MIPS_INS_LHU, - MIPS_INS_LI16, - MIPS_INS_LL, - MIPS_INS_LLD, - MIPS_INS_LSA, - MIPS_INS_LUXC1, - MIPS_INS_LUI, - MIPS_INS_LW, - MIPS_INS_LW16, - MIPS_INS_LWC1, - MIPS_INS_LWC2, - MIPS_INS_LWC3, - MIPS_INS_LWL, - MIPS_INS_LWM16, - MIPS_INS_LWM32, - MIPS_INS_LWPC, - MIPS_INS_LWP, - MIPS_INS_LWR, - MIPS_INS_LWUPC, - MIPS_INS_LWU, - MIPS_INS_LWX, - MIPS_INS_LWXC1, - MIPS_INS_LWXS, - MIPS_INS_LI, - MIPS_INS_MADD, - MIPS_INS_MADDF, - MIPS_INS_MADDR_Q, - MIPS_INS_MADDU, - MIPS_INS_MADDV, - MIPS_INS_MADD_Q, - MIPS_INS_MAQ_SA, - MIPS_INS_MAQ_S, - MIPS_INS_MAXA, - MIPS_INS_MAXI_S, - MIPS_INS_MAXI_U, - MIPS_INS_MAX_A, - MIPS_INS_MAX, - MIPS_INS_MAX_S, - MIPS_INS_MAX_U, - MIPS_INS_MFC0, - MIPS_INS_MFC1, - MIPS_INS_MFC2, - MIPS_INS_MFHC1, - MIPS_INS_MFHI, - MIPS_INS_MFLO, - MIPS_INS_MINA, - MIPS_INS_MINI_S, - MIPS_INS_MINI_U, - MIPS_INS_MIN_A, - MIPS_INS_MIN, - MIPS_INS_MIN_S, - MIPS_INS_MIN_U, - MIPS_INS_MOD, - MIPS_INS_MODSUB, - MIPS_INS_MODU, - MIPS_INS_MOD_S, - MIPS_INS_MOD_U, - MIPS_INS_MOVE, - MIPS_INS_MOVEP, - MIPS_INS_MOVF, - MIPS_INS_MOVN, - MIPS_INS_MOVT, - MIPS_INS_MOVZ, - MIPS_INS_MSUB, - MIPS_INS_MSUBF, - MIPS_INS_MSUBR_Q, - MIPS_INS_MSUBU, - MIPS_INS_MSUBV, - MIPS_INS_MSUB_Q, - MIPS_INS_MTC0, - MIPS_INS_MTC1, - MIPS_INS_MTC2, - MIPS_INS_MTHC1, - MIPS_INS_MTHI, - MIPS_INS_MTHLIP, - MIPS_INS_MTLO, - MIPS_INS_MTM0, - MIPS_INS_MTM1, - MIPS_INS_MTM2, - MIPS_INS_MTP0, - MIPS_INS_MTP1, - MIPS_INS_MTP2, - MIPS_INS_MUH, - MIPS_INS_MUHU, - MIPS_INS_MULEQ_S, - MIPS_INS_MULEU_S, - MIPS_INS_MULQ_RS, - MIPS_INS_MULQ_S, - MIPS_INS_MULR_Q, - MIPS_INS_MULSAQ_S, - MIPS_INS_MULSA, - MIPS_INS_MULT, - MIPS_INS_MULTU, - MIPS_INS_MULU, - MIPS_INS_MULV, - MIPS_INS_MUL_Q, - MIPS_INS_MUL_S, - MIPS_INS_NLOC, - MIPS_INS_NLZC, - MIPS_INS_NMADD, - MIPS_INS_NMSUB, - MIPS_INS_NOR, - MIPS_INS_NORI, - MIPS_INS_NOT16, - MIPS_INS_NOT, - MIPS_INS_OR, - MIPS_INS_OR16, - MIPS_INS_ORI, - MIPS_INS_PACKRL, - MIPS_INS_PAUSE, - MIPS_INS_PCKEV, - MIPS_INS_PCKOD, - MIPS_INS_PCNT, - MIPS_INS_PICK, - MIPS_INS_POP, - MIPS_INS_PRECEQU, - MIPS_INS_PRECEQ, - MIPS_INS_PRECEU, - MIPS_INS_PRECRQU_S, - MIPS_INS_PRECRQ, - MIPS_INS_PRECRQ_RS, - MIPS_INS_PRECR, - MIPS_INS_PRECR_SRA, - MIPS_INS_PRECR_SRA_R, - MIPS_INS_PREF, - MIPS_INS_PREPEND, - MIPS_INS_RADDU, - MIPS_INS_RDDSP, - MIPS_INS_RDHWR, - MIPS_INS_REPLV, - MIPS_INS_REPL, - MIPS_INS_RINT, - MIPS_INS_ROTR, - MIPS_INS_ROTRV, - MIPS_INS_ROUND, - MIPS_INS_SAT_S, - MIPS_INS_SAT_U, - MIPS_INS_SB, - MIPS_INS_SB16, - MIPS_INS_SC, - MIPS_INS_SCD, - MIPS_INS_SD, - MIPS_INS_SDBBP, - MIPS_INS_SDBBP16, - MIPS_INS_SDC1, - MIPS_INS_SDC2, - MIPS_INS_SDC3, - MIPS_INS_SDL, - MIPS_INS_SDR, - MIPS_INS_SDXC1, - MIPS_INS_SEB, - MIPS_INS_SEH, - MIPS_INS_SELEQZ, - MIPS_INS_SELNEZ, - MIPS_INS_SEL, - MIPS_INS_SEQ, - MIPS_INS_SEQI, - MIPS_INS_SH, - MIPS_INS_SH16, - MIPS_INS_SHF, - MIPS_INS_SHILO, - MIPS_INS_SHILOV, - MIPS_INS_SHLLV, - MIPS_INS_SHLLV_S, - MIPS_INS_SHLL, - MIPS_INS_SHLL_S, - MIPS_INS_SHRAV, - MIPS_INS_SHRAV_R, - MIPS_INS_SHRA, - MIPS_INS_SHRA_R, - MIPS_INS_SHRLV, - MIPS_INS_SHRL, - MIPS_INS_SLDI, - MIPS_INS_SLD, - MIPS_INS_SLL, - MIPS_INS_SLL16, - MIPS_INS_SLLI, - MIPS_INS_SLLV, - MIPS_INS_SLT, - MIPS_INS_SLTI, - MIPS_INS_SLTIU, - MIPS_INS_SLTU, - MIPS_INS_SNE, - MIPS_INS_SNEI, - MIPS_INS_SPLATI, - MIPS_INS_SPLAT, - MIPS_INS_SRA, - MIPS_INS_SRAI, - MIPS_INS_SRARI, - MIPS_INS_SRAR, - MIPS_INS_SRAV, - MIPS_INS_SRL, - MIPS_INS_SRL16, - MIPS_INS_SRLI, - MIPS_INS_SRLRI, - MIPS_INS_SRLR, - MIPS_INS_SRLV, - MIPS_INS_SSNOP, - MIPS_INS_ST, - MIPS_INS_SUBQH, - MIPS_INS_SUBQH_R, - MIPS_INS_SUBQ, - MIPS_INS_SUBQ_S, - MIPS_INS_SUBSUS_U, - MIPS_INS_SUBSUU_S, - MIPS_INS_SUBS_S, - MIPS_INS_SUBS_U, - MIPS_INS_SUBU16, - MIPS_INS_SUBUH, - MIPS_INS_SUBUH_R, - MIPS_INS_SUBU, - MIPS_INS_SUBU_S, - MIPS_INS_SUBVI, - MIPS_INS_SUBV, - MIPS_INS_SUXC1, - MIPS_INS_SW, - MIPS_INS_SW16, - MIPS_INS_SWC1, - MIPS_INS_SWC2, - MIPS_INS_SWC3, - MIPS_INS_SWL, - MIPS_INS_SWM16, - MIPS_INS_SWM32, - MIPS_INS_SWP, - MIPS_INS_SWR, - MIPS_INS_SWXC1, - MIPS_INS_SYNC, - MIPS_INS_SYNCI, - MIPS_INS_SYSCALL, - MIPS_INS_TEQ, - MIPS_INS_TEQI, - MIPS_INS_TGE, - MIPS_INS_TGEI, - MIPS_INS_TGEIU, - MIPS_INS_TGEU, - MIPS_INS_TLBP, - MIPS_INS_TLBR, - MIPS_INS_TLBWI, - MIPS_INS_TLBWR, - MIPS_INS_TLT, - MIPS_INS_TLTI, - MIPS_INS_TLTIU, - MIPS_INS_TLTU, - MIPS_INS_TNE, - MIPS_INS_TNEI, - MIPS_INS_TRUNC, - MIPS_INS_V3MULU, - MIPS_INS_VMM0, - MIPS_INS_VMULU, - MIPS_INS_VSHF, - MIPS_INS_WAIT, - MIPS_INS_WRDSP, - MIPS_INS_WSBH, - MIPS_INS_XOR, - MIPS_INS_XOR16, - MIPS_INS_XORI, - - //> some alias instructions - MIPS_INS_NOP, - MIPS_INS_NEGU, - - //> special instructions - MIPS_INS_JALR_HB, // jump and link with Hazard Barrier - MIPS_INS_JR_HB, // jump register with Hazard Barrier - - MIPS_INS_ENDING, -} mips_insn; - -/// Group of MIPS instructions -typedef enum mips_insn_group { - MIPS_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - MIPS_GRP_JUMP, ///< = CS_GRP_JUMP - // all call instructions - MIPS_GRP_CALL, ///< = CS_GRP_CALL - // all return instructions - MIPS_GRP_RET, ///< = CS_GRP_RET - // all interrupt instructions (int+syscall) - MIPS_GRP_INT, ///< = CS_GRP_INT - // all interrupt return instructions - MIPS_GRP_IRET, ///< = CS_GRP_IRET - // all privileged instructions - MIPS_GRP_PRIVILEGE, ///< = CS_GRP_PRIVILEGE - // all relative branching instructions - MIPS_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE - - // Architecture-specific groups - MIPS_GRP_BITCOUNT = 128, - MIPS_GRP_DSP, - MIPS_GRP_DSPR2, - MIPS_GRP_FPIDX, - MIPS_GRP_MSA, - MIPS_GRP_MIPS32R2, - MIPS_GRP_MIPS64, - MIPS_GRP_MIPS64R2, - MIPS_GRP_SEINREG, - MIPS_GRP_STDENC, - MIPS_GRP_SWAP, - MIPS_GRP_MICROMIPS, - MIPS_GRP_MIPS16MODE, - MIPS_GRP_FP64BIT, - MIPS_GRP_NONANSFPMATH, - MIPS_GRP_NOTFP64BIT, - MIPS_GRP_NOTINMICROMIPS, - MIPS_GRP_NOTNACL, - MIPS_GRP_NOTMIPS32R6, - MIPS_GRP_NOTMIPS64R6, - MIPS_GRP_CNMIPS, - MIPS_GRP_MIPS32, - MIPS_GRP_MIPS32R6, - MIPS_GRP_MIPS64R6, - MIPS_GRP_MIPS2, - MIPS_GRP_MIPS3, - MIPS_GRP_MIPS3_32, - MIPS_GRP_MIPS3_32R2, - MIPS_GRP_MIPS4_32, - MIPS_GRP_MIPS4_32R2, - MIPS_GRP_MIPS5_32R2, - MIPS_GRP_GP32BIT, - MIPS_GRP_GP64BIT, - - MIPS_GRP_ENDING, -} mips_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/mos65xx.h b/.tools/python-revlibs/capstone/include/capstone/mos65xx.h deleted file mode 100644 index 13c2788..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/mos65xx.h +++ /dev/null @@ -1,204 +0,0 @@ -#ifndef CAPSTONE_MOS65XX_H -#define CAPSTONE_MOS65XX_H - -/* Capstone Disassembly Engine */ -/* By Sebastian Macke C99 is supported -#include -#endif // (_MSC_VER < 1800) || defined(_KERNEL_MODE) - -#else -// not MSVC -> C99 is supported -#include -#endif // !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) && (defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64)) - - -// handle inttypes.h / stdint.h compatibility -#if defined(_WIN32_WCE) && (_WIN32_WCE < 0x800) -#include "windowsce/stdint.h" -#endif // defined(_WIN32_WCE) && (_WIN32_WCE < 0x800) - -#if defined(CAPSTONE_HAS_OSXKERNEL) || (defined(_MSC_VER) && (_MSC_VER <= 1700 || defined(_KERNEL_MODE))) -// this system does not have inttypes.h - -#if defined(_MSC_VER) && (_MSC_VER <= 1600 || defined(_KERNEL_MODE)) -// this system does not have stdint.h -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef signed long long int64_t; -typedef unsigned long long uint64_t; -#endif // defined(_MSC_VER) && (_MSC_VER <= 1600 || defined(_KERNEL_MODE)) - -#if defined(_MSC_VER) && (_MSC_VER < 1600 || defined(_KERNEL_MODE)) -#define INT8_MIN (-127i8 - 1) -#define INT16_MIN (-32767i16 - 1) -#define INT32_MIN (-2147483647i32 - 1) -#define INT64_MIN (-9223372036854775807i64 - 1) -#define INT8_MAX 127i8 -#define INT16_MAX 32767i16 -#define INT32_MAX 2147483647i32 -#define INT64_MAX 9223372036854775807i64 -#define UINT8_MAX 0xffui8 -#define UINT16_MAX 0xffffui16 -#define UINT32_MAX 0xffffffffui32 -#define UINT64_MAX 0xffffffffffffffffui64 -#endif // defined(_MSC_VER) && (_MSC_VER < 1600 || defined(_KERNEL_MODE)) - -#ifdef CAPSTONE_HAS_OSXKERNEL -// this system has stdint.h -#include -#endif - -#define __PRI_8_LENGTH_MODIFIER__ "hh" -#define __PRI_64_LENGTH_MODIFIER__ "ll" - -#define PRId8 __PRI_8_LENGTH_MODIFIER__ "d" -#define PRIi8 __PRI_8_LENGTH_MODIFIER__ "i" -#define PRIo8 __PRI_8_LENGTH_MODIFIER__ "o" -#define PRIu8 __PRI_8_LENGTH_MODIFIER__ "u" -#define PRIx8 __PRI_8_LENGTH_MODIFIER__ "x" -#define PRIX8 __PRI_8_LENGTH_MODIFIER__ "X" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" - -#if defined(_MSC_VER) && _MSC_VER <= 1700 -#define PRId32 "ld" -#define PRIi32 "li" -#define PRIo32 "lo" -#define PRIu32 "lu" -#define PRIx32 "lx" -#define PRIX32 "lX" -#else // OSX -#define PRId32 "d" -#define PRIi32 "i" -#define PRIo32 "o" -#define PRIu32 "u" -#define PRIx32 "x" -#define PRIX32 "X" -#endif // defined(_MSC_VER) && _MSC_VER <= 1700 - -#if defined(_MSC_VER) && _MSC_VER <= 1700 -// redefine functions from inttypes.h used in cstool -#define strtoull _strtoui64 -#endif - -#define PRId64 __PRI_64_LENGTH_MODIFIER__ "d" -#define PRIi64 __PRI_64_LENGTH_MODIFIER__ "i" -#define PRIo64 __PRI_64_LENGTH_MODIFIER__ "o" -#define PRIu64 __PRI_64_LENGTH_MODIFIER__ "u" -#define PRIx64 __PRI_64_LENGTH_MODIFIER__ "x" -#define PRIX64 __PRI_64_LENGTH_MODIFIER__ "X" - -#else -// this system has inttypes.h by default -#include -#endif // defined(CAPSTONE_HAS_OSXKERNEL) || (defined(_MSC_VER) && (_MSC_VER <= 1700 || defined(_KERNEL_MODE))) - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/ppc.h b/.tools/python-revlibs/capstone/include/capstone/ppc.h deleted file mode 100644 index 0d4ffe5..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/ppc.h +++ /dev/null @@ -1,2108 +0,0 @@ -#ifndef CAPSTONE_PPC_H -#define CAPSTONE_PPC_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// PPC branch codes for some branch instructions -typedef enum ppc_bc { - PPC_BC_INVALID = 0, - PPC_BC_LT = (0 << 5) | 12, - PPC_BC_LE = (1 << 5) | 4, - PPC_BC_EQ = (2 << 5) | 12, - PPC_BC_GE = (0 << 5) | 4, - PPC_BC_GT = (1 << 5) | 12, - PPC_BC_NE = (2 << 5) | 4, - PPC_BC_UN = (3 << 5) | 12, - PPC_BC_NU = (3 << 5) | 4, - - // extra conditions - PPC_BC_SO = (4 << 5) | 12, ///< summary overflow - PPC_BC_NS = (4 << 5) | 4, ///< not summary overflow -} ppc_bc; - -/// PPC branch hint for some branch instructions -typedef enum ppc_bh { - PPC_BH_INVALID = 0, ///< no hint - PPC_BH_PLUS, ///< PLUS hint - PPC_BH_MINUS, ///< MINUS hint -} ppc_bh; - -/// Operand type for instruction's operands -typedef enum ppc_op_type { - PPC_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - PPC_OP_REG, ///< = CS_OP_REG (Register operand). - PPC_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - PPC_OP_MEM, ///< = CS_OP_MEM (Memory operand). - PPC_OP_CRX = 64, ///< Condition Register field -} ppc_op_type; - -/// PPC registers -typedef enum ppc_reg { - PPC_REG_INVALID = 0, - - PPC_REG_CARRY = 2, - PPC_REG_CTR = 3, - PPC_REG_LR = 5, - PPC_REG_RM = 6, - PPC_REG_VRSAVE = 8, - PPC_REG_XER = 9, - PPC_REG_ZERO = 10, - PPC_REG_CR0 = 12, - PPC_REG_CR1 = 13, - PPC_REG_CR2 = 14, - PPC_REG_CR3 = 15, - PPC_REG_CR4 = 16, - PPC_REG_CR5 = 17, - PPC_REG_CR6 = 18, - PPC_REG_CR7 = 19, - PPC_REG_CTR8 = 20, - PPC_REG_F0 = 21, - PPC_REG_F1 = 22, - PPC_REG_F2 = 23, - PPC_REG_F3 = 24, - PPC_REG_F4 = 25, - PPC_REG_F5 = 26, - PPC_REG_F6 = 27, - PPC_REG_F7 = 28, - PPC_REG_F8 = 29, - PPC_REG_F9 = 30, - PPC_REG_F10 = 31, - PPC_REG_F11 = 32, - PPC_REG_F12 = 33, - PPC_REG_F13 = 34, - PPC_REG_F14 = 35, - PPC_REG_F15 = 36, - PPC_REG_F16 = 37, - PPC_REG_F17 = 38, - PPC_REG_F18 = 39, - PPC_REG_F19 = 40, - PPC_REG_F20 = 41, - PPC_REG_F21 = 42, - PPC_REG_F22 = 43, - PPC_REG_F23 = 44, - PPC_REG_F24 = 45, - PPC_REG_F25 = 46, - PPC_REG_F26 = 47, - PPC_REG_F27 = 48, - PPC_REG_F28 = 49, - PPC_REG_F29 = 50, - PPC_REG_F30 = 51, - PPC_REG_F31 = 52, - PPC_REG_LR8 = 54, - PPC_REG_Q0 = 55, - PPC_REG_Q1 = 56, - PPC_REG_Q2 = 57, - PPC_REG_Q3 = 58, - PPC_REG_Q4 = 59, - PPC_REG_Q5 = 60, - PPC_REG_Q6 = 61, - PPC_REG_Q7 = 62, - PPC_REG_Q8 = 63, - PPC_REG_Q9 = 64, - PPC_REG_Q10 = 65, - PPC_REG_Q11 = 66, - PPC_REG_Q12 = 67, - PPC_REG_Q13 = 68, - PPC_REG_Q14 = 69, - PPC_REG_Q15 = 70, - PPC_REG_Q16 = 71, - PPC_REG_Q17 = 72, - PPC_REG_Q18 = 73, - PPC_REG_Q19 = 74, - PPC_REG_Q20 = 75, - PPC_REG_Q21 = 76, - PPC_REG_Q22 = 77, - PPC_REG_Q23 = 78, - PPC_REG_Q24 = 79, - PPC_REG_Q25 = 80, - PPC_REG_Q26 = 81, - PPC_REG_Q27 = 82, - PPC_REG_Q28 = 83, - PPC_REG_Q29 = 84, - PPC_REG_Q30 = 85, - PPC_REG_Q31 = 86, - PPC_REG_R0 = 87, - PPC_REG_R1 = 88, - PPC_REG_R2 = 89, - PPC_REG_R3 = 90, - PPC_REG_R4 = 91, - PPC_REG_R5 = 92, - PPC_REG_R6 = 93, - PPC_REG_R7 = 94, - PPC_REG_R8 = 95, - PPC_REG_R9 = 96, - PPC_REG_R10 = 97, - PPC_REG_R11 = 98, - PPC_REG_R12 = 99, - PPC_REG_R13 = 100, - PPC_REG_R14 = 101, - PPC_REG_R15 = 102, - PPC_REG_R16 = 103, - PPC_REG_R17 = 104, - PPC_REG_R18 = 105, - PPC_REG_R19 = 106, - PPC_REG_R20 = 107, - PPC_REG_R21 = 108, - PPC_REG_R22 = 109, - PPC_REG_R23 = 110, - PPC_REG_R24 = 111, - PPC_REG_R25 = 112, - PPC_REG_R26 = 113, - PPC_REG_R27 = 114, - PPC_REG_R28 = 115, - PPC_REG_R29 = 116, - PPC_REG_R30 = 117, - PPC_REG_R31 = 118, - PPC_REG_V0 = 151, - PPC_REG_V1 = 152, - PPC_REG_V2 = 153, - PPC_REG_V3 = 154, - PPC_REG_V4 = 155, - PPC_REG_V5 = 156, - PPC_REG_V6 = 157, - PPC_REG_V7 = 158, - PPC_REG_V8 = 159, - PPC_REG_V9 = 160, - PPC_REG_V10 = 161, - PPC_REG_V11 = 162, - PPC_REG_V12 = 163, - PPC_REG_V13 = 164, - PPC_REG_V14 = 165, - PPC_REG_V15 = 166, - PPC_REG_V16 = 167, - PPC_REG_V17 = 168, - PPC_REG_V18 = 169, - PPC_REG_V19 = 170, - PPC_REG_V20 = 171, - PPC_REG_V21 = 172, - PPC_REG_V22 = 173, - PPC_REG_V23 = 174, - PPC_REG_V24 = 175, - PPC_REG_V25 = 176, - PPC_REG_V26 = 177, - PPC_REG_V27 = 178, - PPC_REG_V28 = 179, - PPC_REG_V29 = 180, - PPC_REG_V30 = 181, - PPC_REG_V31 = 182, - PPC_REG_VS0 = 215, - PPC_REG_VS1 = 216, - PPC_REG_VS2 = 217, - PPC_REG_VS3 = 218, - PPC_REG_VS4 = 219, - PPC_REG_VS5 = 220, - PPC_REG_VS6 = 221, - PPC_REG_VS7 = 222, - PPC_REG_VS8 = 223, - PPC_REG_VS9 = 224, - PPC_REG_VS10 = 225, - PPC_REG_VS11 = 226, - PPC_REG_VS12 = 227, - PPC_REG_VS13 = 228, - PPC_REG_VS14 = 229, - PPC_REG_VS15 = 230, - PPC_REG_VS16 = 231, - PPC_REG_VS17 = 232, - PPC_REG_VS18 = 233, - PPC_REG_VS19 = 234, - PPC_REG_VS20 = 235, - PPC_REG_VS21 = 236, - PPC_REG_VS22 = 237, - PPC_REG_VS23 = 238, - PPC_REG_VS24 = 239, - PPC_REG_VS25 = 240, - PPC_REG_VS26 = 241, - PPC_REG_VS27 = 242, - PPC_REG_VS28 = 243, - PPC_REG_VS29 = 244, - PPC_REG_VS30 = 245, - PPC_REG_VS31 = 246, - PPC_REG_VS32 = 247, - PPC_REG_VS33 = 248, - PPC_REG_VS34 = 249, - PPC_REG_VS35 = 250, - PPC_REG_VS36 = 251, - PPC_REG_VS37 = 252, - PPC_REG_VS38 = 253, - PPC_REG_VS39 = 254, - PPC_REG_VS40 = 255, - PPC_REG_VS41 = 256, - PPC_REG_VS42 = 257, - PPC_REG_VS43 = 258, - PPC_REG_VS44 = 259, - PPC_REG_VS45 = 260, - PPC_REG_VS46 = 261, - PPC_REG_VS47 = 262, - PPC_REG_VS48 = 263, - PPC_REG_VS49 = 264, - PPC_REG_VS50 = 265, - PPC_REG_VS51 = 266, - PPC_REG_VS52 = 267, - PPC_REG_VS53 = 268, - PPC_REG_VS54 = 269, - PPC_REG_VS55 = 270, - PPC_REG_VS56 = 271, - PPC_REG_VS57 = 272, - PPC_REG_VS58 = 273, - PPC_REG_VS59 = 274, - PPC_REG_VS60 = 275, - PPC_REG_VS61 = 276, - PPC_REG_VS62 = 277, - PPC_REG_VS63 = 278, - - PPC_REG_CR0EQ = 312, - PPC_REG_CR1EQ = 313, - PPC_REG_CR2EQ = 314, - PPC_REG_CR3EQ = 315, - PPC_REG_CR4EQ = 316, - PPC_REG_CR5EQ = 317, - PPC_REG_CR6EQ = 318, - PPC_REG_CR7EQ = 319, - PPC_REG_CR0GT = 320, - PPC_REG_CR1GT = 321, - PPC_REG_CR2GT = 322, - PPC_REG_CR3GT = 323, - PPC_REG_CR4GT = 324, - PPC_REG_CR5GT = 325, - PPC_REG_CR6GT = 326, - PPC_REG_CR7GT = 327, - PPC_REG_CR0LT = 328, - PPC_REG_CR1LT = 329, - PPC_REG_CR2LT = 330, - PPC_REG_CR3LT = 331, - PPC_REG_CR4LT = 332, - PPC_REG_CR5LT = 333, - PPC_REG_CR6LT = 334, - PPC_REG_CR7LT = 335, - PPC_REG_CR0UN = 336, - PPC_REG_CR1UN = 337, - PPC_REG_CR2UN = 338, - PPC_REG_CR3UN = 339, - PPC_REG_CR4UN = 340, - PPC_REG_CR5UN = 341, - PPC_REG_CR6UN = 342, - PPC_REG_CR7UN = 343, - - PPC_REG_ENDING, // <-- mark the end of the list of registers -} ppc_reg; - -/// Instruction's operand referring to memory -/// This is associated with PPC_OP_MEM operand type above -typedef struct ppc_op_mem { - ppc_reg base; ///< base register - int32_t disp; ///< displacement/offset value -} ppc_op_mem; - -typedef struct ppc_op_crx { - unsigned int scale; - ppc_reg reg; - ppc_bc cond; -} ppc_op_crx; - -/// Instruction operand -typedef struct cs_ppc_op { - ppc_op_type type; ///< operand type - union { - ppc_reg reg; ///< register value for REG operand - int64_t imm; ///< immediate value for IMM operand - ppc_op_mem mem; ///< base/disp value for MEM operand - ppc_op_crx crx; ///< operand with condition register - }; -} cs_ppc_op; - -/// Instruction structure -typedef struct cs_ppc { - /// branch code for branch instructions - ppc_bc bc; - - /// branch hint for branch instructions - ppc_bh bh; - - /// if update_cr0 = True, then this 'dot' insn updates CR0 - bool update_cr0; - - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - cs_ppc_op operands[8]; ///< operands for this instruction. -} cs_ppc; - -/// PPC instruction -typedef enum ppc_insn { - PPC_INS_INVALID = 0, - - PPC_INS_ADD, - PPC_INS_ADDC, - PPC_INS_ADDE, - PPC_INS_ADDI, - PPC_INS_ADDIC, - PPC_INS_ADDIS, - PPC_INS_ADDME, - PPC_INS_ADDPCIS, - PPC_INS_ADDZE, - PPC_INS_AND, - PPC_INS_ANDC, - PPC_INS_ANDI, - PPC_INS_ANDIS, - PPC_INS_ATTN, - PPC_INS_B, - PPC_INS_BA, - PPC_INS_BC, - PPC_INS_BCA, - PPC_INS_BCCTR, - PPC_INS_BCCTRL, - PPC_INS_BCDCFN, - PPC_INS_BCDCFSQ, - PPC_INS_BCDCFZ, - PPC_INS_BCDCPSGN, - PPC_INS_BCDCTN, - PPC_INS_BCDCTSQ, - PPC_INS_BCDCTZ, - PPC_INS_BCDS, - PPC_INS_BCDSETSGN, - PPC_INS_BCDSR, - PPC_INS_BCDTRUNC, - PPC_INS_BCDUS, - PPC_INS_BCDUTRUNC, - PPC_INS_BCL, - PPC_INS_BCLA, - PPC_INS_BCLR, - PPC_INS_BCLRL, - PPC_INS_BCTR, - PPC_INS_BCTRL, - PPC_INS_BDNZ, - PPC_INS_BDNZA, - PPC_INS_BDNZF, - PPC_INS_BDNZFA, - PPC_INS_BDNZFL, - PPC_INS_BDNZFLA, - PPC_INS_BDNZFLR, - PPC_INS_BDNZFLRL, - PPC_INS_BDNZL, - PPC_INS_BDNZLA, - PPC_INS_BDNZLR, - PPC_INS_BDNZLRL, - PPC_INS_BDNZT, - PPC_INS_BDNZTA, - PPC_INS_BDNZTL, - PPC_INS_BDNZTLA, - PPC_INS_BDNZTLR, - PPC_INS_BDNZTLRL, - PPC_INS_BDZ, - PPC_INS_BDZA, - PPC_INS_BDZF, - PPC_INS_BDZFA, - PPC_INS_BDZFL, - PPC_INS_BDZFLA, - PPC_INS_BDZFLR, - PPC_INS_BDZFLRL, - PPC_INS_BDZL, - PPC_INS_BDZLA, - PPC_INS_BDZLR, - PPC_INS_BDZLRL, - PPC_INS_BDZT, - PPC_INS_BDZTA, - PPC_INS_BDZTL, - PPC_INS_BDZTLA, - PPC_INS_BDZTLR, - PPC_INS_BDZTLRL, - PPC_INS_BEQ, - PPC_INS_BEQA, - PPC_INS_BEQCTR, - PPC_INS_BEQCTRL, - PPC_INS_BEQL, - PPC_INS_BEQLA, - PPC_INS_BEQLR, - PPC_INS_BEQLRL, - PPC_INS_BF, - PPC_INS_BFA, - PPC_INS_BFCTR, - PPC_INS_BFCTRL, - PPC_INS_BFL, - PPC_INS_BFLA, - PPC_INS_BFLR, - PPC_INS_BFLRL, - PPC_INS_BGE, - PPC_INS_BGEA, - PPC_INS_BGECTR, - PPC_INS_BGECTRL, - PPC_INS_BGEL, - PPC_INS_BGELA, - PPC_INS_BGELR, - PPC_INS_BGELRL, - PPC_INS_BGT, - PPC_INS_BGTA, - PPC_INS_BGTCTR, - PPC_INS_BGTCTRL, - PPC_INS_BGTL, - PPC_INS_BGTLA, - PPC_INS_BGTLR, - PPC_INS_BGTLRL, - PPC_INS_BL, - PPC_INS_BLA, - PPC_INS_BLE, - PPC_INS_BLEA, - PPC_INS_BLECTR, - PPC_INS_BLECTRL, - PPC_INS_BLEL, - PPC_INS_BLELA, - PPC_INS_BLELR, - PPC_INS_BLELRL, - PPC_INS_BLR, - PPC_INS_BLRL, - PPC_INS_BLT, - PPC_INS_BLTA, - PPC_INS_BLTCTR, - PPC_INS_BLTCTRL, - PPC_INS_BLTL, - PPC_INS_BLTLA, - PPC_INS_BLTLR, - PPC_INS_BLTLRL, - PPC_INS_BNE, - PPC_INS_BNEA, - PPC_INS_BNECTR, - PPC_INS_BNECTRL, - PPC_INS_BNEL, - PPC_INS_BNELA, - PPC_INS_BNELR, - PPC_INS_BNELRL, - PPC_INS_BNG, - PPC_INS_BNGA, - PPC_INS_BNGCTR, - PPC_INS_BNGCTRL, - PPC_INS_BNGL, - PPC_INS_BNGLA, - PPC_INS_BNGLR, - PPC_INS_BNGLRL, - PPC_INS_BNL, - PPC_INS_BNLA, - PPC_INS_BNLCTR, - PPC_INS_BNLCTRL, - PPC_INS_BNLL, - PPC_INS_BNLLA, - PPC_INS_BNLLR, - PPC_INS_BNLLRL, - PPC_INS_BNS, - PPC_INS_BNSA, - PPC_INS_BNSCTR, - PPC_INS_BNSCTRL, - PPC_INS_BNSL, - PPC_INS_BNSLA, - PPC_INS_BNSLR, - PPC_INS_BNSLRL, - PPC_INS_BNU, - PPC_INS_BNUA, - PPC_INS_BNUCTR, - PPC_INS_BNUCTRL, - PPC_INS_BNUL, - PPC_INS_BNULA, - PPC_INS_BNULR, - PPC_INS_BNULRL, - PPC_INS_BPERMD, - PPC_INS_BRINC, - PPC_INS_BSO, - PPC_INS_BSOA, - PPC_INS_BSOCTR, - PPC_INS_BSOCTRL, - PPC_INS_BSOL, - PPC_INS_BSOLA, - PPC_INS_BSOLR, - PPC_INS_BSOLRL, - PPC_INS_BT, - PPC_INS_BTA, - PPC_INS_BTCTR, - PPC_INS_BTCTRL, - PPC_INS_BTL, - PPC_INS_BTLA, - PPC_INS_BTLR, - PPC_INS_BTLRL, - PPC_INS_BUN, - PPC_INS_BUNA, - PPC_INS_BUNCTR, - PPC_INS_BUNCTRL, - PPC_INS_BUNL, - PPC_INS_BUNLA, - PPC_INS_BUNLR, - PPC_INS_BUNLRL, - PPC_INS_CLRBHRB, - PPC_INS_CLRLDI, - PPC_INS_CLRLSLDI, - PPC_INS_CLRLSLWI, - PPC_INS_CLRLWI, - PPC_INS_CLRRDI, - PPC_INS_CLRRWI, - PPC_INS_CMP, - PPC_INS_CMPB, - PPC_INS_CMPD, - PPC_INS_CMPDI, - PPC_INS_CMPEQB, - PPC_INS_CMPI, - PPC_INS_CMPL, - PPC_INS_CMPLD, - PPC_INS_CMPLDI, - PPC_INS_CMPLI, - PPC_INS_CMPLW, - PPC_INS_CMPLWI, - PPC_INS_CMPRB, - PPC_INS_CMPW, - PPC_INS_CMPWI, - PPC_INS_CNTLZD, - PPC_INS_CNTLZW, - PPC_INS_CNTTZD, - PPC_INS_CNTTZW, - PPC_INS_COPY, - PPC_INS_COPY_FIRST, - PPC_INS_CP_ABORT, - PPC_INS_CRAND, - PPC_INS_CRANDC, - PPC_INS_CRCLR, - PPC_INS_CREQV, - PPC_INS_CRMOVE, - PPC_INS_CRNAND, - PPC_INS_CRNOR, - PPC_INS_CRNOT, - PPC_INS_CROR, - PPC_INS_CRORC, - PPC_INS_CRSET, - PPC_INS_CRXOR, - PPC_INS_DARN, - PPC_INS_DCBA, - PPC_INS_DCBF, - PPC_INS_DCBFEP, - PPC_INS_DCBFL, - PPC_INS_DCBFLP, - PPC_INS_DCBI, - PPC_INS_DCBST, - PPC_INS_DCBSTEP, - PPC_INS_DCBT, - PPC_INS_DCBTCT, - PPC_INS_DCBTDS, - PPC_INS_DCBTEP, - PPC_INS_DCBTST, - PPC_INS_DCBTSTCT, - PPC_INS_DCBTSTDS, - PPC_INS_DCBTSTEP, - PPC_INS_DCBTSTT, - PPC_INS_DCBTT, - PPC_INS_DCBZ, - PPC_INS_DCBZEP, - PPC_INS_DCBZL, - PPC_INS_DCBZLEP, - PPC_INS_DCCCI, - PPC_INS_DCI, - PPC_INS_DIVD, - PPC_INS_DIVDE, - PPC_INS_DIVDEU, - PPC_INS_DIVDU, - PPC_INS_DIVW, - PPC_INS_DIVWE, - PPC_INS_DIVWEU, - PPC_INS_DIVWU, - PPC_INS_DSS, - PPC_INS_DSSALL, - PPC_INS_DST, - PPC_INS_DSTST, - PPC_INS_DSTSTT, - PPC_INS_DSTT, - PPC_INS_EFDABS, - PPC_INS_EFDADD, - PPC_INS_EFDCFS, - PPC_INS_EFDCFSF, - PPC_INS_EFDCFSI, - PPC_INS_EFDCFSID, - PPC_INS_EFDCFUF, - PPC_INS_EFDCFUI, - PPC_INS_EFDCFUID, - PPC_INS_EFDCMPEQ, - PPC_INS_EFDCMPGT, - PPC_INS_EFDCMPLT, - PPC_INS_EFDCTSF, - PPC_INS_EFDCTSI, - PPC_INS_EFDCTSIDZ, - PPC_INS_EFDCTSIZ, - PPC_INS_EFDCTUF, - PPC_INS_EFDCTUI, - PPC_INS_EFDCTUIDZ, - PPC_INS_EFDCTUIZ, - PPC_INS_EFDDIV, - PPC_INS_EFDMUL, - PPC_INS_EFDNABS, - PPC_INS_EFDNEG, - PPC_INS_EFDSUB, - PPC_INS_EFDTSTEQ, - PPC_INS_EFDTSTGT, - PPC_INS_EFDTSTLT, - PPC_INS_EFSABS, - PPC_INS_EFSADD, - PPC_INS_EFSCFD, - PPC_INS_EFSCFSF, - PPC_INS_EFSCFSI, - PPC_INS_EFSCFUF, - PPC_INS_EFSCFUI, - PPC_INS_EFSCMPEQ, - PPC_INS_EFSCMPGT, - PPC_INS_EFSCMPLT, - PPC_INS_EFSCTSF, - PPC_INS_EFSCTSI, - PPC_INS_EFSCTSIZ, - PPC_INS_EFSCTUF, - PPC_INS_EFSCTUI, - PPC_INS_EFSCTUIZ, - PPC_INS_EFSDIV, - PPC_INS_EFSMUL, - PPC_INS_EFSNABS, - PPC_INS_EFSNEG, - PPC_INS_EFSSUB, - PPC_INS_EFSTSTEQ, - PPC_INS_EFSTSTGT, - PPC_INS_EFSTSTLT, - PPC_INS_EIEIO, - PPC_INS_EQV, - PPC_INS_EVABS, - PPC_INS_EVADDIW, - PPC_INS_EVADDSMIAAW, - PPC_INS_EVADDSSIAAW, - PPC_INS_EVADDUMIAAW, - PPC_INS_EVADDUSIAAW, - PPC_INS_EVADDW, - PPC_INS_EVAND, - PPC_INS_EVANDC, - PPC_INS_EVCMPEQ, - PPC_INS_EVCMPGTS, - PPC_INS_EVCMPGTU, - PPC_INS_EVCMPLTS, - PPC_INS_EVCMPLTU, - PPC_INS_EVCNTLSW, - PPC_INS_EVCNTLZW, - PPC_INS_EVDIVWS, - PPC_INS_EVDIVWU, - PPC_INS_EVEQV, - PPC_INS_EVEXTSB, - PPC_INS_EVEXTSH, - PPC_INS_EVFSABS, - PPC_INS_EVFSADD, - PPC_INS_EVFSCFSF, - PPC_INS_EVFSCFSI, - PPC_INS_EVFSCFUF, - PPC_INS_EVFSCFUI, - PPC_INS_EVFSCMPEQ, - PPC_INS_EVFSCMPGT, - PPC_INS_EVFSCMPLT, - PPC_INS_EVFSCTSF, - PPC_INS_EVFSCTSI, - PPC_INS_EVFSCTSIZ, - PPC_INS_EVFSCTUI, - PPC_INS_EVFSDIV, - PPC_INS_EVFSMUL, - PPC_INS_EVFSNABS, - PPC_INS_EVFSNEG, - PPC_INS_EVFSSUB, - PPC_INS_EVFSTSTEQ, - PPC_INS_EVFSTSTGT, - PPC_INS_EVFSTSTLT, - PPC_INS_EVLDD, - PPC_INS_EVLDDX, - PPC_INS_EVLDH, - PPC_INS_EVLDHX, - PPC_INS_EVLDW, - PPC_INS_EVLDWX, - PPC_INS_EVLHHESPLAT, - PPC_INS_EVLHHESPLATX, - PPC_INS_EVLHHOSSPLAT, - PPC_INS_EVLHHOSSPLATX, - PPC_INS_EVLHHOUSPLAT, - PPC_INS_EVLHHOUSPLATX, - PPC_INS_EVLWHE, - PPC_INS_EVLWHEX, - PPC_INS_EVLWHOS, - PPC_INS_EVLWHOSX, - PPC_INS_EVLWHOU, - PPC_INS_EVLWHOUX, - PPC_INS_EVLWHSPLAT, - PPC_INS_EVLWHSPLATX, - PPC_INS_EVLWWSPLAT, - PPC_INS_EVLWWSPLATX, - PPC_INS_EVMERGEHI, - PPC_INS_EVMERGEHILO, - PPC_INS_EVMERGELO, - PPC_INS_EVMERGELOHI, - PPC_INS_EVMHEGSMFAA, - PPC_INS_EVMHEGSMFAN, - PPC_INS_EVMHEGSMIAA, - PPC_INS_EVMHEGSMIAN, - PPC_INS_EVMHEGUMIAA, - PPC_INS_EVMHEGUMIAN, - PPC_INS_EVMHESMF, - PPC_INS_EVMHESMFA, - PPC_INS_EVMHESMFAAW, - PPC_INS_EVMHESMFANW, - PPC_INS_EVMHESMI, - PPC_INS_EVMHESMIA, - PPC_INS_EVMHESMIAAW, - PPC_INS_EVMHESMIANW, - PPC_INS_EVMHESSF, - PPC_INS_EVMHESSFA, - PPC_INS_EVMHESSFAAW, - PPC_INS_EVMHESSFANW, - PPC_INS_EVMHESSIAAW, - PPC_INS_EVMHESSIANW, - PPC_INS_EVMHEUMI, - PPC_INS_EVMHEUMIA, - PPC_INS_EVMHEUMIAAW, - PPC_INS_EVMHEUMIANW, - PPC_INS_EVMHEUSIAAW, - PPC_INS_EVMHEUSIANW, - PPC_INS_EVMHOGSMFAA, - PPC_INS_EVMHOGSMFAN, - PPC_INS_EVMHOGSMIAA, - PPC_INS_EVMHOGSMIAN, - PPC_INS_EVMHOGUMIAA, - PPC_INS_EVMHOGUMIAN, - PPC_INS_EVMHOSMF, - PPC_INS_EVMHOSMFA, - PPC_INS_EVMHOSMFAAW, - PPC_INS_EVMHOSMFANW, - PPC_INS_EVMHOSMI, - PPC_INS_EVMHOSMIA, - PPC_INS_EVMHOSMIAAW, - PPC_INS_EVMHOSMIANW, - PPC_INS_EVMHOSSF, - PPC_INS_EVMHOSSFA, - PPC_INS_EVMHOSSFAAW, - PPC_INS_EVMHOSSFANW, - PPC_INS_EVMHOSSIAAW, - PPC_INS_EVMHOSSIANW, - PPC_INS_EVMHOUMI, - PPC_INS_EVMHOUMIA, - PPC_INS_EVMHOUMIAAW, - PPC_INS_EVMHOUMIANW, - PPC_INS_EVMHOUSIAAW, - PPC_INS_EVMHOUSIANW, - PPC_INS_EVMRA, - PPC_INS_EVMWHSMF, - PPC_INS_EVMWHSMFA, - PPC_INS_EVMWHSMI, - PPC_INS_EVMWHSMIA, - PPC_INS_EVMWHSSF, - PPC_INS_EVMWHSSFA, - PPC_INS_EVMWHUMI, - PPC_INS_EVMWHUMIA, - PPC_INS_EVMWLSMIAAW, - PPC_INS_EVMWLSMIANW, - PPC_INS_EVMWLSSIAAW, - PPC_INS_EVMWLSSIANW, - PPC_INS_EVMWLUMI, - PPC_INS_EVMWLUMIA, - PPC_INS_EVMWLUMIAAW, - PPC_INS_EVMWLUMIANW, - PPC_INS_EVMWLUSIAAW, - PPC_INS_EVMWLUSIANW, - PPC_INS_EVMWSMF, - PPC_INS_EVMWSMFA, - PPC_INS_EVMWSMFAA, - PPC_INS_EVMWSMFAN, - PPC_INS_EVMWSMI, - PPC_INS_EVMWSMIA, - PPC_INS_EVMWSMIAA, - PPC_INS_EVMWSMIAN, - PPC_INS_EVMWSSF, - PPC_INS_EVMWSSFA, - PPC_INS_EVMWSSFAA, - PPC_INS_EVMWSSFAN, - PPC_INS_EVMWUMI, - PPC_INS_EVMWUMIA, - PPC_INS_EVMWUMIAA, - PPC_INS_EVMWUMIAN, - PPC_INS_EVNAND, - PPC_INS_EVNEG, - PPC_INS_EVNOR, - PPC_INS_EVOR, - PPC_INS_EVORC, - PPC_INS_EVRLW, - PPC_INS_EVRLWI, - PPC_INS_EVRNDW, - PPC_INS_EVSEL, - PPC_INS_EVSLW, - PPC_INS_EVSLWI, - PPC_INS_EVSPLATFI, - PPC_INS_EVSPLATI, - PPC_INS_EVSRWIS, - PPC_INS_EVSRWIU, - PPC_INS_EVSRWS, - PPC_INS_EVSRWU, - PPC_INS_EVSTDD, - PPC_INS_EVSTDDX, - PPC_INS_EVSTDH, - PPC_INS_EVSTDHX, - PPC_INS_EVSTDW, - PPC_INS_EVSTDWX, - PPC_INS_EVSTWHE, - PPC_INS_EVSTWHEX, - PPC_INS_EVSTWHO, - PPC_INS_EVSTWHOX, - PPC_INS_EVSTWWE, - PPC_INS_EVSTWWEX, - PPC_INS_EVSTWWO, - PPC_INS_EVSTWWOX, - PPC_INS_EVSUBFSMIAAW, - PPC_INS_EVSUBFSSIAAW, - PPC_INS_EVSUBFUMIAAW, - PPC_INS_EVSUBFUSIAAW, - PPC_INS_EVSUBFW, - PPC_INS_EVSUBIFW, - PPC_INS_EVXOR, - PPC_INS_EXTLDI, - PPC_INS_EXTLWI, - PPC_INS_EXTRDI, - PPC_INS_EXTRWI, - PPC_INS_EXTSB, - PPC_INS_EXTSH, - PPC_INS_EXTSW, - PPC_INS_EXTSWSLI, - PPC_INS_FABS, - PPC_INS_FADD, - PPC_INS_FADDS, - PPC_INS_FCFID, - PPC_INS_FCFIDS, - PPC_INS_FCFIDU, - PPC_INS_FCFIDUS, - PPC_INS_FCMPU, - PPC_INS_FCPSGN, - PPC_INS_FCTID, - PPC_INS_FCTIDU, - PPC_INS_FCTIDUZ, - PPC_INS_FCTIDZ, - PPC_INS_FCTIW, - PPC_INS_FCTIWU, - PPC_INS_FCTIWUZ, - PPC_INS_FCTIWZ, - PPC_INS_FDIV, - PPC_INS_FDIVS, - PPC_INS_FMADD, - PPC_INS_FMADDS, - PPC_INS_FMR, - PPC_INS_FMSUB, - PPC_INS_FMSUBS, - PPC_INS_FMUL, - PPC_INS_FMULS, - PPC_INS_FNABS, - PPC_INS_FNEG, - PPC_INS_FNMADD, - PPC_INS_FNMADDS, - PPC_INS_FNMSUB, - PPC_INS_FNMSUBS, - PPC_INS_FRE, - PPC_INS_FRES, - PPC_INS_FRIM, - PPC_INS_FRIN, - PPC_INS_FRIP, - PPC_INS_FRIZ, - PPC_INS_FRSP, - PPC_INS_FRSQRTE, - PPC_INS_FRSQRTES, - PPC_INS_FSEL, - PPC_INS_FSQRT, - PPC_INS_FSQRTS, - PPC_INS_FSUB, - PPC_INS_FSUBS, - PPC_INS_FTDIV, - PPC_INS_FTSQRT, - PPC_INS_HRFID, - PPC_INS_ICBI, - PPC_INS_ICBIEP, - PPC_INS_ICBLC, - PPC_INS_ICBLQ, - PPC_INS_ICBT, - PPC_INS_ICBTLS, - PPC_INS_ICCCI, - PPC_INS_ICI, - PPC_INS_INSLWI, - PPC_INS_INSRDI, - PPC_INS_INSRWI, - PPC_INS_ISEL, - PPC_INS_ISYNC, - PPC_INS_LA, - PPC_INS_LBARX, - PPC_INS_LBEPX, - PPC_INS_LBZ, - PPC_INS_LBZCIX, - PPC_INS_LBZU, - PPC_INS_LBZUX, - PPC_INS_LBZX, - PPC_INS_LD, - PPC_INS_LDARX, - PPC_INS_LDAT, - PPC_INS_LDBRX, - PPC_INS_LDCIX, - PPC_INS_LDMX, - PPC_INS_LDU, - PPC_INS_LDUX, - PPC_INS_LDX, - PPC_INS_LFD, - PPC_INS_LFDEPX, - PPC_INS_LFDU, - PPC_INS_LFDUX, - PPC_INS_LFDX, - PPC_INS_LFIWAX, - PPC_INS_LFIWZX, - PPC_INS_LFS, - PPC_INS_LFSU, - PPC_INS_LFSUX, - PPC_INS_LFSX, - PPC_INS_LHA, - PPC_INS_LHARX, - PPC_INS_LHAU, - PPC_INS_LHAUX, - PPC_INS_LHAX, - PPC_INS_LHBRX, - PPC_INS_LHEPX, - PPC_INS_LHZ, - PPC_INS_LHZCIX, - PPC_INS_LHZU, - PPC_INS_LHZUX, - PPC_INS_LHZX, - PPC_INS_LI, - PPC_INS_LIS, - PPC_INS_LMW, - PPC_INS_LNIA, - PPC_INS_LSWI, - PPC_INS_LVEBX, - PPC_INS_LVEHX, - PPC_INS_LVEWX, - PPC_INS_LVSL, - PPC_INS_LVSR, - PPC_INS_LVX, - PPC_INS_LVXL, - PPC_INS_LWA, - PPC_INS_LWARX, - PPC_INS_LWAT, - PPC_INS_LWAUX, - PPC_INS_LWAX, - PPC_INS_LWBRX, - PPC_INS_LWEPX, - PPC_INS_LWSYNC, - PPC_INS_LWZ, - PPC_INS_LWZCIX, - PPC_INS_LWZU, - PPC_INS_LWZUX, - PPC_INS_LWZX, - PPC_INS_LXSD, - PPC_INS_LXSDX, - PPC_INS_LXSIBZX, - PPC_INS_LXSIHZX, - PPC_INS_LXSIWAX, - PPC_INS_LXSIWZX, - PPC_INS_LXSSP, - PPC_INS_LXSSPX, - PPC_INS_LXV, - PPC_INS_LXVB16X, - PPC_INS_LXVD2X, - PPC_INS_LXVDSX, - PPC_INS_LXVH8X, - PPC_INS_LXVL, - PPC_INS_LXVLL, - PPC_INS_LXVW4X, - PPC_INS_LXVWSX, - PPC_INS_LXVX, - PPC_INS_MADDHD, - PPC_INS_MADDHDU, - PPC_INS_MADDLD, - PPC_INS_MBAR, - PPC_INS_MCRF, - PPC_INS_MCRFS, - PPC_INS_MCRXRX, - PPC_INS_MFAMR, - PPC_INS_MFASR, - PPC_INS_MFBHRBE, - PPC_INS_MFBR0, - PPC_INS_MFBR1, - PPC_INS_MFBR2, - PPC_INS_MFBR3, - PPC_INS_MFBR4, - PPC_INS_MFBR5, - PPC_INS_MFBR6, - PPC_INS_MFBR7, - PPC_INS_MFCFAR, - PPC_INS_MFCR, - PPC_INS_MFCTR, - PPC_INS_MFDAR, - PPC_INS_MFDBATL, - PPC_INS_MFDBATU, - PPC_INS_MFDCCR, - PPC_INS_MFDCR, - PPC_INS_MFDEAR, - PPC_INS_MFDEC, - PPC_INS_MFDSCR, - PPC_INS_MFDSISR, - PPC_INS_MFESR, - PPC_INS_MFFPRD, - PPC_INS_MFFS, - PPC_INS_MFFSCDRN, - PPC_INS_MFFSCDRNI, - PPC_INS_MFFSCE, - PPC_INS_MFFSCRN, - PPC_INS_MFFSCRNI, - PPC_INS_MFFSL, - PPC_INS_MFIBATL, - PPC_INS_MFIBATU, - PPC_INS_MFICCR, - PPC_INS_MFLR, - PPC_INS_MFMSR, - PPC_INS_MFOCRF, - PPC_INS_MFPID, - PPC_INS_MFPMR, - PPC_INS_MFPVR, - PPC_INS_MFRTCL, - PPC_INS_MFRTCU, - PPC_INS_MFSDR1, - PPC_INS_MFSPEFSCR, - PPC_INS_MFSPR, - PPC_INS_MFSPRG, - PPC_INS_MFSPRG0, - PPC_INS_MFSPRG1, - PPC_INS_MFSPRG2, - PPC_INS_MFSPRG3, - PPC_INS_MFSPRG4, - PPC_INS_MFSPRG5, - PPC_INS_MFSPRG6, - PPC_INS_MFSPRG7, - PPC_INS_MFSR, - PPC_INS_MFSRIN, - PPC_INS_MFSRR0, - PPC_INS_MFSRR1, - PPC_INS_MFSRR2, - PPC_INS_MFSRR3, - PPC_INS_MFTB, - PPC_INS_MFTBHI, - PPC_INS_MFTBL, - PPC_INS_MFTBLO, - PPC_INS_MFTBU, - PPC_INS_MFTCR, - PPC_INS_MFVRD, - PPC_INS_MFVRSAVE, - PPC_INS_MFVSCR, - PPC_INS_MFVSRD, - PPC_INS_MFVSRLD, - PPC_INS_MFVSRWZ, - PPC_INS_MFXER, - PPC_INS_MODSD, - PPC_INS_MODSW, - PPC_INS_MODUD, - PPC_INS_MODUW, - PPC_INS_MR, - PPC_INS_MSGSYNC, - PPC_INS_MSYNC, - PPC_INS_MTAMR, - PPC_INS_MTASR, - PPC_INS_MTBR0, - PPC_INS_MTBR1, - PPC_INS_MTBR2, - PPC_INS_MTBR3, - PPC_INS_MTBR4, - PPC_INS_MTBR5, - PPC_INS_MTBR6, - PPC_INS_MTBR7, - PPC_INS_MTCFAR, - PPC_INS_MTCR, - PPC_INS_MTCRF, - PPC_INS_MTCTR, - PPC_INS_MTDAR, - PPC_INS_MTDBATL, - PPC_INS_MTDBATU, - PPC_INS_MTDCCR, - PPC_INS_MTDCR, - PPC_INS_MTDEAR, - PPC_INS_MTDEC, - PPC_INS_MTDSCR, - PPC_INS_MTDSISR, - PPC_INS_MTESR, - PPC_INS_MTFSB0, - PPC_INS_MTFSB1, - PPC_INS_MTFSF, - PPC_INS_MTFSFI, - PPC_INS_MTIBATL, - PPC_INS_MTIBATU, - PPC_INS_MTICCR, - PPC_INS_MTLR, - PPC_INS_MTMSR, - PPC_INS_MTMSRD, - PPC_INS_MTOCRF, - PPC_INS_MTPID, - PPC_INS_MTPMR, - PPC_INS_MTSDR1, - PPC_INS_MTSPEFSCR, - PPC_INS_MTSPR, - PPC_INS_MTSPRG, - PPC_INS_MTSPRG0, - PPC_INS_MTSPRG1, - PPC_INS_MTSPRG2, - PPC_INS_MTSPRG3, - PPC_INS_MTSPRG4, - PPC_INS_MTSPRG5, - PPC_INS_MTSPRG6, - PPC_INS_MTSPRG7, - PPC_INS_MTSR, - PPC_INS_MTSRIN, - PPC_INS_MTSRR0, - PPC_INS_MTSRR1, - PPC_INS_MTSRR2, - PPC_INS_MTSRR3, - PPC_INS_MTTBHI, - PPC_INS_MTTBL, - PPC_INS_MTTBLO, - PPC_INS_MTTBU, - PPC_INS_MTTCR, - PPC_INS_MTVRSAVE, - PPC_INS_MTVSCR, - PPC_INS_MTVSRD, - PPC_INS_MTVSRDD, - PPC_INS_MTVSRWA, - PPC_INS_MTVSRWS, - PPC_INS_MTVSRWZ, - PPC_INS_MTXER, - PPC_INS_MULHD, - PPC_INS_MULHDU, - PPC_INS_MULHW, - PPC_INS_MULHWU, - PPC_INS_MULLD, - PPC_INS_MULLI, - PPC_INS_MULLW, - PPC_INS_NAND, - PPC_INS_NAP, - PPC_INS_NEG, - PPC_INS_NOP, - PPC_INS_NOR, - PPC_INS_NOT, - PPC_INS_OR, - PPC_INS_ORC, - PPC_INS_ORI, - PPC_INS_ORIS, - PPC_INS_PASTE, - PPC_INS_PASTE_LAST, - PPC_INS_POPCNTB, - PPC_INS_POPCNTD, - PPC_INS_POPCNTW, - PPC_INS_PTESYNC, - PPC_INS_QVALIGNI, - PPC_INS_QVESPLATI, - PPC_INS_QVFABS, - PPC_INS_QVFADD, - PPC_INS_QVFADDS, - PPC_INS_QVFAND, - PPC_INS_QVFANDC, - PPC_INS_QVFCFID, - PPC_INS_QVFCFIDS, - PPC_INS_QVFCFIDU, - PPC_INS_QVFCFIDUS, - PPC_INS_QVFCLR, - PPC_INS_QVFCMPEQ, - PPC_INS_QVFCMPGT, - PPC_INS_QVFCMPLT, - PPC_INS_QVFCPSGN, - PPC_INS_QVFCTFB, - PPC_INS_QVFCTID, - PPC_INS_QVFCTIDU, - PPC_INS_QVFCTIDUZ, - PPC_INS_QVFCTIDZ, - PPC_INS_QVFCTIW, - PPC_INS_QVFCTIWU, - PPC_INS_QVFCTIWUZ, - PPC_INS_QVFCTIWZ, - PPC_INS_QVFEQU, - PPC_INS_QVFLOGICAL, - PPC_INS_QVFMADD, - PPC_INS_QVFMADDS, - PPC_INS_QVFMR, - PPC_INS_QVFMSUB, - PPC_INS_QVFMSUBS, - PPC_INS_QVFMUL, - PPC_INS_QVFMULS, - PPC_INS_QVFNABS, - PPC_INS_QVFNAND, - PPC_INS_QVFNEG, - PPC_INS_QVFNMADD, - PPC_INS_QVFNMADDS, - PPC_INS_QVFNMSUB, - PPC_INS_QVFNMSUBS, - PPC_INS_QVFNOR, - PPC_INS_QVFNOT, - PPC_INS_QVFOR, - PPC_INS_QVFORC, - PPC_INS_QVFPERM, - PPC_INS_QVFRE, - PPC_INS_QVFRES, - PPC_INS_QVFRIM, - PPC_INS_QVFRIN, - PPC_INS_QVFRIP, - PPC_INS_QVFRIZ, - PPC_INS_QVFRSP, - PPC_INS_QVFRSQRTE, - PPC_INS_QVFRSQRTES, - PPC_INS_QVFSEL, - PPC_INS_QVFSET, - PPC_INS_QVFSUB, - PPC_INS_QVFSUBS, - PPC_INS_QVFTSTNAN, - PPC_INS_QVFXMADD, - PPC_INS_QVFXMADDS, - PPC_INS_QVFXMUL, - PPC_INS_QVFXMULS, - PPC_INS_QVFXOR, - PPC_INS_QVFXXCPNMADD, - PPC_INS_QVFXXCPNMADDS, - PPC_INS_QVFXXMADD, - PPC_INS_QVFXXMADDS, - PPC_INS_QVFXXNPMADD, - PPC_INS_QVFXXNPMADDS, - PPC_INS_QVGPCI, - PPC_INS_QVLFCDUX, - PPC_INS_QVLFCDUXA, - PPC_INS_QVLFCDX, - PPC_INS_QVLFCDXA, - PPC_INS_QVLFCSUX, - PPC_INS_QVLFCSUXA, - PPC_INS_QVLFCSX, - PPC_INS_QVLFCSXA, - PPC_INS_QVLFDUX, - PPC_INS_QVLFDUXA, - PPC_INS_QVLFDX, - PPC_INS_QVLFDXA, - PPC_INS_QVLFIWAX, - PPC_INS_QVLFIWAXA, - PPC_INS_QVLFIWZX, - PPC_INS_QVLFIWZXA, - PPC_INS_QVLFSUX, - PPC_INS_QVLFSUXA, - PPC_INS_QVLFSX, - PPC_INS_QVLFSXA, - PPC_INS_QVLPCLDX, - PPC_INS_QVLPCLSX, - PPC_INS_QVLPCRDX, - PPC_INS_QVLPCRSX, - PPC_INS_QVSTFCDUX, - PPC_INS_QVSTFCDUXA, - PPC_INS_QVSTFCDUXI, - PPC_INS_QVSTFCDUXIA, - PPC_INS_QVSTFCDX, - PPC_INS_QVSTFCDXA, - PPC_INS_QVSTFCDXI, - PPC_INS_QVSTFCDXIA, - PPC_INS_QVSTFCSUX, - PPC_INS_QVSTFCSUXA, - PPC_INS_QVSTFCSUXI, - PPC_INS_QVSTFCSUXIA, - PPC_INS_QVSTFCSX, - PPC_INS_QVSTFCSXA, - PPC_INS_QVSTFCSXI, - PPC_INS_QVSTFCSXIA, - PPC_INS_QVSTFDUX, - PPC_INS_QVSTFDUXA, - PPC_INS_QVSTFDUXI, - PPC_INS_QVSTFDUXIA, - PPC_INS_QVSTFDX, - PPC_INS_QVSTFDXA, - PPC_INS_QVSTFDXI, - PPC_INS_QVSTFDXIA, - PPC_INS_QVSTFIWX, - PPC_INS_QVSTFIWXA, - PPC_INS_QVSTFSUX, - PPC_INS_QVSTFSUXA, - PPC_INS_QVSTFSUXI, - PPC_INS_QVSTFSUXIA, - PPC_INS_QVSTFSX, - PPC_INS_QVSTFSXA, - PPC_INS_QVSTFSXI, - PPC_INS_QVSTFSXIA, - PPC_INS_RFCI, - PPC_INS_RFDI, - PPC_INS_RFEBB, - PPC_INS_RFI, - PPC_INS_RFID, - PPC_INS_RFMCI, - PPC_INS_RLDCL, - PPC_INS_RLDCR, - PPC_INS_RLDIC, - PPC_INS_RLDICL, - PPC_INS_RLDICR, - PPC_INS_RLDIMI, - PPC_INS_RLWIMI, - PPC_INS_RLWINM, - PPC_INS_RLWNM, - PPC_INS_ROTLD, - PPC_INS_ROTLDI, - PPC_INS_ROTLW, - PPC_INS_ROTLWI, - PPC_INS_ROTRDI, - PPC_INS_ROTRWI, - PPC_INS_SC, - PPC_INS_SETB, - PPC_INS_SLBIA, - PPC_INS_SLBIE, - PPC_INS_SLBIEG, - PPC_INS_SLBMFEE, - PPC_INS_SLBMFEV, - PPC_INS_SLBMTE, - PPC_INS_SLBSYNC, - PPC_INS_SLD, - PPC_INS_SLDI, - PPC_INS_SLW, - PPC_INS_SLWI, - PPC_INS_SRAD, - PPC_INS_SRADI, - PPC_INS_SRAW, - PPC_INS_SRAWI, - PPC_INS_SRD, - PPC_INS_SRDI, - PPC_INS_SRW, - PPC_INS_SRWI, - PPC_INS_STB, - PPC_INS_STBCIX, - PPC_INS_STBCX, - PPC_INS_STBEPX, - PPC_INS_STBU, - PPC_INS_STBUX, - PPC_INS_STBX, - PPC_INS_STD, - PPC_INS_STDAT, - PPC_INS_STDBRX, - PPC_INS_STDCIX, - PPC_INS_STDCX, - PPC_INS_STDU, - PPC_INS_STDUX, - PPC_INS_STDX, - PPC_INS_STFD, - PPC_INS_STFDEPX, - PPC_INS_STFDU, - PPC_INS_STFDUX, - PPC_INS_STFDX, - PPC_INS_STFIWX, - PPC_INS_STFS, - PPC_INS_STFSU, - PPC_INS_STFSUX, - PPC_INS_STFSX, - PPC_INS_STH, - PPC_INS_STHBRX, - PPC_INS_STHCIX, - PPC_INS_STHCX, - PPC_INS_STHEPX, - PPC_INS_STHU, - PPC_INS_STHUX, - PPC_INS_STHX, - PPC_INS_STMW, - PPC_INS_STOP, - PPC_INS_STSWI, - PPC_INS_STVEBX, - PPC_INS_STVEHX, - PPC_INS_STVEWX, - PPC_INS_STVX, - PPC_INS_STVXL, - PPC_INS_STW, - PPC_INS_STWAT, - PPC_INS_STWBRX, - PPC_INS_STWCIX, - PPC_INS_STWCX, - PPC_INS_STWEPX, - PPC_INS_STWU, - PPC_INS_STWUX, - PPC_INS_STWX, - PPC_INS_STXSD, - PPC_INS_STXSDX, - PPC_INS_STXSIBX, - PPC_INS_STXSIHX, - PPC_INS_STXSIWX, - PPC_INS_STXSSP, - PPC_INS_STXSSPX, - PPC_INS_STXV, - PPC_INS_STXVB16X, - PPC_INS_STXVD2X, - PPC_INS_STXVH8X, - PPC_INS_STXVL, - PPC_INS_STXVLL, - PPC_INS_STXVW4X, - PPC_INS_STXVX, - PPC_INS_SUB, - PPC_INS_SUBC, - PPC_INS_SUBF, - PPC_INS_SUBFC, - PPC_INS_SUBFE, - PPC_INS_SUBFIC, - PPC_INS_SUBFME, - PPC_INS_SUBFZE, - PPC_INS_SUBI, - PPC_INS_SUBIC, - PPC_INS_SUBIS, - PPC_INS_SUBPCIS, - PPC_INS_SYNC, - PPC_INS_TABORT, - PPC_INS_TABORTDC, - PPC_INS_TABORTDCI, - PPC_INS_TABORTWC, - PPC_INS_TABORTWCI, - PPC_INS_TBEGIN, - PPC_INS_TCHECK, - PPC_INS_TD, - PPC_INS_TDEQ, - PPC_INS_TDEQI, - PPC_INS_TDGE, - PPC_INS_TDGEI, - PPC_INS_TDGT, - PPC_INS_TDGTI, - PPC_INS_TDI, - PPC_INS_TDLE, - PPC_INS_TDLEI, - PPC_INS_TDLGE, - PPC_INS_TDLGEI, - PPC_INS_TDLGT, - PPC_INS_TDLGTI, - PPC_INS_TDLLE, - PPC_INS_TDLLEI, - PPC_INS_TDLLT, - PPC_INS_TDLLTI, - PPC_INS_TDLNG, - PPC_INS_TDLNGI, - PPC_INS_TDLNL, - PPC_INS_TDLNLI, - PPC_INS_TDLT, - PPC_INS_TDLTI, - PPC_INS_TDNE, - PPC_INS_TDNEI, - PPC_INS_TDNG, - PPC_INS_TDNGI, - PPC_INS_TDNL, - PPC_INS_TDNLI, - PPC_INS_TDU, - PPC_INS_TDUI, - PPC_INS_TEND, - PPC_INS_TLBIA, - PPC_INS_TLBIE, - PPC_INS_TLBIEL, - PPC_INS_TLBIVAX, - PPC_INS_TLBLD, - PPC_INS_TLBLI, - PPC_INS_TLBRE, - PPC_INS_TLBREHI, - PPC_INS_TLBRELO, - PPC_INS_TLBSX, - PPC_INS_TLBSYNC, - PPC_INS_TLBWE, - PPC_INS_TLBWEHI, - PPC_INS_TLBWELO, - PPC_INS_TRAP, - PPC_INS_TRECHKPT, - PPC_INS_TRECLAIM, - PPC_INS_TSR, - PPC_INS_TW, - PPC_INS_TWEQ, - PPC_INS_TWEQI, - PPC_INS_TWGE, - PPC_INS_TWGEI, - PPC_INS_TWGT, - PPC_INS_TWGTI, - PPC_INS_TWI, - PPC_INS_TWLE, - PPC_INS_TWLEI, - PPC_INS_TWLGE, - PPC_INS_TWLGEI, - PPC_INS_TWLGT, - PPC_INS_TWLGTI, - PPC_INS_TWLLE, - PPC_INS_TWLLEI, - PPC_INS_TWLLT, - PPC_INS_TWLLTI, - PPC_INS_TWLNG, - PPC_INS_TWLNGI, - PPC_INS_TWLNL, - PPC_INS_TWLNLI, - PPC_INS_TWLT, - PPC_INS_TWLTI, - PPC_INS_TWNE, - PPC_INS_TWNEI, - PPC_INS_TWNG, - PPC_INS_TWNGI, - PPC_INS_TWNL, - PPC_INS_TWNLI, - PPC_INS_TWU, - PPC_INS_TWUI, - PPC_INS_VABSDUB, - PPC_INS_VABSDUH, - PPC_INS_VABSDUW, - PPC_INS_VADDCUQ, - PPC_INS_VADDCUW, - PPC_INS_VADDECUQ, - PPC_INS_VADDEUQM, - PPC_INS_VADDFP, - PPC_INS_VADDSBS, - PPC_INS_VADDSHS, - PPC_INS_VADDSWS, - PPC_INS_VADDUBM, - PPC_INS_VADDUBS, - PPC_INS_VADDUDM, - PPC_INS_VADDUHM, - PPC_INS_VADDUHS, - PPC_INS_VADDUQM, - PPC_INS_VADDUWM, - PPC_INS_VADDUWS, - PPC_INS_VAND, - PPC_INS_VANDC, - PPC_INS_VAVGSB, - PPC_INS_VAVGSH, - PPC_INS_VAVGSW, - PPC_INS_VAVGUB, - PPC_INS_VAVGUH, - PPC_INS_VAVGUW, - PPC_INS_VBPERMD, - PPC_INS_VBPERMQ, - PPC_INS_VCFSX, - PPC_INS_VCFUX, - PPC_INS_VCIPHER, - PPC_INS_VCIPHERLAST, - PPC_INS_VCLZB, - PPC_INS_VCLZD, - PPC_INS_VCLZH, - PPC_INS_VCLZLSBB, - PPC_INS_VCLZW, - PPC_INS_VCMPBFP, - PPC_INS_VCMPEQFP, - PPC_INS_VCMPEQUB, - PPC_INS_VCMPEQUD, - PPC_INS_VCMPEQUH, - PPC_INS_VCMPEQUW, - PPC_INS_VCMPGEFP, - PPC_INS_VCMPGTFP, - PPC_INS_VCMPGTSB, - PPC_INS_VCMPGTSD, - PPC_INS_VCMPGTSH, - PPC_INS_VCMPGTSW, - PPC_INS_VCMPGTUB, - PPC_INS_VCMPGTUD, - PPC_INS_VCMPGTUH, - PPC_INS_VCMPGTUW, - PPC_INS_VCMPNEB, - PPC_INS_VCMPNEH, - PPC_INS_VCMPNEW, - PPC_INS_VCMPNEZB, - PPC_INS_VCMPNEZH, - PPC_INS_VCMPNEZW, - PPC_INS_VCTSXS, - PPC_INS_VCTUXS, - PPC_INS_VCTZB, - PPC_INS_VCTZD, - PPC_INS_VCTZH, - PPC_INS_VCTZLSBB, - PPC_INS_VCTZW, - PPC_INS_VEQV, - PPC_INS_VEXPTEFP, - PPC_INS_VEXTRACTD, - PPC_INS_VEXTRACTUB, - PPC_INS_VEXTRACTUH, - PPC_INS_VEXTRACTUW, - PPC_INS_VEXTSB2D, - PPC_INS_VEXTSB2W, - PPC_INS_VEXTSH2D, - PPC_INS_VEXTSH2W, - PPC_INS_VEXTSW2D, - PPC_INS_VEXTUBLX, - PPC_INS_VEXTUBRX, - PPC_INS_VEXTUHLX, - PPC_INS_VEXTUHRX, - PPC_INS_VEXTUWLX, - PPC_INS_VEXTUWRX, - PPC_INS_VGBBD, - PPC_INS_VINSERTB, - PPC_INS_VINSERTD, - PPC_INS_VINSERTH, - PPC_INS_VINSERTW, - PPC_INS_VLOGEFP, - PPC_INS_VMADDFP, - PPC_INS_VMAXFP, - PPC_INS_VMAXSB, - PPC_INS_VMAXSD, - PPC_INS_VMAXSH, - PPC_INS_VMAXSW, - PPC_INS_VMAXUB, - PPC_INS_VMAXUD, - PPC_INS_VMAXUH, - PPC_INS_VMAXUW, - PPC_INS_VMHADDSHS, - PPC_INS_VMHRADDSHS, - PPC_INS_VMINFP, - PPC_INS_VMINSB, - PPC_INS_VMINSD, - PPC_INS_VMINSH, - PPC_INS_VMINSW, - PPC_INS_VMINUB, - PPC_INS_VMINUD, - PPC_INS_VMINUH, - PPC_INS_VMINUW, - PPC_INS_VMLADDUHM, - PPC_INS_VMR, - PPC_INS_VMRGEW, - PPC_INS_VMRGHB, - PPC_INS_VMRGHH, - PPC_INS_VMRGHW, - PPC_INS_VMRGLB, - PPC_INS_VMRGLH, - PPC_INS_VMRGLW, - PPC_INS_VMRGOW, - PPC_INS_VMSUMMBM, - PPC_INS_VMSUMSHM, - PPC_INS_VMSUMSHS, - PPC_INS_VMSUMUBM, - PPC_INS_VMSUMUHM, - PPC_INS_VMSUMUHS, - PPC_INS_VMUL10CUQ, - PPC_INS_VMUL10ECUQ, - PPC_INS_VMUL10EUQ, - PPC_INS_VMUL10UQ, - PPC_INS_VMULESB, - PPC_INS_VMULESH, - PPC_INS_VMULESW, - PPC_INS_VMULEUB, - PPC_INS_VMULEUH, - PPC_INS_VMULEUW, - PPC_INS_VMULOSB, - PPC_INS_VMULOSH, - PPC_INS_VMULOSW, - PPC_INS_VMULOUB, - PPC_INS_VMULOUH, - PPC_INS_VMULOUW, - PPC_INS_VMULUWM, - PPC_INS_VNAND, - PPC_INS_VNCIPHER, - PPC_INS_VNCIPHERLAST, - PPC_INS_VNEGD, - PPC_INS_VNEGW, - PPC_INS_VNMSUBFP, - PPC_INS_VNOR, - PPC_INS_VNOT, - PPC_INS_VOR, - PPC_INS_VORC, - PPC_INS_VPERM, - PPC_INS_VPERMR, - PPC_INS_VPERMXOR, - PPC_INS_VPKPX, - PPC_INS_VPKSDSS, - PPC_INS_VPKSDUS, - PPC_INS_VPKSHSS, - PPC_INS_VPKSHUS, - PPC_INS_VPKSWSS, - PPC_INS_VPKSWUS, - PPC_INS_VPKUDUM, - PPC_INS_VPKUDUS, - PPC_INS_VPKUHUM, - PPC_INS_VPKUHUS, - PPC_INS_VPKUWUM, - PPC_INS_VPKUWUS, - PPC_INS_VPMSUMB, - PPC_INS_VPMSUMD, - PPC_INS_VPMSUMH, - PPC_INS_VPMSUMW, - PPC_INS_VPOPCNTB, - PPC_INS_VPOPCNTD, - PPC_INS_VPOPCNTH, - PPC_INS_VPOPCNTW, - PPC_INS_VPRTYBD, - PPC_INS_VPRTYBQ, - PPC_INS_VPRTYBW, - PPC_INS_VREFP, - PPC_INS_VRFIM, - PPC_INS_VRFIN, - PPC_INS_VRFIP, - PPC_INS_VRFIZ, - PPC_INS_VRLB, - PPC_INS_VRLD, - PPC_INS_VRLDMI, - PPC_INS_VRLDNM, - PPC_INS_VRLH, - PPC_INS_VRLW, - PPC_INS_VRLWMI, - PPC_INS_VRLWNM, - PPC_INS_VRSQRTEFP, - PPC_INS_VSBOX, - PPC_INS_VSEL, - PPC_INS_VSHASIGMAD, - PPC_INS_VSHASIGMAW, - PPC_INS_VSL, - PPC_INS_VSLB, - PPC_INS_VSLD, - PPC_INS_VSLDOI, - PPC_INS_VSLH, - PPC_INS_VSLO, - PPC_INS_VSLV, - PPC_INS_VSLW, - PPC_INS_VSPLTB, - PPC_INS_VSPLTH, - PPC_INS_VSPLTISB, - PPC_INS_VSPLTISH, - PPC_INS_VSPLTISW, - PPC_INS_VSPLTW, - PPC_INS_VSR, - PPC_INS_VSRAB, - PPC_INS_VSRAD, - PPC_INS_VSRAH, - PPC_INS_VSRAW, - PPC_INS_VSRB, - PPC_INS_VSRD, - PPC_INS_VSRH, - PPC_INS_VSRO, - PPC_INS_VSRV, - PPC_INS_VSRW, - PPC_INS_VSUBCUQ, - PPC_INS_VSUBCUW, - PPC_INS_VSUBECUQ, - PPC_INS_VSUBEUQM, - PPC_INS_VSUBFP, - PPC_INS_VSUBSBS, - PPC_INS_VSUBSHS, - PPC_INS_VSUBSWS, - PPC_INS_VSUBUBM, - PPC_INS_VSUBUBS, - PPC_INS_VSUBUDM, - PPC_INS_VSUBUHM, - PPC_INS_VSUBUHS, - PPC_INS_VSUBUQM, - PPC_INS_VSUBUWM, - PPC_INS_VSUBUWS, - PPC_INS_VSUM2SWS, - PPC_INS_VSUM4SBS, - PPC_INS_VSUM4SHS, - PPC_INS_VSUM4UBS, - PPC_INS_VSUMSWS, - PPC_INS_VUPKHPX, - PPC_INS_VUPKHSB, - PPC_INS_VUPKHSH, - PPC_INS_VUPKHSW, - PPC_INS_VUPKLPX, - PPC_INS_VUPKLSB, - PPC_INS_VUPKLSH, - PPC_INS_VUPKLSW, - PPC_INS_VXOR, - PPC_INS_WAIT, - PPC_INS_WAITIMPL, - PPC_INS_WAITRSV, - PPC_INS_WRTEE, - PPC_INS_WRTEEI, - PPC_INS_XNOP, - PPC_INS_XOR, - PPC_INS_XORI, - PPC_INS_XORIS, - PPC_INS_XSABSDP, - PPC_INS_XSABSQP, - PPC_INS_XSADDDP, - PPC_INS_XSADDQP, - PPC_INS_XSADDQPO, - PPC_INS_XSADDSP, - PPC_INS_XSCMPEQDP, - PPC_INS_XSCMPEXPDP, - PPC_INS_XSCMPEXPQP, - PPC_INS_XSCMPGEDP, - PPC_INS_XSCMPGTDP, - PPC_INS_XSCMPODP, - PPC_INS_XSCMPOQP, - PPC_INS_XSCMPUDP, - PPC_INS_XSCMPUQP, - PPC_INS_XSCPSGNDP, - PPC_INS_XSCPSGNQP, - PPC_INS_XSCVDPHP, - PPC_INS_XSCVDPQP, - PPC_INS_XSCVDPSP, - PPC_INS_XSCVDPSPN, - PPC_INS_XSCVDPSXDS, - PPC_INS_XSCVDPSXWS, - PPC_INS_XSCVDPUXDS, - PPC_INS_XSCVDPUXWS, - PPC_INS_XSCVHPDP, - PPC_INS_XSCVQPDP, - PPC_INS_XSCVQPDPO, - PPC_INS_XSCVQPSDZ, - PPC_INS_XSCVQPSWZ, - PPC_INS_XSCVQPUDZ, - PPC_INS_XSCVQPUWZ, - PPC_INS_XSCVSDQP, - PPC_INS_XSCVSPDP, - PPC_INS_XSCVSPDPN, - PPC_INS_XSCVSXDDP, - PPC_INS_XSCVSXDSP, - PPC_INS_XSCVUDQP, - PPC_INS_XSCVUXDDP, - PPC_INS_XSCVUXDSP, - PPC_INS_XSDIVDP, - PPC_INS_XSDIVQP, - PPC_INS_XSDIVQPO, - PPC_INS_XSDIVSP, - PPC_INS_XSIEXPDP, - PPC_INS_XSIEXPQP, - PPC_INS_XSMADDADP, - PPC_INS_XSMADDASP, - PPC_INS_XSMADDMDP, - PPC_INS_XSMADDMSP, - PPC_INS_XSMADDQP, - PPC_INS_XSMADDQPO, - PPC_INS_XSMAXCDP, - PPC_INS_XSMAXDP, - PPC_INS_XSMAXJDP, - PPC_INS_XSMINCDP, - PPC_INS_XSMINDP, - PPC_INS_XSMINJDP, - PPC_INS_XSMSUBADP, - PPC_INS_XSMSUBASP, - PPC_INS_XSMSUBMDP, - PPC_INS_XSMSUBMSP, - PPC_INS_XSMSUBQP, - PPC_INS_XSMSUBQPO, - PPC_INS_XSMULDP, - PPC_INS_XSMULQP, - PPC_INS_XSMULQPO, - PPC_INS_XSMULSP, - PPC_INS_XSNABSDP, - PPC_INS_XSNABSQP, - PPC_INS_XSNEGDP, - PPC_INS_XSNEGQP, - PPC_INS_XSNMADDADP, - PPC_INS_XSNMADDASP, - PPC_INS_XSNMADDMDP, - PPC_INS_XSNMADDMSP, - PPC_INS_XSNMADDQP, - PPC_INS_XSNMADDQPO, - PPC_INS_XSNMSUBADP, - PPC_INS_XSNMSUBASP, - PPC_INS_XSNMSUBMDP, - PPC_INS_XSNMSUBMSP, - PPC_INS_XSNMSUBQP, - PPC_INS_XSNMSUBQPO, - PPC_INS_XSRDPI, - PPC_INS_XSRDPIC, - PPC_INS_XSRDPIM, - PPC_INS_XSRDPIP, - PPC_INS_XSRDPIZ, - PPC_INS_XSREDP, - PPC_INS_XSRESP, - PPC_INS_XSRQPI, - PPC_INS_XSRQPIX, - PPC_INS_XSRQPXP, - PPC_INS_XSRSP, - PPC_INS_XSRSQRTEDP, - PPC_INS_XSRSQRTESP, - PPC_INS_XSSQRTDP, - PPC_INS_XSSQRTQP, - PPC_INS_XSSQRTQPO, - PPC_INS_XSSQRTSP, - PPC_INS_XSSUBDP, - PPC_INS_XSSUBQP, - PPC_INS_XSSUBQPO, - PPC_INS_XSSUBSP, - PPC_INS_XSTDIVDP, - PPC_INS_XSTSQRTDP, - PPC_INS_XSTSTDCDP, - PPC_INS_XSTSTDCQP, - PPC_INS_XSTSTDCSP, - PPC_INS_XSXEXPDP, - PPC_INS_XSXEXPQP, - PPC_INS_XSXSIGDP, - PPC_INS_XSXSIGQP, - PPC_INS_XVABSDP, - PPC_INS_XVABSSP, - PPC_INS_XVADDDP, - PPC_INS_XVADDSP, - PPC_INS_XVCMPEQDP, - PPC_INS_XVCMPEQSP, - PPC_INS_XVCMPGEDP, - PPC_INS_XVCMPGESP, - PPC_INS_XVCMPGTDP, - PPC_INS_XVCMPGTSP, - PPC_INS_XVCPSGNDP, - PPC_INS_XVCPSGNSP, - PPC_INS_XVCVDPSP, - PPC_INS_XVCVDPSXDS, - PPC_INS_XVCVDPSXWS, - PPC_INS_XVCVDPUXDS, - PPC_INS_XVCVDPUXWS, - PPC_INS_XVCVHPSP, - PPC_INS_XVCVSPDP, - PPC_INS_XVCVSPHP, - PPC_INS_XVCVSPSXDS, - PPC_INS_XVCVSPSXWS, - PPC_INS_XVCVSPUXDS, - PPC_INS_XVCVSPUXWS, - PPC_INS_XVCVSXDDP, - PPC_INS_XVCVSXDSP, - PPC_INS_XVCVSXWDP, - PPC_INS_XVCVSXWSP, - PPC_INS_XVCVUXDDP, - PPC_INS_XVCVUXDSP, - PPC_INS_XVCVUXWDP, - PPC_INS_XVCVUXWSP, - PPC_INS_XVDIVDP, - PPC_INS_XVDIVSP, - PPC_INS_XVIEXPDP, - PPC_INS_XVIEXPSP, - PPC_INS_XVMADDADP, - PPC_INS_XVMADDASP, - PPC_INS_XVMADDMDP, - PPC_INS_XVMADDMSP, - PPC_INS_XVMAXDP, - PPC_INS_XVMAXSP, - PPC_INS_XVMINDP, - PPC_INS_XVMINSP, - PPC_INS_XVMOVDP, - PPC_INS_XVMOVSP, - PPC_INS_XVMSUBADP, - PPC_INS_XVMSUBASP, - PPC_INS_XVMSUBMDP, - PPC_INS_XVMSUBMSP, - PPC_INS_XVMULDP, - PPC_INS_XVMULSP, - PPC_INS_XVNABSDP, - PPC_INS_XVNABSSP, - PPC_INS_XVNEGDP, - PPC_INS_XVNEGSP, - PPC_INS_XVNMADDADP, - PPC_INS_XVNMADDASP, - PPC_INS_XVNMADDMDP, - PPC_INS_XVNMADDMSP, - PPC_INS_XVNMSUBADP, - PPC_INS_XVNMSUBASP, - PPC_INS_XVNMSUBMDP, - PPC_INS_XVNMSUBMSP, - PPC_INS_XVRDPI, - PPC_INS_XVRDPIC, - PPC_INS_XVRDPIM, - PPC_INS_XVRDPIP, - PPC_INS_XVRDPIZ, - PPC_INS_XVREDP, - PPC_INS_XVRESP, - PPC_INS_XVRSPI, - PPC_INS_XVRSPIC, - PPC_INS_XVRSPIM, - PPC_INS_XVRSPIP, - PPC_INS_XVRSPIZ, - PPC_INS_XVRSQRTEDP, - PPC_INS_XVRSQRTESP, - PPC_INS_XVSQRTDP, - PPC_INS_XVSQRTSP, - PPC_INS_XVSUBDP, - PPC_INS_XVSUBSP, - PPC_INS_XVTDIVDP, - PPC_INS_XVTDIVSP, - PPC_INS_XVTSQRTDP, - PPC_INS_XVTSQRTSP, - PPC_INS_XVTSTDCDP, - PPC_INS_XVTSTDCSP, - PPC_INS_XVXEXPDP, - PPC_INS_XVXEXPSP, - PPC_INS_XVXSIGDP, - PPC_INS_XVXSIGSP, - PPC_INS_XXBRD, - PPC_INS_XXBRH, - PPC_INS_XXBRQ, - PPC_INS_XXBRW, - PPC_INS_XXEXTRACTUW, - PPC_INS_XXINSERTW, - PPC_INS_XXLAND, - PPC_INS_XXLANDC, - PPC_INS_XXLEQV, - PPC_INS_XXLNAND, - PPC_INS_XXLNOR, - PPC_INS_XXLOR, - PPC_INS_XXLORC, - PPC_INS_XXLXOR, - PPC_INS_XXMRGHD, - PPC_INS_XXMRGHW, - PPC_INS_XXMRGLD, - PPC_INS_XXMRGLW, - PPC_INS_XXPERM, - PPC_INS_XXPERMDI, - PPC_INS_XXPERMR, - PPC_INS_XXSEL, - PPC_INS_XXSLDWI, - PPC_INS_XXSPLTD, - PPC_INS_XXSPLTIB, - PPC_INS_XXSPLTW, - PPC_INS_XXSWAPD, - - PPC_INS_DCBZ_L, - PPC_INS_PSQ_L, - PPC_INS_PSQ_LU, - PPC_INS_PSQ_LUX, - PPC_INS_PSQ_LX, - PPC_INS_PSQ_ST, - PPC_INS_PSQ_STU, - PPC_INS_PSQ_STUX, - PPC_INS_PSQ_STX, - PPC_INS_PS_ABS, - PPC_INS_PS_ADD, - PPC_INS_PS_CMPO0, - PPC_INS_PS_CMPO1, - PPC_INS_PS_CMPU0, - PPC_INS_PS_CMPU1, - PPC_INS_PS_DIV, - PPC_INS_PS_MADD, - PPC_INS_PS_MADDS0, - PPC_INS_PS_MADDS1, - PPC_INS_PS_MERGE00, - PPC_INS_PS_MERGE01, - PPC_INS_PS_MERGE10, - PPC_INS_PS_MERGE11, - PPC_INS_PS_MR, - PPC_INS_PS_MSUB, - PPC_INS_PS_MUL, - PPC_INS_PS_MULS0, - PPC_INS_PS_MULS1, - PPC_INS_PS_NABS, - PPC_INS_PS_NEG, - PPC_INS_PS_NMADD, - PPC_INS_PS_NMSUB, - PPC_INS_PS_RES, - PPC_INS_PS_RSQRTE, - PPC_INS_PS_SEL, - PPC_INS_PS_SUB, - PPC_INS_PS_SUM0, - PPC_INS_PS_SUM1, - - PPC_INS_ENDING, // <-- mark the end of the list of instructions -} ppc_insn; - -/// Group of PPC instructions -typedef enum ppc_insn_group { - PPC_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - PPC_GRP_JUMP, ///< = CS_GRP_JUMP - - // Architecture-specific groups - PPC_GRP_ALTIVEC = 128, - PPC_GRP_MODE32, - PPC_GRP_MODE64, - PPC_GRP_BOOKE, - PPC_GRP_NOTBOOKE, - PPC_GRP_SPE, - PPC_GRP_VSX, - PPC_GRP_E500, - PPC_GRP_PPC4XX, - PPC_GRP_PPC6XX, - PPC_GRP_ICBT, - PPC_GRP_P8ALTIVEC, - PPC_GRP_P8VECTOR, - PPC_GRP_QPX, - PPC_GRP_PS, - - PPC_GRP_ENDING, // <-- mark the end of the list of groups -} ppc_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/riscv.h b/.tools/python-revlibs/capstone/include/capstone/riscv.h deleted file mode 100644 index 6c87934..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/riscv.h +++ /dev/null @@ -1,531 +0,0 @@ -#ifndef CAPSTONE_RISCV_H -#define CAPSTONE_RISCV_H - -/* Capstone Disassembly Engine */ -/* RISC-V Backend By Rodrigo Cortes Porto & - Shawn Chang , HardenedLinux@2018 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) -#include -#endif - -#include "platform.h" - -// GCC MIPS toolchain has a default macro called "mips" which breaks -// compilation -//#undef riscv - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -//> Operand type for instruction's operands -typedef enum riscv_op_type { - RISCV_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). - RISCV_OP_REG, // = CS_OP_REG (Register operand). - RISCV_OP_IMM, // = CS_OP_IMM (Immediate operand). - RISCV_OP_MEM, // = CS_OP_MEM (Memory operand). -} riscv_op_type; - -// Instruction's operand referring to memory -// This is associated with RISCV_OP_MEM operand type above -typedef struct riscv_op_mem { - unsigned int base; // base register - int64_t disp; // displacement/offset value -} riscv_op_mem; - -// Instruction operand -typedef struct cs_riscv_op { - riscv_op_type type; // operand type - union { - unsigned int reg; // register value for REG operand - int64_t imm; // immediate value for IMM operand - riscv_op_mem mem; // base/disp value for MEM operand - }; -} cs_riscv_op; - -// Instruction structure -typedef struct cs_riscv { - // Does this instruction need effective address or not. - bool need_effective_addr; - // Number of operands of this instruction, - // or 0 when instruction has no operand. - uint8_t op_count; - cs_riscv_op operands[8]; // operands for this instruction. -} cs_riscv; - -//> RISCV registers -typedef enum riscv_reg { - RISCV_REG_INVALID = 0, - //> General purpose registers - RISCV_REG_X0, // "zero" - RISCV_REG_ZERO = RISCV_REG_X0, // "zero" - RISCV_REG_X1, // "ra" - RISCV_REG_RA = RISCV_REG_X1, // "ra" - RISCV_REG_X2, // "sp" - RISCV_REG_SP = RISCV_REG_X2, // "sp" - RISCV_REG_X3, // "gp" - RISCV_REG_GP = RISCV_REG_X3, // "gp" - RISCV_REG_X4, // "tp" - RISCV_REG_TP = RISCV_REG_X4, // "tp" - RISCV_REG_X5, // "t0" - RISCV_REG_T0 = RISCV_REG_X5, // "t0" - RISCV_REG_X6, // "t1" - RISCV_REG_T1 = RISCV_REG_X6, // "t1" - RISCV_REG_X7, // "t2" - RISCV_REG_T2 = RISCV_REG_X7, // "t2" - RISCV_REG_X8, // "s0/fp" - RISCV_REG_S0 = RISCV_REG_X8, // "s0" - RISCV_REG_FP = RISCV_REG_X8, // "fp" - RISCV_REG_X9, // "s1" - RISCV_REG_S1 = RISCV_REG_X9, // "s1" - RISCV_REG_X10, // "a0" - RISCV_REG_A0 = RISCV_REG_X10, // "a0" - RISCV_REG_X11, // "a1" - RISCV_REG_A1 = RISCV_REG_X11, // "a1" - RISCV_REG_X12, // "a2" - RISCV_REG_A2 = RISCV_REG_X12, // "a2" - RISCV_REG_X13, // "a3" - RISCV_REG_A3 = RISCV_REG_X13, // "a3" - RISCV_REG_X14, // "a4" - RISCV_REG_A4 = RISCV_REG_X14, // "a4" - RISCV_REG_X15, // "a5" - RISCV_REG_A5 = RISCV_REG_X15, // "a5" - RISCV_REG_X16, // "a6" - RISCV_REG_A6 = RISCV_REG_X16, // "a6" - RISCV_REG_X17, // "a7" - RISCV_REG_A7 = RISCV_REG_X17, // "a7" - RISCV_REG_X18, // "s2" - RISCV_REG_S2 = RISCV_REG_X18, // "s2" - RISCV_REG_X19, // "s3" - RISCV_REG_S3 = RISCV_REG_X19, // "s3" - RISCV_REG_X20, // "s4" - RISCV_REG_S4 = RISCV_REG_X20, // "s4" - RISCV_REG_X21, // "s5" - RISCV_REG_S5 = RISCV_REG_X21, // "s5" - RISCV_REG_X22, // "s6" - RISCV_REG_S6 = RISCV_REG_X22, // "s6" - RISCV_REG_X23, // "s7" - RISCV_REG_S7 = RISCV_REG_X23, // "s7" - RISCV_REG_X24, // "s8" - RISCV_REG_S8 = RISCV_REG_X24, // "s8" - RISCV_REG_X25, // "s9" - RISCV_REG_S9 = RISCV_REG_X25, // "s9" - RISCV_REG_X26, // "s10" - RISCV_REG_S10 = RISCV_REG_X26, // "s10" - RISCV_REG_X27, // "s11" - RISCV_REG_S11 = RISCV_REG_X27, // "s11" - RISCV_REG_X28, // "t3" - RISCV_REG_T3 = RISCV_REG_X28, // "t3" - RISCV_REG_X29, // "t4" - RISCV_REG_T4 = RISCV_REG_X29, // "t4" - RISCV_REG_X30, // "t5" - RISCV_REG_T5 = RISCV_REG_X30, // "t5" - RISCV_REG_X31, // "t6" - RISCV_REG_T6 = RISCV_REG_X31, // "t6" - - //> Floating-point registers - RISCV_REG_F0_32, // "ft0" - RISCV_REG_F0_64, // "ft0" - RISCV_REG_F1_32, // "ft1" - RISCV_REG_F1_64, // "ft1" - RISCV_REG_F2_32, // "ft2" - RISCV_REG_F2_64, // "ft2" - RISCV_REG_F3_32, // "ft3" - RISCV_REG_F3_64, // "ft3" - RISCV_REG_F4_32, // "ft4" - RISCV_REG_F4_64, // "ft4" - RISCV_REG_F5_32, // "ft5" - RISCV_REG_F5_64, // "ft5" - RISCV_REG_F6_32, // "ft6" - RISCV_REG_F6_64, // "ft6" - RISCV_REG_F7_32, // "ft7" - RISCV_REG_F7_64, // "ft7" - RISCV_REG_F8_32, // "fs0" - RISCV_REG_F8_64, // "fs0" - RISCV_REG_F9_32, // "fs1" - RISCV_REG_F9_64, // "fs1" - RISCV_REG_F10_32, // "fa0" - RISCV_REG_F10_64, // "fa0" - RISCV_REG_F11_32, // "fa1" - RISCV_REG_F11_64, // "fa1" - RISCV_REG_F12_32, // "fa2" - RISCV_REG_F12_64, // "fa2" - RISCV_REG_F13_32, // "fa3" - RISCV_REG_F13_64, // "fa3" - RISCV_REG_F14_32, // "fa4" - RISCV_REG_F14_64, // "fa4" - RISCV_REG_F15_32, // "fa5" - RISCV_REG_F15_64, // "fa5" - RISCV_REG_F16_32, // "fa6" - RISCV_REG_F16_64, // "fa6" - RISCV_REG_F17_32, // "fa7" - RISCV_REG_F17_64, // "fa7" - RISCV_REG_F18_32, // "fs2" - RISCV_REG_F18_64, // "fs2" - RISCV_REG_F19_32, // "fs3" - RISCV_REG_F19_64, // "fs3" - RISCV_REG_F20_32, // "fs4" - RISCV_REG_F20_64, // "fs4" - RISCV_REG_F21_32, // "fs5" - RISCV_REG_F21_64, // "fs5" - RISCV_REG_F22_32, // "fs6" - RISCV_REG_F22_64, // "fs6" - RISCV_REG_F23_32, // "fs7" - RISCV_REG_F23_64, // "fs7" - RISCV_REG_F24_32, // "fs8" - RISCV_REG_F24_64, // "fs8" - RISCV_REG_F25_32, // "fs9" - RISCV_REG_F25_64, // "fs9" - RISCV_REG_F26_32, // "fs10" - RISCV_REG_F26_64, // "fs10" - RISCV_REG_F27_32, // "fs11" - RISCV_REG_F27_64, // "fs11" - RISCV_REG_F28_32, // "ft8" - RISCV_REG_F28_64, // "ft8" - RISCV_REG_F29_32, // "ft9" - RISCV_REG_F29_64, // "ft9" - RISCV_REG_F30_32, // "ft10" - RISCV_REG_F30_64, // "ft10" - RISCV_REG_F31_32, // "ft11" - RISCV_REG_F31_64, // "ft11" - - RISCV_REG_ENDING, // <-- mark the end of the list or registers -} riscv_reg; - -//> RISCV instruction -typedef enum riscv_insn { - RISCV_INS_INVALID = 0, - - RISCV_INS_ADD, - RISCV_INS_ADDI, - RISCV_INS_ADDIW, - RISCV_INS_ADDW, - RISCV_INS_AMOADD_D, - RISCV_INS_AMOADD_D_AQ, - RISCV_INS_AMOADD_D_AQ_RL, - RISCV_INS_AMOADD_D_RL, - RISCV_INS_AMOADD_W, - RISCV_INS_AMOADD_W_AQ, - RISCV_INS_AMOADD_W_AQ_RL, - RISCV_INS_AMOADD_W_RL, - RISCV_INS_AMOAND_D, - RISCV_INS_AMOAND_D_AQ, - RISCV_INS_AMOAND_D_AQ_RL, - RISCV_INS_AMOAND_D_RL, - RISCV_INS_AMOAND_W, - RISCV_INS_AMOAND_W_AQ, - RISCV_INS_AMOAND_W_AQ_RL, - RISCV_INS_AMOAND_W_RL, - RISCV_INS_AMOMAXU_D, - RISCV_INS_AMOMAXU_D_AQ, - RISCV_INS_AMOMAXU_D_AQ_RL, - RISCV_INS_AMOMAXU_D_RL, - RISCV_INS_AMOMAXU_W, - RISCV_INS_AMOMAXU_W_AQ, - RISCV_INS_AMOMAXU_W_AQ_RL, - RISCV_INS_AMOMAXU_W_RL, - RISCV_INS_AMOMAX_D, - RISCV_INS_AMOMAX_D_AQ, - RISCV_INS_AMOMAX_D_AQ_RL, - RISCV_INS_AMOMAX_D_RL, - RISCV_INS_AMOMAX_W, - RISCV_INS_AMOMAX_W_AQ, - RISCV_INS_AMOMAX_W_AQ_RL, - RISCV_INS_AMOMAX_W_RL, - RISCV_INS_AMOMINU_D, - RISCV_INS_AMOMINU_D_AQ, - RISCV_INS_AMOMINU_D_AQ_RL, - RISCV_INS_AMOMINU_D_RL, - RISCV_INS_AMOMINU_W, - RISCV_INS_AMOMINU_W_AQ, - RISCV_INS_AMOMINU_W_AQ_RL, - RISCV_INS_AMOMINU_W_RL, - RISCV_INS_AMOMIN_D, - RISCV_INS_AMOMIN_D_AQ, - RISCV_INS_AMOMIN_D_AQ_RL, - RISCV_INS_AMOMIN_D_RL, - RISCV_INS_AMOMIN_W, - RISCV_INS_AMOMIN_W_AQ, - RISCV_INS_AMOMIN_W_AQ_RL, - RISCV_INS_AMOMIN_W_RL, - RISCV_INS_AMOOR_D, - RISCV_INS_AMOOR_D_AQ, - RISCV_INS_AMOOR_D_AQ_RL, - RISCV_INS_AMOOR_D_RL, - RISCV_INS_AMOOR_W, - RISCV_INS_AMOOR_W_AQ, - RISCV_INS_AMOOR_W_AQ_RL, - RISCV_INS_AMOOR_W_RL, - RISCV_INS_AMOSWAP_D, - RISCV_INS_AMOSWAP_D_AQ, - RISCV_INS_AMOSWAP_D_AQ_RL, - RISCV_INS_AMOSWAP_D_RL, - RISCV_INS_AMOSWAP_W, - RISCV_INS_AMOSWAP_W_AQ, - RISCV_INS_AMOSWAP_W_AQ_RL, - RISCV_INS_AMOSWAP_W_RL, - RISCV_INS_AMOXOR_D, - RISCV_INS_AMOXOR_D_AQ, - RISCV_INS_AMOXOR_D_AQ_RL, - RISCV_INS_AMOXOR_D_RL, - RISCV_INS_AMOXOR_W, - RISCV_INS_AMOXOR_W_AQ, - RISCV_INS_AMOXOR_W_AQ_RL, - RISCV_INS_AMOXOR_W_RL, - RISCV_INS_AND, - RISCV_INS_ANDI, - RISCV_INS_AUIPC, - RISCV_INS_BEQ, - RISCV_INS_BGE, - RISCV_INS_BGEU, - RISCV_INS_BLT, - RISCV_INS_BLTU, - RISCV_INS_BNE, - RISCV_INS_CSRRC, - RISCV_INS_CSRRCI, - RISCV_INS_CSRRS, - RISCV_INS_CSRRSI, - RISCV_INS_CSRRW, - RISCV_INS_CSRRWI, - RISCV_INS_C_ADD, - RISCV_INS_C_ADDI, - RISCV_INS_C_ADDI16SP, - RISCV_INS_C_ADDI4SPN, - RISCV_INS_C_ADDIW, - RISCV_INS_C_ADDW, - RISCV_INS_C_AND, - RISCV_INS_C_ANDI, - RISCV_INS_C_BEQZ, - RISCV_INS_C_BNEZ, - RISCV_INS_C_EBREAK, - RISCV_INS_C_FLD, - RISCV_INS_C_FLDSP, - RISCV_INS_C_FLW, - RISCV_INS_C_FLWSP, - RISCV_INS_C_FSD, - RISCV_INS_C_FSDSP, - RISCV_INS_C_FSW, - RISCV_INS_C_FSWSP, - RISCV_INS_C_J, - RISCV_INS_C_JAL, - RISCV_INS_C_JALR, - RISCV_INS_C_JR, - RISCV_INS_C_LD, - RISCV_INS_C_LDSP, - RISCV_INS_C_LI, - RISCV_INS_C_LUI, - RISCV_INS_C_LW, - RISCV_INS_C_LWSP, - RISCV_INS_C_MV, - RISCV_INS_C_NOP, - RISCV_INS_C_OR, - RISCV_INS_C_SD, - RISCV_INS_C_SDSP, - RISCV_INS_C_SLLI, - RISCV_INS_C_SRAI, - RISCV_INS_C_SRLI, - RISCV_INS_C_SUB, - RISCV_INS_C_SUBW, - RISCV_INS_C_SW, - RISCV_INS_C_SWSP, - RISCV_INS_C_UNIMP, - RISCV_INS_C_XOR, - RISCV_INS_DIV, - RISCV_INS_DIVU, - RISCV_INS_DIVUW, - RISCV_INS_DIVW, - RISCV_INS_EBREAK, - RISCV_INS_ECALL, - RISCV_INS_FADD_D, - RISCV_INS_FADD_S, - RISCV_INS_FCLASS_D, - RISCV_INS_FCLASS_S, - RISCV_INS_FCVT_D_L, - RISCV_INS_FCVT_D_LU, - RISCV_INS_FCVT_D_S, - RISCV_INS_FCVT_D_W, - RISCV_INS_FCVT_D_WU, - RISCV_INS_FCVT_LU_D, - RISCV_INS_FCVT_LU_S, - RISCV_INS_FCVT_L_D, - RISCV_INS_FCVT_L_S, - RISCV_INS_FCVT_S_D, - RISCV_INS_FCVT_S_L, - RISCV_INS_FCVT_S_LU, - RISCV_INS_FCVT_S_W, - RISCV_INS_FCVT_S_WU, - RISCV_INS_FCVT_WU_D, - RISCV_INS_FCVT_WU_S, - RISCV_INS_FCVT_W_D, - RISCV_INS_FCVT_W_S, - RISCV_INS_FDIV_D, - RISCV_INS_FDIV_S, - RISCV_INS_FENCE, - RISCV_INS_FENCE_I, - RISCV_INS_FENCE_TSO, - RISCV_INS_FEQ_D, - RISCV_INS_FEQ_S, - RISCV_INS_FLD, - RISCV_INS_FLE_D, - RISCV_INS_FLE_S, - RISCV_INS_FLT_D, - RISCV_INS_FLT_S, - RISCV_INS_FLW, - RISCV_INS_FMADD_D, - RISCV_INS_FMADD_S, - RISCV_INS_FMAX_D, - RISCV_INS_FMAX_S, - RISCV_INS_FMIN_D, - RISCV_INS_FMIN_S, - RISCV_INS_FMSUB_D, - RISCV_INS_FMSUB_S, - RISCV_INS_FMUL_D, - RISCV_INS_FMUL_S, - RISCV_INS_FMV_D_X, - RISCV_INS_FMV_W_X, - RISCV_INS_FMV_X_D, - RISCV_INS_FMV_X_W, - RISCV_INS_FNMADD_D, - RISCV_INS_FNMADD_S, - RISCV_INS_FNMSUB_D, - RISCV_INS_FNMSUB_S, - RISCV_INS_FSD, - RISCV_INS_FSGNJN_D, - RISCV_INS_FSGNJN_S, - RISCV_INS_FSGNJX_D, - RISCV_INS_FSGNJX_S, - RISCV_INS_FSGNJ_D, - RISCV_INS_FSGNJ_S, - RISCV_INS_FSQRT_D, - RISCV_INS_FSQRT_S, - RISCV_INS_FSUB_D, - RISCV_INS_FSUB_S, - RISCV_INS_FSW, - RISCV_INS_JAL, - RISCV_INS_JALR, - RISCV_INS_LB, - RISCV_INS_LBU, - RISCV_INS_LD, - RISCV_INS_LH, - RISCV_INS_LHU, - RISCV_INS_LR_D, - RISCV_INS_LR_D_AQ, - RISCV_INS_LR_D_AQ_RL, - RISCV_INS_LR_D_RL, - RISCV_INS_LR_W, - RISCV_INS_LR_W_AQ, - RISCV_INS_LR_W_AQ_RL, - RISCV_INS_LR_W_RL, - RISCV_INS_LUI, - RISCV_INS_LW, - RISCV_INS_LWU, - RISCV_INS_MRET, - RISCV_INS_MUL, - RISCV_INS_MULH, - RISCV_INS_MULHSU, - RISCV_INS_MULHU, - RISCV_INS_MULW, - RISCV_INS_OR, - RISCV_INS_ORI, - RISCV_INS_REM, - RISCV_INS_REMU, - RISCV_INS_REMUW, - RISCV_INS_REMW, - RISCV_INS_SB, - RISCV_INS_SC_D, - RISCV_INS_SC_D_AQ, - RISCV_INS_SC_D_AQ_RL, - RISCV_INS_SC_D_RL, - RISCV_INS_SC_W, - RISCV_INS_SC_W_AQ, - RISCV_INS_SC_W_AQ_RL, - RISCV_INS_SC_W_RL, - RISCV_INS_SD, - RISCV_INS_SFENCE_VMA, - RISCV_INS_SH, - RISCV_INS_SLL, - RISCV_INS_SLLI, - RISCV_INS_SLLIW, - RISCV_INS_SLLW, - RISCV_INS_SLT, - RISCV_INS_SLTI, - RISCV_INS_SLTIU, - RISCV_INS_SLTU, - RISCV_INS_SRA, - RISCV_INS_SRAI, - RISCV_INS_SRAIW, - RISCV_INS_SRAW, - RISCV_INS_SRET, - RISCV_INS_SRL, - RISCV_INS_SRLI, - RISCV_INS_SRLIW, - RISCV_INS_SRLW, - RISCV_INS_SUB, - RISCV_INS_SUBW, - RISCV_INS_SW, - RISCV_INS_UNIMP, - RISCV_INS_URET, - RISCV_INS_WFI, - RISCV_INS_XOR, - RISCV_INS_XORI, - - RISCV_INS_ENDING, -} riscv_insn; - -//> Group of RISCV instructions -typedef enum riscv_insn_group { - RISCV_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - RISCV_GRP_JUMP, ///< = CS_GRP_JUMP - // all call instructions - RISCV_GRP_CALL, ///< = CS_GRP_CALL - // all return instructions - RISCV_GRP_RET, ///< = CS_GRP_RET - // all interrupt instructions (int+syscall) - RISCV_GRP_INT, ///< = CS_GRP_INT - // all interrupt return instructions - RISCV_GRP_IRET, ///< = CS_GRP_IRET - // all privileged instructions - RISCV_GRP_PRIVILEGE, ///< = CS_GRP_PRIVILEGE - // all relative branching instructions - RISCV_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE - - // Architecture-specific groups - RISCV_GRP_ISRV32 = 128, - RISCV_GRP_ISRV64, - RISCV_GRP_HASSTDEXTA, - RISCV_GRP_HASSTDEXTC, - RISCV_GRP_HASSTDEXTD, - RISCV_GRP_HASSTDEXTF, - RISCV_GRP_HASSTDEXTM, - /* - RISCV_GRP_ISRVA, - RISCV_GRP_ISRVC, - RISCV_GRP_ISRVD, - RISCV_GRP_ISRVCD, - RISCV_GRP_ISRVF, - RISCV_GRP_ISRV32C, - RISCV_GRP_ISRV32CF, - RISCV_GRP_ISRVM, - RISCV_GRP_ISRV64A, - RISCV_GRP_ISRV64C, - RISCV_GRP_ISRV64D, - RISCV_GRP_ISRV64F, - RISCV_GRP_ISRV64M, - */ - RISCV_GRP_ENDING, -} riscv_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/.tools/python-revlibs/capstone/include/capstone/sh.h b/.tools/python-revlibs/capstone/include/capstone/sh.h deleted file mode 100644 index 688de07..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/sh.h +++ /dev/null @@ -1,465 +0,0 @@ -#ifndef CAPSTONE_SH_H -#define CAPSTONE_SH_H - -/* Capstone Disassembly Engine */ -/* By Yoshinori Sato, 2022 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// SH registers and special registers -typedef enum { - SH_REG_INVALID = 0, - - SH_REG_R0, - SH_REG_R1, - SH_REG_R2, - SH_REG_R3, - SH_REG_R4, - SH_REG_R5, - SH_REG_R6, - SH_REG_R7, - - SH_REG_R8, - SH_REG_R9, - SH_REG_R10, - SH_REG_R11, - SH_REG_R12, - SH_REG_R13, - SH_REG_R14, - SH_REG_R15, - - SH_REG_R0_BANK, - SH_REG_R1_BANK, - SH_REG_R2_BANK, - SH_REG_R3_BANK, - SH_REG_R4_BANK, - SH_REG_R5_BANK, - SH_REG_R6_BANK, - SH_REG_R7_BANK, - - SH_REG_FR0, - SH_REG_FR1, - SH_REG_FR2, - SH_REG_FR3, - SH_REG_FR4, - SH_REG_FR5, - SH_REG_FR6, - SH_REG_FR7, - SH_REG_FR8, - SH_REG_FR9, - SH_REG_FR10, - SH_REG_FR11, - SH_REG_FR12, - SH_REG_FR13, - SH_REG_FR14, - SH_REG_FR15, - - SH_REG_DR0, - SH_REG_DR2, - SH_REG_DR4, - SH_REG_DR6, - SH_REG_DR8, - SH_REG_DR10, - SH_REG_DR12, - SH_REG_DR14, - - SH_REG_XD0, - SH_REG_XD2, - SH_REG_XD4, - SH_REG_XD6, - SH_REG_XD8, - SH_REG_XD10, - SH_REG_XD12, - SH_REG_XD14, - - SH_REG_XF0, - SH_REG_XF1, - SH_REG_XF2, - SH_REG_XF3, - SH_REG_XF4, - SH_REG_XF5, - SH_REG_XF6, - SH_REG_XF7, - SH_REG_XF8, - SH_REG_XF9, - SH_REG_XF10, - SH_REG_XF11, - SH_REG_XF12, - SH_REG_XF13, - SH_REG_XF14, - SH_REG_XF15, - - SH_REG_FV0, - SH_REG_FV4, - SH_REG_FV8, - SH_REG_FV12, - - SH_REG_XMATRX, - - SH_REG_PC, - SH_REG_PR, - SH_REG_MACH, - SH_REG_MACL, - - SH_REG_SR, - SH_REG_GBR, - SH_REG_SSR, - SH_REG_SPC, - SH_REG_SGR, - SH_REG_DBR, - SH_REG_VBR, - SH_REG_TBR, - SH_REG_RS, - SH_REG_RE, - SH_REG_MOD, - - SH_REG_FPUL, - SH_REG_FPSCR, - - SH_REG_DSP_X0, - SH_REG_DSP_X1, - SH_REG_DSP_Y0, - SH_REG_DSP_Y1, - SH_REG_DSP_A0, - SH_REG_DSP_A1, - SH_REG_DSP_A0G, - SH_REG_DSP_A1G, - SH_REG_DSP_M0, - SH_REG_DSP_M1, - SH_REG_DSP_DSR, - - SH_REG_DSP_RSV0, - SH_REG_DSP_RSV1, - SH_REG_DSP_RSV2, - SH_REG_DSP_RSV3, - SH_REG_DSP_RSV4, - SH_REG_DSP_RSV5, - SH_REG_DSP_RSV6, - SH_REG_DSP_RSV7, - SH_REG_DSP_RSV8, - SH_REG_DSP_RSV9, - SH_REG_DSP_RSVA, - SH_REG_DSP_RSVB, - SH_REG_DSP_RSVC, - SH_REG_DSP_RSVD, - SH_REG_DSP_RSVE, - SH_REG_DSP_RSVF, - - SH_REG_ENDING, // <-- mark the end of the list of registers -} sh_reg; - -typedef enum { - SH_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - SH_OP_REG, ///< = CS_OP_REG (Register operand). - SH_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - SH_OP_MEM, ///< = CS_OP_MEM (Memory operand). -} sh_op_type; - -typedef enum { - SH_OP_MEM_INVALID = 0, /// <= Invalid - SH_OP_MEM_REG_IND, /// <= Register indirect - SH_OP_MEM_REG_POST, /// <= Register post increment - SH_OP_MEM_REG_PRE, /// <= Register pre decrement - SH_OP_MEM_REG_DISP, /// <= displacement - SH_OP_MEM_REG_R0, /// <= R0 indexed - SH_OP_MEM_GBR_DISP, /// <= GBR based displacement - SH_OP_MEM_GBR_R0, /// <= GBR based R0 indexed - SH_OP_MEM_PCR, /// <= PC relative - SH_OP_MEM_TBR_DISP, /// <= TBR based displaysment -} sh_op_mem_type; - -typedef struct sh_op_mem { - sh_op_mem_type address; /// <= memory address - sh_reg reg; /// <= base register - uint32_t disp; /// <= displacement -} sh_op_mem; - -// SH-DSP instcutions define -typedef enum sh_dsp_insn_type { - SH_INS_DSP_INVALID, - SH_INS_DSP_DOUBLE, - SH_INS_DSP_SINGLE, - SH_INS_DSP_PARALLEL, -} sh_dsp_insn_type; - -typedef enum sh_dsp_insn { - SH_INS_DSP_NOP = 1, - SH_INS_DSP_MOV, - SH_INS_DSP_PSHL, - SH_INS_DSP_PSHA, - SH_INS_DSP_PMULS, - SH_INS_DSP_PCLR_PMULS, - SH_INS_DSP_PSUB_PMULS, - SH_INS_DSP_PADD_PMULS, - SH_INS_DSP_PSUBC, - SH_INS_DSP_PADDC, - SH_INS_DSP_PCMP, - SH_INS_DSP_PABS, - SH_INS_DSP_PRND, - SH_INS_DSP_PSUB, - SH_INS_DSP_PSUBr, - SH_INS_DSP_PADD, - SH_INS_DSP_PAND, - SH_INS_DSP_PXOR, - SH_INS_DSP_POR, - SH_INS_DSP_PDEC, - SH_INS_DSP_PINC, - SH_INS_DSP_PCLR, - SH_INS_DSP_PDMSB, - SH_INS_DSP_PNEG, - SH_INS_DSP_PCOPY, - SH_INS_DSP_PSTS, - SH_INS_DSP_PLDS, - SH_INS_DSP_PSWAP, - SH_INS_DSP_PWAD, - SH_INS_DSP_PWSB, -} sh_dsp_insn; - -typedef enum sh_dsp_operand { - SH_OP_DSP_INVALID, - SH_OP_DSP_REG_PRE, - SH_OP_DSP_REG_IND, - SH_OP_DSP_REG_POST, - SH_OP_DSP_REG_INDEX, - SH_OP_DSP_REG, - SH_OP_DSP_IMM, - -} sh_dsp_operand; - -typedef enum sh_dsp_cc { - SH_DSP_CC_INVALID, - SH_DSP_CC_NONE, - SH_DSP_CC_DCT, - SH_DSP_CC_DCF, -} sh_dsp_cc; - -typedef struct sh_op_dsp { - sh_dsp_insn insn; - sh_dsp_operand operand[2]; - sh_reg r[6]; - sh_dsp_cc cc; - uint8_t imm; - int size; -} sh_op_dsp; - -/// Instruction operand -typedef struct cs_sh_op { - sh_op_type type; - union { - uint64_t imm; ///< immediate value for IMM operand - sh_reg reg; ///< register value for REG operand - sh_op_mem mem; ///< data when operand is targeting memory - sh_op_dsp dsp; ///< dsp instruction - }; -} cs_sh_op; - -/// SH instruction -typedef enum sh_insn { - SH_INS_INVALID, - SH_INS_ADD_r, - SH_INS_ADD, - SH_INS_ADDC, - SH_INS_ADDV, - SH_INS_AND, - SH_INS_BAND, - SH_INS_BANDNOT, - SH_INS_BCLR, - SH_INS_BF, - SH_INS_BF_S, - SH_INS_BLD, - SH_INS_BLDNOT, - SH_INS_BOR, - SH_INS_BORNOT, - SH_INS_BRA, - SH_INS_BRAF, - SH_INS_BSET, - SH_INS_BSR, - SH_INS_BSRF, - SH_INS_BST, - SH_INS_BT, - SH_INS_BT_S, - SH_INS_BXOR, - SH_INS_CLIPS, - SH_INS_CLIPU, - SH_INS_CLRDMXY, - SH_INS_CLRMAC, - SH_INS_CLRS, - SH_INS_CLRT, - SH_INS_CMP_EQ, - SH_INS_CMP_GE, - SH_INS_CMP_GT, - SH_INS_CMP_HI, - SH_INS_CMP_HS, - SH_INS_CMP_PL, - SH_INS_CMP_PZ, - SH_INS_CMP_STR, - SH_INS_DIV0S, - SH_INS_DIV0U, - SH_INS_DIV1, - SH_INS_DIVS, - SH_INS_DIVU, - SH_INS_DMULS_L, - SH_INS_DMULU_L, - SH_INS_DT, - SH_INS_EXTS_B, - SH_INS_EXTS_W, - SH_INS_EXTU_B, - SH_INS_EXTU_W, - SH_INS_FABS, - SH_INS_FADD, - SH_INS_FCMP_EQ, - SH_INS_FCMP_GT, - SH_INS_FCNVDS, - SH_INS_FCNVSD, - SH_INS_FDIV, - SH_INS_FIPR, - SH_INS_FLDI0, - SH_INS_FLDI1, - SH_INS_FLDS, - SH_INS_FLOAT, - SH_INS_FMAC, - SH_INS_FMOV, - SH_INS_FMUL, - SH_INS_FNEG, - SH_INS_FPCHG, - SH_INS_FRCHG, - SH_INS_FSCA, - SH_INS_FSCHG, - SH_INS_FSQRT, - SH_INS_FSRRA, - SH_INS_FSTS, - SH_INS_FSUB, - SH_INS_FTRC, - SH_INS_FTRV, - SH_INS_ICBI, - SH_INS_JMP, - SH_INS_JSR, - SH_INS_JSR_N, - SH_INS_LDBANK, - SH_INS_LDC, - SH_INS_LDRC, - SH_INS_LDRE, - SH_INS_LDRS, - SH_INS_LDS, - SH_INS_LDTLB, - SH_INS_MAC_L, - SH_INS_MAC_W, - SH_INS_MOV, - SH_INS_MOVA, - SH_INS_MOVCA, - SH_INS_MOVCO, - SH_INS_MOVI20, - SH_INS_MOVI20S, - SH_INS_MOVLI, - SH_INS_MOVML, - SH_INS_MOVMU, - SH_INS_MOVRT, - SH_INS_MOVT, - SH_INS_MOVU, - SH_INS_MOVUA, - SH_INS_MUL_L, - SH_INS_MULR, - SH_INS_MULS_W, - SH_INS_MULU_W, - SH_INS_NEG, - SH_INS_NEGC, - SH_INS_NOP, - SH_INS_NOT, - SH_INS_NOTT, - SH_INS_OCBI, - SH_INS_OCBP, - SH_INS_OCBWB, - SH_INS_OR, - SH_INS_PREF, - SH_INS_PREFI, - SH_INS_RESBANK, - SH_INS_ROTCL, - SH_INS_ROTCR, - SH_INS_ROTL, - SH_INS_ROTR, - SH_INS_RTE, - SH_INS_RTS, - SH_INS_RTS_N, - SH_INS_RTV_N, - SH_INS_SETDMX, - SH_INS_SETDMY, - SH_INS_SETRC, - SH_INS_SETS, - SH_INS_SETT, - SH_INS_SHAD, - SH_INS_SHAL, - SH_INS_SHAR, - SH_INS_SHLD, - SH_INS_SHLL, - SH_INS_SHLL16, - SH_INS_SHLL2, - SH_INS_SHLL8, - SH_INS_SHLR, - SH_INS_SHLR16, - SH_INS_SHLR2, - SH_INS_SHLR8, - SH_INS_SLEEP, - SH_INS_STBANK, - SH_INS_STC, - SH_INS_STS, - SH_INS_SUB, - SH_INS_SUBC, - SH_INS_SUBV, - SH_INS_SWAP_B, - SH_INS_SWAP_W, - SH_INS_SYNCO, - SH_INS_TAS, - SH_INS_TRAPA, - SH_INS_TST, - SH_INS_XOR, - SH_INS_XTRCT, - SH_INS_DSP, - SH_INS_ENDING, // <-- mark the end of the list of instructions -} sh_insn; - -/// Instruction structure -typedef struct cs_sh { - sh_insn insn; - uint8_t size; - uint8_t op_count; - cs_sh_op operands[3]; -} cs_sh; - -/// Group of SH instructions -typedef enum sh_insn_group { - SH_GRP_INVALID = 0, ///< CS_GRUP_INVALID - SH_GRP_JUMP, ///< = CS_GRP_JUMP - SH_GRP_CALL, ///< = CS_GRP_CALL - SH_GRP_INT, ///< = CS_GRP_INT - SH_GRP_RET, ///< = CS_GRP_RET - SH_GRP_IRET, ///< = CS_GRP_IRET - SH_GRP_PRIVILEGE, ///< = CS_GRP_PRIVILEGE - SH_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE - - SH_GRP_SH1, - SH_GRP_SH2, - SH_GRP_SH2E, - SH_GRP_SH2DSP, - SH_GRP_SH2A, - SH_GRP_SH2AFPU, - SH_GRP_SH3, - SH_GRP_SH3DSP, - SH_GRP_SH4, - SH_GRP_SH4A, - - SH_GRP_ENDING,// <-- mark the end of the list of groups -} sh_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/sparc.h b/.tools/python-revlibs/capstone/include/capstone/sparc.h deleted file mode 100644 index e33d173..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/sparc.h +++ /dev/null @@ -1,520 +0,0 @@ -#ifndef CAPSTONE_SPARC_H -#define CAPSTONE_SPARC_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2014-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -// GCC SPARC toolchain has a default macro called "sparc" which breaks -// compilation -#undef sparc - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// Enums corresponding to Sparc condition codes, both icc's and fcc's. -typedef enum sparc_cc { - SPARC_CC_INVALID = 0, ///< invalid CC (default) - // Integer condition codes - SPARC_CC_ICC_A = 8+256, ///< Always - SPARC_CC_ICC_N = 0+256, ///< Never - SPARC_CC_ICC_NE = 9+256, ///< Not Equal - SPARC_CC_ICC_E = 1+256, ///< Equal - SPARC_CC_ICC_G = 10+256, ///< Greater - SPARC_CC_ICC_LE = 2+256, ///< Less or Equal - SPARC_CC_ICC_GE = 11+256, ///< Greater or Equal - SPARC_CC_ICC_L = 3+256, ///< Less - SPARC_CC_ICC_GU = 12+256, ///< Greater Unsigned - SPARC_CC_ICC_LEU = 4+256, ///< Less or Equal Unsigned - SPARC_CC_ICC_CC = 13+256, ///< Carry Clear/Great or Equal Unsigned - SPARC_CC_ICC_CS = 5+256, ///< Carry Set/Less Unsigned - SPARC_CC_ICC_POS = 14+256, ///< Positive - SPARC_CC_ICC_NEG = 6+256, ///< Negative - SPARC_CC_ICC_VC = 15+256, ///< Overflow Clear - SPARC_CC_ICC_VS = 7+256, ///< Overflow Set - - // Floating condition codes - SPARC_CC_FCC_A = 8+16+256, ///< Always - SPARC_CC_FCC_N = 0+16+256, ///< Never - SPARC_CC_FCC_U = 7+16+256, ///< Unordered - SPARC_CC_FCC_G = 6+16+256, ///< Greater - SPARC_CC_FCC_UG = 5+16+256, ///< Unordered or Greater - SPARC_CC_FCC_L = 4+16+256, ///< Less - SPARC_CC_FCC_UL = 3+16+256, ///< Unordered or Less - SPARC_CC_FCC_LG = 2+16+256, ///< Less or Greater - SPARC_CC_FCC_NE = 1+16+256, ///< Not Equal - SPARC_CC_FCC_E = 9+16+256, ///< Equal - SPARC_CC_FCC_UE = 10+16+256, ///< Unordered or Equal - SPARC_CC_FCC_GE = 11+16+256, ///< Greater or Equal - SPARC_CC_FCC_UGE = 12+16+256, ///< Unordered or Greater or Equal - SPARC_CC_FCC_LE = 13+16+256, ///< Less or Equal - SPARC_CC_FCC_ULE = 14+16+256, ///< Unordered or Less or Equal - SPARC_CC_FCC_O = 15+16+256, ///< Ordered -} sparc_cc; - -/// Branch hint -typedef enum sparc_hint { - SPARC_HINT_INVALID = 0, ///< no hint - SPARC_HINT_A = 1 << 0, ///< annul delay slot instruction - SPARC_HINT_PT = 1 << 1, ///< branch taken - SPARC_HINT_PN = 1 << 2, ///< branch NOT taken -} sparc_hint; - -/// Operand type for instruction's operands -typedef enum sparc_op_type { - SPARC_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - SPARC_OP_REG, ///< = CS_OP_REG (Register operand). - SPARC_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - SPARC_OP_MEM, ///< = CS_OP_MEM (Memory operand). -} sparc_op_type; - -/// SPARC registers -typedef enum sparc_reg { - SPARC_REG_INVALID = 0, - - SPARC_REG_F0, - SPARC_REG_F1, - SPARC_REG_F2, - SPARC_REG_F3, - SPARC_REG_F4, - SPARC_REG_F5, - SPARC_REG_F6, - SPARC_REG_F7, - SPARC_REG_F8, - SPARC_REG_F9, - SPARC_REG_F10, - SPARC_REG_F11, - SPARC_REG_F12, - SPARC_REG_F13, - SPARC_REG_F14, - SPARC_REG_F15, - SPARC_REG_F16, - SPARC_REG_F17, - SPARC_REG_F18, - SPARC_REG_F19, - SPARC_REG_F20, - SPARC_REG_F21, - SPARC_REG_F22, - SPARC_REG_F23, - SPARC_REG_F24, - SPARC_REG_F25, - SPARC_REG_F26, - SPARC_REG_F27, - SPARC_REG_F28, - SPARC_REG_F29, - SPARC_REG_F30, - SPARC_REG_F31, - SPARC_REG_F32, - SPARC_REG_F34, - SPARC_REG_F36, - SPARC_REG_F38, - SPARC_REG_F40, - SPARC_REG_F42, - SPARC_REG_F44, - SPARC_REG_F46, - SPARC_REG_F48, - SPARC_REG_F50, - SPARC_REG_F52, - SPARC_REG_F54, - SPARC_REG_F56, - SPARC_REG_F58, - SPARC_REG_F60, - SPARC_REG_F62, - SPARC_REG_FCC0, // Floating condition codes - SPARC_REG_FCC1, - SPARC_REG_FCC2, - SPARC_REG_FCC3, - SPARC_REG_FP, - SPARC_REG_G0, - SPARC_REG_G1, - SPARC_REG_G2, - SPARC_REG_G3, - SPARC_REG_G4, - SPARC_REG_G5, - SPARC_REG_G6, - SPARC_REG_G7, - SPARC_REG_I0, - SPARC_REG_I1, - SPARC_REG_I2, - SPARC_REG_I3, - SPARC_REG_I4, - SPARC_REG_I5, - SPARC_REG_I7, - SPARC_REG_ICC, // Integer condition codes - SPARC_REG_L0, - SPARC_REG_L1, - SPARC_REG_L2, - SPARC_REG_L3, - SPARC_REG_L4, - SPARC_REG_L5, - SPARC_REG_L6, - SPARC_REG_L7, - SPARC_REG_O0, - SPARC_REG_O1, - SPARC_REG_O2, - SPARC_REG_O3, - SPARC_REG_O4, - SPARC_REG_O5, - SPARC_REG_O7, - SPARC_REG_SP, - SPARC_REG_Y, - - // special register - SPARC_REG_XCC, - - SPARC_REG_ENDING, // <-- mark the end of the list of registers - - // extras - SPARC_REG_O6 = SPARC_REG_SP, - SPARC_REG_I6 = SPARC_REG_FP, -} sparc_reg; - -/// Instruction's operand referring to memory -/// This is associated with SPARC_OP_MEM operand type above -typedef struct sparc_op_mem { - uint8_t base; ///< base register, can be safely interpreted as - ///< a value of type `sparc_reg`, but it is only - ///< one byte wide - uint8_t index; ///< index register, same conditions apply here - int32_t disp; ///< displacement/offset value -} sparc_op_mem; - -/// Instruction operand -typedef struct cs_sparc_op { - sparc_op_type type; ///< operand type - union { - sparc_reg reg; ///< register value for REG operand - int64_t imm; ///< immediate value for IMM operand - sparc_op_mem mem; ///< base/disp value for MEM operand - }; -} cs_sparc_op; - -/// Instruction structure -typedef struct cs_sparc { - sparc_cc cc; ///< code condition for this insn - sparc_hint hint; ///< branch hint: encoding as bitwise OR of sparc_hint. - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - cs_sparc_op operands[4]; ///< operands for this instruction. -} cs_sparc; - -/// SPARC instruction -typedef enum sparc_insn { - SPARC_INS_INVALID = 0, - - SPARC_INS_ADDCC, - SPARC_INS_ADDX, - SPARC_INS_ADDXCC, - SPARC_INS_ADDXC, - SPARC_INS_ADDXCCC, - SPARC_INS_ADD, - SPARC_INS_ALIGNADDR, - SPARC_INS_ALIGNADDRL, - SPARC_INS_ANDCC, - SPARC_INS_ANDNCC, - SPARC_INS_ANDN, - SPARC_INS_AND, - SPARC_INS_ARRAY16, - SPARC_INS_ARRAY32, - SPARC_INS_ARRAY8, - SPARC_INS_B, - SPARC_INS_JMP, - SPARC_INS_BMASK, - SPARC_INS_FB, - SPARC_INS_BRGEZ, - SPARC_INS_BRGZ, - SPARC_INS_BRLEZ, - SPARC_INS_BRLZ, - SPARC_INS_BRNZ, - SPARC_INS_BRZ, - SPARC_INS_BSHUFFLE, - SPARC_INS_CALL, - SPARC_INS_CASX, - SPARC_INS_CAS, - SPARC_INS_CMASK16, - SPARC_INS_CMASK32, - SPARC_INS_CMASK8, - SPARC_INS_CMP, - SPARC_INS_EDGE16, - SPARC_INS_EDGE16L, - SPARC_INS_EDGE16LN, - SPARC_INS_EDGE16N, - SPARC_INS_EDGE32, - SPARC_INS_EDGE32L, - SPARC_INS_EDGE32LN, - SPARC_INS_EDGE32N, - SPARC_INS_EDGE8, - SPARC_INS_EDGE8L, - SPARC_INS_EDGE8LN, - SPARC_INS_EDGE8N, - SPARC_INS_FABSD, - SPARC_INS_FABSQ, - SPARC_INS_FABSS, - SPARC_INS_FADDD, - SPARC_INS_FADDQ, - SPARC_INS_FADDS, - SPARC_INS_FALIGNDATA, - SPARC_INS_FAND, - SPARC_INS_FANDNOT1, - SPARC_INS_FANDNOT1S, - SPARC_INS_FANDNOT2, - SPARC_INS_FANDNOT2S, - SPARC_INS_FANDS, - SPARC_INS_FCHKSM16, - SPARC_INS_FCMPD, - SPARC_INS_FCMPEQ16, - SPARC_INS_FCMPEQ32, - SPARC_INS_FCMPGT16, - SPARC_INS_FCMPGT32, - SPARC_INS_FCMPLE16, - SPARC_INS_FCMPLE32, - SPARC_INS_FCMPNE16, - SPARC_INS_FCMPNE32, - SPARC_INS_FCMPQ, - SPARC_INS_FCMPS, - SPARC_INS_FDIVD, - SPARC_INS_FDIVQ, - SPARC_INS_FDIVS, - SPARC_INS_FDMULQ, - SPARC_INS_FDTOI, - SPARC_INS_FDTOQ, - SPARC_INS_FDTOS, - SPARC_INS_FDTOX, - SPARC_INS_FEXPAND, - SPARC_INS_FHADDD, - SPARC_INS_FHADDS, - SPARC_INS_FHSUBD, - SPARC_INS_FHSUBS, - SPARC_INS_FITOD, - SPARC_INS_FITOQ, - SPARC_INS_FITOS, - SPARC_INS_FLCMPD, - SPARC_INS_FLCMPS, - SPARC_INS_FLUSHW, - SPARC_INS_FMEAN16, - SPARC_INS_FMOVD, - SPARC_INS_FMOVQ, - SPARC_INS_FMOVRDGEZ, - SPARC_INS_FMOVRQGEZ, - SPARC_INS_FMOVRSGEZ, - SPARC_INS_FMOVRDGZ, - SPARC_INS_FMOVRQGZ, - SPARC_INS_FMOVRSGZ, - SPARC_INS_FMOVRDLEZ, - SPARC_INS_FMOVRQLEZ, - SPARC_INS_FMOVRSLEZ, - SPARC_INS_FMOVRDLZ, - SPARC_INS_FMOVRQLZ, - SPARC_INS_FMOVRSLZ, - SPARC_INS_FMOVRDNZ, - SPARC_INS_FMOVRQNZ, - SPARC_INS_FMOVRSNZ, - SPARC_INS_FMOVRDZ, - SPARC_INS_FMOVRQZ, - SPARC_INS_FMOVRSZ, - SPARC_INS_FMOVS, - SPARC_INS_FMUL8SUX16, - SPARC_INS_FMUL8ULX16, - SPARC_INS_FMUL8X16, - SPARC_INS_FMUL8X16AL, - SPARC_INS_FMUL8X16AU, - SPARC_INS_FMULD, - SPARC_INS_FMULD8SUX16, - SPARC_INS_FMULD8ULX16, - SPARC_INS_FMULQ, - SPARC_INS_FMULS, - SPARC_INS_FNADDD, - SPARC_INS_FNADDS, - SPARC_INS_FNAND, - SPARC_INS_FNANDS, - SPARC_INS_FNEGD, - SPARC_INS_FNEGQ, - SPARC_INS_FNEGS, - SPARC_INS_FNHADDD, - SPARC_INS_FNHADDS, - SPARC_INS_FNOR, - SPARC_INS_FNORS, - SPARC_INS_FNOT1, - SPARC_INS_FNOT1S, - SPARC_INS_FNOT2, - SPARC_INS_FNOT2S, - SPARC_INS_FONE, - SPARC_INS_FONES, - SPARC_INS_FOR, - SPARC_INS_FORNOT1, - SPARC_INS_FORNOT1S, - SPARC_INS_FORNOT2, - SPARC_INS_FORNOT2S, - SPARC_INS_FORS, - SPARC_INS_FPACK16, - SPARC_INS_FPACK32, - SPARC_INS_FPACKFIX, - SPARC_INS_FPADD16, - SPARC_INS_FPADD16S, - SPARC_INS_FPADD32, - SPARC_INS_FPADD32S, - SPARC_INS_FPADD64, - SPARC_INS_FPMERGE, - SPARC_INS_FPSUB16, - SPARC_INS_FPSUB16S, - SPARC_INS_FPSUB32, - SPARC_INS_FPSUB32S, - SPARC_INS_FQTOD, - SPARC_INS_FQTOI, - SPARC_INS_FQTOS, - SPARC_INS_FQTOX, - SPARC_INS_FSLAS16, - SPARC_INS_FSLAS32, - SPARC_INS_FSLL16, - SPARC_INS_FSLL32, - SPARC_INS_FSMULD, - SPARC_INS_FSQRTD, - SPARC_INS_FSQRTQ, - SPARC_INS_FSQRTS, - SPARC_INS_FSRA16, - SPARC_INS_FSRA32, - SPARC_INS_FSRC1, - SPARC_INS_FSRC1S, - SPARC_INS_FSRC2, - SPARC_INS_FSRC2S, - SPARC_INS_FSRL16, - SPARC_INS_FSRL32, - SPARC_INS_FSTOD, - SPARC_INS_FSTOI, - SPARC_INS_FSTOQ, - SPARC_INS_FSTOX, - SPARC_INS_FSUBD, - SPARC_INS_FSUBQ, - SPARC_INS_FSUBS, - SPARC_INS_FXNOR, - SPARC_INS_FXNORS, - SPARC_INS_FXOR, - SPARC_INS_FXORS, - SPARC_INS_FXTOD, - SPARC_INS_FXTOQ, - SPARC_INS_FXTOS, - SPARC_INS_FZERO, - SPARC_INS_FZEROS, - SPARC_INS_JMPL, - SPARC_INS_LDD, - SPARC_INS_LD, - SPARC_INS_LDQ, - SPARC_INS_LDSB, - SPARC_INS_LDSH, - SPARC_INS_LDSW, - SPARC_INS_LDUB, - SPARC_INS_LDUH, - SPARC_INS_LDX, - SPARC_INS_LZCNT, - SPARC_INS_MEMBAR, - SPARC_INS_MOVDTOX, - SPARC_INS_MOV, - SPARC_INS_MOVRGEZ, - SPARC_INS_MOVRGZ, - SPARC_INS_MOVRLEZ, - SPARC_INS_MOVRLZ, - SPARC_INS_MOVRNZ, - SPARC_INS_MOVRZ, - SPARC_INS_MOVSTOSW, - SPARC_INS_MOVSTOUW, - SPARC_INS_MULX, - SPARC_INS_NOP, - SPARC_INS_ORCC, - SPARC_INS_ORNCC, - SPARC_INS_ORN, - SPARC_INS_OR, - SPARC_INS_PDIST, - SPARC_INS_PDISTN, - SPARC_INS_POPC, - SPARC_INS_RD, - SPARC_INS_RESTORE, - SPARC_INS_RETT, - SPARC_INS_SAVE, - SPARC_INS_SDIVCC, - SPARC_INS_SDIVX, - SPARC_INS_SDIV, - SPARC_INS_SETHI, - SPARC_INS_SHUTDOWN, - SPARC_INS_SIAM, - SPARC_INS_SLLX, - SPARC_INS_SLL, - SPARC_INS_SMULCC, - SPARC_INS_SMUL, - SPARC_INS_SRAX, - SPARC_INS_SRA, - SPARC_INS_SRLX, - SPARC_INS_SRL, - SPARC_INS_STBAR, - SPARC_INS_STB, - SPARC_INS_STD, - SPARC_INS_ST, - SPARC_INS_STH, - SPARC_INS_STQ, - SPARC_INS_STX, - SPARC_INS_SUBCC, - SPARC_INS_SUBX, - SPARC_INS_SUBXCC, - SPARC_INS_SUB, - SPARC_INS_SWAP, - SPARC_INS_TADDCCTV, - SPARC_INS_TADDCC, - SPARC_INS_T, - SPARC_INS_TSUBCCTV, - SPARC_INS_TSUBCC, - SPARC_INS_UDIVCC, - SPARC_INS_UDIVX, - SPARC_INS_UDIV, - SPARC_INS_UMULCC, - SPARC_INS_UMULXHI, - SPARC_INS_UMUL, - SPARC_INS_UNIMP, - SPARC_INS_FCMPED, - SPARC_INS_FCMPEQ, - SPARC_INS_FCMPES, - SPARC_INS_WR, - SPARC_INS_XMULX, - SPARC_INS_XMULXHI, - SPARC_INS_XNORCC, - SPARC_INS_XNOR, - SPARC_INS_XORCC, - SPARC_INS_XOR, - - // alias instructions - SPARC_INS_RET, - SPARC_INS_RETL, - - SPARC_INS_ENDING, // <-- mark the end of the list of instructions -} sparc_insn; - -/// Group of SPARC instructions -typedef enum sparc_insn_group { - SPARC_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - SPARC_GRP_JUMP, ///< = CS_GRP_JUMP - - // Architecture-specific groups - SPARC_GRP_HARDQUAD = 128, - SPARC_GRP_V9, - SPARC_GRP_VIS, - SPARC_GRP_VIS2, - SPARC_GRP_VIS3, - SPARC_GRP_32BIT, - SPARC_GRP_64BIT, - - SPARC_GRP_ENDING, // <-- mark the end of the list of groups -} sparc_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/systemz.h b/.tools/python-revlibs/capstone/include/capstone/systemz.h deleted file mode 100644 index 5be27df..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/systemz.h +++ /dev/null @@ -1,2601 +0,0 @@ -#ifndef CAPSTONE_SYSTEMZ_H -#define CAPSTONE_SYSTEMZ_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2014-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// Enums corresponding to SystemZ condition codes -typedef enum sysz_cc { - SYSZ_CC_INVALID = 0, ///< invalid CC (default) - - SYSZ_CC_O, - SYSZ_CC_H, - SYSZ_CC_NLE, - SYSZ_CC_L, - SYSZ_CC_NHE, - SYSZ_CC_LH, - SYSZ_CC_NE, - SYSZ_CC_E, - SYSZ_CC_NLH, - SYSZ_CC_HE, - SYSZ_CC_NL, - SYSZ_CC_LE, - SYSZ_CC_NH, - SYSZ_CC_NO, -} sysz_cc; - -/// Operand type for instruction's operands -typedef enum sysz_op_type { - SYSZ_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - SYSZ_OP_REG, ///< = CS_OP_REG (Register operand). - SYSZ_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - SYSZ_OP_MEM, ///< = CS_OP_MEM (Memory operand). - SYSZ_OP_ACREG = 64, ///< Access register operand. -} sysz_op_type; - -/// SystemZ registers -typedef enum sysz_reg { - SYSZ_REG_INVALID = 0, - - SYSZ_REG_0, - SYSZ_REG_1, - SYSZ_REG_2, - SYSZ_REG_3, - SYSZ_REG_4, - SYSZ_REG_5, - SYSZ_REG_6, - SYSZ_REG_7, - SYSZ_REG_8, - SYSZ_REG_9, - SYSZ_REG_10, - SYSZ_REG_11, - SYSZ_REG_12, - SYSZ_REG_13, - SYSZ_REG_14, - SYSZ_REG_15, - SYSZ_REG_CC, - SYSZ_REG_F0, - SYSZ_REG_F1, - SYSZ_REG_F2, - SYSZ_REG_F3, - SYSZ_REG_F4, - SYSZ_REG_F5, - SYSZ_REG_F6, - SYSZ_REG_F7, - SYSZ_REG_F8, - SYSZ_REG_F9, - SYSZ_REG_F10, - SYSZ_REG_F11, - SYSZ_REG_F12, - SYSZ_REG_F13, - SYSZ_REG_F14, - SYSZ_REG_F15, - - SYSZ_REG_R0L, - - SYSZ_REG_A0, - SYSZ_REG_A1, - SYSZ_REG_A2, - SYSZ_REG_A3, - SYSZ_REG_A4, - SYSZ_REG_A5, - SYSZ_REG_A6, - SYSZ_REG_A7, - SYSZ_REG_A8, - SYSZ_REG_A9, - SYSZ_REG_A10, - SYSZ_REG_A11, - SYSZ_REG_A12, - SYSZ_REG_A13, - SYSZ_REG_A14, - SYSZ_REG_A15, - SYSZ_REG_C0, - SYSZ_REG_C1, - SYSZ_REG_C2, - SYSZ_REG_C3, - SYSZ_REG_C4, - SYSZ_REG_C5, - SYSZ_REG_C6, - SYSZ_REG_C7, - SYSZ_REG_C8, - SYSZ_REG_C9, - SYSZ_REG_C10, - SYSZ_REG_C11, - SYSZ_REG_C12, - SYSZ_REG_C13, - SYSZ_REG_C14, - SYSZ_REG_C15, - SYSZ_REG_V0, - SYSZ_REG_V1, - SYSZ_REG_V2, - SYSZ_REG_V3, - SYSZ_REG_V4, - SYSZ_REG_V5, - SYSZ_REG_V6, - SYSZ_REG_V7, - SYSZ_REG_V8, - SYSZ_REG_V9, - SYSZ_REG_V10, - SYSZ_REG_V11, - SYSZ_REG_V12, - SYSZ_REG_V13, - SYSZ_REG_V14, - SYSZ_REG_V15, - SYSZ_REG_V16, - SYSZ_REG_V17, - SYSZ_REG_V18, - SYSZ_REG_V19, - SYSZ_REG_V20, - SYSZ_REG_V21, - SYSZ_REG_V22, - SYSZ_REG_V23, - SYSZ_REG_V24, - SYSZ_REG_V25, - SYSZ_REG_V26, - SYSZ_REG_V27, - SYSZ_REG_V28, - SYSZ_REG_V29, - SYSZ_REG_V30, - SYSZ_REG_V31, - SYSZ_REG_F16, - SYSZ_REG_F17, - SYSZ_REG_F18, - SYSZ_REG_F19, - SYSZ_REG_F20, - SYSZ_REG_F21, - SYSZ_REG_F22, - SYSZ_REG_F23, - SYSZ_REG_F24, - SYSZ_REG_F25, - SYSZ_REG_F26, - SYSZ_REG_F27, - SYSZ_REG_F28, - SYSZ_REG_F29, - SYSZ_REG_F30, - SYSZ_REG_F31, - SYSZ_REG_F0Q, - SYSZ_REG_F4Q, - - SYSZ_REG_ENDING, -} sysz_reg; - -/// Instruction's operand referring to memory -/// This is associated with SYSZ_OP_MEM operand type above -typedef struct sysz_op_mem { - uint8_t base; ///< base register, can be safely interpreted as - ///< a value of type `sysz_reg`, but it is only - ///< one byte wide - uint8_t index; ///< index register, same conditions apply here - uint64_t length; ///< BDLAddr operand - int64_t disp; ///< displacement/offset value -} sysz_op_mem; - -/// Instruction operand -typedef struct cs_sysz_op { - sysz_op_type type; ///< operand type - union { - sysz_reg reg; ///< register value for REG operand - int64_t imm; ///< immediate value for IMM operand - sysz_op_mem mem; ///< base/disp value for MEM operand - }; -} cs_sysz_op; - -// Instruction structure -typedef struct cs_sysz { - sysz_cc cc; ///< Code condition - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - cs_sysz_op operands[6]; ///< operands for this instruction. -} cs_sysz; - -/// SystemZ instruction -typedef enum sysz_insn { - SYSZ_INS_INVALID = 0, - - SYSZ_INS_A, - SYSZ_INS_ADB, - SYSZ_INS_ADBR, - SYSZ_INS_AEB, - SYSZ_INS_AEBR, - SYSZ_INS_AFI, - SYSZ_INS_AG, - SYSZ_INS_AGF, - SYSZ_INS_AGFI, - SYSZ_INS_AGFR, - SYSZ_INS_AGHI, - SYSZ_INS_AGHIK, - SYSZ_INS_AGR, - SYSZ_INS_AGRK, - SYSZ_INS_AGSI, - SYSZ_INS_AH, - SYSZ_INS_AHI, - SYSZ_INS_AHIK, - SYSZ_INS_AHY, - SYSZ_INS_AIH, - SYSZ_INS_AL, - SYSZ_INS_ALC, - SYSZ_INS_ALCG, - SYSZ_INS_ALCGR, - SYSZ_INS_ALCR, - SYSZ_INS_ALFI, - SYSZ_INS_ALG, - SYSZ_INS_ALGF, - SYSZ_INS_ALGFI, - SYSZ_INS_ALGFR, - SYSZ_INS_ALGHSIK, - SYSZ_INS_ALGR, - SYSZ_INS_ALGRK, - SYSZ_INS_ALHSIK, - SYSZ_INS_ALR, - SYSZ_INS_ALRK, - SYSZ_INS_ALY, - SYSZ_INS_AR, - SYSZ_INS_ARK, - SYSZ_INS_ASI, - SYSZ_INS_AXBR, - SYSZ_INS_AY, - SYSZ_INS_BCR, - SYSZ_INS_BRC, - SYSZ_INS_BRCL, - SYSZ_INS_CGIJ, - SYSZ_INS_CGRJ, - SYSZ_INS_CIJ, - SYSZ_INS_CLGIJ, - SYSZ_INS_CLGRJ, - SYSZ_INS_CLIJ, - SYSZ_INS_CLRJ, - SYSZ_INS_CRJ, - SYSZ_INS_BER, - SYSZ_INS_JE, - SYSZ_INS_JGE, - SYSZ_INS_LOCE, - SYSZ_INS_LOCGE, - SYSZ_INS_LOCGRE, - SYSZ_INS_LOCRE, - SYSZ_INS_STOCE, - SYSZ_INS_STOCGE, - SYSZ_INS_BHR, - SYSZ_INS_BHER, - SYSZ_INS_JHE, - SYSZ_INS_JGHE, - SYSZ_INS_LOCHE, - SYSZ_INS_LOCGHE, - SYSZ_INS_LOCGRHE, - SYSZ_INS_LOCRHE, - SYSZ_INS_STOCHE, - SYSZ_INS_STOCGHE, - SYSZ_INS_JH, - SYSZ_INS_JGH, - SYSZ_INS_LOCH, - SYSZ_INS_LOCGH, - SYSZ_INS_LOCGRH, - SYSZ_INS_LOCRH, - SYSZ_INS_STOCH, - SYSZ_INS_STOCGH, - SYSZ_INS_CGIJNLH, - SYSZ_INS_CGRJNLH, - SYSZ_INS_CIJNLH, - SYSZ_INS_CLGIJNLH, - SYSZ_INS_CLGRJNLH, - SYSZ_INS_CLIJNLH, - SYSZ_INS_CLRJNLH, - SYSZ_INS_CRJNLH, - SYSZ_INS_CGIJE, - SYSZ_INS_CGRJE, - SYSZ_INS_CIJE, - SYSZ_INS_CLGIJE, - SYSZ_INS_CLGRJE, - SYSZ_INS_CLIJE, - SYSZ_INS_CLRJE, - SYSZ_INS_CRJE, - SYSZ_INS_CGIJNLE, - SYSZ_INS_CGRJNLE, - SYSZ_INS_CIJNLE, - SYSZ_INS_CLGIJNLE, - SYSZ_INS_CLGRJNLE, - SYSZ_INS_CLIJNLE, - SYSZ_INS_CLRJNLE, - SYSZ_INS_CRJNLE, - SYSZ_INS_CGIJH, - SYSZ_INS_CGRJH, - SYSZ_INS_CIJH, - SYSZ_INS_CLGIJH, - SYSZ_INS_CLGRJH, - SYSZ_INS_CLIJH, - SYSZ_INS_CLRJH, - SYSZ_INS_CRJH, - SYSZ_INS_CGIJNL, - SYSZ_INS_CGRJNL, - SYSZ_INS_CIJNL, - SYSZ_INS_CLGIJNL, - SYSZ_INS_CLGRJNL, - SYSZ_INS_CLIJNL, - SYSZ_INS_CLRJNL, - SYSZ_INS_CRJNL, - SYSZ_INS_CGIJHE, - SYSZ_INS_CGRJHE, - SYSZ_INS_CIJHE, - SYSZ_INS_CLGIJHE, - SYSZ_INS_CLGRJHE, - SYSZ_INS_CLIJHE, - SYSZ_INS_CLRJHE, - SYSZ_INS_CRJHE, - SYSZ_INS_CGIJNHE, - SYSZ_INS_CGRJNHE, - SYSZ_INS_CIJNHE, - SYSZ_INS_CLGIJNHE, - SYSZ_INS_CLGRJNHE, - SYSZ_INS_CLIJNHE, - SYSZ_INS_CLRJNHE, - SYSZ_INS_CRJNHE, - SYSZ_INS_CGIJL, - SYSZ_INS_CGRJL, - SYSZ_INS_CIJL, - SYSZ_INS_CLGIJL, - SYSZ_INS_CLGRJL, - SYSZ_INS_CLIJL, - SYSZ_INS_CLRJL, - SYSZ_INS_CRJL, - SYSZ_INS_CGIJNH, - SYSZ_INS_CGRJNH, - SYSZ_INS_CIJNH, - SYSZ_INS_CLGIJNH, - SYSZ_INS_CLGRJNH, - SYSZ_INS_CLIJNH, - SYSZ_INS_CLRJNH, - SYSZ_INS_CRJNH, - SYSZ_INS_CGIJLE, - SYSZ_INS_CGRJLE, - SYSZ_INS_CIJLE, - SYSZ_INS_CLGIJLE, - SYSZ_INS_CLGRJLE, - SYSZ_INS_CLIJLE, - SYSZ_INS_CLRJLE, - SYSZ_INS_CRJLE, - SYSZ_INS_CGIJNE, - SYSZ_INS_CGRJNE, - SYSZ_INS_CIJNE, - SYSZ_INS_CLGIJNE, - SYSZ_INS_CLGRJNE, - SYSZ_INS_CLIJNE, - SYSZ_INS_CLRJNE, - SYSZ_INS_CRJNE, - SYSZ_INS_CGIJLH, - SYSZ_INS_CGRJLH, - SYSZ_INS_CIJLH, - SYSZ_INS_CLGIJLH, - SYSZ_INS_CLGRJLH, - SYSZ_INS_CLIJLH, - SYSZ_INS_CLRJLH, - SYSZ_INS_CRJLH, - SYSZ_INS_BLR, - SYSZ_INS_BLER, - SYSZ_INS_JLE, - SYSZ_INS_JGLE, - SYSZ_INS_LOCLE, - SYSZ_INS_LOCGLE, - SYSZ_INS_LOCGRLE, - SYSZ_INS_LOCRLE, - SYSZ_INS_STOCLE, - SYSZ_INS_STOCGLE, - SYSZ_INS_BLHR, - SYSZ_INS_JLH, - SYSZ_INS_JGLH, - SYSZ_INS_LOCLH, - SYSZ_INS_LOCGLH, - SYSZ_INS_LOCGRLH, - SYSZ_INS_LOCRLH, - SYSZ_INS_STOCLH, - SYSZ_INS_STOCGLH, - SYSZ_INS_JL, - SYSZ_INS_JGL, - SYSZ_INS_LOCL, - SYSZ_INS_LOCGL, - SYSZ_INS_LOCGRL, - SYSZ_INS_LOCRL, - SYSZ_INS_LOC, - SYSZ_INS_LOCG, - SYSZ_INS_LOCGR, - SYSZ_INS_LOCR, - SYSZ_INS_STOCL, - SYSZ_INS_STOCGL, - SYSZ_INS_BNER, - SYSZ_INS_JNE, - SYSZ_INS_JGNE, - SYSZ_INS_LOCNE, - SYSZ_INS_LOCGNE, - SYSZ_INS_LOCGRNE, - SYSZ_INS_LOCRNE, - SYSZ_INS_STOCNE, - SYSZ_INS_STOCGNE, - SYSZ_INS_BNHR, - SYSZ_INS_BNHER, - SYSZ_INS_JNHE, - SYSZ_INS_JGNHE, - SYSZ_INS_LOCNHE, - SYSZ_INS_LOCGNHE, - SYSZ_INS_LOCGRNHE, - SYSZ_INS_LOCRNHE, - SYSZ_INS_STOCNHE, - SYSZ_INS_STOCGNHE, - SYSZ_INS_JNH, - SYSZ_INS_JGNH, - SYSZ_INS_LOCNH, - SYSZ_INS_LOCGNH, - SYSZ_INS_LOCGRNH, - SYSZ_INS_LOCRNH, - SYSZ_INS_STOCNH, - SYSZ_INS_STOCGNH, - SYSZ_INS_BNLR, - SYSZ_INS_BNLER, - SYSZ_INS_JNLE, - SYSZ_INS_JGNLE, - SYSZ_INS_LOCNLE, - SYSZ_INS_LOCGNLE, - SYSZ_INS_LOCGRNLE, - SYSZ_INS_LOCRNLE, - SYSZ_INS_STOCNLE, - SYSZ_INS_STOCGNLE, - SYSZ_INS_BNLHR, - SYSZ_INS_JNLH, - SYSZ_INS_JGNLH, - SYSZ_INS_LOCNLH, - SYSZ_INS_LOCGNLH, - SYSZ_INS_LOCGRNLH, - SYSZ_INS_LOCRNLH, - SYSZ_INS_STOCNLH, - SYSZ_INS_STOCGNLH, - SYSZ_INS_JNL, - SYSZ_INS_JGNL, - SYSZ_INS_LOCNL, - SYSZ_INS_LOCGNL, - SYSZ_INS_LOCGRNL, - SYSZ_INS_LOCRNL, - SYSZ_INS_STOCNL, - SYSZ_INS_STOCGNL, - SYSZ_INS_BNOR, - SYSZ_INS_JNO, - SYSZ_INS_JGNO, - SYSZ_INS_LOCNO, - SYSZ_INS_LOCGNO, - SYSZ_INS_LOCGRNO, - SYSZ_INS_LOCRNO, - SYSZ_INS_STOCNO, - SYSZ_INS_STOCGNO, - SYSZ_INS_BOR, - SYSZ_INS_JO, - SYSZ_INS_JGO, - SYSZ_INS_LOCO, - SYSZ_INS_LOCGO, - SYSZ_INS_LOCGRO, - SYSZ_INS_LOCRO, - SYSZ_INS_STOCO, - SYSZ_INS_STOCGO, - SYSZ_INS_STOC, - SYSZ_INS_STOCG, - SYSZ_INS_BASR, - SYSZ_INS_BR, - SYSZ_INS_BRAS, - SYSZ_INS_BRASL, - SYSZ_INS_J, - SYSZ_INS_JG, - SYSZ_INS_BRCT, - SYSZ_INS_BRCTG, - SYSZ_INS_C, - SYSZ_INS_CDB, - SYSZ_INS_CDBR, - SYSZ_INS_CDFBR, - SYSZ_INS_CDGBR, - SYSZ_INS_CDLFBR, - SYSZ_INS_CDLGBR, - SYSZ_INS_CEB, - SYSZ_INS_CEBR, - SYSZ_INS_CEFBR, - SYSZ_INS_CEGBR, - SYSZ_INS_CELFBR, - SYSZ_INS_CELGBR, - SYSZ_INS_CFDBR, - SYSZ_INS_CFEBR, - SYSZ_INS_CFI, - SYSZ_INS_CFXBR, - SYSZ_INS_CG, - SYSZ_INS_CGDBR, - SYSZ_INS_CGEBR, - SYSZ_INS_CGF, - SYSZ_INS_CGFI, - SYSZ_INS_CGFR, - SYSZ_INS_CGFRL, - SYSZ_INS_CGH, - SYSZ_INS_CGHI, - SYSZ_INS_CGHRL, - SYSZ_INS_CGHSI, - SYSZ_INS_CGR, - SYSZ_INS_CGRL, - SYSZ_INS_CGXBR, - SYSZ_INS_CH, - SYSZ_INS_CHF, - SYSZ_INS_CHHSI, - SYSZ_INS_CHI, - SYSZ_INS_CHRL, - SYSZ_INS_CHSI, - SYSZ_INS_CHY, - SYSZ_INS_CIH, - SYSZ_INS_CL, - SYSZ_INS_CLC, - SYSZ_INS_CLFDBR, - SYSZ_INS_CLFEBR, - SYSZ_INS_CLFHSI, - SYSZ_INS_CLFI, - SYSZ_INS_CLFXBR, - SYSZ_INS_CLG, - SYSZ_INS_CLGDBR, - SYSZ_INS_CLGEBR, - SYSZ_INS_CLGF, - SYSZ_INS_CLGFI, - SYSZ_INS_CLGFR, - SYSZ_INS_CLGFRL, - SYSZ_INS_CLGHRL, - SYSZ_INS_CLGHSI, - SYSZ_INS_CLGR, - SYSZ_INS_CLGRL, - SYSZ_INS_CLGXBR, - SYSZ_INS_CLHF, - SYSZ_INS_CLHHSI, - SYSZ_INS_CLHRL, - SYSZ_INS_CLI, - SYSZ_INS_CLIH, - SYSZ_INS_CLIY, - SYSZ_INS_CLR, - SYSZ_INS_CLRL, - SYSZ_INS_CLST, - SYSZ_INS_CLY, - SYSZ_INS_CPSDR, - SYSZ_INS_CR, - SYSZ_INS_CRL, - SYSZ_INS_CS, - SYSZ_INS_CSG, - SYSZ_INS_CSY, - SYSZ_INS_CXBR, - SYSZ_INS_CXFBR, - SYSZ_INS_CXGBR, - SYSZ_INS_CXLFBR, - SYSZ_INS_CXLGBR, - SYSZ_INS_CY, - SYSZ_INS_DDB, - SYSZ_INS_DDBR, - SYSZ_INS_DEB, - SYSZ_INS_DEBR, - SYSZ_INS_DL, - SYSZ_INS_DLG, - SYSZ_INS_DLGR, - SYSZ_INS_DLR, - SYSZ_INS_DSG, - SYSZ_INS_DSGF, - SYSZ_INS_DSGFR, - SYSZ_INS_DSGR, - SYSZ_INS_DXBR, - SYSZ_INS_EAR, - SYSZ_INS_FIDBR, - SYSZ_INS_FIDBRA, - SYSZ_INS_FIEBR, - SYSZ_INS_FIEBRA, - SYSZ_INS_FIXBR, - SYSZ_INS_FIXBRA, - SYSZ_INS_FLOGR, - SYSZ_INS_IC, - SYSZ_INS_ICY, - SYSZ_INS_IIHF, - SYSZ_INS_IIHH, - SYSZ_INS_IIHL, - SYSZ_INS_IILF, - SYSZ_INS_IILH, - SYSZ_INS_IILL, - SYSZ_INS_IPM, - SYSZ_INS_L, - SYSZ_INS_LA, - SYSZ_INS_LAA, - SYSZ_INS_LAAG, - SYSZ_INS_LAAL, - SYSZ_INS_LAALG, - SYSZ_INS_LAN, - SYSZ_INS_LANG, - SYSZ_INS_LAO, - SYSZ_INS_LAOG, - SYSZ_INS_LARL, - SYSZ_INS_LAX, - SYSZ_INS_LAXG, - SYSZ_INS_LAY, - SYSZ_INS_LB, - SYSZ_INS_LBH, - SYSZ_INS_LBR, - SYSZ_INS_LCDBR, - SYSZ_INS_LCEBR, - SYSZ_INS_LCGFR, - SYSZ_INS_LCGR, - SYSZ_INS_LCR, - SYSZ_INS_LCXBR, - SYSZ_INS_LD, - SYSZ_INS_LDEB, - SYSZ_INS_LDEBR, - SYSZ_INS_LDGR, - SYSZ_INS_LDR, - SYSZ_INS_LDXBR, - SYSZ_INS_LDXBRA, - SYSZ_INS_LDY, - SYSZ_INS_LE, - SYSZ_INS_LEDBR, - SYSZ_INS_LEDBRA, - SYSZ_INS_LER, - SYSZ_INS_LEXBR, - SYSZ_INS_LEXBRA, - SYSZ_INS_LEY, - SYSZ_INS_LFH, - SYSZ_INS_LG, - SYSZ_INS_LGB, - SYSZ_INS_LGBR, - SYSZ_INS_LGDR, - SYSZ_INS_LGF, - SYSZ_INS_LGFI, - SYSZ_INS_LGFR, - SYSZ_INS_LGFRL, - SYSZ_INS_LGH, - SYSZ_INS_LGHI, - SYSZ_INS_LGHR, - SYSZ_INS_LGHRL, - SYSZ_INS_LGR, - SYSZ_INS_LGRL, - SYSZ_INS_LH, - SYSZ_INS_LHH, - SYSZ_INS_LHI, - SYSZ_INS_LHR, - SYSZ_INS_LHRL, - SYSZ_INS_LHY, - SYSZ_INS_LLC, - SYSZ_INS_LLCH, - SYSZ_INS_LLCR, - SYSZ_INS_LLGC, - SYSZ_INS_LLGCR, - SYSZ_INS_LLGF, - SYSZ_INS_LLGFR, - SYSZ_INS_LLGFRL, - SYSZ_INS_LLGH, - SYSZ_INS_LLGHR, - SYSZ_INS_LLGHRL, - SYSZ_INS_LLH, - SYSZ_INS_LLHH, - SYSZ_INS_LLHR, - SYSZ_INS_LLHRL, - SYSZ_INS_LLIHF, - SYSZ_INS_LLIHH, - SYSZ_INS_LLIHL, - SYSZ_INS_LLILF, - SYSZ_INS_LLILH, - SYSZ_INS_LLILL, - SYSZ_INS_LMG, - SYSZ_INS_LNDBR, - SYSZ_INS_LNEBR, - SYSZ_INS_LNGFR, - SYSZ_INS_LNGR, - SYSZ_INS_LNR, - SYSZ_INS_LNXBR, - SYSZ_INS_LPDBR, - SYSZ_INS_LPEBR, - SYSZ_INS_LPGFR, - SYSZ_INS_LPGR, - SYSZ_INS_LPR, - SYSZ_INS_LPXBR, - SYSZ_INS_LR, - SYSZ_INS_LRL, - SYSZ_INS_LRV, - SYSZ_INS_LRVG, - SYSZ_INS_LRVGR, - SYSZ_INS_LRVR, - SYSZ_INS_LT, - SYSZ_INS_LTDBR, - SYSZ_INS_LTEBR, - SYSZ_INS_LTG, - SYSZ_INS_LTGF, - SYSZ_INS_LTGFR, - SYSZ_INS_LTGR, - SYSZ_INS_LTR, - SYSZ_INS_LTXBR, - SYSZ_INS_LXDB, - SYSZ_INS_LXDBR, - SYSZ_INS_LXEB, - SYSZ_INS_LXEBR, - SYSZ_INS_LXR, - SYSZ_INS_LY, - SYSZ_INS_LZDR, - SYSZ_INS_LZER, - SYSZ_INS_LZXR, - SYSZ_INS_MADB, - SYSZ_INS_MADBR, - SYSZ_INS_MAEB, - SYSZ_INS_MAEBR, - SYSZ_INS_MDB, - SYSZ_INS_MDBR, - SYSZ_INS_MDEB, - SYSZ_INS_MDEBR, - SYSZ_INS_MEEB, - SYSZ_INS_MEEBR, - SYSZ_INS_MGHI, - SYSZ_INS_MH, - SYSZ_INS_MHI, - SYSZ_INS_MHY, - SYSZ_INS_MLG, - SYSZ_INS_MLGR, - SYSZ_INS_MS, - SYSZ_INS_MSDB, - SYSZ_INS_MSDBR, - SYSZ_INS_MSEB, - SYSZ_INS_MSEBR, - SYSZ_INS_MSFI, - SYSZ_INS_MSG, - SYSZ_INS_MSGF, - SYSZ_INS_MSGFI, - SYSZ_INS_MSGFR, - SYSZ_INS_MSGR, - SYSZ_INS_MSR, - SYSZ_INS_MSY, - SYSZ_INS_MVC, - SYSZ_INS_MVGHI, - SYSZ_INS_MVHHI, - SYSZ_INS_MVHI, - SYSZ_INS_MVI, - SYSZ_INS_MVIY, - SYSZ_INS_MVST, - SYSZ_INS_MXBR, - SYSZ_INS_MXDB, - SYSZ_INS_MXDBR, - SYSZ_INS_N, - SYSZ_INS_NC, - SYSZ_INS_NG, - SYSZ_INS_NGR, - SYSZ_INS_NGRK, - SYSZ_INS_NI, - SYSZ_INS_NIHF, - SYSZ_INS_NIHH, - SYSZ_INS_NIHL, - SYSZ_INS_NILF, - SYSZ_INS_NILH, - SYSZ_INS_NILL, - SYSZ_INS_NIY, - SYSZ_INS_NR, - SYSZ_INS_NRK, - SYSZ_INS_NY, - SYSZ_INS_O, - SYSZ_INS_OC, - SYSZ_INS_OG, - SYSZ_INS_OGR, - SYSZ_INS_OGRK, - SYSZ_INS_OI, - SYSZ_INS_OIHF, - SYSZ_INS_OIHH, - SYSZ_INS_OIHL, - SYSZ_INS_OILF, - SYSZ_INS_OILH, - SYSZ_INS_OILL, - SYSZ_INS_OIY, - SYSZ_INS_OR, - SYSZ_INS_ORK, - SYSZ_INS_OY, - SYSZ_INS_PFD, - SYSZ_INS_PFDRL, - SYSZ_INS_RISBG, - SYSZ_INS_RISBHG, - SYSZ_INS_RISBLG, - SYSZ_INS_RLL, - SYSZ_INS_RLLG, - SYSZ_INS_RNSBG, - SYSZ_INS_ROSBG, - SYSZ_INS_RXSBG, - SYSZ_INS_S, - SYSZ_INS_SDB, - SYSZ_INS_SDBR, - SYSZ_INS_SEB, - SYSZ_INS_SEBR, - SYSZ_INS_SG, - SYSZ_INS_SGF, - SYSZ_INS_SGFR, - SYSZ_INS_SGR, - SYSZ_INS_SGRK, - SYSZ_INS_SH, - SYSZ_INS_SHY, - SYSZ_INS_SL, - SYSZ_INS_SLB, - SYSZ_INS_SLBG, - SYSZ_INS_SLBR, - SYSZ_INS_SLFI, - SYSZ_INS_SLG, - SYSZ_INS_SLBGR, - SYSZ_INS_SLGF, - SYSZ_INS_SLGFI, - SYSZ_INS_SLGFR, - SYSZ_INS_SLGR, - SYSZ_INS_SLGRK, - SYSZ_INS_SLL, - SYSZ_INS_SLLG, - SYSZ_INS_SLLK, - SYSZ_INS_SLR, - SYSZ_INS_SLRK, - SYSZ_INS_SLY, - SYSZ_INS_SQDB, - SYSZ_INS_SQDBR, - SYSZ_INS_SQEB, - SYSZ_INS_SQEBR, - SYSZ_INS_SQXBR, - SYSZ_INS_SR, - SYSZ_INS_SRA, - SYSZ_INS_SRAG, - SYSZ_INS_SRAK, - SYSZ_INS_SRK, - SYSZ_INS_SRL, - SYSZ_INS_SRLG, - SYSZ_INS_SRLK, - SYSZ_INS_SRST, - SYSZ_INS_ST, - SYSZ_INS_STC, - SYSZ_INS_STCH, - SYSZ_INS_STCY, - SYSZ_INS_STD, - SYSZ_INS_STDY, - SYSZ_INS_STE, - SYSZ_INS_STEY, - SYSZ_INS_STFH, - SYSZ_INS_STG, - SYSZ_INS_STGRL, - SYSZ_INS_STH, - SYSZ_INS_STHH, - SYSZ_INS_STHRL, - SYSZ_INS_STHY, - SYSZ_INS_STMG, - SYSZ_INS_STRL, - SYSZ_INS_STRV, - SYSZ_INS_STRVG, - SYSZ_INS_STY, - SYSZ_INS_SXBR, - SYSZ_INS_SY, - SYSZ_INS_TM, - SYSZ_INS_TMHH, - SYSZ_INS_TMHL, - SYSZ_INS_TMLH, - SYSZ_INS_TMLL, - SYSZ_INS_TMY, - SYSZ_INS_X, - SYSZ_INS_XC, - SYSZ_INS_XG, - SYSZ_INS_XGR, - SYSZ_INS_XGRK, - SYSZ_INS_XI, - SYSZ_INS_XIHF, - SYSZ_INS_XILF, - SYSZ_INS_XIY, - SYSZ_INS_XR, - SYSZ_INS_XRK, - SYSZ_INS_XY, - SYSZ_INS_AD, - SYSZ_INS_ADR, - SYSZ_INS_ADTR, - SYSZ_INS_ADTRA, - SYSZ_INS_AE, - SYSZ_INS_AER, - SYSZ_INS_AGH, - SYSZ_INS_AHHHR, - SYSZ_INS_AHHLR, - SYSZ_INS_ALGSI, - SYSZ_INS_ALHHHR, - SYSZ_INS_ALHHLR, - SYSZ_INS_ALSI, - SYSZ_INS_ALSIH, - SYSZ_INS_ALSIHN, - SYSZ_INS_AP, - SYSZ_INS_AU, - SYSZ_INS_AUR, - SYSZ_INS_AW, - SYSZ_INS_AWR, - SYSZ_INS_AXR, - SYSZ_INS_AXTR, - SYSZ_INS_AXTRA, - SYSZ_INS_B, - SYSZ_INS_BAKR, - SYSZ_INS_BAL, - SYSZ_INS_BALR, - SYSZ_INS_BAS, - SYSZ_INS_BASSM, - SYSZ_INS_BC, - SYSZ_INS_BCT, - SYSZ_INS_BCTG, - SYSZ_INS_BCTGR, - SYSZ_INS_BCTR, - SYSZ_INS_BE, - SYSZ_INS_BH, - SYSZ_INS_BHE, - SYSZ_INS_BI, - SYSZ_INS_BIC, - SYSZ_INS_BIE, - SYSZ_INS_BIH, - SYSZ_INS_BIHE, - SYSZ_INS_BIL, - SYSZ_INS_BILE, - SYSZ_INS_BILH, - SYSZ_INS_BIM, - SYSZ_INS_BINE, - SYSZ_INS_BINH, - SYSZ_INS_BINHE, - SYSZ_INS_BINL, - SYSZ_INS_BINLE, - SYSZ_INS_BINLH, - SYSZ_INS_BINM, - SYSZ_INS_BINO, - SYSZ_INS_BINP, - SYSZ_INS_BINZ, - SYSZ_INS_BIO, - SYSZ_INS_BIP, - SYSZ_INS_BIZ, - SYSZ_INS_BL, - SYSZ_INS_BLE, - SYSZ_INS_BLH, - SYSZ_INS_BM, - SYSZ_INS_BMR, - SYSZ_INS_BNE, - SYSZ_INS_BNH, - SYSZ_INS_BNHE, - SYSZ_INS_BNL, - SYSZ_INS_BNLE, - SYSZ_INS_BNLH, - SYSZ_INS_BNM, - SYSZ_INS_BNMR, - SYSZ_INS_BNO, - SYSZ_INS_BNP, - SYSZ_INS_BNPR, - SYSZ_INS_BNZ, - SYSZ_INS_BNZR, - SYSZ_INS_BO, - SYSZ_INS_BP, - SYSZ_INS_BPP, - SYSZ_INS_BPR, - SYSZ_INS_BPRP, - SYSZ_INS_BRCTH, - SYSZ_INS_BRXH, - SYSZ_INS_BRXHG, - SYSZ_INS_BRXLE, - SYSZ_INS_BRXLG, - SYSZ_INS_BSA, - SYSZ_INS_BSG, - SYSZ_INS_BSM, - SYSZ_INS_BXH, - SYSZ_INS_BXHG, - SYSZ_INS_BXLE, - SYSZ_INS_BXLEG, - SYSZ_INS_BZ, - SYSZ_INS_BZR, - SYSZ_INS_CD, - SYSZ_INS_CDFBRA, - SYSZ_INS_CDFR, - SYSZ_INS_CDFTR, - SYSZ_INS_CDGBRA, - SYSZ_INS_CDGR, - SYSZ_INS_CDGTR, - SYSZ_INS_CDGTRA, - SYSZ_INS_CDLFTR, - SYSZ_INS_CDLGTR, - SYSZ_INS_CDPT, - SYSZ_INS_CDR, - SYSZ_INS_CDS, - SYSZ_INS_CDSG, - SYSZ_INS_CDSTR, - SYSZ_INS_CDSY, - SYSZ_INS_CDTR, - SYSZ_INS_CDUTR, - SYSZ_INS_CDZT, - SYSZ_INS_CE, - SYSZ_INS_CEDTR, - SYSZ_INS_CEFBRA, - SYSZ_INS_CEFR, - SYSZ_INS_CEGBRA, - SYSZ_INS_CEGR, - SYSZ_INS_CER, - SYSZ_INS_CEXTR, - SYSZ_INS_CFC, - SYSZ_INS_CFDBRA, - SYSZ_INS_CFDR, - SYSZ_INS_CFDTR, - SYSZ_INS_CFEBRA, - SYSZ_INS_CFER, - SYSZ_INS_CFXBRA, - SYSZ_INS_CFXR, - SYSZ_INS_CFXTR, - SYSZ_INS_CGDBRA, - SYSZ_INS_CGDR, - SYSZ_INS_CGDTR, - SYSZ_INS_CGDTRA, - SYSZ_INS_CGEBRA, - SYSZ_INS_CGER, - SYSZ_INS_CGIB, - SYSZ_INS_CGIBE, - SYSZ_INS_CGIBH, - SYSZ_INS_CGIBHE, - SYSZ_INS_CGIBL, - SYSZ_INS_CGIBLE, - SYSZ_INS_CGIBLH, - SYSZ_INS_CGIBNE, - SYSZ_INS_CGIBNH, - SYSZ_INS_CGIBNHE, - SYSZ_INS_CGIBNL, - SYSZ_INS_CGIBNLE, - SYSZ_INS_CGIBNLH, - SYSZ_INS_CGIT, - SYSZ_INS_CGITE, - SYSZ_INS_CGITH, - SYSZ_INS_CGITHE, - SYSZ_INS_CGITL, - SYSZ_INS_CGITLE, - SYSZ_INS_CGITLH, - SYSZ_INS_CGITNE, - SYSZ_INS_CGITNH, - SYSZ_INS_CGITNHE, - SYSZ_INS_CGITNL, - SYSZ_INS_CGITNLE, - SYSZ_INS_CGITNLH, - SYSZ_INS_CGRB, - SYSZ_INS_CGRBE, - SYSZ_INS_CGRBH, - SYSZ_INS_CGRBHE, - SYSZ_INS_CGRBL, - SYSZ_INS_CGRBLE, - SYSZ_INS_CGRBLH, - SYSZ_INS_CGRBNE, - SYSZ_INS_CGRBNH, - SYSZ_INS_CGRBNHE, - SYSZ_INS_CGRBNL, - SYSZ_INS_CGRBNLE, - SYSZ_INS_CGRBNLH, - SYSZ_INS_CGRT, - SYSZ_INS_CGRTE, - SYSZ_INS_CGRTH, - SYSZ_INS_CGRTHE, - SYSZ_INS_CGRTL, - SYSZ_INS_CGRTLE, - SYSZ_INS_CGRTLH, - SYSZ_INS_CGRTNE, - SYSZ_INS_CGRTNH, - SYSZ_INS_CGRTNHE, - SYSZ_INS_CGRTNL, - SYSZ_INS_CGRTNLE, - SYSZ_INS_CGRTNLH, - SYSZ_INS_CGXBRA, - SYSZ_INS_CGXR, - SYSZ_INS_CGXTR, - SYSZ_INS_CGXTRA, - SYSZ_INS_CHHR, - SYSZ_INS_CHLR, - SYSZ_INS_CIB, - SYSZ_INS_CIBE, - SYSZ_INS_CIBH, - SYSZ_INS_CIBHE, - SYSZ_INS_CIBL, - SYSZ_INS_CIBLE, - SYSZ_INS_CIBLH, - SYSZ_INS_CIBNE, - SYSZ_INS_CIBNH, - SYSZ_INS_CIBNHE, - SYSZ_INS_CIBNL, - SYSZ_INS_CIBNLE, - SYSZ_INS_CIBNLH, - SYSZ_INS_CIT, - SYSZ_INS_CITE, - SYSZ_INS_CITH, - SYSZ_INS_CITHE, - SYSZ_INS_CITL, - SYSZ_INS_CITLE, - SYSZ_INS_CITLH, - SYSZ_INS_CITNE, - SYSZ_INS_CITNH, - SYSZ_INS_CITNHE, - SYSZ_INS_CITNL, - SYSZ_INS_CITNLE, - SYSZ_INS_CITNLH, - SYSZ_INS_CKSM, - SYSZ_INS_CLCL, - SYSZ_INS_CLCLE, - SYSZ_INS_CLCLU, - SYSZ_INS_CLFDTR, - SYSZ_INS_CLFIT, - SYSZ_INS_CLFITE, - SYSZ_INS_CLFITH, - SYSZ_INS_CLFITHE, - SYSZ_INS_CLFITL, - SYSZ_INS_CLFITLE, - SYSZ_INS_CLFITLH, - SYSZ_INS_CLFITNE, - SYSZ_INS_CLFITNH, - SYSZ_INS_CLFITNHE, - SYSZ_INS_CLFITNL, - SYSZ_INS_CLFITNLE, - SYSZ_INS_CLFITNLH, - SYSZ_INS_CLFXTR, - SYSZ_INS_CLGDTR, - SYSZ_INS_CLGIB, - SYSZ_INS_CLGIBE, - SYSZ_INS_CLGIBH, - SYSZ_INS_CLGIBHE, - SYSZ_INS_CLGIBL, - SYSZ_INS_CLGIBLE, - SYSZ_INS_CLGIBLH, - SYSZ_INS_CLGIBNE, - SYSZ_INS_CLGIBNH, - SYSZ_INS_CLGIBNHE, - SYSZ_INS_CLGIBNL, - SYSZ_INS_CLGIBNLE, - SYSZ_INS_CLGIBNLH, - SYSZ_INS_CLGIT, - SYSZ_INS_CLGITE, - SYSZ_INS_CLGITH, - SYSZ_INS_CLGITHE, - SYSZ_INS_CLGITL, - SYSZ_INS_CLGITLE, - SYSZ_INS_CLGITLH, - SYSZ_INS_CLGITNE, - SYSZ_INS_CLGITNH, - SYSZ_INS_CLGITNHE, - SYSZ_INS_CLGITNL, - SYSZ_INS_CLGITNLE, - SYSZ_INS_CLGITNLH, - SYSZ_INS_CLGRB, - SYSZ_INS_CLGRBE, - SYSZ_INS_CLGRBH, - SYSZ_INS_CLGRBHE, - SYSZ_INS_CLGRBL, - SYSZ_INS_CLGRBLE, - SYSZ_INS_CLGRBLH, - SYSZ_INS_CLGRBNE, - SYSZ_INS_CLGRBNH, - SYSZ_INS_CLGRBNHE, - SYSZ_INS_CLGRBNL, - SYSZ_INS_CLGRBNLE, - SYSZ_INS_CLGRBNLH, - SYSZ_INS_CLGRT, - SYSZ_INS_CLGRTE, - SYSZ_INS_CLGRTH, - SYSZ_INS_CLGRTHE, - SYSZ_INS_CLGRTL, - SYSZ_INS_CLGRTLE, - SYSZ_INS_CLGRTLH, - SYSZ_INS_CLGRTNE, - SYSZ_INS_CLGRTNH, - SYSZ_INS_CLGRTNHE, - SYSZ_INS_CLGRTNL, - SYSZ_INS_CLGRTNLE, - SYSZ_INS_CLGRTNLH, - SYSZ_INS_CLGT, - SYSZ_INS_CLGTE, - SYSZ_INS_CLGTH, - SYSZ_INS_CLGTHE, - SYSZ_INS_CLGTL, - SYSZ_INS_CLGTLE, - SYSZ_INS_CLGTLH, - SYSZ_INS_CLGTNE, - SYSZ_INS_CLGTNH, - SYSZ_INS_CLGTNHE, - SYSZ_INS_CLGTNL, - SYSZ_INS_CLGTNLE, - SYSZ_INS_CLGTNLH, - SYSZ_INS_CLGXTR, - SYSZ_INS_CLHHR, - SYSZ_INS_CLHLR, - SYSZ_INS_CLIB, - SYSZ_INS_CLIBE, - SYSZ_INS_CLIBH, - SYSZ_INS_CLIBHE, - SYSZ_INS_CLIBL, - SYSZ_INS_CLIBLE, - SYSZ_INS_CLIBLH, - SYSZ_INS_CLIBNE, - SYSZ_INS_CLIBNH, - SYSZ_INS_CLIBNHE, - SYSZ_INS_CLIBNL, - SYSZ_INS_CLIBNLE, - SYSZ_INS_CLIBNLH, - SYSZ_INS_CLM, - SYSZ_INS_CLMH, - SYSZ_INS_CLMY, - SYSZ_INS_CLRB, - SYSZ_INS_CLRBE, - SYSZ_INS_CLRBH, - SYSZ_INS_CLRBHE, - SYSZ_INS_CLRBL, - SYSZ_INS_CLRBLE, - SYSZ_INS_CLRBLH, - SYSZ_INS_CLRBNE, - SYSZ_INS_CLRBNH, - SYSZ_INS_CLRBNHE, - SYSZ_INS_CLRBNL, - SYSZ_INS_CLRBNLE, - SYSZ_INS_CLRBNLH, - SYSZ_INS_CLRT, - SYSZ_INS_CLRTE, - SYSZ_INS_CLRTH, - SYSZ_INS_CLRTHE, - SYSZ_INS_CLRTL, - SYSZ_INS_CLRTLE, - SYSZ_INS_CLRTLH, - SYSZ_INS_CLRTNE, - SYSZ_INS_CLRTNH, - SYSZ_INS_CLRTNHE, - SYSZ_INS_CLRTNL, - SYSZ_INS_CLRTNLE, - SYSZ_INS_CLRTNLH, - SYSZ_INS_CLT, - SYSZ_INS_CLTE, - SYSZ_INS_CLTH, - SYSZ_INS_CLTHE, - SYSZ_INS_CLTL, - SYSZ_INS_CLTLE, - SYSZ_INS_CLTLH, - SYSZ_INS_CLTNE, - SYSZ_INS_CLTNH, - SYSZ_INS_CLTNHE, - SYSZ_INS_CLTNL, - SYSZ_INS_CLTNLE, - SYSZ_INS_CLTNLH, - SYSZ_INS_CMPSC, - SYSZ_INS_CP, - SYSZ_INS_CPDT, - SYSZ_INS_CPXT, - SYSZ_INS_CPYA, - SYSZ_INS_CRB, - SYSZ_INS_CRBE, - SYSZ_INS_CRBH, - SYSZ_INS_CRBHE, - SYSZ_INS_CRBL, - SYSZ_INS_CRBLE, - SYSZ_INS_CRBLH, - SYSZ_INS_CRBNE, - SYSZ_INS_CRBNH, - SYSZ_INS_CRBNHE, - SYSZ_INS_CRBNL, - SYSZ_INS_CRBNLE, - SYSZ_INS_CRBNLH, - SYSZ_INS_CRDTE, - SYSZ_INS_CRT, - SYSZ_INS_CRTE, - SYSZ_INS_CRTH, - SYSZ_INS_CRTHE, - SYSZ_INS_CRTL, - SYSZ_INS_CRTLE, - SYSZ_INS_CRTLH, - SYSZ_INS_CRTNE, - SYSZ_INS_CRTNH, - SYSZ_INS_CRTNHE, - SYSZ_INS_CRTNL, - SYSZ_INS_CRTNLE, - SYSZ_INS_CRTNLH, - SYSZ_INS_CSCH, - SYSZ_INS_CSDTR, - SYSZ_INS_CSP, - SYSZ_INS_CSPG, - SYSZ_INS_CSST, - SYSZ_INS_CSXTR, - SYSZ_INS_CU12, - SYSZ_INS_CU14, - SYSZ_INS_CU21, - SYSZ_INS_CU24, - SYSZ_INS_CU41, - SYSZ_INS_CU42, - SYSZ_INS_CUDTR, - SYSZ_INS_CUSE, - SYSZ_INS_CUTFU, - SYSZ_INS_CUUTF, - SYSZ_INS_CUXTR, - SYSZ_INS_CVB, - SYSZ_INS_CVBG, - SYSZ_INS_CVBY, - SYSZ_INS_CVD, - SYSZ_INS_CVDG, - SYSZ_INS_CVDY, - SYSZ_INS_CXFBRA, - SYSZ_INS_CXFR, - SYSZ_INS_CXFTR, - SYSZ_INS_CXGBRA, - SYSZ_INS_CXGR, - SYSZ_INS_CXGTR, - SYSZ_INS_CXGTRA, - SYSZ_INS_CXLFTR, - SYSZ_INS_CXLGTR, - SYSZ_INS_CXPT, - SYSZ_INS_CXR, - SYSZ_INS_CXSTR, - SYSZ_INS_CXTR, - SYSZ_INS_CXUTR, - SYSZ_INS_CXZT, - SYSZ_INS_CZDT, - SYSZ_INS_CZXT, - SYSZ_INS_D, - SYSZ_INS_DD, - SYSZ_INS_DDR, - SYSZ_INS_DDTR, - SYSZ_INS_DDTRA, - SYSZ_INS_DE, - SYSZ_INS_DER, - SYSZ_INS_DIAG, - SYSZ_INS_DIDBR, - SYSZ_INS_DIEBR, - SYSZ_INS_DP, - SYSZ_INS_DR, - SYSZ_INS_DXR, - SYSZ_INS_DXTR, - SYSZ_INS_DXTRA, - SYSZ_INS_ECAG, - SYSZ_INS_ECCTR, - SYSZ_INS_ECPGA, - SYSZ_INS_ECTG, - SYSZ_INS_ED, - SYSZ_INS_EDMK, - SYSZ_INS_EEDTR, - SYSZ_INS_EEXTR, - SYSZ_INS_EFPC, - SYSZ_INS_EPAIR, - SYSZ_INS_EPAR, - SYSZ_INS_EPCTR, - SYSZ_INS_EPSW, - SYSZ_INS_EREG, - SYSZ_INS_EREGG, - SYSZ_INS_ESAIR, - SYSZ_INS_ESAR, - SYSZ_INS_ESDTR, - SYSZ_INS_ESEA, - SYSZ_INS_ESTA, - SYSZ_INS_ESXTR, - SYSZ_INS_ETND, - SYSZ_INS_EX, - SYSZ_INS_EXRL, - SYSZ_INS_FIDR, - SYSZ_INS_FIDTR, - SYSZ_INS_FIER, - SYSZ_INS_FIXR, - SYSZ_INS_FIXTR, - SYSZ_INS_HDR, - SYSZ_INS_HER, - SYSZ_INS_HSCH, - SYSZ_INS_IAC, - SYSZ_INS_ICM, - SYSZ_INS_ICMH, - SYSZ_INS_ICMY, - SYSZ_INS_IDTE, - SYSZ_INS_IEDTR, - SYSZ_INS_IEXTR, - SYSZ_INS_IPK, - SYSZ_INS_IPTE, - SYSZ_INS_IRBM, - SYSZ_INS_ISKE, - SYSZ_INS_IVSK, - SYSZ_INS_JGM, - SYSZ_INS_JGNM, - SYSZ_INS_JGNP, - SYSZ_INS_JGNZ, - SYSZ_INS_JGP, - SYSZ_INS_JGZ, - SYSZ_INS_JM, - SYSZ_INS_JNM, - SYSZ_INS_JNP, - SYSZ_INS_JNZ, - SYSZ_INS_JP, - SYSZ_INS_JZ, - SYSZ_INS_KDB, - SYSZ_INS_KDBR, - SYSZ_INS_KDTR, - SYSZ_INS_KEB, - SYSZ_INS_KEBR, - SYSZ_INS_KIMD, - SYSZ_INS_KLMD, - SYSZ_INS_KM, - SYSZ_INS_KMA, - SYSZ_INS_KMAC, - SYSZ_INS_KMC, - SYSZ_INS_KMCTR, - SYSZ_INS_KMF, - SYSZ_INS_KMO, - SYSZ_INS_KXBR, - SYSZ_INS_KXTR, - SYSZ_INS_LAE, - SYSZ_INS_LAEY, - SYSZ_INS_LAM, - SYSZ_INS_LAMY, - SYSZ_INS_LASP, - SYSZ_INS_LAT, - SYSZ_INS_LCBB, - SYSZ_INS_LCCTL, - SYSZ_INS_LCDFR, - SYSZ_INS_LCDR, - SYSZ_INS_LCER, - SYSZ_INS_LCTL, - SYSZ_INS_LCTLG, - SYSZ_INS_LCXR, - SYSZ_INS_LDE, - SYSZ_INS_LDER, - SYSZ_INS_LDETR, - SYSZ_INS_LDXR, - SYSZ_INS_LDXTR, - SYSZ_INS_LEDR, - SYSZ_INS_LEDTR, - SYSZ_INS_LEXR, - SYSZ_INS_LFAS, - SYSZ_INS_LFHAT, - SYSZ_INS_LFPC, - SYSZ_INS_LGAT, - SYSZ_INS_LGG, - SYSZ_INS_LGSC, - SYSZ_INS_LLGFAT, - SYSZ_INS_LLGFSG, - SYSZ_INS_LLGT, - SYSZ_INS_LLGTAT, - SYSZ_INS_LLGTR, - SYSZ_INS_LLZRGF, - SYSZ_INS_LM, - SYSZ_INS_LMD, - SYSZ_INS_LMH, - SYSZ_INS_LMY, - SYSZ_INS_LNDFR, - SYSZ_INS_LNDR, - SYSZ_INS_LNER, - SYSZ_INS_LNXR, - SYSZ_INS_LOCFH, - SYSZ_INS_LOCFHE, - SYSZ_INS_LOCFHH, - SYSZ_INS_LOCFHHE, - SYSZ_INS_LOCFHL, - SYSZ_INS_LOCFHLE, - SYSZ_INS_LOCFHLH, - SYSZ_INS_LOCFHM, - SYSZ_INS_LOCFHNE, - SYSZ_INS_LOCFHNH, - SYSZ_INS_LOCFHNHE, - SYSZ_INS_LOCFHNL, - SYSZ_INS_LOCFHNLE, - SYSZ_INS_LOCFHNLH, - SYSZ_INS_LOCFHNM, - SYSZ_INS_LOCFHNO, - SYSZ_INS_LOCFHNP, - SYSZ_INS_LOCFHNZ, - SYSZ_INS_LOCFHO, - SYSZ_INS_LOCFHP, - SYSZ_INS_LOCFHR, - SYSZ_INS_LOCFHRE, - SYSZ_INS_LOCFHRH, - SYSZ_INS_LOCFHRHE, - SYSZ_INS_LOCFHRL, - SYSZ_INS_LOCFHRLE, - SYSZ_INS_LOCFHRLH, - SYSZ_INS_LOCFHRM, - SYSZ_INS_LOCFHRNE, - SYSZ_INS_LOCFHRNH, - SYSZ_INS_LOCFHRNHE, - SYSZ_INS_LOCFHRNL, - SYSZ_INS_LOCFHRNLE, - SYSZ_INS_LOCFHRNLH, - SYSZ_INS_LOCFHRNM, - SYSZ_INS_LOCFHRNO, - SYSZ_INS_LOCFHRNP, - SYSZ_INS_LOCFHRNZ, - SYSZ_INS_LOCFHRO, - SYSZ_INS_LOCFHRP, - SYSZ_INS_LOCFHRZ, - SYSZ_INS_LOCFHZ, - SYSZ_INS_LOCGHI, - SYSZ_INS_LOCGHIE, - SYSZ_INS_LOCGHIH, - SYSZ_INS_LOCGHIHE, - SYSZ_INS_LOCGHIL, - SYSZ_INS_LOCGHILE, - SYSZ_INS_LOCGHILH, - SYSZ_INS_LOCGHIM, - SYSZ_INS_LOCGHINE, - SYSZ_INS_LOCGHINH, - SYSZ_INS_LOCGHINHE, - SYSZ_INS_LOCGHINL, - SYSZ_INS_LOCGHINLE, - SYSZ_INS_LOCGHINLH, - SYSZ_INS_LOCGHINM, - SYSZ_INS_LOCGHINO, - SYSZ_INS_LOCGHINP, - SYSZ_INS_LOCGHINZ, - SYSZ_INS_LOCGHIO, - SYSZ_INS_LOCGHIP, - SYSZ_INS_LOCGHIZ, - SYSZ_INS_LOCGM, - SYSZ_INS_LOCGNM, - SYSZ_INS_LOCGNP, - SYSZ_INS_LOCGNZ, - SYSZ_INS_LOCGP, - SYSZ_INS_LOCGRM, - SYSZ_INS_LOCGRNM, - SYSZ_INS_LOCGRNP, - SYSZ_INS_LOCGRNZ, - SYSZ_INS_LOCGRP, - SYSZ_INS_LOCGRZ, - SYSZ_INS_LOCGZ, - SYSZ_INS_LOCHHI, - SYSZ_INS_LOCHHIE, - SYSZ_INS_LOCHHIH, - SYSZ_INS_LOCHHIHE, - SYSZ_INS_LOCHHIL, - SYSZ_INS_LOCHHILE, - SYSZ_INS_LOCHHILH, - SYSZ_INS_LOCHHIM, - SYSZ_INS_LOCHHINE, - SYSZ_INS_LOCHHINH, - SYSZ_INS_LOCHHINHE, - SYSZ_INS_LOCHHINL, - SYSZ_INS_LOCHHINLE, - SYSZ_INS_LOCHHINLH, - SYSZ_INS_LOCHHINM, - SYSZ_INS_LOCHHINO, - SYSZ_INS_LOCHHINP, - SYSZ_INS_LOCHHINZ, - SYSZ_INS_LOCHHIO, - SYSZ_INS_LOCHHIP, - SYSZ_INS_LOCHHIZ, - SYSZ_INS_LOCHI, - SYSZ_INS_LOCHIE, - SYSZ_INS_LOCHIH, - SYSZ_INS_LOCHIHE, - SYSZ_INS_LOCHIL, - SYSZ_INS_LOCHILE, - SYSZ_INS_LOCHILH, - SYSZ_INS_LOCHIM, - SYSZ_INS_LOCHINE, - SYSZ_INS_LOCHINH, - SYSZ_INS_LOCHINHE, - SYSZ_INS_LOCHINL, - SYSZ_INS_LOCHINLE, - SYSZ_INS_LOCHINLH, - SYSZ_INS_LOCHINM, - SYSZ_INS_LOCHINO, - SYSZ_INS_LOCHINP, - SYSZ_INS_LOCHINZ, - SYSZ_INS_LOCHIO, - SYSZ_INS_LOCHIP, - SYSZ_INS_LOCHIZ, - SYSZ_INS_LOCM, - SYSZ_INS_LOCNM, - SYSZ_INS_LOCNP, - SYSZ_INS_LOCNZ, - SYSZ_INS_LOCP, - SYSZ_INS_LOCRM, - SYSZ_INS_LOCRNM, - SYSZ_INS_LOCRNP, - SYSZ_INS_LOCRNZ, - SYSZ_INS_LOCRP, - SYSZ_INS_LOCRZ, - SYSZ_INS_LOCZ, - SYSZ_INS_LPCTL, - SYSZ_INS_LPD, - SYSZ_INS_LPDFR, - SYSZ_INS_LPDG, - SYSZ_INS_LPDR, - SYSZ_INS_LPER, - SYSZ_INS_LPP, - SYSZ_INS_LPQ, - SYSZ_INS_LPSW, - SYSZ_INS_LPSWE, - SYSZ_INS_LPTEA, - SYSZ_INS_LPXR, - SYSZ_INS_LRA, - SYSZ_INS_LRAG, - SYSZ_INS_LRAY, - SYSZ_INS_LRDR, - SYSZ_INS_LRER, - SYSZ_INS_LRVH, - SYSZ_INS_LSCTL, - SYSZ_INS_LTDR, - SYSZ_INS_LTDTR, - SYSZ_INS_LTER, - SYSZ_INS_LTXR, - SYSZ_INS_LTXTR, - SYSZ_INS_LURA, - SYSZ_INS_LURAG, - SYSZ_INS_LXD, - SYSZ_INS_LXDR, - SYSZ_INS_LXDTR, - SYSZ_INS_LXE, - SYSZ_INS_LXER, - SYSZ_INS_LZRF, - SYSZ_INS_LZRG, - SYSZ_INS_M, - SYSZ_INS_MAD, - SYSZ_INS_MADR, - SYSZ_INS_MAE, - SYSZ_INS_MAER, - SYSZ_INS_MAY, - SYSZ_INS_MAYH, - SYSZ_INS_MAYHR, - SYSZ_INS_MAYL, - SYSZ_INS_MAYLR, - SYSZ_INS_MAYR, - SYSZ_INS_MC, - SYSZ_INS_MD, - SYSZ_INS_MDE, - SYSZ_INS_MDER, - SYSZ_INS_MDR, - SYSZ_INS_MDTR, - SYSZ_INS_MDTRA, - SYSZ_INS_ME, - SYSZ_INS_MEE, - SYSZ_INS_MEER, - SYSZ_INS_MER, - SYSZ_INS_MFY, - SYSZ_INS_MG, - SYSZ_INS_MGH, - SYSZ_INS_MGRK, - SYSZ_INS_ML, - SYSZ_INS_MLR, - SYSZ_INS_MP, - SYSZ_INS_MR, - SYSZ_INS_MSC, - SYSZ_INS_MSCH, - SYSZ_INS_MSD, - SYSZ_INS_MSDR, - SYSZ_INS_MSE, - SYSZ_INS_MSER, - SYSZ_INS_MSGC, - SYSZ_INS_MSGRKC, - SYSZ_INS_MSRKC, - SYSZ_INS_MSTA, - SYSZ_INS_MVCDK, - SYSZ_INS_MVCIN, - SYSZ_INS_MVCK, - SYSZ_INS_MVCL, - SYSZ_INS_MVCLE, - SYSZ_INS_MVCLU, - SYSZ_INS_MVCOS, - SYSZ_INS_MVCP, - SYSZ_INS_MVCS, - SYSZ_INS_MVCSK, - SYSZ_INS_MVN, - SYSZ_INS_MVO, - SYSZ_INS_MVPG, - SYSZ_INS_MVZ, - SYSZ_INS_MXD, - SYSZ_INS_MXDR, - SYSZ_INS_MXR, - SYSZ_INS_MXTR, - SYSZ_INS_MXTRA, - SYSZ_INS_MY, - SYSZ_INS_MYH, - SYSZ_INS_MYHR, - SYSZ_INS_MYL, - SYSZ_INS_MYLR, - SYSZ_INS_MYR, - SYSZ_INS_NIAI, - SYSZ_INS_NTSTG, - SYSZ_INS_PACK, - SYSZ_INS_PALB, - SYSZ_INS_PC, - SYSZ_INS_PCC, - SYSZ_INS_PCKMO, - SYSZ_INS_PFMF, - SYSZ_INS_PFPO, - SYSZ_INS_PGIN, - SYSZ_INS_PGOUT, - SYSZ_INS_PKA, - SYSZ_INS_PKU, - SYSZ_INS_PLO, - SYSZ_INS_POPCNT, - SYSZ_INS_PPA, - SYSZ_INS_PPNO, - SYSZ_INS_PR, - SYSZ_INS_PRNO, - SYSZ_INS_PT, - SYSZ_INS_PTF, - SYSZ_INS_PTFF, - SYSZ_INS_PTI, - SYSZ_INS_PTLB, - SYSZ_INS_QADTR, - SYSZ_INS_QAXTR, - SYSZ_INS_QCTRI, - SYSZ_INS_QSI, - SYSZ_INS_RCHP, - SYSZ_INS_RISBGN, - SYSZ_INS_RP, - SYSZ_INS_RRBE, - SYSZ_INS_RRBM, - SYSZ_INS_RRDTR, - SYSZ_INS_RRXTR, - SYSZ_INS_RSCH, - SYSZ_INS_SAC, - SYSZ_INS_SACF, - SYSZ_INS_SAL, - SYSZ_INS_SAM24, - SYSZ_INS_SAM31, - SYSZ_INS_SAM64, - SYSZ_INS_SAR, - SYSZ_INS_SCCTR, - SYSZ_INS_SCHM, - SYSZ_INS_SCK, - SYSZ_INS_SCKC, - SYSZ_INS_SCKPF, - SYSZ_INS_SD, - SYSZ_INS_SDR, - SYSZ_INS_SDTR, - SYSZ_INS_SDTRA, - SYSZ_INS_SE, - SYSZ_INS_SER, - SYSZ_INS_SFASR, - SYSZ_INS_SFPC, - SYSZ_INS_SGH, - SYSZ_INS_SHHHR, - SYSZ_INS_SHHLR, - SYSZ_INS_SIE, - SYSZ_INS_SIGA, - SYSZ_INS_SIGP, - SYSZ_INS_SLA, - SYSZ_INS_SLAG, - SYSZ_INS_SLAK, - SYSZ_INS_SLDA, - SYSZ_INS_SLDL, - SYSZ_INS_SLDT, - SYSZ_INS_SLHHHR, - SYSZ_INS_SLHHLR, - SYSZ_INS_SLXT, - SYSZ_INS_SP, - SYSZ_INS_SPCTR, - SYSZ_INS_SPKA, - SYSZ_INS_SPM, - SYSZ_INS_SPT, - SYSZ_INS_SPX, - SYSZ_INS_SQD, - SYSZ_INS_SQDR, - SYSZ_INS_SQE, - SYSZ_INS_SQER, - SYSZ_INS_SQXR, - SYSZ_INS_SRDA, - SYSZ_INS_SRDL, - SYSZ_INS_SRDT, - SYSZ_INS_SRNM, - SYSZ_INS_SRNMB, - SYSZ_INS_SRNMT, - SYSZ_INS_SRP, - SYSZ_INS_SRSTU, - SYSZ_INS_SRXT, - SYSZ_INS_SSAIR, - SYSZ_INS_SSAR, - SYSZ_INS_SSCH, - SYSZ_INS_SSKE, - SYSZ_INS_SSM, - SYSZ_INS_STAM, - SYSZ_INS_STAMY, - SYSZ_INS_STAP, - SYSZ_INS_STCK, - SYSZ_INS_STCKC, - SYSZ_INS_STCKE, - SYSZ_INS_STCKF, - SYSZ_INS_STCM, - SYSZ_INS_STCMH, - SYSZ_INS_STCMY, - SYSZ_INS_STCPS, - SYSZ_INS_STCRW, - SYSZ_INS_STCTG, - SYSZ_INS_STCTL, - SYSZ_INS_STFL, - SYSZ_INS_STFLE, - SYSZ_INS_STFPC, - SYSZ_INS_STGSC, - SYSZ_INS_STIDP, - SYSZ_INS_STM, - SYSZ_INS_STMH, - SYSZ_INS_STMY, - SYSZ_INS_STNSM, - SYSZ_INS_STOCFH, - SYSZ_INS_STOCFHE, - SYSZ_INS_STOCFHH, - SYSZ_INS_STOCFHHE, - SYSZ_INS_STOCFHL, - SYSZ_INS_STOCFHLE, - SYSZ_INS_STOCFHLH, - SYSZ_INS_STOCFHM, - SYSZ_INS_STOCFHNE, - SYSZ_INS_STOCFHNH, - SYSZ_INS_STOCFHNHE, - SYSZ_INS_STOCFHNL, - SYSZ_INS_STOCFHNLE, - SYSZ_INS_STOCFHNLH, - SYSZ_INS_STOCFHNM, - SYSZ_INS_STOCFHNO, - SYSZ_INS_STOCFHNP, - SYSZ_INS_STOCFHNZ, - SYSZ_INS_STOCFHO, - SYSZ_INS_STOCFHP, - SYSZ_INS_STOCFHZ, - SYSZ_INS_STOCGM, - SYSZ_INS_STOCGNM, - SYSZ_INS_STOCGNP, - SYSZ_INS_STOCGNZ, - SYSZ_INS_STOCGP, - SYSZ_INS_STOCGZ, - SYSZ_INS_STOCM, - SYSZ_INS_STOCNM, - SYSZ_INS_STOCNP, - SYSZ_INS_STOCNZ, - SYSZ_INS_STOCP, - SYSZ_INS_STOCZ, - SYSZ_INS_STOSM, - SYSZ_INS_STPQ, - SYSZ_INS_STPT, - SYSZ_INS_STPX, - SYSZ_INS_STRAG, - SYSZ_INS_STRVH, - SYSZ_INS_STSCH, - SYSZ_INS_STSI, - SYSZ_INS_STURA, - SYSZ_INS_STURG, - SYSZ_INS_SU, - SYSZ_INS_SUR, - SYSZ_INS_SVC, - SYSZ_INS_SW, - SYSZ_INS_SWR, - SYSZ_INS_SXR, - SYSZ_INS_SXTR, - SYSZ_INS_SXTRA, - SYSZ_INS_TABORT, - SYSZ_INS_TAM, - SYSZ_INS_TAR, - SYSZ_INS_TB, - SYSZ_INS_TBDR, - SYSZ_INS_TBEDR, - SYSZ_INS_TBEGIN, - SYSZ_INS_TBEGINC, - SYSZ_INS_TCDB, - SYSZ_INS_TCEB, - SYSZ_INS_TCXB, - SYSZ_INS_TDCDT, - SYSZ_INS_TDCET, - SYSZ_INS_TDCXT, - SYSZ_INS_TDGDT, - SYSZ_INS_TDGET, - SYSZ_INS_TDGXT, - SYSZ_INS_TEND, - SYSZ_INS_THDER, - SYSZ_INS_THDR, - SYSZ_INS_TP, - SYSZ_INS_TPI, - SYSZ_INS_TPROT, - SYSZ_INS_TR, - SYSZ_INS_TRACE, - SYSZ_INS_TRACG, - SYSZ_INS_TRAP2, - SYSZ_INS_TRAP4, - SYSZ_INS_TRE, - SYSZ_INS_TROO, - SYSZ_INS_TROT, - SYSZ_INS_TRT, - SYSZ_INS_TRTE, - SYSZ_INS_TRTO, - SYSZ_INS_TRTR, - SYSZ_INS_TRTRE, - SYSZ_INS_TRTT, - SYSZ_INS_TS, - SYSZ_INS_TSCH, - SYSZ_INS_UNPK, - SYSZ_INS_UNPKA, - SYSZ_INS_UNPKU, - SYSZ_INS_UPT, - SYSZ_INS_VA, - SYSZ_INS_VAB, - SYSZ_INS_VAC, - SYSZ_INS_VACC, - SYSZ_INS_VACCB, - SYSZ_INS_VACCC, - SYSZ_INS_VACCCQ, - SYSZ_INS_VACCF, - SYSZ_INS_VACCG, - SYSZ_INS_VACCH, - SYSZ_INS_VACCQ, - SYSZ_INS_VACQ, - SYSZ_INS_VAF, - SYSZ_INS_VAG, - SYSZ_INS_VAH, - SYSZ_INS_VAP, - SYSZ_INS_VAQ, - SYSZ_INS_VAVG, - SYSZ_INS_VAVGB, - SYSZ_INS_VAVGF, - SYSZ_INS_VAVGG, - SYSZ_INS_VAVGH, - SYSZ_INS_VAVGL, - SYSZ_INS_VAVGLB, - SYSZ_INS_VAVGLF, - SYSZ_INS_VAVGLG, - SYSZ_INS_VAVGLH, - SYSZ_INS_VBPERM, - SYSZ_INS_VCDG, - SYSZ_INS_VCDGB, - SYSZ_INS_VCDLG, - SYSZ_INS_VCDLGB, - SYSZ_INS_VCEQ, - SYSZ_INS_VCEQB, - SYSZ_INS_VCEQBS, - SYSZ_INS_VCEQF, - SYSZ_INS_VCEQFS, - SYSZ_INS_VCEQG, - SYSZ_INS_VCEQGS, - SYSZ_INS_VCEQH, - SYSZ_INS_VCEQHS, - SYSZ_INS_VCGD, - SYSZ_INS_VCGDB, - SYSZ_INS_VCH, - SYSZ_INS_VCHB, - SYSZ_INS_VCHBS, - SYSZ_INS_VCHF, - SYSZ_INS_VCHFS, - SYSZ_INS_VCHG, - SYSZ_INS_VCHGS, - SYSZ_INS_VCHH, - SYSZ_INS_VCHHS, - SYSZ_INS_VCHL, - SYSZ_INS_VCHLB, - SYSZ_INS_VCHLBS, - SYSZ_INS_VCHLF, - SYSZ_INS_VCHLFS, - SYSZ_INS_VCHLG, - SYSZ_INS_VCHLGS, - SYSZ_INS_VCHLH, - SYSZ_INS_VCHLHS, - SYSZ_INS_VCKSM, - SYSZ_INS_VCLGD, - SYSZ_INS_VCLGDB, - SYSZ_INS_VCLZ, - SYSZ_INS_VCLZB, - SYSZ_INS_VCLZF, - SYSZ_INS_VCLZG, - SYSZ_INS_VCLZH, - SYSZ_INS_VCP, - SYSZ_INS_VCTZ, - SYSZ_INS_VCTZB, - SYSZ_INS_VCTZF, - SYSZ_INS_VCTZG, - SYSZ_INS_VCTZH, - SYSZ_INS_VCVB, - SYSZ_INS_VCVBG, - SYSZ_INS_VCVD, - SYSZ_INS_VCVDG, - SYSZ_INS_VDP, - SYSZ_INS_VEC, - SYSZ_INS_VECB, - SYSZ_INS_VECF, - SYSZ_INS_VECG, - SYSZ_INS_VECH, - SYSZ_INS_VECL, - SYSZ_INS_VECLB, - SYSZ_INS_VECLF, - SYSZ_INS_VECLG, - SYSZ_INS_VECLH, - SYSZ_INS_VERIM, - SYSZ_INS_VERIMB, - SYSZ_INS_VERIMF, - SYSZ_INS_VERIMG, - SYSZ_INS_VERIMH, - SYSZ_INS_VERLL, - SYSZ_INS_VERLLB, - SYSZ_INS_VERLLF, - SYSZ_INS_VERLLG, - SYSZ_INS_VERLLH, - SYSZ_INS_VERLLV, - SYSZ_INS_VERLLVB, - SYSZ_INS_VERLLVF, - SYSZ_INS_VERLLVG, - SYSZ_INS_VERLLVH, - SYSZ_INS_VESL, - SYSZ_INS_VESLB, - SYSZ_INS_VESLF, - SYSZ_INS_VESLG, - SYSZ_INS_VESLH, - SYSZ_INS_VESLV, - SYSZ_INS_VESLVB, - SYSZ_INS_VESLVF, - SYSZ_INS_VESLVG, - SYSZ_INS_VESLVH, - SYSZ_INS_VESRA, - SYSZ_INS_VESRAB, - SYSZ_INS_VESRAF, - SYSZ_INS_VESRAG, - SYSZ_INS_VESRAH, - SYSZ_INS_VESRAV, - SYSZ_INS_VESRAVB, - SYSZ_INS_VESRAVF, - SYSZ_INS_VESRAVG, - SYSZ_INS_VESRAVH, - SYSZ_INS_VESRL, - SYSZ_INS_VESRLB, - SYSZ_INS_VESRLF, - SYSZ_INS_VESRLG, - SYSZ_INS_VESRLH, - SYSZ_INS_VESRLV, - SYSZ_INS_VESRLVB, - SYSZ_INS_VESRLVF, - SYSZ_INS_VESRLVG, - SYSZ_INS_VESRLVH, - SYSZ_INS_VFA, - SYSZ_INS_VFADB, - SYSZ_INS_VFAE, - SYSZ_INS_VFAEB, - SYSZ_INS_VFAEBS, - SYSZ_INS_VFAEF, - SYSZ_INS_VFAEFS, - SYSZ_INS_VFAEH, - SYSZ_INS_VFAEHS, - SYSZ_INS_VFAEZB, - SYSZ_INS_VFAEZBS, - SYSZ_INS_VFAEZF, - SYSZ_INS_VFAEZFS, - SYSZ_INS_VFAEZH, - SYSZ_INS_VFAEZHS, - SYSZ_INS_VFASB, - SYSZ_INS_VFCE, - SYSZ_INS_VFCEDB, - SYSZ_INS_VFCEDBS, - SYSZ_INS_VFCESB, - SYSZ_INS_VFCESBS, - SYSZ_INS_VFCH, - SYSZ_INS_VFCHDB, - SYSZ_INS_VFCHDBS, - SYSZ_INS_VFCHE, - SYSZ_INS_VFCHEDB, - SYSZ_INS_VFCHEDBS, - SYSZ_INS_VFCHESB, - SYSZ_INS_VFCHESBS, - SYSZ_INS_VFCHSB, - SYSZ_INS_VFCHSBS, - SYSZ_INS_VFD, - SYSZ_INS_VFDDB, - SYSZ_INS_VFDSB, - SYSZ_INS_VFEE, - SYSZ_INS_VFEEB, - SYSZ_INS_VFEEBS, - SYSZ_INS_VFEEF, - SYSZ_INS_VFEEFS, - SYSZ_INS_VFEEH, - SYSZ_INS_VFEEHS, - SYSZ_INS_VFEEZB, - SYSZ_INS_VFEEZBS, - SYSZ_INS_VFEEZF, - SYSZ_INS_VFEEZFS, - SYSZ_INS_VFEEZH, - SYSZ_INS_VFEEZHS, - SYSZ_INS_VFENE, - SYSZ_INS_VFENEB, - SYSZ_INS_VFENEBS, - SYSZ_INS_VFENEF, - SYSZ_INS_VFENEFS, - SYSZ_INS_VFENEH, - SYSZ_INS_VFENEHS, - SYSZ_INS_VFENEZB, - SYSZ_INS_VFENEZBS, - SYSZ_INS_VFENEZF, - SYSZ_INS_VFENEZFS, - SYSZ_INS_VFENEZH, - SYSZ_INS_VFENEZHS, - SYSZ_INS_VFI, - SYSZ_INS_VFIDB, - SYSZ_INS_VFISB, - SYSZ_INS_VFKEDB, - SYSZ_INS_VFKEDBS, - SYSZ_INS_VFKESB, - SYSZ_INS_VFKESBS, - SYSZ_INS_VFKHDB, - SYSZ_INS_VFKHDBS, - SYSZ_INS_VFKHEDB, - SYSZ_INS_VFKHEDBS, - SYSZ_INS_VFKHESB, - SYSZ_INS_VFKHESBS, - SYSZ_INS_VFKHSB, - SYSZ_INS_VFKHSBS, - SYSZ_INS_VFLCDB, - SYSZ_INS_VFLCSB, - SYSZ_INS_VFLL, - SYSZ_INS_VFLLS, - SYSZ_INS_VFLNDB, - SYSZ_INS_VFLNSB, - SYSZ_INS_VFLPDB, - SYSZ_INS_VFLPSB, - SYSZ_INS_VFLR, - SYSZ_INS_VFLRD, - SYSZ_INS_VFM, - SYSZ_INS_VFMA, - SYSZ_INS_VFMADB, - SYSZ_INS_VFMASB, - SYSZ_INS_VFMAX, - SYSZ_INS_VFMAXDB, - SYSZ_INS_VFMAXSB, - SYSZ_INS_VFMDB, - SYSZ_INS_VFMIN, - SYSZ_INS_VFMINDB, - SYSZ_INS_VFMINSB, - SYSZ_INS_VFMS, - SYSZ_INS_VFMSB, - SYSZ_INS_VFMSDB, - SYSZ_INS_VFMSSB, - SYSZ_INS_VFNMA, - SYSZ_INS_VFNMADB, - SYSZ_INS_VFNMASB, - SYSZ_INS_VFNMS, - SYSZ_INS_VFNMSDB, - SYSZ_INS_VFNMSSB, - SYSZ_INS_VFPSO, - SYSZ_INS_VFPSODB, - SYSZ_INS_VFPSOSB, - SYSZ_INS_VFS, - SYSZ_INS_VFSDB, - SYSZ_INS_VFSQ, - SYSZ_INS_VFSQDB, - SYSZ_INS_VFSQSB, - SYSZ_INS_VFSSB, - SYSZ_INS_VFTCI, - SYSZ_INS_VFTCIDB, - SYSZ_INS_VFTCISB, - SYSZ_INS_VGBM, - SYSZ_INS_VGEF, - SYSZ_INS_VGEG, - SYSZ_INS_VGFM, - SYSZ_INS_VGFMA, - SYSZ_INS_VGFMAB, - SYSZ_INS_VGFMAF, - SYSZ_INS_VGFMAG, - SYSZ_INS_VGFMAH, - SYSZ_INS_VGFMB, - SYSZ_INS_VGFMF, - SYSZ_INS_VGFMG, - SYSZ_INS_VGFMH, - SYSZ_INS_VGM, - SYSZ_INS_VGMB, - SYSZ_INS_VGMF, - SYSZ_INS_VGMG, - SYSZ_INS_VGMH, - SYSZ_INS_VISTR, - SYSZ_INS_VISTRB, - SYSZ_INS_VISTRBS, - SYSZ_INS_VISTRF, - SYSZ_INS_VISTRFS, - SYSZ_INS_VISTRH, - SYSZ_INS_VISTRHS, - SYSZ_INS_VL, - SYSZ_INS_VLBB, - SYSZ_INS_VLC, - SYSZ_INS_VLCB, - SYSZ_INS_VLCF, - SYSZ_INS_VLCG, - SYSZ_INS_VLCH, - SYSZ_INS_VLDE, - SYSZ_INS_VLDEB, - SYSZ_INS_VLEB, - SYSZ_INS_VLED, - SYSZ_INS_VLEDB, - SYSZ_INS_VLEF, - SYSZ_INS_VLEG, - SYSZ_INS_VLEH, - SYSZ_INS_VLEIB, - SYSZ_INS_VLEIF, - SYSZ_INS_VLEIG, - SYSZ_INS_VLEIH, - SYSZ_INS_VLGV, - SYSZ_INS_VLGVB, - SYSZ_INS_VLGVF, - SYSZ_INS_VLGVG, - SYSZ_INS_VLGVH, - SYSZ_INS_VLIP, - SYSZ_INS_VLL, - SYSZ_INS_VLLEZ, - SYSZ_INS_VLLEZB, - SYSZ_INS_VLLEZF, - SYSZ_INS_VLLEZG, - SYSZ_INS_VLLEZH, - SYSZ_INS_VLLEZLF, - SYSZ_INS_VLM, - SYSZ_INS_VLP, - SYSZ_INS_VLPB, - SYSZ_INS_VLPF, - SYSZ_INS_VLPG, - SYSZ_INS_VLPH, - SYSZ_INS_VLR, - SYSZ_INS_VLREP, - SYSZ_INS_VLREPB, - SYSZ_INS_VLREPF, - SYSZ_INS_VLREPG, - SYSZ_INS_VLREPH, - SYSZ_INS_VLRL, - SYSZ_INS_VLRLR, - SYSZ_INS_VLVG, - SYSZ_INS_VLVGB, - SYSZ_INS_VLVGF, - SYSZ_INS_VLVGG, - SYSZ_INS_VLVGH, - SYSZ_INS_VLVGP, - SYSZ_INS_VMAE, - SYSZ_INS_VMAEB, - SYSZ_INS_VMAEF, - SYSZ_INS_VMAEH, - SYSZ_INS_VMAH, - SYSZ_INS_VMAHB, - SYSZ_INS_VMAHF, - SYSZ_INS_VMAHH, - SYSZ_INS_VMAL, - SYSZ_INS_VMALB, - SYSZ_INS_VMALE, - SYSZ_INS_VMALEB, - SYSZ_INS_VMALEF, - SYSZ_INS_VMALEH, - SYSZ_INS_VMALF, - SYSZ_INS_VMALH, - SYSZ_INS_VMALHB, - SYSZ_INS_VMALHF, - SYSZ_INS_VMALHH, - SYSZ_INS_VMALHW, - SYSZ_INS_VMALO, - SYSZ_INS_VMALOB, - SYSZ_INS_VMALOF, - SYSZ_INS_VMALOH, - SYSZ_INS_VMAO, - SYSZ_INS_VMAOB, - SYSZ_INS_VMAOF, - SYSZ_INS_VMAOH, - SYSZ_INS_VME, - SYSZ_INS_VMEB, - SYSZ_INS_VMEF, - SYSZ_INS_VMEH, - SYSZ_INS_VMH, - SYSZ_INS_VMHB, - SYSZ_INS_VMHF, - SYSZ_INS_VMHH, - SYSZ_INS_VML, - SYSZ_INS_VMLB, - SYSZ_INS_VMLE, - SYSZ_INS_VMLEB, - SYSZ_INS_VMLEF, - SYSZ_INS_VMLEH, - SYSZ_INS_VMLF, - SYSZ_INS_VMLH, - SYSZ_INS_VMLHB, - SYSZ_INS_VMLHF, - SYSZ_INS_VMLHH, - SYSZ_INS_VMLHW, - SYSZ_INS_VMLO, - SYSZ_INS_VMLOB, - SYSZ_INS_VMLOF, - SYSZ_INS_VMLOH, - SYSZ_INS_VMN, - SYSZ_INS_VMNB, - SYSZ_INS_VMNF, - SYSZ_INS_VMNG, - SYSZ_INS_VMNH, - SYSZ_INS_VMNL, - SYSZ_INS_VMNLB, - SYSZ_INS_VMNLF, - SYSZ_INS_VMNLG, - SYSZ_INS_VMNLH, - SYSZ_INS_VMO, - SYSZ_INS_VMOB, - SYSZ_INS_VMOF, - SYSZ_INS_VMOH, - SYSZ_INS_VMP, - SYSZ_INS_VMRH, - SYSZ_INS_VMRHB, - SYSZ_INS_VMRHF, - SYSZ_INS_VMRHG, - SYSZ_INS_VMRHH, - SYSZ_INS_VMRL, - SYSZ_INS_VMRLB, - SYSZ_INS_VMRLF, - SYSZ_INS_VMRLG, - SYSZ_INS_VMRLH, - SYSZ_INS_VMSL, - SYSZ_INS_VMSLG, - SYSZ_INS_VMSP, - SYSZ_INS_VMX, - SYSZ_INS_VMXB, - SYSZ_INS_VMXF, - SYSZ_INS_VMXG, - SYSZ_INS_VMXH, - SYSZ_INS_VMXL, - SYSZ_INS_VMXLB, - SYSZ_INS_VMXLF, - SYSZ_INS_VMXLG, - SYSZ_INS_VMXLH, - SYSZ_INS_VN, - SYSZ_INS_VNC, - SYSZ_INS_VNN, - SYSZ_INS_VNO, - SYSZ_INS_VNX, - SYSZ_INS_VO, - SYSZ_INS_VOC, - SYSZ_INS_VONE, - SYSZ_INS_VPDI, - SYSZ_INS_VPERM, - SYSZ_INS_VPK, - SYSZ_INS_VPKF, - SYSZ_INS_VPKG, - SYSZ_INS_VPKH, - SYSZ_INS_VPKLS, - SYSZ_INS_VPKLSF, - SYSZ_INS_VPKLSFS, - SYSZ_INS_VPKLSG, - SYSZ_INS_VPKLSGS, - SYSZ_INS_VPKLSH, - SYSZ_INS_VPKLSHS, - SYSZ_INS_VPKS, - SYSZ_INS_VPKSF, - SYSZ_INS_VPKSFS, - SYSZ_INS_VPKSG, - SYSZ_INS_VPKSGS, - SYSZ_INS_VPKSH, - SYSZ_INS_VPKSHS, - SYSZ_INS_VPKZ, - SYSZ_INS_VPOPCT, - SYSZ_INS_VPOPCTB, - SYSZ_INS_VPOPCTF, - SYSZ_INS_VPOPCTG, - SYSZ_INS_VPOPCTH, - SYSZ_INS_VPSOP, - SYSZ_INS_VREP, - SYSZ_INS_VREPB, - SYSZ_INS_VREPF, - SYSZ_INS_VREPG, - SYSZ_INS_VREPH, - SYSZ_INS_VREPI, - SYSZ_INS_VREPIB, - SYSZ_INS_VREPIF, - SYSZ_INS_VREPIG, - SYSZ_INS_VREPIH, - SYSZ_INS_VRP, - SYSZ_INS_VS, - SYSZ_INS_VSB, - SYSZ_INS_VSBCBI, - SYSZ_INS_VSBCBIQ, - SYSZ_INS_VSBI, - SYSZ_INS_VSBIQ, - SYSZ_INS_VSCBI, - SYSZ_INS_VSCBIB, - SYSZ_INS_VSCBIF, - SYSZ_INS_VSCBIG, - SYSZ_INS_VSCBIH, - SYSZ_INS_VSCBIQ, - SYSZ_INS_VSCEF, - SYSZ_INS_VSCEG, - SYSZ_INS_VSDP, - SYSZ_INS_VSEG, - SYSZ_INS_VSEGB, - SYSZ_INS_VSEGF, - SYSZ_INS_VSEGH, - SYSZ_INS_VSEL, - SYSZ_INS_VSF, - SYSZ_INS_VSG, - SYSZ_INS_VSH, - SYSZ_INS_VSL, - SYSZ_INS_VSLB, - SYSZ_INS_VSLDB, - SYSZ_INS_VSP, - SYSZ_INS_VSQ, - SYSZ_INS_VSRA, - SYSZ_INS_VSRAB, - SYSZ_INS_VSRL, - SYSZ_INS_VSRLB, - SYSZ_INS_VSRP, - SYSZ_INS_VST, - SYSZ_INS_VSTEB, - SYSZ_INS_VSTEF, - SYSZ_INS_VSTEG, - SYSZ_INS_VSTEH, - SYSZ_INS_VSTL, - SYSZ_INS_VSTM, - SYSZ_INS_VSTRC, - SYSZ_INS_VSTRCB, - SYSZ_INS_VSTRCBS, - SYSZ_INS_VSTRCF, - SYSZ_INS_VSTRCFS, - SYSZ_INS_VSTRCH, - SYSZ_INS_VSTRCHS, - SYSZ_INS_VSTRCZB, - SYSZ_INS_VSTRCZBS, - SYSZ_INS_VSTRCZF, - SYSZ_INS_VSTRCZFS, - SYSZ_INS_VSTRCZH, - SYSZ_INS_VSTRCZHS, - SYSZ_INS_VSTRL, - SYSZ_INS_VSTRLR, - SYSZ_INS_VSUM, - SYSZ_INS_VSUMB, - SYSZ_INS_VSUMG, - SYSZ_INS_VSUMGF, - SYSZ_INS_VSUMGH, - SYSZ_INS_VSUMH, - SYSZ_INS_VSUMQ, - SYSZ_INS_VSUMQF, - SYSZ_INS_VSUMQG, - SYSZ_INS_VTM, - SYSZ_INS_VTP, - SYSZ_INS_VUPH, - SYSZ_INS_VUPHB, - SYSZ_INS_VUPHF, - SYSZ_INS_VUPHH, - SYSZ_INS_VUPKZ, - SYSZ_INS_VUPL, - SYSZ_INS_VUPLB, - SYSZ_INS_VUPLF, - SYSZ_INS_VUPLH, - SYSZ_INS_VUPLHB, - SYSZ_INS_VUPLHF, - SYSZ_INS_VUPLHH, - SYSZ_INS_VUPLHW, - SYSZ_INS_VUPLL, - SYSZ_INS_VUPLLB, - SYSZ_INS_VUPLLF, - SYSZ_INS_VUPLLH, - SYSZ_INS_VX, - SYSZ_INS_VZERO, - SYSZ_INS_WCDGB, - SYSZ_INS_WCDLGB, - SYSZ_INS_WCGDB, - SYSZ_INS_WCLGDB, - SYSZ_INS_WFADB, - SYSZ_INS_WFASB, - SYSZ_INS_WFAXB, - SYSZ_INS_WFC, - SYSZ_INS_WFCDB, - SYSZ_INS_WFCEDB, - SYSZ_INS_WFCEDBS, - SYSZ_INS_WFCESB, - SYSZ_INS_WFCESBS, - SYSZ_INS_WFCEXB, - SYSZ_INS_WFCEXBS, - SYSZ_INS_WFCHDB, - SYSZ_INS_WFCHDBS, - SYSZ_INS_WFCHEDB, - SYSZ_INS_WFCHEDBS, - SYSZ_INS_WFCHESB, - SYSZ_INS_WFCHESBS, - SYSZ_INS_WFCHEXB, - SYSZ_INS_WFCHEXBS, - SYSZ_INS_WFCHSB, - SYSZ_INS_WFCHSBS, - SYSZ_INS_WFCHXB, - SYSZ_INS_WFCHXBS, - SYSZ_INS_WFCSB, - SYSZ_INS_WFCXB, - SYSZ_INS_WFDDB, - SYSZ_INS_WFDSB, - SYSZ_INS_WFDXB, - SYSZ_INS_WFIDB, - SYSZ_INS_WFISB, - SYSZ_INS_WFIXB, - SYSZ_INS_WFK, - SYSZ_INS_WFKDB, - SYSZ_INS_WFKEDB, - SYSZ_INS_WFKEDBS, - SYSZ_INS_WFKESB, - SYSZ_INS_WFKESBS, - SYSZ_INS_WFKEXB, - SYSZ_INS_WFKEXBS, - SYSZ_INS_WFKHDB, - SYSZ_INS_WFKHDBS, - SYSZ_INS_WFKHEDB, - SYSZ_INS_WFKHEDBS, - SYSZ_INS_WFKHESB, - SYSZ_INS_WFKHESBS, - SYSZ_INS_WFKHEXB, - SYSZ_INS_WFKHEXBS, - SYSZ_INS_WFKHSB, - SYSZ_INS_WFKHSBS, - SYSZ_INS_WFKHXB, - SYSZ_INS_WFKHXBS, - SYSZ_INS_WFKSB, - SYSZ_INS_WFKXB, - SYSZ_INS_WFLCDB, - SYSZ_INS_WFLCSB, - SYSZ_INS_WFLCXB, - SYSZ_INS_WFLLD, - SYSZ_INS_WFLLS, - SYSZ_INS_WFLNDB, - SYSZ_INS_WFLNSB, - SYSZ_INS_WFLNXB, - SYSZ_INS_WFLPDB, - SYSZ_INS_WFLPSB, - SYSZ_INS_WFLPXB, - SYSZ_INS_WFLRD, - SYSZ_INS_WFLRX, - SYSZ_INS_WFMADB, - SYSZ_INS_WFMASB, - SYSZ_INS_WFMAXB, - SYSZ_INS_WFMAXDB, - SYSZ_INS_WFMAXSB, - SYSZ_INS_WFMAXXB, - SYSZ_INS_WFMDB, - SYSZ_INS_WFMINDB, - SYSZ_INS_WFMINSB, - SYSZ_INS_WFMINXB, - SYSZ_INS_WFMSB, - SYSZ_INS_WFMSDB, - SYSZ_INS_WFMSSB, - SYSZ_INS_WFMSXB, - SYSZ_INS_WFMXB, - SYSZ_INS_WFNMADB, - SYSZ_INS_WFNMASB, - SYSZ_INS_WFNMAXB, - SYSZ_INS_WFNMSDB, - SYSZ_INS_WFNMSSB, - SYSZ_INS_WFNMSXB, - SYSZ_INS_WFPSODB, - SYSZ_INS_WFPSOSB, - SYSZ_INS_WFPSOXB, - SYSZ_INS_WFSDB, - SYSZ_INS_WFSQDB, - SYSZ_INS_WFSQSB, - SYSZ_INS_WFSQXB, - SYSZ_INS_WFSSB, - SYSZ_INS_WFSXB, - SYSZ_INS_WFTCIDB, - SYSZ_INS_WFTCISB, - SYSZ_INS_WFTCIXB, - SYSZ_INS_WLDEB, - SYSZ_INS_WLEDB, - SYSZ_INS_XSCH, - SYSZ_INS_ZAP, - - SYSZ_INS_ENDING, // <-- mark the end of the list of instructions -} sysz_insn; - -/// Group of SystemZ instructions -typedef enum sysz_insn_group { - SYSZ_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - SYSZ_GRP_JUMP, ///< = CS_GRP_JUMP - - // Architecture-specific groups - SYSZ_GRP_DISTINCTOPS = 128, - SYSZ_GRP_FPEXTENSION, - SYSZ_GRP_HIGHWORD, - SYSZ_GRP_INTERLOCKEDACCESS1, - SYSZ_GRP_LOADSTOREONCOND, - SYSZ_GRP_DFPPACKEDCONVERSION, - SYSZ_GRP_DFPZONEDCONVERSION, - SYSZ_GRP_ENHANCEDDAT2, - SYSZ_GRP_EXECUTIONHINT, - SYSZ_GRP_GUARDEDSTORAGE, - SYSZ_GRP_INSERTREFERENCEBITSMULTIPLE, - SYSZ_GRP_LOADANDTRAP, - SYSZ_GRP_LOADANDZERORIGHTMOSTBYTE, - SYSZ_GRP_LOADSTOREONCOND2, - SYSZ_GRP_MESSAGESECURITYASSIST3, - SYSZ_GRP_MESSAGESECURITYASSIST4, - SYSZ_GRP_MESSAGESECURITYASSIST5, - SYSZ_GRP_MESSAGESECURITYASSIST7, - SYSZ_GRP_MESSAGESECURITYASSIST8, - SYSZ_GRP_MISCELLANEOUSEXTENSIONS, - SYSZ_GRP_MISCELLANEOUSEXTENSIONS2, - SYSZ_GRP_NOVECTOR, - SYSZ_GRP_POPULATIONCOUNT, - SYSZ_GRP_PROCESSORASSIST, - SYSZ_GRP_RESETREFERENCEBITSMULTIPLE, - SYSZ_GRP_TRANSACTIONALEXECUTION, - SYSZ_GRP_VECTOR, - SYSZ_GRP_VECTORENHANCEMENTS1, - SYSZ_GRP_VECTORPACKEDDECIMAL, - - SYSZ_GRP_ENDING, // <-- mark the end of the list of groups -} sysz_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/tms320c64x.h b/.tools/python-revlibs/capstone/include/capstone/tms320c64x.h deleted file mode 100644 index 5e7f1b3..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/tms320c64x.h +++ /dev/null @@ -1,359 +0,0 @@ -/* Capstone Disassembly Engine */ -/* TMS320C64x Backend by Fotis Loukos 2016 */ - -#ifndef CAPSTONE_TMS320C64X_H -#define CAPSTONE_TMS320C64X_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -typedef enum tms320c64x_op_type { - TMS320C64X_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - TMS320C64X_OP_REG, ///< = CS_OP_REG (Register operand). - TMS320C64X_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - TMS320C64X_OP_MEM, ///< = CS_OP_MEM (Memory operand). - TMS320C64X_OP_REGPAIR = 64, ///< Register pair for double word ops -} tms320c64x_op_type; - -typedef enum tms320c64x_mem_disp { - TMS320C64X_MEM_DISP_INVALID = 0, - TMS320C64X_MEM_DISP_CONSTANT, - TMS320C64X_MEM_DISP_REGISTER, -} tms320c64x_mem_disp; - -typedef enum tms320c64x_mem_dir { - TMS320C64X_MEM_DIR_INVALID = 0, - TMS320C64X_MEM_DIR_FW, - TMS320C64X_MEM_DIR_BW, -} tms320c64x_mem_dir; - -typedef enum tms320c64x_mem_mod { - TMS320C64X_MEM_MOD_INVALID = 0, - TMS320C64X_MEM_MOD_NO, - TMS320C64X_MEM_MOD_PRE, - TMS320C64X_MEM_MOD_POST, -} tms320c64x_mem_mod; - -typedef struct tms320c64x_op_mem { - unsigned int base; ///< base register - unsigned int disp; ///< displacement/offset value - unsigned int unit; ///< unit of base and offset register - unsigned int scaled; ///< offset scaled - unsigned int disptype; ///< displacement type - unsigned int direction; ///< direction - unsigned int modify; ///< modification -} tms320c64x_op_mem; - -typedef struct cs_tms320c64x_op { - tms320c64x_op_type type; ///< operand type - union { - unsigned int reg; ///< register value for REG operand or first register for REGPAIR operand - int32_t imm; ///< immediate value for IMM operand - tms320c64x_op_mem mem; ///< base/disp value for MEM operand - }; -} cs_tms320c64x_op; - -typedef struct cs_tms320c64x { - uint8_t op_count; - cs_tms320c64x_op operands[8]; ///< operands for this instruction. - struct { - unsigned int reg; - unsigned int zero; - } condition; - struct { - unsigned int unit; - unsigned int side; - unsigned int crosspath; - } funit; - unsigned int parallel; -} cs_tms320c64x; - -typedef enum tms320c64x_reg { - TMS320C64X_REG_INVALID = 0, - - TMS320C64X_REG_AMR, - TMS320C64X_REG_CSR, - TMS320C64X_REG_DIER, - TMS320C64X_REG_DNUM, - TMS320C64X_REG_ECR, - TMS320C64X_REG_GFPGFR, - TMS320C64X_REG_GPLYA, - TMS320C64X_REG_GPLYB, - TMS320C64X_REG_ICR, - TMS320C64X_REG_IER, - TMS320C64X_REG_IERR, - TMS320C64X_REG_ILC, - TMS320C64X_REG_IRP, - TMS320C64X_REG_ISR, - TMS320C64X_REG_ISTP, - TMS320C64X_REG_ITSR, - TMS320C64X_REG_NRP, - TMS320C64X_REG_NTSR, - TMS320C64X_REG_REP, - TMS320C64X_REG_RILC, - TMS320C64X_REG_SSR, - TMS320C64X_REG_TSCH, - TMS320C64X_REG_TSCL, - TMS320C64X_REG_TSR, - TMS320C64X_REG_A0, - TMS320C64X_REG_A1, - TMS320C64X_REG_A2, - TMS320C64X_REG_A3, - TMS320C64X_REG_A4, - TMS320C64X_REG_A5, - TMS320C64X_REG_A6, - TMS320C64X_REG_A7, - TMS320C64X_REG_A8, - TMS320C64X_REG_A9, - TMS320C64X_REG_A10, - TMS320C64X_REG_A11, - TMS320C64X_REG_A12, - TMS320C64X_REG_A13, - TMS320C64X_REG_A14, - TMS320C64X_REG_A15, - TMS320C64X_REG_A16, - TMS320C64X_REG_A17, - TMS320C64X_REG_A18, - TMS320C64X_REG_A19, - TMS320C64X_REG_A20, - TMS320C64X_REG_A21, - TMS320C64X_REG_A22, - TMS320C64X_REG_A23, - TMS320C64X_REG_A24, - TMS320C64X_REG_A25, - TMS320C64X_REG_A26, - TMS320C64X_REG_A27, - TMS320C64X_REG_A28, - TMS320C64X_REG_A29, - TMS320C64X_REG_A30, - TMS320C64X_REG_A31, - TMS320C64X_REG_B0, - TMS320C64X_REG_B1, - TMS320C64X_REG_B2, - TMS320C64X_REG_B3, - TMS320C64X_REG_B4, - TMS320C64X_REG_B5, - TMS320C64X_REG_B6, - TMS320C64X_REG_B7, - TMS320C64X_REG_B8, - TMS320C64X_REG_B9, - TMS320C64X_REG_B10, - TMS320C64X_REG_B11, - TMS320C64X_REG_B12, - TMS320C64X_REG_B13, - TMS320C64X_REG_B14, - TMS320C64X_REG_B15, - TMS320C64X_REG_B16, - TMS320C64X_REG_B17, - TMS320C64X_REG_B18, - TMS320C64X_REG_B19, - TMS320C64X_REG_B20, - TMS320C64X_REG_B21, - TMS320C64X_REG_B22, - TMS320C64X_REG_B23, - TMS320C64X_REG_B24, - TMS320C64X_REG_B25, - TMS320C64X_REG_B26, - TMS320C64X_REG_B27, - TMS320C64X_REG_B28, - TMS320C64X_REG_B29, - TMS320C64X_REG_B30, - TMS320C64X_REG_B31, - TMS320C64X_REG_PCE1, - - TMS320C64X_REG_ENDING, // <-- mark the end of the list of registers - - // Alias registers - TMS320C64X_REG_EFR = TMS320C64X_REG_ECR, - TMS320C64X_REG_IFR = TMS320C64X_REG_ISR, -} tms320c64x_reg; - -typedef enum tms320c64x_insn { - TMS320C64X_INS_INVALID = 0, - - TMS320C64X_INS_ABS, - TMS320C64X_INS_ABS2, - TMS320C64X_INS_ADD, - TMS320C64X_INS_ADD2, - TMS320C64X_INS_ADD4, - TMS320C64X_INS_ADDAB, - TMS320C64X_INS_ADDAD, - TMS320C64X_INS_ADDAH, - TMS320C64X_INS_ADDAW, - TMS320C64X_INS_ADDK, - TMS320C64X_INS_ADDKPC, - TMS320C64X_INS_ADDU, - TMS320C64X_INS_AND, - TMS320C64X_INS_ANDN, - TMS320C64X_INS_AVG2, - TMS320C64X_INS_AVGU4, - TMS320C64X_INS_B, - TMS320C64X_INS_BDEC, - TMS320C64X_INS_BITC4, - TMS320C64X_INS_BNOP, - TMS320C64X_INS_BPOS, - TMS320C64X_INS_CLR, - TMS320C64X_INS_CMPEQ, - TMS320C64X_INS_CMPEQ2, - TMS320C64X_INS_CMPEQ4, - TMS320C64X_INS_CMPGT, - TMS320C64X_INS_CMPGT2, - TMS320C64X_INS_CMPGTU4, - TMS320C64X_INS_CMPLT, - TMS320C64X_INS_CMPLTU, - TMS320C64X_INS_DEAL, - TMS320C64X_INS_DOTP2, - TMS320C64X_INS_DOTPN2, - TMS320C64X_INS_DOTPNRSU2, - TMS320C64X_INS_DOTPRSU2, - TMS320C64X_INS_DOTPSU4, - TMS320C64X_INS_DOTPU4, - TMS320C64X_INS_EXT, - TMS320C64X_INS_EXTU, - TMS320C64X_INS_GMPGTU, - TMS320C64X_INS_GMPY4, - TMS320C64X_INS_LDB, - TMS320C64X_INS_LDBU, - TMS320C64X_INS_LDDW, - TMS320C64X_INS_LDH, - TMS320C64X_INS_LDHU, - TMS320C64X_INS_LDNDW, - TMS320C64X_INS_LDNW, - TMS320C64X_INS_LDW, - TMS320C64X_INS_LMBD, - TMS320C64X_INS_MAX2, - TMS320C64X_INS_MAXU4, - TMS320C64X_INS_MIN2, - TMS320C64X_INS_MINU4, - TMS320C64X_INS_MPY, - TMS320C64X_INS_MPY2, - TMS320C64X_INS_MPYH, - TMS320C64X_INS_MPYHI, - TMS320C64X_INS_MPYHIR, - TMS320C64X_INS_MPYHL, - TMS320C64X_INS_MPYHLU, - TMS320C64X_INS_MPYHSLU, - TMS320C64X_INS_MPYHSU, - TMS320C64X_INS_MPYHU, - TMS320C64X_INS_MPYHULS, - TMS320C64X_INS_MPYHUS, - TMS320C64X_INS_MPYLH, - TMS320C64X_INS_MPYLHU, - TMS320C64X_INS_MPYLI, - TMS320C64X_INS_MPYLIR, - TMS320C64X_INS_MPYLSHU, - TMS320C64X_INS_MPYLUHS, - TMS320C64X_INS_MPYSU, - TMS320C64X_INS_MPYSU4, - TMS320C64X_INS_MPYU, - TMS320C64X_INS_MPYU4, - TMS320C64X_INS_MPYUS, - TMS320C64X_INS_MVC, - TMS320C64X_INS_MVD, - TMS320C64X_INS_MVK, - TMS320C64X_INS_MVKL, - TMS320C64X_INS_MVKLH, - TMS320C64X_INS_NOP, - TMS320C64X_INS_NORM, - TMS320C64X_INS_OR, - TMS320C64X_INS_PACK2, - TMS320C64X_INS_PACKH2, - TMS320C64X_INS_PACKH4, - TMS320C64X_INS_PACKHL2, - TMS320C64X_INS_PACKL4, - TMS320C64X_INS_PACKLH2, - TMS320C64X_INS_ROTL, - TMS320C64X_INS_SADD, - TMS320C64X_INS_SADD2, - TMS320C64X_INS_SADDU4, - TMS320C64X_INS_SADDUS2, - TMS320C64X_INS_SAT, - TMS320C64X_INS_SET, - TMS320C64X_INS_SHFL, - TMS320C64X_INS_SHL, - TMS320C64X_INS_SHLMB, - TMS320C64X_INS_SHR, - TMS320C64X_INS_SHR2, - TMS320C64X_INS_SHRMB, - TMS320C64X_INS_SHRU, - TMS320C64X_INS_SHRU2, - TMS320C64X_INS_SMPY, - TMS320C64X_INS_SMPY2, - TMS320C64X_INS_SMPYH, - TMS320C64X_INS_SMPYHL, - TMS320C64X_INS_SMPYLH, - TMS320C64X_INS_SPACK2, - TMS320C64X_INS_SPACKU4, - TMS320C64X_INS_SSHL, - TMS320C64X_INS_SSHVL, - TMS320C64X_INS_SSHVR, - TMS320C64X_INS_SSUB, - TMS320C64X_INS_STB, - TMS320C64X_INS_STDW, - TMS320C64X_INS_STH, - TMS320C64X_INS_STNDW, - TMS320C64X_INS_STNW, - TMS320C64X_INS_STW, - TMS320C64X_INS_SUB, - TMS320C64X_INS_SUB2, - TMS320C64X_INS_SUB4, - TMS320C64X_INS_SUBAB, - TMS320C64X_INS_SUBABS4, - TMS320C64X_INS_SUBAH, - TMS320C64X_INS_SUBAW, - TMS320C64X_INS_SUBC, - TMS320C64X_INS_SUBU, - TMS320C64X_INS_SWAP4, - TMS320C64X_INS_UNPKHU4, - TMS320C64X_INS_UNPKLU4, - TMS320C64X_INS_XOR, - TMS320C64X_INS_XPND2, - TMS320C64X_INS_XPND4, - // Aliases - TMS320C64X_INS_IDLE, - TMS320C64X_INS_MV, - TMS320C64X_INS_NEG, - TMS320C64X_INS_NOT, - TMS320C64X_INS_SWAP2, - TMS320C64X_INS_ZERO, - - TMS320C64X_INS_ENDING, // <-- mark the end of the list of instructions -} tms320c64x_insn; - -typedef enum tms320c64x_insn_group { - TMS320C64X_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - TMS320C64X_GRP_JUMP, ///< = CS_GRP_JUMP - - TMS320C64X_GRP_FUNIT_D = 128, - TMS320C64X_GRP_FUNIT_L, - TMS320C64X_GRP_FUNIT_M, - TMS320C64X_GRP_FUNIT_S, - TMS320C64X_GRP_FUNIT_NO, - - TMS320C64X_GRP_ENDING, // <-- mark the end of the list of groups -} tms320c64x_insn_group; - -typedef enum tms320c64x_funit { - TMS320C64X_FUNIT_INVALID = 0, - TMS320C64X_FUNIT_D, - TMS320C64X_FUNIT_L, - TMS320C64X_FUNIT_M, - TMS320C64X_FUNIT_S, - TMS320C64X_FUNIT_NO -} tms320c64x_funit; - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/.tools/python-revlibs/capstone/include/capstone/tricore.h b/.tools/python-revlibs/capstone/include/capstone/tricore.h deleted file mode 100644 index 4c9ee00..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/tricore.h +++ /dev/null @@ -1,567 +0,0 @@ -#ifndef CAPSTONE_TRICORE_H -#define CAPSTONE_TRICORE_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2014 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_MSC_VER) || !defined(_KERNEL_MODE) -#include -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable : 4201) -#endif - -/// Operand type for instruction's operands -typedef enum tricore_op_type { - TRICORE_OP_INVALID = CS_OP_INVALID, ///< CS_OP_INVALID (Uninitialized). - TRICORE_OP_REG = CS_OP_REG, ///< CS_OP_REG (Register operand). - TRICORE_OP_IMM = CS_OP_IMM, ///< CS_OP_IMM (Immediate operand). - TRICORE_OP_MEM = CS_OP_MEM, ///< CS_OP_MEM (Memory operand). -} tricore_op_type; - -/// Instruction's operand referring to memory -/// This is associated with TRICORE_OP_MEM operand type above -typedef struct tricore_op_mem { - uint8_t base; ///< base register - int32_t disp; ///< displacement/offset value -} tricore_op_mem; - -/// Instruction operand -typedef struct cs_tricore_op { - tricore_op_type type; ///< operand type - union { - unsigned int reg; ///< register value for REG operand - int32_t imm; ///< immediate value for IMM operand - tricore_op_mem mem; ///< base/disp value for MEM operand - }; - /// This field is combined of cs_ac_type. - /// NOTE: this field is irrelevant if engine is compiled in DIET mode. - uint8_t access; ///< How is this operand accessed? (READ, WRITE or READ|WRITE) -} cs_tricore_op; - -#define TRICORE_OP_COUNT 8 - -/// Instruction structure -typedef struct cs_tricore { - uint8_t op_count; ///< number of operands of this instruction. - cs_tricore_op - operands[TRICORE_OP_COUNT]; ///< operands for this instruction. - /// TODO: Mark the modified flags register in td files and regenerate inc files - bool update_flags; ///< whether the flags register is updated. -} cs_tricore; - -/// TriCore registers -typedef enum tricore_reg { - // generate content begin - // clang-format off - - TRICORE_REG_INVALID = 0, - TRICORE_REG_FCX = 1, - TRICORE_REG_PC = 2, - TRICORE_REG_PCXI = 3, - TRICORE_REG_PSW = 4, - TRICORE_REG_A0 = 5, - TRICORE_REG_A1 = 6, - TRICORE_REG_A2 = 7, - TRICORE_REG_A3 = 8, - TRICORE_REG_A4 = 9, - TRICORE_REG_A5 = 10, - TRICORE_REG_A6 = 11, - TRICORE_REG_A7 = 12, - TRICORE_REG_A8 = 13, - TRICORE_REG_A9 = 14, - TRICORE_REG_A10 = 15, - TRICORE_REG_A11 = 16, - TRICORE_REG_A12 = 17, - TRICORE_REG_A13 = 18, - TRICORE_REG_A14 = 19, - TRICORE_REG_A15 = 20, - TRICORE_REG_D0 = 21, - TRICORE_REG_D1 = 22, - TRICORE_REG_D2 = 23, - TRICORE_REG_D3 = 24, - TRICORE_REG_D4 = 25, - TRICORE_REG_D5 = 26, - TRICORE_REG_D6 = 27, - TRICORE_REG_D7 = 28, - TRICORE_REG_D8 = 29, - TRICORE_REG_D9 = 30, - TRICORE_REG_D10 = 31, - TRICORE_REG_D11 = 32, - TRICORE_REG_D12 = 33, - TRICORE_REG_D13 = 34, - TRICORE_REG_D14 = 35, - TRICORE_REG_D15 = 36, - TRICORE_REG_E0 = 37, - TRICORE_REG_E2 = 38, - TRICORE_REG_E4 = 39, - TRICORE_REG_E6 = 40, - TRICORE_REG_E8 = 41, - TRICORE_REG_E10 = 42, - TRICORE_REG_E12 = 43, - TRICORE_REG_E14 = 44, - TRICORE_REG_P0 = 45, - TRICORE_REG_P2 = 46, - TRICORE_REG_P4 = 47, - TRICORE_REG_P6 = 48, - TRICORE_REG_P8 = 49, - TRICORE_REG_P10 = 50, - TRICORE_REG_P12 = 51, - TRICORE_REG_P14 = 52, - TRICORE_REG_A0_A1 = 53, - TRICORE_REG_A2_A3 = 54, - TRICORE_REG_A4_A5 = 55, - TRICORE_REG_A6_A7 = 56, - TRICORE_REG_A8_A9 = 57, - TRICORE_REG_A10_A11 = 58, - TRICORE_REG_A12_A13 = 59, - TRICORE_REG_A14_A15 = 60, - TRICORE_REG_ENDING, // 61 - - // clang-format on - // generate content end -} tricore_reg; - -/// TriCore instruction -typedef enum tricore_insn { - TRICORE_INS_INVALID = 0, - // generate content begin - // clang-format off - - TRICORE_INS_XOR_T, - TRICORE_INS_ABSDIFS_B, - TRICORE_INS_ABSDIFS_H, - TRICORE_INS_ABSDIFS, - TRICORE_INS_ABSDIF_B, - TRICORE_INS_ABSDIF_H, - TRICORE_INS_ABSDIF, - TRICORE_INS_ABSS_B, - TRICORE_INS_ABSS_H, - TRICORE_INS_ABSS, - TRICORE_INS_ABS_B, - TRICORE_INS_ABS_H, - TRICORE_INS_ABS, - TRICORE_INS_ADDC, - TRICORE_INS_ADDIH_A, - TRICORE_INS_ADDIH, - TRICORE_INS_ADDI, - TRICORE_INS_ADDSC_AT, - TRICORE_INS_ADDSC_A, - TRICORE_INS_ADDS_BU, - TRICORE_INS_ADDS_B, - TRICORE_INS_ADDS_H, - TRICORE_INS_ADDS_HU, - TRICORE_INS_ADDS_U, - TRICORE_INS_ADDS, - TRICORE_INS_ADDX, - TRICORE_INS_ADD_A, - TRICORE_INS_ADD_B, - TRICORE_INS_ADD_F, - TRICORE_INS_ADD_H, - TRICORE_INS_ADD, - TRICORE_INS_ANDN_T, - TRICORE_INS_ANDN, - TRICORE_INS_AND_ANDN_T, - TRICORE_INS_AND_AND_T, - TRICORE_INS_AND_EQ, - TRICORE_INS_AND_GE_U, - TRICORE_INS_AND_GE, - TRICORE_INS_AND_LT_U, - TRICORE_INS_AND_LT, - TRICORE_INS_AND_NE, - TRICORE_INS_AND_NOR_T, - TRICORE_INS_AND_OR_T, - TRICORE_INS_AND_T, - TRICORE_INS_AND, - TRICORE_INS_BISR, - TRICORE_INS_BMERGE, - TRICORE_INS_BSPLIT, - TRICORE_INS_CACHEA_I, - TRICORE_INS_CACHEA_WI, - TRICORE_INS_CACHEA_W, - TRICORE_INS_CACHEI_I, - TRICORE_INS_CACHEI_WI, - TRICORE_INS_CACHEI_W, - TRICORE_INS_CADDN_A, - TRICORE_INS_CADDN, - TRICORE_INS_CADD_A, - TRICORE_INS_CADD, - TRICORE_INS_CALLA, - TRICORE_INS_CALLI, - TRICORE_INS_CALL, - TRICORE_INS_CLO_B, - TRICORE_INS_CLO_H, - TRICORE_INS_CLO, - TRICORE_INS_CLS_B, - TRICORE_INS_CLS_H, - TRICORE_INS_CLS, - TRICORE_INS_CLZ_B, - TRICORE_INS_CLZ_H, - TRICORE_INS_CLZ, - TRICORE_INS_CMOVN, - TRICORE_INS_CMOV, - TRICORE_INS_CMPSWAP_W, - TRICORE_INS_CMP_F, - TRICORE_INS_CRC32B_W, - TRICORE_INS_CRC32L_W, - TRICORE_INS_CRC32_B, - TRICORE_INS_CRCN, - TRICORE_INS_CSUBN_A, - TRICORE_INS_CSUBN, - TRICORE_INS_CSUB_A, - TRICORE_INS_CSUB, - TRICORE_INS_DEBUG, - TRICORE_INS_DEXTR, - TRICORE_INS_DIFSC_A, - TRICORE_INS_DISABLE, - TRICORE_INS_DIV_F, - TRICORE_INS_DIV_U, - TRICORE_INS_DIV, - TRICORE_INS_DSYNC, - TRICORE_INS_DVADJ, - TRICORE_INS_DVINIT_BU, - TRICORE_INS_DVINIT_B, - TRICORE_INS_DVINIT_HU, - TRICORE_INS_DVINIT_H, - TRICORE_INS_DVINIT_U, - TRICORE_INS_DVINIT, - TRICORE_INS_DVSTEP_U, - TRICORE_INS_DVSTEP, - TRICORE_INS_ENABLE, - TRICORE_INS_EQANY_B, - TRICORE_INS_EQANY_H, - TRICORE_INS_EQZ_A, - TRICORE_INS_EQ_A, - TRICORE_INS_EQ_B, - TRICORE_INS_EQ_H, - TRICORE_INS_EQ_W, - TRICORE_INS_EQ, - TRICORE_INS_EXTR_U, - TRICORE_INS_EXTR, - TRICORE_INS_FCALLA, - TRICORE_INS_FCALLI, - TRICORE_INS_FCALL, - TRICORE_INS_FRET, - TRICORE_INS_FTOHP, - TRICORE_INS_FTOIZ, - TRICORE_INS_FTOI, - TRICORE_INS_FTOQ31Z, - TRICORE_INS_FTOQ31, - TRICORE_INS_FTOUZ, - TRICORE_INS_FTOU, - TRICORE_INS_GE_A, - TRICORE_INS_GE_U, - TRICORE_INS_GE, - TRICORE_INS_HPTOF, - TRICORE_INS_IMASK, - TRICORE_INS_INSERT, - TRICORE_INS_INSN_T, - TRICORE_INS_INS_T, - TRICORE_INS_ISYNC, - TRICORE_INS_ITOF, - TRICORE_INS_IXMAX_U, - TRICORE_INS_IXMAX, - TRICORE_INS_IXMIN_U, - TRICORE_INS_IXMIN, - TRICORE_INS_JA, - TRICORE_INS_JEQ_A, - TRICORE_INS_JEQ, - TRICORE_INS_JGEZ, - TRICORE_INS_JGE_U, - TRICORE_INS_JGE, - TRICORE_INS_JGTZ, - TRICORE_INS_JI, - TRICORE_INS_JLA, - TRICORE_INS_JLEZ, - TRICORE_INS_JLI, - TRICORE_INS_JLTZ, - TRICORE_INS_JLT_U, - TRICORE_INS_JLT, - TRICORE_INS_JL, - TRICORE_INS_JNED, - TRICORE_INS_JNEI, - TRICORE_INS_JNE_A, - TRICORE_INS_JNE, - TRICORE_INS_JNZ_A, - TRICORE_INS_JNZ_T, - TRICORE_INS_JNZ, - TRICORE_INS_JZ_A, - TRICORE_INS_JZ_T, - TRICORE_INS_JZ, - TRICORE_INS_J, - TRICORE_INS_LDLCX, - TRICORE_INS_LDMST, - TRICORE_INS_LDUCX, - TRICORE_INS_LD_A, - TRICORE_INS_LD_BU, - TRICORE_INS_LD_B, - TRICORE_INS_LD_DA, - TRICORE_INS_LD_D, - TRICORE_INS_LD_HU, - TRICORE_INS_LD_H, - TRICORE_INS_LD_Q, - TRICORE_INS_LD_W, - TRICORE_INS_LEA, - TRICORE_INS_LHA, - TRICORE_INS_LOOPU, - TRICORE_INS_LOOP, - TRICORE_INS_LT_A, - TRICORE_INS_LT_B, - TRICORE_INS_LT_BU, - TRICORE_INS_LT_H, - TRICORE_INS_LT_HU, - TRICORE_INS_LT_U, - TRICORE_INS_LT_W, - TRICORE_INS_LT_WU, - TRICORE_INS_LT, - TRICORE_INS_MADDMS_H, - TRICORE_INS_MADDMS_U, - TRICORE_INS_MADDMS, - TRICORE_INS_MADDM_H, - TRICORE_INS_MADDM_Q, - TRICORE_INS_MADDM_U, - TRICORE_INS_MADDM, - TRICORE_INS_MADDRS_H, - TRICORE_INS_MADDRS_Q, - TRICORE_INS_MADDR_H, - TRICORE_INS_MADDR_Q, - TRICORE_INS_MADDSUMS_H, - TRICORE_INS_MADDSUM_H, - TRICORE_INS_MADDSURS_H, - TRICORE_INS_MADDSUR_H, - TRICORE_INS_MADDSUS_H, - TRICORE_INS_MADDSU_H, - TRICORE_INS_MADDS_H, - TRICORE_INS_MADDS_Q, - TRICORE_INS_MADDS_U, - TRICORE_INS_MADDS, - TRICORE_INS_MADD_F, - TRICORE_INS_MADD_H, - TRICORE_INS_MADD_Q, - TRICORE_INS_MADD_U, - TRICORE_INS_MADD, - TRICORE_INS_MAX_B, - TRICORE_INS_MAX_BU, - TRICORE_INS_MAX_H, - TRICORE_INS_MAX_HU, - TRICORE_INS_MAX_U, - TRICORE_INS_MAX, - TRICORE_INS_MFCR, - TRICORE_INS_MIN_B, - TRICORE_INS_MIN_BU, - TRICORE_INS_MIN_H, - TRICORE_INS_MIN_HU, - TRICORE_INS_MIN_U, - TRICORE_INS_MIN, - TRICORE_INS_MOVH_A, - TRICORE_INS_MOVH, - TRICORE_INS_MOVZ_A, - TRICORE_INS_MOV_AA, - TRICORE_INS_MOV_A, - TRICORE_INS_MOV_D, - TRICORE_INS_MOV_U, - TRICORE_INS_MOV, - TRICORE_INS_MSUBADMS_H, - TRICORE_INS_MSUBADM_H, - TRICORE_INS_MSUBADRS_H, - TRICORE_INS_MSUBADR_H, - TRICORE_INS_MSUBADS_H, - TRICORE_INS_MSUBAD_H, - TRICORE_INS_MSUBMS_H, - TRICORE_INS_MSUBMS_U, - TRICORE_INS_MSUBMS, - TRICORE_INS_MSUBM_H, - TRICORE_INS_MSUBM_Q, - TRICORE_INS_MSUBM_U, - TRICORE_INS_MSUBM, - TRICORE_INS_MSUBRS_H, - TRICORE_INS_MSUBRS_Q, - TRICORE_INS_MSUBR_H, - TRICORE_INS_MSUBR_Q, - TRICORE_INS_MSUBS_H, - TRICORE_INS_MSUBS_Q, - TRICORE_INS_MSUBS_U, - TRICORE_INS_MSUBS, - TRICORE_INS_MSUB_F, - TRICORE_INS_MSUB_H, - TRICORE_INS_MSUB_Q, - TRICORE_INS_MSUB_U, - TRICORE_INS_MSUB, - TRICORE_INS_MTCR, - TRICORE_INS_MULMS_H, - TRICORE_INS_MULM_H, - TRICORE_INS_MULM_U, - TRICORE_INS_MULM, - TRICORE_INS_MULR_H, - TRICORE_INS_MULR_Q, - TRICORE_INS_MULS_U, - TRICORE_INS_MULS, - TRICORE_INS_MUL_F, - TRICORE_INS_MUL_H, - TRICORE_INS_MUL_Q, - TRICORE_INS_MUL_U, - TRICORE_INS_MUL, - TRICORE_INS_NAND_T, - TRICORE_INS_NAND, - TRICORE_INS_NEZ_A, - TRICORE_INS_NE_A, - TRICORE_INS_NE, - TRICORE_INS_NOP, - TRICORE_INS_NOR_T, - TRICORE_INS_NOR, - TRICORE_INS_NOT, - TRICORE_INS_ORN_T, - TRICORE_INS_ORN, - TRICORE_INS_OR_ANDN_T, - TRICORE_INS_OR_AND_T, - TRICORE_INS_OR_EQ, - TRICORE_INS_OR_GE_U, - TRICORE_INS_OR_GE, - TRICORE_INS_OR_LT_U, - TRICORE_INS_OR_LT, - TRICORE_INS_OR_NE, - TRICORE_INS_OR_NOR_T, - TRICORE_INS_OR_OR_T, - TRICORE_INS_OR_T, - TRICORE_INS_OR, - TRICORE_INS_PACK, - TRICORE_INS_PARITY, - TRICORE_INS_POPCNT_W, - TRICORE_INS_Q31TOF, - TRICORE_INS_QSEED_F, - TRICORE_INS_RESTORE, - TRICORE_INS_RET, - TRICORE_INS_RFE, - TRICORE_INS_RFM, - TRICORE_INS_RSLCX, - TRICORE_INS_RSTV, - TRICORE_INS_RSUBS_U, - TRICORE_INS_RSUBS, - TRICORE_INS_RSUB, - TRICORE_INS_SAT_BU, - TRICORE_INS_SAT_B, - TRICORE_INS_SAT_HU, - TRICORE_INS_SAT_H, - TRICORE_INS_SELN_A, - TRICORE_INS_SELN, - TRICORE_INS_SEL_A, - TRICORE_INS_SEL, - TRICORE_INS_SHAS, - TRICORE_INS_SHA_B, - TRICORE_INS_SHA_H, - TRICORE_INS_SHA, - TRICORE_INS_SHUFFLE, - TRICORE_INS_SH_ANDN_T, - TRICORE_INS_SH_AND_T, - TRICORE_INS_SH_B, - TRICORE_INS_SH_EQ, - TRICORE_INS_SH_GE_U, - TRICORE_INS_SH_GE, - TRICORE_INS_SH_H, - TRICORE_INS_SH_LT_U, - TRICORE_INS_SH_LT, - TRICORE_INS_SH_NAND_T, - TRICORE_INS_SH_NE, - TRICORE_INS_SH_NOR_T, - TRICORE_INS_SH_ORN_T, - TRICORE_INS_SH_OR_T, - TRICORE_INS_SH_XNOR_T, - TRICORE_INS_SH_XOR_T, - TRICORE_INS_SH, - TRICORE_INS_STLCX, - TRICORE_INS_STUCX, - TRICORE_INS_ST_A, - TRICORE_INS_ST_B, - TRICORE_INS_ST_DA, - TRICORE_INS_ST_D, - TRICORE_INS_ST_H, - TRICORE_INS_ST_Q, - TRICORE_INS_ST_T, - TRICORE_INS_ST_W, - TRICORE_INS_SUBC, - TRICORE_INS_SUBSC_A, - TRICORE_INS_SUBS_BU, - TRICORE_INS_SUBS_B, - TRICORE_INS_SUBS_HU, - TRICORE_INS_SUBS_H, - TRICORE_INS_SUBS_U, - TRICORE_INS_SUBS, - TRICORE_INS_SUBX, - TRICORE_INS_SUB_A, - TRICORE_INS_SUB_B, - TRICORE_INS_SUB_F, - TRICORE_INS_SUB_H, - TRICORE_INS_SUB, - TRICORE_INS_SVLCX, - TRICORE_INS_SWAPMSK_W, - TRICORE_INS_SWAP_A, - TRICORE_INS_SWAP_W, - TRICORE_INS_SYSCALL, - TRICORE_INS_TLBDEMAP, - TRICORE_INS_TLBFLUSH_A, - TRICORE_INS_TLBFLUSH_B, - TRICORE_INS_TLBMAP, - TRICORE_INS_TLBPROBE_A, - TRICORE_INS_TLBPROBE_I, - TRICORE_INS_TRAPSV, - TRICORE_INS_TRAPV, - TRICORE_INS_UNPACK, - TRICORE_INS_UPDFL, - TRICORE_INS_UTOF, - TRICORE_INS_WAIT, - TRICORE_INS_XNOR_T, - TRICORE_INS_XNOR, - TRICORE_INS_XOR_EQ, - TRICORE_INS_XOR_GE_U, - TRICORE_INS_XOR_GE, - TRICORE_INS_XOR_LT_U, - TRICORE_INS_XOR_LT, - TRICORE_INS_XOR_NE, - TRICORE_INS_XOR, - - // clang-format on - // generate content end - TRICORE_INS_ENDING, // <-- mark the end of the list of instructions -} tricore_insn; - -/// Group of TriCore instructions -typedef enum tricore_insn_group { - TRICORE_GRP_INVALID, ///< = CS_GRP_INVALID - /// Generic groups - TRICORE_GRP_CALL, ///< = CS_GRP_CALL - TRICORE_GRP_JUMP, ///< = CS_GRP_JUMP - TRICORE_GRP_ENDING, ///< mark the end of the list of groups -} tricore_insn_group; - -typedef enum tricore_feature_t { - TRICORE_FEATURE_INVALID = 0, - // generate content begin - // clang-format off - - TRICORE_FEATURE_HasV110 = 128, - TRICORE_FEATURE_HasV120_UP, - TRICORE_FEATURE_HasV130_UP, - TRICORE_FEATURE_HasV161, - TRICORE_FEATURE_HasV160_UP, - TRICORE_FEATURE_HasV131_UP, - TRICORE_FEATURE_HasV161_UP, - TRICORE_FEATURE_HasV162, - TRICORE_FEATURE_HasV162_UP, - - // clang-format on - // generate content end - TRICORE_FEATURE_ENDING, ///< mark the end of the list of features -} tricore_feature; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/wasm.h b/.tools/python-revlibs/capstone/include/capstone/wasm.h deleted file mode 100644 index a2ac20c..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/wasm.h +++ /dev/null @@ -1,250 +0,0 @@ -/* Capstone Disassembly Engine */ -/* By Spike , xwings 2019 */ - -#ifndef CAPSTONE_WASM_H -#define CAPSTONE_WASM_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -typedef enum wasm_op_type { - WASM_OP_INVALID = 0, - WASM_OP_NONE, - WASM_OP_INT7, - WASM_OP_VARUINT32, - WASM_OP_VARUINT64, - WASM_OP_UINT32, - WASM_OP_UINT64, - WASM_OP_IMM, - WASM_OP_BRTABLE, -} wasm_op_type; - -typedef struct cs_wasm_brtable { - uint32_t length; - uint64_t address; - uint32_t default_target; -} cs_wasm_brtable; - -typedef struct cs_wasm_op { - wasm_op_type type; - uint32_t size; - union { - int8_t int7; - uint32_t varuint32; - uint64_t varuint64; - uint32_t uint32; - uint64_t uint64; - uint32_t immediate[2]; - cs_wasm_brtable brtable; - }; -} cs_wasm_op; - -/// Instruction structure -typedef struct cs_wasm { - uint8_t op_count; - cs_wasm_op operands[2]; -} cs_wasm; - -/// WASM instruction -typedef enum wasm_insn { - WASM_INS_UNREACHABLE = 0x0, - WASM_INS_NOP = 0x1, - WASM_INS_BLOCK = 0x2, - WASM_INS_LOOP = 0x3, - WASM_INS_IF = 0x4, - WASM_INS_ELSE = 0x5, - WASM_INS_END = 0xb, - WASM_INS_BR = 0xc, - WASM_INS_BR_IF = 0xd, - WASM_INS_BR_TABLE = 0xe, - WASM_INS_RETURN = 0xf, - WASM_INS_CALL = 0x10, - WASM_INS_CALL_INDIRECT = 0x11, - WASM_INS_DROP = 0x1a, - WASM_INS_SELECT = 0x1b, - WASM_INS_GET_LOCAL = 0x20, - WASM_INS_SET_LOCAL = 0x21, - WASM_INS_TEE_LOCAL = 0x22, - WASM_INS_GET_GLOBAL = 0x23, - WASM_INS_SET_GLOBAL = 0x24, - WASM_INS_I32_LOAD = 0x28, - WASM_INS_I64_LOAD = 0x29, - WASM_INS_F32_LOAD = 0x2a, - WASM_INS_F64_LOAD = 0x2b, - WASM_INS_I32_LOAD8_S = 0x2c, - WASM_INS_I32_LOAD8_U = 0x2d, - WASM_INS_I32_LOAD16_S = 0x2e, - WASM_INS_I32_LOAD16_U = 0x2f, - WASM_INS_I64_LOAD8_S = 0x30, - WASM_INS_I64_LOAD8_U = 0x31, - WASM_INS_I64_LOAD16_S = 0x32, - WASM_INS_I64_LOAD16_U = 0x33, - WASM_INS_I64_LOAD32_S = 0x34, - WASM_INS_I64_LOAD32_U = 0x35, - WASM_INS_I32_STORE = 0x36, - WASM_INS_I64_STORE = 0x37, - WASM_INS_F32_STORE = 0x38, - WASM_INS_F64_STORE = 0x39, - WASM_INS_I32_STORE8 = 0x3a, - WASM_INS_I32_STORE16 = 0x3b, - WASM_INS_I64_STORE8 = 0x3c, - WASM_INS_I64_STORE16 = 0x3d, - WASM_INS_I64_STORE32 = 0x3e, - WASM_INS_CURRENT_MEMORY = 0x3f, - WASM_INS_GROW_MEMORY = 0x40, - WASM_INS_I32_CONST = 0x41, - WASM_INS_I64_CONST = 0x42, - WASM_INS_F32_CONST = 0x43, - WASM_INS_F64_CONST = 0x44, - WASM_INS_I32_EQZ = 0x45, - WASM_INS_I32_EQ = 0x46, - WASM_INS_I32_NE = 0x47, - WASM_INS_I32_LT_S = 0x48, - WASM_INS_I32_LT_U = 0x49, - WASM_INS_I32_GT_S = 0x4a, - WASM_INS_I32_GT_U = 0x4b, - WASM_INS_I32_LE_S = 0x4c, - WASM_INS_I32_LE_U = 0x4d, - WASM_INS_I32_GE_S = 0x4e, - WASM_INS_I32_GE_U = 0x4f, - WASM_INS_I64_EQZ = 0x50, - WASM_INS_I64_EQ = 0x51, - WASM_INS_I64_NE = 0x52, - WASM_INS_I64_LT_S = 0x53, - WASM_INS_I64_LT_U = 0x54, - WASN_INS_I64_GT_S = 0x55, - WASM_INS_I64_GT_U = 0x56, - WASM_INS_I64_LE_S = 0x57, - WASM_INS_I64_LE_U = 0x58, - WASM_INS_I64_GE_S = 0x59, - WASM_INS_I64_GE_U = 0x5a, - WASM_INS_F32_EQ = 0x5b, - WASM_INS_F32_NE = 0x5c, - WASM_INS_F32_LT = 0x5d, - WASM_INS_F32_GT = 0x5e, - WASM_INS_F32_LE = 0x5f, - WASM_INS_F32_GE = 0x60, - WASM_INS_F64_EQ = 0x61, - WASM_INS_F64_NE = 0x62, - WASM_INS_F64_LT = 0x63, - WASM_INS_F64_GT = 0x64, - WASM_INS_F64_LE = 0x65, - WASM_INS_F64_GE = 0x66, - WASM_INS_I32_CLZ = 0x67, - WASM_INS_I32_CTZ = 0x68, - WASM_INS_I32_POPCNT = 0x69, - WASM_INS_I32_ADD = 0x6a, - WASM_INS_I32_SUB = 0x6b, - WASM_INS_I32_MUL = 0x6c, - WASM_INS_I32_DIV_S = 0x6d, - WASM_INS_I32_DIV_U = 0x6e, - WASM_INS_I32_REM_S = 0x6f, - WASM_INS_I32_REM_U = 0x70, - WASM_INS_I32_AND = 0x71, - WASM_INS_I32_OR = 0x72, - WASM_INS_I32_XOR = 0x73, - WASM_INS_I32_SHL = 0x74, - WASM_INS_I32_SHR_S = 0x75, - WASM_INS_I32_SHR_U = 0x76, - WASM_INS_I32_ROTL = 0x77, - WASM_INS_I32_ROTR = 0x78, - WASM_INS_I64_CLZ = 0x79, - WASM_INS_I64_CTZ = 0x7a, - WASM_INS_I64_POPCNT = 0x7b, - WASM_INS_I64_ADD = 0x7c, - WASM_INS_I64_SUB = 0x7d, - WASM_INS_I64_MUL = 0x7e, - WASM_INS_I64_DIV_S = 0x7f, - WASM_INS_I64_DIV_U = 0x80, - WASM_INS_I64_REM_S = 0x81, - WASM_INS_I64_REM_U = 0x82, - WASM_INS_I64_AND = 0x83, - WASM_INS_I64_OR = 0x84, - WASM_INS_I64_XOR = 0x85, - WASM_INS_I64_SHL = 0x86, - WASM_INS_I64_SHR_S = 0x87, - WASM_INS_I64_SHR_U = 0x88, - WASM_INS_I64_ROTL = 0x89, - WASM_INS_I64_ROTR = 0x8a, - WASM_INS_F32_ABS = 0x8b, - WASM_INS_F32_NEG = 0x8c, - WASM_INS_F32_CEIL = 0x8d, - WASM_INS_F32_FLOOR = 0x8e, - WASM_INS_F32_TRUNC = 0x8f, - WASM_INS_F32_NEAREST = 0x90, - WASM_INS_F32_SQRT = 0x91, - WASM_INS_F32_ADD = 0x92, - WASM_INS_F32_SUB = 0x93, - WASM_INS_F32_MUL = 0x94, - WASM_INS_F32_DIV = 0x95, - WASM_INS_F32_MIN = 0x96, - WASM_INS_F32_MAX = 0x97, - WASM_INS_F32_COPYSIGN = 0x98, - WASM_INS_F64_ABS = 0x99, - WASM_INS_F64_NEG = 0x9a, - WASM_INS_F64_CEIL = 0x9b, - WASM_INS_F64_FLOOR = 0x9c, - WASM_INS_F64_TRUNC = 0x9d, - WASM_INS_F64_NEAREST = 0x9e, - WASM_INS_F64_SQRT = 0x9f, - WASM_INS_F64_ADD = 0xa0, - WASM_INS_F64_SUB = 0xa1, - WASM_INS_F64_MUL = 0xa2, - WASM_INS_F64_DIV = 0xa3, - WASM_INS_F64_MIN = 0xa4, - WASM_INS_F64_MAX = 0xa5, - WASM_INS_F64_COPYSIGN = 0xa6, - WASM_INS_I32_WARP_I64 = 0xa7, - WASP_INS_I32_TRUNC_S_F32 = 0xa8, - WASM_INS_I32_TRUNC_U_F32 = 0xa9, - WASM_INS_I32_TRUNC_S_F64 = 0xaa, - WASM_INS_I32_TRUNC_U_F64 = 0xab, - WASM_INS_I64_EXTEND_S_I32 = 0xac, - WASM_INS_I64_EXTEND_U_I32 = 0xad, - WASM_INS_I64_TRUNC_S_F32 = 0xae, - WASM_INS_I64_TRUNC_U_F32 = 0xaf, - WASM_INS_I64_TRUNC_S_F64 = 0xb0, - WASM_INS_I64_TRUNC_U_F64 = 0xb1, - WASM_INS_F32_CONVERT_S_I32 = 0xb2, - WASM_INS_F32_CONVERT_U_I32 = 0xb3, - WASM_INS_F32_CONVERT_S_I64 = 0xb4, - WASM_INS_F32_CONVERT_U_I64 = 0xb5, - WASM_INS_F32_DEMOTE_F64 = 0xb6, - WASM_INS_F64_CONVERT_S_I32 = 0xb7, - WASM_INS_F64_CONVERT_U_I32 = 0xb8, - WASM_INS_F64_CONVERT_S_I64 = 0xb9, - WASM_INS_F64_CONVERT_U_I64 = 0xba, - WASM_INS_F64_PROMOTE_F32 = 0xbb, - WASM_INS_I32_REINTERPRET_F32 = 0xbc, - WASM_INS_I64_REINTERPRET_F64 = 0xbd, - WASM_INS_F32_REINTERPRET_I32 = 0xbe, - WASM_INS_F64_REINTERPRET_I64 = 0xbf, - WASM_INS_INVALID = 512, - WASM_INS_ENDING, -} wasm_insn; - -/// Group of WASM instructions -typedef enum wasm_insn_group { - WASM_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - WASM_GRP_NUMBERIC = 8, - WASM_GRP_PARAMETRIC, - WASM_GRP_VARIABLE, - WASM_GRP_MEMORY, - WASM_GRP_CONTROL, - - WASM_GRP_ENDING, ///< <-- mark the end of the list of groups -} wasm_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/x86.h b/.tools/python-revlibs/capstone/include/capstone/x86.h deleted file mode 100644 index b6b56c0..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/x86.h +++ /dev/null @@ -1,1986 +0,0 @@ -#ifndef CAPSTONE_X86_H -#define CAPSTONE_X86_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2013-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -/// Calculate relative address for X86-64, given cs_insn structure -#define X86_REL_ADDR(insn) (((insn).detail->x86.operands[0].type == X86_OP_IMM) \ - ? (uint64_t)((insn).detail->x86.operands[0].imm) \ - : (((insn).address + (insn).size) + (uint64_t)(insn).detail->x86.disp)) - -/// X86 registers -typedef enum x86_reg { - X86_REG_INVALID = 0, - X86_REG_AH, X86_REG_AL, X86_REG_AX, X86_REG_BH, X86_REG_BL, - X86_REG_BP, X86_REG_BPL, X86_REG_BX, X86_REG_CH, X86_REG_CL, - X86_REG_CS, X86_REG_CX, X86_REG_DH, X86_REG_DI, X86_REG_DIL, - X86_REG_DL, X86_REG_DS, X86_REG_DX, X86_REG_EAX, X86_REG_EBP, - X86_REG_EBX, X86_REG_ECX, X86_REG_EDI, X86_REG_EDX, X86_REG_EFLAGS, - X86_REG_EIP, X86_REG_EIZ, X86_REG_ES, X86_REG_ESI, X86_REG_ESP, - X86_REG_FPSW, X86_REG_FS, X86_REG_GS, X86_REG_IP, X86_REG_RAX, - X86_REG_RBP, X86_REG_RBX, X86_REG_RCX, X86_REG_RDI, X86_REG_RDX, - X86_REG_RIP, X86_REG_RIZ, X86_REG_RSI, X86_REG_RSP, X86_REG_SI, - X86_REG_SIL, X86_REG_SP, X86_REG_SPL, X86_REG_SS, X86_REG_CR0, - X86_REG_CR1, X86_REG_CR2, X86_REG_CR3, X86_REG_CR4, X86_REG_CR5, - X86_REG_CR6, X86_REG_CR7, X86_REG_CR8, X86_REG_CR9, X86_REG_CR10, - X86_REG_CR11, X86_REG_CR12, X86_REG_CR13, X86_REG_CR14, X86_REG_CR15, - X86_REG_DR0, X86_REG_DR1, X86_REG_DR2, X86_REG_DR3, X86_REG_DR4, - X86_REG_DR5, X86_REG_DR6, X86_REG_DR7, X86_REG_DR8, X86_REG_DR9, - X86_REG_DR10, X86_REG_DR11, X86_REG_DR12, X86_REG_DR13, X86_REG_DR14, - X86_REG_DR15, X86_REG_FP0, X86_REG_FP1, X86_REG_FP2, X86_REG_FP3, - X86_REG_FP4, X86_REG_FP5, X86_REG_FP6, X86_REG_FP7, - X86_REG_K0, X86_REG_K1, X86_REG_K2, X86_REG_K3, X86_REG_K4, - X86_REG_K5, X86_REG_K6, X86_REG_K7, X86_REG_MM0, X86_REG_MM1, - X86_REG_MM2, X86_REG_MM3, X86_REG_MM4, X86_REG_MM5, X86_REG_MM6, - X86_REG_MM7, X86_REG_R8, X86_REG_R9, X86_REG_R10, X86_REG_R11, - X86_REG_R12, X86_REG_R13, X86_REG_R14, X86_REG_R15, - X86_REG_ST0, X86_REG_ST1, X86_REG_ST2, X86_REG_ST3, - X86_REG_ST4, X86_REG_ST5, X86_REG_ST6, X86_REG_ST7, - X86_REG_XMM0, X86_REG_XMM1, X86_REG_XMM2, X86_REG_XMM3, X86_REG_XMM4, - X86_REG_XMM5, X86_REG_XMM6, X86_REG_XMM7, X86_REG_XMM8, X86_REG_XMM9, - X86_REG_XMM10, X86_REG_XMM11, X86_REG_XMM12, X86_REG_XMM13, X86_REG_XMM14, - X86_REG_XMM15, X86_REG_XMM16, X86_REG_XMM17, X86_REG_XMM18, X86_REG_XMM19, - X86_REG_XMM20, X86_REG_XMM21, X86_REG_XMM22, X86_REG_XMM23, X86_REG_XMM24, - X86_REG_XMM25, X86_REG_XMM26, X86_REG_XMM27, X86_REG_XMM28, X86_REG_XMM29, - X86_REG_XMM30, X86_REG_XMM31, X86_REG_YMM0, X86_REG_YMM1, X86_REG_YMM2, - X86_REG_YMM3, X86_REG_YMM4, X86_REG_YMM5, X86_REG_YMM6, X86_REG_YMM7, - X86_REG_YMM8, X86_REG_YMM9, X86_REG_YMM10, X86_REG_YMM11, X86_REG_YMM12, - X86_REG_YMM13, X86_REG_YMM14, X86_REG_YMM15, X86_REG_YMM16, X86_REG_YMM17, - X86_REG_YMM18, X86_REG_YMM19, X86_REG_YMM20, X86_REG_YMM21, X86_REG_YMM22, - X86_REG_YMM23, X86_REG_YMM24, X86_REG_YMM25, X86_REG_YMM26, X86_REG_YMM27, - X86_REG_YMM28, X86_REG_YMM29, X86_REG_YMM30, X86_REG_YMM31, X86_REG_ZMM0, - X86_REG_ZMM1, X86_REG_ZMM2, X86_REG_ZMM3, X86_REG_ZMM4, X86_REG_ZMM5, - X86_REG_ZMM6, X86_REG_ZMM7, X86_REG_ZMM8, X86_REG_ZMM9, X86_REG_ZMM10, - X86_REG_ZMM11, X86_REG_ZMM12, X86_REG_ZMM13, X86_REG_ZMM14, X86_REG_ZMM15, - X86_REG_ZMM16, X86_REG_ZMM17, X86_REG_ZMM18, X86_REG_ZMM19, X86_REG_ZMM20, - X86_REG_ZMM21, X86_REG_ZMM22, X86_REG_ZMM23, X86_REG_ZMM24, X86_REG_ZMM25, - X86_REG_ZMM26, X86_REG_ZMM27, X86_REG_ZMM28, X86_REG_ZMM29, X86_REG_ZMM30, - X86_REG_ZMM31, X86_REG_R8B, X86_REG_R9B, X86_REG_R10B, X86_REG_R11B, - X86_REG_R12B, X86_REG_R13B, X86_REG_R14B, X86_REG_R15B, X86_REG_R8D, - X86_REG_R9D, X86_REG_R10D, X86_REG_R11D, X86_REG_R12D, X86_REG_R13D, - X86_REG_R14D, X86_REG_R15D, X86_REG_R8W, X86_REG_R9W, X86_REG_R10W, - X86_REG_R11W, X86_REG_R12W, X86_REG_R13W, X86_REG_R14W, X86_REG_R15W, - X86_REG_BND0, X86_REG_BND1, X86_REG_BND2, X86_REG_BND3, - - X86_REG_ENDING // <-- mark the end of the list of registers -} x86_reg; - -// Sub-flags of EFLAGS -#define X86_EFLAGS_MODIFY_AF (1ULL << 0) -#define X86_EFLAGS_MODIFY_CF (1ULL << 1) -#define X86_EFLAGS_MODIFY_SF (1ULL << 2) -#define X86_EFLAGS_MODIFY_ZF (1ULL << 3) -#define X86_EFLAGS_MODIFY_PF (1ULL << 4) -#define X86_EFLAGS_MODIFY_OF (1ULL << 5) -#define X86_EFLAGS_MODIFY_TF (1ULL << 6) -#define X86_EFLAGS_MODIFY_IF (1ULL << 7) -#define X86_EFLAGS_MODIFY_DF (1ULL << 8) -#define X86_EFLAGS_MODIFY_NT (1ULL << 9) -#define X86_EFLAGS_MODIFY_RF (1ULL << 10) -#define X86_EFLAGS_PRIOR_OF (1ULL << 11) -#define X86_EFLAGS_PRIOR_SF (1ULL << 12) -#define X86_EFLAGS_PRIOR_ZF (1ULL << 13) -#define X86_EFLAGS_PRIOR_AF (1ULL << 14) -#define X86_EFLAGS_PRIOR_PF (1ULL << 15) -#define X86_EFLAGS_PRIOR_CF (1ULL << 16) -#define X86_EFLAGS_PRIOR_TF (1ULL << 17) -#define X86_EFLAGS_PRIOR_IF (1ULL << 18) -#define X86_EFLAGS_PRIOR_DF (1ULL << 19) -#define X86_EFLAGS_PRIOR_NT (1ULL << 20) -#define X86_EFLAGS_RESET_OF (1ULL << 21) -#define X86_EFLAGS_RESET_CF (1ULL << 22) -#define X86_EFLAGS_RESET_DF (1ULL << 23) -#define X86_EFLAGS_RESET_IF (1ULL << 24) -#define X86_EFLAGS_RESET_SF (1ULL << 25) -#define X86_EFLAGS_RESET_AF (1ULL << 26) -#define X86_EFLAGS_RESET_TF (1ULL << 27) -#define X86_EFLAGS_RESET_NT (1ULL << 28) -#define X86_EFLAGS_RESET_PF (1ULL << 29) -#define X86_EFLAGS_SET_CF (1ULL << 30) -#define X86_EFLAGS_SET_DF (1ULL << 31) -#define X86_EFLAGS_SET_IF (1ULL << 32) -#define X86_EFLAGS_TEST_OF (1ULL << 33) -#define X86_EFLAGS_TEST_SF (1ULL << 34) -#define X86_EFLAGS_TEST_ZF (1ULL << 35) -#define X86_EFLAGS_TEST_PF (1ULL << 36) -#define X86_EFLAGS_TEST_CF (1ULL << 37) -#define X86_EFLAGS_TEST_NT (1ULL << 38) -#define X86_EFLAGS_TEST_DF (1ULL << 39) -#define X86_EFLAGS_UNDEFINED_OF (1ULL << 40) -#define X86_EFLAGS_UNDEFINED_SF (1ULL << 41) -#define X86_EFLAGS_UNDEFINED_ZF (1ULL << 42) -#define X86_EFLAGS_UNDEFINED_PF (1ULL << 43) -#define X86_EFLAGS_UNDEFINED_AF (1ULL << 44) -#define X86_EFLAGS_UNDEFINED_CF (1ULL << 45) -#define X86_EFLAGS_RESET_RF (1ULL << 46) -#define X86_EFLAGS_TEST_RF (1ULL << 47) -#define X86_EFLAGS_TEST_IF (1ULL << 48) -#define X86_EFLAGS_TEST_TF (1ULL << 49) -#define X86_EFLAGS_TEST_AF (1ULL << 50) -#define X86_EFLAGS_RESET_ZF (1ULL << 51) -#define X86_EFLAGS_SET_OF (1ULL << 52) -#define X86_EFLAGS_SET_SF (1ULL << 53) -#define X86_EFLAGS_SET_ZF (1ULL << 54) -#define X86_EFLAGS_SET_AF (1ULL << 55) -#define X86_EFLAGS_SET_PF (1ULL << 56) -#define X86_EFLAGS_RESET_0F (1ULL << 57) -#define X86_EFLAGS_RESET_AC (1ULL << 58) - -#define X86_FPU_FLAGS_MODIFY_C0 (1ULL << 0) -#define X86_FPU_FLAGS_MODIFY_C1 (1ULL << 1) -#define X86_FPU_FLAGS_MODIFY_C2 (1ULL << 2) -#define X86_FPU_FLAGS_MODIFY_C3 (1ULL << 3) -#define X86_FPU_FLAGS_RESET_C0 (1ULL << 4) -#define X86_FPU_FLAGS_RESET_C1 (1ULL << 5) -#define X86_FPU_FLAGS_RESET_C2 (1ULL << 6) -#define X86_FPU_FLAGS_RESET_C3 (1ULL << 7) -#define X86_FPU_FLAGS_SET_C0 (1ULL << 8) -#define X86_FPU_FLAGS_SET_C1 (1ULL << 9) -#define X86_FPU_FLAGS_SET_C2 (1ULL << 10) -#define X86_FPU_FLAGS_SET_C3 (1ULL << 11) -#define X86_FPU_FLAGS_UNDEFINED_C0 (1ULL << 12) -#define X86_FPU_FLAGS_UNDEFINED_C1 (1ULL << 13) -#define X86_FPU_FLAGS_UNDEFINED_C2 (1ULL << 14) -#define X86_FPU_FLAGS_UNDEFINED_C3 (1ULL << 15) -#define X86_FPU_FLAGS_TEST_C0 (1ULL << 16) -#define X86_FPU_FLAGS_TEST_C1 (1ULL << 17) -#define X86_FPU_FLAGS_TEST_C2 (1ULL << 18) -#define X86_FPU_FLAGS_TEST_C3 (1ULL << 19) - - -/// Operand type for instruction's operands -typedef enum x86_op_type { - X86_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - X86_OP_REG, ///< = CS_OP_REG (Register operand). - X86_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - X86_OP_MEM, ///< = CS_OP_MEM (Memory operand). -} x86_op_type; - -/// XOP Code Condition type -typedef enum x86_xop_cc { - X86_XOP_CC_INVALID = 0, ///< Uninitialized. - X86_XOP_CC_LT, - X86_XOP_CC_LE, - X86_XOP_CC_GT, - X86_XOP_CC_GE, - X86_XOP_CC_EQ, - X86_XOP_CC_NEQ, - X86_XOP_CC_FALSE, - X86_XOP_CC_TRUE, -} x86_xop_cc; - -/// AVX broadcast type -typedef enum x86_avx_bcast { - X86_AVX_BCAST_INVALID = 0, ///< Uninitialized. - X86_AVX_BCAST_2, ///< AVX512 broadcast type {1to2} - X86_AVX_BCAST_4, ///< AVX512 broadcast type {1to4} - X86_AVX_BCAST_8, ///< AVX512 broadcast type {1to8} - X86_AVX_BCAST_16, ///< AVX512 broadcast type {1to16} -} x86_avx_bcast; - -/// SSE Code Condition type -typedef enum x86_sse_cc { - X86_SSE_CC_INVALID = 0, ///< Uninitialized. - X86_SSE_CC_EQ, - X86_SSE_CC_LT, - X86_SSE_CC_LE, - X86_SSE_CC_UNORD, - X86_SSE_CC_NEQ, - X86_SSE_CC_NLT, - X86_SSE_CC_NLE, - X86_SSE_CC_ORD, -} x86_sse_cc; - -/// AVX Code Condition type -typedef enum x86_avx_cc { - X86_AVX_CC_INVALID = 0, ///< Uninitialized. - X86_AVX_CC_EQ, - X86_AVX_CC_LT, - X86_AVX_CC_LE, - X86_AVX_CC_UNORD, - X86_AVX_CC_NEQ, - X86_AVX_CC_NLT, - X86_AVX_CC_NLE, - X86_AVX_CC_ORD, - X86_AVX_CC_EQ_UQ, - X86_AVX_CC_NGE, - X86_AVX_CC_NGT, - X86_AVX_CC_FALSE, - X86_AVX_CC_NEQ_OQ, - X86_AVX_CC_GE, - X86_AVX_CC_GT, - X86_AVX_CC_TRUE, - X86_AVX_CC_EQ_OS, - X86_AVX_CC_LT_OQ, - X86_AVX_CC_LE_OQ, - X86_AVX_CC_UNORD_S, - X86_AVX_CC_NEQ_US, - X86_AVX_CC_NLT_UQ, - X86_AVX_CC_NLE_UQ, - X86_AVX_CC_ORD_S, - X86_AVX_CC_EQ_US, - X86_AVX_CC_NGE_UQ, - X86_AVX_CC_NGT_UQ, - X86_AVX_CC_FALSE_OS, - X86_AVX_CC_NEQ_OS, - X86_AVX_CC_GE_OQ, - X86_AVX_CC_GT_OQ, - X86_AVX_CC_TRUE_US, -} x86_avx_cc; - -/// AVX static rounding mode type -typedef enum x86_avx_rm { - X86_AVX_RM_INVALID = 0, ///< Uninitialized. - X86_AVX_RM_RN, ///< Round to nearest - X86_AVX_RM_RD, ///< Round down - X86_AVX_RM_RU, ///< Round up - X86_AVX_RM_RZ, ///< Round toward zero -} x86_avx_rm; - -/// Instruction prefixes - to be used in cs_x86.prefix[] -typedef enum x86_prefix { - X86_PREFIX_LOCK = 0xf0, ///< lock (cs_x86.prefix[0] - X86_PREFIX_REP = 0xf3, ///< rep (cs_x86.prefix[0] - X86_PREFIX_REPE = 0xf3, ///< repe/repz (cs_x86.prefix[0] - X86_PREFIX_REPNE = 0xf2, ///< repne/repnz (cs_x86.prefix[0] - - X86_PREFIX_CS = 0x2e, ///< segment override CS (cs_x86.prefix[1] - X86_PREFIX_SS = 0x36, ///< segment override SS (cs_x86.prefix[1] - X86_PREFIX_DS = 0x3e, ///< segment override DS (cs_x86.prefix[1] - X86_PREFIX_ES = 0x26, ///< segment override ES (cs_x86.prefix[1] - X86_PREFIX_FS = 0x64, ///< segment override FS (cs_x86.prefix[1] - X86_PREFIX_GS = 0x65, ///< segment override GS (cs_x86.prefix[1] - - X86_PREFIX_OPSIZE = 0x66, ///< operand-size override (cs_x86.prefix[2] - X86_PREFIX_ADDRSIZE = 0x67, ///< address-size override (cs_x86.prefix[3] -} x86_prefix; - -/// Instruction's operand referring to memory -/// This is associated with X86_OP_MEM operand type above -typedef struct x86_op_mem { - x86_reg segment; ///< segment register (or X86_REG_INVALID if irrelevant) - x86_reg base; ///< base register (or X86_REG_INVALID if irrelevant) - x86_reg index; ///< index register (or X86_REG_INVALID if irrelevant) - int scale; ///< scale for index register - int64_t disp; ///< displacement value -} x86_op_mem; - -/// Instruction operand -typedef struct cs_x86_op { - x86_op_type type; ///< operand type - union { - x86_reg reg; ///< register value for REG operand - int64_t imm; ///< immediate value for IMM operand - x86_op_mem mem; ///< base/index/scale/disp value for MEM operand - }; - - /// size of this operand (in bytes). - uint8_t size; - - /// How is this operand accessed? (READ, WRITE or READ|WRITE) - /// This field is combined of cs_ac_type. - /// NOTE: this field is irrelevant if engine is compiled in DIET mode. - uint8_t access; - - /// AVX broadcast type, or 0 if irrelevant - x86_avx_bcast avx_bcast; - - /// AVX zero opmask {z} - bool avx_zero_opmask; -} cs_x86_op; - -typedef struct cs_x86_encoding { - /// ModR/M offset, or 0 when irrelevant - uint8_t modrm_offset; - - /// Displacement offset, or 0 when irrelevant. - uint8_t disp_offset; - uint8_t disp_size; - - /// Immediate offset, or 0 when irrelevant. - uint8_t imm_offset; - uint8_t imm_size; -} cs_x86_encoding; - -/// Instruction structure -typedef struct cs_x86 { - /// Instruction prefix, which can be up to 4 bytes. - /// A prefix byte gets value 0 when irrelevant. - /// prefix[0] indicates REP/REPNE/LOCK prefix (See X86_PREFIX_REP/REPNE/LOCK above) - /// prefix[1] indicates segment override (irrelevant for x86_64): - /// See X86_PREFIX_CS/SS/DS/ES/FS/GS above. - /// prefix[2] indicates operand-size override (X86_PREFIX_OPSIZE) - /// prefix[3] indicates address-size override (X86_PREFIX_ADDRSIZE) - uint8_t prefix[4]; - - /// Instruction opcode, which can be from 1 to 4 bytes in size. - /// This contains VEX opcode as well. - /// An trailing opcode byte gets value 0 when irrelevant. - uint8_t opcode[4]; - - /// REX prefix: only a non-zero value is relevant for x86_64 - uint8_t rex; - - /// Address size, which can be overridden with above prefix[5]. - uint8_t addr_size; - - /// ModR/M byte - uint8_t modrm; - - /// SIB value, or 0 when irrelevant. - uint8_t sib; - - /// Displacement value, valid if encoding.disp_offset != 0 - int64_t disp; - - /// SIB index register, or X86_REG_INVALID when irrelevant. - x86_reg sib_index; - /// SIB scale, only applicable if sib_index is valid. - int8_t sib_scale; - /// SIB base register, or X86_REG_INVALID when irrelevant. - x86_reg sib_base; - - /// XOP Code Condition - x86_xop_cc xop_cc; - - /// SSE Code Condition - x86_sse_cc sse_cc; - - /// AVX Code Condition - x86_avx_cc avx_cc; - - /// AVX Suppress all Exception - bool avx_sae; - - /// AVX static rounding mode - x86_avx_rm avx_rm; - - - union { - /// EFLAGS updated by this instruction. - /// This can be formed from OR combination of X86_EFLAGS_* symbols in x86.h - uint64_t eflags; - /// FPU_FLAGS updated by this instruction. - /// This can be formed from OR combination of X86_FPU_FLAGS_* symbols in x86.h - uint64_t fpu_flags; - }; - - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - - cs_x86_op operands[8]; ///< operands for this instruction. - - cs_x86_encoding encoding; ///< encoding information -} cs_x86; - -/// X86 instructions -typedef enum x86_insn { - X86_INS_INVALID = 0, - - X86_INS_AAA, - X86_INS_AAD, - X86_INS_AAM, - X86_INS_AAS, - X86_INS_FABS, - X86_INS_ADC, - X86_INS_ADCX, - X86_INS_ADD, - X86_INS_ADDPD, - X86_INS_ADDPS, - X86_INS_ADDSD, - X86_INS_ADDSS, - X86_INS_ADDSUBPD, - X86_INS_ADDSUBPS, - X86_INS_FADD, - X86_INS_FIADD, - X86_INS_ADOX, - X86_INS_AESDECLAST, - X86_INS_AESDEC, - X86_INS_AESENCLAST, - X86_INS_AESENC, - X86_INS_AESIMC, - X86_INS_AESKEYGENASSIST, - X86_INS_AND, - X86_INS_ANDN, - X86_INS_ANDNPD, - X86_INS_ANDNPS, - X86_INS_ANDPD, - X86_INS_ANDPS, - X86_INS_ARPL, - X86_INS_BEXTR, - X86_INS_BLCFILL, - X86_INS_BLCI, - X86_INS_BLCIC, - X86_INS_BLCMSK, - X86_INS_BLCS, - X86_INS_BLENDPD, - X86_INS_BLENDPS, - X86_INS_BLENDVPD, - X86_INS_BLENDVPS, - X86_INS_BLSFILL, - X86_INS_BLSI, - X86_INS_BLSIC, - X86_INS_BLSMSK, - X86_INS_BLSR, - X86_INS_BNDCL, - X86_INS_BNDCN, - X86_INS_BNDCU, - X86_INS_BNDLDX, - X86_INS_BNDMK, - X86_INS_BNDMOV, - X86_INS_BNDSTX, - X86_INS_BOUND, - X86_INS_BSF, - X86_INS_BSR, - X86_INS_BSWAP, - X86_INS_BT, - X86_INS_BTC, - X86_INS_BTR, - X86_INS_BTS, - X86_INS_BZHI, - X86_INS_CALL, - X86_INS_CBW, - X86_INS_CDQ, - X86_INS_CDQE, - X86_INS_FCHS, - X86_INS_CLAC, - X86_INS_CLC, - X86_INS_CLD, - X86_INS_CLDEMOTE, - X86_INS_CLFLUSH, - X86_INS_CLFLUSHOPT, - X86_INS_CLGI, - X86_INS_CLI, - X86_INS_CLRSSBSY, - X86_INS_CLTS, - X86_INS_CLWB, - X86_INS_CLZERO, - X86_INS_CMC, - X86_INS_CMOVA, - X86_INS_CMOVAE, - X86_INS_CMOVB, - X86_INS_CMOVBE, - X86_INS_FCMOVBE, - X86_INS_FCMOVB, - X86_INS_CMOVE, - X86_INS_FCMOVE, - X86_INS_CMOVG, - X86_INS_CMOVGE, - X86_INS_CMOVL, - X86_INS_CMOVLE, - X86_INS_FCMOVNBE, - X86_INS_FCMOVNB, - X86_INS_CMOVNE, - X86_INS_FCMOVNE, - X86_INS_CMOVNO, - X86_INS_CMOVNP, - X86_INS_FCMOVNU, - X86_INS_FCMOVNP, - X86_INS_CMOVNS, - X86_INS_CMOVO, - X86_INS_CMOVP, - X86_INS_FCMOVU, - X86_INS_CMOVS, - X86_INS_CMP, - X86_INS_CMPPD, - X86_INS_CMPPS, - X86_INS_CMPSB, - X86_INS_CMPSD, - X86_INS_CMPSQ, - X86_INS_CMPSS, - X86_INS_CMPSW, - X86_INS_CMPXCHG16B, - X86_INS_CMPXCHG, - X86_INS_CMPXCHG8B, - X86_INS_COMISD, - X86_INS_COMISS, - X86_INS_FCOMP, - X86_INS_FCOMPI, - X86_INS_FCOMI, - X86_INS_FCOM, - X86_INS_FCOS, - X86_INS_CPUID, - X86_INS_CQO, - X86_INS_CRC32, - X86_INS_CVTDQ2PD, - X86_INS_CVTDQ2PS, - X86_INS_CVTPD2DQ, - X86_INS_CVTPD2PS, - X86_INS_CVTPS2DQ, - X86_INS_CVTPS2PD, - X86_INS_CVTSD2SI, - X86_INS_CVTSD2SS, - X86_INS_CVTSI2SD, - X86_INS_CVTSI2SS, - X86_INS_CVTSS2SD, - X86_INS_CVTSS2SI, - X86_INS_CVTTPD2DQ, - X86_INS_CVTTPS2DQ, - X86_INS_CVTTSD2SI, - X86_INS_CVTTSS2SI, - X86_INS_CWD, - X86_INS_CWDE, - X86_INS_DAA, - X86_INS_DAS, - X86_INS_DATA16, - X86_INS_DEC, - X86_INS_DIV, - X86_INS_DIVPD, - X86_INS_DIVPS, - X86_INS_FDIVR, - X86_INS_FIDIVR, - X86_INS_FDIVRP, - X86_INS_DIVSD, - X86_INS_DIVSS, - X86_INS_FDIV, - X86_INS_FIDIV, - X86_INS_FDIVP, - X86_INS_DPPD, - X86_INS_DPPS, - X86_INS_ENCLS, - X86_INS_ENCLU, - X86_INS_ENCLV, - X86_INS_ENDBR32, - X86_INS_ENDBR64, - X86_INS_ENTER, - X86_INS_EXTRACTPS, - X86_INS_EXTRQ, - X86_INS_F2XM1, - X86_INS_LCALL, - X86_INS_LJMP, - X86_INS_JMP, - X86_INS_FBLD, - X86_INS_FBSTP, - X86_INS_FCOMPP, - X86_INS_FDECSTP, - X86_INS_FDISI8087_NOP, - X86_INS_FEMMS, - X86_INS_FENI8087_NOP, - X86_INS_FFREE, - X86_INS_FFREEP, - X86_INS_FICOM, - X86_INS_FICOMP, - X86_INS_FINCSTP, - X86_INS_FLDCW, - X86_INS_FLDENV, - X86_INS_FLDL2E, - X86_INS_FLDL2T, - X86_INS_FLDLG2, - X86_INS_FLDLN2, - X86_INS_FLDPI, - X86_INS_FNCLEX, - X86_INS_FNINIT, - X86_INS_FNOP, - X86_INS_FNSTCW, - X86_INS_FNSTSW, - X86_INS_FPATAN, - X86_INS_FSTPNCE, - X86_INS_FPREM, - X86_INS_FPREM1, - X86_INS_FPTAN, - X86_INS_FRNDINT, - X86_INS_FRSTOR, - X86_INS_FNSAVE, - X86_INS_FSCALE, - X86_INS_FSETPM, - X86_INS_FSINCOS, - X86_INS_FNSTENV, - X86_INS_FXAM, - X86_INS_FXRSTOR, - X86_INS_FXRSTOR64, - X86_INS_FXSAVE, - X86_INS_FXSAVE64, - X86_INS_FXTRACT, - X86_INS_FYL2X, - X86_INS_FYL2XP1, - X86_INS_GETSEC, - X86_INS_GF2P8AFFINEINVQB, - X86_INS_GF2P8AFFINEQB, - X86_INS_GF2P8MULB, - X86_INS_HADDPD, - X86_INS_HADDPS, - X86_INS_HLT, - X86_INS_HSUBPD, - X86_INS_HSUBPS, - X86_INS_IDIV, - X86_INS_FILD, - X86_INS_IMUL, - X86_INS_IN, - X86_INS_INC, - X86_INS_INCSSPD, - X86_INS_INCSSPQ, - X86_INS_INSB, - X86_INS_INSERTPS, - X86_INS_INSERTQ, - X86_INS_INSD, - X86_INS_INSW, - X86_INS_INT, - X86_INS_INT1, - X86_INS_INT3, - X86_INS_INTO, - X86_INS_INVD, - X86_INS_INVEPT, - X86_INS_INVLPG, - X86_INS_INVLPGA, - X86_INS_INVPCID, - X86_INS_INVVPID, - X86_INS_IRET, - X86_INS_IRETD, - X86_INS_IRETQ, - X86_INS_FISTTP, - X86_INS_FIST, - X86_INS_FISTP, - X86_INS_JAE, - X86_INS_JA, - X86_INS_JBE, - X86_INS_JB, - X86_INS_JCXZ, - X86_INS_JECXZ, - X86_INS_JE, - X86_INS_JGE, - X86_INS_JG, - X86_INS_JLE, - X86_INS_JL, - X86_INS_JNE, - X86_INS_JNO, - X86_INS_JNP, - X86_INS_JNS, - X86_INS_JO, - X86_INS_JP, - X86_INS_JRCXZ, - X86_INS_JS, - X86_INS_KADDB, - X86_INS_KADDD, - X86_INS_KADDQ, - X86_INS_KADDW, - X86_INS_KANDB, - X86_INS_KANDD, - X86_INS_KANDNB, - X86_INS_KANDND, - X86_INS_KANDNQ, - X86_INS_KANDNW, - X86_INS_KANDQ, - X86_INS_KANDW, - X86_INS_KMOVB, - X86_INS_KMOVD, - X86_INS_KMOVQ, - X86_INS_KMOVW, - X86_INS_KNOTB, - X86_INS_KNOTD, - X86_INS_KNOTQ, - X86_INS_KNOTW, - X86_INS_KORB, - X86_INS_KORD, - X86_INS_KORQ, - X86_INS_KORTESTB, - X86_INS_KORTESTD, - X86_INS_KORTESTQ, - X86_INS_KORTESTW, - X86_INS_KORW, - X86_INS_KSHIFTLB, - X86_INS_KSHIFTLD, - X86_INS_KSHIFTLQ, - X86_INS_KSHIFTLW, - X86_INS_KSHIFTRB, - X86_INS_KSHIFTRD, - X86_INS_KSHIFTRQ, - X86_INS_KSHIFTRW, - X86_INS_KTESTB, - X86_INS_KTESTD, - X86_INS_KTESTQ, - X86_INS_KTESTW, - X86_INS_KUNPCKBW, - X86_INS_KUNPCKDQ, - X86_INS_KUNPCKWD, - X86_INS_KXNORB, - X86_INS_KXNORD, - X86_INS_KXNORQ, - X86_INS_KXNORW, - X86_INS_KXORB, - X86_INS_KXORD, - X86_INS_KXORQ, - X86_INS_KXORW, - X86_INS_LAHF, - X86_INS_LAR, - X86_INS_LDDQU, - X86_INS_LDMXCSR, - X86_INS_LDS, - X86_INS_FLDZ, - X86_INS_FLD1, - X86_INS_FLD, - X86_INS_LEA, - X86_INS_LEAVE, - X86_INS_LES, - X86_INS_LFENCE, - X86_INS_LFS, - X86_INS_LGDT, - X86_INS_LGS, - X86_INS_LIDT, - X86_INS_LLDT, - X86_INS_LLWPCB, - X86_INS_LMSW, - X86_INS_LOCK, - X86_INS_LODSB, - X86_INS_LODSD, - X86_INS_LODSQ, - X86_INS_LODSW, - X86_INS_LOOP, - X86_INS_LOOPE, - X86_INS_LOOPNE, - X86_INS_RETF, - X86_INS_RETFQ, - X86_INS_LSL, - X86_INS_LSS, - X86_INS_LTR, - X86_INS_LWPINS, - X86_INS_LWPVAL, - X86_INS_LZCNT, - X86_INS_MASKMOVDQU, - X86_INS_MAXPD, - X86_INS_MAXPS, - X86_INS_MAXSD, - X86_INS_MAXSS, - X86_INS_MFENCE, - X86_INS_MINPD, - X86_INS_MINPS, - X86_INS_MINSD, - X86_INS_MINSS, - X86_INS_CVTPD2PI, - X86_INS_CVTPI2PD, - X86_INS_CVTPI2PS, - X86_INS_CVTPS2PI, - X86_INS_CVTTPD2PI, - X86_INS_CVTTPS2PI, - X86_INS_EMMS, - X86_INS_MASKMOVQ, - X86_INS_MOVD, - X86_INS_MOVQ, - X86_INS_MOVDQ2Q, - X86_INS_MOVNTQ, - X86_INS_MOVQ2DQ, - X86_INS_PABSB, - X86_INS_PABSD, - X86_INS_PABSW, - X86_INS_PACKSSDW, - X86_INS_PACKSSWB, - X86_INS_PACKUSWB, - X86_INS_PADDB, - X86_INS_PADDD, - X86_INS_PADDQ, - X86_INS_PADDSB, - X86_INS_PADDSW, - X86_INS_PADDUSB, - X86_INS_PADDUSW, - X86_INS_PADDW, - X86_INS_PALIGNR, - X86_INS_PANDN, - X86_INS_PAND, - X86_INS_PAVGB, - X86_INS_PAVGW, - X86_INS_PCMPEQB, - X86_INS_PCMPEQD, - X86_INS_PCMPEQW, - X86_INS_PCMPGTB, - X86_INS_PCMPGTD, - X86_INS_PCMPGTW, - X86_INS_PEXTRW, - X86_INS_PHADDD, - X86_INS_PHADDSW, - X86_INS_PHADDW, - X86_INS_PHSUBD, - X86_INS_PHSUBSW, - X86_INS_PHSUBW, - X86_INS_PINSRW, - X86_INS_PMADDUBSW, - X86_INS_PMADDWD, - X86_INS_PMAXSW, - X86_INS_PMAXUB, - X86_INS_PMINSW, - X86_INS_PMINUB, - X86_INS_PMOVMSKB, - X86_INS_PMULHRSW, - X86_INS_PMULHUW, - X86_INS_PMULHW, - X86_INS_PMULLW, - X86_INS_PMULUDQ, - X86_INS_POR, - X86_INS_PSADBW, - X86_INS_PSHUFB, - X86_INS_PSHUFW, - X86_INS_PSIGNB, - X86_INS_PSIGND, - X86_INS_PSIGNW, - X86_INS_PSLLD, - X86_INS_PSLLQ, - X86_INS_PSLLW, - X86_INS_PSRAD, - X86_INS_PSRAW, - X86_INS_PSRLD, - X86_INS_PSRLQ, - X86_INS_PSRLW, - X86_INS_PSUBB, - X86_INS_PSUBD, - X86_INS_PSUBQ, - X86_INS_PSUBSB, - X86_INS_PSUBSW, - X86_INS_PSUBUSB, - X86_INS_PSUBUSW, - X86_INS_PSUBW, - X86_INS_PUNPCKHBW, - X86_INS_PUNPCKHDQ, - X86_INS_PUNPCKHWD, - X86_INS_PUNPCKLBW, - X86_INS_PUNPCKLDQ, - X86_INS_PUNPCKLWD, - X86_INS_PXOR, - X86_INS_MONITORX, - X86_INS_MONITOR, - X86_INS_MONTMUL, - X86_INS_MOV, - X86_INS_MOVABS, - X86_INS_MOVAPD, - X86_INS_MOVAPS, - X86_INS_MOVBE, - X86_INS_MOVDDUP, - X86_INS_MOVDIR64B, - X86_INS_MOVDIRI, - X86_INS_MOVDQA, - X86_INS_MOVDQU, - X86_INS_MOVHLPS, - X86_INS_MOVHPD, - X86_INS_MOVHPS, - X86_INS_MOVLHPS, - X86_INS_MOVLPD, - X86_INS_MOVLPS, - X86_INS_MOVMSKPD, - X86_INS_MOVMSKPS, - X86_INS_MOVNTDQA, - X86_INS_MOVNTDQ, - X86_INS_MOVNTI, - X86_INS_MOVNTPD, - X86_INS_MOVNTPS, - X86_INS_MOVNTSD, - X86_INS_MOVNTSS, - X86_INS_MOVSB, - X86_INS_MOVSD, - X86_INS_MOVSHDUP, - X86_INS_MOVSLDUP, - X86_INS_MOVSQ, - X86_INS_MOVSS, - X86_INS_MOVSW, - X86_INS_MOVSX, - X86_INS_MOVSXD, - X86_INS_MOVUPD, - X86_INS_MOVUPS, - X86_INS_MOVZX, - X86_INS_MPSADBW, - X86_INS_MUL, - X86_INS_MULPD, - X86_INS_MULPS, - X86_INS_MULSD, - X86_INS_MULSS, - X86_INS_MULX, - X86_INS_FMUL, - X86_INS_FIMUL, - X86_INS_FMULP, - X86_INS_MWAITX, - X86_INS_MWAIT, - X86_INS_NEG, - X86_INS_NOP, - X86_INS_NOT, - X86_INS_OR, - X86_INS_ORPD, - X86_INS_ORPS, - X86_INS_OUT, - X86_INS_OUTSB, - X86_INS_OUTSD, - X86_INS_OUTSW, - X86_INS_PACKUSDW, - X86_INS_PAUSE, - X86_INS_PAVGUSB, - X86_INS_PBLENDVB, - X86_INS_PBLENDW, - X86_INS_PCLMULQDQ, - X86_INS_PCMPEQQ, - X86_INS_PCMPESTRI, - X86_INS_PCMPESTRM, - X86_INS_PCMPGTQ, - X86_INS_PCMPISTRI, - X86_INS_PCMPISTRM, - X86_INS_PCONFIG, - X86_INS_PDEP, - X86_INS_PEXT, - X86_INS_PEXTRB, - X86_INS_PEXTRD, - X86_INS_PEXTRQ, - X86_INS_PF2ID, - X86_INS_PF2IW, - X86_INS_PFACC, - X86_INS_PFADD, - X86_INS_PFCMPEQ, - X86_INS_PFCMPGE, - X86_INS_PFCMPGT, - X86_INS_PFMAX, - X86_INS_PFMIN, - X86_INS_PFMUL, - X86_INS_PFNACC, - X86_INS_PFPNACC, - X86_INS_PFRCPIT1, - X86_INS_PFRCPIT2, - X86_INS_PFRCP, - X86_INS_PFRSQIT1, - X86_INS_PFRSQRT, - X86_INS_PFSUBR, - X86_INS_PFSUB, - X86_INS_PHMINPOSUW, - X86_INS_PI2FD, - X86_INS_PI2FW, - X86_INS_PINSRB, - X86_INS_PINSRD, - X86_INS_PINSRQ, - X86_INS_PMAXSB, - X86_INS_PMAXSD, - X86_INS_PMAXUD, - X86_INS_PMAXUW, - X86_INS_PMINSB, - X86_INS_PMINSD, - X86_INS_PMINUD, - X86_INS_PMINUW, - X86_INS_PMOVSXBD, - X86_INS_PMOVSXBQ, - X86_INS_PMOVSXBW, - X86_INS_PMOVSXDQ, - X86_INS_PMOVSXWD, - X86_INS_PMOVSXWQ, - X86_INS_PMOVZXBD, - X86_INS_PMOVZXBQ, - X86_INS_PMOVZXBW, - X86_INS_PMOVZXDQ, - X86_INS_PMOVZXWD, - X86_INS_PMOVZXWQ, - X86_INS_PMULDQ, - X86_INS_PMULHRW, - X86_INS_PMULLD, - X86_INS_POP, - X86_INS_POPAW, - X86_INS_POPAL, - X86_INS_POPCNT, - X86_INS_POPF, - X86_INS_POPFD, - X86_INS_POPFQ, - X86_INS_PREFETCH, - X86_INS_PREFETCHNTA, - X86_INS_PREFETCHT0, - X86_INS_PREFETCHT1, - X86_INS_PREFETCHT2, - X86_INS_PREFETCHW, - X86_INS_PREFETCHWT1, - X86_INS_PSHUFD, - X86_INS_PSHUFHW, - X86_INS_PSHUFLW, - X86_INS_PSLLDQ, - X86_INS_PSRLDQ, - X86_INS_PSWAPD, - X86_INS_PTEST, - X86_INS_PTWRITE, - X86_INS_PUNPCKHQDQ, - X86_INS_PUNPCKLQDQ, - X86_INS_PUSH, - X86_INS_PUSHAW, - X86_INS_PUSHAL, - X86_INS_PUSHF, - X86_INS_PUSHFD, - X86_INS_PUSHFQ, - X86_INS_RCL, - X86_INS_RCPPS, - X86_INS_RCPSS, - X86_INS_RCR, - X86_INS_RDFSBASE, - X86_INS_RDGSBASE, - X86_INS_RDMSR, - X86_INS_RDPID, - X86_INS_RDPKRU, - X86_INS_RDPMC, - X86_INS_RDRAND, - X86_INS_RDSEED, - X86_INS_RDSSPD, - X86_INS_RDSSPQ, - X86_INS_RDTSC, - X86_INS_RDTSCP, - X86_INS_REPNE, - X86_INS_REP, - X86_INS_RET, - X86_INS_REX64, - X86_INS_ROL, - X86_INS_ROR, - X86_INS_RORX, - X86_INS_ROUNDPD, - X86_INS_ROUNDPS, - X86_INS_ROUNDSD, - X86_INS_ROUNDSS, - X86_INS_RSM, - X86_INS_RSQRTPS, - X86_INS_RSQRTSS, - X86_INS_RSTORSSP, - X86_INS_SAHF, - X86_INS_SAL, - X86_INS_SALC, - X86_INS_SAR, - X86_INS_SARX, - X86_INS_SAVEPREVSSP, - X86_INS_SBB, - X86_INS_SCASB, - X86_INS_SCASD, - X86_INS_SCASQ, - X86_INS_SCASW, - X86_INS_SETAE, - X86_INS_SETA, - X86_INS_SETBE, - X86_INS_SETB, - X86_INS_SETE, - X86_INS_SETGE, - X86_INS_SETG, - X86_INS_SETLE, - X86_INS_SETL, - X86_INS_SETNE, - X86_INS_SETNO, - X86_INS_SETNP, - X86_INS_SETNS, - X86_INS_SETO, - X86_INS_SETP, - X86_INS_SETSSBSY, - X86_INS_SETS, - X86_INS_SFENCE, - X86_INS_SGDT, - X86_INS_SHA1MSG1, - X86_INS_SHA1MSG2, - X86_INS_SHA1NEXTE, - X86_INS_SHA1RNDS4, - X86_INS_SHA256MSG1, - X86_INS_SHA256MSG2, - X86_INS_SHA256RNDS2, - X86_INS_SHL, - X86_INS_SHLD, - X86_INS_SHLX, - X86_INS_SHR, - X86_INS_SHRD, - X86_INS_SHRX, - X86_INS_SHUFPD, - X86_INS_SHUFPS, - X86_INS_SIDT, - X86_INS_FSIN, - X86_INS_SKINIT, - X86_INS_SLDT, - X86_INS_SLWPCB, - X86_INS_SMSW, - X86_INS_SQRTPD, - X86_INS_SQRTPS, - X86_INS_SQRTSD, - X86_INS_SQRTSS, - X86_INS_FSQRT, - X86_INS_STAC, - X86_INS_STC, - X86_INS_STD, - X86_INS_STGI, - X86_INS_STI, - X86_INS_STMXCSR, - X86_INS_STOSB, - X86_INS_STOSD, - X86_INS_STOSQ, - X86_INS_STOSW, - X86_INS_STR, - X86_INS_FST, - X86_INS_FSTP, - X86_INS_SUB, - X86_INS_SUBPD, - X86_INS_SUBPS, - X86_INS_FSUBR, - X86_INS_FISUBR, - X86_INS_FSUBRP, - X86_INS_SUBSD, - X86_INS_SUBSS, - X86_INS_FSUB, - X86_INS_FISUB, - X86_INS_FSUBP, - X86_INS_SWAPGS, - X86_INS_SYSCALL, - X86_INS_SYSENTER, - X86_INS_SYSEXIT, - X86_INS_SYSEXITQ, - X86_INS_SYSRET, - X86_INS_SYSRETQ, - X86_INS_T1MSKC, - X86_INS_TEST, - X86_INS_TPAUSE, - X86_INS_FTST, - X86_INS_TZCNT, - X86_INS_TZMSK, - X86_INS_UCOMISD, - X86_INS_UCOMISS, - X86_INS_FUCOMPI, - X86_INS_FUCOMI, - X86_INS_FUCOMPP, - X86_INS_FUCOMP, - X86_INS_FUCOM, - X86_INS_UD0, - X86_INS_UD1, - X86_INS_UD2, - X86_INS_UMONITOR, - X86_INS_UMWAIT, - X86_INS_UNPCKHPD, - X86_INS_UNPCKHPS, - X86_INS_UNPCKLPD, - X86_INS_UNPCKLPS, - X86_INS_V4FMADDPS, - X86_INS_V4FMADDSS, - X86_INS_V4FNMADDPS, - X86_INS_V4FNMADDSS, - X86_INS_VADDPD, - X86_INS_VADDPS, - X86_INS_VADDSD, - X86_INS_VADDSS, - X86_INS_VADDSUBPD, - X86_INS_VADDSUBPS, - X86_INS_VAESDECLAST, - X86_INS_VAESDEC, - X86_INS_VAESENCLAST, - X86_INS_VAESENC, - X86_INS_VAESIMC, - X86_INS_VAESKEYGENASSIST, - X86_INS_VALIGND, - X86_INS_VALIGNQ, - X86_INS_VANDNPD, - X86_INS_VANDNPS, - X86_INS_VANDPD, - X86_INS_VANDPS, - X86_INS_VBLENDMPD, - X86_INS_VBLENDMPS, - X86_INS_VBLENDPD, - X86_INS_VBLENDPS, - X86_INS_VBLENDVPD, - X86_INS_VBLENDVPS, - X86_INS_VBROADCASTF128, - X86_INS_VBROADCASTF32X2, - X86_INS_VBROADCASTF32X4, - X86_INS_VBROADCASTF32X8, - X86_INS_VBROADCASTF64X2, - X86_INS_VBROADCASTF64X4, - X86_INS_VBROADCASTI128, - X86_INS_VBROADCASTI32X2, - X86_INS_VBROADCASTI32X4, - X86_INS_VBROADCASTI32X8, - X86_INS_VBROADCASTI64X2, - X86_INS_VBROADCASTI64X4, - X86_INS_VBROADCASTSD, - X86_INS_VBROADCASTSS, - X86_INS_VCMP, - X86_INS_VCMPPD, - X86_INS_VCMPPS, - X86_INS_VCMPSD, - X86_INS_VCMPSS, - X86_INS_VCOMISD, - X86_INS_VCOMISS, - X86_INS_VCOMPRESSPD, - X86_INS_VCOMPRESSPS, - X86_INS_VCVTDQ2PD, - X86_INS_VCVTDQ2PS, - X86_INS_VCVTPD2DQ, - X86_INS_VCVTPD2PS, - X86_INS_VCVTPD2QQ, - X86_INS_VCVTPD2UDQ, - X86_INS_VCVTPD2UQQ, - X86_INS_VCVTPH2PS, - X86_INS_VCVTPS2DQ, - X86_INS_VCVTPS2PD, - X86_INS_VCVTPS2PH, - X86_INS_VCVTPS2QQ, - X86_INS_VCVTPS2UDQ, - X86_INS_VCVTPS2UQQ, - X86_INS_VCVTQQ2PD, - X86_INS_VCVTQQ2PS, - X86_INS_VCVTSD2SI, - X86_INS_VCVTSD2SS, - X86_INS_VCVTSD2USI, - X86_INS_VCVTSI2SD, - X86_INS_VCVTSI2SS, - X86_INS_VCVTSS2SD, - X86_INS_VCVTSS2SI, - X86_INS_VCVTSS2USI, - X86_INS_VCVTTPD2DQ, - X86_INS_VCVTTPD2QQ, - X86_INS_VCVTTPD2UDQ, - X86_INS_VCVTTPD2UQQ, - X86_INS_VCVTTPS2DQ, - X86_INS_VCVTTPS2QQ, - X86_INS_VCVTTPS2UDQ, - X86_INS_VCVTTPS2UQQ, - X86_INS_VCVTTSD2SI, - X86_INS_VCVTTSD2USI, - X86_INS_VCVTTSS2SI, - X86_INS_VCVTTSS2USI, - X86_INS_VCVTUDQ2PD, - X86_INS_VCVTUDQ2PS, - X86_INS_VCVTUQQ2PD, - X86_INS_VCVTUQQ2PS, - X86_INS_VCVTUSI2SD, - X86_INS_VCVTUSI2SS, - X86_INS_VDBPSADBW, - X86_INS_VDIVPD, - X86_INS_VDIVPS, - X86_INS_VDIVSD, - X86_INS_VDIVSS, - X86_INS_VDPPD, - X86_INS_VDPPS, - X86_INS_VERR, - X86_INS_VERW, - X86_INS_VEXP2PD, - X86_INS_VEXP2PS, - X86_INS_VEXPANDPD, - X86_INS_VEXPANDPS, - X86_INS_VEXTRACTF128, - X86_INS_VEXTRACTF32X4, - X86_INS_VEXTRACTF32X8, - X86_INS_VEXTRACTF64X2, - X86_INS_VEXTRACTF64X4, - X86_INS_VEXTRACTI128, - X86_INS_VEXTRACTI32X4, - X86_INS_VEXTRACTI32X8, - X86_INS_VEXTRACTI64X2, - X86_INS_VEXTRACTI64X4, - X86_INS_VEXTRACTPS, - X86_INS_VFIXUPIMMPD, - X86_INS_VFIXUPIMMPS, - X86_INS_VFIXUPIMMSD, - X86_INS_VFIXUPIMMSS, - X86_INS_VFMADD132PD, - X86_INS_VFMADD132PS, - X86_INS_VFMADD132SD, - X86_INS_VFMADD132SS, - X86_INS_VFMADD213PD, - X86_INS_VFMADD213PS, - X86_INS_VFMADD213SD, - X86_INS_VFMADD213SS, - X86_INS_VFMADD231PD, - X86_INS_VFMADD231PS, - X86_INS_VFMADD231SD, - X86_INS_VFMADD231SS, - X86_INS_VFMADDPD, - X86_INS_VFMADDPS, - X86_INS_VFMADDSD, - X86_INS_VFMADDSS, - X86_INS_VFMADDSUB132PD, - X86_INS_VFMADDSUB132PS, - X86_INS_VFMADDSUB213PD, - X86_INS_VFMADDSUB213PS, - X86_INS_VFMADDSUB231PD, - X86_INS_VFMADDSUB231PS, - X86_INS_VFMADDSUBPD, - X86_INS_VFMADDSUBPS, - X86_INS_VFMSUB132PD, - X86_INS_VFMSUB132PS, - X86_INS_VFMSUB132SD, - X86_INS_VFMSUB132SS, - X86_INS_VFMSUB213PD, - X86_INS_VFMSUB213PS, - X86_INS_VFMSUB213SD, - X86_INS_VFMSUB213SS, - X86_INS_VFMSUB231PD, - X86_INS_VFMSUB231PS, - X86_INS_VFMSUB231SD, - X86_INS_VFMSUB231SS, - X86_INS_VFMSUBADD132PD, - X86_INS_VFMSUBADD132PS, - X86_INS_VFMSUBADD213PD, - X86_INS_VFMSUBADD213PS, - X86_INS_VFMSUBADD231PD, - X86_INS_VFMSUBADD231PS, - X86_INS_VFMSUBADDPD, - X86_INS_VFMSUBADDPS, - X86_INS_VFMSUBPD, - X86_INS_VFMSUBPS, - X86_INS_VFMSUBSD, - X86_INS_VFMSUBSS, - X86_INS_VFNMADD132PD, - X86_INS_VFNMADD132PS, - X86_INS_VFNMADD132SD, - X86_INS_VFNMADD132SS, - X86_INS_VFNMADD213PD, - X86_INS_VFNMADD213PS, - X86_INS_VFNMADD213SD, - X86_INS_VFNMADD213SS, - X86_INS_VFNMADD231PD, - X86_INS_VFNMADD231PS, - X86_INS_VFNMADD231SD, - X86_INS_VFNMADD231SS, - X86_INS_VFNMADDPD, - X86_INS_VFNMADDPS, - X86_INS_VFNMADDSD, - X86_INS_VFNMADDSS, - X86_INS_VFNMSUB132PD, - X86_INS_VFNMSUB132PS, - X86_INS_VFNMSUB132SD, - X86_INS_VFNMSUB132SS, - X86_INS_VFNMSUB213PD, - X86_INS_VFNMSUB213PS, - X86_INS_VFNMSUB213SD, - X86_INS_VFNMSUB213SS, - X86_INS_VFNMSUB231PD, - X86_INS_VFNMSUB231PS, - X86_INS_VFNMSUB231SD, - X86_INS_VFNMSUB231SS, - X86_INS_VFNMSUBPD, - X86_INS_VFNMSUBPS, - X86_INS_VFNMSUBSD, - X86_INS_VFNMSUBSS, - X86_INS_VFPCLASSPD, - X86_INS_VFPCLASSPS, - X86_INS_VFPCLASSSD, - X86_INS_VFPCLASSSS, - X86_INS_VFRCZPD, - X86_INS_VFRCZPS, - X86_INS_VFRCZSD, - X86_INS_VFRCZSS, - X86_INS_VGATHERDPD, - X86_INS_VGATHERDPS, - X86_INS_VGATHERPF0DPD, - X86_INS_VGATHERPF0DPS, - X86_INS_VGATHERPF0QPD, - X86_INS_VGATHERPF0QPS, - X86_INS_VGATHERPF1DPD, - X86_INS_VGATHERPF1DPS, - X86_INS_VGATHERPF1QPD, - X86_INS_VGATHERPF1QPS, - X86_INS_VGATHERQPD, - X86_INS_VGATHERQPS, - X86_INS_VGETEXPPD, - X86_INS_VGETEXPPS, - X86_INS_VGETEXPSD, - X86_INS_VGETEXPSS, - X86_INS_VGETMANTPD, - X86_INS_VGETMANTPS, - X86_INS_VGETMANTSD, - X86_INS_VGETMANTSS, - X86_INS_VGF2P8AFFINEINVQB, - X86_INS_VGF2P8AFFINEQB, - X86_INS_VGF2P8MULB, - X86_INS_VHADDPD, - X86_INS_VHADDPS, - X86_INS_VHSUBPD, - X86_INS_VHSUBPS, - X86_INS_VINSERTF128, - X86_INS_VINSERTF32X4, - X86_INS_VINSERTF32X8, - X86_INS_VINSERTF64X2, - X86_INS_VINSERTF64X4, - X86_INS_VINSERTI128, - X86_INS_VINSERTI32X4, - X86_INS_VINSERTI32X8, - X86_INS_VINSERTI64X2, - X86_INS_VINSERTI64X4, - X86_INS_VINSERTPS, - X86_INS_VLDDQU, - X86_INS_VLDMXCSR, - X86_INS_VMASKMOVDQU, - X86_INS_VMASKMOVPD, - X86_INS_VMASKMOVPS, - X86_INS_VMAXPD, - X86_INS_VMAXPS, - X86_INS_VMAXSD, - X86_INS_VMAXSS, - X86_INS_VMCALL, - X86_INS_VMCLEAR, - X86_INS_VMFUNC, - X86_INS_VMINPD, - X86_INS_VMINPS, - X86_INS_VMINSD, - X86_INS_VMINSS, - X86_INS_VMLAUNCH, - X86_INS_VMLOAD, - X86_INS_VMMCALL, - X86_INS_VMOVQ, - X86_INS_VMOVAPD, - X86_INS_VMOVAPS, - X86_INS_VMOVDDUP, - X86_INS_VMOVD, - X86_INS_VMOVDQA32, - X86_INS_VMOVDQA64, - X86_INS_VMOVDQA, - X86_INS_VMOVDQU16, - X86_INS_VMOVDQU32, - X86_INS_VMOVDQU64, - X86_INS_VMOVDQU8, - X86_INS_VMOVDQU, - X86_INS_VMOVHLPS, - X86_INS_VMOVHPD, - X86_INS_VMOVHPS, - X86_INS_VMOVLHPS, - X86_INS_VMOVLPD, - X86_INS_VMOVLPS, - X86_INS_VMOVMSKPD, - X86_INS_VMOVMSKPS, - X86_INS_VMOVNTDQA, - X86_INS_VMOVNTDQ, - X86_INS_VMOVNTPD, - X86_INS_VMOVNTPS, - X86_INS_VMOVSD, - X86_INS_VMOVSHDUP, - X86_INS_VMOVSLDUP, - X86_INS_VMOVSS, - X86_INS_VMOVUPD, - X86_INS_VMOVUPS, - X86_INS_VMPSADBW, - X86_INS_VMPTRLD, - X86_INS_VMPTRST, - X86_INS_VMREAD, - X86_INS_VMRESUME, - X86_INS_VMRUN, - X86_INS_VMSAVE, - X86_INS_VMULPD, - X86_INS_VMULPS, - X86_INS_VMULSD, - X86_INS_VMULSS, - X86_INS_VMWRITE, - X86_INS_VMXOFF, - X86_INS_VMXON, - X86_INS_VORPD, - X86_INS_VORPS, - X86_INS_VP4DPWSSDS, - X86_INS_VP4DPWSSD, - X86_INS_VPABSB, - X86_INS_VPABSD, - X86_INS_VPABSQ, - X86_INS_VPABSW, - X86_INS_VPACKSSDW, - X86_INS_VPACKSSWB, - X86_INS_VPACKUSDW, - X86_INS_VPACKUSWB, - X86_INS_VPADDB, - X86_INS_VPADDD, - X86_INS_VPADDQ, - X86_INS_VPADDSB, - X86_INS_VPADDSW, - X86_INS_VPADDUSB, - X86_INS_VPADDUSW, - X86_INS_VPADDW, - X86_INS_VPALIGNR, - X86_INS_VPANDD, - X86_INS_VPANDND, - X86_INS_VPANDNQ, - X86_INS_VPANDN, - X86_INS_VPANDQ, - X86_INS_VPAND, - X86_INS_VPAVGB, - X86_INS_VPAVGW, - X86_INS_VPBLENDD, - X86_INS_VPBLENDMB, - X86_INS_VPBLENDMD, - X86_INS_VPBLENDMQ, - X86_INS_VPBLENDMW, - X86_INS_VPBLENDVB, - X86_INS_VPBLENDW, - X86_INS_VPBROADCASTB, - X86_INS_VPBROADCASTD, - X86_INS_VPBROADCASTMB2Q, - X86_INS_VPBROADCASTMW2D, - X86_INS_VPBROADCASTQ, - X86_INS_VPBROADCASTW, - X86_INS_VPCLMULQDQ, - X86_INS_VPCMOV, - X86_INS_VPCMP, - X86_INS_VPCMPB, - X86_INS_VPCMPD, - X86_INS_VPCMPEQB, - X86_INS_VPCMPEQD, - X86_INS_VPCMPEQQ, - X86_INS_VPCMPEQW, - X86_INS_VPCMPESTRI, - X86_INS_VPCMPESTRM, - X86_INS_VPCMPGTB, - X86_INS_VPCMPGTD, - X86_INS_VPCMPGTQ, - X86_INS_VPCMPGTW, - X86_INS_VPCMPISTRI, - X86_INS_VPCMPISTRM, - X86_INS_VPCMPQ, - X86_INS_VPCMPUB, - X86_INS_VPCMPUD, - X86_INS_VPCMPUQ, - X86_INS_VPCMPUW, - X86_INS_VPCMPW, - X86_INS_VPCOM, - X86_INS_VPCOMB, - X86_INS_VPCOMD, - X86_INS_VPCOMPRESSB, - X86_INS_VPCOMPRESSD, - X86_INS_VPCOMPRESSQ, - X86_INS_VPCOMPRESSW, - X86_INS_VPCOMQ, - X86_INS_VPCOMUB, - X86_INS_VPCOMUD, - X86_INS_VPCOMUQ, - X86_INS_VPCOMUW, - X86_INS_VPCOMW, - X86_INS_VPCONFLICTD, - X86_INS_VPCONFLICTQ, - X86_INS_VPDPBUSDS, - X86_INS_VPDPBUSD, - X86_INS_VPDPWSSDS, - X86_INS_VPDPWSSD, - X86_INS_VPERM2F128, - X86_INS_VPERM2I128, - X86_INS_VPERMB, - X86_INS_VPERMD, - X86_INS_VPERMI2B, - X86_INS_VPERMI2D, - X86_INS_VPERMI2PD, - X86_INS_VPERMI2PS, - X86_INS_VPERMI2Q, - X86_INS_VPERMI2W, - X86_INS_VPERMIL2PD, - X86_INS_VPERMILPD, - X86_INS_VPERMIL2PS, - X86_INS_VPERMILPS, - X86_INS_VPERMPD, - X86_INS_VPERMPS, - X86_INS_VPERMQ, - X86_INS_VPERMT2B, - X86_INS_VPERMT2D, - X86_INS_VPERMT2PD, - X86_INS_VPERMT2PS, - X86_INS_VPERMT2Q, - X86_INS_VPERMT2W, - X86_INS_VPERMW, - X86_INS_VPEXPANDB, - X86_INS_VPEXPANDD, - X86_INS_VPEXPANDQ, - X86_INS_VPEXPANDW, - X86_INS_VPEXTRB, - X86_INS_VPEXTRD, - X86_INS_VPEXTRQ, - X86_INS_VPEXTRW, - X86_INS_VPGATHERDD, - X86_INS_VPGATHERDQ, - X86_INS_VPGATHERQD, - X86_INS_VPGATHERQQ, - X86_INS_VPHADDBD, - X86_INS_VPHADDBQ, - X86_INS_VPHADDBW, - X86_INS_VPHADDDQ, - X86_INS_VPHADDD, - X86_INS_VPHADDSW, - X86_INS_VPHADDUBD, - X86_INS_VPHADDUBQ, - X86_INS_VPHADDUBW, - X86_INS_VPHADDUDQ, - X86_INS_VPHADDUWD, - X86_INS_VPHADDUWQ, - X86_INS_VPHADDWD, - X86_INS_VPHADDWQ, - X86_INS_VPHADDW, - X86_INS_VPHMINPOSUW, - X86_INS_VPHSUBBW, - X86_INS_VPHSUBDQ, - X86_INS_VPHSUBD, - X86_INS_VPHSUBSW, - X86_INS_VPHSUBWD, - X86_INS_VPHSUBW, - X86_INS_VPINSRB, - X86_INS_VPINSRD, - X86_INS_VPINSRQ, - X86_INS_VPINSRW, - X86_INS_VPLZCNTD, - X86_INS_VPLZCNTQ, - X86_INS_VPMACSDD, - X86_INS_VPMACSDQH, - X86_INS_VPMACSDQL, - X86_INS_VPMACSSDD, - X86_INS_VPMACSSDQH, - X86_INS_VPMACSSDQL, - X86_INS_VPMACSSWD, - X86_INS_VPMACSSWW, - X86_INS_VPMACSWD, - X86_INS_VPMACSWW, - X86_INS_VPMADCSSWD, - X86_INS_VPMADCSWD, - X86_INS_VPMADD52HUQ, - X86_INS_VPMADD52LUQ, - X86_INS_VPMADDUBSW, - X86_INS_VPMADDWD, - X86_INS_VPMASKMOVD, - X86_INS_VPMASKMOVQ, - X86_INS_VPMAXSB, - X86_INS_VPMAXSD, - X86_INS_VPMAXSQ, - X86_INS_VPMAXSW, - X86_INS_VPMAXUB, - X86_INS_VPMAXUD, - X86_INS_VPMAXUQ, - X86_INS_VPMAXUW, - X86_INS_VPMINSB, - X86_INS_VPMINSD, - X86_INS_VPMINSQ, - X86_INS_VPMINSW, - X86_INS_VPMINUB, - X86_INS_VPMINUD, - X86_INS_VPMINUQ, - X86_INS_VPMINUW, - X86_INS_VPMOVB2M, - X86_INS_VPMOVD2M, - X86_INS_VPMOVDB, - X86_INS_VPMOVDW, - X86_INS_VPMOVM2B, - X86_INS_VPMOVM2D, - X86_INS_VPMOVM2Q, - X86_INS_VPMOVM2W, - X86_INS_VPMOVMSKB, - X86_INS_VPMOVQ2M, - X86_INS_VPMOVQB, - X86_INS_VPMOVQD, - X86_INS_VPMOVQW, - X86_INS_VPMOVSDB, - X86_INS_VPMOVSDW, - X86_INS_VPMOVSQB, - X86_INS_VPMOVSQD, - X86_INS_VPMOVSQW, - X86_INS_VPMOVSWB, - X86_INS_VPMOVSXBD, - X86_INS_VPMOVSXBQ, - X86_INS_VPMOVSXBW, - X86_INS_VPMOVSXDQ, - X86_INS_VPMOVSXWD, - X86_INS_VPMOVSXWQ, - X86_INS_VPMOVUSDB, - X86_INS_VPMOVUSDW, - X86_INS_VPMOVUSQB, - X86_INS_VPMOVUSQD, - X86_INS_VPMOVUSQW, - X86_INS_VPMOVUSWB, - X86_INS_VPMOVW2M, - X86_INS_VPMOVWB, - X86_INS_VPMOVZXBD, - X86_INS_VPMOVZXBQ, - X86_INS_VPMOVZXBW, - X86_INS_VPMOVZXDQ, - X86_INS_VPMOVZXWD, - X86_INS_VPMOVZXWQ, - X86_INS_VPMULDQ, - X86_INS_VPMULHRSW, - X86_INS_VPMULHUW, - X86_INS_VPMULHW, - X86_INS_VPMULLD, - X86_INS_VPMULLQ, - X86_INS_VPMULLW, - X86_INS_VPMULTISHIFTQB, - X86_INS_VPMULUDQ, - X86_INS_VPOPCNTB, - X86_INS_VPOPCNTD, - X86_INS_VPOPCNTQ, - X86_INS_VPOPCNTW, - X86_INS_VPORD, - X86_INS_VPORQ, - X86_INS_VPOR, - X86_INS_VPPERM, - X86_INS_VPROLD, - X86_INS_VPROLQ, - X86_INS_VPROLVD, - X86_INS_VPROLVQ, - X86_INS_VPRORD, - X86_INS_VPRORQ, - X86_INS_VPRORVD, - X86_INS_VPRORVQ, - X86_INS_VPROTB, - X86_INS_VPROTD, - X86_INS_VPROTQ, - X86_INS_VPROTW, - X86_INS_VPSADBW, - X86_INS_VPSCATTERDD, - X86_INS_VPSCATTERDQ, - X86_INS_VPSCATTERQD, - X86_INS_VPSCATTERQQ, - X86_INS_VPSHAB, - X86_INS_VPSHAD, - X86_INS_VPSHAQ, - X86_INS_VPSHAW, - X86_INS_VPSHLB, - X86_INS_VPSHLDD, - X86_INS_VPSHLDQ, - X86_INS_VPSHLDVD, - X86_INS_VPSHLDVQ, - X86_INS_VPSHLDVW, - X86_INS_VPSHLDW, - X86_INS_VPSHLD, - X86_INS_VPSHLQ, - X86_INS_VPSHLW, - X86_INS_VPSHRDD, - X86_INS_VPSHRDQ, - X86_INS_VPSHRDVD, - X86_INS_VPSHRDVQ, - X86_INS_VPSHRDVW, - X86_INS_VPSHRDW, - X86_INS_VPSHUFBITQMB, - X86_INS_VPSHUFB, - X86_INS_VPSHUFD, - X86_INS_VPSHUFHW, - X86_INS_VPSHUFLW, - X86_INS_VPSIGNB, - X86_INS_VPSIGND, - X86_INS_VPSIGNW, - X86_INS_VPSLLDQ, - X86_INS_VPSLLD, - X86_INS_VPSLLQ, - X86_INS_VPSLLVD, - X86_INS_VPSLLVQ, - X86_INS_VPSLLVW, - X86_INS_VPSLLW, - X86_INS_VPSRAD, - X86_INS_VPSRAQ, - X86_INS_VPSRAVD, - X86_INS_VPSRAVQ, - X86_INS_VPSRAVW, - X86_INS_VPSRAW, - X86_INS_VPSRLDQ, - X86_INS_VPSRLD, - X86_INS_VPSRLQ, - X86_INS_VPSRLVD, - X86_INS_VPSRLVQ, - X86_INS_VPSRLVW, - X86_INS_VPSRLW, - X86_INS_VPSUBB, - X86_INS_VPSUBD, - X86_INS_VPSUBQ, - X86_INS_VPSUBSB, - X86_INS_VPSUBSW, - X86_INS_VPSUBUSB, - X86_INS_VPSUBUSW, - X86_INS_VPSUBW, - X86_INS_VPTERNLOGD, - X86_INS_VPTERNLOGQ, - X86_INS_VPTESTMB, - X86_INS_VPTESTMD, - X86_INS_VPTESTMQ, - X86_INS_VPTESTMW, - X86_INS_VPTESTNMB, - X86_INS_VPTESTNMD, - X86_INS_VPTESTNMQ, - X86_INS_VPTESTNMW, - X86_INS_VPTEST, - X86_INS_VPUNPCKHBW, - X86_INS_VPUNPCKHDQ, - X86_INS_VPUNPCKHQDQ, - X86_INS_VPUNPCKHWD, - X86_INS_VPUNPCKLBW, - X86_INS_VPUNPCKLDQ, - X86_INS_VPUNPCKLQDQ, - X86_INS_VPUNPCKLWD, - X86_INS_VPXORD, - X86_INS_VPXORQ, - X86_INS_VPXOR, - X86_INS_VRANGEPD, - X86_INS_VRANGEPS, - X86_INS_VRANGESD, - X86_INS_VRANGESS, - X86_INS_VRCP14PD, - X86_INS_VRCP14PS, - X86_INS_VRCP14SD, - X86_INS_VRCP14SS, - X86_INS_VRCP28PD, - X86_INS_VRCP28PS, - X86_INS_VRCP28SD, - X86_INS_VRCP28SS, - X86_INS_VRCPPS, - X86_INS_VRCPSS, - X86_INS_VREDUCEPD, - X86_INS_VREDUCEPS, - X86_INS_VREDUCESD, - X86_INS_VREDUCESS, - X86_INS_VRNDSCALEPD, - X86_INS_VRNDSCALEPS, - X86_INS_VRNDSCALESD, - X86_INS_VRNDSCALESS, - X86_INS_VROUNDPD, - X86_INS_VROUNDPS, - X86_INS_VROUNDSD, - X86_INS_VROUNDSS, - X86_INS_VRSQRT14PD, - X86_INS_VRSQRT14PS, - X86_INS_VRSQRT14SD, - X86_INS_VRSQRT14SS, - X86_INS_VRSQRT28PD, - X86_INS_VRSQRT28PS, - X86_INS_VRSQRT28SD, - X86_INS_VRSQRT28SS, - X86_INS_VRSQRTPS, - X86_INS_VRSQRTSS, - X86_INS_VSCALEFPD, - X86_INS_VSCALEFPS, - X86_INS_VSCALEFSD, - X86_INS_VSCALEFSS, - X86_INS_VSCATTERDPD, - X86_INS_VSCATTERDPS, - X86_INS_VSCATTERPF0DPD, - X86_INS_VSCATTERPF0DPS, - X86_INS_VSCATTERPF0QPD, - X86_INS_VSCATTERPF0QPS, - X86_INS_VSCATTERPF1DPD, - X86_INS_VSCATTERPF1DPS, - X86_INS_VSCATTERPF1QPD, - X86_INS_VSCATTERPF1QPS, - X86_INS_VSCATTERQPD, - X86_INS_VSCATTERQPS, - X86_INS_VSHUFF32X4, - X86_INS_VSHUFF64X2, - X86_INS_VSHUFI32X4, - X86_INS_VSHUFI64X2, - X86_INS_VSHUFPD, - X86_INS_VSHUFPS, - X86_INS_VSQRTPD, - X86_INS_VSQRTPS, - X86_INS_VSQRTSD, - X86_INS_VSQRTSS, - X86_INS_VSTMXCSR, - X86_INS_VSUBPD, - X86_INS_VSUBPS, - X86_INS_VSUBSD, - X86_INS_VSUBSS, - X86_INS_VTESTPD, - X86_INS_VTESTPS, - X86_INS_VUCOMISD, - X86_INS_VUCOMISS, - X86_INS_VUNPCKHPD, - X86_INS_VUNPCKHPS, - X86_INS_VUNPCKLPD, - X86_INS_VUNPCKLPS, - X86_INS_VXORPD, - X86_INS_VXORPS, - X86_INS_VZEROALL, - X86_INS_VZEROUPPER, - X86_INS_WAIT, - X86_INS_WBINVD, - X86_INS_WBNOINVD, - X86_INS_WRFSBASE, - X86_INS_WRGSBASE, - X86_INS_WRMSR, - X86_INS_WRPKRU, - X86_INS_WRSSD, - X86_INS_WRSSQ, - X86_INS_WRUSSD, - X86_INS_WRUSSQ, - X86_INS_XABORT, - X86_INS_XACQUIRE, - X86_INS_XADD, - X86_INS_XBEGIN, - X86_INS_XCHG, - X86_INS_FXCH, - X86_INS_XCRYPTCBC, - X86_INS_XCRYPTCFB, - X86_INS_XCRYPTCTR, - X86_INS_XCRYPTECB, - X86_INS_XCRYPTOFB, - X86_INS_XEND, - X86_INS_XGETBV, - X86_INS_XLATB, - X86_INS_XOR, - X86_INS_XORPD, - X86_INS_XORPS, - X86_INS_XRELEASE, - X86_INS_XRSTOR, - X86_INS_XRSTOR64, - X86_INS_XRSTORS, - X86_INS_XRSTORS64, - X86_INS_XSAVE, - X86_INS_XSAVE64, - X86_INS_XSAVEC, - X86_INS_XSAVEC64, - X86_INS_XSAVEOPT, - X86_INS_XSAVEOPT64, - X86_INS_XSAVES, - X86_INS_XSAVES64, - X86_INS_XSETBV, - X86_INS_XSHA1, - X86_INS_XSHA256, - X86_INS_XSTORE, - X86_INS_XTEST, - - X86_INS_ENDING, // mark the end of the list of insn -} x86_insn; - -/// Group of X86 instructions -typedef enum x86_insn_group { - X86_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - X86_GRP_JUMP, ///< = CS_GRP_JUMP - // all call instructions - X86_GRP_CALL, ///< = CS_GRP_CALL - // all return instructions - X86_GRP_RET, ///< = CS_GRP_RET - // all interrupt instructions (int+syscall) - X86_GRP_INT, ///< = CS_GRP_INT - // all interrupt return instructions - X86_GRP_IRET, ///< = CS_GRP_IRET - // all privileged instructions - X86_GRP_PRIVILEGE, ///< = CS_GRP_PRIVILEGE - // all relative branching instructions - X86_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE - - // Architecture-specific groups - X86_GRP_VM = 128, ///< all virtualization instructions (VT-x + AMD-V) - X86_GRP_3DNOW, - X86_GRP_AES, - X86_GRP_ADX, - X86_GRP_AVX, - X86_GRP_AVX2, - X86_GRP_AVX512, - X86_GRP_BMI, - X86_GRP_BMI2, - X86_GRP_CMOV, - X86_GRP_F16C, - X86_GRP_FMA, - X86_GRP_FMA4, - X86_GRP_FSGSBASE, - X86_GRP_HLE, - X86_GRP_MMX, - X86_GRP_MODE32, - X86_GRP_MODE64, - X86_GRP_RTM, - X86_GRP_SHA, - X86_GRP_SSE1, - X86_GRP_SSE2, - X86_GRP_SSE3, - X86_GRP_SSE41, - X86_GRP_SSE42, - X86_GRP_SSE4A, - X86_GRP_SSSE3, - X86_GRP_PCLMUL, - X86_GRP_XOP, - X86_GRP_CDI, - X86_GRP_ERI, - X86_GRP_TBM, - X86_GRP_16BITMODE, - X86_GRP_NOT64BITMODE, - X86_GRP_SGX, - X86_GRP_DQI, - X86_GRP_BWI, - X86_GRP_PFI, - X86_GRP_VLX, - X86_GRP_SMAP, - X86_GRP_NOVLX, - X86_GRP_FPU, - - X86_GRP_ENDING -} x86_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/include/capstone/xcore.h b/.tools/python-revlibs/capstone/include/capstone/xcore.h deleted file mode 100644 index 6db1f24..0000000 --- a/.tools/python-revlibs/capstone/include/capstone/xcore.h +++ /dev/null @@ -1,235 +0,0 @@ -#ifndef CAPSTONE_XCORE_H -#define CAPSTONE_XCORE_H - -/* Capstone Disassembly Engine */ -/* By Nguyen Anh Quynh , 2014-2015 */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "platform.h" - -#ifdef _MSC_VER -#pragma warning(disable:4201) -#endif - -/// Operand type for instruction's operands -typedef enum xcore_op_type { - XCORE_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). - XCORE_OP_REG, ///< = CS_OP_REG (Register operand). - XCORE_OP_IMM, ///< = CS_OP_IMM (Immediate operand). - XCORE_OP_MEM, ///< = CS_OP_MEM (Memory operand). -} xcore_op_type; - -/// XCore registers -typedef enum xcore_reg { - XCORE_REG_INVALID = 0, - - XCORE_REG_CP, - XCORE_REG_DP, - XCORE_REG_LR, - XCORE_REG_SP, - XCORE_REG_R0, - XCORE_REG_R1, - XCORE_REG_R2, - XCORE_REG_R3, - XCORE_REG_R4, - XCORE_REG_R5, - XCORE_REG_R6, - XCORE_REG_R7, - XCORE_REG_R8, - XCORE_REG_R9, - XCORE_REG_R10, - XCORE_REG_R11, - - // pseudo registers - XCORE_REG_PC, ///< pc - - // internal thread registers - // see The-XMOS-XS1-Architecture(X7879A).pdf - XCORE_REG_SCP, ///< save pc - XCORE_REG_SSR, //< save status - XCORE_REG_ET, //< exception type - XCORE_REG_ED, //< exception data - XCORE_REG_SED, //< save exception data - XCORE_REG_KEP, //< kernel entry pointer - XCORE_REG_KSP, //< kernel stack pointer - XCORE_REG_ID, //< thread ID - - XCORE_REG_ENDING, // <-- mark the end of the list of registers -} xcore_reg; - -/// Instruction's operand referring to memory -/// This is associated with XCORE_OP_MEM operand type above -typedef struct xcore_op_mem { - uint8_t base; ///< base register, can be safely interpreted as - ///< a value of type `xcore_reg`, but it is only - ///< one byte wide - uint8_t index; ///< index register, same conditions apply here - int32_t disp; ///< displacement/offset value - int direct; ///< +1: forward, -1: backward -} xcore_op_mem; - -/// Instruction operand -typedef struct cs_xcore_op { - xcore_op_type type; ///< operand type - union { - xcore_reg reg; ///< register value for REG operand - int32_t imm; ///< immediate value for IMM operand - xcore_op_mem mem; ///< base/disp value for MEM operand - }; -} cs_xcore_op; - -/// Instruction structure -typedef struct cs_xcore { - /// Number of operands of this instruction, - /// or 0 when instruction has no operand. - uint8_t op_count; - cs_xcore_op operands[8]; ///< operands for this instruction. -} cs_xcore; - -/// XCore instruction -typedef enum xcore_insn { - XCORE_INS_INVALID = 0, - - XCORE_INS_ADD, - XCORE_INS_ANDNOT, - XCORE_INS_AND, - XCORE_INS_ASHR, - XCORE_INS_BAU, - XCORE_INS_BITREV, - XCORE_INS_BLA, - XCORE_INS_BLAT, - XCORE_INS_BL, - XCORE_INS_BF, - XCORE_INS_BT, - XCORE_INS_BU, - XCORE_INS_BRU, - XCORE_INS_BYTEREV, - XCORE_INS_CHKCT, - XCORE_INS_CLRE, - XCORE_INS_CLRPT, - XCORE_INS_CLRSR, - XCORE_INS_CLZ, - XCORE_INS_CRC8, - XCORE_INS_CRC32, - XCORE_INS_DCALL, - XCORE_INS_DENTSP, - XCORE_INS_DGETREG, - XCORE_INS_DIVS, - XCORE_INS_DIVU, - XCORE_INS_DRESTSP, - XCORE_INS_DRET, - XCORE_INS_ECALLF, - XCORE_INS_ECALLT, - XCORE_INS_EDU, - XCORE_INS_EEF, - XCORE_INS_EET, - XCORE_INS_EEU, - XCORE_INS_ENDIN, - XCORE_INS_ENTSP, - XCORE_INS_EQ, - XCORE_INS_EXTDP, - XCORE_INS_EXTSP, - XCORE_INS_FREER, - XCORE_INS_FREET, - XCORE_INS_GETD, - XCORE_INS_GET, - XCORE_INS_GETN, - XCORE_INS_GETR, - XCORE_INS_GETSR, - XCORE_INS_GETST, - XCORE_INS_GETTS, - XCORE_INS_INCT, - XCORE_INS_INIT, - XCORE_INS_INPW, - XCORE_INS_INSHR, - XCORE_INS_INT, - XCORE_INS_IN, - XCORE_INS_KCALL, - XCORE_INS_KENTSP, - XCORE_INS_KRESTSP, - XCORE_INS_KRET, - XCORE_INS_LADD, - XCORE_INS_LD16S, - XCORE_INS_LD8U, - XCORE_INS_LDA16, - XCORE_INS_LDAP, - XCORE_INS_LDAW, - XCORE_INS_LDC, - XCORE_INS_LDW, - XCORE_INS_LDIVU, - XCORE_INS_LMUL, - XCORE_INS_LSS, - XCORE_INS_LSUB, - XCORE_INS_LSU, - XCORE_INS_MACCS, - XCORE_INS_MACCU, - XCORE_INS_MJOIN, - XCORE_INS_MKMSK, - XCORE_INS_MSYNC, - XCORE_INS_MUL, - XCORE_INS_NEG, - XCORE_INS_NOT, - XCORE_INS_OR, - XCORE_INS_OUTCT, - XCORE_INS_OUTPW, - XCORE_INS_OUTSHR, - XCORE_INS_OUTT, - XCORE_INS_OUT, - XCORE_INS_PEEK, - XCORE_INS_REMS, - XCORE_INS_REMU, - XCORE_INS_RETSP, - XCORE_INS_SETCLK, - XCORE_INS_SET, - XCORE_INS_SETC, - XCORE_INS_SETD, - XCORE_INS_SETEV, - XCORE_INS_SETN, - XCORE_INS_SETPSC, - XCORE_INS_SETPT, - XCORE_INS_SETRDY, - XCORE_INS_SETSR, - XCORE_INS_SETTW, - XCORE_INS_SETV, - XCORE_INS_SEXT, - XCORE_INS_SHL, - XCORE_INS_SHR, - XCORE_INS_SSYNC, - XCORE_INS_ST16, - XCORE_INS_ST8, - XCORE_INS_STW, - XCORE_INS_SUB, - XCORE_INS_SYNCR, - XCORE_INS_TESTCT, - XCORE_INS_TESTLCL, - XCORE_INS_TESTWCT, - XCORE_INS_TSETMR, - XCORE_INS_START, - XCORE_INS_WAITEF, - XCORE_INS_WAITET, - XCORE_INS_WAITEU, - XCORE_INS_XOR, - XCORE_INS_ZEXT, - - XCORE_INS_ENDING, // <-- mark the end of the list of instructions -} xcore_insn; - -/// Group of XCore instructions -typedef enum xcore_insn_group { - XCORE_GRP_INVALID = 0, ///< = CS_GRP_INVALID - - // Generic groups - // all jump instructions (conditional+direct+indirect jumps) - XCORE_GRP_JUMP, ///< = CS_GRP_JUMP - - XCORE_GRP_ENDING, // <-- mark the end of the list of groups -} xcore_insn_group; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/.tools/python-revlibs/capstone/lib/capstone.dll b/.tools/python-revlibs/capstone/lib/capstone.dll deleted file mode 100644 index 2f2d86a..0000000 --- a/.tools/python-revlibs/capstone/lib/capstone.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76958e18380023a68fd1714fa2e01c594cc6db1955a07ad6937b66e66dc5d6c3 -size 7576576 diff --git a/.tools/python-revlibs/capstone/m680x.py b/.tools/python-revlibs/capstone/m680x.py deleted file mode 100644 index dae21be..0000000 --- a/.tools/python-revlibs/capstone/m680x.py +++ /dev/null @@ -1,88 +0,0 @@ -# Capstone Python bindings, by Wolfgang Schwotzer - -import ctypes -from . import copy_ctypes_list -from .m680x_const import * - -# define the API -class M680xOpIdx(ctypes.Structure): - _fields_ = ( - ('base_reg', ctypes.c_uint), - ('offset_reg', ctypes.c_uint), - ('offset', ctypes.c_int16), - ('offset_addr', ctypes.c_uint16), - ('offset_bits', ctypes.c_uint8), - ('inc_dec', ctypes.c_int8), - ('flags', ctypes.c_uint8), - ) - -class M680xOpRel(ctypes.Structure): - _fields_ = ( - ('address', ctypes.c_uint16), - ('offset', ctypes.c_int16), - ) - -class M680xOpExt(ctypes.Structure): - _fields_ = ( - ('address', ctypes.c_uint16), - ('indirect', ctypes.c_bool), - ) - -class M680xOpValue(ctypes.Union): - _fields_ = ( - ('imm', ctypes.c_int32), - ('reg', ctypes.c_uint), - ('idx', M680xOpIdx), - ('rel', M680xOpRel), - ('ext', M680xOpExt), - ('direct_addr', ctypes.c_uint8), - ('const_val', ctypes.c_uint8), - ) - -class M680xOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', M680xOpValue), - ('size', ctypes.c_uint8), - ('access', ctypes.c_uint8), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def idx(self): - return self.value.idx - - @property - def rel(self): - return self.value.rel - - @property - def ext(self): - return self.value.ext - - @property - def direct_addr(self): - return self.value.direct_addr - - @property - def const_val(self): - return self.value.const_val - - -class CsM680x(ctypes.Structure): - _fields_ = ( - ('flags', ctypes.c_uint8), - ('op_count', ctypes.c_uint8), - ('operands', M680xOp * 9), - ) - -def get_arch_info(a): - return (a.flags, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/m680x_const.py b/.tools/python-revlibs/capstone/m680x_const.py deleted file mode 100644 index 6c68b24..0000000 --- a/.tools/python-revlibs/capstone/m680x_const.py +++ /dev/null @@ -1,416 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [m680x_const.py] -M680X_OPERAND_COUNT = 9 - -M680X_REG_INVALID = 0 -M680X_REG_A = 1 -M680X_REG_B = 2 -M680X_REG_E = 3 -M680X_REG_F = 4 -M680X_REG_0 = 5 -M680X_REG_D = 6 -M680X_REG_W = 7 -M680X_REG_CC = 8 -M680X_REG_DP = 9 -M680X_REG_MD = 10 -M680X_REG_HX = 11 -M680X_REG_H = 12 -M680X_REG_X = 13 -M680X_REG_Y = 14 -M680X_REG_S = 15 -M680X_REG_U = 16 -M680X_REG_V = 17 -M680X_REG_Q = 18 -M680X_REG_PC = 19 -M680X_REG_TMP2 = 20 -M680X_REG_TMP3 = 21 -M680X_REG_ENDING = 22 - -M680X_OP_INVALID = 0 -M680X_OP_REGISTER = 1 -M680X_OP_IMMEDIATE = 2 -M680X_OP_INDEXED = 3 -M680X_OP_EXTENDED = 4 -M680X_OP_DIRECT = 5 -M680X_OP_RELATIVE = 6 -M680X_OP_CONSTANT = 7 - -M680X_OFFSET_NONE = 0 -M680X_OFFSET_BITS_5 = 5 -M680X_OFFSET_BITS_8 = 8 -M680X_OFFSET_BITS_9 = 9 -M680X_OFFSET_BITS_16 = 16 -M680X_IDX_INDIRECT = 1 -M680X_IDX_NO_COMMA = 2 -M680X_IDX_POST_INC_DEC = 4 - -M680X_GRP_INVALID = 0 -M680X_GRP_JUMP = 1 -M680X_GRP_CALL = 2 -M680X_GRP_RET = 3 -M680X_GRP_INT = 4 -M680X_GRP_IRET = 5 -M680X_GRP_PRIV = 6 -M680X_GRP_BRAREL = 7 -M680X_GRP_ENDING = 8 -M680X_FIRST_OP_IN_MNEM = 1 -M680X_SECOND_OP_IN_MNEM = 2 - -M680X_INS_INVLD = 0 -M680X_INS_ABA = 1 -M680X_INS_ABX = 2 -M680X_INS_ABY = 3 -M680X_INS_ADC = 4 -M680X_INS_ADCA = 5 -M680X_INS_ADCB = 6 -M680X_INS_ADCD = 7 -M680X_INS_ADCR = 8 -M680X_INS_ADD = 9 -M680X_INS_ADDA = 10 -M680X_INS_ADDB = 11 -M680X_INS_ADDD = 12 -M680X_INS_ADDE = 13 -M680X_INS_ADDF = 14 -M680X_INS_ADDR = 15 -M680X_INS_ADDW = 16 -M680X_INS_AIM = 17 -M680X_INS_AIS = 18 -M680X_INS_AIX = 19 -M680X_INS_AND = 20 -M680X_INS_ANDA = 21 -M680X_INS_ANDB = 22 -M680X_INS_ANDCC = 23 -M680X_INS_ANDD = 24 -M680X_INS_ANDR = 25 -M680X_INS_ASL = 26 -M680X_INS_ASLA = 27 -M680X_INS_ASLB = 28 -M680X_INS_ASLD = 29 -M680X_INS_ASR = 30 -M680X_INS_ASRA = 31 -M680X_INS_ASRB = 32 -M680X_INS_ASRD = 33 -M680X_INS_ASRX = 34 -M680X_INS_BAND = 35 -M680X_INS_BCC = 36 -M680X_INS_BCLR = 37 -M680X_INS_BCS = 38 -M680X_INS_BEOR = 39 -M680X_INS_BEQ = 40 -M680X_INS_BGE = 41 -M680X_INS_BGND = 42 -M680X_INS_BGT = 43 -M680X_INS_BHCC = 44 -M680X_INS_BHCS = 45 -M680X_INS_BHI = 46 -M680X_INS_BIAND = 47 -M680X_INS_BIEOR = 48 -M680X_INS_BIH = 49 -M680X_INS_BIL = 50 -M680X_INS_BIOR = 51 -M680X_INS_BIT = 52 -M680X_INS_BITA = 53 -M680X_INS_BITB = 54 -M680X_INS_BITD = 55 -M680X_INS_BITMD = 56 -M680X_INS_BLE = 57 -M680X_INS_BLS = 58 -M680X_INS_BLT = 59 -M680X_INS_BMC = 60 -M680X_INS_BMI = 61 -M680X_INS_BMS = 62 -M680X_INS_BNE = 63 -M680X_INS_BOR = 64 -M680X_INS_BPL = 65 -M680X_INS_BRCLR = 66 -M680X_INS_BRSET = 67 -M680X_INS_BRA = 68 -M680X_INS_BRN = 69 -M680X_INS_BSET = 70 -M680X_INS_BSR = 71 -M680X_INS_BVC = 72 -M680X_INS_BVS = 73 -M680X_INS_CALL = 74 -M680X_INS_CBA = 75 -M680X_INS_CBEQ = 76 -M680X_INS_CBEQA = 77 -M680X_INS_CBEQX = 78 -M680X_INS_CLC = 79 -M680X_INS_CLI = 80 -M680X_INS_CLR = 81 -M680X_INS_CLRA = 82 -M680X_INS_CLRB = 83 -M680X_INS_CLRD = 84 -M680X_INS_CLRE = 85 -M680X_INS_CLRF = 86 -M680X_INS_CLRH = 87 -M680X_INS_CLRW = 88 -M680X_INS_CLRX = 89 -M680X_INS_CLV = 90 -M680X_INS_CMP = 91 -M680X_INS_CMPA = 92 -M680X_INS_CMPB = 93 -M680X_INS_CMPD = 94 -M680X_INS_CMPE = 95 -M680X_INS_CMPF = 96 -M680X_INS_CMPR = 97 -M680X_INS_CMPS = 98 -M680X_INS_CMPU = 99 -M680X_INS_CMPW = 100 -M680X_INS_CMPX = 101 -M680X_INS_CMPY = 102 -M680X_INS_COM = 103 -M680X_INS_COMA = 104 -M680X_INS_COMB = 105 -M680X_INS_COMD = 106 -M680X_INS_COME = 107 -M680X_INS_COMF = 108 -M680X_INS_COMW = 109 -M680X_INS_COMX = 110 -M680X_INS_CPD = 111 -M680X_INS_CPHX = 112 -M680X_INS_CPS = 113 -M680X_INS_CPX = 114 -M680X_INS_CPY = 115 -M680X_INS_CWAI = 116 -M680X_INS_DAA = 117 -M680X_INS_DBEQ = 118 -M680X_INS_DBNE = 119 -M680X_INS_DBNZ = 120 -M680X_INS_DBNZA = 121 -M680X_INS_DBNZX = 122 -M680X_INS_DEC = 123 -M680X_INS_DECA = 124 -M680X_INS_DECB = 125 -M680X_INS_DECD = 126 -M680X_INS_DECE = 127 -M680X_INS_DECF = 128 -M680X_INS_DECW = 129 -M680X_INS_DECX = 130 -M680X_INS_DES = 131 -M680X_INS_DEX = 132 -M680X_INS_DEY = 133 -M680X_INS_DIV = 134 -M680X_INS_DIVD = 135 -M680X_INS_DIVQ = 136 -M680X_INS_EDIV = 137 -M680X_INS_EDIVS = 138 -M680X_INS_EIM = 139 -M680X_INS_EMACS = 140 -M680X_INS_EMAXD = 141 -M680X_INS_EMAXM = 142 -M680X_INS_EMIND = 143 -M680X_INS_EMINM = 144 -M680X_INS_EMUL = 145 -M680X_INS_EMULS = 146 -M680X_INS_EOR = 147 -M680X_INS_EORA = 148 -M680X_INS_EORB = 149 -M680X_INS_EORD = 150 -M680X_INS_EORR = 151 -M680X_INS_ETBL = 152 -M680X_INS_EXG = 153 -M680X_INS_FDIV = 154 -M680X_INS_IBEQ = 155 -M680X_INS_IBNE = 156 -M680X_INS_IDIV = 157 -M680X_INS_IDIVS = 158 -M680X_INS_ILLGL = 159 -M680X_INS_INC = 160 -M680X_INS_INCA = 161 -M680X_INS_INCB = 162 -M680X_INS_INCD = 163 -M680X_INS_INCE = 164 -M680X_INS_INCF = 165 -M680X_INS_INCW = 166 -M680X_INS_INCX = 167 -M680X_INS_INS = 168 -M680X_INS_INX = 169 -M680X_INS_INY = 170 -M680X_INS_JMP = 171 -M680X_INS_JSR = 172 -M680X_INS_LBCC = 173 -M680X_INS_LBCS = 174 -M680X_INS_LBEQ = 175 -M680X_INS_LBGE = 176 -M680X_INS_LBGT = 177 -M680X_INS_LBHI = 178 -M680X_INS_LBLE = 179 -M680X_INS_LBLS = 180 -M680X_INS_LBLT = 181 -M680X_INS_LBMI = 182 -M680X_INS_LBNE = 183 -M680X_INS_LBPL = 184 -M680X_INS_LBRA = 185 -M680X_INS_LBRN = 186 -M680X_INS_LBSR = 187 -M680X_INS_LBVC = 188 -M680X_INS_LBVS = 189 -M680X_INS_LDA = 190 -M680X_INS_LDAA = 191 -M680X_INS_LDAB = 192 -M680X_INS_LDB = 193 -M680X_INS_LDBT = 194 -M680X_INS_LDD = 195 -M680X_INS_LDE = 196 -M680X_INS_LDF = 197 -M680X_INS_LDHX = 198 -M680X_INS_LDMD = 199 -M680X_INS_LDQ = 200 -M680X_INS_LDS = 201 -M680X_INS_LDU = 202 -M680X_INS_LDW = 203 -M680X_INS_LDX = 204 -M680X_INS_LDY = 205 -M680X_INS_LEAS = 206 -M680X_INS_LEAU = 207 -M680X_INS_LEAX = 208 -M680X_INS_LEAY = 209 -M680X_INS_LSL = 210 -M680X_INS_LSLA = 211 -M680X_INS_LSLB = 212 -M680X_INS_LSLD = 213 -M680X_INS_LSLX = 214 -M680X_INS_LSR = 215 -M680X_INS_LSRA = 216 -M680X_INS_LSRB = 217 -M680X_INS_LSRD = 218 -M680X_INS_LSRW = 219 -M680X_INS_LSRX = 220 -M680X_INS_MAXA = 221 -M680X_INS_MAXM = 222 -M680X_INS_MEM = 223 -M680X_INS_MINA = 224 -M680X_INS_MINM = 225 -M680X_INS_MOV = 226 -M680X_INS_MOVB = 227 -M680X_INS_MOVW = 228 -M680X_INS_MUL = 229 -M680X_INS_MULD = 230 -M680X_INS_NEG = 231 -M680X_INS_NEGA = 232 -M680X_INS_NEGB = 233 -M680X_INS_NEGD = 234 -M680X_INS_NEGX = 235 -M680X_INS_NOP = 236 -M680X_INS_NSA = 237 -M680X_INS_OIM = 238 -M680X_INS_ORA = 239 -M680X_INS_ORAA = 240 -M680X_INS_ORAB = 241 -M680X_INS_ORB = 242 -M680X_INS_ORCC = 243 -M680X_INS_ORD = 244 -M680X_INS_ORR = 245 -M680X_INS_PSHA = 246 -M680X_INS_PSHB = 247 -M680X_INS_PSHC = 248 -M680X_INS_PSHD = 249 -M680X_INS_PSHH = 250 -M680X_INS_PSHS = 251 -M680X_INS_PSHSW = 252 -M680X_INS_PSHU = 253 -M680X_INS_PSHUW = 254 -M680X_INS_PSHX = 255 -M680X_INS_PSHY = 256 -M680X_INS_PULA = 257 -M680X_INS_PULB = 258 -M680X_INS_PULC = 259 -M680X_INS_PULD = 260 -M680X_INS_PULH = 261 -M680X_INS_PULS = 262 -M680X_INS_PULSW = 263 -M680X_INS_PULU = 264 -M680X_INS_PULUW = 265 -M680X_INS_PULX = 266 -M680X_INS_PULY = 267 -M680X_INS_REV = 268 -M680X_INS_REVW = 269 -M680X_INS_ROL = 270 -M680X_INS_ROLA = 271 -M680X_INS_ROLB = 272 -M680X_INS_ROLD = 273 -M680X_INS_ROLW = 274 -M680X_INS_ROLX = 275 -M680X_INS_ROR = 276 -M680X_INS_RORA = 277 -M680X_INS_RORB = 278 -M680X_INS_RORD = 279 -M680X_INS_RORW = 280 -M680X_INS_RORX = 281 -M680X_INS_RSP = 282 -M680X_INS_RTC = 283 -M680X_INS_RTI = 284 -M680X_INS_RTS = 285 -M680X_INS_SBA = 286 -M680X_INS_SBC = 287 -M680X_INS_SBCA = 288 -M680X_INS_SBCB = 289 -M680X_INS_SBCD = 290 -M680X_INS_SBCR = 291 -M680X_INS_SEC = 292 -M680X_INS_SEI = 293 -M680X_INS_SEV = 294 -M680X_INS_SEX = 295 -M680X_INS_SEXW = 296 -M680X_INS_SLP = 297 -M680X_INS_STA = 298 -M680X_INS_STAA = 299 -M680X_INS_STAB = 300 -M680X_INS_STB = 301 -M680X_INS_STBT = 302 -M680X_INS_STD = 303 -M680X_INS_STE = 304 -M680X_INS_STF = 305 -M680X_INS_STOP = 306 -M680X_INS_STHX = 307 -M680X_INS_STQ = 308 -M680X_INS_STS = 309 -M680X_INS_STU = 310 -M680X_INS_STW = 311 -M680X_INS_STX = 312 -M680X_INS_STY = 313 -M680X_INS_SUB = 314 -M680X_INS_SUBA = 315 -M680X_INS_SUBB = 316 -M680X_INS_SUBD = 317 -M680X_INS_SUBE = 318 -M680X_INS_SUBF = 319 -M680X_INS_SUBR = 320 -M680X_INS_SUBW = 321 -M680X_INS_SWI = 322 -M680X_INS_SWI2 = 323 -M680X_INS_SWI3 = 324 -M680X_INS_SYNC = 325 -M680X_INS_TAB = 326 -M680X_INS_TAP = 327 -M680X_INS_TAX = 328 -M680X_INS_TBA = 329 -M680X_INS_TBEQ = 330 -M680X_INS_TBL = 331 -M680X_INS_TBNE = 332 -M680X_INS_TEST = 333 -M680X_INS_TFM = 334 -M680X_INS_TFR = 335 -M680X_INS_TIM = 336 -M680X_INS_TPA = 337 -M680X_INS_TST = 338 -M680X_INS_TSTA = 339 -M680X_INS_TSTB = 340 -M680X_INS_TSTD = 341 -M680X_INS_TSTE = 342 -M680X_INS_TSTF = 343 -M680X_INS_TSTW = 344 -M680X_INS_TSTX = 345 -M680X_INS_TSX = 346 -M680X_INS_TSY = 347 -M680X_INS_TXA = 348 -M680X_INS_TXS = 349 -M680X_INS_TYS = 350 -M680X_INS_WAI = 351 -M680X_INS_WAIT = 352 -M680X_INS_WAV = 353 -M680X_INS_WAVR = 354 -M680X_INS_XGDX = 355 -M680X_INS_XGDY = 356 -M680X_INS_ENDING = 357 diff --git a/.tools/python-revlibs/capstone/m68k.py b/.tools/python-revlibs/capstone/m68k.py deleted file mode 100644 index 9356462..0000000 --- a/.tools/python-revlibs/capstone/m68k.py +++ /dev/null @@ -1,100 +0,0 @@ -# Capstone Python bindings, by Nicolas PLANEL - -import ctypes -from . import copy_ctypes_list -from .m68k_const import * - -# define the API -class M68KOpMem(ctypes.Structure): - _fields_ = ( - ('base_reg', ctypes.c_uint), - ('index_reg', ctypes.c_uint), - ('in_base_reg', ctypes.c_uint), - ('in_disp', ctypes.c_uint), - ('out_disp', ctypes.c_uint), - ('disp', ctypes.c_short), - ('scale', ctypes.c_ubyte), - ('bitfield', ctypes.c_ubyte), - ('width', ctypes.c_ubyte), - ('offset', ctypes.c_ubyte), - ('index_size', ctypes.c_ubyte), - ) - -class M68KOpRegPair(ctypes.Structure): - _fields_ = ( - ('reg_0', ctypes.c_uint), - ('reg_1', ctypes.c_uint), - ) - -class M68KOpValue(ctypes.Union): - _fields_ = ( - ('imm', ctypes.c_int64), - ('dimm', ctypes.c_double), - ('simm', ctypes.c_float), - ('reg', ctypes.c_uint), - ('reg_pair', M68KOpRegPair), - ) - -class M68KOpBrDisp(ctypes.Structure): - _fields_ = ( - ('disp', ctypes.c_int), - ('disp_size', ctypes.c_ubyte), - ) - -class M68KOp(ctypes.Structure): - _fields_ = ( - ('value', M68KOpValue), - ('mem', M68KOpMem), - ('br_disp', M68KOpBrDisp), - ('register_bits', ctypes.c_uint), - ('type', ctypes.c_uint), - ('address_mode', ctypes.c_uint), - ) - - @property - def imm(self): - return self.value.imm - - @property - def dimm(self): - return self.value.dimm - - @property - def simm(self): - return self.value.simm - - @property - def reg(self): - return self.value.reg - - @property - def reg_pair(self): - return self.value.reg_pair - - @property - def mem(self): - return self.mem - - @property - def register_bits(self): - return self.register_bits - -class M68KOpSize(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('size', ctypes.c_uint), - ) - - def get(a): - return copy_ctypes_list(type, size) - -class CsM68K(ctypes.Structure): - M68K_OPERAND_COUNT = 4 - _fields_ = ( - ('operands', M68KOp * M68K_OPERAND_COUNT), - ('op_size', M68KOpSize), - ('op_count', ctypes.c_uint8), - ) - -def get_arch_info(a): - return (copy_ctypes_list(a.operands[:a.op_count]), a.op_size) diff --git a/.tools/python-revlibs/capstone/m68k_const.py b/.tools/python-revlibs/capstone/m68k_const.py deleted file mode 100644 index 90755e3..0000000 --- a/.tools/python-revlibs/capstone/m68k_const.py +++ /dev/null @@ -1,486 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [m68k_const.py] -M68K_OPERAND_COUNT = 4 - -M68K_REG_INVALID = 0 -M68K_REG_D0 = 1 -M68K_REG_D1 = 2 -M68K_REG_D2 = 3 -M68K_REG_D3 = 4 -M68K_REG_D4 = 5 -M68K_REG_D5 = 6 -M68K_REG_D6 = 7 -M68K_REG_D7 = 8 -M68K_REG_A0 = 9 -M68K_REG_A1 = 10 -M68K_REG_A2 = 11 -M68K_REG_A3 = 12 -M68K_REG_A4 = 13 -M68K_REG_A5 = 14 -M68K_REG_A6 = 15 -M68K_REG_A7 = 16 -M68K_REG_FP0 = 17 -M68K_REG_FP1 = 18 -M68K_REG_FP2 = 19 -M68K_REG_FP3 = 20 -M68K_REG_FP4 = 21 -M68K_REG_FP5 = 22 -M68K_REG_FP6 = 23 -M68K_REG_FP7 = 24 -M68K_REG_PC = 25 -M68K_REG_SR = 26 -M68K_REG_CCR = 27 -M68K_REG_SFC = 28 -M68K_REG_DFC = 29 -M68K_REG_USP = 30 -M68K_REG_VBR = 31 -M68K_REG_CACR = 32 -M68K_REG_CAAR = 33 -M68K_REG_MSP = 34 -M68K_REG_ISP = 35 -M68K_REG_TC = 36 -M68K_REG_ITT0 = 37 -M68K_REG_ITT1 = 38 -M68K_REG_DTT0 = 39 -M68K_REG_DTT1 = 40 -M68K_REG_MMUSR = 41 -M68K_REG_URP = 42 -M68K_REG_SRP = 43 -M68K_REG_FPCR = 44 -M68K_REG_FPSR = 45 -M68K_REG_FPIAR = 46 -M68K_REG_ENDING = 47 - -M68K_AM_NONE = 0 -M68K_AM_REG_DIRECT_DATA = 1 -M68K_AM_REG_DIRECT_ADDR = 2 -M68K_AM_REGI_ADDR = 3 -M68K_AM_REGI_ADDR_POST_INC = 4 -M68K_AM_REGI_ADDR_PRE_DEC = 5 -M68K_AM_REGI_ADDR_DISP = 6 -M68K_AM_AREGI_INDEX_8_BIT_DISP = 7 -M68K_AM_AREGI_INDEX_BASE_DISP = 8 -M68K_AM_MEMI_POST_INDEX = 9 -M68K_AM_MEMI_PRE_INDEX = 10 -M68K_AM_PCI_DISP = 11 -M68K_AM_PCI_INDEX_8_BIT_DISP = 12 -M68K_AM_PCI_INDEX_BASE_DISP = 13 -M68K_AM_PC_MEMI_POST_INDEX = 14 -M68K_AM_PC_MEMI_PRE_INDEX = 15 -M68K_AM_ABSOLUTE_DATA_SHORT = 16 -M68K_AM_ABSOLUTE_DATA_LONG = 17 -M68K_AM_IMMEDIATE = 18 -M68K_AM_BRANCH_DISPLACEMENT = 19 - -M68K_OP_INVALID = 0 -M68K_OP_REG = 1 -M68K_OP_IMM = 2 -M68K_OP_MEM = 3 -M68K_OP_FP_SINGLE = 4 -M68K_OP_FP_DOUBLE = 5 -M68K_OP_REG_BITS = 6 -M68K_OP_REG_PAIR = 7 -M68K_OP_BR_DISP = 8 - -M68K_OP_BR_DISP_SIZE_INVALID = 0 -M68K_OP_BR_DISP_SIZE_BYTE = 1 -M68K_OP_BR_DISP_SIZE_WORD = 2 -M68K_OP_BR_DISP_SIZE_LONG = 4 - -M68K_CPU_SIZE_NONE = 0 -M68K_CPU_SIZE_BYTE = 1 -M68K_CPU_SIZE_WORD = 2 -M68K_CPU_SIZE_LONG = 4 - -M68K_FPU_SIZE_NONE = 0 -M68K_FPU_SIZE_SINGLE = 4 -M68K_FPU_SIZE_DOUBLE = 8 -M68K_FPU_SIZE_EXTENDED = 12 - -M68K_SIZE_TYPE_INVALID = 0 -M68K_SIZE_TYPE_CPU = 1 -M68K_SIZE_TYPE_FPU = 2 - -M68K_INS_INVALID = 0 -M68K_INS_ABCD = 1 -M68K_INS_ADD = 2 -M68K_INS_ADDA = 3 -M68K_INS_ADDI = 4 -M68K_INS_ADDQ = 5 -M68K_INS_ADDX = 6 -M68K_INS_AND = 7 -M68K_INS_ANDI = 8 -M68K_INS_ASL = 9 -M68K_INS_ASR = 10 -M68K_INS_BHS = 11 -M68K_INS_BLO = 12 -M68K_INS_BHI = 13 -M68K_INS_BLS = 14 -M68K_INS_BCC = 15 -M68K_INS_BCS = 16 -M68K_INS_BNE = 17 -M68K_INS_BEQ = 18 -M68K_INS_BVC = 19 -M68K_INS_BVS = 20 -M68K_INS_BPL = 21 -M68K_INS_BMI = 22 -M68K_INS_BGE = 23 -M68K_INS_BLT = 24 -M68K_INS_BGT = 25 -M68K_INS_BLE = 26 -M68K_INS_BRA = 27 -M68K_INS_BSR = 28 -M68K_INS_BCHG = 29 -M68K_INS_BCLR = 30 -M68K_INS_BSET = 31 -M68K_INS_BTST = 32 -M68K_INS_BFCHG = 33 -M68K_INS_BFCLR = 34 -M68K_INS_BFEXTS = 35 -M68K_INS_BFEXTU = 36 -M68K_INS_BFFFO = 37 -M68K_INS_BFINS = 38 -M68K_INS_BFSET = 39 -M68K_INS_BFTST = 40 -M68K_INS_BKPT = 41 -M68K_INS_CALLM = 42 -M68K_INS_CAS = 43 -M68K_INS_CAS2 = 44 -M68K_INS_CHK = 45 -M68K_INS_CHK2 = 46 -M68K_INS_CLR = 47 -M68K_INS_CMP = 48 -M68K_INS_CMPA = 49 -M68K_INS_CMPI = 50 -M68K_INS_CMPM = 51 -M68K_INS_CMP2 = 52 -M68K_INS_CINVL = 53 -M68K_INS_CINVP = 54 -M68K_INS_CINVA = 55 -M68K_INS_CPUSHL = 56 -M68K_INS_CPUSHP = 57 -M68K_INS_CPUSHA = 58 -M68K_INS_DBT = 59 -M68K_INS_DBF = 60 -M68K_INS_DBHI = 61 -M68K_INS_DBLS = 62 -M68K_INS_DBCC = 63 -M68K_INS_DBCS = 64 -M68K_INS_DBNE = 65 -M68K_INS_DBEQ = 66 -M68K_INS_DBVC = 67 -M68K_INS_DBVS = 68 -M68K_INS_DBPL = 69 -M68K_INS_DBMI = 70 -M68K_INS_DBGE = 71 -M68K_INS_DBLT = 72 -M68K_INS_DBGT = 73 -M68K_INS_DBLE = 74 -M68K_INS_DBRA = 75 -M68K_INS_DIVS = 76 -M68K_INS_DIVSL = 77 -M68K_INS_DIVU = 78 -M68K_INS_DIVUL = 79 -M68K_INS_EOR = 80 -M68K_INS_EORI = 81 -M68K_INS_EXG = 82 -M68K_INS_EXT = 83 -M68K_INS_EXTB = 84 -M68K_INS_FABS = 85 -M68K_INS_FSABS = 86 -M68K_INS_FDABS = 87 -M68K_INS_FACOS = 88 -M68K_INS_FADD = 89 -M68K_INS_FSADD = 90 -M68K_INS_FDADD = 91 -M68K_INS_FASIN = 92 -M68K_INS_FATAN = 93 -M68K_INS_FATANH = 94 -M68K_INS_FBF = 95 -M68K_INS_FBEQ = 96 -M68K_INS_FBOGT = 97 -M68K_INS_FBOGE = 98 -M68K_INS_FBOLT = 99 -M68K_INS_FBOLE = 100 -M68K_INS_FBOGL = 101 -M68K_INS_FBOR = 102 -M68K_INS_FBUN = 103 -M68K_INS_FBUEQ = 104 -M68K_INS_FBUGT = 105 -M68K_INS_FBUGE = 106 -M68K_INS_FBULT = 107 -M68K_INS_FBULE = 108 -M68K_INS_FBNE = 109 -M68K_INS_FBT = 110 -M68K_INS_FBSF = 111 -M68K_INS_FBSEQ = 112 -M68K_INS_FBGT = 113 -M68K_INS_FBGE = 114 -M68K_INS_FBLT = 115 -M68K_INS_FBLE = 116 -M68K_INS_FBGL = 117 -M68K_INS_FBGLE = 118 -M68K_INS_FBNGLE = 119 -M68K_INS_FBNGL = 120 -M68K_INS_FBNLE = 121 -M68K_INS_FBNLT = 122 -M68K_INS_FBNGE = 123 -M68K_INS_FBNGT = 124 -M68K_INS_FBSNE = 125 -M68K_INS_FBST = 126 -M68K_INS_FCMP = 127 -M68K_INS_FCOS = 128 -M68K_INS_FCOSH = 129 -M68K_INS_FDBF = 130 -M68K_INS_FDBEQ = 131 -M68K_INS_FDBOGT = 132 -M68K_INS_FDBOGE = 133 -M68K_INS_FDBOLT = 134 -M68K_INS_FDBOLE = 135 -M68K_INS_FDBOGL = 136 -M68K_INS_FDBOR = 137 -M68K_INS_FDBUN = 138 -M68K_INS_FDBUEQ = 139 -M68K_INS_FDBUGT = 140 -M68K_INS_FDBUGE = 141 -M68K_INS_FDBULT = 142 -M68K_INS_FDBULE = 143 -M68K_INS_FDBNE = 144 -M68K_INS_FDBT = 145 -M68K_INS_FDBSF = 146 -M68K_INS_FDBSEQ = 147 -M68K_INS_FDBGT = 148 -M68K_INS_FDBGE = 149 -M68K_INS_FDBLT = 150 -M68K_INS_FDBLE = 151 -M68K_INS_FDBGL = 152 -M68K_INS_FDBGLE = 153 -M68K_INS_FDBNGLE = 154 -M68K_INS_FDBNGL = 155 -M68K_INS_FDBNLE = 156 -M68K_INS_FDBNLT = 157 -M68K_INS_FDBNGE = 158 -M68K_INS_FDBNGT = 159 -M68K_INS_FDBSNE = 160 -M68K_INS_FDBST = 161 -M68K_INS_FDIV = 162 -M68K_INS_FSDIV = 163 -M68K_INS_FDDIV = 164 -M68K_INS_FETOX = 165 -M68K_INS_FETOXM1 = 166 -M68K_INS_FGETEXP = 167 -M68K_INS_FGETMAN = 168 -M68K_INS_FINT = 169 -M68K_INS_FINTRZ = 170 -M68K_INS_FLOG10 = 171 -M68K_INS_FLOG2 = 172 -M68K_INS_FLOGN = 173 -M68K_INS_FLOGNP1 = 174 -M68K_INS_FMOD = 175 -M68K_INS_FMOVE = 176 -M68K_INS_FSMOVE = 177 -M68K_INS_FDMOVE = 178 -M68K_INS_FMOVECR = 179 -M68K_INS_FMOVEM = 180 -M68K_INS_FMUL = 181 -M68K_INS_FSMUL = 182 -M68K_INS_FDMUL = 183 -M68K_INS_FNEG = 184 -M68K_INS_FSNEG = 185 -M68K_INS_FDNEG = 186 -M68K_INS_FNOP = 187 -M68K_INS_FREM = 188 -M68K_INS_FRESTORE = 189 -M68K_INS_FSAVE = 190 -M68K_INS_FSCALE = 191 -M68K_INS_FSGLDIV = 192 -M68K_INS_FSGLMUL = 193 -M68K_INS_FSIN = 194 -M68K_INS_FSINCOS = 195 -M68K_INS_FSINH = 196 -M68K_INS_FSQRT = 197 -M68K_INS_FSSQRT = 198 -M68K_INS_FDSQRT = 199 -M68K_INS_FSF = 200 -M68K_INS_FSBEQ = 201 -M68K_INS_FSOGT = 202 -M68K_INS_FSOGE = 203 -M68K_INS_FSOLT = 204 -M68K_INS_FSOLE = 205 -M68K_INS_FSOGL = 206 -M68K_INS_FSOR = 207 -M68K_INS_FSUN = 208 -M68K_INS_FSUEQ = 209 -M68K_INS_FSUGT = 210 -M68K_INS_FSUGE = 211 -M68K_INS_FSULT = 212 -M68K_INS_FSULE = 213 -M68K_INS_FSNE = 214 -M68K_INS_FST = 215 -M68K_INS_FSSF = 216 -M68K_INS_FSSEQ = 217 -M68K_INS_FSGT = 218 -M68K_INS_FSGE = 219 -M68K_INS_FSLT = 220 -M68K_INS_FSLE = 221 -M68K_INS_FSGL = 222 -M68K_INS_FSGLE = 223 -M68K_INS_FSNGLE = 224 -M68K_INS_FSNGL = 225 -M68K_INS_FSNLE = 226 -M68K_INS_FSNLT = 227 -M68K_INS_FSNGE = 228 -M68K_INS_FSNGT = 229 -M68K_INS_FSSNE = 230 -M68K_INS_FSST = 231 -M68K_INS_FSUB = 232 -M68K_INS_FSSUB = 233 -M68K_INS_FDSUB = 234 -M68K_INS_FTAN = 235 -M68K_INS_FTANH = 236 -M68K_INS_FTENTOX = 237 -M68K_INS_FTRAPF = 238 -M68K_INS_FTRAPEQ = 239 -M68K_INS_FTRAPOGT = 240 -M68K_INS_FTRAPOGE = 241 -M68K_INS_FTRAPOLT = 242 -M68K_INS_FTRAPOLE = 243 -M68K_INS_FTRAPOGL = 244 -M68K_INS_FTRAPOR = 245 -M68K_INS_FTRAPUN = 246 -M68K_INS_FTRAPUEQ = 247 -M68K_INS_FTRAPUGT = 248 -M68K_INS_FTRAPUGE = 249 -M68K_INS_FTRAPULT = 250 -M68K_INS_FTRAPULE = 251 -M68K_INS_FTRAPNE = 252 -M68K_INS_FTRAPT = 253 -M68K_INS_FTRAPSF = 254 -M68K_INS_FTRAPSEQ = 255 -M68K_INS_FTRAPGT = 256 -M68K_INS_FTRAPGE = 257 -M68K_INS_FTRAPLT = 258 -M68K_INS_FTRAPLE = 259 -M68K_INS_FTRAPGL = 260 -M68K_INS_FTRAPGLE = 261 -M68K_INS_FTRAPNGLE = 262 -M68K_INS_FTRAPNGL = 263 -M68K_INS_FTRAPNLE = 264 -M68K_INS_FTRAPNLT = 265 -M68K_INS_FTRAPNGE = 266 -M68K_INS_FTRAPNGT = 267 -M68K_INS_FTRAPSNE = 268 -M68K_INS_FTRAPST = 269 -M68K_INS_FTST = 270 -M68K_INS_FTWOTOX = 271 -M68K_INS_HALT = 272 -M68K_INS_ILLEGAL = 273 -M68K_INS_JMP = 274 -M68K_INS_JSR = 275 -M68K_INS_LEA = 276 -M68K_INS_LINK = 277 -M68K_INS_LPSTOP = 278 -M68K_INS_LSL = 279 -M68K_INS_LSR = 280 -M68K_INS_MOVE = 281 -M68K_INS_MOVEA = 282 -M68K_INS_MOVEC = 283 -M68K_INS_MOVEM = 284 -M68K_INS_MOVEP = 285 -M68K_INS_MOVEQ = 286 -M68K_INS_MOVES = 287 -M68K_INS_MOVE16 = 288 -M68K_INS_MULS = 289 -M68K_INS_MULU = 290 -M68K_INS_NBCD = 291 -M68K_INS_NEG = 292 -M68K_INS_NEGX = 293 -M68K_INS_NOP = 294 -M68K_INS_NOT = 295 -M68K_INS_OR = 296 -M68K_INS_ORI = 297 -M68K_INS_PACK = 298 -M68K_INS_PEA = 299 -M68K_INS_PFLUSH = 300 -M68K_INS_PFLUSHA = 301 -M68K_INS_PFLUSHAN = 302 -M68K_INS_PFLUSHN = 303 -M68K_INS_PLOADR = 304 -M68K_INS_PLOADW = 305 -M68K_INS_PLPAR = 306 -M68K_INS_PLPAW = 307 -M68K_INS_PMOVE = 308 -M68K_INS_PMOVEFD = 309 -M68K_INS_PTESTR = 310 -M68K_INS_PTESTW = 311 -M68K_INS_PULSE = 312 -M68K_INS_REMS = 313 -M68K_INS_REMU = 314 -M68K_INS_RESET = 315 -M68K_INS_ROL = 316 -M68K_INS_ROR = 317 -M68K_INS_ROXL = 318 -M68K_INS_ROXR = 319 -M68K_INS_RTD = 320 -M68K_INS_RTE = 321 -M68K_INS_RTM = 322 -M68K_INS_RTR = 323 -M68K_INS_RTS = 324 -M68K_INS_SBCD = 325 -M68K_INS_ST = 326 -M68K_INS_SF = 327 -M68K_INS_SHI = 328 -M68K_INS_SLS = 329 -M68K_INS_SCC = 330 -M68K_INS_SHS = 331 -M68K_INS_SCS = 332 -M68K_INS_SLO = 333 -M68K_INS_SNE = 334 -M68K_INS_SEQ = 335 -M68K_INS_SVC = 336 -M68K_INS_SVS = 337 -M68K_INS_SPL = 338 -M68K_INS_SMI = 339 -M68K_INS_SGE = 340 -M68K_INS_SLT = 341 -M68K_INS_SGT = 342 -M68K_INS_SLE = 343 -M68K_INS_STOP = 344 -M68K_INS_SUB = 345 -M68K_INS_SUBA = 346 -M68K_INS_SUBI = 347 -M68K_INS_SUBQ = 348 -M68K_INS_SUBX = 349 -M68K_INS_SWAP = 350 -M68K_INS_TAS = 351 -M68K_INS_TRAP = 352 -M68K_INS_TRAPV = 353 -M68K_INS_TRAPT = 354 -M68K_INS_TRAPF = 355 -M68K_INS_TRAPHI = 356 -M68K_INS_TRAPLS = 357 -M68K_INS_TRAPCC = 358 -M68K_INS_TRAPHS = 359 -M68K_INS_TRAPCS = 360 -M68K_INS_TRAPLO = 361 -M68K_INS_TRAPNE = 362 -M68K_INS_TRAPEQ = 363 -M68K_INS_TRAPVC = 364 -M68K_INS_TRAPVS = 365 -M68K_INS_TRAPPL = 366 -M68K_INS_TRAPMI = 367 -M68K_INS_TRAPGE = 368 -M68K_INS_TRAPLT = 369 -M68K_INS_TRAPGT = 370 -M68K_INS_TRAPLE = 371 -M68K_INS_TST = 372 -M68K_INS_UNLK = 373 -M68K_INS_UNPK = 374 -M68K_INS_ENDING = 375 - -M68K_GRP_INVALID = 0 -M68K_GRP_JUMP = 1 -M68K_GRP_RET = 3 -M68K_GRP_IRET = 5 -M68K_GRP_BRANCH_RELATIVE = 7 -M68K_GRP_ENDING = 8 diff --git a/.tools/python-revlibs/capstone/mips.py b/.tools/python-revlibs/capstone/mips.py deleted file mode 100644 index 44513d2..0000000 --- a/.tools/python-revlibs/capstone/mips.py +++ /dev/null @@ -1,48 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .mips_const import * - -# define the API -class MipsOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint), - ('disp', ctypes.c_int64), - ) - -class MipsOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('mem', MipsOpMem), - ) - -class MipsOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', MipsOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -class CsMips(ctypes.Structure): - _fields_ = ( - ('op_count', ctypes.c_uint8), - ('operands', MipsOp * 10), - ) - -def get_arch_info(a): - return copy_ctypes_list(a.operands[:a.op_count]) - diff --git a/.tools/python-revlibs/capstone/mips_const.py b/.tools/python-revlibs/capstone/mips_const.py deleted file mode 100644 index b6c5886..0000000 --- a/.tools/python-revlibs/capstone/mips_const.py +++ /dev/null @@ -1,862 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [mips_const.py] - -MIPS_OP_INVALID = 0 -MIPS_OP_REG = 1 -MIPS_OP_IMM = 2 -MIPS_OP_MEM = 3 - -MIPS_REG_INVALID = 0 -MIPS_REG_PC = 1 -MIPS_REG_0 = 2 -MIPS_REG_1 = 3 -MIPS_REG_2 = 4 -MIPS_REG_3 = 5 -MIPS_REG_4 = 6 -MIPS_REG_5 = 7 -MIPS_REG_6 = 8 -MIPS_REG_7 = 9 -MIPS_REG_8 = 10 -MIPS_REG_9 = 11 -MIPS_REG_10 = 12 -MIPS_REG_11 = 13 -MIPS_REG_12 = 14 -MIPS_REG_13 = 15 -MIPS_REG_14 = 16 -MIPS_REG_15 = 17 -MIPS_REG_16 = 18 -MIPS_REG_17 = 19 -MIPS_REG_18 = 20 -MIPS_REG_19 = 21 -MIPS_REG_20 = 22 -MIPS_REG_21 = 23 -MIPS_REG_22 = 24 -MIPS_REG_23 = 25 -MIPS_REG_24 = 26 -MIPS_REG_25 = 27 -MIPS_REG_26 = 28 -MIPS_REG_27 = 29 -MIPS_REG_28 = 30 -MIPS_REG_29 = 31 -MIPS_REG_30 = 32 -MIPS_REG_31 = 33 -MIPS_REG_DSPCCOND = 34 -MIPS_REG_DSPCARRY = 35 -MIPS_REG_DSPEFI = 36 -MIPS_REG_DSPOUTFLAG = 37 -MIPS_REG_DSPOUTFLAG16_19 = 38 -MIPS_REG_DSPOUTFLAG20 = 39 -MIPS_REG_DSPOUTFLAG21 = 40 -MIPS_REG_DSPOUTFLAG22 = 41 -MIPS_REG_DSPOUTFLAG23 = 42 -MIPS_REG_DSPPOS = 43 -MIPS_REG_DSPSCOUNT = 44 -MIPS_REG_AC0 = 45 -MIPS_REG_AC1 = 46 -MIPS_REG_AC2 = 47 -MIPS_REG_AC3 = 48 -MIPS_REG_CC0 = 49 -MIPS_REG_CC1 = 50 -MIPS_REG_CC2 = 51 -MIPS_REG_CC3 = 52 -MIPS_REG_CC4 = 53 -MIPS_REG_CC5 = 54 -MIPS_REG_CC6 = 55 -MIPS_REG_CC7 = 56 -MIPS_REG_F0 = 57 -MIPS_REG_F1 = 58 -MIPS_REG_F2 = 59 -MIPS_REG_F3 = 60 -MIPS_REG_F4 = 61 -MIPS_REG_F5 = 62 -MIPS_REG_F6 = 63 -MIPS_REG_F7 = 64 -MIPS_REG_F8 = 65 -MIPS_REG_F9 = 66 -MIPS_REG_F10 = 67 -MIPS_REG_F11 = 68 -MIPS_REG_F12 = 69 -MIPS_REG_F13 = 70 -MIPS_REG_F14 = 71 -MIPS_REG_F15 = 72 -MIPS_REG_F16 = 73 -MIPS_REG_F17 = 74 -MIPS_REG_F18 = 75 -MIPS_REG_F19 = 76 -MIPS_REG_F20 = 77 -MIPS_REG_F21 = 78 -MIPS_REG_F22 = 79 -MIPS_REG_F23 = 80 -MIPS_REG_F24 = 81 -MIPS_REG_F25 = 82 -MIPS_REG_F26 = 83 -MIPS_REG_F27 = 84 -MIPS_REG_F28 = 85 -MIPS_REG_F29 = 86 -MIPS_REG_F30 = 87 -MIPS_REG_F31 = 88 -MIPS_REG_FCC0 = 89 -MIPS_REG_FCC1 = 90 -MIPS_REG_FCC2 = 91 -MIPS_REG_FCC3 = 92 -MIPS_REG_FCC4 = 93 -MIPS_REG_FCC5 = 94 -MIPS_REG_FCC6 = 95 -MIPS_REG_FCC7 = 96 -MIPS_REG_W0 = 97 -MIPS_REG_W1 = 98 -MIPS_REG_W2 = 99 -MIPS_REG_W3 = 100 -MIPS_REG_W4 = 101 -MIPS_REG_W5 = 102 -MIPS_REG_W6 = 103 -MIPS_REG_W7 = 104 -MIPS_REG_W8 = 105 -MIPS_REG_W9 = 106 -MIPS_REG_W10 = 107 -MIPS_REG_W11 = 108 -MIPS_REG_W12 = 109 -MIPS_REG_W13 = 110 -MIPS_REG_W14 = 111 -MIPS_REG_W15 = 112 -MIPS_REG_W16 = 113 -MIPS_REG_W17 = 114 -MIPS_REG_W18 = 115 -MIPS_REG_W19 = 116 -MIPS_REG_W20 = 117 -MIPS_REG_W21 = 118 -MIPS_REG_W22 = 119 -MIPS_REG_W23 = 120 -MIPS_REG_W24 = 121 -MIPS_REG_W25 = 122 -MIPS_REG_W26 = 123 -MIPS_REG_W27 = 124 -MIPS_REG_W28 = 125 -MIPS_REG_W29 = 126 -MIPS_REG_W30 = 127 -MIPS_REG_W31 = 128 -MIPS_REG_HI = 129 -MIPS_REG_LO = 130 -MIPS_REG_P0 = 131 -MIPS_REG_P1 = 132 -MIPS_REG_P2 = 133 -MIPS_REG_MPL0 = 134 -MIPS_REG_MPL1 = 135 -MIPS_REG_MPL2 = 136 -MIPS_REG_ENDING = 137 -MIPS_REG_ZERO = MIPS_REG_0 -MIPS_REG_AT = MIPS_REG_1 -MIPS_REG_V0 = MIPS_REG_2 -MIPS_REG_V1 = MIPS_REG_3 -MIPS_REG_A0 = MIPS_REG_4 -MIPS_REG_A1 = MIPS_REG_5 -MIPS_REG_A2 = MIPS_REG_6 -MIPS_REG_A3 = MIPS_REG_7 -MIPS_REG_T0 = MIPS_REG_8 -MIPS_REG_T1 = MIPS_REG_9 -MIPS_REG_T2 = MIPS_REG_10 -MIPS_REG_T3 = MIPS_REG_11 -MIPS_REG_T4 = MIPS_REG_12 -MIPS_REG_T5 = MIPS_REG_13 -MIPS_REG_T6 = MIPS_REG_14 -MIPS_REG_T7 = MIPS_REG_15 -MIPS_REG_S0 = MIPS_REG_16 -MIPS_REG_S1 = MIPS_REG_17 -MIPS_REG_S2 = MIPS_REG_18 -MIPS_REG_S3 = MIPS_REG_19 -MIPS_REG_S4 = MIPS_REG_20 -MIPS_REG_S5 = MIPS_REG_21 -MIPS_REG_S6 = MIPS_REG_22 -MIPS_REG_S7 = MIPS_REG_23 -MIPS_REG_T8 = MIPS_REG_24 -MIPS_REG_T9 = MIPS_REG_25 -MIPS_REG_K0 = MIPS_REG_26 -MIPS_REG_K1 = MIPS_REG_27 -MIPS_REG_GP = MIPS_REG_28 -MIPS_REG_SP = MIPS_REG_29 -MIPS_REG_FP = MIPS_REG_30 -MIPS_REG_S8 = MIPS_REG_30 -MIPS_REG_RA = MIPS_REG_31 -MIPS_REG_HI0 = MIPS_REG_AC0 -MIPS_REG_HI1 = MIPS_REG_AC1 -MIPS_REG_HI2 = MIPS_REG_AC2 -MIPS_REG_HI3 = MIPS_REG_AC3 -MIPS_REG_LO0 = MIPS_REG_HI0 -MIPS_REG_LO1 = MIPS_REG_HI1 -MIPS_REG_LO2 = MIPS_REG_HI2 -MIPS_REG_LO3 = MIPS_REG_HI3 - -MIPS_INS_INVALID = 0 -MIPS_INS_ABSQ_S = 1 -MIPS_INS_ADD = 2 -MIPS_INS_ADDIUPC = 3 -MIPS_INS_ADDIUR1SP = 4 -MIPS_INS_ADDIUR2 = 5 -MIPS_INS_ADDIUS5 = 6 -MIPS_INS_ADDIUSP = 7 -MIPS_INS_ADDQH = 8 -MIPS_INS_ADDQH_R = 9 -MIPS_INS_ADDQ = 10 -MIPS_INS_ADDQ_S = 11 -MIPS_INS_ADDSC = 12 -MIPS_INS_ADDS_A = 13 -MIPS_INS_ADDS_S = 14 -MIPS_INS_ADDS_U = 15 -MIPS_INS_ADDU16 = 16 -MIPS_INS_ADDUH = 17 -MIPS_INS_ADDUH_R = 18 -MIPS_INS_ADDU = 19 -MIPS_INS_ADDU_S = 20 -MIPS_INS_ADDVI = 21 -MIPS_INS_ADDV = 22 -MIPS_INS_ADDWC = 23 -MIPS_INS_ADD_A = 24 -MIPS_INS_ADDI = 25 -MIPS_INS_ADDIU = 26 -MIPS_INS_ALIGN = 27 -MIPS_INS_ALUIPC = 28 -MIPS_INS_AND = 29 -MIPS_INS_AND16 = 30 -MIPS_INS_ANDI16 = 31 -MIPS_INS_ANDI = 32 -MIPS_INS_APPEND = 33 -MIPS_INS_ASUB_S = 34 -MIPS_INS_ASUB_U = 35 -MIPS_INS_AUI = 36 -MIPS_INS_AUIPC = 37 -MIPS_INS_AVER_S = 38 -MIPS_INS_AVER_U = 39 -MIPS_INS_AVE_S = 40 -MIPS_INS_AVE_U = 41 -MIPS_INS_B16 = 42 -MIPS_INS_BADDU = 43 -MIPS_INS_BAL = 44 -MIPS_INS_BALC = 45 -MIPS_INS_BALIGN = 46 -MIPS_INS_BBIT0 = 47 -MIPS_INS_BBIT032 = 48 -MIPS_INS_BBIT1 = 49 -MIPS_INS_BBIT132 = 50 -MIPS_INS_BC = 51 -MIPS_INS_BC0F = 52 -MIPS_INS_BC0FL = 53 -MIPS_INS_BC0T = 54 -MIPS_INS_BC0TL = 55 -MIPS_INS_BC1EQZ = 56 -MIPS_INS_BC1F = 57 -MIPS_INS_BC1FL = 58 -MIPS_INS_BC1NEZ = 59 -MIPS_INS_BC1T = 60 -MIPS_INS_BC1TL = 61 -MIPS_INS_BC2EQZ = 62 -MIPS_INS_BC2F = 63 -MIPS_INS_BC2FL = 64 -MIPS_INS_BC2NEZ = 65 -MIPS_INS_BC2T = 66 -MIPS_INS_BC2TL = 67 -MIPS_INS_BC3F = 68 -MIPS_INS_BC3FL = 69 -MIPS_INS_BC3T = 70 -MIPS_INS_BC3TL = 71 -MIPS_INS_BCLRI = 72 -MIPS_INS_BCLR = 73 -MIPS_INS_BEQ = 74 -MIPS_INS_BEQC = 75 -MIPS_INS_BEQL = 76 -MIPS_INS_BEQZ16 = 77 -MIPS_INS_BEQZALC = 78 -MIPS_INS_BEQZC = 79 -MIPS_INS_BGEC = 80 -MIPS_INS_BGEUC = 81 -MIPS_INS_BGEZ = 82 -MIPS_INS_BGEZAL = 83 -MIPS_INS_BGEZALC = 84 -MIPS_INS_BGEZALL = 85 -MIPS_INS_BGEZALS = 86 -MIPS_INS_BGEZC = 87 -MIPS_INS_BGEZL = 88 -MIPS_INS_BGTZ = 89 -MIPS_INS_BGTZALC = 90 -MIPS_INS_BGTZC = 91 -MIPS_INS_BGTZL = 92 -MIPS_INS_BINSLI = 93 -MIPS_INS_BINSL = 94 -MIPS_INS_BINSRI = 95 -MIPS_INS_BINSR = 96 -MIPS_INS_BITREV = 97 -MIPS_INS_BITSWAP = 98 -MIPS_INS_BLEZ = 99 -MIPS_INS_BLEZALC = 100 -MIPS_INS_BLEZC = 101 -MIPS_INS_BLEZL = 102 -MIPS_INS_BLTC = 103 -MIPS_INS_BLTUC = 104 -MIPS_INS_BLTZ = 105 -MIPS_INS_BLTZAL = 106 -MIPS_INS_BLTZALC = 107 -MIPS_INS_BLTZALL = 108 -MIPS_INS_BLTZALS = 109 -MIPS_INS_BLTZC = 110 -MIPS_INS_BLTZL = 111 -MIPS_INS_BMNZI = 112 -MIPS_INS_BMNZ = 113 -MIPS_INS_BMZI = 114 -MIPS_INS_BMZ = 115 -MIPS_INS_BNE = 116 -MIPS_INS_BNEC = 117 -MIPS_INS_BNEGI = 118 -MIPS_INS_BNEG = 119 -MIPS_INS_BNEL = 120 -MIPS_INS_BNEZ16 = 121 -MIPS_INS_BNEZALC = 122 -MIPS_INS_BNEZC = 123 -MIPS_INS_BNVC = 124 -MIPS_INS_BNZ = 125 -MIPS_INS_BOVC = 126 -MIPS_INS_BPOSGE32 = 127 -MIPS_INS_BREAK = 128 -MIPS_INS_BREAK16 = 129 -MIPS_INS_BSELI = 130 -MIPS_INS_BSEL = 131 -MIPS_INS_BSETI = 132 -MIPS_INS_BSET = 133 -MIPS_INS_BZ = 134 -MIPS_INS_BEQZ = 135 -MIPS_INS_B = 136 -MIPS_INS_BNEZ = 137 -MIPS_INS_BTEQZ = 138 -MIPS_INS_BTNEZ = 139 -MIPS_INS_CACHE = 140 -MIPS_INS_CEIL = 141 -MIPS_INS_CEQI = 142 -MIPS_INS_CEQ = 143 -MIPS_INS_CFC1 = 144 -MIPS_INS_CFCMSA = 145 -MIPS_INS_CINS = 146 -MIPS_INS_CINS32 = 147 -MIPS_INS_CLASS = 148 -MIPS_INS_CLEI_S = 149 -MIPS_INS_CLEI_U = 150 -MIPS_INS_CLE_S = 151 -MIPS_INS_CLE_U = 152 -MIPS_INS_CLO = 153 -MIPS_INS_CLTI_S = 154 -MIPS_INS_CLTI_U = 155 -MIPS_INS_CLT_S = 156 -MIPS_INS_CLT_U = 157 -MIPS_INS_CLZ = 158 -MIPS_INS_CMPGDU = 159 -MIPS_INS_CMPGU = 160 -MIPS_INS_CMPU = 161 -MIPS_INS_CMP = 162 -MIPS_INS_COPY_S = 163 -MIPS_INS_COPY_U = 164 -MIPS_INS_CTC1 = 165 -MIPS_INS_CTCMSA = 166 -MIPS_INS_CVT = 167 -MIPS_INS_C = 168 -MIPS_INS_CMPI = 169 -MIPS_INS_DADD = 170 -MIPS_INS_DADDI = 171 -MIPS_INS_DADDIU = 172 -MIPS_INS_DADDU = 173 -MIPS_INS_DAHI = 174 -MIPS_INS_DALIGN = 175 -MIPS_INS_DATI = 176 -MIPS_INS_DAUI = 177 -MIPS_INS_DBITSWAP = 178 -MIPS_INS_DCLO = 179 -MIPS_INS_DCLZ = 180 -MIPS_INS_DDIV = 181 -MIPS_INS_DDIVU = 182 -MIPS_INS_DERET = 183 -MIPS_INS_DEXT = 184 -MIPS_INS_DEXTM = 185 -MIPS_INS_DEXTU = 186 -MIPS_INS_DI = 187 -MIPS_INS_DINS = 188 -MIPS_INS_DINSM = 189 -MIPS_INS_DINSU = 190 -MIPS_INS_DIV = 191 -MIPS_INS_DIVU = 192 -MIPS_INS_DIV_S = 193 -MIPS_INS_DIV_U = 194 -MIPS_INS_DLSA = 195 -MIPS_INS_DMFC0 = 196 -MIPS_INS_DMFC1 = 197 -MIPS_INS_DMFC2 = 198 -MIPS_INS_DMOD = 199 -MIPS_INS_DMODU = 200 -MIPS_INS_DMTC0 = 201 -MIPS_INS_DMTC1 = 202 -MIPS_INS_DMTC2 = 203 -MIPS_INS_DMUH = 204 -MIPS_INS_DMUHU = 205 -MIPS_INS_DMUL = 206 -MIPS_INS_DMULT = 207 -MIPS_INS_DMULTU = 208 -MIPS_INS_DMULU = 209 -MIPS_INS_DOTP_S = 210 -MIPS_INS_DOTP_U = 211 -MIPS_INS_DPADD_S = 212 -MIPS_INS_DPADD_U = 213 -MIPS_INS_DPAQX_SA = 214 -MIPS_INS_DPAQX_S = 215 -MIPS_INS_DPAQ_SA = 216 -MIPS_INS_DPAQ_S = 217 -MIPS_INS_DPAU = 218 -MIPS_INS_DPAX = 219 -MIPS_INS_DPA = 220 -MIPS_INS_DPOP = 221 -MIPS_INS_DPSQX_SA = 222 -MIPS_INS_DPSQX_S = 223 -MIPS_INS_DPSQ_SA = 224 -MIPS_INS_DPSQ_S = 225 -MIPS_INS_DPSUB_S = 226 -MIPS_INS_DPSUB_U = 227 -MIPS_INS_DPSU = 228 -MIPS_INS_DPSX = 229 -MIPS_INS_DPS = 230 -MIPS_INS_DROTR = 231 -MIPS_INS_DROTR32 = 232 -MIPS_INS_DROTRV = 233 -MIPS_INS_DSBH = 234 -MIPS_INS_DSHD = 235 -MIPS_INS_DSLL = 236 -MIPS_INS_DSLL32 = 237 -MIPS_INS_DSLLV = 238 -MIPS_INS_DSRA = 239 -MIPS_INS_DSRA32 = 240 -MIPS_INS_DSRAV = 241 -MIPS_INS_DSRL = 242 -MIPS_INS_DSRL32 = 243 -MIPS_INS_DSRLV = 244 -MIPS_INS_DSUB = 245 -MIPS_INS_DSUBU = 246 -MIPS_INS_EHB = 247 -MIPS_INS_EI = 248 -MIPS_INS_ERET = 249 -MIPS_INS_EXT = 250 -MIPS_INS_EXTP = 251 -MIPS_INS_EXTPDP = 252 -MIPS_INS_EXTPDPV = 253 -MIPS_INS_EXTPV = 254 -MIPS_INS_EXTRV_RS = 255 -MIPS_INS_EXTRV_R = 256 -MIPS_INS_EXTRV_S = 257 -MIPS_INS_EXTRV = 258 -MIPS_INS_EXTR_RS = 259 -MIPS_INS_EXTR_R = 260 -MIPS_INS_EXTR_S = 261 -MIPS_INS_EXTR = 262 -MIPS_INS_EXTS = 263 -MIPS_INS_EXTS32 = 264 -MIPS_INS_ABS = 265 -MIPS_INS_FADD = 266 -MIPS_INS_FCAF = 267 -MIPS_INS_FCEQ = 268 -MIPS_INS_FCLASS = 269 -MIPS_INS_FCLE = 270 -MIPS_INS_FCLT = 271 -MIPS_INS_FCNE = 272 -MIPS_INS_FCOR = 273 -MIPS_INS_FCUEQ = 274 -MIPS_INS_FCULE = 275 -MIPS_INS_FCULT = 276 -MIPS_INS_FCUNE = 277 -MIPS_INS_FCUN = 278 -MIPS_INS_FDIV = 279 -MIPS_INS_FEXDO = 280 -MIPS_INS_FEXP2 = 281 -MIPS_INS_FEXUPL = 282 -MIPS_INS_FEXUPR = 283 -MIPS_INS_FFINT_S = 284 -MIPS_INS_FFINT_U = 285 -MIPS_INS_FFQL = 286 -MIPS_INS_FFQR = 287 -MIPS_INS_FILL = 288 -MIPS_INS_FLOG2 = 289 -MIPS_INS_FLOOR = 290 -MIPS_INS_FMADD = 291 -MIPS_INS_FMAX_A = 292 -MIPS_INS_FMAX = 293 -MIPS_INS_FMIN_A = 294 -MIPS_INS_FMIN = 295 -MIPS_INS_MOV = 296 -MIPS_INS_FMSUB = 297 -MIPS_INS_FMUL = 298 -MIPS_INS_MUL = 299 -MIPS_INS_NEG = 300 -MIPS_INS_FRCP = 301 -MIPS_INS_FRINT = 302 -MIPS_INS_FRSQRT = 303 -MIPS_INS_FSAF = 304 -MIPS_INS_FSEQ = 305 -MIPS_INS_FSLE = 306 -MIPS_INS_FSLT = 307 -MIPS_INS_FSNE = 308 -MIPS_INS_FSOR = 309 -MIPS_INS_FSQRT = 310 -MIPS_INS_SQRT = 311 -MIPS_INS_FSUB = 312 -MIPS_INS_SUB = 313 -MIPS_INS_FSUEQ = 314 -MIPS_INS_FSULE = 315 -MIPS_INS_FSULT = 316 -MIPS_INS_FSUNE = 317 -MIPS_INS_FSUN = 318 -MIPS_INS_FTINT_S = 319 -MIPS_INS_FTINT_U = 320 -MIPS_INS_FTQ = 321 -MIPS_INS_FTRUNC_S = 322 -MIPS_INS_FTRUNC_U = 323 -MIPS_INS_HADD_S = 324 -MIPS_INS_HADD_U = 325 -MIPS_INS_HSUB_S = 326 -MIPS_INS_HSUB_U = 327 -MIPS_INS_ILVEV = 328 -MIPS_INS_ILVL = 329 -MIPS_INS_ILVOD = 330 -MIPS_INS_ILVR = 331 -MIPS_INS_INS = 332 -MIPS_INS_INSERT = 333 -MIPS_INS_INSV = 334 -MIPS_INS_INSVE = 335 -MIPS_INS_J = 336 -MIPS_INS_JAL = 337 -MIPS_INS_JALR = 338 -MIPS_INS_JALRS16 = 339 -MIPS_INS_JALRS = 340 -MIPS_INS_JALS = 341 -MIPS_INS_JALX = 342 -MIPS_INS_JIALC = 343 -MIPS_INS_JIC = 344 -MIPS_INS_JR = 345 -MIPS_INS_JR16 = 346 -MIPS_INS_JRADDIUSP = 347 -MIPS_INS_JRC = 348 -MIPS_INS_JALRC = 349 -MIPS_INS_LB = 350 -MIPS_INS_LBU16 = 351 -MIPS_INS_LBUX = 352 -MIPS_INS_LBU = 353 -MIPS_INS_LD = 354 -MIPS_INS_LDC1 = 355 -MIPS_INS_LDC2 = 356 -MIPS_INS_LDC3 = 357 -MIPS_INS_LDI = 358 -MIPS_INS_LDL = 359 -MIPS_INS_LDPC = 360 -MIPS_INS_LDR = 361 -MIPS_INS_LDXC1 = 362 -MIPS_INS_LH = 363 -MIPS_INS_LHU16 = 364 -MIPS_INS_LHX = 365 -MIPS_INS_LHU = 366 -MIPS_INS_LI16 = 367 -MIPS_INS_LL = 368 -MIPS_INS_LLD = 369 -MIPS_INS_LSA = 370 -MIPS_INS_LUXC1 = 371 -MIPS_INS_LUI = 372 -MIPS_INS_LW = 373 -MIPS_INS_LW16 = 374 -MIPS_INS_LWC1 = 375 -MIPS_INS_LWC2 = 376 -MIPS_INS_LWC3 = 377 -MIPS_INS_LWL = 378 -MIPS_INS_LWM16 = 379 -MIPS_INS_LWM32 = 380 -MIPS_INS_LWPC = 381 -MIPS_INS_LWP = 382 -MIPS_INS_LWR = 383 -MIPS_INS_LWUPC = 384 -MIPS_INS_LWU = 385 -MIPS_INS_LWX = 386 -MIPS_INS_LWXC1 = 387 -MIPS_INS_LWXS = 388 -MIPS_INS_LI = 389 -MIPS_INS_MADD = 390 -MIPS_INS_MADDF = 391 -MIPS_INS_MADDR_Q = 392 -MIPS_INS_MADDU = 393 -MIPS_INS_MADDV = 394 -MIPS_INS_MADD_Q = 395 -MIPS_INS_MAQ_SA = 396 -MIPS_INS_MAQ_S = 397 -MIPS_INS_MAXA = 398 -MIPS_INS_MAXI_S = 399 -MIPS_INS_MAXI_U = 400 -MIPS_INS_MAX_A = 401 -MIPS_INS_MAX = 402 -MIPS_INS_MAX_S = 403 -MIPS_INS_MAX_U = 404 -MIPS_INS_MFC0 = 405 -MIPS_INS_MFC1 = 406 -MIPS_INS_MFC2 = 407 -MIPS_INS_MFHC1 = 408 -MIPS_INS_MFHI = 409 -MIPS_INS_MFLO = 410 -MIPS_INS_MINA = 411 -MIPS_INS_MINI_S = 412 -MIPS_INS_MINI_U = 413 -MIPS_INS_MIN_A = 414 -MIPS_INS_MIN = 415 -MIPS_INS_MIN_S = 416 -MIPS_INS_MIN_U = 417 -MIPS_INS_MOD = 418 -MIPS_INS_MODSUB = 419 -MIPS_INS_MODU = 420 -MIPS_INS_MOD_S = 421 -MIPS_INS_MOD_U = 422 -MIPS_INS_MOVE = 423 -MIPS_INS_MOVEP = 424 -MIPS_INS_MOVF = 425 -MIPS_INS_MOVN = 426 -MIPS_INS_MOVT = 427 -MIPS_INS_MOVZ = 428 -MIPS_INS_MSUB = 429 -MIPS_INS_MSUBF = 430 -MIPS_INS_MSUBR_Q = 431 -MIPS_INS_MSUBU = 432 -MIPS_INS_MSUBV = 433 -MIPS_INS_MSUB_Q = 434 -MIPS_INS_MTC0 = 435 -MIPS_INS_MTC1 = 436 -MIPS_INS_MTC2 = 437 -MIPS_INS_MTHC1 = 438 -MIPS_INS_MTHI = 439 -MIPS_INS_MTHLIP = 440 -MIPS_INS_MTLO = 441 -MIPS_INS_MTM0 = 442 -MIPS_INS_MTM1 = 443 -MIPS_INS_MTM2 = 444 -MIPS_INS_MTP0 = 445 -MIPS_INS_MTP1 = 446 -MIPS_INS_MTP2 = 447 -MIPS_INS_MUH = 448 -MIPS_INS_MUHU = 449 -MIPS_INS_MULEQ_S = 450 -MIPS_INS_MULEU_S = 451 -MIPS_INS_MULQ_RS = 452 -MIPS_INS_MULQ_S = 453 -MIPS_INS_MULR_Q = 454 -MIPS_INS_MULSAQ_S = 455 -MIPS_INS_MULSA = 456 -MIPS_INS_MULT = 457 -MIPS_INS_MULTU = 458 -MIPS_INS_MULU = 459 -MIPS_INS_MULV = 460 -MIPS_INS_MUL_Q = 461 -MIPS_INS_MUL_S = 462 -MIPS_INS_NLOC = 463 -MIPS_INS_NLZC = 464 -MIPS_INS_NMADD = 465 -MIPS_INS_NMSUB = 466 -MIPS_INS_NOR = 467 -MIPS_INS_NORI = 468 -MIPS_INS_NOT16 = 469 -MIPS_INS_NOT = 470 -MIPS_INS_OR = 471 -MIPS_INS_OR16 = 472 -MIPS_INS_ORI = 473 -MIPS_INS_PACKRL = 474 -MIPS_INS_PAUSE = 475 -MIPS_INS_PCKEV = 476 -MIPS_INS_PCKOD = 477 -MIPS_INS_PCNT = 478 -MIPS_INS_PICK = 479 -MIPS_INS_POP = 480 -MIPS_INS_PRECEQU = 481 -MIPS_INS_PRECEQ = 482 -MIPS_INS_PRECEU = 483 -MIPS_INS_PRECRQU_S = 484 -MIPS_INS_PRECRQ = 485 -MIPS_INS_PRECRQ_RS = 486 -MIPS_INS_PRECR = 487 -MIPS_INS_PRECR_SRA = 488 -MIPS_INS_PRECR_SRA_R = 489 -MIPS_INS_PREF = 490 -MIPS_INS_PREPEND = 491 -MIPS_INS_RADDU = 492 -MIPS_INS_RDDSP = 493 -MIPS_INS_RDHWR = 494 -MIPS_INS_REPLV = 495 -MIPS_INS_REPL = 496 -MIPS_INS_RINT = 497 -MIPS_INS_ROTR = 498 -MIPS_INS_ROTRV = 499 -MIPS_INS_ROUND = 500 -MIPS_INS_SAT_S = 501 -MIPS_INS_SAT_U = 502 -MIPS_INS_SB = 503 -MIPS_INS_SB16 = 504 -MIPS_INS_SC = 505 -MIPS_INS_SCD = 506 -MIPS_INS_SD = 507 -MIPS_INS_SDBBP = 508 -MIPS_INS_SDBBP16 = 509 -MIPS_INS_SDC1 = 510 -MIPS_INS_SDC2 = 511 -MIPS_INS_SDC3 = 512 -MIPS_INS_SDL = 513 -MIPS_INS_SDR = 514 -MIPS_INS_SDXC1 = 515 -MIPS_INS_SEB = 516 -MIPS_INS_SEH = 517 -MIPS_INS_SELEQZ = 518 -MIPS_INS_SELNEZ = 519 -MIPS_INS_SEL = 520 -MIPS_INS_SEQ = 521 -MIPS_INS_SEQI = 522 -MIPS_INS_SH = 523 -MIPS_INS_SH16 = 524 -MIPS_INS_SHF = 525 -MIPS_INS_SHILO = 526 -MIPS_INS_SHILOV = 527 -MIPS_INS_SHLLV = 528 -MIPS_INS_SHLLV_S = 529 -MIPS_INS_SHLL = 530 -MIPS_INS_SHLL_S = 531 -MIPS_INS_SHRAV = 532 -MIPS_INS_SHRAV_R = 533 -MIPS_INS_SHRA = 534 -MIPS_INS_SHRA_R = 535 -MIPS_INS_SHRLV = 536 -MIPS_INS_SHRL = 537 -MIPS_INS_SLDI = 538 -MIPS_INS_SLD = 539 -MIPS_INS_SLL = 540 -MIPS_INS_SLL16 = 541 -MIPS_INS_SLLI = 542 -MIPS_INS_SLLV = 543 -MIPS_INS_SLT = 544 -MIPS_INS_SLTI = 545 -MIPS_INS_SLTIU = 546 -MIPS_INS_SLTU = 547 -MIPS_INS_SNE = 548 -MIPS_INS_SNEI = 549 -MIPS_INS_SPLATI = 550 -MIPS_INS_SPLAT = 551 -MIPS_INS_SRA = 552 -MIPS_INS_SRAI = 553 -MIPS_INS_SRARI = 554 -MIPS_INS_SRAR = 555 -MIPS_INS_SRAV = 556 -MIPS_INS_SRL = 557 -MIPS_INS_SRL16 = 558 -MIPS_INS_SRLI = 559 -MIPS_INS_SRLRI = 560 -MIPS_INS_SRLR = 561 -MIPS_INS_SRLV = 562 -MIPS_INS_SSNOP = 563 -MIPS_INS_ST = 564 -MIPS_INS_SUBQH = 565 -MIPS_INS_SUBQH_R = 566 -MIPS_INS_SUBQ = 567 -MIPS_INS_SUBQ_S = 568 -MIPS_INS_SUBSUS_U = 569 -MIPS_INS_SUBSUU_S = 570 -MIPS_INS_SUBS_S = 571 -MIPS_INS_SUBS_U = 572 -MIPS_INS_SUBU16 = 573 -MIPS_INS_SUBUH = 574 -MIPS_INS_SUBUH_R = 575 -MIPS_INS_SUBU = 576 -MIPS_INS_SUBU_S = 577 -MIPS_INS_SUBVI = 578 -MIPS_INS_SUBV = 579 -MIPS_INS_SUXC1 = 580 -MIPS_INS_SW = 581 -MIPS_INS_SW16 = 582 -MIPS_INS_SWC1 = 583 -MIPS_INS_SWC2 = 584 -MIPS_INS_SWC3 = 585 -MIPS_INS_SWL = 586 -MIPS_INS_SWM16 = 587 -MIPS_INS_SWM32 = 588 -MIPS_INS_SWP = 589 -MIPS_INS_SWR = 590 -MIPS_INS_SWXC1 = 591 -MIPS_INS_SYNC = 592 -MIPS_INS_SYNCI = 593 -MIPS_INS_SYSCALL = 594 -MIPS_INS_TEQ = 595 -MIPS_INS_TEQI = 596 -MIPS_INS_TGE = 597 -MIPS_INS_TGEI = 598 -MIPS_INS_TGEIU = 599 -MIPS_INS_TGEU = 600 -MIPS_INS_TLBP = 601 -MIPS_INS_TLBR = 602 -MIPS_INS_TLBWI = 603 -MIPS_INS_TLBWR = 604 -MIPS_INS_TLT = 605 -MIPS_INS_TLTI = 606 -MIPS_INS_TLTIU = 607 -MIPS_INS_TLTU = 608 -MIPS_INS_TNE = 609 -MIPS_INS_TNEI = 610 -MIPS_INS_TRUNC = 611 -MIPS_INS_V3MULU = 612 -MIPS_INS_VMM0 = 613 -MIPS_INS_VMULU = 614 -MIPS_INS_VSHF = 615 -MIPS_INS_WAIT = 616 -MIPS_INS_WRDSP = 617 -MIPS_INS_WSBH = 618 -MIPS_INS_XOR = 619 -MIPS_INS_XOR16 = 620 -MIPS_INS_XORI = 621 - -# some alias instructions -MIPS_INS_NOP = 622 -MIPS_INS_NEGU = 623 - -# special instructions -MIPS_INS_JALR_HB = 624 -MIPS_INS_JR_HB = 625 -MIPS_INS_ENDING = 626 - -MIPS_GRP_INVALID = 0 -MIPS_GRP_JUMP = 1 -MIPS_GRP_CALL = 2 -MIPS_GRP_RET = 3 -MIPS_GRP_INT = 4 -MIPS_GRP_IRET = 5 -MIPS_GRP_PRIVILEGE = 6 -MIPS_GRP_BRANCH_RELATIVE = 7 -MIPS_GRP_BITCOUNT = 128 -MIPS_GRP_DSP = 129 -MIPS_GRP_DSPR2 = 130 -MIPS_GRP_FPIDX = 131 -MIPS_GRP_MSA = 132 -MIPS_GRP_MIPS32R2 = 133 -MIPS_GRP_MIPS64 = 134 -MIPS_GRP_MIPS64R2 = 135 -MIPS_GRP_SEINREG = 136 -MIPS_GRP_STDENC = 137 -MIPS_GRP_SWAP = 138 -MIPS_GRP_MICROMIPS = 139 -MIPS_GRP_MIPS16MODE = 140 -MIPS_GRP_FP64BIT = 141 -MIPS_GRP_NONANSFPMATH = 142 -MIPS_GRP_NOTFP64BIT = 143 -MIPS_GRP_NOTINMICROMIPS = 144 -MIPS_GRP_NOTNACL = 145 -MIPS_GRP_NOTMIPS32R6 = 146 -MIPS_GRP_NOTMIPS64R6 = 147 -MIPS_GRP_CNMIPS = 148 -MIPS_GRP_MIPS32 = 149 -MIPS_GRP_MIPS32R6 = 150 -MIPS_GRP_MIPS64R6 = 151 -MIPS_GRP_MIPS2 = 152 -MIPS_GRP_MIPS3 = 153 -MIPS_GRP_MIPS3_32 = 154 -MIPS_GRP_MIPS3_32R2 = 155 -MIPS_GRP_MIPS4_32 = 156 -MIPS_GRP_MIPS4_32R2 = 157 -MIPS_GRP_MIPS5_32R2 = 158 -MIPS_GRP_GP32BIT = 159 -MIPS_GRP_GP64BIT = 160 -MIPS_GRP_ENDING = 161 diff --git a/.tools/python-revlibs/capstone/mos65xx.py b/.tools/python-revlibs/capstone/mos65xx.py deleted file mode 100644 index 87a5f87..0000000 --- a/.tools/python-revlibs/capstone/mos65xx.py +++ /dev/null @@ -1,45 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .mos65xx_const import * - -# define the API -class MOS65xxOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_uint16), - ('mem', ctypes.c_uint32), - ) - -class MOS65xxOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', MOS65xxOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -class CsMOS65xx(ctypes.Structure): - _fields_ = ( - ('am', ctypes.c_uint), - ('modifies_flags', ctypes.c_uint8), - ('op_count', ctypes.c_uint8), - ('operands', MOS65xxOp * 3), - ) - -def get_arch_info(a): - return (a.am, a.modifies_flags, copy_ctypes_list(a.operands[:a.op_count])) - - diff --git a/.tools/python-revlibs/capstone/mos65xx_const.py b/.tools/python-revlibs/capstone/mos65xx_const.py deleted file mode 100644 index 7c3b803..0000000 --- a/.tools/python-revlibs/capstone/mos65xx_const.py +++ /dev/null @@ -1,153 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [mos65xx_const.py] - -MOS65XX_REG_INVALID = 0 -MOS65XX_REG_ACC = 1 -MOS65XX_REG_X = 2 -MOS65XX_REG_Y = 3 -MOS65XX_REG_P = 4 -MOS65XX_REG_SP = 5 -MOS65XX_REG_DP = 6 -MOS65XX_REG_B = 7 -MOS65XX_REG_K = 8 -MOS65XX_REG_ENDING = 9 - -MOS65XX_AM_NONE = 0 -MOS65XX_AM_IMP = 1 -MOS65XX_AM_ACC = 2 -MOS65XX_AM_IMM = 3 -MOS65XX_AM_REL = 4 -MOS65XX_AM_INT = 5 -MOS65XX_AM_BLOCK = 6 -MOS65XX_AM_ZP = 7 -MOS65XX_AM_ZP_X = 8 -MOS65XX_AM_ZP_Y = 9 -MOS65XX_AM_ZP_REL = 10 -MOS65XX_AM_ZP_IND = 11 -MOS65XX_AM_ZP_X_IND = 12 -MOS65XX_AM_ZP_IND_Y = 13 -MOS65XX_AM_ZP_IND_LONG = 14 -MOS65XX_AM_ZP_IND_LONG_Y = 15 -MOS65XX_AM_ABS = 16 -MOS65XX_AM_ABS_X = 17 -MOS65XX_AM_ABS_Y = 18 -MOS65XX_AM_ABS_IND = 19 -MOS65XX_AM_ABS_X_IND = 20 -MOS65XX_AM_ABS_IND_LONG = 21 -MOS65XX_AM_ABS_LONG = 22 -MOS65XX_AM_ABS_LONG_X = 23 -MOS65XX_AM_SR = 24 -MOS65XX_AM_SR_IND_Y = 25 - -MOS65XX_INS_INVALID = 0 -MOS65XX_INS_ADC = 1 -MOS65XX_INS_AND = 2 -MOS65XX_INS_ASL = 3 -MOS65XX_INS_BBR = 4 -MOS65XX_INS_BBS = 5 -MOS65XX_INS_BCC = 6 -MOS65XX_INS_BCS = 7 -MOS65XX_INS_BEQ = 8 -MOS65XX_INS_BIT = 9 -MOS65XX_INS_BMI = 10 -MOS65XX_INS_BNE = 11 -MOS65XX_INS_BPL = 12 -MOS65XX_INS_BRA = 13 -MOS65XX_INS_BRK = 14 -MOS65XX_INS_BRL = 15 -MOS65XX_INS_BVC = 16 -MOS65XX_INS_BVS = 17 -MOS65XX_INS_CLC = 18 -MOS65XX_INS_CLD = 19 -MOS65XX_INS_CLI = 20 -MOS65XX_INS_CLV = 21 -MOS65XX_INS_CMP = 22 -MOS65XX_INS_COP = 23 -MOS65XX_INS_CPX = 24 -MOS65XX_INS_CPY = 25 -MOS65XX_INS_DEC = 26 -MOS65XX_INS_DEX = 27 -MOS65XX_INS_DEY = 28 -MOS65XX_INS_EOR = 29 -MOS65XX_INS_INC = 30 -MOS65XX_INS_INX = 31 -MOS65XX_INS_INY = 32 -MOS65XX_INS_JML = 33 -MOS65XX_INS_JMP = 34 -MOS65XX_INS_JSL = 35 -MOS65XX_INS_JSR = 36 -MOS65XX_INS_LDA = 37 -MOS65XX_INS_LDX = 38 -MOS65XX_INS_LDY = 39 -MOS65XX_INS_LSR = 40 -MOS65XX_INS_MVN = 41 -MOS65XX_INS_MVP = 42 -MOS65XX_INS_NOP = 43 -MOS65XX_INS_ORA = 44 -MOS65XX_INS_PEA = 45 -MOS65XX_INS_PEI = 46 -MOS65XX_INS_PER = 47 -MOS65XX_INS_PHA = 48 -MOS65XX_INS_PHB = 49 -MOS65XX_INS_PHD = 50 -MOS65XX_INS_PHK = 51 -MOS65XX_INS_PHP = 52 -MOS65XX_INS_PHX = 53 -MOS65XX_INS_PHY = 54 -MOS65XX_INS_PLA = 55 -MOS65XX_INS_PLB = 56 -MOS65XX_INS_PLD = 57 -MOS65XX_INS_PLP = 58 -MOS65XX_INS_PLX = 59 -MOS65XX_INS_PLY = 60 -MOS65XX_INS_REP = 61 -MOS65XX_INS_RMB = 62 -MOS65XX_INS_ROL = 63 -MOS65XX_INS_ROR = 64 -MOS65XX_INS_RTI = 65 -MOS65XX_INS_RTL = 66 -MOS65XX_INS_RTS = 67 -MOS65XX_INS_SBC = 68 -MOS65XX_INS_SEC = 69 -MOS65XX_INS_SED = 70 -MOS65XX_INS_SEI = 71 -MOS65XX_INS_SEP = 72 -MOS65XX_INS_SMB = 73 -MOS65XX_INS_STA = 74 -MOS65XX_INS_STP = 75 -MOS65XX_INS_STX = 76 -MOS65XX_INS_STY = 77 -MOS65XX_INS_STZ = 78 -MOS65XX_INS_TAX = 79 -MOS65XX_INS_TAY = 80 -MOS65XX_INS_TCD = 81 -MOS65XX_INS_TCS = 82 -MOS65XX_INS_TDC = 83 -MOS65XX_INS_TRB = 84 -MOS65XX_INS_TSB = 85 -MOS65XX_INS_TSC = 86 -MOS65XX_INS_TSX = 87 -MOS65XX_INS_TXA = 88 -MOS65XX_INS_TXS = 89 -MOS65XX_INS_TXY = 90 -MOS65XX_INS_TYA = 91 -MOS65XX_INS_TYX = 92 -MOS65XX_INS_WAI = 93 -MOS65XX_INS_WDM = 94 -MOS65XX_INS_XBA = 95 -MOS65XX_INS_XCE = 96 -MOS65XX_INS_ENDING = 97 - -MOS65XX_GRP_INVALID = 0 -MOS65XX_GRP_JUMP = 1 -MOS65XX_GRP_CALL = 2 -MOS65XX_GRP_RET = 3 -MOS65XX_GRP_INT = 4 -MOS65XX_GRP_IRET = 5 -MOS65XX_GRP_BRANCH_RELATIVE = 6 -MOS65XX_GRP_ENDING = 7 - -MOS65XX_OP_INVALID = 0 -MOS65XX_OP_REG = 1 -MOS65XX_OP_IMM = 2 -MOS65XX_OP_MEM = 3 diff --git a/.tools/python-revlibs/capstone/ppc.py b/.tools/python-revlibs/capstone/ppc.py deleted file mode 100644 index 6ab177d..0000000 --- a/.tools/python-revlibs/capstone/ppc.py +++ /dev/null @@ -1,63 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .ppc_const import * - -# define the API -class PpcOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint), - ('disp', ctypes.c_int32), - ) - -class PpcOpCrx(ctypes.Structure): - _fields_ = ( - ('scale', ctypes.c_uint), - ('reg', ctypes.c_uint), - ('cond', ctypes.c_uint), - ) - -class PpcOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('mem', PpcOpMem), - ('crx', PpcOpCrx), - ) - -class PpcOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', PpcOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - @property - def crx(self): - return self.value.crx - - -class CsPpc(ctypes.Structure): - _fields_ = ( - ('bc', ctypes.c_uint), - ('bh', ctypes.c_uint), - ('update_cr0', ctypes.c_bool), - ('op_count', ctypes.c_uint8), - ('operands', PpcOp * 8), - ) - -def get_arch_info(a): - return (a.bc, a.bh, a.update_cr0, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/ppc_const.py b/.tools/python-revlibs/capstone/ppc_const.py deleted file mode 100644 index a8cd49d..0000000 --- a/.tools/python-revlibs/capstone/ppc_const.py +++ /dev/null @@ -1,2016 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [ppc_const.py] - -PPC_BC_INVALID = 0 -PPC_BC_LT = (0<<5)|12 -PPC_BC_LE = (1<<5)|4 -PPC_BC_EQ = (2<<5)|12 -PPC_BC_GE = (0<<5)|4 -PPC_BC_GT = (1<<5)|12 -PPC_BC_NE = (2<<5)|4 -PPC_BC_UN = (3<<5)|12 -PPC_BC_NU = (3<<5)|4 -PPC_BC_SO = (4<<5)|12 -PPC_BC_NS = (4<<5)|4 - -PPC_BH_INVALID = 0 -PPC_BH_PLUS = 1 -PPC_BH_MINUS = 2 - -PPC_OP_INVALID = 0 -PPC_OP_REG = 1 -PPC_OP_IMM = 2 -PPC_OP_MEM = 3 -PPC_OP_CRX = 64 - -PPC_REG_INVALID = 0 -PPC_REG_CARRY = 2 -PPC_REG_CTR = 3 -PPC_REG_LR = 5 -PPC_REG_RM = 6 -PPC_REG_VRSAVE = 8 -PPC_REG_XER = 9 -PPC_REG_ZERO = 10 -PPC_REG_CR0 = 12 -PPC_REG_CR1 = 13 -PPC_REG_CR2 = 14 -PPC_REG_CR3 = 15 -PPC_REG_CR4 = 16 -PPC_REG_CR5 = 17 -PPC_REG_CR6 = 18 -PPC_REG_CR7 = 19 -PPC_REG_CTR8 = 20 -PPC_REG_F0 = 21 -PPC_REG_F1 = 22 -PPC_REG_F2 = 23 -PPC_REG_F3 = 24 -PPC_REG_F4 = 25 -PPC_REG_F5 = 26 -PPC_REG_F6 = 27 -PPC_REG_F7 = 28 -PPC_REG_F8 = 29 -PPC_REG_F9 = 30 -PPC_REG_F10 = 31 -PPC_REG_F11 = 32 -PPC_REG_F12 = 33 -PPC_REG_F13 = 34 -PPC_REG_F14 = 35 -PPC_REG_F15 = 36 -PPC_REG_F16 = 37 -PPC_REG_F17 = 38 -PPC_REG_F18 = 39 -PPC_REG_F19 = 40 -PPC_REG_F20 = 41 -PPC_REG_F21 = 42 -PPC_REG_F22 = 43 -PPC_REG_F23 = 44 -PPC_REG_F24 = 45 -PPC_REG_F25 = 46 -PPC_REG_F26 = 47 -PPC_REG_F27 = 48 -PPC_REG_F28 = 49 -PPC_REG_F29 = 50 -PPC_REG_F30 = 51 -PPC_REG_F31 = 52 -PPC_REG_LR8 = 54 -PPC_REG_Q0 = 55 -PPC_REG_Q1 = 56 -PPC_REG_Q2 = 57 -PPC_REG_Q3 = 58 -PPC_REG_Q4 = 59 -PPC_REG_Q5 = 60 -PPC_REG_Q6 = 61 -PPC_REG_Q7 = 62 -PPC_REG_Q8 = 63 -PPC_REG_Q9 = 64 -PPC_REG_Q10 = 65 -PPC_REG_Q11 = 66 -PPC_REG_Q12 = 67 -PPC_REG_Q13 = 68 -PPC_REG_Q14 = 69 -PPC_REG_Q15 = 70 -PPC_REG_Q16 = 71 -PPC_REG_Q17 = 72 -PPC_REG_Q18 = 73 -PPC_REG_Q19 = 74 -PPC_REG_Q20 = 75 -PPC_REG_Q21 = 76 -PPC_REG_Q22 = 77 -PPC_REG_Q23 = 78 -PPC_REG_Q24 = 79 -PPC_REG_Q25 = 80 -PPC_REG_Q26 = 81 -PPC_REG_Q27 = 82 -PPC_REG_Q28 = 83 -PPC_REG_Q29 = 84 -PPC_REG_Q30 = 85 -PPC_REG_Q31 = 86 -PPC_REG_R0 = 87 -PPC_REG_R1 = 88 -PPC_REG_R2 = 89 -PPC_REG_R3 = 90 -PPC_REG_R4 = 91 -PPC_REG_R5 = 92 -PPC_REG_R6 = 93 -PPC_REG_R7 = 94 -PPC_REG_R8 = 95 -PPC_REG_R9 = 96 -PPC_REG_R10 = 97 -PPC_REG_R11 = 98 -PPC_REG_R12 = 99 -PPC_REG_R13 = 100 -PPC_REG_R14 = 101 -PPC_REG_R15 = 102 -PPC_REG_R16 = 103 -PPC_REG_R17 = 104 -PPC_REG_R18 = 105 -PPC_REG_R19 = 106 -PPC_REG_R20 = 107 -PPC_REG_R21 = 108 -PPC_REG_R22 = 109 -PPC_REG_R23 = 110 -PPC_REG_R24 = 111 -PPC_REG_R25 = 112 -PPC_REG_R26 = 113 -PPC_REG_R27 = 114 -PPC_REG_R28 = 115 -PPC_REG_R29 = 116 -PPC_REG_R30 = 117 -PPC_REG_R31 = 118 -PPC_REG_V0 = 151 -PPC_REG_V1 = 152 -PPC_REG_V2 = 153 -PPC_REG_V3 = 154 -PPC_REG_V4 = 155 -PPC_REG_V5 = 156 -PPC_REG_V6 = 157 -PPC_REG_V7 = 158 -PPC_REG_V8 = 159 -PPC_REG_V9 = 160 -PPC_REG_V10 = 161 -PPC_REG_V11 = 162 -PPC_REG_V12 = 163 -PPC_REG_V13 = 164 -PPC_REG_V14 = 165 -PPC_REG_V15 = 166 -PPC_REG_V16 = 167 -PPC_REG_V17 = 168 -PPC_REG_V18 = 169 -PPC_REG_V19 = 170 -PPC_REG_V20 = 171 -PPC_REG_V21 = 172 -PPC_REG_V22 = 173 -PPC_REG_V23 = 174 -PPC_REG_V24 = 175 -PPC_REG_V25 = 176 -PPC_REG_V26 = 177 -PPC_REG_V27 = 178 -PPC_REG_V28 = 179 -PPC_REG_V29 = 180 -PPC_REG_V30 = 181 -PPC_REG_V31 = 182 -PPC_REG_VS0 = 215 -PPC_REG_VS1 = 216 -PPC_REG_VS2 = 217 -PPC_REG_VS3 = 218 -PPC_REG_VS4 = 219 -PPC_REG_VS5 = 220 -PPC_REG_VS6 = 221 -PPC_REG_VS7 = 222 -PPC_REG_VS8 = 223 -PPC_REG_VS9 = 224 -PPC_REG_VS10 = 225 -PPC_REG_VS11 = 226 -PPC_REG_VS12 = 227 -PPC_REG_VS13 = 228 -PPC_REG_VS14 = 229 -PPC_REG_VS15 = 230 -PPC_REG_VS16 = 231 -PPC_REG_VS17 = 232 -PPC_REG_VS18 = 233 -PPC_REG_VS19 = 234 -PPC_REG_VS20 = 235 -PPC_REG_VS21 = 236 -PPC_REG_VS22 = 237 -PPC_REG_VS23 = 238 -PPC_REG_VS24 = 239 -PPC_REG_VS25 = 240 -PPC_REG_VS26 = 241 -PPC_REG_VS27 = 242 -PPC_REG_VS28 = 243 -PPC_REG_VS29 = 244 -PPC_REG_VS30 = 245 -PPC_REG_VS31 = 246 -PPC_REG_VS32 = 247 -PPC_REG_VS33 = 248 -PPC_REG_VS34 = 249 -PPC_REG_VS35 = 250 -PPC_REG_VS36 = 251 -PPC_REG_VS37 = 252 -PPC_REG_VS38 = 253 -PPC_REG_VS39 = 254 -PPC_REG_VS40 = 255 -PPC_REG_VS41 = 256 -PPC_REG_VS42 = 257 -PPC_REG_VS43 = 258 -PPC_REG_VS44 = 259 -PPC_REG_VS45 = 260 -PPC_REG_VS46 = 261 -PPC_REG_VS47 = 262 -PPC_REG_VS48 = 263 -PPC_REG_VS49 = 264 -PPC_REG_VS50 = 265 -PPC_REG_VS51 = 266 -PPC_REG_VS52 = 267 -PPC_REG_VS53 = 268 -PPC_REG_VS54 = 269 -PPC_REG_VS55 = 270 -PPC_REG_VS56 = 271 -PPC_REG_VS57 = 272 -PPC_REG_VS58 = 273 -PPC_REG_VS59 = 274 -PPC_REG_VS60 = 275 -PPC_REG_VS61 = 276 -PPC_REG_VS62 = 277 -PPC_REG_VS63 = 278 -PPC_REG_CR0EQ = 312 -PPC_REG_CR1EQ = 313 -PPC_REG_CR2EQ = 314 -PPC_REG_CR3EQ = 315 -PPC_REG_CR4EQ = 316 -PPC_REG_CR5EQ = 317 -PPC_REG_CR6EQ = 318 -PPC_REG_CR7EQ = 319 -PPC_REG_CR0GT = 320 -PPC_REG_CR1GT = 321 -PPC_REG_CR2GT = 322 -PPC_REG_CR3GT = 323 -PPC_REG_CR4GT = 324 -PPC_REG_CR5GT = 325 -PPC_REG_CR6GT = 326 -PPC_REG_CR7GT = 327 -PPC_REG_CR0LT = 328 -PPC_REG_CR1LT = 329 -PPC_REG_CR2LT = 330 -PPC_REG_CR3LT = 331 -PPC_REG_CR4LT = 332 -PPC_REG_CR5LT = 333 -PPC_REG_CR6LT = 334 -PPC_REG_CR7LT = 335 -PPC_REG_CR0UN = 336 -PPC_REG_CR1UN = 337 -PPC_REG_CR2UN = 338 -PPC_REG_CR3UN = 339 -PPC_REG_CR4UN = 340 -PPC_REG_CR5UN = 341 -PPC_REG_CR6UN = 342 -PPC_REG_CR7UN = 343 -PPC_REG_ENDING = 344 - -PPC_INS_INVALID = 0 -PPC_INS_ADD = 1 -PPC_INS_ADDC = 2 -PPC_INS_ADDE = 3 -PPC_INS_ADDI = 4 -PPC_INS_ADDIC = 5 -PPC_INS_ADDIS = 6 -PPC_INS_ADDME = 7 -PPC_INS_ADDPCIS = 8 -PPC_INS_ADDZE = 9 -PPC_INS_AND = 10 -PPC_INS_ANDC = 11 -PPC_INS_ANDI = 12 -PPC_INS_ANDIS = 13 -PPC_INS_ATTN = 14 -PPC_INS_B = 15 -PPC_INS_BA = 16 -PPC_INS_BC = 17 -PPC_INS_BCA = 18 -PPC_INS_BCCTR = 19 -PPC_INS_BCCTRL = 20 -PPC_INS_BCDCFN = 21 -PPC_INS_BCDCFSQ = 22 -PPC_INS_BCDCFZ = 23 -PPC_INS_BCDCPSGN = 24 -PPC_INS_BCDCTN = 25 -PPC_INS_BCDCTSQ = 26 -PPC_INS_BCDCTZ = 27 -PPC_INS_BCDS = 28 -PPC_INS_BCDSETSGN = 29 -PPC_INS_BCDSR = 30 -PPC_INS_BCDTRUNC = 31 -PPC_INS_BCDUS = 32 -PPC_INS_BCDUTRUNC = 33 -PPC_INS_BCL = 34 -PPC_INS_BCLA = 35 -PPC_INS_BCLR = 36 -PPC_INS_BCLRL = 37 -PPC_INS_BCTR = 38 -PPC_INS_BCTRL = 39 -PPC_INS_BDNZ = 40 -PPC_INS_BDNZA = 41 -PPC_INS_BDNZF = 42 -PPC_INS_BDNZFA = 43 -PPC_INS_BDNZFL = 44 -PPC_INS_BDNZFLA = 45 -PPC_INS_BDNZFLR = 46 -PPC_INS_BDNZFLRL = 47 -PPC_INS_BDNZL = 48 -PPC_INS_BDNZLA = 49 -PPC_INS_BDNZLR = 50 -PPC_INS_BDNZLRL = 51 -PPC_INS_BDNZT = 52 -PPC_INS_BDNZTA = 53 -PPC_INS_BDNZTL = 54 -PPC_INS_BDNZTLA = 55 -PPC_INS_BDNZTLR = 56 -PPC_INS_BDNZTLRL = 57 -PPC_INS_BDZ = 58 -PPC_INS_BDZA = 59 -PPC_INS_BDZF = 60 -PPC_INS_BDZFA = 61 -PPC_INS_BDZFL = 62 -PPC_INS_BDZFLA = 63 -PPC_INS_BDZFLR = 64 -PPC_INS_BDZFLRL = 65 -PPC_INS_BDZL = 66 -PPC_INS_BDZLA = 67 -PPC_INS_BDZLR = 68 -PPC_INS_BDZLRL = 69 -PPC_INS_BDZT = 70 -PPC_INS_BDZTA = 71 -PPC_INS_BDZTL = 72 -PPC_INS_BDZTLA = 73 -PPC_INS_BDZTLR = 74 -PPC_INS_BDZTLRL = 75 -PPC_INS_BEQ = 76 -PPC_INS_BEQA = 77 -PPC_INS_BEQCTR = 78 -PPC_INS_BEQCTRL = 79 -PPC_INS_BEQL = 80 -PPC_INS_BEQLA = 81 -PPC_INS_BEQLR = 82 -PPC_INS_BEQLRL = 83 -PPC_INS_BF = 84 -PPC_INS_BFA = 85 -PPC_INS_BFCTR = 86 -PPC_INS_BFCTRL = 87 -PPC_INS_BFL = 88 -PPC_INS_BFLA = 89 -PPC_INS_BFLR = 90 -PPC_INS_BFLRL = 91 -PPC_INS_BGE = 92 -PPC_INS_BGEA = 93 -PPC_INS_BGECTR = 94 -PPC_INS_BGECTRL = 95 -PPC_INS_BGEL = 96 -PPC_INS_BGELA = 97 -PPC_INS_BGELR = 98 -PPC_INS_BGELRL = 99 -PPC_INS_BGT = 100 -PPC_INS_BGTA = 101 -PPC_INS_BGTCTR = 102 -PPC_INS_BGTCTRL = 103 -PPC_INS_BGTL = 104 -PPC_INS_BGTLA = 105 -PPC_INS_BGTLR = 106 -PPC_INS_BGTLRL = 107 -PPC_INS_BL = 108 -PPC_INS_BLA = 109 -PPC_INS_BLE = 110 -PPC_INS_BLEA = 111 -PPC_INS_BLECTR = 112 -PPC_INS_BLECTRL = 113 -PPC_INS_BLEL = 114 -PPC_INS_BLELA = 115 -PPC_INS_BLELR = 116 -PPC_INS_BLELRL = 117 -PPC_INS_BLR = 118 -PPC_INS_BLRL = 119 -PPC_INS_BLT = 120 -PPC_INS_BLTA = 121 -PPC_INS_BLTCTR = 122 -PPC_INS_BLTCTRL = 123 -PPC_INS_BLTL = 124 -PPC_INS_BLTLA = 125 -PPC_INS_BLTLR = 126 -PPC_INS_BLTLRL = 127 -PPC_INS_BNE = 128 -PPC_INS_BNEA = 129 -PPC_INS_BNECTR = 130 -PPC_INS_BNECTRL = 131 -PPC_INS_BNEL = 132 -PPC_INS_BNELA = 133 -PPC_INS_BNELR = 134 -PPC_INS_BNELRL = 135 -PPC_INS_BNG = 136 -PPC_INS_BNGA = 137 -PPC_INS_BNGCTR = 138 -PPC_INS_BNGCTRL = 139 -PPC_INS_BNGL = 140 -PPC_INS_BNGLA = 141 -PPC_INS_BNGLR = 142 -PPC_INS_BNGLRL = 143 -PPC_INS_BNL = 144 -PPC_INS_BNLA = 145 -PPC_INS_BNLCTR = 146 -PPC_INS_BNLCTRL = 147 -PPC_INS_BNLL = 148 -PPC_INS_BNLLA = 149 -PPC_INS_BNLLR = 150 -PPC_INS_BNLLRL = 151 -PPC_INS_BNS = 152 -PPC_INS_BNSA = 153 -PPC_INS_BNSCTR = 154 -PPC_INS_BNSCTRL = 155 -PPC_INS_BNSL = 156 -PPC_INS_BNSLA = 157 -PPC_INS_BNSLR = 158 -PPC_INS_BNSLRL = 159 -PPC_INS_BNU = 160 -PPC_INS_BNUA = 161 -PPC_INS_BNUCTR = 162 -PPC_INS_BNUCTRL = 163 -PPC_INS_BNUL = 164 -PPC_INS_BNULA = 165 -PPC_INS_BNULR = 166 -PPC_INS_BNULRL = 167 -PPC_INS_BPERMD = 168 -PPC_INS_BRINC = 169 -PPC_INS_BSO = 170 -PPC_INS_BSOA = 171 -PPC_INS_BSOCTR = 172 -PPC_INS_BSOCTRL = 173 -PPC_INS_BSOL = 174 -PPC_INS_BSOLA = 175 -PPC_INS_BSOLR = 176 -PPC_INS_BSOLRL = 177 -PPC_INS_BT = 178 -PPC_INS_BTA = 179 -PPC_INS_BTCTR = 180 -PPC_INS_BTCTRL = 181 -PPC_INS_BTL = 182 -PPC_INS_BTLA = 183 -PPC_INS_BTLR = 184 -PPC_INS_BTLRL = 185 -PPC_INS_BUN = 186 -PPC_INS_BUNA = 187 -PPC_INS_BUNCTR = 188 -PPC_INS_BUNCTRL = 189 -PPC_INS_BUNL = 190 -PPC_INS_BUNLA = 191 -PPC_INS_BUNLR = 192 -PPC_INS_BUNLRL = 193 -PPC_INS_CLRBHRB = 194 -PPC_INS_CLRLDI = 195 -PPC_INS_CLRLSLDI = 196 -PPC_INS_CLRLSLWI = 197 -PPC_INS_CLRLWI = 198 -PPC_INS_CLRRDI = 199 -PPC_INS_CLRRWI = 200 -PPC_INS_CMP = 201 -PPC_INS_CMPB = 202 -PPC_INS_CMPD = 203 -PPC_INS_CMPDI = 204 -PPC_INS_CMPEQB = 205 -PPC_INS_CMPI = 206 -PPC_INS_CMPL = 207 -PPC_INS_CMPLD = 208 -PPC_INS_CMPLDI = 209 -PPC_INS_CMPLI = 210 -PPC_INS_CMPLW = 211 -PPC_INS_CMPLWI = 212 -PPC_INS_CMPRB = 213 -PPC_INS_CMPW = 214 -PPC_INS_CMPWI = 215 -PPC_INS_CNTLZD = 216 -PPC_INS_CNTLZW = 217 -PPC_INS_CNTTZD = 218 -PPC_INS_CNTTZW = 219 -PPC_INS_COPY = 220 -PPC_INS_COPY_FIRST = 221 -PPC_INS_CP_ABORT = 222 -PPC_INS_CRAND = 223 -PPC_INS_CRANDC = 224 -PPC_INS_CRCLR = 225 -PPC_INS_CREQV = 226 -PPC_INS_CRMOVE = 227 -PPC_INS_CRNAND = 228 -PPC_INS_CRNOR = 229 -PPC_INS_CRNOT = 230 -PPC_INS_CROR = 231 -PPC_INS_CRORC = 232 -PPC_INS_CRSET = 233 -PPC_INS_CRXOR = 234 -PPC_INS_DARN = 235 -PPC_INS_DCBA = 236 -PPC_INS_DCBF = 237 -PPC_INS_DCBFEP = 238 -PPC_INS_DCBFL = 239 -PPC_INS_DCBFLP = 240 -PPC_INS_DCBI = 241 -PPC_INS_DCBST = 242 -PPC_INS_DCBSTEP = 243 -PPC_INS_DCBT = 244 -PPC_INS_DCBTCT = 245 -PPC_INS_DCBTDS = 246 -PPC_INS_DCBTEP = 247 -PPC_INS_DCBTST = 248 -PPC_INS_DCBTSTCT = 249 -PPC_INS_DCBTSTDS = 250 -PPC_INS_DCBTSTEP = 251 -PPC_INS_DCBTSTT = 252 -PPC_INS_DCBTT = 253 -PPC_INS_DCBZ = 254 -PPC_INS_DCBZEP = 255 -PPC_INS_DCBZL = 256 -PPC_INS_DCBZLEP = 257 -PPC_INS_DCCCI = 258 -PPC_INS_DCI = 259 -PPC_INS_DIVD = 260 -PPC_INS_DIVDE = 261 -PPC_INS_DIVDEU = 262 -PPC_INS_DIVDU = 263 -PPC_INS_DIVW = 264 -PPC_INS_DIVWE = 265 -PPC_INS_DIVWEU = 266 -PPC_INS_DIVWU = 267 -PPC_INS_DSS = 268 -PPC_INS_DSSALL = 269 -PPC_INS_DST = 270 -PPC_INS_DSTST = 271 -PPC_INS_DSTSTT = 272 -PPC_INS_DSTT = 273 -PPC_INS_EFDABS = 274 -PPC_INS_EFDADD = 275 -PPC_INS_EFDCFS = 276 -PPC_INS_EFDCFSF = 277 -PPC_INS_EFDCFSI = 278 -PPC_INS_EFDCFSID = 279 -PPC_INS_EFDCFUF = 280 -PPC_INS_EFDCFUI = 281 -PPC_INS_EFDCFUID = 282 -PPC_INS_EFDCMPEQ = 283 -PPC_INS_EFDCMPGT = 284 -PPC_INS_EFDCMPLT = 285 -PPC_INS_EFDCTSF = 286 -PPC_INS_EFDCTSI = 287 -PPC_INS_EFDCTSIDZ = 288 -PPC_INS_EFDCTSIZ = 289 -PPC_INS_EFDCTUF = 290 -PPC_INS_EFDCTUI = 291 -PPC_INS_EFDCTUIDZ = 292 -PPC_INS_EFDCTUIZ = 293 -PPC_INS_EFDDIV = 294 -PPC_INS_EFDMUL = 295 -PPC_INS_EFDNABS = 296 -PPC_INS_EFDNEG = 297 -PPC_INS_EFDSUB = 298 -PPC_INS_EFDTSTEQ = 299 -PPC_INS_EFDTSTGT = 300 -PPC_INS_EFDTSTLT = 301 -PPC_INS_EFSABS = 302 -PPC_INS_EFSADD = 303 -PPC_INS_EFSCFD = 304 -PPC_INS_EFSCFSF = 305 -PPC_INS_EFSCFSI = 306 -PPC_INS_EFSCFUF = 307 -PPC_INS_EFSCFUI = 308 -PPC_INS_EFSCMPEQ = 309 -PPC_INS_EFSCMPGT = 310 -PPC_INS_EFSCMPLT = 311 -PPC_INS_EFSCTSF = 312 -PPC_INS_EFSCTSI = 313 -PPC_INS_EFSCTSIZ = 314 -PPC_INS_EFSCTUF = 315 -PPC_INS_EFSCTUI = 316 -PPC_INS_EFSCTUIZ = 317 -PPC_INS_EFSDIV = 318 -PPC_INS_EFSMUL = 319 -PPC_INS_EFSNABS = 320 -PPC_INS_EFSNEG = 321 -PPC_INS_EFSSUB = 322 -PPC_INS_EFSTSTEQ = 323 -PPC_INS_EFSTSTGT = 324 -PPC_INS_EFSTSTLT = 325 -PPC_INS_EIEIO = 326 -PPC_INS_EQV = 327 -PPC_INS_EVABS = 328 -PPC_INS_EVADDIW = 329 -PPC_INS_EVADDSMIAAW = 330 -PPC_INS_EVADDSSIAAW = 331 -PPC_INS_EVADDUMIAAW = 332 -PPC_INS_EVADDUSIAAW = 333 -PPC_INS_EVADDW = 334 -PPC_INS_EVAND = 335 -PPC_INS_EVANDC = 336 -PPC_INS_EVCMPEQ = 337 -PPC_INS_EVCMPGTS = 338 -PPC_INS_EVCMPGTU = 339 -PPC_INS_EVCMPLTS = 340 -PPC_INS_EVCMPLTU = 341 -PPC_INS_EVCNTLSW = 342 -PPC_INS_EVCNTLZW = 343 -PPC_INS_EVDIVWS = 344 -PPC_INS_EVDIVWU = 345 -PPC_INS_EVEQV = 346 -PPC_INS_EVEXTSB = 347 -PPC_INS_EVEXTSH = 348 -PPC_INS_EVFSABS = 349 -PPC_INS_EVFSADD = 350 -PPC_INS_EVFSCFSF = 351 -PPC_INS_EVFSCFSI = 352 -PPC_INS_EVFSCFUF = 353 -PPC_INS_EVFSCFUI = 354 -PPC_INS_EVFSCMPEQ = 355 -PPC_INS_EVFSCMPGT = 356 -PPC_INS_EVFSCMPLT = 357 -PPC_INS_EVFSCTSF = 358 -PPC_INS_EVFSCTSI = 359 -PPC_INS_EVFSCTSIZ = 360 -PPC_INS_EVFSCTUI = 361 -PPC_INS_EVFSDIV = 362 -PPC_INS_EVFSMUL = 363 -PPC_INS_EVFSNABS = 364 -PPC_INS_EVFSNEG = 365 -PPC_INS_EVFSSUB = 366 -PPC_INS_EVFSTSTEQ = 367 -PPC_INS_EVFSTSTGT = 368 -PPC_INS_EVFSTSTLT = 369 -PPC_INS_EVLDD = 370 -PPC_INS_EVLDDX = 371 -PPC_INS_EVLDH = 372 -PPC_INS_EVLDHX = 373 -PPC_INS_EVLDW = 374 -PPC_INS_EVLDWX = 375 -PPC_INS_EVLHHESPLAT = 376 -PPC_INS_EVLHHESPLATX = 377 -PPC_INS_EVLHHOSSPLAT = 378 -PPC_INS_EVLHHOSSPLATX = 379 -PPC_INS_EVLHHOUSPLAT = 380 -PPC_INS_EVLHHOUSPLATX = 381 -PPC_INS_EVLWHE = 382 -PPC_INS_EVLWHEX = 383 -PPC_INS_EVLWHOS = 384 -PPC_INS_EVLWHOSX = 385 -PPC_INS_EVLWHOU = 386 -PPC_INS_EVLWHOUX = 387 -PPC_INS_EVLWHSPLAT = 388 -PPC_INS_EVLWHSPLATX = 389 -PPC_INS_EVLWWSPLAT = 390 -PPC_INS_EVLWWSPLATX = 391 -PPC_INS_EVMERGEHI = 392 -PPC_INS_EVMERGEHILO = 393 -PPC_INS_EVMERGELO = 394 -PPC_INS_EVMERGELOHI = 395 -PPC_INS_EVMHEGSMFAA = 396 -PPC_INS_EVMHEGSMFAN = 397 -PPC_INS_EVMHEGSMIAA = 398 -PPC_INS_EVMHEGSMIAN = 399 -PPC_INS_EVMHEGUMIAA = 400 -PPC_INS_EVMHEGUMIAN = 401 -PPC_INS_EVMHESMF = 402 -PPC_INS_EVMHESMFA = 403 -PPC_INS_EVMHESMFAAW = 404 -PPC_INS_EVMHESMFANW = 405 -PPC_INS_EVMHESMI = 406 -PPC_INS_EVMHESMIA = 407 -PPC_INS_EVMHESMIAAW = 408 -PPC_INS_EVMHESMIANW = 409 -PPC_INS_EVMHESSF = 410 -PPC_INS_EVMHESSFA = 411 -PPC_INS_EVMHESSFAAW = 412 -PPC_INS_EVMHESSFANW = 413 -PPC_INS_EVMHESSIAAW = 414 -PPC_INS_EVMHESSIANW = 415 -PPC_INS_EVMHEUMI = 416 -PPC_INS_EVMHEUMIA = 417 -PPC_INS_EVMHEUMIAAW = 418 -PPC_INS_EVMHEUMIANW = 419 -PPC_INS_EVMHEUSIAAW = 420 -PPC_INS_EVMHEUSIANW = 421 -PPC_INS_EVMHOGSMFAA = 422 -PPC_INS_EVMHOGSMFAN = 423 -PPC_INS_EVMHOGSMIAA = 424 -PPC_INS_EVMHOGSMIAN = 425 -PPC_INS_EVMHOGUMIAA = 426 -PPC_INS_EVMHOGUMIAN = 427 -PPC_INS_EVMHOSMF = 428 -PPC_INS_EVMHOSMFA = 429 -PPC_INS_EVMHOSMFAAW = 430 -PPC_INS_EVMHOSMFANW = 431 -PPC_INS_EVMHOSMI = 432 -PPC_INS_EVMHOSMIA = 433 -PPC_INS_EVMHOSMIAAW = 434 -PPC_INS_EVMHOSMIANW = 435 -PPC_INS_EVMHOSSF = 436 -PPC_INS_EVMHOSSFA = 437 -PPC_INS_EVMHOSSFAAW = 438 -PPC_INS_EVMHOSSFANW = 439 -PPC_INS_EVMHOSSIAAW = 440 -PPC_INS_EVMHOSSIANW = 441 -PPC_INS_EVMHOUMI = 442 -PPC_INS_EVMHOUMIA = 443 -PPC_INS_EVMHOUMIAAW = 444 -PPC_INS_EVMHOUMIANW = 445 -PPC_INS_EVMHOUSIAAW = 446 -PPC_INS_EVMHOUSIANW = 447 -PPC_INS_EVMRA = 448 -PPC_INS_EVMWHSMF = 449 -PPC_INS_EVMWHSMFA = 450 -PPC_INS_EVMWHSMI = 451 -PPC_INS_EVMWHSMIA = 452 -PPC_INS_EVMWHSSF = 453 -PPC_INS_EVMWHSSFA = 454 -PPC_INS_EVMWHUMI = 455 -PPC_INS_EVMWHUMIA = 456 -PPC_INS_EVMWLSMIAAW = 457 -PPC_INS_EVMWLSMIANW = 458 -PPC_INS_EVMWLSSIAAW = 459 -PPC_INS_EVMWLSSIANW = 460 -PPC_INS_EVMWLUMI = 461 -PPC_INS_EVMWLUMIA = 462 -PPC_INS_EVMWLUMIAAW = 463 -PPC_INS_EVMWLUMIANW = 464 -PPC_INS_EVMWLUSIAAW = 465 -PPC_INS_EVMWLUSIANW = 466 -PPC_INS_EVMWSMF = 467 -PPC_INS_EVMWSMFA = 468 -PPC_INS_EVMWSMFAA = 469 -PPC_INS_EVMWSMFAN = 470 -PPC_INS_EVMWSMI = 471 -PPC_INS_EVMWSMIA = 472 -PPC_INS_EVMWSMIAA = 473 -PPC_INS_EVMWSMIAN = 474 -PPC_INS_EVMWSSF = 475 -PPC_INS_EVMWSSFA = 476 -PPC_INS_EVMWSSFAA = 477 -PPC_INS_EVMWSSFAN = 478 -PPC_INS_EVMWUMI = 479 -PPC_INS_EVMWUMIA = 480 -PPC_INS_EVMWUMIAA = 481 -PPC_INS_EVMWUMIAN = 482 -PPC_INS_EVNAND = 483 -PPC_INS_EVNEG = 484 -PPC_INS_EVNOR = 485 -PPC_INS_EVOR = 486 -PPC_INS_EVORC = 487 -PPC_INS_EVRLW = 488 -PPC_INS_EVRLWI = 489 -PPC_INS_EVRNDW = 490 -PPC_INS_EVSEL = 491 -PPC_INS_EVSLW = 492 -PPC_INS_EVSLWI = 493 -PPC_INS_EVSPLATFI = 494 -PPC_INS_EVSPLATI = 495 -PPC_INS_EVSRWIS = 496 -PPC_INS_EVSRWIU = 497 -PPC_INS_EVSRWS = 498 -PPC_INS_EVSRWU = 499 -PPC_INS_EVSTDD = 500 -PPC_INS_EVSTDDX = 501 -PPC_INS_EVSTDH = 502 -PPC_INS_EVSTDHX = 503 -PPC_INS_EVSTDW = 504 -PPC_INS_EVSTDWX = 505 -PPC_INS_EVSTWHE = 506 -PPC_INS_EVSTWHEX = 507 -PPC_INS_EVSTWHO = 508 -PPC_INS_EVSTWHOX = 509 -PPC_INS_EVSTWWE = 510 -PPC_INS_EVSTWWEX = 511 -PPC_INS_EVSTWWO = 512 -PPC_INS_EVSTWWOX = 513 -PPC_INS_EVSUBFSMIAAW = 514 -PPC_INS_EVSUBFSSIAAW = 515 -PPC_INS_EVSUBFUMIAAW = 516 -PPC_INS_EVSUBFUSIAAW = 517 -PPC_INS_EVSUBFW = 518 -PPC_INS_EVSUBIFW = 519 -PPC_INS_EVXOR = 520 -PPC_INS_EXTLDI = 521 -PPC_INS_EXTLWI = 522 -PPC_INS_EXTRDI = 523 -PPC_INS_EXTRWI = 524 -PPC_INS_EXTSB = 525 -PPC_INS_EXTSH = 526 -PPC_INS_EXTSW = 527 -PPC_INS_EXTSWSLI = 528 -PPC_INS_FABS = 529 -PPC_INS_FADD = 530 -PPC_INS_FADDS = 531 -PPC_INS_FCFID = 532 -PPC_INS_FCFIDS = 533 -PPC_INS_FCFIDU = 534 -PPC_INS_FCFIDUS = 535 -PPC_INS_FCMPU = 536 -PPC_INS_FCPSGN = 537 -PPC_INS_FCTID = 538 -PPC_INS_FCTIDU = 539 -PPC_INS_FCTIDUZ = 540 -PPC_INS_FCTIDZ = 541 -PPC_INS_FCTIW = 542 -PPC_INS_FCTIWU = 543 -PPC_INS_FCTIWUZ = 544 -PPC_INS_FCTIWZ = 545 -PPC_INS_FDIV = 546 -PPC_INS_FDIVS = 547 -PPC_INS_FMADD = 548 -PPC_INS_FMADDS = 549 -PPC_INS_FMR = 550 -PPC_INS_FMSUB = 551 -PPC_INS_FMSUBS = 552 -PPC_INS_FMUL = 553 -PPC_INS_FMULS = 554 -PPC_INS_FNABS = 555 -PPC_INS_FNEG = 556 -PPC_INS_FNMADD = 557 -PPC_INS_FNMADDS = 558 -PPC_INS_FNMSUB = 559 -PPC_INS_FNMSUBS = 560 -PPC_INS_FRE = 561 -PPC_INS_FRES = 562 -PPC_INS_FRIM = 563 -PPC_INS_FRIN = 564 -PPC_INS_FRIP = 565 -PPC_INS_FRIZ = 566 -PPC_INS_FRSP = 567 -PPC_INS_FRSQRTE = 568 -PPC_INS_FRSQRTES = 569 -PPC_INS_FSEL = 570 -PPC_INS_FSQRT = 571 -PPC_INS_FSQRTS = 572 -PPC_INS_FSUB = 573 -PPC_INS_FSUBS = 574 -PPC_INS_FTDIV = 575 -PPC_INS_FTSQRT = 576 -PPC_INS_HRFID = 577 -PPC_INS_ICBI = 578 -PPC_INS_ICBIEP = 579 -PPC_INS_ICBLC = 580 -PPC_INS_ICBLQ = 581 -PPC_INS_ICBT = 582 -PPC_INS_ICBTLS = 583 -PPC_INS_ICCCI = 584 -PPC_INS_ICI = 585 -PPC_INS_INSLWI = 586 -PPC_INS_INSRDI = 587 -PPC_INS_INSRWI = 588 -PPC_INS_ISEL = 589 -PPC_INS_ISYNC = 590 -PPC_INS_LA = 591 -PPC_INS_LBARX = 592 -PPC_INS_LBEPX = 593 -PPC_INS_LBZ = 594 -PPC_INS_LBZCIX = 595 -PPC_INS_LBZU = 596 -PPC_INS_LBZUX = 597 -PPC_INS_LBZX = 598 -PPC_INS_LD = 599 -PPC_INS_LDARX = 600 -PPC_INS_LDAT = 601 -PPC_INS_LDBRX = 602 -PPC_INS_LDCIX = 603 -PPC_INS_LDMX = 604 -PPC_INS_LDU = 605 -PPC_INS_LDUX = 606 -PPC_INS_LDX = 607 -PPC_INS_LFD = 608 -PPC_INS_LFDEPX = 609 -PPC_INS_LFDU = 610 -PPC_INS_LFDUX = 611 -PPC_INS_LFDX = 612 -PPC_INS_LFIWAX = 613 -PPC_INS_LFIWZX = 614 -PPC_INS_LFS = 615 -PPC_INS_LFSU = 616 -PPC_INS_LFSUX = 617 -PPC_INS_LFSX = 618 -PPC_INS_LHA = 619 -PPC_INS_LHARX = 620 -PPC_INS_LHAU = 621 -PPC_INS_LHAUX = 622 -PPC_INS_LHAX = 623 -PPC_INS_LHBRX = 624 -PPC_INS_LHEPX = 625 -PPC_INS_LHZ = 626 -PPC_INS_LHZCIX = 627 -PPC_INS_LHZU = 628 -PPC_INS_LHZUX = 629 -PPC_INS_LHZX = 630 -PPC_INS_LI = 631 -PPC_INS_LIS = 632 -PPC_INS_LMW = 633 -PPC_INS_LNIA = 634 -PPC_INS_LSWI = 635 -PPC_INS_LVEBX = 636 -PPC_INS_LVEHX = 637 -PPC_INS_LVEWX = 638 -PPC_INS_LVSL = 639 -PPC_INS_LVSR = 640 -PPC_INS_LVX = 641 -PPC_INS_LVXL = 642 -PPC_INS_LWA = 643 -PPC_INS_LWARX = 644 -PPC_INS_LWAT = 645 -PPC_INS_LWAUX = 646 -PPC_INS_LWAX = 647 -PPC_INS_LWBRX = 648 -PPC_INS_LWEPX = 649 -PPC_INS_LWSYNC = 650 -PPC_INS_LWZ = 651 -PPC_INS_LWZCIX = 652 -PPC_INS_LWZU = 653 -PPC_INS_LWZUX = 654 -PPC_INS_LWZX = 655 -PPC_INS_LXSD = 656 -PPC_INS_LXSDX = 657 -PPC_INS_LXSIBZX = 658 -PPC_INS_LXSIHZX = 659 -PPC_INS_LXSIWAX = 660 -PPC_INS_LXSIWZX = 661 -PPC_INS_LXSSP = 662 -PPC_INS_LXSSPX = 663 -PPC_INS_LXV = 664 -PPC_INS_LXVB16X = 665 -PPC_INS_LXVD2X = 666 -PPC_INS_LXVDSX = 667 -PPC_INS_LXVH8X = 668 -PPC_INS_LXVL = 669 -PPC_INS_LXVLL = 670 -PPC_INS_LXVW4X = 671 -PPC_INS_LXVWSX = 672 -PPC_INS_LXVX = 673 -PPC_INS_MADDHD = 674 -PPC_INS_MADDHDU = 675 -PPC_INS_MADDLD = 676 -PPC_INS_MBAR = 677 -PPC_INS_MCRF = 678 -PPC_INS_MCRFS = 679 -PPC_INS_MCRXRX = 680 -PPC_INS_MFAMR = 681 -PPC_INS_MFASR = 682 -PPC_INS_MFBHRBE = 683 -PPC_INS_MFBR0 = 684 -PPC_INS_MFBR1 = 685 -PPC_INS_MFBR2 = 686 -PPC_INS_MFBR3 = 687 -PPC_INS_MFBR4 = 688 -PPC_INS_MFBR5 = 689 -PPC_INS_MFBR6 = 690 -PPC_INS_MFBR7 = 691 -PPC_INS_MFCFAR = 692 -PPC_INS_MFCR = 693 -PPC_INS_MFCTR = 694 -PPC_INS_MFDAR = 695 -PPC_INS_MFDBATL = 696 -PPC_INS_MFDBATU = 697 -PPC_INS_MFDCCR = 698 -PPC_INS_MFDCR = 699 -PPC_INS_MFDEAR = 700 -PPC_INS_MFDEC = 701 -PPC_INS_MFDSCR = 702 -PPC_INS_MFDSISR = 703 -PPC_INS_MFESR = 704 -PPC_INS_MFFPRD = 705 -PPC_INS_MFFS = 706 -PPC_INS_MFFSCDRN = 707 -PPC_INS_MFFSCDRNI = 708 -PPC_INS_MFFSCE = 709 -PPC_INS_MFFSCRN = 710 -PPC_INS_MFFSCRNI = 711 -PPC_INS_MFFSL = 712 -PPC_INS_MFIBATL = 713 -PPC_INS_MFIBATU = 714 -PPC_INS_MFICCR = 715 -PPC_INS_MFLR = 716 -PPC_INS_MFMSR = 717 -PPC_INS_MFOCRF = 718 -PPC_INS_MFPID = 719 -PPC_INS_MFPMR = 720 -PPC_INS_MFPVR = 721 -PPC_INS_MFRTCL = 722 -PPC_INS_MFRTCU = 723 -PPC_INS_MFSDR1 = 724 -PPC_INS_MFSPEFSCR = 725 -PPC_INS_MFSPR = 726 -PPC_INS_MFSPRG = 727 -PPC_INS_MFSPRG0 = 728 -PPC_INS_MFSPRG1 = 729 -PPC_INS_MFSPRG2 = 730 -PPC_INS_MFSPRG3 = 731 -PPC_INS_MFSPRG4 = 732 -PPC_INS_MFSPRG5 = 733 -PPC_INS_MFSPRG6 = 734 -PPC_INS_MFSPRG7 = 735 -PPC_INS_MFSR = 736 -PPC_INS_MFSRIN = 737 -PPC_INS_MFSRR0 = 738 -PPC_INS_MFSRR1 = 739 -PPC_INS_MFSRR2 = 740 -PPC_INS_MFSRR3 = 741 -PPC_INS_MFTB = 742 -PPC_INS_MFTBHI = 743 -PPC_INS_MFTBL = 744 -PPC_INS_MFTBLO = 745 -PPC_INS_MFTBU = 746 -PPC_INS_MFTCR = 747 -PPC_INS_MFVRD = 748 -PPC_INS_MFVRSAVE = 749 -PPC_INS_MFVSCR = 750 -PPC_INS_MFVSRD = 751 -PPC_INS_MFVSRLD = 752 -PPC_INS_MFVSRWZ = 753 -PPC_INS_MFXER = 754 -PPC_INS_MODSD = 755 -PPC_INS_MODSW = 756 -PPC_INS_MODUD = 757 -PPC_INS_MODUW = 758 -PPC_INS_MR = 759 -PPC_INS_MSGSYNC = 760 -PPC_INS_MSYNC = 761 -PPC_INS_MTAMR = 762 -PPC_INS_MTASR = 763 -PPC_INS_MTBR0 = 764 -PPC_INS_MTBR1 = 765 -PPC_INS_MTBR2 = 766 -PPC_INS_MTBR3 = 767 -PPC_INS_MTBR4 = 768 -PPC_INS_MTBR5 = 769 -PPC_INS_MTBR6 = 770 -PPC_INS_MTBR7 = 771 -PPC_INS_MTCFAR = 772 -PPC_INS_MTCR = 773 -PPC_INS_MTCRF = 774 -PPC_INS_MTCTR = 775 -PPC_INS_MTDAR = 776 -PPC_INS_MTDBATL = 777 -PPC_INS_MTDBATU = 778 -PPC_INS_MTDCCR = 779 -PPC_INS_MTDCR = 780 -PPC_INS_MTDEAR = 781 -PPC_INS_MTDEC = 782 -PPC_INS_MTDSCR = 783 -PPC_INS_MTDSISR = 784 -PPC_INS_MTESR = 785 -PPC_INS_MTFSB0 = 786 -PPC_INS_MTFSB1 = 787 -PPC_INS_MTFSF = 788 -PPC_INS_MTFSFI = 789 -PPC_INS_MTIBATL = 790 -PPC_INS_MTIBATU = 791 -PPC_INS_MTICCR = 792 -PPC_INS_MTLR = 793 -PPC_INS_MTMSR = 794 -PPC_INS_MTMSRD = 795 -PPC_INS_MTOCRF = 796 -PPC_INS_MTPID = 797 -PPC_INS_MTPMR = 798 -PPC_INS_MTSDR1 = 799 -PPC_INS_MTSPEFSCR = 800 -PPC_INS_MTSPR = 801 -PPC_INS_MTSPRG = 802 -PPC_INS_MTSPRG0 = 803 -PPC_INS_MTSPRG1 = 804 -PPC_INS_MTSPRG2 = 805 -PPC_INS_MTSPRG3 = 806 -PPC_INS_MTSPRG4 = 807 -PPC_INS_MTSPRG5 = 808 -PPC_INS_MTSPRG6 = 809 -PPC_INS_MTSPRG7 = 810 -PPC_INS_MTSR = 811 -PPC_INS_MTSRIN = 812 -PPC_INS_MTSRR0 = 813 -PPC_INS_MTSRR1 = 814 -PPC_INS_MTSRR2 = 815 -PPC_INS_MTSRR3 = 816 -PPC_INS_MTTBHI = 817 -PPC_INS_MTTBL = 818 -PPC_INS_MTTBLO = 819 -PPC_INS_MTTBU = 820 -PPC_INS_MTTCR = 821 -PPC_INS_MTVRSAVE = 822 -PPC_INS_MTVSCR = 823 -PPC_INS_MTVSRD = 824 -PPC_INS_MTVSRDD = 825 -PPC_INS_MTVSRWA = 826 -PPC_INS_MTVSRWS = 827 -PPC_INS_MTVSRWZ = 828 -PPC_INS_MTXER = 829 -PPC_INS_MULHD = 830 -PPC_INS_MULHDU = 831 -PPC_INS_MULHW = 832 -PPC_INS_MULHWU = 833 -PPC_INS_MULLD = 834 -PPC_INS_MULLI = 835 -PPC_INS_MULLW = 836 -PPC_INS_NAND = 837 -PPC_INS_NAP = 838 -PPC_INS_NEG = 839 -PPC_INS_NOP = 840 -PPC_INS_NOR = 841 -PPC_INS_NOT = 842 -PPC_INS_OR = 843 -PPC_INS_ORC = 844 -PPC_INS_ORI = 845 -PPC_INS_ORIS = 846 -PPC_INS_PASTE = 847 -PPC_INS_PASTE_LAST = 848 -PPC_INS_POPCNTB = 849 -PPC_INS_POPCNTD = 850 -PPC_INS_POPCNTW = 851 -PPC_INS_PTESYNC = 852 -PPC_INS_QVALIGNI = 853 -PPC_INS_QVESPLATI = 854 -PPC_INS_QVFABS = 855 -PPC_INS_QVFADD = 856 -PPC_INS_QVFADDS = 857 -PPC_INS_QVFAND = 858 -PPC_INS_QVFANDC = 859 -PPC_INS_QVFCFID = 860 -PPC_INS_QVFCFIDS = 861 -PPC_INS_QVFCFIDU = 862 -PPC_INS_QVFCFIDUS = 863 -PPC_INS_QVFCLR = 864 -PPC_INS_QVFCMPEQ = 865 -PPC_INS_QVFCMPGT = 866 -PPC_INS_QVFCMPLT = 867 -PPC_INS_QVFCPSGN = 868 -PPC_INS_QVFCTFB = 869 -PPC_INS_QVFCTID = 870 -PPC_INS_QVFCTIDU = 871 -PPC_INS_QVFCTIDUZ = 872 -PPC_INS_QVFCTIDZ = 873 -PPC_INS_QVFCTIW = 874 -PPC_INS_QVFCTIWU = 875 -PPC_INS_QVFCTIWUZ = 876 -PPC_INS_QVFCTIWZ = 877 -PPC_INS_QVFEQU = 878 -PPC_INS_QVFLOGICAL = 879 -PPC_INS_QVFMADD = 880 -PPC_INS_QVFMADDS = 881 -PPC_INS_QVFMR = 882 -PPC_INS_QVFMSUB = 883 -PPC_INS_QVFMSUBS = 884 -PPC_INS_QVFMUL = 885 -PPC_INS_QVFMULS = 886 -PPC_INS_QVFNABS = 887 -PPC_INS_QVFNAND = 888 -PPC_INS_QVFNEG = 889 -PPC_INS_QVFNMADD = 890 -PPC_INS_QVFNMADDS = 891 -PPC_INS_QVFNMSUB = 892 -PPC_INS_QVFNMSUBS = 893 -PPC_INS_QVFNOR = 894 -PPC_INS_QVFNOT = 895 -PPC_INS_QVFOR = 896 -PPC_INS_QVFORC = 897 -PPC_INS_QVFPERM = 898 -PPC_INS_QVFRE = 899 -PPC_INS_QVFRES = 900 -PPC_INS_QVFRIM = 901 -PPC_INS_QVFRIN = 902 -PPC_INS_QVFRIP = 903 -PPC_INS_QVFRIZ = 904 -PPC_INS_QVFRSP = 905 -PPC_INS_QVFRSQRTE = 906 -PPC_INS_QVFRSQRTES = 907 -PPC_INS_QVFSEL = 908 -PPC_INS_QVFSET = 909 -PPC_INS_QVFSUB = 910 -PPC_INS_QVFSUBS = 911 -PPC_INS_QVFTSTNAN = 912 -PPC_INS_QVFXMADD = 913 -PPC_INS_QVFXMADDS = 914 -PPC_INS_QVFXMUL = 915 -PPC_INS_QVFXMULS = 916 -PPC_INS_QVFXOR = 917 -PPC_INS_QVFXXCPNMADD = 918 -PPC_INS_QVFXXCPNMADDS = 919 -PPC_INS_QVFXXMADD = 920 -PPC_INS_QVFXXMADDS = 921 -PPC_INS_QVFXXNPMADD = 922 -PPC_INS_QVFXXNPMADDS = 923 -PPC_INS_QVGPCI = 924 -PPC_INS_QVLFCDUX = 925 -PPC_INS_QVLFCDUXA = 926 -PPC_INS_QVLFCDX = 927 -PPC_INS_QVLFCDXA = 928 -PPC_INS_QVLFCSUX = 929 -PPC_INS_QVLFCSUXA = 930 -PPC_INS_QVLFCSX = 931 -PPC_INS_QVLFCSXA = 932 -PPC_INS_QVLFDUX = 933 -PPC_INS_QVLFDUXA = 934 -PPC_INS_QVLFDX = 935 -PPC_INS_QVLFDXA = 936 -PPC_INS_QVLFIWAX = 937 -PPC_INS_QVLFIWAXA = 938 -PPC_INS_QVLFIWZX = 939 -PPC_INS_QVLFIWZXA = 940 -PPC_INS_QVLFSUX = 941 -PPC_INS_QVLFSUXA = 942 -PPC_INS_QVLFSX = 943 -PPC_INS_QVLFSXA = 944 -PPC_INS_QVLPCLDX = 945 -PPC_INS_QVLPCLSX = 946 -PPC_INS_QVLPCRDX = 947 -PPC_INS_QVLPCRSX = 948 -PPC_INS_QVSTFCDUX = 949 -PPC_INS_QVSTFCDUXA = 950 -PPC_INS_QVSTFCDUXI = 951 -PPC_INS_QVSTFCDUXIA = 952 -PPC_INS_QVSTFCDX = 953 -PPC_INS_QVSTFCDXA = 954 -PPC_INS_QVSTFCDXI = 955 -PPC_INS_QVSTFCDXIA = 956 -PPC_INS_QVSTFCSUX = 957 -PPC_INS_QVSTFCSUXA = 958 -PPC_INS_QVSTFCSUXI = 959 -PPC_INS_QVSTFCSUXIA = 960 -PPC_INS_QVSTFCSX = 961 -PPC_INS_QVSTFCSXA = 962 -PPC_INS_QVSTFCSXI = 963 -PPC_INS_QVSTFCSXIA = 964 -PPC_INS_QVSTFDUX = 965 -PPC_INS_QVSTFDUXA = 966 -PPC_INS_QVSTFDUXI = 967 -PPC_INS_QVSTFDUXIA = 968 -PPC_INS_QVSTFDX = 969 -PPC_INS_QVSTFDXA = 970 -PPC_INS_QVSTFDXI = 971 -PPC_INS_QVSTFDXIA = 972 -PPC_INS_QVSTFIWX = 973 -PPC_INS_QVSTFIWXA = 974 -PPC_INS_QVSTFSUX = 975 -PPC_INS_QVSTFSUXA = 976 -PPC_INS_QVSTFSUXI = 977 -PPC_INS_QVSTFSUXIA = 978 -PPC_INS_QVSTFSX = 979 -PPC_INS_QVSTFSXA = 980 -PPC_INS_QVSTFSXI = 981 -PPC_INS_QVSTFSXIA = 982 -PPC_INS_RFCI = 983 -PPC_INS_RFDI = 984 -PPC_INS_RFEBB = 985 -PPC_INS_RFI = 986 -PPC_INS_RFID = 987 -PPC_INS_RFMCI = 988 -PPC_INS_RLDCL = 989 -PPC_INS_RLDCR = 990 -PPC_INS_RLDIC = 991 -PPC_INS_RLDICL = 992 -PPC_INS_RLDICR = 993 -PPC_INS_RLDIMI = 994 -PPC_INS_RLWIMI = 995 -PPC_INS_RLWINM = 996 -PPC_INS_RLWNM = 997 -PPC_INS_ROTLD = 998 -PPC_INS_ROTLDI = 999 -PPC_INS_ROTLW = 1000 -PPC_INS_ROTLWI = 1001 -PPC_INS_ROTRDI = 1002 -PPC_INS_ROTRWI = 1003 -PPC_INS_SC = 1004 -PPC_INS_SETB = 1005 -PPC_INS_SLBIA = 1006 -PPC_INS_SLBIE = 1007 -PPC_INS_SLBIEG = 1008 -PPC_INS_SLBMFEE = 1009 -PPC_INS_SLBMFEV = 1010 -PPC_INS_SLBMTE = 1011 -PPC_INS_SLBSYNC = 1012 -PPC_INS_SLD = 1013 -PPC_INS_SLDI = 1014 -PPC_INS_SLW = 1015 -PPC_INS_SLWI = 1016 -PPC_INS_SRAD = 1017 -PPC_INS_SRADI = 1018 -PPC_INS_SRAW = 1019 -PPC_INS_SRAWI = 1020 -PPC_INS_SRD = 1021 -PPC_INS_SRDI = 1022 -PPC_INS_SRW = 1023 -PPC_INS_SRWI = 1024 -PPC_INS_STB = 1025 -PPC_INS_STBCIX = 1026 -PPC_INS_STBCX = 1027 -PPC_INS_STBEPX = 1028 -PPC_INS_STBU = 1029 -PPC_INS_STBUX = 1030 -PPC_INS_STBX = 1031 -PPC_INS_STD = 1032 -PPC_INS_STDAT = 1033 -PPC_INS_STDBRX = 1034 -PPC_INS_STDCIX = 1035 -PPC_INS_STDCX = 1036 -PPC_INS_STDU = 1037 -PPC_INS_STDUX = 1038 -PPC_INS_STDX = 1039 -PPC_INS_STFD = 1040 -PPC_INS_STFDEPX = 1041 -PPC_INS_STFDU = 1042 -PPC_INS_STFDUX = 1043 -PPC_INS_STFDX = 1044 -PPC_INS_STFIWX = 1045 -PPC_INS_STFS = 1046 -PPC_INS_STFSU = 1047 -PPC_INS_STFSUX = 1048 -PPC_INS_STFSX = 1049 -PPC_INS_STH = 1050 -PPC_INS_STHBRX = 1051 -PPC_INS_STHCIX = 1052 -PPC_INS_STHCX = 1053 -PPC_INS_STHEPX = 1054 -PPC_INS_STHU = 1055 -PPC_INS_STHUX = 1056 -PPC_INS_STHX = 1057 -PPC_INS_STMW = 1058 -PPC_INS_STOP = 1059 -PPC_INS_STSWI = 1060 -PPC_INS_STVEBX = 1061 -PPC_INS_STVEHX = 1062 -PPC_INS_STVEWX = 1063 -PPC_INS_STVX = 1064 -PPC_INS_STVXL = 1065 -PPC_INS_STW = 1066 -PPC_INS_STWAT = 1067 -PPC_INS_STWBRX = 1068 -PPC_INS_STWCIX = 1069 -PPC_INS_STWCX = 1070 -PPC_INS_STWEPX = 1071 -PPC_INS_STWU = 1072 -PPC_INS_STWUX = 1073 -PPC_INS_STWX = 1074 -PPC_INS_STXSD = 1075 -PPC_INS_STXSDX = 1076 -PPC_INS_STXSIBX = 1077 -PPC_INS_STXSIHX = 1078 -PPC_INS_STXSIWX = 1079 -PPC_INS_STXSSP = 1080 -PPC_INS_STXSSPX = 1081 -PPC_INS_STXV = 1082 -PPC_INS_STXVB16X = 1083 -PPC_INS_STXVD2X = 1084 -PPC_INS_STXVH8X = 1085 -PPC_INS_STXVL = 1086 -PPC_INS_STXVLL = 1087 -PPC_INS_STXVW4X = 1088 -PPC_INS_STXVX = 1089 -PPC_INS_SUB = 1090 -PPC_INS_SUBC = 1091 -PPC_INS_SUBF = 1092 -PPC_INS_SUBFC = 1093 -PPC_INS_SUBFE = 1094 -PPC_INS_SUBFIC = 1095 -PPC_INS_SUBFME = 1096 -PPC_INS_SUBFZE = 1097 -PPC_INS_SUBI = 1098 -PPC_INS_SUBIC = 1099 -PPC_INS_SUBIS = 1100 -PPC_INS_SUBPCIS = 1101 -PPC_INS_SYNC = 1102 -PPC_INS_TABORT = 1103 -PPC_INS_TABORTDC = 1104 -PPC_INS_TABORTDCI = 1105 -PPC_INS_TABORTWC = 1106 -PPC_INS_TABORTWCI = 1107 -PPC_INS_TBEGIN = 1108 -PPC_INS_TCHECK = 1109 -PPC_INS_TD = 1110 -PPC_INS_TDEQ = 1111 -PPC_INS_TDEQI = 1112 -PPC_INS_TDGE = 1113 -PPC_INS_TDGEI = 1114 -PPC_INS_TDGT = 1115 -PPC_INS_TDGTI = 1116 -PPC_INS_TDI = 1117 -PPC_INS_TDLE = 1118 -PPC_INS_TDLEI = 1119 -PPC_INS_TDLGE = 1120 -PPC_INS_TDLGEI = 1121 -PPC_INS_TDLGT = 1122 -PPC_INS_TDLGTI = 1123 -PPC_INS_TDLLE = 1124 -PPC_INS_TDLLEI = 1125 -PPC_INS_TDLLT = 1126 -PPC_INS_TDLLTI = 1127 -PPC_INS_TDLNG = 1128 -PPC_INS_TDLNGI = 1129 -PPC_INS_TDLNL = 1130 -PPC_INS_TDLNLI = 1131 -PPC_INS_TDLT = 1132 -PPC_INS_TDLTI = 1133 -PPC_INS_TDNE = 1134 -PPC_INS_TDNEI = 1135 -PPC_INS_TDNG = 1136 -PPC_INS_TDNGI = 1137 -PPC_INS_TDNL = 1138 -PPC_INS_TDNLI = 1139 -PPC_INS_TDU = 1140 -PPC_INS_TDUI = 1141 -PPC_INS_TEND = 1142 -PPC_INS_TLBIA = 1143 -PPC_INS_TLBIE = 1144 -PPC_INS_TLBIEL = 1145 -PPC_INS_TLBIVAX = 1146 -PPC_INS_TLBLD = 1147 -PPC_INS_TLBLI = 1148 -PPC_INS_TLBRE = 1149 -PPC_INS_TLBREHI = 1150 -PPC_INS_TLBRELO = 1151 -PPC_INS_TLBSX = 1152 -PPC_INS_TLBSYNC = 1153 -PPC_INS_TLBWE = 1154 -PPC_INS_TLBWEHI = 1155 -PPC_INS_TLBWELO = 1156 -PPC_INS_TRAP = 1157 -PPC_INS_TRECHKPT = 1158 -PPC_INS_TRECLAIM = 1159 -PPC_INS_TSR = 1160 -PPC_INS_TW = 1161 -PPC_INS_TWEQ = 1162 -PPC_INS_TWEQI = 1163 -PPC_INS_TWGE = 1164 -PPC_INS_TWGEI = 1165 -PPC_INS_TWGT = 1166 -PPC_INS_TWGTI = 1167 -PPC_INS_TWI = 1168 -PPC_INS_TWLE = 1169 -PPC_INS_TWLEI = 1170 -PPC_INS_TWLGE = 1171 -PPC_INS_TWLGEI = 1172 -PPC_INS_TWLGT = 1173 -PPC_INS_TWLGTI = 1174 -PPC_INS_TWLLE = 1175 -PPC_INS_TWLLEI = 1176 -PPC_INS_TWLLT = 1177 -PPC_INS_TWLLTI = 1178 -PPC_INS_TWLNG = 1179 -PPC_INS_TWLNGI = 1180 -PPC_INS_TWLNL = 1181 -PPC_INS_TWLNLI = 1182 -PPC_INS_TWLT = 1183 -PPC_INS_TWLTI = 1184 -PPC_INS_TWNE = 1185 -PPC_INS_TWNEI = 1186 -PPC_INS_TWNG = 1187 -PPC_INS_TWNGI = 1188 -PPC_INS_TWNL = 1189 -PPC_INS_TWNLI = 1190 -PPC_INS_TWU = 1191 -PPC_INS_TWUI = 1192 -PPC_INS_VABSDUB = 1193 -PPC_INS_VABSDUH = 1194 -PPC_INS_VABSDUW = 1195 -PPC_INS_VADDCUQ = 1196 -PPC_INS_VADDCUW = 1197 -PPC_INS_VADDECUQ = 1198 -PPC_INS_VADDEUQM = 1199 -PPC_INS_VADDFP = 1200 -PPC_INS_VADDSBS = 1201 -PPC_INS_VADDSHS = 1202 -PPC_INS_VADDSWS = 1203 -PPC_INS_VADDUBM = 1204 -PPC_INS_VADDUBS = 1205 -PPC_INS_VADDUDM = 1206 -PPC_INS_VADDUHM = 1207 -PPC_INS_VADDUHS = 1208 -PPC_INS_VADDUQM = 1209 -PPC_INS_VADDUWM = 1210 -PPC_INS_VADDUWS = 1211 -PPC_INS_VAND = 1212 -PPC_INS_VANDC = 1213 -PPC_INS_VAVGSB = 1214 -PPC_INS_VAVGSH = 1215 -PPC_INS_VAVGSW = 1216 -PPC_INS_VAVGUB = 1217 -PPC_INS_VAVGUH = 1218 -PPC_INS_VAVGUW = 1219 -PPC_INS_VBPERMD = 1220 -PPC_INS_VBPERMQ = 1221 -PPC_INS_VCFSX = 1222 -PPC_INS_VCFUX = 1223 -PPC_INS_VCIPHER = 1224 -PPC_INS_VCIPHERLAST = 1225 -PPC_INS_VCLZB = 1226 -PPC_INS_VCLZD = 1227 -PPC_INS_VCLZH = 1228 -PPC_INS_VCLZLSBB = 1229 -PPC_INS_VCLZW = 1230 -PPC_INS_VCMPBFP = 1231 -PPC_INS_VCMPEQFP = 1232 -PPC_INS_VCMPEQUB = 1233 -PPC_INS_VCMPEQUD = 1234 -PPC_INS_VCMPEQUH = 1235 -PPC_INS_VCMPEQUW = 1236 -PPC_INS_VCMPGEFP = 1237 -PPC_INS_VCMPGTFP = 1238 -PPC_INS_VCMPGTSB = 1239 -PPC_INS_VCMPGTSD = 1240 -PPC_INS_VCMPGTSH = 1241 -PPC_INS_VCMPGTSW = 1242 -PPC_INS_VCMPGTUB = 1243 -PPC_INS_VCMPGTUD = 1244 -PPC_INS_VCMPGTUH = 1245 -PPC_INS_VCMPGTUW = 1246 -PPC_INS_VCMPNEB = 1247 -PPC_INS_VCMPNEH = 1248 -PPC_INS_VCMPNEW = 1249 -PPC_INS_VCMPNEZB = 1250 -PPC_INS_VCMPNEZH = 1251 -PPC_INS_VCMPNEZW = 1252 -PPC_INS_VCTSXS = 1253 -PPC_INS_VCTUXS = 1254 -PPC_INS_VCTZB = 1255 -PPC_INS_VCTZD = 1256 -PPC_INS_VCTZH = 1257 -PPC_INS_VCTZLSBB = 1258 -PPC_INS_VCTZW = 1259 -PPC_INS_VEQV = 1260 -PPC_INS_VEXPTEFP = 1261 -PPC_INS_VEXTRACTD = 1262 -PPC_INS_VEXTRACTUB = 1263 -PPC_INS_VEXTRACTUH = 1264 -PPC_INS_VEXTRACTUW = 1265 -PPC_INS_VEXTSB2D = 1266 -PPC_INS_VEXTSB2W = 1267 -PPC_INS_VEXTSH2D = 1268 -PPC_INS_VEXTSH2W = 1269 -PPC_INS_VEXTSW2D = 1270 -PPC_INS_VEXTUBLX = 1271 -PPC_INS_VEXTUBRX = 1272 -PPC_INS_VEXTUHLX = 1273 -PPC_INS_VEXTUHRX = 1274 -PPC_INS_VEXTUWLX = 1275 -PPC_INS_VEXTUWRX = 1276 -PPC_INS_VGBBD = 1277 -PPC_INS_VINSERTB = 1278 -PPC_INS_VINSERTD = 1279 -PPC_INS_VINSERTH = 1280 -PPC_INS_VINSERTW = 1281 -PPC_INS_VLOGEFP = 1282 -PPC_INS_VMADDFP = 1283 -PPC_INS_VMAXFP = 1284 -PPC_INS_VMAXSB = 1285 -PPC_INS_VMAXSD = 1286 -PPC_INS_VMAXSH = 1287 -PPC_INS_VMAXSW = 1288 -PPC_INS_VMAXUB = 1289 -PPC_INS_VMAXUD = 1290 -PPC_INS_VMAXUH = 1291 -PPC_INS_VMAXUW = 1292 -PPC_INS_VMHADDSHS = 1293 -PPC_INS_VMHRADDSHS = 1294 -PPC_INS_VMINFP = 1295 -PPC_INS_VMINSB = 1296 -PPC_INS_VMINSD = 1297 -PPC_INS_VMINSH = 1298 -PPC_INS_VMINSW = 1299 -PPC_INS_VMINUB = 1300 -PPC_INS_VMINUD = 1301 -PPC_INS_VMINUH = 1302 -PPC_INS_VMINUW = 1303 -PPC_INS_VMLADDUHM = 1304 -PPC_INS_VMR = 1305 -PPC_INS_VMRGEW = 1306 -PPC_INS_VMRGHB = 1307 -PPC_INS_VMRGHH = 1308 -PPC_INS_VMRGHW = 1309 -PPC_INS_VMRGLB = 1310 -PPC_INS_VMRGLH = 1311 -PPC_INS_VMRGLW = 1312 -PPC_INS_VMRGOW = 1313 -PPC_INS_VMSUMMBM = 1314 -PPC_INS_VMSUMSHM = 1315 -PPC_INS_VMSUMSHS = 1316 -PPC_INS_VMSUMUBM = 1317 -PPC_INS_VMSUMUHM = 1318 -PPC_INS_VMSUMUHS = 1319 -PPC_INS_VMUL10CUQ = 1320 -PPC_INS_VMUL10ECUQ = 1321 -PPC_INS_VMUL10EUQ = 1322 -PPC_INS_VMUL10UQ = 1323 -PPC_INS_VMULESB = 1324 -PPC_INS_VMULESH = 1325 -PPC_INS_VMULESW = 1326 -PPC_INS_VMULEUB = 1327 -PPC_INS_VMULEUH = 1328 -PPC_INS_VMULEUW = 1329 -PPC_INS_VMULOSB = 1330 -PPC_INS_VMULOSH = 1331 -PPC_INS_VMULOSW = 1332 -PPC_INS_VMULOUB = 1333 -PPC_INS_VMULOUH = 1334 -PPC_INS_VMULOUW = 1335 -PPC_INS_VMULUWM = 1336 -PPC_INS_VNAND = 1337 -PPC_INS_VNCIPHER = 1338 -PPC_INS_VNCIPHERLAST = 1339 -PPC_INS_VNEGD = 1340 -PPC_INS_VNEGW = 1341 -PPC_INS_VNMSUBFP = 1342 -PPC_INS_VNOR = 1343 -PPC_INS_VNOT = 1344 -PPC_INS_VOR = 1345 -PPC_INS_VORC = 1346 -PPC_INS_VPERM = 1347 -PPC_INS_VPERMR = 1348 -PPC_INS_VPERMXOR = 1349 -PPC_INS_VPKPX = 1350 -PPC_INS_VPKSDSS = 1351 -PPC_INS_VPKSDUS = 1352 -PPC_INS_VPKSHSS = 1353 -PPC_INS_VPKSHUS = 1354 -PPC_INS_VPKSWSS = 1355 -PPC_INS_VPKSWUS = 1356 -PPC_INS_VPKUDUM = 1357 -PPC_INS_VPKUDUS = 1358 -PPC_INS_VPKUHUM = 1359 -PPC_INS_VPKUHUS = 1360 -PPC_INS_VPKUWUM = 1361 -PPC_INS_VPKUWUS = 1362 -PPC_INS_VPMSUMB = 1363 -PPC_INS_VPMSUMD = 1364 -PPC_INS_VPMSUMH = 1365 -PPC_INS_VPMSUMW = 1366 -PPC_INS_VPOPCNTB = 1367 -PPC_INS_VPOPCNTD = 1368 -PPC_INS_VPOPCNTH = 1369 -PPC_INS_VPOPCNTW = 1370 -PPC_INS_VPRTYBD = 1371 -PPC_INS_VPRTYBQ = 1372 -PPC_INS_VPRTYBW = 1373 -PPC_INS_VREFP = 1374 -PPC_INS_VRFIM = 1375 -PPC_INS_VRFIN = 1376 -PPC_INS_VRFIP = 1377 -PPC_INS_VRFIZ = 1378 -PPC_INS_VRLB = 1379 -PPC_INS_VRLD = 1380 -PPC_INS_VRLDMI = 1381 -PPC_INS_VRLDNM = 1382 -PPC_INS_VRLH = 1383 -PPC_INS_VRLW = 1384 -PPC_INS_VRLWMI = 1385 -PPC_INS_VRLWNM = 1386 -PPC_INS_VRSQRTEFP = 1387 -PPC_INS_VSBOX = 1388 -PPC_INS_VSEL = 1389 -PPC_INS_VSHASIGMAD = 1390 -PPC_INS_VSHASIGMAW = 1391 -PPC_INS_VSL = 1392 -PPC_INS_VSLB = 1393 -PPC_INS_VSLD = 1394 -PPC_INS_VSLDOI = 1395 -PPC_INS_VSLH = 1396 -PPC_INS_VSLO = 1397 -PPC_INS_VSLV = 1398 -PPC_INS_VSLW = 1399 -PPC_INS_VSPLTB = 1400 -PPC_INS_VSPLTH = 1401 -PPC_INS_VSPLTISB = 1402 -PPC_INS_VSPLTISH = 1403 -PPC_INS_VSPLTISW = 1404 -PPC_INS_VSPLTW = 1405 -PPC_INS_VSR = 1406 -PPC_INS_VSRAB = 1407 -PPC_INS_VSRAD = 1408 -PPC_INS_VSRAH = 1409 -PPC_INS_VSRAW = 1410 -PPC_INS_VSRB = 1411 -PPC_INS_VSRD = 1412 -PPC_INS_VSRH = 1413 -PPC_INS_VSRO = 1414 -PPC_INS_VSRV = 1415 -PPC_INS_VSRW = 1416 -PPC_INS_VSUBCUQ = 1417 -PPC_INS_VSUBCUW = 1418 -PPC_INS_VSUBECUQ = 1419 -PPC_INS_VSUBEUQM = 1420 -PPC_INS_VSUBFP = 1421 -PPC_INS_VSUBSBS = 1422 -PPC_INS_VSUBSHS = 1423 -PPC_INS_VSUBSWS = 1424 -PPC_INS_VSUBUBM = 1425 -PPC_INS_VSUBUBS = 1426 -PPC_INS_VSUBUDM = 1427 -PPC_INS_VSUBUHM = 1428 -PPC_INS_VSUBUHS = 1429 -PPC_INS_VSUBUQM = 1430 -PPC_INS_VSUBUWM = 1431 -PPC_INS_VSUBUWS = 1432 -PPC_INS_VSUM2SWS = 1433 -PPC_INS_VSUM4SBS = 1434 -PPC_INS_VSUM4SHS = 1435 -PPC_INS_VSUM4UBS = 1436 -PPC_INS_VSUMSWS = 1437 -PPC_INS_VUPKHPX = 1438 -PPC_INS_VUPKHSB = 1439 -PPC_INS_VUPKHSH = 1440 -PPC_INS_VUPKHSW = 1441 -PPC_INS_VUPKLPX = 1442 -PPC_INS_VUPKLSB = 1443 -PPC_INS_VUPKLSH = 1444 -PPC_INS_VUPKLSW = 1445 -PPC_INS_VXOR = 1446 -PPC_INS_WAIT = 1447 -PPC_INS_WAITIMPL = 1448 -PPC_INS_WAITRSV = 1449 -PPC_INS_WRTEE = 1450 -PPC_INS_WRTEEI = 1451 -PPC_INS_XNOP = 1452 -PPC_INS_XOR = 1453 -PPC_INS_XORI = 1454 -PPC_INS_XORIS = 1455 -PPC_INS_XSABSDP = 1456 -PPC_INS_XSABSQP = 1457 -PPC_INS_XSADDDP = 1458 -PPC_INS_XSADDQP = 1459 -PPC_INS_XSADDQPO = 1460 -PPC_INS_XSADDSP = 1461 -PPC_INS_XSCMPEQDP = 1462 -PPC_INS_XSCMPEXPDP = 1463 -PPC_INS_XSCMPEXPQP = 1464 -PPC_INS_XSCMPGEDP = 1465 -PPC_INS_XSCMPGTDP = 1466 -PPC_INS_XSCMPODP = 1467 -PPC_INS_XSCMPOQP = 1468 -PPC_INS_XSCMPUDP = 1469 -PPC_INS_XSCMPUQP = 1470 -PPC_INS_XSCPSGNDP = 1471 -PPC_INS_XSCPSGNQP = 1472 -PPC_INS_XSCVDPHP = 1473 -PPC_INS_XSCVDPQP = 1474 -PPC_INS_XSCVDPSP = 1475 -PPC_INS_XSCVDPSPN = 1476 -PPC_INS_XSCVDPSXDS = 1477 -PPC_INS_XSCVDPSXWS = 1478 -PPC_INS_XSCVDPUXDS = 1479 -PPC_INS_XSCVDPUXWS = 1480 -PPC_INS_XSCVHPDP = 1481 -PPC_INS_XSCVQPDP = 1482 -PPC_INS_XSCVQPDPO = 1483 -PPC_INS_XSCVQPSDZ = 1484 -PPC_INS_XSCVQPSWZ = 1485 -PPC_INS_XSCVQPUDZ = 1486 -PPC_INS_XSCVQPUWZ = 1487 -PPC_INS_XSCVSDQP = 1488 -PPC_INS_XSCVSPDP = 1489 -PPC_INS_XSCVSPDPN = 1490 -PPC_INS_XSCVSXDDP = 1491 -PPC_INS_XSCVSXDSP = 1492 -PPC_INS_XSCVUDQP = 1493 -PPC_INS_XSCVUXDDP = 1494 -PPC_INS_XSCVUXDSP = 1495 -PPC_INS_XSDIVDP = 1496 -PPC_INS_XSDIVQP = 1497 -PPC_INS_XSDIVQPO = 1498 -PPC_INS_XSDIVSP = 1499 -PPC_INS_XSIEXPDP = 1500 -PPC_INS_XSIEXPQP = 1501 -PPC_INS_XSMADDADP = 1502 -PPC_INS_XSMADDASP = 1503 -PPC_INS_XSMADDMDP = 1504 -PPC_INS_XSMADDMSP = 1505 -PPC_INS_XSMADDQP = 1506 -PPC_INS_XSMADDQPO = 1507 -PPC_INS_XSMAXCDP = 1508 -PPC_INS_XSMAXDP = 1509 -PPC_INS_XSMAXJDP = 1510 -PPC_INS_XSMINCDP = 1511 -PPC_INS_XSMINDP = 1512 -PPC_INS_XSMINJDP = 1513 -PPC_INS_XSMSUBADP = 1514 -PPC_INS_XSMSUBASP = 1515 -PPC_INS_XSMSUBMDP = 1516 -PPC_INS_XSMSUBMSP = 1517 -PPC_INS_XSMSUBQP = 1518 -PPC_INS_XSMSUBQPO = 1519 -PPC_INS_XSMULDP = 1520 -PPC_INS_XSMULQP = 1521 -PPC_INS_XSMULQPO = 1522 -PPC_INS_XSMULSP = 1523 -PPC_INS_XSNABSDP = 1524 -PPC_INS_XSNABSQP = 1525 -PPC_INS_XSNEGDP = 1526 -PPC_INS_XSNEGQP = 1527 -PPC_INS_XSNMADDADP = 1528 -PPC_INS_XSNMADDASP = 1529 -PPC_INS_XSNMADDMDP = 1530 -PPC_INS_XSNMADDMSP = 1531 -PPC_INS_XSNMADDQP = 1532 -PPC_INS_XSNMADDQPO = 1533 -PPC_INS_XSNMSUBADP = 1534 -PPC_INS_XSNMSUBASP = 1535 -PPC_INS_XSNMSUBMDP = 1536 -PPC_INS_XSNMSUBMSP = 1537 -PPC_INS_XSNMSUBQP = 1538 -PPC_INS_XSNMSUBQPO = 1539 -PPC_INS_XSRDPI = 1540 -PPC_INS_XSRDPIC = 1541 -PPC_INS_XSRDPIM = 1542 -PPC_INS_XSRDPIP = 1543 -PPC_INS_XSRDPIZ = 1544 -PPC_INS_XSREDP = 1545 -PPC_INS_XSRESP = 1546 -PPC_INS_XSRQPI = 1547 -PPC_INS_XSRQPIX = 1548 -PPC_INS_XSRQPXP = 1549 -PPC_INS_XSRSP = 1550 -PPC_INS_XSRSQRTEDP = 1551 -PPC_INS_XSRSQRTESP = 1552 -PPC_INS_XSSQRTDP = 1553 -PPC_INS_XSSQRTQP = 1554 -PPC_INS_XSSQRTQPO = 1555 -PPC_INS_XSSQRTSP = 1556 -PPC_INS_XSSUBDP = 1557 -PPC_INS_XSSUBQP = 1558 -PPC_INS_XSSUBQPO = 1559 -PPC_INS_XSSUBSP = 1560 -PPC_INS_XSTDIVDP = 1561 -PPC_INS_XSTSQRTDP = 1562 -PPC_INS_XSTSTDCDP = 1563 -PPC_INS_XSTSTDCQP = 1564 -PPC_INS_XSTSTDCSP = 1565 -PPC_INS_XSXEXPDP = 1566 -PPC_INS_XSXEXPQP = 1567 -PPC_INS_XSXSIGDP = 1568 -PPC_INS_XSXSIGQP = 1569 -PPC_INS_XVABSDP = 1570 -PPC_INS_XVABSSP = 1571 -PPC_INS_XVADDDP = 1572 -PPC_INS_XVADDSP = 1573 -PPC_INS_XVCMPEQDP = 1574 -PPC_INS_XVCMPEQSP = 1575 -PPC_INS_XVCMPGEDP = 1576 -PPC_INS_XVCMPGESP = 1577 -PPC_INS_XVCMPGTDP = 1578 -PPC_INS_XVCMPGTSP = 1579 -PPC_INS_XVCPSGNDP = 1580 -PPC_INS_XVCPSGNSP = 1581 -PPC_INS_XVCVDPSP = 1582 -PPC_INS_XVCVDPSXDS = 1583 -PPC_INS_XVCVDPSXWS = 1584 -PPC_INS_XVCVDPUXDS = 1585 -PPC_INS_XVCVDPUXWS = 1586 -PPC_INS_XVCVHPSP = 1587 -PPC_INS_XVCVSPDP = 1588 -PPC_INS_XVCVSPHP = 1589 -PPC_INS_XVCVSPSXDS = 1590 -PPC_INS_XVCVSPSXWS = 1591 -PPC_INS_XVCVSPUXDS = 1592 -PPC_INS_XVCVSPUXWS = 1593 -PPC_INS_XVCVSXDDP = 1594 -PPC_INS_XVCVSXDSP = 1595 -PPC_INS_XVCVSXWDP = 1596 -PPC_INS_XVCVSXWSP = 1597 -PPC_INS_XVCVUXDDP = 1598 -PPC_INS_XVCVUXDSP = 1599 -PPC_INS_XVCVUXWDP = 1600 -PPC_INS_XVCVUXWSP = 1601 -PPC_INS_XVDIVDP = 1602 -PPC_INS_XVDIVSP = 1603 -PPC_INS_XVIEXPDP = 1604 -PPC_INS_XVIEXPSP = 1605 -PPC_INS_XVMADDADP = 1606 -PPC_INS_XVMADDASP = 1607 -PPC_INS_XVMADDMDP = 1608 -PPC_INS_XVMADDMSP = 1609 -PPC_INS_XVMAXDP = 1610 -PPC_INS_XVMAXSP = 1611 -PPC_INS_XVMINDP = 1612 -PPC_INS_XVMINSP = 1613 -PPC_INS_XVMOVDP = 1614 -PPC_INS_XVMOVSP = 1615 -PPC_INS_XVMSUBADP = 1616 -PPC_INS_XVMSUBASP = 1617 -PPC_INS_XVMSUBMDP = 1618 -PPC_INS_XVMSUBMSP = 1619 -PPC_INS_XVMULDP = 1620 -PPC_INS_XVMULSP = 1621 -PPC_INS_XVNABSDP = 1622 -PPC_INS_XVNABSSP = 1623 -PPC_INS_XVNEGDP = 1624 -PPC_INS_XVNEGSP = 1625 -PPC_INS_XVNMADDADP = 1626 -PPC_INS_XVNMADDASP = 1627 -PPC_INS_XVNMADDMDP = 1628 -PPC_INS_XVNMADDMSP = 1629 -PPC_INS_XVNMSUBADP = 1630 -PPC_INS_XVNMSUBASP = 1631 -PPC_INS_XVNMSUBMDP = 1632 -PPC_INS_XVNMSUBMSP = 1633 -PPC_INS_XVRDPI = 1634 -PPC_INS_XVRDPIC = 1635 -PPC_INS_XVRDPIM = 1636 -PPC_INS_XVRDPIP = 1637 -PPC_INS_XVRDPIZ = 1638 -PPC_INS_XVREDP = 1639 -PPC_INS_XVRESP = 1640 -PPC_INS_XVRSPI = 1641 -PPC_INS_XVRSPIC = 1642 -PPC_INS_XVRSPIM = 1643 -PPC_INS_XVRSPIP = 1644 -PPC_INS_XVRSPIZ = 1645 -PPC_INS_XVRSQRTEDP = 1646 -PPC_INS_XVRSQRTESP = 1647 -PPC_INS_XVSQRTDP = 1648 -PPC_INS_XVSQRTSP = 1649 -PPC_INS_XVSUBDP = 1650 -PPC_INS_XVSUBSP = 1651 -PPC_INS_XVTDIVDP = 1652 -PPC_INS_XVTDIVSP = 1653 -PPC_INS_XVTSQRTDP = 1654 -PPC_INS_XVTSQRTSP = 1655 -PPC_INS_XVTSTDCDP = 1656 -PPC_INS_XVTSTDCSP = 1657 -PPC_INS_XVXEXPDP = 1658 -PPC_INS_XVXEXPSP = 1659 -PPC_INS_XVXSIGDP = 1660 -PPC_INS_XVXSIGSP = 1661 -PPC_INS_XXBRD = 1662 -PPC_INS_XXBRH = 1663 -PPC_INS_XXBRQ = 1664 -PPC_INS_XXBRW = 1665 -PPC_INS_XXEXTRACTUW = 1666 -PPC_INS_XXINSERTW = 1667 -PPC_INS_XXLAND = 1668 -PPC_INS_XXLANDC = 1669 -PPC_INS_XXLEQV = 1670 -PPC_INS_XXLNAND = 1671 -PPC_INS_XXLNOR = 1672 -PPC_INS_XXLOR = 1673 -PPC_INS_XXLORC = 1674 -PPC_INS_XXLXOR = 1675 -PPC_INS_XXMRGHD = 1676 -PPC_INS_XXMRGHW = 1677 -PPC_INS_XXMRGLD = 1678 -PPC_INS_XXMRGLW = 1679 -PPC_INS_XXPERM = 1680 -PPC_INS_XXPERMDI = 1681 -PPC_INS_XXPERMR = 1682 -PPC_INS_XXSEL = 1683 -PPC_INS_XXSLDWI = 1684 -PPC_INS_XXSPLTD = 1685 -PPC_INS_XXSPLTIB = 1686 -PPC_INS_XXSPLTW = 1687 -PPC_INS_XXSWAPD = 1688 -PPC_INS_DCBZ_L = 1689 -PPC_INS_PSQ_L = 1690 -PPC_INS_PSQ_LU = 1691 -PPC_INS_PSQ_LUX = 1692 -PPC_INS_PSQ_LX = 1693 -PPC_INS_PSQ_ST = 1694 -PPC_INS_PSQ_STU = 1695 -PPC_INS_PSQ_STUX = 1696 -PPC_INS_PSQ_STX = 1697 -PPC_INS_PS_ABS = 1698 -PPC_INS_PS_ADD = 1699 -PPC_INS_PS_CMPO0 = 1700 -PPC_INS_PS_CMPO1 = 1701 -PPC_INS_PS_CMPU0 = 1702 -PPC_INS_PS_CMPU1 = 1703 -PPC_INS_PS_DIV = 1704 -PPC_INS_PS_MADD = 1705 -PPC_INS_PS_MADDS0 = 1706 -PPC_INS_PS_MADDS1 = 1707 -PPC_INS_PS_MERGE00 = 1708 -PPC_INS_PS_MERGE01 = 1709 -PPC_INS_PS_MERGE10 = 1710 -PPC_INS_PS_MERGE11 = 1711 -PPC_INS_PS_MR = 1712 -PPC_INS_PS_MSUB = 1713 -PPC_INS_PS_MUL = 1714 -PPC_INS_PS_MULS0 = 1715 -PPC_INS_PS_MULS1 = 1716 -PPC_INS_PS_NABS = 1717 -PPC_INS_PS_NEG = 1718 -PPC_INS_PS_NMADD = 1719 -PPC_INS_PS_NMSUB = 1720 -PPC_INS_PS_RES = 1721 -PPC_INS_PS_RSQRTE = 1722 -PPC_INS_PS_SEL = 1723 -PPC_INS_PS_SUB = 1724 -PPC_INS_PS_SUM0 = 1725 -PPC_INS_PS_SUM1 = 1726 -PPC_INS_ENDING = 1727 - -PPC_GRP_INVALID = 0 -PPC_GRP_JUMP = 1 -PPC_GRP_ALTIVEC = 128 -PPC_GRP_MODE32 = 129 -PPC_GRP_MODE64 = 130 -PPC_GRP_BOOKE = 131 -PPC_GRP_NOTBOOKE = 132 -PPC_GRP_SPE = 133 -PPC_GRP_VSX = 134 -PPC_GRP_E500 = 135 -PPC_GRP_PPC4XX = 136 -PPC_GRP_PPC6XX = 137 -PPC_GRP_ICBT = 138 -PPC_GRP_P8ALTIVEC = 139 -PPC_GRP_P8VECTOR = 140 -PPC_GRP_QPX = 141 -PPC_GRP_PS = 142 -PPC_GRP_ENDING = 143 diff --git a/.tools/python-revlibs/capstone/riscv.py b/.tools/python-revlibs/capstone/riscv.py deleted file mode 100644 index ca09db6..0000000 --- a/.tools/python-revlibs/capstone/riscv.py +++ /dev/null @@ -1,49 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .riscv_const import * - -# define the API -class RISCVOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint), - ('disp', ctypes.c_int64), - ) - -class RISCVOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('mem', RISCVOpMem), - ) - -class RISCVOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', RISCVOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -class CsRISCV(ctypes.Structure): - _fields_ = ( - ('need_effective_addr', ctypes.c_bool), - ('op_count', ctypes.c_uint8), - ('operands', RISCVOp * 8), - ) - -def get_arch_info(a): - return (a.need_effective_addr, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/riscv_const.py b/.tools/python-revlibs/capstone/riscv_const.py deleted file mode 100644 index 2b3c50d..0000000 --- a/.tools/python-revlibs/capstone/riscv_const.py +++ /dev/null @@ -1,456 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [riscv_const.py] - -# Operand type for instruction's operands - -RISCV_OP_INVALID = 0 -RISCV_OP_REG = 1 -RISCV_OP_IMM = 2 -RISCV_OP_MEM = 3 - -# RISCV registers - -RISCV_REG_INVALID = 0 - -# General purpose registers -RISCV_REG_X0 = 1 -RISCV_REG_ZERO = RISCV_REG_X0 -RISCV_REG_X1 = 2 -RISCV_REG_RA = RISCV_REG_X1 -RISCV_REG_X2 = 3 -RISCV_REG_SP = RISCV_REG_X2 -RISCV_REG_X3 = 4 -RISCV_REG_GP = RISCV_REG_X3 -RISCV_REG_X4 = 5 -RISCV_REG_TP = RISCV_REG_X4 -RISCV_REG_X5 = 6 -RISCV_REG_T0 = RISCV_REG_X5 -RISCV_REG_X6 = 7 -RISCV_REG_T1 = RISCV_REG_X6 -RISCV_REG_X7 = 8 -RISCV_REG_T2 = RISCV_REG_X7 -RISCV_REG_X8 = 9 -RISCV_REG_S0 = RISCV_REG_X8 -RISCV_REG_FP = RISCV_REG_X8 -RISCV_REG_X9 = 10 -RISCV_REG_S1 = RISCV_REG_X9 -RISCV_REG_X10 = 11 -RISCV_REG_A0 = RISCV_REG_X10 -RISCV_REG_X11 = 12 -RISCV_REG_A1 = RISCV_REG_X11 -RISCV_REG_X12 = 13 -RISCV_REG_A2 = RISCV_REG_X12 -RISCV_REG_X13 = 14 -RISCV_REG_A3 = RISCV_REG_X13 -RISCV_REG_X14 = 15 -RISCV_REG_A4 = RISCV_REG_X14 -RISCV_REG_X15 = 16 -RISCV_REG_A5 = RISCV_REG_X15 -RISCV_REG_X16 = 17 -RISCV_REG_A6 = RISCV_REG_X16 -RISCV_REG_X17 = 18 -RISCV_REG_A7 = RISCV_REG_X17 -RISCV_REG_X18 = 19 -RISCV_REG_S2 = RISCV_REG_X18 -RISCV_REG_X19 = 20 -RISCV_REG_S3 = RISCV_REG_X19 -RISCV_REG_X20 = 21 -RISCV_REG_S4 = RISCV_REG_X20 -RISCV_REG_X21 = 22 -RISCV_REG_S5 = RISCV_REG_X21 -RISCV_REG_X22 = 23 -RISCV_REG_S6 = RISCV_REG_X22 -RISCV_REG_X23 = 24 -RISCV_REG_S7 = RISCV_REG_X23 -RISCV_REG_X24 = 25 -RISCV_REG_S8 = RISCV_REG_X24 -RISCV_REG_X25 = 26 -RISCV_REG_S9 = RISCV_REG_X25 -RISCV_REG_X26 = 27 -RISCV_REG_S10 = RISCV_REG_X26 -RISCV_REG_X27 = 28 -RISCV_REG_S11 = RISCV_REG_X27 -RISCV_REG_X28 = 29 -RISCV_REG_T3 = RISCV_REG_X28 -RISCV_REG_X29 = 30 -RISCV_REG_T4 = RISCV_REG_X29 -RISCV_REG_X30 = 31 -RISCV_REG_T5 = RISCV_REG_X30 -RISCV_REG_X31 = 32 -RISCV_REG_T6 = RISCV_REG_X31 - -# Floating-point registers -RISCV_REG_F0_32 = 33 -RISCV_REG_F0_64 = 34 -RISCV_REG_F1_32 = 35 -RISCV_REG_F1_64 = 36 -RISCV_REG_F2_32 = 37 -RISCV_REG_F2_64 = 38 -RISCV_REG_F3_32 = 39 -RISCV_REG_F3_64 = 40 -RISCV_REG_F4_32 = 41 -RISCV_REG_F4_64 = 42 -RISCV_REG_F5_32 = 43 -RISCV_REG_F5_64 = 44 -RISCV_REG_F6_32 = 45 -RISCV_REG_F6_64 = 46 -RISCV_REG_F7_32 = 47 -RISCV_REG_F7_64 = 48 -RISCV_REG_F8_32 = 49 -RISCV_REG_F8_64 = 50 -RISCV_REG_F9_32 = 51 -RISCV_REG_F9_64 = 52 -RISCV_REG_F10_32 = 53 -RISCV_REG_F10_64 = 54 -RISCV_REG_F11_32 = 55 -RISCV_REG_F11_64 = 56 -RISCV_REG_F12_32 = 57 -RISCV_REG_F12_64 = 58 -RISCV_REG_F13_32 = 59 -RISCV_REG_F13_64 = 60 -RISCV_REG_F14_32 = 61 -RISCV_REG_F14_64 = 62 -RISCV_REG_F15_32 = 63 -RISCV_REG_F15_64 = 64 -RISCV_REG_F16_32 = 65 -RISCV_REG_F16_64 = 66 -RISCV_REG_F17_32 = 67 -RISCV_REG_F17_64 = 68 -RISCV_REG_F18_32 = 69 -RISCV_REG_F18_64 = 70 -RISCV_REG_F19_32 = 71 -RISCV_REG_F19_64 = 72 -RISCV_REG_F20_32 = 73 -RISCV_REG_F20_64 = 74 -RISCV_REG_F21_32 = 75 -RISCV_REG_F21_64 = 76 -RISCV_REG_F22_32 = 77 -RISCV_REG_F22_64 = 78 -RISCV_REG_F23_32 = 79 -RISCV_REG_F23_64 = 80 -RISCV_REG_F24_32 = 81 -RISCV_REG_F24_64 = 82 -RISCV_REG_F25_32 = 83 -RISCV_REG_F25_64 = 84 -RISCV_REG_F26_32 = 85 -RISCV_REG_F26_64 = 86 -RISCV_REG_F27_32 = 87 -RISCV_REG_F27_64 = 88 -RISCV_REG_F28_32 = 89 -RISCV_REG_F28_64 = 90 -RISCV_REG_F29_32 = 91 -RISCV_REG_F29_64 = 92 -RISCV_REG_F30_32 = 93 -RISCV_REG_F30_64 = 94 -RISCV_REG_F31_32 = 95 -RISCV_REG_F31_64 = 96 -RISCV_REG_ENDING = 97 - -# RISCV instruction - -RISCV_INS_INVALID = 0 -RISCV_INS_ADD = 1 -RISCV_INS_ADDI = 2 -RISCV_INS_ADDIW = 3 -RISCV_INS_ADDW = 4 -RISCV_INS_AMOADD_D = 5 -RISCV_INS_AMOADD_D_AQ = 6 -RISCV_INS_AMOADD_D_AQ_RL = 7 -RISCV_INS_AMOADD_D_RL = 8 -RISCV_INS_AMOADD_W = 9 -RISCV_INS_AMOADD_W_AQ = 10 -RISCV_INS_AMOADD_W_AQ_RL = 11 -RISCV_INS_AMOADD_W_RL = 12 -RISCV_INS_AMOAND_D = 13 -RISCV_INS_AMOAND_D_AQ = 14 -RISCV_INS_AMOAND_D_AQ_RL = 15 -RISCV_INS_AMOAND_D_RL = 16 -RISCV_INS_AMOAND_W = 17 -RISCV_INS_AMOAND_W_AQ = 18 -RISCV_INS_AMOAND_W_AQ_RL = 19 -RISCV_INS_AMOAND_W_RL = 20 -RISCV_INS_AMOMAXU_D = 21 -RISCV_INS_AMOMAXU_D_AQ = 22 -RISCV_INS_AMOMAXU_D_AQ_RL = 23 -RISCV_INS_AMOMAXU_D_RL = 24 -RISCV_INS_AMOMAXU_W = 25 -RISCV_INS_AMOMAXU_W_AQ = 26 -RISCV_INS_AMOMAXU_W_AQ_RL = 27 -RISCV_INS_AMOMAXU_W_RL = 28 -RISCV_INS_AMOMAX_D = 29 -RISCV_INS_AMOMAX_D_AQ = 30 -RISCV_INS_AMOMAX_D_AQ_RL = 31 -RISCV_INS_AMOMAX_D_RL = 32 -RISCV_INS_AMOMAX_W = 33 -RISCV_INS_AMOMAX_W_AQ = 34 -RISCV_INS_AMOMAX_W_AQ_RL = 35 -RISCV_INS_AMOMAX_W_RL = 36 -RISCV_INS_AMOMINU_D = 37 -RISCV_INS_AMOMINU_D_AQ = 38 -RISCV_INS_AMOMINU_D_AQ_RL = 39 -RISCV_INS_AMOMINU_D_RL = 40 -RISCV_INS_AMOMINU_W = 41 -RISCV_INS_AMOMINU_W_AQ = 42 -RISCV_INS_AMOMINU_W_AQ_RL = 43 -RISCV_INS_AMOMINU_W_RL = 44 -RISCV_INS_AMOMIN_D = 45 -RISCV_INS_AMOMIN_D_AQ = 46 -RISCV_INS_AMOMIN_D_AQ_RL = 47 -RISCV_INS_AMOMIN_D_RL = 48 -RISCV_INS_AMOMIN_W = 49 -RISCV_INS_AMOMIN_W_AQ = 50 -RISCV_INS_AMOMIN_W_AQ_RL = 51 -RISCV_INS_AMOMIN_W_RL = 52 -RISCV_INS_AMOOR_D = 53 -RISCV_INS_AMOOR_D_AQ = 54 -RISCV_INS_AMOOR_D_AQ_RL = 55 -RISCV_INS_AMOOR_D_RL = 56 -RISCV_INS_AMOOR_W = 57 -RISCV_INS_AMOOR_W_AQ = 58 -RISCV_INS_AMOOR_W_AQ_RL = 59 -RISCV_INS_AMOOR_W_RL = 60 -RISCV_INS_AMOSWAP_D = 61 -RISCV_INS_AMOSWAP_D_AQ = 62 -RISCV_INS_AMOSWAP_D_AQ_RL = 63 -RISCV_INS_AMOSWAP_D_RL = 64 -RISCV_INS_AMOSWAP_W = 65 -RISCV_INS_AMOSWAP_W_AQ = 66 -RISCV_INS_AMOSWAP_W_AQ_RL = 67 -RISCV_INS_AMOSWAP_W_RL = 68 -RISCV_INS_AMOXOR_D = 69 -RISCV_INS_AMOXOR_D_AQ = 70 -RISCV_INS_AMOXOR_D_AQ_RL = 71 -RISCV_INS_AMOXOR_D_RL = 72 -RISCV_INS_AMOXOR_W = 73 -RISCV_INS_AMOXOR_W_AQ = 74 -RISCV_INS_AMOXOR_W_AQ_RL = 75 -RISCV_INS_AMOXOR_W_RL = 76 -RISCV_INS_AND = 77 -RISCV_INS_ANDI = 78 -RISCV_INS_AUIPC = 79 -RISCV_INS_BEQ = 80 -RISCV_INS_BGE = 81 -RISCV_INS_BGEU = 82 -RISCV_INS_BLT = 83 -RISCV_INS_BLTU = 84 -RISCV_INS_BNE = 85 -RISCV_INS_CSRRC = 86 -RISCV_INS_CSRRCI = 87 -RISCV_INS_CSRRS = 88 -RISCV_INS_CSRRSI = 89 -RISCV_INS_CSRRW = 90 -RISCV_INS_CSRRWI = 91 -RISCV_INS_C_ADD = 92 -RISCV_INS_C_ADDI = 93 -RISCV_INS_C_ADDI16SP = 94 -RISCV_INS_C_ADDI4SPN = 95 -RISCV_INS_C_ADDIW = 96 -RISCV_INS_C_ADDW = 97 -RISCV_INS_C_AND = 98 -RISCV_INS_C_ANDI = 99 -RISCV_INS_C_BEQZ = 100 -RISCV_INS_C_BNEZ = 101 -RISCV_INS_C_EBREAK = 102 -RISCV_INS_C_FLD = 103 -RISCV_INS_C_FLDSP = 104 -RISCV_INS_C_FLW = 105 -RISCV_INS_C_FLWSP = 106 -RISCV_INS_C_FSD = 107 -RISCV_INS_C_FSDSP = 108 -RISCV_INS_C_FSW = 109 -RISCV_INS_C_FSWSP = 110 -RISCV_INS_C_J = 111 -RISCV_INS_C_JAL = 112 -RISCV_INS_C_JALR = 113 -RISCV_INS_C_JR = 114 -RISCV_INS_C_LD = 115 -RISCV_INS_C_LDSP = 116 -RISCV_INS_C_LI = 117 -RISCV_INS_C_LUI = 118 -RISCV_INS_C_LW = 119 -RISCV_INS_C_LWSP = 120 -RISCV_INS_C_MV = 121 -RISCV_INS_C_NOP = 122 -RISCV_INS_C_OR = 123 -RISCV_INS_C_SD = 124 -RISCV_INS_C_SDSP = 125 -RISCV_INS_C_SLLI = 126 -RISCV_INS_C_SRAI = 127 -RISCV_INS_C_SRLI = 128 -RISCV_INS_C_SUB = 129 -RISCV_INS_C_SUBW = 130 -RISCV_INS_C_SW = 131 -RISCV_INS_C_SWSP = 132 -RISCV_INS_C_UNIMP = 133 -RISCV_INS_C_XOR = 134 -RISCV_INS_DIV = 135 -RISCV_INS_DIVU = 136 -RISCV_INS_DIVUW = 137 -RISCV_INS_DIVW = 138 -RISCV_INS_EBREAK = 139 -RISCV_INS_ECALL = 140 -RISCV_INS_FADD_D = 141 -RISCV_INS_FADD_S = 142 -RISCV_INS_FCLASS_D = 143 -RISCV_INS_FCLASS_S = 144 -RISCV_INS_FCVT_D_L = 145 -RISCV_INS_FCVT_D_LU = 146 -RISCV_INS_FCVT_D_S = 147 -RISCV_INS_FCVT_D_W = 148 -RISCV_INS_FCVT_D_WU = 149 -RISCV_INS_FCVT_LU_D = 150 -RISCV_INS_FCVT_LU_S = 151 -RISCV_INS_FCVT_L_D = 152 -RISCV_INS_FCVT_L_S = 153 -RISCV_INS_FCVT_S_D = 154 -RISCV_INS_FCVT_S_L = 155 -RISCV_INS_FCVT_S_LU = 156 -RISCV_INS_FCVT_S_W = 157 -RISCV_INS_FCVT_S_WU = 158 -RISCV_INS_FCVT_WU_D = 159 -RISCV_INS_FCVT_WU_S = 160 -RISCV_INS_FCVT_W_D = 161 -RISCV_INS_FCVT_W_S = 162 -RISCV_INS_FDIV_D = 163 -RISCV_INS_FDIV_S = 164 -RISCV_INS_FENCE = 165 -RISCV_INS_FENCE_I = 166 -RISCV_INS_FENCE_TSO = 167 -RISCV_INS_FEQ_D = 168 -RISCV_INS_FEQ_S = 169 -RISCV_INS_FLD = 170 -RISCV_INS_FLE_D = 171 -RISCV_INS_FLE_S = 172 -RISCV_INS_FLT_D = 173 -RISCV_INS_FLT_S = 174 -RISCV_INS_FLW = 175 -RISCV_INS_FMADD_D = 176 -RISCV_INS_FMADD_S = 177 -RISCV_INS_FMAX_D = 178 -RISCV_INS_FMAX_S = 179 -RISCV_INS_FMIN_D = 180 -RISCV_INS_FMIN_S = 181 -RISCV_INS_FMSUB_D = 182 -RISCV_INS_FMSUB_S = 183 -RISCV_INS_FMUL_D = 184 -RISCV_INS_FMUL_S = 185 -RISCV_INS_FMV_D_X = 186 -RISCV_INS_FMV_W_X = 187 -RISCV_INS_FMV_X_D = 188 -RISCV_INS_FMV_X_W = 189 -RISCV_INS_FNMADD_D = 190 -RISCV_INS_FNMADD_S = 191 -RISCV_INS_FNMSUB_D = 192 -RISCV_INS_FNMSUB_S = 193 -RISCV_INS_FSD = 194 -RISCV_INS_FSGNJN_D = 195 -RISCV_INS_FSGNJN_S = 196 -RISCV_INS_FSGNJX_D = 197 -RISCV_INS_FSGNJX_S = 198 -RISCV_INS_FSGNJ_D = 199 -RISCV_INS_FSGNJ_S = 200 -RISCV_INS_FSQRT_D = 201 -RISCV_INS_FSQRT_S = 202 -RISCV_INS_FSUB_D = 203 -RISCV_INS_FSUB_S = 204 -RISCV_INS_FSW = 205 -RISCV_INS_JAL = 206 -RISCV_INS_JALR = 207 -RISCV_INS_LB = 208 -RISCV_INS_LBU = 209 -RISCV_INS_LD = 210 -RISCV_INS_LH = 211 -RISCV_INS_LHU = 212 -RISCV_INS_LR_D = 213 -RISCV_INS_LR_D_AQ = 214 -RISCV_INS_LR_D_AQ_RL = 215 -RISCV_INS_LR_D_RL = 216 -RISCV_INS_LR_W = 217 -RISCV_INS_LR_W_AQ = 218 -RISCV_INS_LR_W_AQ_RL = 219 -RISCV_INS_LR_W_RL = 220 -RISCV_INS_LUI = 221 -RISCV_INS_LW = 222 -RISCV_INS_LWU = 223 -RISCV_INS_MRET = 224 -RISCV_INS_MUL = 225 -RISCV_INS_MULH = 226 -RISCV_INS_MULHSU = 227 -RISCV_INS_MULHU = 228 -RISCV_INS_MULW = 229 -RISCV_INS_OR = 230 -RISCV_INS_ORI = 231 -RISCV_INS_REM = 232 -RISCV_INS_REMU = 233 -RISCV_INS_REMUW = 234 -RISCV_INS_REMW = 235 -RISCV_INS_SB = 236 -RISCV_INS_SC_D = 237 -RISCV_INS_SC_D_AQ = 238 -RISCV_INS_SC_D_AQ_RL = 239 -RISCV_INS_SC_D_RL = 240 -RISCV_INS_SC_W = 241 -RISCV_INS_SC_W_AQ = 242 -RISCV_INS_SC_W_AQ_RL = 243 -RISCV_INS_SC_W_RL = 244 -RISCV_INS_SD = 245 -RISCV_INS_SFENCE_VMA = 246 -RISCV_INS_SH = 247 -RISCV_INS_SLL = 248 -RISCV_INS_SLLI = 249 -RISCV_INS_SLLIW = 250 -RISCV_INS_SLLW = 251 -RISCV_INS_SLT = 252 -RISCV_INS_SLTI = 253 -RISCV_INS_SLTIU = 254 -RISCV_INS_SLTU = 255 -RISCV_INS_SRA = 256 -RISCV_INS_SRAI = 257 -RISCV_INS_SRAIW = 258 -RISCV_INS_SRAW = 259 -RISCV_INS_SRET = 260 -RISCV_INS_SRL = 261 -RISCV_INS_SRLI = 262 -RISCV_INS_SRLIW = 263 -RISCV_INS_SRLW = 264 -RISCV_INS_SUB = 265 -RISCV_INS_SUBW = 266 -RISCV_INS_SW = 267 -RISCV_INS_UNIMP = 268 -RISCV_INS_URET = 269 -RISCV_INS_WFI = 270 -RISCV_INS_XOR = 271 -RISCV_INS_XORI = 272 -RISCV_INS_ENDING = 273 - -# Group of RISCV instructions - -RISCV_GRP_INVALID = 0 -RISCV_GRP_JUMP = 1 -RISCV_GRP_CALL = 2 -RISCV_GRP_RET = 3 -RISCV_GRP_INT = 4 -RISCV_GRP_IRET = 5 -RISCV_GRP_PRIVILEGE = 6 -RISCV_GRP_BRANCH_RELATIVE = 7 -RISCV_GRP_ISRV32 = 128 -RISCV_GRP_ISRV64 = 129 -RISCV_GRP_HASSTDEXTA = 130 -RISCV_GRP_HASSTDEXTC = 131 -RISCV_GRP_HASSTDEXTD = 132 -RISCV_GRP_HASSTDEXTF = 133 -RISCV_GRP_HASSTDEXTM = 134 -RISCV_GRP_ISRVA = 135 -RISCV_GRP_ISRVC = 136 -RISCV_GRP_ISRVD = 137 -RISCV_GRP_ISRVCD = 138 -RISCV_GRP_ISRVF = 139 -RISCV_GRP_ISRV32C = 140 -RISCV_GRP_ISRV32CF = 141 -RISCV_GRP_ISRVM = 142 -RISCV_GRP_ISRV64A = 143 -RISCV_GRP_ISRV64C = 144 -RISCV_GRP_ISRV64D = 145 -RISCV_GRP_ISRV64F = 146 -RISCV_GRP_ISRV64M = 147 -RISCV_GRP_ENDING = 148 diff --git a/.tools/python-revlibs/capstone/sh.py b/.tools/python-revlibs/capstone/sh.py deleted file mode 100644 index a00f8c6..0000000 --- a/.tools/python-revlibs/capstone/sh.py +++ /dev/null @@ -1,66 +0,0 @@ -# Capstone Python bindings, by Peace-Maker - -import ctypes -from . import copy_ctypes_list -from .sh_const import * - -# define the API -class SHOpMem(ctypes.Structure): - _fields_ = ( - ('address', ctypes.c_uint), - ('reg', ctypes.c_uint), - ('disp', ctypes.c_uint32), - ) - -class SHOpDsp(ctypes.Structure): - _fields_ = ( - ('insn', ctypes.c_uint), - ('operand', ctypes.c_uint * 2), - ('r', ctypes.c_uint * 6), - ('cc', ctypes.c_uint), - ('imm', ctypes.c_uint8), - ('size', ctypes.c_int), - ) - -class SHOpValue(ctypes.Union): - _fields_ = ( - ('imm', ctypes.c_int64), - ('reg', ctypes.c_uint), - ('mem', SHOpMem), - ('dsp', SHOpDsp), - ) - -class SHOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', SHOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - @property - def dsp(self): - return self.value.dsp - - -class CsSH(ctypes.Structure): - _fields_ = ( - ('insn', ctypes.c_uint), - ('size', ctypes.c_uint8), - ('op_count', ctypes.c_uint8), - ('operands', SHOp * 3), - ) - -def get_arch_info(a): - return (a.insn, a.size, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/sh_const.py b/.tools/python-revlibs/capstone/sh_const.py deleted file mode 100644 index 5c6cdd0..0000000 --- a/.tools/python-revlibs/capstone/sh_const.py +++ /dev/null @@ -1,367 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [sh_const.py] - -SH_REG_INVALID = 0 -SH_REG_R0 = 1 -SH_REG_R1 = 2 -SH_REG_R2 = 3 -SH_REG_R3 = 4 -SH_REG_R4 = 5 -SH_REG_R5 = 6 -SH_REG_R6 = 7 -SH_REG_R7 = 8 -SH_REG_R8 = 9 -SH_REG_R9 = 10 -SH_REG_R10 = 11 -SH_REG_R11 = 12 -SH_REG_R12 = 13 -SH_REG_R13 = 14 -SH_REG_R14 = 15 -SH_REG_R15 = 16 -SH_REG_R0_BANK = 17 -SH_REG_R1_BANK = 18 -SH_REG_R2_BANK = 19 -SH_REG_R3_BANK = 20 -SH_REG_R4_BANK = 21 -SH_REG_R5_BANK = 22 -SH_REG_R6_BANK = 23 -SH_REG_R7_BANK = 24 -SH_REG_FR0 = 25 -SH_REG_FR1 = 26 -SH_REG_FR2 = 27 -SH_REG_FR3 = 28 -SH_REG_FR4 = 29 -SH_REG_FR5 = 30 -SH_REG_FR6 = 31 -SH_REG_FR7 = 32 -SH_REG_FR8 = 33 -SH_REG_FR9 = 34 -SH_REG_FR10 = 35 -SH_REG_FR11 = 36 -SH_REG_FR12 = 37 -SH_REG_FR13 = 38 -SH_REG_FR14 = 39 -SH_REG_FR15 = 40 -SH_REG_DR0 = 41 -SH_REG_DR2 = 42 -SH_REG_DR4 = 43 -SH_REG_DR6 = 44 -SH_REG_DR8 = 45 -SH_REG_DR10 = 46 -SH_REG_DR12 = 47 -SH_REG_DR14 = 48 -SH_REG_XD0 = 49 -SH_REG_XD2 = 50 -SH_REG_XD4 = 51 -SH_REG_XD6 = 52 -SH_REG_XD8 = 53 -SH_REG_XD10 = 54 -SH_REG_XD12 = 55 -SH_REG_XD14 = 56 -SH_REG_XF0 = 57 -SH_REG_XF1 = 58 -SH_REG_XF2 = 59 -SH_REG_XF3 = 60 -SH_REG_XF4 = 61 -SH_REG_XF5 = 62 -SH_REG_XF6 = 63 -SH_REG_XF7 = 64 -SH_REG_XF8 = 65 -SH_REG_XF9 = 66 -SH_REG_XF10 = 67 -SH_REG_XF11 = 68 -SH_REG_XF12 = 69 -SH_REG_XF13 = 70 -SH_REG_XF14 = 71 -SH_REG_XF15 = 72 -SH_REG_FV0 = 73 -SH_REG_FV4 = 74 -SH_REG_FV8 = 75 -SH_REG_FV12 = 76 -SH_REG_XMATRX = 77 -SH_REG_PC = 78 -SH_REG_PR = 79 -SH_REG_MACH = 80 -SH_REG_MACL = 81 -SH_REG_SR = 82 -SH_REG_GBR = 83 -SH_REG_SSR = 84 -SH_REG_SPC = 85 -SH_REG_SGR = 86 -SH_REG_DBR = 87 -SH_REG_VBR = 88 -SH_REG_TBR = 89 -SH_REG_RS = 90 -SH_REG_RE = 91 -SH_REG_MOD = 92 -SH_REG_FPUL = 93 -SH_REG_FPSCR = 94 -SH_REG_DSP_X0 = 95 -SH_REG_DSP_X1 = 96 -SH_REG_DSP_Y0 = 97 -SH_REG_DSP_Y1 = 98 -SH_REG_DSP_A0 = 99 -SH_REG_DSP_A1 = 100 -SH_REG_DSP_A0G = 101 -SH_REG_DSP_A1G = 102 -SH_REG_DSP_M0 = 103 -SH_REG_DSP_M1 = 104 -SH_REG_DSP_DSR = 105 -SH_REG_DSP_RSV0 = 106 -SH_REG_DSP_RSV1 = 107 -SH_REG_DSP_RSV2 = 108 -SH_REG_DSP_RSV3 = 109 -SH_REG_DSP_RSV4 = 110 -SH_REG_DSP_RSV5 = 111 -SH_REG_DSP_RSV6 = 112 -SH_REG_DSP_RSV7 = 113 -SH_REG_DSP_RSV8 = 114 -SH_REG_DSP_RSV9 = 115 -SH_REG_DSP_RSVA = 116 -SH_REG_DSP_RSVB = 117 -SH_REG_DSP_RSVC = 118 -SH_REG_DSP_RSVD = 119 -SH_REG_DSP_RSVE = 120 -SH_REG_DSP_RSVF = 121 -SH_REG_ENDING = 122 - -SH_OP_INVALID = 0 -SH_OP_REG = 1 -SH_OP_IMM = 2 -SH_OP_MEM = 3 - -SH_OP_MEM_INVALID = 0 -SH_OP_MEM_REG_IND = 1 -SH_OP_MEM_REG_POST = 2 -SH_OP_MEM_REG_PRE = 3 -SH_OP_MEM_REG_DISP = 4 -SH_OP_MEM_REG_R0 = 5 -SH_OP_MEM_GBR_DISP = 6 -SH_OP_MEM_GBR_R0 = 7 -SH_OP_MEM_PCR = 8 -SH_OP_MEM_TBR_DISP = 9 -SH_INS_DSP_INVALID = 10 -SH_INS_DSP_DOUBLE = 11 -SH_INS_DSP_SINGLE = 12 -SH_INS_DSP_PARALLEL = 13 -SH_INS_DSP_NOP = 1 -SH_INS_DSP_MOV = 2 -SH_INS_DSP_PSHL = 3 -SH_INS_DSP_PSHA = 4 -SH_INS_DSP_PMULS = 5 -SH_INS_DSP_PCLR_PMULS = 6 -SH_INS_DSP_PSUB_PMULS = 7 -SH_INS_DSP_PADD_PMULS = 8 -SH_INS_DSP_PSUBC = 9 -SH_INS_DSP_PADDC = 10 -SH_INS_DSP_PCMP = 11 -SH_INS_DSP_PABS = 12 -SH_INS_DSP_PRND = 13 -SH_INS_DSP_PSUB = 14 -SH_INS_DSP_PSUBr = 15 -SH_INS_DSP_PADD = 16 -SH_INS_DSP_PAND = 17 -SH_INS_DSP_PXOR = 18 -SH_INS_DSP_POR = 19 -SH_INS_DSP_PDEC = 20 -SH_INS_DSP_PINC = 21 -SH_INS_DSP_PCLR = 22 -SH_INS_DSP_PDMSB = 23 -SH_INS_DSP_PNEG = 24 -SH_INS_DSP_PCOPY = 25 -SH_INS_DSP_PSTS = 26 -SH_INS_DSP_PLDS = 27 -SH_INS_DSP_PSWAP = 28 -SH_INS_DSP_PWAD = 29 -SH_INS_DSP_PWSB = 30 -SH_OP_DSP_INVALID = 31 -SH_OP_DSP_REG_PRE = 32 -SH_OP_DSP_REG_IND = 33 -SH_OP_DSP_REG_POST = 34 -SH_OP_DSP_REG_INDEX = 35 -SH_OP_DSP_REG = 36 -SH_OP_DSP_IMM = 37 -SH_DSP_CC_INVALID = 38 -SH_DSP_CC_NONE = 39 -SH_DSP_CC_DCT = 40 -SH_DSP_CC_DCF = 41 -SH_INS_INVALID = 42 -SH_INS_ADD_r = 43 -SH_INS_ADD = 44 -SH_INS_ADDC = 45 -SH_INS_ADDV = 46 -SH_INS_AND = 47 -SH_INS_BAND = 48 -SH_INS_BANDNOT = 49 -SH_INS_BCLR = 50 -SH_INS_BF = 51 -SH_INS_BF_S = 52 -SH_INS_BLD = 53 -SH_INS_BLDNOT = 54 -SH_INS_BOR = 55 -SH_INS_BORNOT = 56 -SH_INS_BRA = 57 -SH_INS_BRAF = 58 -SH_INS_BSET = 59 -SH_INS_BSR = 60 -SH_INS_BSRF = 61 -SH_INS_BST = 62 -SH_INS_BT = 63 -SH_INS_BT_S = 64 -SH_INS_BXOR = 65 -SH_INS_CLIPS = 66 -SH_INS_CLIPU = 67 -SH_INS_CLRDMXY = 68 -SH_INS_CLRMAC = 69 -SH_INS_CLRS = 70 -SH_INS_CLRT = 71 -SH_INS_CMP_EQ = 72 -SH_INS_CMP_GE = 73 -SH_INS_CMP_GT = 74 -SH_INS_CMP_HI = 75 -SH_INS_CMP_HS = 76 -SH_INS_CMP_PL = 77 -SH_INS_CMP_PZ = 78 -SH_INS_CMP_STR = 79 -SH_INS_DIV0S = 80 -SH_INS_DIV0U = 81 -SH_INS_DIV1 = 82 -SH_INS_DIVS = 83 -SH_INS_DIVU = 84 -SH_INS_DMULS_L = 85 -SH_INS_DMULU_L = 86 -SH_INS_DT = 87 -SH_INS_EXTS_B = 88 -SH_INS_EXTS_W = 89 -SH_INS_EXTU_B = 90 -SH_INS_EXTU_W = 91 -SH_INS_FABS = 92 -SH_INS_FADD = 93 -SH_INS_FCMP_EQ = 94 -SH_INS_FCMP_GT = 95 -SH_INS_FCNVDS = 96 -SH_INS_FCNVSD = 97 -SH_INS_FDIV = 98 -SH_INS_FIPR = 99 -SH_INS_FLDI0 = 100 -SH_INS_FLDI1 = 101 -SH_INS_FLDS = 102 -SH_INS_FLOAT = 103 -SH_INS_FMAC = 104 -SH_INS_FMOV = 105 -SH_INS_FMUL = 106 -SH_INS_FNEG = 107 -SH_INS_FPCHG = 108 -SH_INS_FRCHG = 109 -SH_INS_FSCA = 110 -SH_INS_FSCHG = 111 -SH_INS_FSQRT = 112 -SH_INS_FSRRA = 113 -SH_INS_FSTS = 114 -SH_INS_FSUB = 115 -SH_INS_FTRC = 116 -SH_INS_FTRV = 117 -SH_INS_ICBI = 118 -SH_INS_JMP = 119 -SH_INS_JSR = 120 -SH_INS_JSR_N = 121 -SH_INS_LDBANK = 122 -SH_INS_LDC = 123 -SH_INS_LDRC = 124 -SH_INS_LDRE = 125 -SH_INS_LDRS = 126 -SH_INS_LDS = 127 -SH_INS_LDTLB = 128 -SH_INS_MAC_L = 129 -SH_INS_MAC_W = 130 -SH_INS_MOV = 131 -SH_INS_MOVA = 132 -SH_INS_MOVCA = 133 -SH_INS_MOVCO = 134 -SH_INS_MOVI20 = 135 -SH_INS_MOVI20S = 136 -SH_INS_MOVLI = 137 -SH_INS_MOVML = 138 -SH_INS_MOVMU = 139 -SH_INS_MOVRT = 140 -SH_INS_MOVT = 141 -SH_INS_MOVU = 142 -SH_INS_MOVUA = 143 -SH_INS_MUL_L = 144 -SH_INS_MULR = 145 -SH_INS_MULS_W = 146 -SH_INS_MULU_W = 147 -SH_INS_NEG = 148 -SH_INS_NEGC = 149 -SH_INS_NOP = 150 -SH_INS_NOT = 151 -SH_INS_NOTT = 152 -SH_INS_OCBI = 153 -SH_INS_OCBP = 154 -SH_INS_OCBWB = 155 -SH_INS_OR = 156 -SH_INS_PREF = 157 -SH_INS_PREFI = 158 -SH_INS_RESBANK = 159 -SH_INS_ROTCL = 160 -SH_INS_ROTCR = 161 -SH_INS_ROTL = 162 -SH_INS_ROTR = 163 -SH_INS_RTE = 164 -SH_INS_RTS = 165 -SH_INS_RTS_N = 166 -SH_INS_RTV_N = 167 -SH_INS_SETDMX = 168 -SH_INS_SETDMY = 169 -SH_INS_SETRC = 170 -SH_INS_SETS = 171 -SH_INS_SETT = 172 -SH_INS_SHAD = 173 -SH_INS_SHAL = 174 -SH_INS_SHAR = 175 -SH_INS_SHLD = 176 -SH_INS_SHLL = 177 -SH_INS_SHLL16 = 178 -SH_INS_SHLL2 = 179 -SH_INS_SHLL8 = 180 -SH_INS_SHLR = 181 -SH_INS_SHLR16 = 182 -SH_INS_SHLR2 = 183 -SH_INS_SHLR8 = 184 -SH_INS_SLEEP = 185 -SH_INS_STBANK = 186 -SH_INS_STC = 187 -SH_INS_STS = 188 -SH_INS_SUB = 189 -SH_INS_SUBC = 190 -SH_INS_SUBV = 191 -SH_INS_SWAP_B = 192 -SH_INS_SWAP_W = 193 -SH_INS_SYNCO = 194 -SH_INS_TAS = 195 -SH_INS_TRAPA = 196 -SH_INS_TST = 197 -SH_INS_XOR = 198 -SH_INS_XTRCT = 199 -SH_INS_DSP = 200 -SH_INS_ENDING = 201 - -SH_GRP_INVALID = 0 -SH_GRP_JUMP = 1 -SH_GRP_CALL = 2 -SH_GRP_INT = 3 -SH_GRP_RET = 4 -SH_GRP_IRET = 5 -SH_GRP_PRIVILEGE = 6 -SH_GRP_BRANCH_RELATIVE = 7 -SH_GRP_SH1 = 8 -SH_GRP_SH2 = 9 -SH_GRP_SH2E = 10 -SH_GRP_SH2DSP = 11 -SH_GRP_SH2A = 12 -SH_GRP_SH2AFPU = 13 -SH_GRP_SH3 = 14 -SH_GRP_SH3DSP = 15 -SH_GRP_SH4 = 16 -SH_GRP_SH4A = 17 -SH_GRP_ENDING = 18 diff --git a/.tools/python-revlibs/capstone/sparc.py b/.tools/python-revlibs/capstone/sparc.py deleted file mode 100644 index 1c536ff..0000000 --- a/.tools/python-revlibs/capstone/sparc.py +++ /dev/null @@ -1,51 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .sparc_const import * - -# define the API -class SparcOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint8), - ('index', ctypes.c_uint8), - ('disp', ctypes.c_int32), - ) - -class SparcOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('mem', SparcOpMem), - ) - -class SparcOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', SparcOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -class CsSparc(ctypes.Structure): - _fields_ = ( - ('cc', ctypes.c_uint), - ('hint', ctypes.c_uint), - ('op_count', ctypes.c_uint8), - ('operands', SparcOp * 4), - ) - -def get_arch_info(a): - return (a.cc, a.hint, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/sparc_const.py b/.tools/python-revlibs/capstone/sparc_const.py deleted file mode 100644 index b12eabb..0000000 --- a/.tools/python-revlibs/capstone/sparc_const.py +++ /dev/null @@ -1,430 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [sparc_const.py] - -SPARC_CC_INVALID = 0 -SPARC_CC_ICC_A = 8+256 -SPARC_CC_ICC_N = 0+256 -SPARC_CC_ICC_NE = 9+256 -SPARC_CC_ICC_E = 1+256 -SPARC_CC_ICC_G = 10+256 -SPARC_CC_ICC_LE = 2+256 -SPARC_CC_ICC_GE = 11+256 -SPARC_CC_ICC_L = 3+256 -SPARC_CC_ICC_GU = 12+256 -SPARC_CC_ICC_LEU = 4+256 -SPARC_CC_ICC_CC = 13+256 -SPARC_CC_ICC_CS = 5+256 -SPARC_CC_ICC_POS = 14+256 -SPARC_CC_ICC_NEG = 6+256 -SPARC_CC_ICC_VC = 15+256 -SPARC_CC_ICC_VS = 7+256 -SPARC_CC_FCC_A = 8+16+256 -SPARC_CC_FCC_N = 0+16+256 -SPARC_CC_FCC_U = 7+16+256 -SPARC_CC_FCC_G = 6+16+256 -SPARC_CC_FCC_UG = 5+16+256 -SPARC_CC_FCC_L = 4+16+256 -SPARC_CC_FCC_UL = 3+16+256 -SPARC_CC_FCC_LG = 2+16+256 -SPARC_CC_FCC_NE = 1+16+256 -SPARC_CC_FCC_E = 9+16+256 -SPARC_CC_FCC_UE = 10+16+256 -SPARC_CC_FCC_GE = 11+16+256 -SPARC_CC_FCC_UGE = 12+16+256 -SPARC_CC_FCC_LE = 13+16+256 -SPARC_CC_FCC_ULE = 14+16+256 -SPARC_CC_FCC_O = 15+16+256 - -SPARC_HINT_INVALID = 0 -SPARC_HINT_A = 1<<0 -SPARC_HINT_PT = 1<<1 -SPARC_HINT_PN = 1<<2 - -SPARC_OP_INVALID = 0 -SPARC_OP_REG = 1 -SPARC_OP_IMM = 2 -SPARC_OP_MEM = 3 - -SPARC_REG_INVALID = 0 -SPARC_REG_F0 = 1 -SPARC_REG_F1 = 2 -SPARC_REG_F2 = 3 -SPARC_REG_F3 = 4 -SPARC_REG_F4 = 5 -SPARC_REG_F5 = 6 -SPARC_REG_F6 = 7 -SPARC_REG_F7 = 8 -SPARC_REG_F8 = 9 -SPARC_REG_F9 = 10 -SPARC_REG_F10 = 11 -SPARC_REG_F11 = 12 -SPARC_REG_F12 = 13 -SPARC_REG_F13 = 14 -SPARC_REG_F14 = 15 -SPARC_REG_F15 = 16 -SPARC_REG_F16 = 17 -SPARC_REG_F17 = 18 -SPARC_REG_F18 = 19 -SPARC_REG_F19 = 20 -SPARC_REG_F20 = 21 -SPARC_REG_F21 = 22 -SPARC_REG_F22 = 23 -SPARC_REG_F23 = 24 -SPARC_REG_F24 = 25 -SPARC_REG_F25 = 26 -SPARC_REG_F26 = 27 -SPARC_REG_F27 = 28 -SPARC_REG_F28 = 29 -SPARC_REG_F29 = 30 -SPARC_REG_F30 = 31 -SPARC_REG_F31 = 32 -SPARC_REG_F32 = 33 -SPARC_REG_F34 = 34 -SPARC_REG_F36 = 35 -SPARC_REG_F38 = 36 -SPARC_REG_F40 = 37 -SPARC_REG_F42 = 38 -SPARC_REG_F44 = 39 -SPARC_REG_F46 = 40 -SPARC_REG_F48 = 41 -SPARC_REG_F50 = 42 -SPARC_REG_F52 = 43 -SPARC_REG_F54 = 44 -SPARC_REG_F56 = 45 -SPARC_REG_F58 = 46 -SPARC_REG_F60 = 47 -SPARC_REG_F62 = 48 -SPARC_REG_FCC0 = 49 -SPARC_REG_FCC1 = 50 -SPARC_REG_FCC2 = 51 -SPARC_REG_FCC3 = 52 -SPARC_REG_FP = 53 -SPARC_REG_G0 = 54 -SPARC_REG_G1 = 55 -SPARC_REG_G2 = 56 -SPARC_REG_G3 = 57 -SPARC_REG_G4 = 58 -SPARC_REG_G5 = 59 -SPARC_REG_G6 = 60 -SPARC_REG_G7 = 61 -SPARC_REG_I0 = 62 -SPARC_REG_I1 = 63 -SPARC_REG_I2 = 64 -SPARC_REG_I3 = 65 -SPARC_REG_I4 = 66 -SPARC_REG_I5 = 67 -SPARC_REG_I7 = 68 -SPARC_REG_ICC = 69 -SPARC_REG_L0 = 70 -SPARC_REG_L1 = 71 -SPARC_REG_L2 = 72 -SPARC_REG_L3 = 73 -SPARC_REG_L4 = 74 -SPARC_REG_L5 = 75 -SPARC_REG_L6 = 76 -SPARC_REG_L7 = 77 -SPARC_REG_O0 = 78 -SPARC_REG_O1 = 79 -SPARC_REG_O2 = 80 -SPARC_REG_O3 = 81 -SPARC_REG_O4 = 82 -SPARC_REG_O5 = 83 -SPARC_REG_O7 = 84 -SPARC_REG_SP = 85 -SPARC_REG_Y = 86 -SPARC_REG_XCC = 87 -SPARC_REG_ENDING = 88 -SPARC_REG_O6 = SPARC_REG_SP -SPARC_REG_I6 = SPARC_REG_FP - -SPARC_INS_INVALID = 0 -SPARC_INS_ADDCC = 1 -SPARC_INS_ADDX = 2 -SPARC_INS_ADDXCC = 3 -SPARC_INS_ADDXC = 4 -SPARC_INS_ADDXCCC = 5 -SPARC_INS_ADD = 6 -SPARC_INS_ALIGNADDR = 7 -SPARC_INS_ALIGNADDRL = 8 -SPARC_INS_ANDCC = 9 -SPARC_INS_ANDNCC = 10 -SPARC_INS_ANDN = 11 -SPARC_INS_AND = 12 -SPARC_INS_ARRAY16 = 13 -SPARC_INS_ARRAY32 = 14 -SPARC_INS_ARRAY8 = 15 -SPARC_INS_B = 16 -SPARC_INS_JMP = 17 -SPARC_INS_BMASK = 18 -SPARC_INS_FB = 19 -SPARC_INS_BRGEZ = 20 -SPARC_INS_BRGZ = 21 -SPARC_INS_BRLEZ = 22 -SPARC_INS_BRLZ = 23 -SPARC_INS_BRNZ = 24 -SPARC_INS_BRZ = 25 -SPARC_INS_BSHUFFLE = 26 -SPARC_INS_CALL = 27 -SPARC_INS_CASX = 28 -SPARC_INS_CAS = 29 -SPARC_INS_CMASK16 = 30 -SPARC_INS_CMASK32 = 31 -SPARC_INS_CMASK8 = 32 -SPARC_INS_CMP = 33 -SPARC_INS_EDGE16 = 34 -SPARC_INS_EDGE16L = 35 -SPARC_INS_EDGE16LN = 36 -SPARC_INS_EDGE16N = 37 -SPARC_INS_EDGE32 = 38 -SPARC_INS_EDGE32L = 39 -SPARC_INS_EDGE32LN = 40 -SPARC_INS_EDGE32N = 41 -SPARC_INS_EDGE8 = 42 -SPARC_INS_EDGE8L = 43 -SPARC_INS_EDGE8LN = 44 -SPARC_INS_EDGE8N = 45 -SPARC_INS_FABSD = 46 -SPARC_INS_FABSQ = 47 -SPARC_INS_FABSS = 48 -SPARC_INS_FADDD = 49 -SPARC_INS_FADDQ = 50 -SPARC_INS_FADDS = 51 -SPARC_INS_FALIGNDATA = 52 -SPARC_INS_FAND = 53 -SPARC_INS_FANDNOT1 = 54 -SPARC_INS_FANDNOT1S = 55 -SPARC_INS_FANDNOT2 = 56 -SPARC_INS_FANDNOT2S = 57 -SPARC_INS_FANDS = 58 -SPARC_INS_FCHKSM16 = 59 -SPARC_INS_FCMPD = 60 -SPARC_INS_FCMPEQ16 = 61 -SPARC_INS_FCMPEQ32 = 62 -SPARC_INS_FCMPGT16 = 63 -SPARC_INS_FCMPGT32 = 64 -SPARC_INS_FCMPLE16 = 65 -SPARC_INS_FCMPLE32 = 66 -SPARC_INS_FCMPNE16 = 67 -SPARC_INS_FCMPNE32 = 68 -SPARC_INS_FCMPQ = 69 -SPARC_INS_FCMPS = 70 -SPARC_INS_FDIVD = 71 -SPARC_INS_FDIVQ = 72 -SPARC_INS_FDIVS = 73 -SPARC_INS_FDMULQ = 74 -SPARC_INS_FDTOI = 75 -SPARC_INS_FDTOQ = 76 -SPARC_INS_FDTOS = 77 -SPARC_INS_FDTOX = 78 -SPARC_INS_FEXPAND = 79 -SPARC_INS_FHADDD = 80 -SPARC_INS_FHADDS = 81 -SPARC_INS_FHSUBD = 82 -SPARC_INS_FHSUBS = 83 -SPARC_INS_FITOD = 84 -SPARC_INS_FITOQ = 85 -SPARC_INS_FITOS = 86 -SPARC_INS_FLCMPD = 87 -SPARC_INS_FLCMPS = 88 -SPARC_INS_FLUSHW = 89 -SPARC_INS_FMEAN16 = 90 -SPARC_INS_FMOVD = 91 -SPARC_INS_FMOVQ = 92 -SPARC_INS_FMOVRDGEZ = 93 -SPARC_INS_FMOVRQGEZ = 94 -SPARC_INS_FMOVRSGEZ = 95 -SPARC_INS_FMOVRDGZ = 96 -SPARC_INS_FMOVRQGZ = 97 -SPARC_INS_FMOVRSGZ = 98 -SPARC_INS_FMOVRDLEZ = 99 -SPARC_INS_FMOVRQLEZ = 100 -SPARC_INS_FMOVRSLEZ = 101 -SPARC_INS_FMOVRDLZ = 102 -SPARC_INS_FMOVRQLZ = 103 -SPARC_INS_FMOVRSLZ = 104 -SPARC_INS_FMOVRDNZ = 105 -SPARC_INS_FMOVRQNZ = 106 -SPARC_INS_FMOVRSNZ = 107 -SPARC_INS_FMOVRDZ = 108 -SPARC_INS_FMOVRQZ = 109 -SPARC_INS_FMOVRSZ = 110 -SPARC_INS_FMOVS = 111 -SPARC_INS_FMUL8SUX16 = 112 -SPARC_INS_FMUL8ULX16 = 113 -SPARC_INS_FMUL8X16 = 114 -SPARC_INS_FMUL8X16AL = 115 -SPARC_INS_FMUL8X16AU = 116 -SPARC_INS_FMULD = 117 -SPARC_INS_FMULD8SUX16 = 118 -SPARC_INS_FMULD8ULX16 = 119 -SPARC_INS_FMULQ = 120 -SPARC_INS_FMULS = 121 -SPARC_INS_FNADDD = 122 -SPARC_INS_FNADDS = 123 -SPARC_INS_FNAND = 124 -SPARC_INS_FNANDS = 125 -SPARC_INS_FNEGD = 126 -SPARC_INS_FNEGQ = 127 -SPARC_INS_FNEGS = 128 -SPARC_INS_FNHADDD = 129 -SPARC_INS_FNHADDS = 130 -SPARC_INS_FNOR = 131 -SPARC_INS_FNORS = 132 -SPARC_INS_FNOT1 = 133 -SPARC_INS_FNOT1S = 134 -SPARC_INS_FNOT2 = 135 -SPARC_INS_FNOT2S = 136 -SPARC_INS_FONE = 137 -SPARC_INS_FONES = 138 -SPARC_INS_FOR = 139 -SPARC_INS_FORNOT1 = 140 -SPARC_INS_FORNOT1S = 141 -SPARC_INS_FORNOT2 = 142 -SPARC_INS_FORNOT2S = 143 -SPARC_INS_FORS = 144 -SPARC_INS_FPACK16 = 145 -SPARC_INS_FPACK32 = 146 -SPARC_INS_FPACKFIX = 147 -SPARC_INS_FPADD16 = 148 -SPARC_INS_FPADD16S = 149 -SPARC_INS_FPADD32 = 150 -SPARC_INS_FPADD32S = 151 -SPARC_INS_FPADD64 = 152 -SPARC_INS_FPMERGE = 153 -SPARC_INS_FPSUB16 = 154 -SPARC_INS_FPSUB16S = 155 -SPARC_INS_FPSUB32 = 156 -SPARC_INS_FPSUB32S = 157 -SPARC_INS_FQTOD = 158 -SPARC_INS_FQTOI = 159 -SPARC_INS_FQTOS = 160 -SPARC_INS_FQTOX = 161 -SPARC_INS_FSLAS16 = 162 -SPARC_INS_FSLAS32 = 163 -SPARC_INS_FSLL16 = 164 -SPARC_INS_FSLL32 = 165 -SPARC_INS_FSMULD = 166 -SPARC_INS_FSQRTD = 167 -SPARC_INS_FSQRTQ = 168 -SPARC_INS_FSQRTS = 169 -SPARC_INS_FSRA16 = 170 -SPARC_INS_FSRA32 = 171 -SPARC_INS_FSRC1 = 172 -SPARC_INS_FSRC1S = 173 -SPARC_INS_FSRC2 = 174 -SPARC_INS_FSRC2S = 175 -SPARC_INS_FSRL16 = 176 -SPARC_INS_FSRL32 = 177 -SPARC_INS_FSTOD = 178 -SPARC_INS_FSTOI = 179 -SPARC_INS_FSTOQ = 180 -SPARC_INS_FSTOX = 181 -SPARC_INS_FSUBD = 182 -SPARC_INS_FSUBQ = 183 -SPARC_INS_FSUBS = 184 -SPARC_INS_FXNOR = 185 -SPARC_INS_FXNORS = 186 -SPARC_INS_FXOR = 187 -SPARC_INS_FXORS = 188 -SPARC_INS_FXTOD = 189 -SPARC_INS_FXTOQ = 190 -SPARC_INS_FXTOS = 191 -SPARC_INS_FZERO = 192 -SPARC_INS_FZEROS = 193 -SPARC_INS_JMPL = 194 -SPARC_INS_LDD = 195 -SPARC_INS_LD = 196 -SPARC_INS_LDQ = 197 -SPARC_INS_LDSB = 198 -SPARC_INS_LDSH = 199 -SPARC_INS_LDSW = 200 -SPARC_INS_LDUB = 201 -SPARC_INS_LDUH = 202 -SPARC_INS_LDX = 203 -SPARC_INS_LZCNT = 204 -SPARC_INS_MEMBAR = 205 -SPARC_INS_MOVDTOX = 206 -SPARC_INS_MOV = 207 -SPARC_INS_MOVRGEZ = 208 -SPARC_INS_MOVRGZ = 209 -SPARC_INS_MOVRLEZ = 210 -SPARC_INS_MOVRLZ = 211 -SPARC_INS_MOVRNZ = 212 -SPARC_INS_MOVRZ = 213 -SPARC_INS_MOVSTOSW = 214 -SPARC_INS_MOVSTOUW = 215 -SPARC_INS_MULX = 216 -SPARC_INS_NOP = 217 -SPARC_INS_ORCC = 218 -SPARC_INS_ORNCC = 219 -SPARC_INS_ORN = 220 -SPARC_INS_OR = 221 -SPARC_INS_PDIST = 222 -SPARC_INS_PDISTN = 223 -SPARC_INS_POPC = 224 -SPARC_INS_RD = 225 -SPARC_INS_RESTORE = 226 -SPARC_INS_RETT = 227 -SPARC_INS_SAVE = 228 -SPARC_INS_SDIVCC = 229 -SPARC_INS_SDIVX = 230 -SPARC_INS_SDIV = 231 -SPARC_INS_SETHI = 232 -SPARC_INS_SHUTDOWN = 233 -SPARC_INS_SIAM = 234 -SPARC_INS_SLLX = 235 -SPARC_INS_SLL = 236 -SPARC_INS_SMULCC = 237 -SPARC_INS_SMUL = 238 -SPARC_INS_SRAX = 239 -SPARC_INS_SRA = 240 -SPARC_INS_SRLX = 241 -SPARC_INS_SRL = 242 -SPARC_INS_STBAR = 243 -SPARC_INS_STB = 244 -SPARC_INS_STD = 245 -SPARC_INS_ST = 246 -SPARC_INS_STH = 247 -SPARC_INS_STQ = 248 -SPARC_INS_STX = 249 -SPARC_INS_SUBCC = 250 -SPARC_INS_SUBX = 251 -SPARC_INS_SUBXCC = 252 -SPARC_INS_SUB = 253 -SPARC_INS_SWAP = 254 -SPARC_INS_TADDCCTV = 255 -SPARC_INS_TADDCC = 256 -SPARC_INS_T = 257 -SPARC_INS_TSUBCCTV = 258 -SPARC_INS_TSUBCC = 259 -SPARC_INS_UDIVCC = 260 -SPARC_INS_UDIVX = 261 -SPARC_INS_UDIV = 262 -SPARC_INS_UMULCC = 263 -SPARC_INS_UMULXHI = 264 -SPARC_INS_UMUL = 265 -SPARC_INS_UNIMP = 266 -SPARC_INS_FCMPED = 267 -SPARC_INS_FCMPEQ = 268 -SPARC_INS_FCMPES = 269 -SPARC_INS_WR = 270 -SPARC_INS_XMULX = 271 -SPARC_INS_XMULXHI = 272 -SPARC_INS_XNORCC = 273 -SPARC_INS_XNOR = 274 -SPARC_INS_XORCC = 275 -SPARC_INS_XOR = 276 -SPARC_INS_RET = 277 -SPARC_INS_RETL = 278 -SPARC_INS_ENDING = 279 - -SPARC_GRP_INVALID = 0 -SPARC_GRP_JUMP = 1 -SPARC_GRP_HARDQUAD = 128 -SPARC_GRP_V9 = 129 -SPARC_GRP_VIS = 130 -SPARC_GRP_VIS2 = 131 -SPARC_GRP_VIS3 = 132 -SPARC_GRP_32BIT = 133 -SPARC_GRP_64BIT = 134 -SPARC_GRP_ENDING = 135 diff --git a/.tools/python-revlibs/capstone/systemz.py b/.tools/python-revlibs/capstone/systemz.py deleted file mode 100644 index 398018b..0000000 --- a/.tools/python-revlibs/capstone/systemz.py +++ /dev/null @@ -1,51 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .sysz_const import * - -# define the API -class SyszOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint8), - ('index', ctypes.c_uint8), - ('length', ctypes.c_uint64), - ('disp', ctypes.c_int64), - ) - -class SyszOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('mem', SyszOpMem), - ) - -class SyszOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', SyszOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -class CsSysz(ctypes.Structure): - _fields_ = ( - ('cc', ctypes.c_uint), - ('op_count', ctypes.c_uint8), - ('operands', SyszOp * 6), - ) - -def get_arch_info(a): - return (a.cc, copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/sysz_const.py b/.tools/python-revlibs/capstone/sysz_const.py deleted file mode 100644 index d79baf8..0000000 --- a/.tools/python-revlibs/capstone/sysz_const.py +++ /dev/null @@ -1,2524 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [sysz_const.py] - -SYSZ_CC_INVALID = 0 -SYSZ_CC_O = 1 -SYSZ_CC_H = 2 -SYSZ_CC_NLE = 3 -SYSZ_CC_L = 4 -SYSZ_CC_NHE = 5 -SYSZ_CC_LH = 6 -SYSZ_CC_NE = 7 -SYSZ_CC_E = 8 -SYSZ_CC_NLH = 9 -SYSZ_CC_HE = 10 -SYSZ_CC_NL = 11 -SYSZ_CC_LE = 12 -SYSZ_CC_NH = 13 -SYSZ_CC_NO = 14 - -SYSZ_OP_INVALID = 0 -SYSZ_OP_REG = 1 -SYSZ_OP_IMM = 2 -SYSZ_OP_MEM = 3 -SYSZ_OP_ACREG = 64 - -SYSZ_REG_INVALID = 0 -SYSZ_REG_0 = 1 -SYSZ_REG_1 = 2 -SYSZ_REG_2 = 3 -SYSZ_REG_3 = 4 -SYSZ_REG_4 = 5 -SYSZ_REG_5 = 6 -SYSZ_REG_6 = 7 -SYSZ_REG_7 = 8 -SYSZ_REG_8 = 9 -SYSZ_REG_9 = 10 -SYSZ_REG_10 = 11 -SYSZ_REG_11 = 12 -SYSZ_REG_12 = 13 -SYSZ_REG_13 = 14 -SYSZ_REG_14 = 15 -SYSZ_REG_15 = 16 -SYSZ_REG_CC = 17 -SYSZ_REG_F0 = 18 -SYSZ_REG_F1 = 19 -SYSZ_REG_F2 = 20 -SYSZ_REG_F3 = 21 -SYSZ_REG_F4 = 22 -SYSZ_REG_F5 = 23 -SYSZ_REG_F6 = 24 -SYSZ_REG_F7 = 25 -SYSZ_REG_F8 = 26 -SYSZ_REG_F9 = 27 -SYSZ_REG_F10 = 28 -SYSZ_REG_F11 = 29 -SYSZ_REG_F12 = 30 -SYSZ_REG_F13 = 31 -SYSZ_REG_F14 = 32 -SYSZ_REG_F15 = 33 -SYSZ_REG_R0L = 34 -SYSZ_REG_A0 = 35 -SYSZ_REG_A1 = 36 -SYSZ_REG_A2 = 37 -SYSZ_REG_A3 = 38 -SYSZ_REG_A4 = 39 -SYSZ_REG_A5 = 40 -SYSZ_REG_A6 = 41 -SYSZ_REG_A7 = 42 -SYSZ_REG_A8 = 43 -SYSZ_REG_A9 = 44 -SYSZ_REG_A10 = 45 -SYSZ_REG_A11 = 46 -SYSZ_REG_A12 = 47 -SYSZ_REG_A13 = 48 -SYSZ_REG_A14 = 49 -SYSZ_REG_A15 = 50 -SYSZ_REG_C0 = 51 -SYSZ_REG_C1 = 52 -SYSZ_REG_C2 = 53 -SYSZ_REG_C3 = 54 -SYSZ_REG_C4 = 55 -SYSZ_REG_C5 = 56 -SYSZ_REG_C6 = 57 -SYSZ_REG_C7 = 58 -SYSZ_REG_C8 = 59 -SYSZ_REG_C9 = 60 -SYSZ_REG_C10 = 61 -SYSZ_REG_C11 = 62 -SYSZ_REG_C12 = 63 -SYSZ_REG_C13 = 64 -SYSZ_REG_C14 = 65 -SYSZ_REG_C15 = 66 -SYSZ_REG_V0 = 67 -SYSZ_REG_V1 = 68 -SYSZ_REG_V2 = 69 -SYSZ_REG_V3 = 70 -SYSZ_REG_V4 = 71 -SYSZ_REG_V5 = 72 -SYSZ_REG_V6 = 73 -SYSZ_REG_V7 = 74 -SYSZ_REG_V8 = 75 -SYSZ_REG_V9 = 76 -SYSZ_REG_V10 = 77 -SYSZ_REG_V11 = 78 -SYSZ_REG_V12 = 79 -SYSZ_REG_V13 = 80 -SYSZ_REG_V14 = 81 -SYSZ_REG_V15 = 82 -SYSZ_REG_V16 = 83 -SYSZ_REG_V17 = 84 -SYSZ_REG_V18 = 85 -SYSZ_REG_V19 = 86 -SYSZ_REG_V20 = 87 -SYSZ_REG_V21 = 88 -SYSZ_REG_V22 = 89 -SYSZ_REG_V23 = 90 -SYSZ_REG_V24 = 91 -SYSZ_REG_V25 = 92 -SYSZ_REG_V26 = 93 -SYSZ_REG_V27 = 94 -SYSZ_REG_V28 = 95 -SYSZ_REG_V29 = 96 -SYSZ_REG_V30 = 97 -SYSZ_REG_V31 = 98 -SYSZ_REG_F16 = 99 -SYSZ_REG_F17 = 100 -SYSZ_REG_F18 = 101 -SYSZ_REG_F19 = 102 -SYSZ_REG_F20 = 103 -SYSZ_REG_F21 = 104 -SYSZ_REG_F22 = 105 -SYSZ_REG_F23 = 106 -SYSZ_REG_F24 = 107 -SYSZ_REG_F25 = 108 -SYSZ_REG_F26 = 109 -SYSZ_REG_F27 = 110 -SYSZ_REG_F28 = 111 -SYSZ_REG_F29 = 112 -SYSZ_REG_F30 = 113 -SYSZ_REG_F31 = 114 -SYSZ_REG_F0Q = 115 -SYSZ_REG_F4Q = 116 -SYSZ_REG_ENDING = 117 - -SYSZ_INS_INVALID = 0 -SYSZ_INS_A = 1 -SYSZ_INS_ADB = 2 -SYSZ_INS_ADBR = 3 -SYSZ_INS_AEB = 4 -SYSZ_INS_AEBR = 5 -SYSZ_INS_AFI = 6 -SYSZ_INS_AG = 7 -SYSZ_INS_AGF = 8 -SYSZ_INS_AGFI = 9 -SYSZ_INS_AGFR = 10 -SYSZ_INS_AGHI = 11 -SYSZ_INS_AGHIK = 12 -SYSZ_INS_AGR = 13 -SYSZ_INS_AGRK = 14 -SYSZ_INS_AGSI = 15 -SYSZ_INS_AH = 16 -SYSZ_INS_AHI = 17 -SYSZ_INS_AHIK = 18 -SYSZ_INS_AHY = 19 -SYSZ_INS_AIH = 20 -SYSZ_INS_AL = 21 -SYSZ_INS_ALC = 22 -SYSZ_INS_ALCG = 23 -SYSZ_INS_ALCGR = 24 -SYSZ_INS_ALCR = 25 -SYSZ_INS_ALFI = 26 -SYSZ_INS_ALG = 27 -SYSZ_INS_ALGF = 28 -SYSZ_INS_ALGFI = 29 -SYSZ_INS_ALGFR = 30 -SYSZ_INS_ALGHSIK = 31 -SYSZ_INS_ALGR = 32 -SYSZ_INS_ALGRK = 33 -SYSZ_INS_ALHSIK = 34 -SYSZ_INS_ALR = 35 -SYSZ_INS_ALRK = 36 -SYSZ_INS_ALY = 37 -SYSZ_INS_AR = 38 -SYSZ_INS_ARK = 39 -SYSZ_INS_ASI = 40 -SYSZ_INS_AXBR = 41 -SYSZ_INS_AY = 42 -SYSZ_INS_BCR = 43 -SYSZ_INS_BRC = 44 -SYSZ_INS_BRCL = 45 -SYSZ_INS_CGIJ = 46 -SYSZ_INS_CGRJ = 47 -SYSZ_INS_CIJ = 48 -SYSZ_INS_CLGIJ = 49 -SYSZ_INS_CLGRJ = 50 -SYSZ_INS_CLIJ = 51 -SYSZ_INS_CLRJ = 52 -SYSZ_INS_CRJ = 53 -SYSZ_INS_BER = 54 -SYSZ_INS_JE = 55 -SYSZ_INS_JGE = 56 -SYSZ_INS_LOCE = 57 -SYSZ_INS_LOCGE = 58 -SYSZ_INS_LOCGRE = 59 -SYSZ_INS_LOCRE = 60 -SYSZ_INS_STOCE = 61 -SYSZ_INS_STOCGE = 62 -SYSZ_INS_BHR = 63 -SYSZ_INS_BHER = 64 -SYSZ_INS_JHE = 65 -SYSZ_INS_JGHE = 66 -SYSZ_INS_LOCHE = 67 -SYSZ_INS_LOCGHE = 68 -SYSZ_INS_LOCGRHE = 69 -SYSZ_INS_LOCRHE = 70 -SYSZ_INS_STOCHE = 71 -SYSZ_INS_STOCGHE = 72 -SYSZ_INS_JH = 73 -SYSZ_INS_JGH = 74 -SYSZ_INS_LOCH = 75 -SYSZ_INS_LOCGH = 76 -SYSZ_INS_LOCGRH = 77 -SYSZ_INS_LOCRH = 78 -SYSZ_INS_STOCH = 79 -SYSZ_INS_STOCGH = 80 -SYSZ_INS_CGIJNLH = 81 -SYSZ_INS_CGRJNLH = 82 -SYSZ_INS_CIJNLH = 83 -SYSZ_INS_CLGIJNLH = 84 -SYSZ_INS_CLGRJNLH = 85 -SYSZ_INS_CLIJNLH = 86 -SYSZ_INS_CLRJNLH = 87 -SYSZ_INS_CRJNLH = 88 -SYSZ_INS_CGIJE = 89 -SYSZ_INS_CGRJE = 90 -SYSZ_INS_CIJE = 91 -SYSZ_INS_CLGIJE = 92 -SYSZ_INS_CLGRJE = 93 -SYSZ_INS_CLIJE = 94 -SYSZ_INS_CLRJE = 95 -SYSZ_INS_CRJE = 96 -SYSZ_INS_CGIJNLE = 97 -SYSZ_INS_CGRJNLE = 98 -SYSZ_INS_CIJNLE = 99 -SYSZ_INS_CLGIJNLE = 100 -SYSZ_INS_CLGRJNLE = 101 -SYSZ_INS_CLIJNLE = 102 -SYSZ_INS_CLRJNLE = 103 -SYSZ_INS_CRJNLE = 104 -SYSZ_INS_CGIJH = 105 -SYSZ_INS_CGRJH = 106 -SYSZ_INS_CIJH = 107 -SYSZ_INS_CLGIJH = 108 -SYSZ_INS_CLGRJH = 109 -SYSZ_INS_CLIJH = 110 -SYSZ_INS_CLRJH = 111 -SYSZ_INS_CRJH = 112 -SYSZ_INS_CGIJNL = 113 -SYSZ_INS_CGRJNL = 114 -SYSZ_INS_CIJNL = 115 -SYSZ_INS_CLGIJNL = 116 -SYSZ_INS_CLGRJNL = 117 -SYSZ_INS_CLIJNL = 118 -SYSZ_INS_CLRJNL = 119 -SYSZ_INS_CRJNL = 120 -SYSZ_INS_CGIJHE = 121 -SYSZ_INS_CGRJHE = 122 -SYSZ_INS_CIJHE = 123 -SYSZ_INS_CLGIJHE = 124 -SYSZ_INS_CLGRJHE = 125 -SYSZ_INS_CLIJHE = 126 -SYSZ_INS_CLRJHE = 127 -SYSZ_INS_CRJHE = 128 -SYSZ_INS_CGIJNHE = 129 -SYSZ_INS_CGRJNHE = 130 -SYSZ_INS_CIJNHE = 131 -SYSZ_INS_CLGIJNHE = 132 -SYSZ_INS_CLGRJNHE = 133 -SYSZ_INS_CLIJNHE = 134 -SYSZ_INS_CLRJNHE = 135 -SYSZ_INS_CRJNHE = 136 -SYSZ_INS_CGIJL = 137 -SYSZ_INS_CGRJL = 138 -SYSZ_INS_CIJL = 139 -SYSZ_INS_CLGIJL = 140 -SYSZ_INS_CLGRJL = 141 -SYSZ_INS_CLIJL = 142 -SYSZ_INS_CLRJL = 143 -SYSZ_INS_CRJL = 144 -SYSZ_INS_CGIJNH = 145 -SYSZ_INS_CGRJNH = 146 -SYSZ_INS_CIJNH = 147 -SYSZ_INS_CLGIJNH = 148 -SYSZ_INS_CLGRJNH = 149 -SYSZ_INS_CLIJNH = 150 -SYSZ_INS_CLRJNH = 151 -SYSZ_INS_CRJNH = 152 -SYSZ_INS_CGIJLE = 153 -SYSZ_INS_CGRJLE = 154 -SYSZ_INS_CIJLE = 155 -SYSZ_INS_CLGIJLE = 156 -SYSZ_INS_CLGRJLE = 157 -SYSZ_INS_CLIJLE = 158 -SYSZ_INS_CLRJLE = 159 -SYSZ_INS_CRJLE = 160 -SYSZ_INS_CGIJNE = 161 -SYSZ_INS_CGRJNE = 162 -SYSZ_INS_CIJNE = 163 -SYSZ_INS_CLGIJNE = 164 -SYSZ_INS_CLGRJNE = 165 -SYSZ_INS_CLIJNE = 166 -SYSZ_INS_CLRJNE = 167 -SYSZ_INS_CRJNE = 168 -SYSZ_INS_CGIJLH = 169 -SYSZ_INS_CGRJLH = 170 -SYSZ_INS_CIJLH = 171 -SYSZ_INS_CLGIJLH = 172 -SYSZ_INS_CLGRJLH = 173 -SYSZ_INS_CLIJLH = 174 -SYSZ_INS_CLRJLH = 175 -SYSZ_INS_CRJLH = 176 -SYSZ_INS_BLR = 177 -SYSZ_INS_BLER = 178 -SYSZ_INS_JLE = 179 -SYSZ_INS_JGLE = 180 -SYSZ_INS_LOCLE = 181 -SYSZ_INS_LOCGLE = 182 -SYSZ_INS_LOCGRLE = 183 -SYSZ_INS_LOCRLE = 184 -SYSZ_INS_STOCLE = 185 -SYSZ_INS_STOCGLE = 186 -SYSZ_INS_BLHR = 187 -SYSZ_INS_JLH = 188 -SYSZ_INS_JGLH = 189 -SYSZ_INS_LOCLH = 190 -SYSZ_INS_LOCGLH = 191 -SYSZ_INS_LOCGRLH = 192 -SYSZ_INS_LOCRLH = 193 -SYSZ_INS_STOCLH = 194 -SYSZ_INS_STOCGLH = 195 -SYSZ_INS_JL = 196 -SYSZ_INS_JGL = 197 -SYSZ_INS_LOCL = 198 -SYSZ_INS_LOCGL = 199 -SYSZ_INS_LOCGRL = 200 -SYSZ_INS_LOCRL = 201 -SYSZ_INS_LOC = 202 -SYSZ_INS_LOCG = 203 -SYSZ_INS_LOCGR = 204 -SYSZ_INS_LOCR = 205 -SYSZ_INS_STOCL = 206 -SYSZ_INS_STOCGL = 207 -SYSZ_INS_BNER = 208 -SYSZ_INS_JNE = 209 -SYSZ_INS_JGNE = 210 -SYSZ_INS_LOCNE = 211 -SYSZ_INS_LOCGNE = 212 -SYSZ_INS_LOCGRNE = 213 -SYSZ_INS_LOCRNE = 214 -SYSZ_INS_STOCNE = 215 -SYSZ_INS_STOCGNE = 216 -SYSZ_INS_BNHR = 217 -SYSZ_INS_BNHER = 218 -SYSZ_INS_JNHE = 219 -SYSZ_INS_JGNHE = 220 -SYSZ_INS_LOCNHE = 221 -SYSZ_INS_LOCGNHE = 222 -SYSZ_INS_LOCGRNHE = 223 -SYSZ_INS_LOCRNHE = 224 -SYSZ_INS_STOCNHE = 225 -SYSZ_INS_STOCGNHE = 226 -SYSZ_INS_JNH = 227 -SYSZ_INS_JGNH = 228 -SYSZ_INS_LOCNH = 229 -SYSZ_INS_LOCGNH = 230 -SYSZ_INS_LOCGRNH = 231 -SYSZ_INS_LOCRNH = 232 -SYSZ_INS_STOCNH = 233 -SYSZ_INS_STOCGNH = 234 -SYSZ_INS_BNLR = 235 -SYSZ_INS_BNLER = 236 -SYSZ_INS_JNLE = 237 -SYSZ_INS_JGNLE = 238 -SYSZ_INS_LOCNLE = 239 -SYSZ_INS_LOCGNLE = 240 -SYSZ_INS_LOCGRNLE = 241 -SYSZ_INS_LOCRNLE = 242 -SYSZ_INS_STOCNLE = 243 -SYSZ_INS_STOCGNLE = 244 -SYSZ_INS_BNLHR = 245 -SYSZ_INS_JNLH = 246 -SYSZ_INS_JGNLH = 247 -SYSZ_INS_LOCNLH = 248 -SYSZ_INS_LOCGNLH = 249 -SYSZ_INS_LOCGRNLH = 250 -SYSZ_INS_LOCRNLH = 251 -SYSZ_INS_STOCNLH = 252 -SYSZ_INS_STOCGNLH = 253 -SYSZ_INS_JNL = 254 -SYSZ_INS_JGNL = 255 -SYSZ_INS_LOCNL = 256 -SYSZ_INS_LOCGNL = 257 -SYSZ_INS_LOCGRNL = 258 -SYSZ_INS_LOCRNL = 259 -SYSZ_INS_STOCNL = 260 -SYSZ_INS_STOCGNL = 261 -SYSZ_INS_BNOR = 262 -SYSZ_INS_JNO = 263 -SYSZ_INS_JGNO = 264 -SYSZ_INS_LOCNO = 265 -SYSZ_INS_LOCGNO = 266 -SYSZ_INS_LOCGRNO = 267 -SYSZ_INS_LOCRNO = 268 -SYSZ_INS_STOCNO = 269 -SYSZ_INS_STOCGNO = 270 -SYSZ_INS_BOR = 271 -SYSZ_INS_JO = 272 -SYSZ_INS_JGO = 273 -SYSZ_INS_LOCO = 274 -SYSZ_INS_LOCGO = 275 -SYSZ_INS_LOCGRO = 276 -SYSZ_INS_LOCRO = 277 -SYSZ_INS_STOCO = 278 -SYSZ_INS_STOCGO = 279 -SYSZ_INS_STOC = 280 -SYSZ_INS_STOCG = 281 -SYSZ_INS_BASR = 282 -SYSZ_INS_BR = 283 -SYSZ_INS_BRAS = 284 -SYSZ_INS_BRASL = 285 -SYSZ_INS_J = 286 -SYSZ_INS_JG = 287 -SYSZ_INS_BRCT = 288 -SYSZ_INS_BRCTG = 289 -SYSZ_INS_C = 290 -SYSZ_INS_CDB = 291 -SYSZ_INS_CDBR = 292 -SYSZ_INS_CDFBR = 293 -SYSZ_INS_CDGBR = 294 -SYSZ_INS_CDLFBR = 295 -SYSZ_INS_CDLGBR = 296 -SYSZ_INS_CEB = 297 -SYSZ_INS_CEBR = 298 -SYSZ_INS_CEFBR = 299 -SYSZ_INS_CEGBR = 300 -SYSZ_INS_CELFBR = 301 -SYSZ_INS_CELGBR = 302 -SYSZ_INS_CFDBR = 303 -SYSZ_INS_CFEBR = 304 -SYSZ_INS_CFI = 305 -SYSZ_INS_CFXBR = 306 -SYSZ_INS_CG = 307 -SYSZ_INS_CGDBR = 308 -SYSZ_INS_CGEBR = 309 -SYSZ_INS_CGF = 310 -SYSZ_INS_CGFI = 311 -SYSZ_INS_CGFR = 312 -SYSZ_INS_CGFRL = 313 -SYSZ_INS_CGH = 314 -SYSZ_INS_CGHI = 315 -SYSZ_INS_CGHRL = 316 -SYSZ_INS_CGHSI = 317 -SYSZ_INS_CGR = 318 -SYSZ_INS_CGRL = 319 -SYSZ_INS_CGXBR = 320 -SYSZ_INS_CH = 321 -SYSZ_INS_CHF = 322 -SYSZ_INS_CHHSI = 323 -SYSZ_INS_CHI = 324 -SYSZ_INS_CHRL = 325 -SYSZ_INS_CHSI = 326 -SYSZ_INS_CHY = 327 -SYSZ_INS_CIH = 328 -SYSZ_INS_CL = 329 -SYSZ_INS_CLC = 330 -SYSZ_INS_CLFDBR = 331 -SYSZ_INS_CLFEBR = 332 -SYSZ_INS_CLFHSI = 333 -SYSZ_INS_CLFI = 334 -SYSZ_INS_CLFXBR = 335 -SYSZ_INS_CLG = 336 -SYSZ_INS_CLGDBR = 337 -SYSZ_INS_CLGEBR = 338 -SYSZ_INS_CLGF = 339 -SYSZ_INS_CLGFI = 340 -SYSZ_INS_CLGFR = 341 -SYSZ_INS_CLGFRL = 342 -SYSZ_INS_CLGHRL = 343 -SYSZ_INS_CLGHSI = 344 -SYSZ_INS_CLGR = 345 -SYSZ_INS_CLGRL = 346 -SYSZ_INS_CLGXBR = 347 -SYSZ_INS_CLHF = 348 -SYSZ_INS_CLHHSI = 349 -SYSZ_INS_CLHRL = 350 -SYSZ_INS_CLI = 351 -SYSZ_INS_CLIH = 352 -SYSZ_INS_CLIY = 353 -SYSZ_INS_CLR = 354 -SYSZ_INS_CLRL = 355 -SYSZ_INS_CLST = 356 -SYSZ_INS_CLY = 357 -SYSZ_INS_CPSDR = 358 -SYSZ_INS_CR = 359 -SYSZ_INS_CRL = 360 -SYSZ_INS_CS = 361 -SYSZ_INS_CSG = 362 -SYSZ_INS_CSY = 363 -SYSZ_INS_CXBR = 364 -SYSZ_INS_CXFBR = 365 -SYSZ_INS_CXGBR = 366 -SYSZ_INS_CXLFBR = 367 -SYSZ_INS_CXLGBR = 368 -SYSZ_INS_CY = 369 -SYSZ_INS_DDB = 370 -SYSZ_INS_DDBR = 371 -SYSZ_INS_DEB = 372 -SYSZ_INS_DEBR = 373 -SYSZ_INS_DL = 374 -SYSZ_INS_DLG = 375 -SYSZ_INS_DLGR = 376 -SYSZ_INS_DLR = 377 -SYSZ_INS_DSG = 378 -SYSZ_INS_DSGF = 379 -SYSZ_INS_DSGFR = 380 -SYSZ_INS_DSGR = 381 -SYSZ_INS_DXBR = 382 -SYSZ_INS_EAR = 383 -SYSZ_INS_FIDBR = 384 -SYSZ_INS_FIDBRA = 385 -SYSZ_INS_FIEBR = 386 -SYSZ_INS_FIEBRA = 387 -SYSZ_INS_FIXBR = 388 -SYSZ_INS_FIXBRA = 389 -SYSZ_INS_FLOGR = 390 -SYSZ_INS_IC = 391 -SYSZ_INS_ICY = 392 -SYSZ_INS_IIHF = 393 -SYSZ_INS_IIHH = 394 -SYSZ_INS_IIHL = 395 -SYSZ_INS_IILF = 396 -SYSZ_INS_IILH = 397 -SYSZ_INS_IILL = 398 -SYSZ_INS_IPM = 399 -SYSZ_INS_L = 400 -SYSZ_INS_LA = 401 -SYSZ_INS_LAA = 402 -SYSZ_INS_LAAG = 403 -SYSZ_INS_LAAL = 404 -SYSZ_INS_LAALG = 405 -SYSZ_INS_LAN = 406 -SYSZ_INS_LANG = 407 -SYSZ_INS_LAO = 408 -SYSZ_INS_LAOG = 409 -SYSZ_INS_LARL = 410 -SYSZ_INS_LAX = 411 -SYSZ_INS_LAXG = 412 -SYSZ_INS_LAY = 413 -SYSZ_INS_LB = 414 -SYSZ_INS_LBH = 415 -SYSZ_INS_LBR = 416 -SYSZ_INS_LCDBR = 417 -SYSZ_INS_LCEBR = 418 -SYSZ_INS_LCGFR = 419 -SYSZ_INS_LCGR = 420 -SYSZ_INS_LCR = 421 -SYSZ_INS_LCXBR = 422 -SYSZ_INS_LD = 423 -SYSZ_INS_LDEB = 424 -SYSZ_INS_LDEBR = 425 -SYSZ_INS_LDGR = 426 -SYSZ_INS_LDR = 427 -SYSZ_INS_LDXBR = 428 -SYSZ_INS_LDXBRA = 429 -SYSZ_INS_LDY = 430 -SYSZ_INS_LE = 431 -SYSZ_INS_LEDBR = 432 -SYSZ_INS_LEDBRA = 433 -SYSZ_INS_LER = 434 -SYSZ_INS_LEXBR = 435 -SYSZ_INS_LEXBRA = 436 -SYSZ_INS_LEY = 437 -SYSZ_INS_LFH = 438 -SYSZ_INS_LG = 439 -SYSZ_INS_LGB = 440 -SYSZ_INS_LGBR = 441 -SYSZ_INS_LGDR = 442 -SYSZ_INS_LGF = 443 -SYSZ_INS_LGFI = 444 -SYSZ_INS_LGFR = 445 -SYSZ_INS_LGFRL = 446 -SYSZ_INS_LGH = 447 -SYSZ_INS_LGHI = 448 -SYSZ_INS_LGHR = 449 -SYSZ_INS_LGHRL = 450 -SYSZ_INS_LGR = 451 -SYSZ_INS_LGRL = 452 -SYSZ_INS_LH = 453 -SYSZ_INS_LHH = 454 -SYSZ_INS_LHI = 455 -SYSZ_INS_LHR = 456 -SYSZ_INS_LHRL = 457 -SYSZ_INS_LHY = 458 -SYSZ_INS_LLC = 459 -SYSZ_INS_LLCH = 460 -SYSZ_INS_LLCR = 461 -SYSZ_INS_LLGC = 462 -SYSZ_INS_LLGCR = 463 -SYSZ_INS_LLGF = 464 -SYSZ_INS_LLGFR = 465 -SYSZ_INS_LLGFRL = 466 -SYSZ_INS_LLGH = 467 -SYSZ_INS_LLGHR = 468 -SYSZ_INS_LLGHRL = 469 -SYSZ_INS_LLH = 470 -SYSZ_INS_LLHH = 471 -SYSZ_INS_LLHR = 472 -SYSZ_INS_LLHRL = 473 -SYSZ_INS_LLIHF = 474 -SYSZ_INS_LLIHH = 475 -SYSZ_INS_LLIHL = 476 -SYSZ_INS_LLILF = 477 -SYSZ_INS_LLILH = 478 -SYSZ_INS_LLILL = 479 -SYSZ_INS_LMG = 480 -SYSZ_INS_LNDBR = 481 -SYSZ_INS_LNEBR = 482 -SYSZ_INS_LNGFR = 483 -SYSZ_INS_LNGR = 484 -SYSZ_INS_LNR = 485 -SYSZ_INS_LNXBR = 486 -SYSZ_INS_LPDBR = 487 -SYSZ_INS_LPEBR = 488 -SYSZ_INS_LPGFR = 489 -SYSZ_INS_LPGR = 490 -SYSZ_INS_LPR = 491 -SYSZ_INS_LPXBR = 492 -SYSZ_INS_LR = 493 -SYSZ_INS_LRL = 494 -SYSZ_INS_LRV = 495 -SYSZ_INS_LRVG = 496 -SYSZ_INS_LRVGR = 497 -SYSZ_INS_LRVR = 498 -SYSZ_INS_LT = 499 -SYSZ_INS_LTDBR = 500 -SYSZ_INS_LTEBR = 501 -SYSZ_INS_LTG = 502 -SYSZ_INS_LTGF = 503 -SYSZ_INS_LTGFR = 504 -SYSZ_INS_LTGR = 505 -SYSZ_INS_LTR = 506 -SYSZ_INS_LTXBR = 507 -SYSZ_INS_LXDB = 508 -SYSZ_INS_LXDBR = 509 -SYSZ_INS_LXEB = 510 -SYSZ_INS_LXEBR = 511 -SYSZ_INS_LXR = 512 -SYSZ_INS_LY = 513 -SYSZ_INS_LZDR = 514 -SYSZ_INS_LZER = 515 -SYSZ_INS_LZXR = 516 -SYSZ_INS_MADB = 517 -SYSZ_INS_MADBR = 518 -SYSZ_INS_MAEB = 519 -SYSZ_INS_MAEBR = 520 -SYSZ_INS_MDB = 521 -SYSZ_INS_MDBR = 522 -SYSZ_INS_MDEB = 523 -SYSZ_INS_MDEBR = 524 -SYSZ_INS_MEEB = 525 -SYSZ_INS_MEEBR = 526 -SYSZ_INS_MGHI = 527 -SYSZ_INS_MH = 528 -SYSZ_INS_MHI = 529 -SYSZ_INS_MHY = 530 -SYSZ_INS_MLG = 531 -SYSZ_INS_MLGR = 532 -SYSZ_INS_MS = 533 -SYSZ_INS_MSDB = 534 -SYSZ_INS_MSDBR = 535 -SYSZ_INS_MSEB = 536 -SYSZ_INS_MSEBR = 537 -SYSZ_INS_MSFI = 538 -SYSZ_INS_MSG = 539 -SYSZ_INS_MSGF = 540 -SYSZ_INS_MSGFI = 541 -SYSZ_INS_MSGFR = 542 -SYSZ_INS_MSGR = 543 -SYSZ_INS_MSR = 544 -SYSZ_INS_MSY = 545 -SYSZ_INS_MVC = 546 -SYSZ_INS_MVGHI = 547 -SYSZ_INS_MVHHI = 548 -SYSZ_INS_MVHI = 549 -SYSZ_INS_MVI = 550 -SYSZ_INS_MVIY = 551 -SYSZ_INS_MVST = 552 -SYSZ_INS_MXBR = 553 -SYSZ_INS_MXDB = 554 -SYSZ_INS_MXDBR = 555 -SYSZ_INS_N = 556 -SYSZ_INS_NC = 557 -SYSZ_INS_NG = 558 -SYSZ_INS_NGR = 559 -SYSZ_INS_NGRK = 560 -SYSZ_INS_NI = 561 -SYSZ_INS_NIHF = 562 -SYSZ_INS_NIHH = 563 -SYSZ_INS_NIHL = 564 -SYSZ_INS_NILF = 565 -SYSZ_INS_NILH = 566 -SYSZ_INS_NILL = 567 -SYSZ_INS_NIY = 568 -SYSZ_INS_NR = 569 -SYSZ_INS_NRK = 570 -SYSZ_INS_NY = 571 -SYSZ_INS_O = 572 -SYSZ_INS_OC = 573 -SYSZ_INS_OG = 574 -SYSZ_INS_OGR = 575 -SYSZ_INS_OGRK = 576 -SYSZ_INS_OI = 577 -SYSZ_INS_OIHF = 578 -SYSZ_INS_OIHH = 579 -SYSZ_INS_OIHL = 580 -SYSZ_INS_OILF = 581 -SYSZ_INS_OILH = 582 -SYSZ_INS_OILL = 583 -SYSZ_INS_OIY = 584 -SYSZ_INS_OR = 585 -SYSZ_INS_ORK = 586 -SYSZ_INS_OY = 587 -SYSZ_INS_PFD = 588 -SYSZ_INS_PFDRL = 589 -SYSZ_INS_RISBG = 590 -SYSZ_INS_RISBHG = 591 -SYSZ_INS_RISBLG = 592 -SYSZ_INS_RLL = 593 -SYSZ_INS_RLLG = 594 -SYSZ_INS_RNSBG = 595 -SYSZ_INS_ROSBG = 596 -SYSZ_INS_RXSBG = 597 -SYSZ_INS_S = 598 -SYSZ_INS_SDB = 599 -SYSZ_INS_SDBR = 600 -SYSZ_INS_SEB = 601 -SYSZ_INS_SEBR = 602 -SYSZ_INS_SG = 603 -SYSZ_INS_SGF = 604 -SYSZ_INS_SGFR = 605 -SYSZ_INS_SGR = 606 -SYSZ_INS_SGRK = 607 -SYSZ_INS_SH = 608 -SYSZ_INS_SHY = 609 -SYSZ_INS_SL = 610 -SYSZ_INS_SLB = 611 -SYSZ_INS_SLBG = 612 -SYSZ_INS_SLBR = 613 -SYSZ_INS_SLFI = 614 -SYSZ_INS_SLG = 615 -SYSZ_INS_SLBGR = 616 -SYSZ_INS_SLGF = 617 -SYSZ_INS_SLGFI = 618 -SYSZ_INS_SLGFR = 619 -SYSZ_INS_SLGR = 620 -SYSZ_INS_SLGRK = 621 -SYSZ_INS_SLL = 622 -SYSZ_INS_SLLG = 623 -SYSZ_INS_SLLK = 624 -SYSZ_INS_SLR = 625 -SYSZ_INS_SLRK = 626 -SYSZ_INS_SLY = 627 -SYSZ_INS_SQDB = 628 -SYSZ_INS_SQDBR = 629 -SYSZ_INS_SQEB = 630 -SYSZ_INS_SQEBR = 631 -SYSZ_INS_SQXBR = 632 -SYSZ_INS_SR = 633 -SYSZ_INS_SRA = 634 -SYSZ_INS_SRAG = 635 -SYSZ_INS_SRAK = 636 -SYSZ_INS_SRK = 637 -SYSZ_INS_SRL = 638 -SYSZ_INS_SRLG = 639 -SYSZ_INS_SRLK = 640 -SYSZ_INS_SRST = 641 -SYSZ_INS_ST = 642 -SYSZ_INS_STC = 643 -SYSZ_INS_STCH = 644 -SYSZ_INS_STCY = 645 -SYSZ_INS_STD = 646 -SYSZ_INS_STDY = 647 -SYSZ_INS_STE = 648 -SYSZ_INS_STEY = 649 -SYSZ_INS_STFH = 650 -SYSZ_INS_STG = 651 -SYSZ_INS_STGRL = 652 -SYSZ_INS_STH = 653 -SYSZ_INS_STHH = 654 -SYSZ_INS_STHRL = 655 -SYSZ_INS_STHY = 656 -SYSZ_INS_STMG = 657 -SYSZ_INS_STRL = 658 -SYSZ_INS_STRV = 659 -SYSZ_INS_STRVG = 660 -SYSZ_INS_STY = 661 -SYSZ_INS_SXBR = 662 -SYSZ_INS_SY = 663 -SYSZ_INS_TM = 664 -SYSZ_INS_TMHH = 665 -SYSZ_INS_TMHL = 666 -SYSZ_INS_TMLH = 667 -SYSZ_INS_TMLL = 668 -SYSZ_INS_TMY = 669 -SYSZ_INS_X = 670 -SYSZ_INS_XC = 671 -SYSZ_INS_XG = 672 -SYSZ_INS_XGR = 673 -SYSZ_INS_XGRK = 674 -SYSZ_INS_XI = 675 -SYSZ_INS_XIHF = 676 -SYSZ_INS_XILF = 677 -SYSZ_INS_XIY = 678 -SYSZ_INS_XR = 679 -SYSZ_INS_XRK = 680 -SYSZ_INS_XY = 681 -SYSZ_INS_AD = 682 -SYSZ_INS_ADR = 683 -SYSZ_INS_ADTR = 684 -SYSZ_INS_ADTRA = 685 -SYSZ_INS_AE = 686 -SYSZ_INS_AER = 687 -SYSZ_INS_AGH = 688 -SYSZ_INS_AHHHR = 689 -SYSZ_INS_AHHLR = 690 -SYSZ_INS_ALGSI = 691 -SYSZ_INS_ALHHHR = 692 -SYSZ_INS_ALHHLR = 693 -SYSZ_INS_ALSI = 694 -SYSZ_INS_ALSIH = 695 -SYSZ_INS_ALSIHN = 696 -SYSZ_INS_AP = 697 -SYSZ_INS_AU = 698 -SYSZ_INS_AUR = 699 -SYSZ_INS_AW = 700 -SYSZ_INS_AWR = 701 -SYSZ_INS_AXR = 702 -SYSZ_INS_AXTR = 703 -SYSZ_INS_AXTRA = 704 -SYSZ_INS_B = 705 -SYSZ_INS_BAKR = 706 -SYSZ_INS_BAL = 707 -SYSZ_INS_BALR = 708 -SYSZ_INS_BAS = 709 -SYSZ_INS_BASSM = 710 -SYSZ_INS_BC = 711 -SYSZ_INS_BCT = 712 -SYSZ_INS_BCTG = 713 -SYSZ_INS_BCTGR = 714 -SYSZ_INS_BCTR = 715 -SYSZ_INS_BE = 716 -SYSZ_INS_BH = 717 -SYSZ_INS_BHE = 718 -SYSZ_INS_BI = 719 -SYSZ_INS_BIC = 720 -SYSZ_INS_BIE = 721 -SYSZ_INS_BIH = 722 -SYSZ_INS_BIHE = 723 -SYSZ_INS_BIL = 724 -SYSZ_INS_BILE = 725 -SYSZ_INS_BILH = 726 -SYSZ_INS_BIM = 727 -SYSZ_INS_BINE = 728 -SYSZ_INS_BINH = 729 -SYSZ_INS_BINHE = 730 -SYSZ_INS_BINL = 731 -SYSZ_INS_BINLE = 732 -SYSZ_INS_BINLH = 733 -SYSZ_INS_BINM = 734 -SYSZ_INS_BINO = 735 -SYSZ_INS_BINP = 736 -SYSZ_INS_BINZ = 737 -SYSZ_INS_BIO = 738 -SYSZ_INS_BIP = 739 -SYSZ_INS_BIZ = 740 -SYSZ_INS_BL = 741 -SYSZ_INS_BLE = 742 -SYSZ_INS_BLH = 743 -SYSZ_INS_BM = 744 -SYSZ_INS_BMR = 745 -SYSZ_INS_BNE = 746 -SYSZ_INS_BNH = 747 -SYSZ_INS_BNHE = 748 -SYSZ_INS_BNL = 749 -SYSZ_INS_BNLE = 750 -SYSZ_INS_BNLH = 751 -SYSZ_INS_BNM = 752 -SYSZ_INS_BNMR = 753 -SYSZ_INS_BNO = 754 -SYSZ_INS_BNP = 755 -SYSZ_INS_BNPR = 756 -SYSZ_INS_BNZ = 757 -SYSZ_INS_BNZR = 758 -SYSZ_INS_BO = 759 -SYSZ_INS_BP = 760 -SYSZ_INS_BPP = 761 -SYSZ_INS_BPR = 762 -SYSZ_INS_BPRP = 763 -SYSZ_INS_BRCTH = 764 -SYSZ_INS_BRXH = 765 -SYSZ_INS_BRXHG = 766 -SYSZ_INS_BRXLE = 767 -SYSZ_INS_BRXLG = 768 -SYSZ_INS_BSA = 769 -SYSZ_INS_BSG = 770 -SYSZ_INS_BSM = 771 -SYSZ_INS_BXH = 772 -SYSZ_INS_BXHG = 773 -SYSZ_INS_BXLE = 774 -SYSZ_INS_BXLEG = 775 -SYSZ_INS_BZ = 776 -SYSZ_INS_BZR = 777 -SYSZ_INS_CD = 778 -SYSZ_INS_CDFBRA = 779 -SYSZ_INS_CDFR = 780 -SYSZ_INS_CDFTR = 781 -SYSZ_INS_CDGBRA = 782 -SYSZ_INS_CDGR = 783 -SYSZ_INS_CDGTR = 784 -SYSZ_INS_CDGTRA = 785 -SYSZ_INS_CDLFTR = 786 -SYSZ_INS_CDLGTR = 787 -SYSZ_INS_CDPT = 788 -SYSZ_INS_CDR = 789 -SYSZ_INS_CDS = 790 -SYSZ_INS_CDSG = 791 -SYSZ_INS_CDSTR = 792 -SYSZ_INS_CDSY = 793 -SYSZ_INS_CDTR = 794 -SYSZ_INS_CDUTR = 795 -SYSZ_INS_CDZT = 796 -SYSZ_INS_CE = 797 -SYSZ_INS_CEDTR = 798 -SYSZ_INS_CEFBRA = 799 -SYSZ_INS_CEFR = 800 -SYSZ_INS_CEGBRA = 801 -SYSZ_INS_CEGR = 802 -SYSZ_INS_CER = 803 -SYSZ_INS_CEXTR = 804 -SYSZ_INS_CFC = 805 -SYSZ_INS_CFDBRA = 806 -SYSZ_INS_CFDR = 807 -SYSZ_INS_CFDTR = 808 -SYSZ_INS_CFEBRA = 809 -SYSZ_INS_CFER = 810 -SYSZ_INS_CFXBRA = 811 -SYSZ_INS_CFXR = 812 -SYSZ_INS_CFXTR = 813 -SYSZ_INS_CGDBRA = 814 -SYSZ_INS_CGDR = 815 -SYSZ_INS_CGDTR = 816 -SYSZ_INS_CGDTRA = 817 -SYSZ_INS_CGEBRA = 818 -SYSZ_INS_CGER = 819 -SYSZ_INS_CGIB = 820 -SYSZ_INS_CGIBE = 821 -SYSZ_INS_CGIBH = 822 -SYSZ_INS_CGIBHE = 823 -SYSZ_INS_CGIBL = 824 -SYSZ_INS_CGIBLE = 825 -SYSZ_INS_CGIBLH = 826 -SYSZ_INS_CGIBNE = 827 -SYSZ_INS_CGIBNH = 828 -SYSZ_INS_CGIBNHE = 829 -SYSZ_INS_CGIBNL = 830 -SYSZ_INS_CGIBNLE = 831 -SYSZ_INS_CGIBNLH = 832 -SYSZ_INS_CGIT = 833 -SYSZ_INS_CGITE = 834 -SYSZ_INS_CGITH = 835 -SYSZ_INS_CGITHE = 836 -SYSZ_INS_CGITL = 837 -SYSZ_INS_CGITLE = 838 -SYSZ_INS_CGITLH = 839 -SYSZ_INS_CGITNE = 840 -SYSZ_INS_CGITNH = 841 -SYSZ_INS_CGITNHE = 842 -SYSZ_INS_CGITNL = 843 -SYSZ_INS_CGITNLE = 844 -SYSZ_INS_CGITNLH = 845 -SYSZ_INS_CGRB = 846 -SYSZ_INS_CGRBE = 847 -SYSZ_INS_CGRBH = 848 -SYSZ_INS_CGRBHE = 849 -SYSZ_INS_CGRBL = 850 -SYSZ_INS_CGRBLE = 851 -SYSZ_INS_CGRBLH = 852 -SYSZ_INS_CGRBNE = 853 -SYSZ_INS_CGRBNH = 854 -SYSZ_INS_CGRBNHE = 855 -SYSZ_INS_CGRBNL = 856 -SYSZ_INS_CGRBNLE = 857 -SYSZ_INS_CGRBNLH = 858 -SYSZ_INS_CGRT = 859 -SYSZ_INS_CGRTE = 860 -SYSZ_INS_CGRTH = 861 -SYSZ_INS_CGRTHE = 862 -SYSZ_INS_CGRTL = 863 -SYSZ_INS_CGRTLE = 864 -SYSZ_INS_CGRTLH = 865 -SYSZ_INS_CGRTNE = 866 -SYSZ_INS_CGRTNH = 867 -SYSZ_INS_CGRTNHE = 868 -SYSZ_INS_CGRTNL = 869 -SYSZ_INS_CGRTNLE = 870 -SYSZ_INS_CGRTNLH = 871 -SYSZ_INS_CGXBRA = 872 -SYSZ_INS_CGXR = 873 -SYSZ_INS_CGXTR = 874 -SYSZ_INS_CGXTRA = 875 -SYSZ_INS_CHHR = 876 -SYSZ_INS_CHLR = 877 -SYSZ_INS_CIB = 878 -SYSZ_INS_CIBE = 879 -SYSZ_INS_CIBH = 880 -SYSZ_INS_CIBHE = 881 -SYSZ_INS_CIBL = 882 -SYSZ_INS_CIBLE = 883 -SYSZ_INS_CIBLH = 884 -SYSZ_INS_CIBNE = 885 -SYSZ_INS_CIBNH = 886 -SYSZ_INS_CIBNHE = 887 -SYSZ_INS_CIBNL = 888 -SYSZ_INS_CIBNLE = 889 -SYSZ_INS_CIBNLH = 890 -SYSZ_INS_CIT = 891 -SYSZ_INS_CITE = 892 -SYSZ_INS_CITH = 893 -SYSZ_INS_CITHE = 894 -SYSZ_INS_CITL = 895 -SYSZ_INS_CITLE = 896 -SYSZ_INS_CITLH = 897 -SYSZ_INS_CITNE = 898 -SYSZ_INS_CITNH = 899 -SYSZ_INS_CITNHE = 900 -SYSZ_INS_CITNL = 901 -SYSZ_INS_CITNLE = 902 -SYSZ_INS_CITNLH = 903 -SYSZ_INS_CKSM = 904 -SYSZ_INS_CLCL = 905 -SYSZ_INS_CLCLE = 906 -SYSZ_INS_CLCLU = 907 -SYSZ_INS_CLFDTR = 908 -SYSZ_INS_CLFIT = 909 -SYSZ_INS_CLFITE = 910 -SYSZ_INS_CLFITH = 911 -SYSZ_INS_CLFITHE = 912 -SYSZ_INS_CLFITL = 913 -SYSZ_INS_CLFITLE = 914 -SYSZ_INS_CLFITLH = 915 -SYSZ_INS_CLFITNE = 916 -SYSZ_INS_CLFITNH = 917 -SYSZ_INS_CLFITNHE = 918 -SYSZ_INS_CLFITNL = 919 -SYSZ_INS_CLFITNLE = 920 -SYSZ_INS_CLFITNLH = 921 -SYSZ_INS_CLFXTR = 922 -SYSZ_INS_CLGDTR = 923 -SYSZ_INS_CLGIB = 924 -SYSZ_INS_CLGIBE = 925 -SYSZ_INS_CLGIBH = 926 -SYSZ_INS_CLGIBHE = 927 -SYSZ_INS_CLGIBL = 928 -SYSZ_INS_CLGIBLE = 929 -SYSZ_INS_CLGIBLH = 930 -SYSZ_INS_CLGIBNE = 931 -SYSZ_INS_CLGIBNH = 932 -SYSZ_INS_CLGIBNHE = 933 -SYSZ_INS_CLGIBNL = 934 -SYSZ_INS_CLGIBNLE = 935 -SYSZ_INS_CLGIBNLH = 936 -SYSZ_INS_CLGIT = 937 -SYSZ_INS_CLGITE = 938 -SYSZ_INS_CLGITH = 939 -SYSZ_INS_CLGITHE = 940 -SYSZ_INS_CLGITL = 941 -SYSZ_INS_CLGITLE = 942 -SYSZ_INS_CLGITLH = 943 -SYSZ_INS_CLGITNE = 944 -SYSZ_INS_CLGITNH = 945 -SYSZ_INS_CLGITNHE = 946 -SYSZ_INS_CLGITNL = 947 -SYSZ_INS_CLGITNLE = 948 -SYSZ_INS_CLGITNLH = 949 -SYSZ_INS_CLGRB = 950 -SYSZ_INS_CLGRBE = 951 -SYSZ_INS_CLGRBH = 952 -SYSZ_INS_CLGRBHE = 953 -SYSZ_INS_CLGRBL = 954 -SYSZ_INS_CLGRBLE = 955 -SYSZ_INS_CLGRBLH = 956 -SYSZ_INS_CLGRBNE = 957 -SYSZ_INS_CLGRBNH = 958 -SYSZ_INS_CLGRBNHE = 959 -SYSZ_INS_CLGRBNL = 960 -SYSZ_INS_CLGRBNLE = 961 -SYSZ_INS_CLGRBNLH = 962 -SYSZ_INS_CLGRT = 963 -SYSZ_INS_CLGRTE = 964 -SYSZ_INS_CLGRTH = 965 -SYSZ_INS_CLGRTHE = 966 -SYSZ_INS_CLGRTL = 967 -SYSZ_INS_CLGRTLE = 968 -SYSZ_INS_CLGRTLH = 969 -SYSZ_INS_CLGRTNE = 970 -SYSZ_INS_CLGRTNH = 971 -SYSZ_INS_CLGRTNHE = 972 -SYSZ_INS_CLGRTNL = 973 -SYSZ_INS_CLGRTNLE = 974 -SYSZ_INS_CLGRTNLH = 975 -SYSZ_INS_CLGT = 976 -SYSZ_INS_CLGTE = 977 -SYSZ_INS_CLGTH = 978 -SYSZ_INS_CLGTHE = 979 -SYSZ_INS_CLGTL = 980 -SYSZ_INS_CLGTLE = 981 -SYSZ_INS_CLGTLH = 982 -SYSZ_INS_CLGTNE = 983 -SYSZ_INS_CLGTNH = 984 -SYSZ_INS_CLGTNHE = 985 -SYSZ_INS_CLGTNL = 986 -SYSZ_INS_CLGTNLE = 987 -SYSZ_INS_CLGTNLH = 988 -SYSZ_INS_CLGXTR = 989 -SYSZ_INS_CLHHR = 990 -SYSZ_INS_CLHLR = 991 -SYSZ_INS_CLIB = 992 -SYSZ_INS_CLIBE = 993 -SYSZ_INS_CLIBH = 994 -SYSZ_INS_CLIBHE = 995 -SYSZ_INS_CLIBL = 996 -SYSZ_INS_CLIBLE = 997 -SYSZ_INS_CLIBLH = 998 -SYSZ_INS_CLIBNE = 999 -SYSZ_INS_CLIBNH = 1000 -SYSZ_INS_CLIBNHE = 1001 -SYSZ_INS_CLIBNL = 1002 -SYSZ_INS_CLIBNLE = 1003 -SYSZ_INS_CLIBNLH = 1004 -SYSZ_INS_CLM = 1005 -SYSZ_INS_CLMH = 1006 -SYSZ_INS_CLMY = 1007 -SYSZ_INS_CLRB = 1008 -SYSZ_INS_CLRBE = 1009 -SYSZ_INS_CLRBH = 1010 -SYSZ_INS_CLRBHE = 1011 -SYSZ_INS_CLRBL = 1012 -SYSZ_INS_CLRBLE = 1013 -SYSZ_INS_CLRBLH = 1014 -SYSZ_INS_CLRBNE = 1015 -SYSZ_INS_CLRBNH = 1016 -SYSZ_INS_CLRBNHE = 1017 -SYSZ_INS_CLRBNL = 1018 -SYSZ_INS_CLRBNLE = 1019 -SYSZ_INS_CLRBNLH = 1020 -SYSZ_INS_CLRT = 1021 -SYSZ_INS_CLRTE = 1022 -SYSZ_INS_CLRTH = 1023 -SYSZ_INS_CLRTHE = 1024 -SYSZ_INS_CLRTL = 1025 -SYSZ_INS_CLRTLE = 1026 -SYSZ_INS_CLRTLH = 1027 -SYSZ_INS_CLRTNE = 1028 -SYSZ_INS_CLRTNH = 1029 -SYSZ_INS_CLRTNHE = 1030 -SYSZ_INS_CLRTNL = 1031 -SYSZ_INS_CLRTNLE = 1032 -SYSZ_INS_CLRTNLH = 1033 -SYSZ_INS_CLT = 1034 -SYSZ_INS_CLTE = 1035 -SYSZ_INS_CLTH = 1036 -SYSZ_INS_CLTHE = 1037 -SYSZ_INS_CLTL = 1038 -SYSZ_INS_CLTLE = 1039 -SYSZ_INS_CLTLH = 1040 -SYSZ_INS_CLTNE = 1041 -SYSZ_INS_CLTNH = 1042 -SYSZ_INS_CLTNHE = 1043 -SYSZ_INS_CLTNL = 1044 -SYSZ_INS_CLTNLE = 1045 -SYSZ_INS_CLTNLH = 1046 -SYSZ_INS_CMPSC = 1047 -SYSZ_INS_CP = 1048 -SYSZ_INS_CPDT = 1049 -SYSZ_INS_CPXT = 1050 -SYSZ_INS_CPYA = 1051 -SYSZ_INS_CRB = 1052 -SYSZ_INS_CRBE = 1053 -SYSZ_INS_CRBH = 1054 -SYSZ_INS_CRBHE = 1055 -SYSZ_INS_CRBL = 1056 -SYSZ_INS_CRBLE = 1057 -SYSZ_INS_CRBLH = 1058 -SYSZ_INS_CRBNE = 1059 -SYSZ_INS_CRBNH = 1060 -SYSZ_INS_CRBNHE = 1061 -SYSZ_INS_CRBNL = 1062 -SYSZ_INS_CRBNLE = 1063 -SYSZ_INS_CRBNLH = 1064 -SYSZ_INS_CRDTE = 1065 -SYSZ_INS_CRT = 1066 -SYSZ_INS_CRTE = 1067 -SYSZ_INS_CRTH = 1068 -SYSZ_INS_CRTHE = 1069 -SYSZ_INS_CRTL = 1070 -SYSZ_INS_CRTLE = 1071 -SYSZ_INS_CRTLH = 1072 -SYSZ_INS_CRTNE = 1073 -SYSZ_INS_CRTNH = 1074 -SYSZ_INS_CRTNHE = 1075 -SYSZ_INS_CRTNL = 1076 -SYSZ_INS_CRTNLE = 1077 -SYSZ_INS_CRTNLH = 1078 -SYSZ_INS_CSCH = 1079 -SYSZ_INS_CSDTR = 1080 -SYSZ_INS_CSP = 1081 -SYSZ_INS_CSPG = 1082 -SYSZ_INS_CSST = 1083 -SYSZ_INS_CSXTR = 1084 -SYSZ_INS_CU12 = 1085 -SYSZ_INS_CU14 = 1086 -SYSZ_INS_CU21 = 1087 -SYSZ_INS_CU24 = 1088 -SYSZ_INS_CU41 = 1089 -SYSZ_INS_CU42 = 1090 -SYSZ_INS_CUDTR = 1091 -SYSZ_INS_CUSE = 1092 -SYSZ_INS_CUTFU = 1093 -SYSZ_INS_CUUTF = 1094 -SYSZ_INS_CUXTR = 1095 -SYSZ_INS_CVB = 1096 -SYSZ_INS_CVBG = 1097 -SYSZ_INS_CVBY = 1098 -SYSZ_INS_CVD = 1099 -SYSZ_INS_CVDG = 1100 -SYSZ_INS_CVDY = 1101 -SYSZ_INS_CXFBRA = 1102 -SYSZ_INS_CXFR = 1103 -SYSZ_INS_CXFTR = 1104 -SYSZ_INS_CXGBRA = 1105 -SYSZ_INS_CXGR = 1106 -SYSZ_INS_CXGTR = 1107 -SYSZ_INS_CXGTRA = 1108 -SYSZ_INS_CXLFTR = 1109 -SYSZ_INS_CXLGTR = 1110 -SYSZ_INS_CXPT = 1111 -SYSZ_INS_CXR = 1112 -SYSZ_INS_CXSTR = 1113 -SYSZ_INS_CXTR = 1114 -SYSZ_INS_CXUTR = 1115 -SYSZ_INS_CXZT = 1116 -SYSZ_INS_CZDT = 1117 -SYSZ_INS_CZXT = 1118 -SYSZ_INS_D = 1119 -SYSZ_INS_DD = 1120 -SYSZ_INS_DDR = 1121 -SYSZ_INS_DDTR = 1122 -SYSZ_INS_DDTRA = 1123 -SYSZ_INS_DE = 1124 -SYSZ_INS_DER = 1125 -SYSZ_INS_DIAG = 1126 -SYSZ_INS_DIDBR = 1127 -SYSZ_INS_DIEBR = 1128 -SYSZ_INS_DP = 1129 -SYSZ_INS_DR = 1130 -SYSZ_INS_DXR = 1131 -SYSZ_INS_DXTR = 1132 -SYSZ_INS_DXTRA = 1133 -SYSZ_INS_ECAG = 1134 -SYSZ_INS_ECCTR = 1135 -SYSZ_INS_ECPGA = 1136 -SYSZ_INS_ECTG = 1137 -SYSZ_INS_ED = 1138 -SYSZ_INS_EDMK = 1139 -SYSZ_INS_EEDTR = 1140 -SYSZ_INS_EEXTR = 1141 -SYSZ_INS_EFPC = 1142 -SYSZ_INS_EPAIR = 1143 -SYSZ_INS_EPAR = 1144 -SYSZ_INS_EPCTR = 1145 -SYSZ_INS_EPSW = 1146 -SYSZ_INS_EREG = 1147 -SYSZ_INS_EREGG = 1148 -SYSZ_INS_ESAIR = 1149 -SYSZ_INS_ESAR = 1150 -SYSZ_INS_ESDTR = 1151 -SYSZ_INS_ESEA = 1152 -SYSZ_INS_ESTA = 1153 -SYSZ_INS_ESXTR = 1154 -SYSZ_INS_ETND = 1155 -SYSZ_INS_EX = 1156 -SYSZ_INS_EXRL = 1157 -SYSZ_INS_FIDR = 1158 -SYSZ_INS_FIDTR = 1159 -SYSZ_INS_FIER = 1160 -SYSZ_INS_FIXR = 1161 -SYSZ_INS_FIXTR = 1162 -SYSZ_INS_HDR = 1163 -SYSZ_INS_HER = 1164 -SYSZ_INS_HSCH = 1165 -SYSZ_INS_IAC = 1166 -SYSZ_INS_ICM = 1167 -SYSZ_INS_ICMH = 1168 -SYSZ_INS_ICMY = 1169 -SYSZ_INS_IDTE = 1170 -SYSZ_INS_IEDTR = 1171 -SYSZ_INS_IEXTR = 1172 -SYSZ_INS_IPK = 1173 -SYSZ_INS_IPTE = 1174 -SYSZ_INS_IRBM = 1175 -SYSZ_INS_ISKE = 1176 -SYSZ_INS_IVSK = 1177 -SYSZ_INS_JGM = 1178 -SYSZ_INS_JGNM = 1179 -SYSZ_INS_JGNP = 1180 -SYSZ_INS_JGNZ = 1181 -SYSZ_INS_JGP = 1182 -SYSZ_INS_JGZ = 1183 -SYSZ_INS_JM = 1184 -SYSZ_INS_JNM = 1185 -SYSZ_INS_JNP = 1186 -SYSZ_INS_JNZ = 1187 -SYSZ_INS_JP = 1188 -SYSZ_INS_JZ = 1189 -SYSZ_INS_KDB = 1190 -SYSZ_INS_KDBR = 1191 -SYSZ_INS_KDTR = 1192 -SYSZ_INS_KEB = 1193 -SYSZ_INS_KEBR = 1194 -SYSZ_INS_KIMD = 1195 -SYSZ_INS_KLMD = 1196 -SYSZ_INS_KM = 1197 -SYSZ_INS_KMA = 1198 -SYSZ_INS_KMAC = 1199 -SYSZ_INS_KMC = 1200 -SYSZ_INS_KMCTR = 1201 -SYSZ_INS_KMF = 1202 -SYSZ_INS_KMO = 1203 -SYSZ_INS_KXBR = 1204 -SYSZ_INS_KXTR = 1205 -SYSZ_INS_LAE = 1206 -SYSZ_INS_LAEY = 1207 -SYSZ_INS_LAM = 1208 -SYSZ_INS_LAMY = 1209 -SYSZ_INS_LASP = 1210 -SYSZ_INS_LAT = 1211 -SYSZ_INS_LCBB = 1212 -SYSZ_INS_LCCTL = 1213 -SYSZ_INS_LCDFR = 1214 -SYSZ_INS_LCDR = 1215 -SYSZ_INS_LCER = 1216 -SYSZ_INS_LCTL = 1217 -SYSZ_INS_LCTLG = 1218 -SYSZ_INS_LCXR = 1219 -SYSZ_INS_LDE = 1220 -SYSZ_INS_LDER = 1221 -SYSZ_INS_LDETR = 1222 -SYSZ_INS_LDXR = 1223 -SYSZ_INS_LDXTR = 1224 -SYSZ_INS_LEDR = 1225 -SYSZ_INS_LEDTR = 1226 -SYSZ_INS_LEXR = 1227 -SYSZ_INS_LFAS = 1228 -SYSZ_INS_LFHAT = 1229 -SYSZ_INS_LFPC = 1230 -SYSZ_INS_LGAT = 1231 -SYSZ_INS_LGG = 1232 -SYSZ_INS_LGSC = 1233 -SYSZ_INS_LLGFAT = 1234 -SYSZ_INS_LLGFSG = 1235 -SYSZ_INS_LLGT = 1236 -SYSZ_INS_LLGTAT = 1237 -SYSZ_INS_LLGTR = 1238 -SYSZ_INS_LLZRGF = 1239 -SYSZ_INS_LM = 1240 -SYSZ_INS_LMD = 1241 -SYSZ_INS_LMH = 1242 -SYSZ_INS_LMY = 1243 -SYSZ_INS_LNDFR = 1244 -SYSZ_INS_LNDR = 1245 -SYSZ_INS_LNER = 1246 -SYSZ_INS_LNXR = 1247 -SYSZ_INS_LOCFH = 1248 -SYSZ_INS_LOCFHE = 1249 -SYSZ_INS_LOCFHH = 1250 -SYSZ_INS_LOCFHHE = 1251 -SYSZ_INS_LOCFHL = 1252 -SYSZ_INS_LOCFHLE = 1253 -SYSZ_INS_LOCFHLH = 1254 -SYSZ_INS_LOCFHM = 1255 -SYSZ_INS_LOCFHNE = 1256 -SYSZ_INS_LOCFHNH = 1257 -SYSZ_INS_LOCFHNHE = 1258 -SYSZ_INS_LOCFHNL = 1259 -SYSZ_INS_LOCFHNLE = 1260 -SYSZ_INS_LOCFHNLH = 1261 -SYSZ_INS_LOCFHNM = 1262 -SYSZ_INS_LOCFHNO = 1263 -SYSZ_INS_LOCFHNP = 1264 -SYSZ_INS_LOCFHNZ = 1265 -SYSZ_INS_LOCFHO = 1266 -SYSZ_INS_LOCFHP = 1267 -SYSZ_INS_LOCFHR = 1268 -SYSZ_INS_LOCFHRE = 1269 -SYSZ_INS_LOCFHRH = 1270 -SYSZ_INS_LOCFHRHE = 1271 -SYSZ_INS_LOCFHRL = 1272 -SYSZ_INS_LOCFHRLE = 1273 -SYSZ_INS_LOCFHRLH = 1274 -SYSZ_INS_LOCFHRM = 1275 -SYSZ_INS_LOCFHRNE = 1276 -SYSZ_INS_LOCFHRNH = 1277 -SYSZ_INS_LOCFHRNHE = 1278 -SYSZ_INS_LOCFHRNL = 1279 -SYSZ_INS_LOCFHRNLE = 1280 -SYSZ_INS_LOCFHRNLH = 1281 -SYSZ_INS_LOCFHRNM = 1282 -SYSZ_INS_LOCFHRNO = 1283 -SYSZ_INS_LOCFHRNP = 1284 -SYSZ_INS_LOCFHRNZ = 1285 -SYSZ_INS_LOCFHRO = 1286 -SYSZ_INS_LOCFHRP = 1287 -SYSZ_INS_LOCFHRZ = 1288 -SYSZ_INS_LOCFHZ = 1289 -SYSZ_INS_LOCGHI = 1290 -SYSZ_INS_LOCGHIE = 1291 -SYSZ_INS_LOCGHIH = 1292 -SYSZ_INS_LOCGHIHE = 1293 -SYSZ_INS_LOCGHIL = 1294 -SYSZ_INS_LOCGHILE = 1295 -SYSZ_INS_LOCGHILH = 1296 -SYSZ_INS_LOCGHIM = 1297 -SYSZ_INS_LOCGHINE = 1298 -SYSZ_INS_LOCGHINH = 1299 -SYSZ_INS_LOCGHINHE = 1300 -SYSZ_INS_LOCGHINL = 1301 -SYSZ_INS_LOCGHINLE = 1302 -SYSZ_INS_LOCGHINLH = 1303 -SYSZ_INS_LOCGHINM = 1304 -SYSZ_INS_LOCGHINO = 1305 -SYSZ_INS_LOCGHINP = 1306 -SYSZ_INS_LOCGHINZ = 1307 -SYSZ_INS_LOCGHIO = 1308 -SYSZ_INS_LOCGHIP = 1309 -SYSZ_INS_LOCGHIZ = 1310 -SYSZ_INS_LOCGM = 1311 -SYSZ_INS_LOCGNM = 1312 -SYSZ_INS_LOCGNP = 1313 -SYSZ_INS_LOCGNZ = 1314 -SYSZ_INS_LOCGP = 1315 -SYSZ_INS_LOCGRM = 1316 -SYSZ_INS_LOCGRNM = 1317 -SYSZ_INS_LOCGRNP = 1318 -SYSZ_INS_LOCGRNZ = 1319 -SYSZ_INS_LOCGRP = 1320 -SYSZ_INS_LOCGRZ = 1321 -SYSZ_INS_LOCGZ = 1322 -SYSZ_INS_LOCHHI = 1323 -SYSZ_INS_LOCHHIE = 1324 -SYSZ_INS_LOCHHIH = 1325 -SYSZ_INS_LOCHHIHE = 1326 -SYSZ_INS_LOCHHIL = 1327 -SYSZ_INS_LOCHHILE = 1328 -SYSZ_INS_LOCHHILH = 1329 -SYSZ_INS_LOCHHIM = 1330 -SYSZ_INS_LOCHHINE = 1331 -SYSZ_INS_LOCHHINH = 1332 -SYSZ_INS_LOCHHINHE = 1333 -SYSZ_INS_LOCHHINL = 1334 -SYSZ_INS_LOCHHINLE = 1335 -SYSZ_INS_LOCHHINLH = 1336 -SYSZ_INS_LOCHHINM = 1337 -SYSZ_INS_LOCHHINO = 1338 -SYSZ_INS_LOCHHINP = 1339 -SYSZ_INS_LOCHHINZ = 1340 -SYSZ_INS_LOCHHIO = 1341 -SYSZ_INS_LOCHHIP = 1342 -SYSZ_INS_LOCHHIZ = 1343 -SYSZ_INS_LOCHI = 1344 -SYSZ_INS_LOCHIE = 1345 -SYSZ_INS_LOCHIH = 1346 -SYSZ_INS_LOCHIHE = 1347 -SYSZ_INS_LOCHIL = 1348 -SYSZ_INS_LOCHILE = 1349 -SYSZ_INS_LOCHILH = 1350 -SYSZ_INS_LOCHIM = 1351 -SYSZ_INS_LOCHINE = 1352 -SYSZ_INS_LOCHINH = 1353 -SYSZ_INS_LOCHINHE = 1354 -SYSZ_INS_LOCHINL = 1355 -SYSZ_INS_LOCHINLE = 1356 -SYSZ_INS_LOCHINLH = 1357 -SYSZ_INS_LOCHINM = 1358 -SYSZ_INS_LOCHINO = 1359 -SYSZ_INS_LOCHINP = 1360 -SYSZ_INS_LOCHINZ = 1361 -SYSZ_INS_LOCHIO = 1362 -SYSZ_INS_LOCHIP = 1363 -SYSZ_INS_LOCHIZ = 1364 -SYSZ_INS_LOCM = 1365 -SYSZ_INS_LOCNM = 1366 -SYSZ_INS_LOCNP = 1367 -SYSZ_INS_LOCNZ = 1368 -SYSZ_INS_LOCP = 1369 -SYSZ_INS_LOCRM = 1370 -SYSZ_INS_LOCRNM = 1371 -SYSZ_INS_LOCRNP = 1372 -SYSZ_INS_LOCRNZ = 1373 -SYSZ_INS_LOCRP = 1374 -SYSZ_INS_LOCRZ = 1375 -SYSZ_INS_LOCZ = 1376 -SYSZ_INS_LPCTL = 1377 -SYSZ_INS_LPD = 1378 -SYSZ_INS_LPDFR = 1379 -SYSZ_INS_LPDG = 1380 -SYSZ_INS_LPDR = 1381 -SYSZ_INS_LPER = 1382 -SYSZ_INS_LPP = 1383 -SYSZ_INS_LPQ = 1384 -SYSZ_INS_LPSW = 1385 -SYSZ_INS_LPSWE = 1386 -SYSZ_INS_LPTEA = 1387 -SYSZ_INS_LPXR = 1388 -SYSZ_INS_LRA = 1389 -SYSZ_INS_LRAG = 1390 -SYSZ_INS_LRAY = 1391 -SYSZ_INS_LRDR = 1392 -SYSZ_INS_LRER = 1393 -SYSZ_INS_LRVH = 1394 -SYSZ_INS_LSCTL = 1395 -SYSZ_INS_LTDR = 1396 -SYSZ_INS_LTDTR = 1397 -SYSZ_INS_LTER = 1398 -SYSZ_INS_LTXR = 1399 -SYSZ_INS_LTXTR = 1400 -SYSZ_INS_LURA = 1401 -SYSZ_INS_LURAG = 1402 -SYSZ_INS_LXD = 1403 -SYSZ_INS_LXDR = 1404 -SYSZ_INS_LXDTR = 1405 -SYSZ_INS_LXE = 1406 -SYSZ_INS_LXER = 1407 -SYSZ_INS_LZRF = 1408 -SYSZ_INS_LZRG = 1409 -SYSZ_INS_M = 1410 -SYSZ_INS_MAD = 1411 -SYSZ_INS_MADR = 1412 -SYSZ_INS_MAE = 1413 -SYSZ_INS_MAER = 1414 -SYSZ_INS_MAY = 1415 -SYSZ_INS_MAYH = 1416 -SYSZ_INS_MAYHR = 1417 -SYSZ_INS_MAYL = 1418 -SYSZ_INS_MAYLR = 1419 -SYSZ_INS_MAYR = 1420 -SYSZ_INS_MC = 1421 -SYSZ_INS_MD = 1422 -SYSZ_INS_MDE = 1423 -SYSZ_INS_MDER = 1424 -SYSZ_INS_MDR = 1425 -SYSZ_INS_MDTR = 1426 -SYSZ_INS_MDTRA = 1427 -SYSZ_INS_ME = 1428 -SYSZ_INS_MEE = 1429 -SYSZ_INS_MEER = 1430 -SYSZ_INS_MER = 1431 -SYSZ_INS_MFY = 1432 -SYSZ_INS_MG = 1433 -SYSZ_INS_MGH = 1434 -SYSZ_INS_MGRK = 1435 -SYSZ_INS_ML = 1436 -SYSZ_INS_MLR = 1437 -SYSZ_INS_MP = 1438 -SYSZ_INS_MR = 1439 -SYSZ_INS_MSC = 1440 -SYSZ_INS_MSCH = 1441 -SYSZ_INS_MSD = 1442 -SYSZ_INS_MSDR = 1443 -SYSZ_INS_MSE = 1444 -SYSZ_INS_MSER = 1445 -SYSZ_INS_MSGC = 1446 -SYSZ_INS_MSGRKC = 1447 -SYSZ_INS_MSRKC = 1448 -SYSZ_INS_MSTA = 1449 -SYSZ_INS_MVCDK = 1450 -SYSZ_INS_MVCIN = 1451 -SYSZ_INS_MVCK = 1452 -SYSZ_INS_MVCL = 1453 -SYSZ_INS_MVCLE = 1454 -SYSZ_INS_MVCLU = 1455 -SYSZ_INS_MVCOS = 1456 -SYSZ_INS_MVCP = 1457 -SYSZ_INS_MVCS = 1458 -SYSZ_INS_MVCSK = 1459 -SYSZ_INS_MVN = 1460 -SYSZ_INS_MVO = 1461 -SYSZ_INS_MVPG = 1462 -SYSZ_INS_MVZ = 1463 -SYSZ_INS_MXD = 1464 -SYSZ_INS_MXDR = 1465 -SYSZ_INS_MXR = 1466 -SYSZ_INS_MXTR = 1467 -SYSZ_INS_MXTRA = 1468 -SYSZ_INS_MY = 1469 -SYSZ_INS_MYH = 1470 -SYSZ_INS_MYHR = 1471 -SYSZ_INS_MYL = 1472 -SYSZ_INS_MYLR = 1473 -SYSZ_INS_MYR = 1474 -SYSZ_INS_NIAI = 1475 -SYSZ_INS_NTSTG = 1476 -SYSZ_INS_PACK = 1477 -SYSZ_INS_PALB = 1478 -SYSZ_INS_PC = 1479 -SYSZ_INS_PCC = 1480 -SYSZ_INS_PCKMO = 1481 -SYSZ_INS_PFMF = 1482 -SYSZ_INS_PFPO = 1483 -SYSZ_INS_PGIN = 1484 -SYSZ_INS_PGOUT = 1485 -SYSZ_INS_PKA = 1486 -SYSZ_INS_PKU = 1487 -SYSZ_INS_PLO = 1488 -SYSZ_INS_POPCNT = 1489 -SYSZ_INS_PPA = 1490 -SYSZ_INS_PPNO = 1491 -SYSZ_INS_PR = 1492 -SYSZ_INS_PRNO = 1493 -SYSZ_INS_PT = 1494 -SYSZ_INS_PTF = 1495 -SYSZ_INS_PTFF = 1496 -SYSZ_INS_PTI = 1497 -SYSZ_INS_PTLB = 1498 -SYSZ_INS_QADTR = 1499 -SYSZ_INS_QAXTR = 1500 -SYSZ_INS_QCTRI = 1501 -SYSZ_INS_QSI = 1502 -SYSZ_INS_RCHP = 1503 -SYSZ_INS_RISBGN = 1504 -SYSZ_INS_RP = 1505 -SYSZ_INS_RRBE = 1506 -SYSZ_INS_RRBM = 1507 -SYSZ_INS_RRDTR = 1508 -SYSZ_INS_RRXTR = 1509 -SYSZ_INS_RSCH = 1510 -SYSZ_INS_SAC = 1511 -SYSZ_INS_SACF = 1512 -SYSZ_INS_SAL = 1513 -SYSZ_INS_SAM24 = 1514 -SYSZ_INS_SAM31 = 1515 -SYSZ_INS_SAM64 = 1516 -SYSZ_INS_SAR = 1517 -SYSZ_INS_SCCTR = 1518 -SYSZ_INS_SCHM = 1519 -SYSZ_INS_SCK = 1520 -SYSZ_INS_SCKC = 1521 -SYSZ_INS_SCKPF = 1522 -SYSZ_INS_SD = 1523 -SYSZ_INS_SDR = 1524 -SYSZ_INS_SDTR = 1525 -SYSZ_INS_SDTRA = 1526 -SYSZ_INS_SE = 1527 -SYSZ_INS_SER = 1528 -SYSZ_INS_SFASR = 1529 -SYSZ_INS_SFPC = 1530 -SYSZ_INS_SGH = 1531 -SYSZ_INS_SHHHR = 1532 -SYSZ_INS_SHHLR = 1533 -SYSZ_INS_SIE = 1534 -SYSZ_INS_SIGA = 1535 -SYSZ_INS_SIGP = 1536 -SYSZ_INS_SLA = 1537 -SYSZ_INS_SLAG = 1538 -SYSZ_INS_SLAK = 1539 -SYSZ_INS_SLDA = 1540 -SYSZ_INS_SLDL = 1541 -SYSZ_INS_SLDT = 1542 -SYSZ_INS_SLHHHR = 1543 -SYSZ_INS_SLHHLR = 1544 -SYSZ_INS_SLXT = 1545 -SYSZ_INS_SP = 1546 -SYSZ_INS_SPCTR = 1547 -SYSZ_INS_SPKA = 1548 -SYSZ_INS_SPM = 1549 -SYSZ_INS_SPT = 1550 -SYSZ_INS_SPX = 1551 -SYSZ_INS_SQD = 1552 -SYSZ_INS_SQDR = 1553 -SYSZ_INS_SQE = 1554 -SYSZ_INS_SQER = 1555 -SYSZ_INS_SQXR = 1556 -SYSZ_INS_SRDA = 1557 -SYSZ_INS_SRDL = 1558 -SYSZ_INS_SRDT = 1559 -SYSZ_INS_SRNM = 1560 -SYSZ_INS_SRNMB = 1561 -SYSZ_INS_SRNMT = 1562 -SYSZ_INS_SRP = 1563 -SYSZ_INS_SRSTU = 1564 -SYSZ_INS_SRXT = 1565 -SYSZ_INS_SSAIR = 1566 -SYSZ_INS_SSAR = 1567 -SYSZ_INS_SSCH = 1568 -SYSZ_INS_SSKE = 1569 -SYSZ_INS_SSM = 1570 -SYSZ_INS_STAM = 1571 -SYSZ_INS_STAMY = 1572 -SYSZ_INS_STAP = 1573 -SYSZ_INS_STCK = 1574 -SYSZ_INS_STCKC = 1575 -SYSZ_INS_STCKE = 1576 -SYSZ_INS_STCKF = 1577 -SYSZ_INS_STCM = 1578 -SYSZ_INS_STCMH = 1579 -SYSZ_INS_STCMY = 1580 -SYSZ_INS_STCPS = 1581 -SYSZ_INS_STCRW = 1582 -SYSZ_INS_STCTG = 1583 -SYSZ_INS_STCTL = 1584 -SYSZ_INS_STFL = 1585 -SYSZ_INS_STFLE = 1586 -SYSZ_INS_STFPC = 1587 -SYSZ_INS_STGSC = 1588 -SYSZ_INS_STIDP = 1589 -SYSZ_INS_STM = 1590 -SYSZ_INS_STMH = 1591 -SYSZ_INS_STMY = 1592 -SYSZ_INS_STNSM = 1593 -SYSZ_INS_STOCFH = 1594 -SYSZ_INS_STOCFHE = 1595 -SYSZ_INS_STOCFHH = 1596 -SYSZ_INS_STOCFHHE = 1597 -SYSZ_INS_STOCFHL = 1598 -SYSZ_INS_STOCFHLE = 1599 -SYSZ_INS_STOCFHLH = 1600 -SYSZ_INS_STOCFHM = 1601 -SYSZ_INS_STOCFHNE = 1602 -SYSZ_INS_STOCFHNH = 1603 -SYSZ_INS_STOCFHNHE = 1604 -SYSZ_INS_STOCFHNL = 1605 -SYSZ_INS_STOCFHNLE = 1606 -SYSZ_INS_STOCFHNLH = 1607 -SYSZ_INS_STOCFHNM = 1608 -SYSZ_INS_STOCFHNO = 1609 -SYSZ_INS_STOCFHNP = 1610 -SYSZ_INS_STOCFHNZ = 1611 -SYSZ_INS_STOCFHO = 1612 -SYSZ_INS_STOCFHP = 1613 -SYSZ_INS_STOCFHZ = 1614 -SYSZ_INS_STOCGM = 1615 -SYSZ_INS_STOCGNM = 1616 -SYSZ_INS_STOCGNP = 1617 -SYSZ_INS_STOCGNZ = 1618 -SYSZ_INS_STOCGP = 1619 -SYSZ_INS_STOCGZ = 1620 -SYSZ_INS_STOCM = 1621 -SYSZ_INS_STOCNM = 1622 -SYSZ_INS_STOCNP = 1623 -SYSZ_INS_STOCNZ = 1624 -SYSZ_INS_STOCP = 1625 -SYSZ_INS_STOCZ = 1626 -SYSZ_INS_STOSM = 1627 -SYSZ_INS_STPQ = 1628 -SYSZ_INS_STPT = 1629 -SYSZ_INS_STPX = 1630 -SYSZ_INS_STRAG = 1631 -SYSZ_INS_STRVH = 1632 -SYSZ_INS_STSCH = 1633 -SYSZ_INS_STSI = 1634 -SYSZ_INS_STURA = 1635 -SYSZ_INS_STURG = 1636 -SYSZ_INS_SU = 1637 -SYSZ_INS_SUR = 1638 -SYSZ_INS_SVC = 1639 -SYSZ_INS_SW = 1640 -SYSZ_INS_SWR = 1641 -SYSZ_INS_SXR = 1642 -SYSZ_INS_SXTR = 1643 -SYSZ_INS_SXTRA = 1644 -SYSZ_INS_TABORT = 1645 -SYSZ_INS_TAM = 1646 -SYSZ_INS_TAR = 1647 -SYSZ_INS_TB = 1648 -SYSZ_INS_TBDR = 1649 -SYSZ_INS_TBEDR = 1650 -SYSZ_INS_TBEGIN = 1651 -SYSZ_INS_TBEGINC = 1652 -SYSZ_INS_TCDB = 1653 -SYSZ_INS_TCEB = 1654 -SYSZ_INS_TCXB = 1655 -SYSZ_INS_TDCDT = 1656 -SYSZ_INS_TDCET = 1657 -SYSZ_INS_TDCXT = 1658 -SYSZ_INS_TDGDT = 1659 -SYSZ_INS_TDGET = 1660 -SYSZ_INS_TDGXT = 1661 -SYSZ_INS_TEND = 1662 -SYSZ_INS_THDER = 1663 -SYSZ_INS_THDR = 1664 -SYSZ_INS_TP = 1665 -SYSZ_INS_TPI = 1666 -SYSZ_INS_TPROT = 1667 -SYSZ_INS_TR = 1668 -SYSZ_INS_TRACE = 1669 -SYSZ_INS_TRACG = 1670 -SYSZ_INS_TRAP2 = 1671 -SYSZ_INS_TRAP4 = 1672 -SYSZ_INS_TRE = 1673 -SYSZ_INS_TROO = 1674 -SYSZ_INS_TROT = 1675 -SYSZ_INS_TRT = 1676 -SYSZ_INS_TRTE = 1677 -SYSZ_INS_TRTO = 1678 -SYSZ_INS_TRTR = 1679 -SYSZ_INS_TRTRE = 1680 -SYSZ_INS_TRTT = 1681 -SYSZ_INS_TS = 1682 -SYSZ_INS_TSCH = 1683 -SYSZ_INS_UNPK = 1684 -SYSZ_INS_UNPKA = 1685 -SYSZ_INS_UNPKU = 1686 -SYSZ_INS_UPT = 1687 -SYSZ_INS_VA = 1688 -SYSZ_INS_VAB = 1689 -SYSZ_INS_VAC = 1690 -SYSZ_INS_VACC = 1691 -SYSZ_INS_VACCB = 1692 -SYSZ_INS_VACCC = 1693 -SYSZ_INS_VACCCQ = 1694 -SYSZ_INS_VACCF = 1695 -SYSZ_INS_VACCG = 1696 -SYSZ_INS_VACCH = 1697 -SYSZ_INS_VACCQ = 1698 -SYSZ_INS_VACQ = 1699 -SYSZ_INS_VAF = 1700 -SYSZ_INS_VAG = 1701 -SYSZ_INS_VAH = 1702 -SYSZ_INS_VAP = 1703 -SYSZ_INS_VAQ = 1704 -SYSZ_INS_VAVG = 1705 -SYSZ_INS_VAVGB = 1706 -SYSZ_INS_VAVGF = 1707 -SYSZ_INS_VAVGG = 1708 -SYSZ_INS_VAVGH = 1709 -SYSZ_INS_VAVGL = 1710 -SYSZ_INS_VAVGLB = 1711 -SYSZ_INS_VAVGLF = 1712 -SYSZ_INS_VAVGLG = 1713 -SYSZ_INS_VAVGLH = 1714 -SYSZ_INS_VBPERM = 1715 -SYSZ_INS_VCDG = 1716 -SYSZ_INS_VCDGB = 1717 -SYSZ_INS_VCDLG = 1718 -SYSZ_INS_VCDLGB = 1719 -SYSZ_INS_VCEQ = 1720 -SYSZ_INS_VCEQB = 1721 -SYSZ_INS_VCEQBS = 1722 -SYSZ_INS_VCEQF = 1723 -SYSZ_INS_VCEQFS = 1724 -SYSZ_INS_VCEQG = 1725 -SYSZ_INS_VCEQGS = 1726 -SYSZ_INS_VCEQH = 1727 -SYSZ_INS_VCEQHS = 1728 -SYSZ_INS_VCGD = 1729 -SYSZ_INS_VCGDB = 1730 -SYSZ_INS_VCH = 1731 -SYSZ_INS_VCHB = 1732 -SYSZ_INS_VCHBS = 1733 -SYSZ_INS_VCHF = 1734 -SYSZ_INS_VCHFS = 1735 -SYSZ_INS_VCHG = 1736 -SYSZ_INS_VCHGS = 1737 -SYSZ_INS_VCHH = 1738 -SYSZ_INS_VCHHS = 1739 -SYSZ_INS_VCHL = 1740 -SYSZ_INS_VCHLB = 1741 -SYSZ_INS_VCHLBS = 1742 -SYSZ_INS_VCHLF = 1743 -SYSZ_INS_VCHLFS = 1744 -SYSZ_INS_VCHLG = 1745 -SYSZ_INS_VCHLGS = 1746 -SYSZ_INS_VCHLH = 1747 -SYSZ_INS_VCHLHS = 1748 -SYSZ_INS_VCKSM = 1749 -SYSZ_INS_VCLGD = 1750 -SYSZ_INS_VCLGDB = 1751 -SYSZ_INS_VCLZ = 1752 -SYSZ_INS_VCLZB = 1753 -SYSZ_INS_VCLZF = 1754 -SYSZ_INS_VCLZG = 1755 -SYSZ_INS_VCLZH = 1756 -SYSZ_INS_VCP = 1757 -SYSZ_INS_VCTZ = 1758 -SYSZ_INS_VCTZB = 1759 -SYSZ_INS_VCTZF = 1760 -SYSZ_INS_VCTZG = 1761 -SYSZ_INS_VCTZH = 1762 -SYSZ_INS_VCVB = 1763 -SYSZ_INS_VCVBG = 1764 -SYSZ_INS_VCVD = 1765 -SYSZ_INS_VCVDG = 1766 -SYSZ_INS_VDP = 1767 -SYSZ_INS_VEC = 1768 -SYSZ_INS_VECB = 1769 -SYSZ_INS_VECF = 1770 -SYSZ_INS_VECG = 1771 -SYSZ_INS_VECH = 1772 -SYSZ_INS_VECL = 1773 -SYSZ_INS_VECLB = 1774 -SYSZ_INS_VECLF = 1775 -SYSZ_INS_VECLG = 1776 -SYSZ_INS_VECLH = 1777 -SYSZ_INS_VERIM = 1778 -SYSZ_INS_VERIMB = 1779 -SYSZ_INS_VERIMF = 1780 -SYSZ_INS_VERIMG = 1781 -SYSZ_INS_VERIMH = 1782 -SYSZ_INS_VERLL = 1783 -SYSZ_INS_VERLLB = 1784 -SYSZ_INS_VERLLF = 1785 -SYSZ_INS_VERLLG = 1786 -SYSZ_INS_VERLLH = 1787 -SYSZ_INS_VERLLV = 1788 -SYSZ_INS_VERLLVB = 1789 -SYSZ_INS_VERLLVF = 1790 -SYSZ_INS_VERLLVG = 1791 -SYSZ_INS_VERLLVH = 1792 -SYSZ_INS_VESL = 1793 -SYSZ_INS_VESLB = 1794 -SYSZ_INS_VESLF = 1795 -SYSZ_INS_VESLG = 1796 -SYSZ_INS_VESLH = 1797 -SYSZ_INS_VESLV = 1798 -SYSZ_INS_VESLVB = 1799 -SYSZ_INS_VESLVF = 1800 -SYSZ_INS_VESLVG = 1801 -SYSZ_INS_VESLVH = 1802 -SYSZ_INS_VESRA = 1803 -SYSZ_INS_VESRAB = 1804 -SYSZ_INS_VESRAF = 1805 -SYSZ_INS_VESRAG = 1806 -SYSZ_INS_VESRAH = 1807 -SYSZ_INS_VESRAV = 1808 -SYSZ_INS_VESRAVB = 1809 -SYSZ_INS_VESRAVF = 1810 -SYSZ_INS_VESRAVG = 1811 -SYSZ_INS_VESRAVH = 1812 -SYSZ_INS_VESRL = 1813 -SYSZ_INS_VESRLB = 1814 -SYSZ_INS_VESRLF = 1815 -SYSZ_INS_VESRLG = 1816 -SYSZ_INS_VESRLH = 1817 -SYSZ_INS_VESRLV = 1818 -SYSZ_INS_VESRLVB = 1819 -SYSZ_INS_VESRLVF = 1820 -SYSZ_INS_VESRLVG = 1821 -SYSZ_INS_VESRLVH = 1822 -SYSZ_INS_VFA = 1823 -SYSZ_INS_VFADB = 1824 -SYSZ_INS_VFAE = 1825 -SYSZ_INS_VFAEB = 1826 -SYSZ_INS_VFAEBS = 1827 -SYSZ_INS_VFAEF = 1828 -SYSZ_INS_VFAEFS = 1829 -SYSZ_INS_VFAEH = 1830 -SYSZ_INS_VFAEHS = 1831 -SYSZ_INS_VFAEZB = 1832 -SYSZ_INS_VFAEZBS = 1833 -SYSZ_INS_VFAEZF = 1834 -SYSZ_INS_VFAEZFS = 1835 -SYSZ_INS_VFAEZH = 1836 -SYSZ_INS_VFAEZHS = 1837 -SYSZ_INS_VFASB = 1838 -SYSZ_INS_VFCE = 1839 -SYSZ_INS_VFCEDB = 1840 -SYSZ_INS_VFCEDBS = 1841 -SYSZ_INS_VFCESB = 1842 -SYSZ_INS_VFCESBS = 1843 -SYSZ_INS_VFCH = 1844 -SYSZ_INS_VFCHDB = 1845 -SYSZ_INS_VFCHDBS = 1846 -SYSZ_INS_VFCHE = 1847 -SYSZ_INS_VFCHEDB = 1848 -SYSZ_INS_VFCHEDBS = 1849 -SYSZ_INS_VFCHESB = 1850 -SYSZ_INS_VFCHESBS = 1851 -SYSZ_INS_VFCHSB = 1852 -SYSZ_INS_VFCHSBS = 1853 -SYSZ_INS_VFD = 1854 -SYSZ_INS_VFDDB = 1855 -SYSZ_INS_VFDSB = 1856 -SYSZ_INS_VFEE = 1857 -SYSZ_INS_VFEEB = 1858 -SYSZ_INS_VFEEBS = 1859 -SYSZ_INS_VFEEF = 1860 -SYSZ_INS_VFEEFS = 1861 -SYSZ_INS_VFEEH = 1862 -SYSZ_INS_VFEEHS = 1863 -SYSZ_INS_VFEEZB = 1864 -SYSZ_INS_VFEEZBS = 1865 -SYSZ_INS_VFEEZF = 1866 -SYSZ_INS_VFEEZFS = 1867 -SYSZ_INS_VFEEZH = 1868 -SYSZ_INS_VFEEZHS = 1869 -SYSZ_INS_VFENE = 1870 -SYSZ_INS_VFENEB = 1871 -SYSZ_INS_VFENEBS = 1872 -SYSZ_INS_VFENEF = 1873 -SYSZ_INS_VFENEFS = 1874 -SYSZ_INS_VFENEH = 1875 -SYSZ_INS_VFENEHS = 1876 -SYSZ_INS_VFENEZB = 1877 -SYSZ_INS_VFENEZBS = 1878 -SYSZ_INS_VFENEZF = 1879 -SYSZ_INS_VFENEZFS = 1880 -SYSZ_INS_VFENEZH = 1881 -SYSZ_INS_VFENEZHS = 1882 -SYSZ_INS_VFI = 1883 -SYSZ_INS_VFIDB = 1884 -SYSZ_INS_VFISB = 1885 -SYSZ_INS_VFKEDB = 1886 -SYSZ_INS_VFKEDBS = 1887 -SYSZ_INS_VFKESB = 1888 -SYSZ_INS_VFKESBS = 1889 -SYSZ_INS_VFKHDB = 1890 -SYSZ_INS_VFKHDBS = 1891 -SYSZ_INS_VFKHEDB = 1892 -SYSZ_INS_VFKHEDBS = 1893 -SYSZ_INS_VFKHESB = 1894 -SYSZ_INS_VFKHESBS = 1895 -SYSZ_INS_VFKHSB = 1896 -SYSZ_INS_VFKHSBS = 1897 -SYSZ_INS_VFLCDB = 1898 -SYSZ_INS_VFLCSB = 1899 -SYSZ_INS_VFLL = 1900 -SYSZ_INS_VFLLS = 1901 -SYSZ_INS_VFLNDB = 1902 -SYSZ_INS_VFLNSB = 1903 -SYSZ_INS_VFLPDB = 1904 -SYSZ_INS_VFLPSB = 1905 -SYSZ_INS_VFLR = 1906 -SYSZ_INS_VFLRD = 1907 -SYSZ_INS_VFM = 1908 -SYSZ_INS_VFMA = 1909 -SYSZ_INS_VFMADB = 1910 -SYSZ_INS_VFMASB = 1911 -SYSZ_INS_VFMAX = 1912 -SYSZ_INS_VFMAXDB = 1913 -SYSZ_INS_VFMAXSB = 1914 -SYSZ_INS_VFMDB = 1915 -SYSZ_INS_VFMIN = 1916 -SYSZ_INS_VFMINDB = 1917 -SYSZ_INS_VFMINSB = 1918 -SYSZ_INS_VFMS = 1919 -SYSZ_INS_VFMSB = 1920 -SYSZ_INS_VFMSDB = 1921 -SYSZ_INS_VFMSSB = 1922 -SYSZ_INS_VFNMA = 1923 -SYSZ_INS_VFNMADB = 1924 -SYSZ_INS_VFNMASB = 1925 -SYSZ_INS_VFNMS = 1926 -SYSZ_INS_VFNMSDB = 1927 -SYSZ_INS_VFNMSSB = 1928 -SYSZ_INS_VFPSO = 1929 -SYSZ_INS_VFPSODB = 1930 -SYSZ_INS_VFPSOSB = 1931 -SYSZ_INS_VFS = 1932 -SYSZ_INS_VFSDB = 1933 -SYSZ_INS_VFSQ = 1934 -SYSZ_INS_VFSQDB = 1935 -SYSZ_INS_VFSQSB = 1936 -SYSZ_INS_VFSSB = 1937 -SYSZ_INS_VFTCI = 1938 -SYSZ_INS_VFTCIDB = 1939 -SYSZ_INS_VFTCISB = 1940 -SYSZ_INS_VGBM = 1941 -SYSZ_INS_VGEF = 1942 -SYSZ_INS_VGEG = 1943 -SYSZ_INS_VGFM = 1944 -SYSZ_INS_VGFMA = 1945 -SYSZ_INS_VGFMAB = 1946 -SYSZ_INS_VGFMAF = 1947 -SYSZ_INS_VGFMAG = 1948 -SYSZ_INS_VGFMAH = 1949 -SYSZ_INS_VGFMB = 1950 -SYSZ_INS_VGFMF = 1951 -SYSZ_INS_VGFMG = 1952 -SYSZ_INS_VGFMH = 1953 -SYSZ_INS_VGM = 1954 -SYSZ_INS_VGMB = 1955 -SYSZ_INS_VGMF = 1956 -SYSZ_INS_VGMG = 1957 -SYSZ_INS_VGMH = 1958 -SYSZ_INS_VISTR = 1959 -SYSZ_INS_VISTRB = 1960 -SYSZ_INS_VISTRBS = 1961 -SYSZ_INS_VISTRF = 1962 -SYSZ_INS_VISTRFS = 1963 -SYSZ_INS_VISTRH = 1964 -SYSZ_INS_VISTRHS = 1965 -SYSZ_INS_VL = 1966 -SYSZ_INS_VLBB = 1967 -SYSZ_INS_VLC = 1968 -SYSZ_INS_VLCB = 1969 -SYSZ_INS_VLCF = 1970 -SYSZ_INS_VLCG = 1971 -SYSZ_INS_VLCH = 1972 -SYSZ_INS_VLDE = 1973 -SYSZ_INS_VLDEB = 1974 -SYSZ_INS_VLEB = 1975 -SYSZ_INS_VLED = 1976 -SYSZ_INS_VLEDB = 1977 -SYSZ_INS_VLEF = 1978 -SYSZ_INS_VLEG = 1979 -SYSZ_INS_VLEH = 1980 -SYSZ_INS_VLEIB = 1981 -SYSZ_INS_VLEIF = 1982 -SYSZ_INS_VLEIG = 1983 -SYSZ_INS_VLEIH = 1984 -SYSZ_INS_VLGV = 1985 -SYSZ_INS_VLGVB = 1986 -SYSZ_INS_VLGVF = 1987 -SYSZ_INS_VLGVG = 1988 -SYSZ_INS_VLGVH = 1989 -SYSZ_INS_VLIP = 1990 -SYSZ_INS_VLL = 1991 -SYSZ_INS_VLLEZ = 1992 -SYSZ_INS_VLLEZB = 1993 -SYSZ_INS_VLLEZF = 1994 -SYSZ_INS_VLLEZG = 1995 -SYSZ_INS_VLLEZH = 1996 -SYSZ_INS_VLLEZLF = 1997 -SYSZ_INS_VLM = 1998 -SYSZ_INS_VLP = 1999 -SYSZ_INS_VLPB = 2000 -SYSZ_INS_VLPF = 2001 -SYSZ_INS_VLPG = 2002 -SYSZ_INS_VLPH = 2003 -SYSZ_INS_VLR = 2004 -SYSZ_INS_VLREP = 2005 -SYSZ_INS_VLREPB = 2006 -SYSZ_INS_VLREPF = 2007 -SYSZ_INS_VLREPG = 2008 -SYSZ_INS_VLREPH = 2009 -SYSZ_INS_VLRL = 2010 -SYSZ_INS_VLRLR = 2011 -SYSZ_INS_VLVG = 2012 -SYSZ_INS_VLVGB = 2013 -SYSZ_INS_VLVGF = 2014 -SYSZ_INS_VLVGG = 2015 -SYSZ_INS_VLVGH = 2016 -SYSZ_INS_VLVGP = 2017 -SYSZ_INS_VMAE = 2018 -SYSZ_INS_VMAEB = 2019 -SYSZ_INS_VMAEF = 2020 -SYSZ_INS_VMAEH = 2021 -SYSZ_INS_VMAH = 2022 -SYSZ_INS_VMAHB = 2023 -SYSZ_INS_VMAHF = 2024 -SYSZ_INS_VMAHH = 2025 -SYSZ_INS_VMAL = 2026 -SYSZ_INS_VMALB = 2027 -SYSZ_INS_VMALE = 2028 -SYSZ_INS_VMALEB = 2029 -SYSZ_INS_VMALEF = 2030 -SYSZ_INS_VMALEH = 2031 -SYSZ_INS_VMALF = 2032 -SYSZ_INS_VMALH = 2033 -SYSZ_INS_VMALHB = 2034 -SYSZ_INS_VMALHF = 2035 -SYSZ_INS_VMALHH = 2036 -SYSZ_INS_VMALHW = 2037 -SYSZ_INS_VMALO = 2038 -SYSZ_INS_VMALOB = 2039 -SYSZ_INS_VMALOF = 2040 -SYSZ_INS_VMALOH = 2041 -SYSZ_INS_VMAO = 2042 -SYSZ_INS_VMAOB = 2043 -SYSZ_INS_VMAOF = 2044 -SYSZ_INS_VMAOH = 2045 -SYSZ_INS_VME = 2046 -SYSZ_INS_VMEB = 2047 -SYSZ_INS_VMEF = 2048 -SYSZ_INS_VMEH = 2049 -SYSZ_INS_VMH = 2050 -SYSZ_INS_VMHB = 2051 -SYSZ_INS_VMHF = 2052 -SYSZ_INS_VMHH = 2053 -SYSZ_INS_VML = 2054 -SYSZ_INS_VMLB = 2055 -SYSZ_INS_VMLE = 2056 -SYSZ_INS_VMLEB = 2057 -SYSZ_INS_VMLEF = 2058 -SYSZ_INS_VMLEH = 2059 -SYSZ_INS_VMLF = 2060 -SYSZ_INS_VMLH = 2061 -SYSZ_INS_VMLHB = 2062 -SYSZ_INS_VMLHF = 2063 -SYSZ_INS_VMLHH = 2064 -SYSZ_INS_VMLHW = 2065 -SYSZ_INS_VMLO = 2066 -SYSZ_INS_VMLOB = 2067 -SYSZ_INS_VMLOF = 2068 -SYSZ_INS_VMLOH = 2069 -SYSZ_INS_VMN = 2070 -SYSZ_INS_VMNB = 2071 -SYSZ_INS_VMNF = 2072 -SYSZ_INS_VMNG = 2073 -SYSZ_INS_VMNH = 2074 -SYSZ_INS_VMNL = 2075 -SYSZ_INS_VMNLB = 2076 -SYSZ_INS_VMNLF = 2077 -SYSZ_INS_VMNLG = 2078 -SYSZ_INS_VMNLH = 2079 -SYSZ_INS_VMO = 2080 -SYSZ_INS_VMOB = 2081 -SYSZ_INS_VMOF = 2082 -SYSZ_INS_VMOH = 2083 -SYSZ_INS_VMP = 2084 -SYSZ_INS_VMRH = 2085 -SYSZ_INS_VMRHB = 2086 -SYSZ_INS_VMRHF = 2087 -SYSZ_INS_VMRHG = 2088 -SYSZ_INS_VMRHH = 2089 -SYSZ_INS_VMRL = 2090 -SYSZ_INS_VMRLB = 2091 -SYSZ_INS_VMRLF = 2092 -SYSZ_INS_VMRLG = 2093 -SYSZ_INS_VMRLH = 2094 -SYSZ_INS_VMSL = 2095 -SYSZ_INS_VMSLG = 2096 -SYSZ_INS_VMSP = 2097 -SYSZ_INS_VMX = 2098 -SYSZ_INS_VMXB = 2099 -SYSZ_INS_VMXF = 2100 -SYSZ_INS_VMXG = 2101 -SYSZ_INS_VMXH = 2102 -SYSZ_INS_VMXL = 2103 -SYSZ_INS_VMXLB = 2104 -SYSZ_INS_VMXLF = 2105 -SYSZ_INS_VMXLG = 2106 -SYSZ_INS_VMXLH = 2107 -SYSZ_INS_VN = 2108 -SYSZ_INS_VNC = 2109 -SYSZ_INS_VNN = 2110 -SYSZ_INS_VNO = 2111 -SYSZ_INS_VNX = 2112 -SYSZ_INS_VO = 2113 -SYSZ_INS_VOC = 2114 -SYSZ_INS_VONE = 2115 -SYSZ_INS_VPDI = 2116 -SYSZ_INS_VPERM = 2117 -SYSZ_INS_VPK = 2118 -SYSZ_INS_VPKF = 2119 -SYSZ_INS_VPKG = 2120 -SYSZ_INS_VPKH = 2121 -SYSZ_INS_VPKLS = 2122 -SYSZ_INS_VPKLSF = 2123 -SYSZ_INS_VPKLSFS = 2124 -SYSZ_INS_VPKLSG = 2125 -SYSZ_INS_VPKLSGS = 2126 -SYSZ_INS_VPKLSH = 2127 -SYSZ_INS_VPKLSHS = 2128 -SYSZ_INS_VPKS = 2129 -SYSZ_INS_VPKSF = 2130 -SYSZ_INS_VPKSFS = 2131 -SYSZ_INS_VPKSG = 2132 -SYSZ_INS_VPKSGS = 2133 -SYSZ_INS_VPKSH = 2134 -SYSZ_INS_VPKSHS = 2135 -SYSZ_INS_VPKZ = 2136 -SYSZ_INS_VPOPCT = 2137 -SYSZ_INS_VPOPCTB = 2138 -SYSZ_INS_VPOPCTF = 2139 -SYSZ_INS_VPOPCTG = 2140 -SYSZ_INS_VPOPCTH = 2141 -SYSZ_INS_VPSOP = 2142 -SYSZ_INS_VREP = 2143 -SYSZ_INS_VREPB = 2144 -SYSZ_INS_VREPF = 2145 -SYSZ_INS_VREPG = 2146 -SYSZ_INS_VREPH = 2147 -SYSZ_INS_VREPI = 2148 -SYSZ_INS_VREPIB = 2149 -SYSZ_INS_VREPIF = 2150 -SYSZ_INS_VREPIG = 2151 -SYSZ_INS_VREPIH = 2152 -SYSZ_INS_VRP = 2153 -SYSZ_INS_VS = 2154 -SYSZ_INS_VSB = 2155 -SYSZ_INS_VSBCBI = 2156 -SYSZ_INS_VSBCBIQ = 2157 -SYSZ_INS_VSBI = 2158 -SYSZ_INS_VSBIQ = 2159 -SYSZ_INS_VSCBI = 2160 -SYSZ_INS_VSCBIB = 2161 -SYSZ_INS_VSCBIF = 2162 -SYSZ_INS_VSCBIG = 2163 -SYSZ_INS_VSCBIH = 2164 -SYSZ_INS_VSCBIQ = 2165 -SYSZ_INS_VSCEF = 2166 -SYSZ_INS_VSCEG = 2167 -SYSZ_INS_VSDP = 2168 -SYSZ_INS_VSEG = 2169 -SYSZ_INS_VSEGB = 2170 -SYSZ_INS_VSEGF = 2171 -SYSZ_INS_VSEGH = 2172 -SYSZ_INS_VSEL = 2173 -SYSZ_INS_VSF = 2174 -SYSZ_INS_VSG = 2175 -SYSZ_INS_VSH = 2176 -SYSZ_INS_VSL = 2177 -SYSZ_INS_VSLB = 2178 -SYSZ_INS_VSLDB = 2179 -SYSZ_INS_VSP = 2180 -SYSZ_INS_VSQ = 2181 -SYSZ_INS_VSRA = 2182 -SYSZ_INS_VSRAB = 2183 -SYSZ_INS_VSRL = 2184 -SYSZ_INS_VSRLB = 2185 -SYSZ_INS_VSRP = 2186 -SYSZ_INS_VST = 2187 -SYSZ_INS_VSTEB = 2188 -SYSZ_INS_VSTEF = 2189 -SYSZ_INS_VSTEG = 2190 -SYSZ_INS_VSTEH = 2191 -SYSZ_INS_VSTL = 2192 -SYSZ_INS_VSTM = 2193 -SYSZ_INS_VSTRC = 2194 -SYSZ_INS_VSTRCB = 2195 -SYSZ_INS_VSTRCBS = 2196 -SYSZ_INS_VSTRCF = 2197 -SYSZ_INS_VSTRCFS = 2198 -SYSZ_INS_VSTRCH = 2199 -SYSZ_INS_VSTRCHS = 2200 -SYSZ_INS_VSTRCZB = 2201 -SYSZ_INS_VSTRCZBS = 2202 -SYSZ_INS_VSTRCZF = 2203 -SYSZ_INS_VSTRCZFS = 2204 -SYSZ_INS_VSTRCZH = 2205 -SYSZ_INS_VSTRCZHS = 2206 -SYSZ_INS_VSTRL = 2207 -SYSZ_INS_VSTRLR = 2208 -SYSZ_INS_VSUM = 2209 -SYSZ_INS_VSUMB = 2210 -SYSZ_INS_VSUMG = 2211 -SYSZ_INS_VSUMGF = 2212 -SYSZ_INS_VSUMGH = 2213 -SYSZ_INS_VSUMH = 2214 -SYSZ_INS_VSUMQ = 2215 -SYSZ_INS_VSUMQF = 2216 -SYSZ_INS_VSUMQG = 2217 -SYSZ_INS_VTM = 2218 -SYSZ_INS_VTP = 2219 -SYSZ_INS_VUPH = 2220 -SYSZ_INS_VUPHB = 2221 -SYSZ_INS_VUPHF = 2222 -SYSZ_INS_VUPHH = 2223 -SYSZ_INS_VUPKZ = 2224 -SYSZ_INS_VUPL = 2225 -SYSZ_INS_VUPLB = 2226 -SYSZ_INS_VUPLF = 2227 -SYSZ_INS_VUPLH = 2228 -SYSZ_INS_VUPLHB = 2229 -SYSZ_INS_VUPLHF = 2230 -SYSZ_INS_VUPLHH = 2231 -SYSZ_INS_VUPLHW = 2232 -SYSZ_INS_VUPLL = 2233 -SYSZ_INS_VUPLLB = 2234 -SYSZ_INS_VUPLLF = 2235 -SYSZ_INS_VUPLLH = 2236 -SYSZ_INS_VX = 2237 -SYSZ_INS_VZERO = 2238 -SYSZ_INS_WCDGB = 2239 -SYSZ_INS_WCDLGB = 2240 -SYSZ_INS_WCGDB = 2241 -SYSZ_INS_WCLGDB = 2242 -SYSZ_INS_WFADB = 2243 -SYSZ_INS_WFASB = 2244 -SYSZ_INS_WFAXB = 2245 -SYSZ_INS_WFC = 2246 -SYSZ_INS_WFCDB = 2247 -SYSZ_INS_WFCEDB = 2248 -SYSZ_INS_WFCEDBS = 2249 -SYSZ_INS_WFCESB = 2250 -SYSZ_INS_WFCESBS = 2251 -SYSZ_INS_WFCEXB = 2252 -SYSZ_INS_WFCEXBS = 2253 -SYSZ_INS_WFCHDB = 2254 -SYSZ_INS_WFCHDBS = 2255 -SYSZ_INS_WFCHEDB = 2256 -SYSZ_INS_WFCHEDBS = 2257 -SYSZ_INS_WFCHESB = 2258 -SYSZ_INS_WFCHESBS = 2259 -SYSZ_INS_WFCHEXB = 2260 -SYSZ_INS_WFCHEXBS = 2261 -SYSZ_INS_WFCHSB = 2262 -SYSZ_INS_WFCHSBS = 2263 -SYSZ_INS_WFCHXB = 2264 -SYSZ_INS_WFCHXBS = 2265 -SYSZ_INS_WFCSB = 2266 -SYSZ_INS_WFCXB = 2267 -SYSZ_INS_WFDDB = 2268 -SYSZ_INS_WFDSB = 2269 -SYSZ_INS_WFDXB = 2270 -SYSZ_INS_WFIDB = 2271 -SYSZ_INS_WFISB = 2272 -SYSZ_INS_WFIXB = 2273 -SYSZ_INS_WFK = 2274 -SYSZ_INS_WFKDB = 2275 -SYSZ_INS_WFKEDB = 2276 -SYSZ_INS_WFKEDBS = 2277 -SYSZ_INS_WFKESB = 2278 -SYSZ_INS_WFKESBS = 2279 -SYSZ_INS_WFKEXB = 2280 -SYSZ_INS_WFKEXBS = 2281 -SYSZ_INS_WFKHDB = 2282 -SYSZ_INS_WFKHDBS = 2283 -SYSZ_INS_WFKHEDB = 2284 -SYSZ_INS_WFKHEDBS = 2285 -SYSZ_INS_WFKHESB = 2286 -SYSZ_INS_WFKHESBS = 2287 -SYSZ_INS_WFKHEXB = 2288 -SYSZ_INS_WFKHEXBS = 2289 -SYSZ_INS_WFKHSB = 2290 -SYSZ_INS_WFKHSBS = 2291 -SYSZ_INS_WFKHXB = 2292 -SYSZ_INS_WFKHXBS = 2293 -SYSZ_INS_WFKSB = 2294 -SYSZ_INS_WFKXB = 2295 -SYSZ_INS_WFLCDB = 2296 -SYSZ_INS_WFLCSB = 2297 -SYSZ_INS_WFLCXB = 2298 -SYSZ_INS_WFLLD = 2299 -SYSZ_INS_WFLLS = 2300 -SYSZ_INS_WFLNDB = 2301 -SYSZ_INS_WFLNSB = 2302 -SYSZ_INS_WFLNXB = 2303 -SYSZ_INS_WFLPDB = 2304 -SYSZ_INS_WFLPSB = 2305 -SYSZ_INS_WFLPXB = 2306 -SYSZ_INS_WFLRD = 2307 -SYSZ_INS_WFLRX = 2308 -SYSZ_INS_WFMADB = 2309 -SYSZ_INS_WFMASB = 2310 -SYSZ_INS_WFMAXB = 2311 -SYSZ_INS_WFMAXDB = 2312 -SYSZ_INS_WFMAXSB = 2313 -SYSZ_INS_WFMAXXB = 2314 -SYSZ_INS_WFMDB = 2315 -SYSZ_INS_WFMINDB = 2316 -SYSZ_INS_WFMINSB = 2317 -SYSZ_INS_WFMINXB = 2318 -SYSZ_INS_WFMSB = 2319 -SYSZ_INS_WFMSDB = 2320 -SYSZ_INS_WFMSSB = 2321 -SYSZ_INS_WFMSXB = 2322 -SYSZ_INS_WFMXB = 2323 -SYSZ_INS_WFNMADB = 2324 -SYSZ_INS_WFNMASB = 2325 -SYSZ_INS_WFNMAXB = 2326 -SYSZ_INS_WFNMSDB = 2327 -SYSZ_INS_WFNMSSB = 2328 -SYSZ_INS_WFNMSXB = 2329 -SYSZ_INS_WFPSODB = 2330 -SYSZ_INS_WFPSOSB = 2331 -SYSZ_INS_WFPSOXB = 2332 -SYSZ_INS_WFSDB = 2333 -SYSZ_INS_WFSQDB = 2334 -SYSZ_INS_WFSQSB = 2335 -SYSZ_INS_WFSQXB = 2336 -SYSZ_INS_WFSSB = 2337 -SYSZ_INS_WFSXB = 2338 -SYSZ_INS_WFTCIDB = 2339 -SYSZ_INS_WFTCISB = 2340 -SYSZ_INS_WFTCIXB = 2341 -SYSZ_INS_WLDEB = 2342 -SYSZ_INS_WLEDB = 2343 -SYSZ_INS_XSCH = 2344 -SYSZ_INS_ZAP = 2345 -SYSZ_INS_ENDING = 2346 - -SYSZ_GRP_INVALID = 0 -SYSZ_GRP_JUMP = 1 -SYSZ_GRP_DISTINCTOPS = 128 -SYSZ_GRP_FPEXTENSION = 129 -SYSZ_GRP_HIGHWORD = 130 -SYSZ_GRP_INTERLOCKEDACCESS1 = 131 -SYSZ_GRP_LOADSTOREONCOND = 132 -SYSZ_GRP_DFPPACKEDCONVERSION = 133 -SYSZ_GRP_DFPZONEDCONVERSION = 134 -SYSZ_GRP_ENHANCEDDAT2 = 135 -SYSZ_GRP_EXECUTIONHINT = 136 -SYSZ_GRP_GUARDEDSTORAGE = 137 -SYSZ_GRP_INSERTREFERENCEBITSMULTIPLE = 138 -SYSZ_GRP_LOADANDTRAP = 139 -SYSZ_GRP_LOADANDZERORIGHTMOSTBYTE = 140 -SYSZ_GRP_LOADSTOREONCOND2 = 141 -SYSZ_GRP_MESSAGESECURITYASSIST3 = 142 -SYSZ_GRP_MESSAGESECURITYASSIST4 = 143 -SYSZ_GRP_MESSAGESECURITYASSIST5 = 144 -SYSZ_GRP_MESSAGESECURITYASSIST7 = 145 -SYSZ_GRP_MESSAGESECURITYASSIST8 = 146 -SYSZ_GRP_MISCELLANEOUSEXTENSIONS = 147 -SYSZ_GRP_MISCELLANEOUSEXTENSIONS2 = 148 -SYSZ_GRP_NOVECTOR = 149 -SYSZ_GRP_POPULATIONCOUNT = 150 -SYSZ_GRP_PROCESSORASSIST = 151 -SYSZ_GRP_RESETREFERENCEBITSMULTIPLE = 152 -SYSZ_GRP_TRANSACTIONALEXECUTION = 153 -SYSZ_GRP_VECTOR = 154 -SYSZ_GRP_VECTORENHANCEMENTS1 = 155 -SYSZ_GRP_VECTORPACKEDDECIMAL = 156 -SYSZ_GRP_ENDING = 157 diff --git a/.tools/python-revlibs/capstone/tms320c64x.py b/.tools/python-revlibs/capstone/tms320c64x.py deleted file mode 100644 index 1323dc3..0000000 --- a/.tools/python-revlibs/capstone/tms320c64x.py +++ /dev/null @@ -1,66 +0,0 @@ -# Capstone Python bindings, by Fotis Loukos - -import ctypes, copy -from .tms320c64x_const import * - -# define the API -class TMS320C64xOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_int), - ('disp', ctypes.c_int), - ('unit', ctypes.c_int), - ('scaled', ctypes.c_int), - ('disptype', ctypes.c_int), - ('direction', ctypes.c_int), - ('modify', ctypes.c_int), - ) - -class TMS320C64xOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int32), - ('mem', TMS320C64xOpMem), - ) - -class TMS320C64xCondition(ctypes.Structure): - _fields_ = ( - ('reg', ctypes.c_uint), - ('zero', ctypes.c_uint), - ) - -class TMS320C64xFunctionalUnit(ctypes.Structure): - _fields_ = ( - ('unit', ctypes.c_uint), - ('side', ctypes.c_uint), - ('crosspath', ctypes.c_uint), - ) - -class TMS320C64xOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', TMS320C64xOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - -class CsTMS320C64x(ctypes.Structure): - _fields_ = ( - ('op_count', ctypes.c_uint8), - ('operands', TMS320C64xOp * 8), - ('condition', TMS320C64xCondition), - ('funit', TMS320C64xFunctionalUnit), - ('parallel', ctypes.c_uint), - ) - -def get_arch_info(a): - return (a.condition, a.funit, a.parallel, copy.deepcopy(a.operands[:a.op_count])) diff --git a/.tools/python-revlibs/capstone/tms320c64x_const.py b/.tools/python-revlibs/capstone/tms320c64x_const.py deleted file mode 100644 index 50c7d24..0000000 --- a/.tools/python-revlibs/capstone/tms320c64x_const.py +++ /dev/null @@ -1,278 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [tms320c64x_const.py] - -TMS320C64X_OP_INVALID = 0 -TMS320C64X_OP_REG = 1 -TMS320C64X_OP_IMM = 2 -TMS320C64X_OP_MEM = 3 -TMS320C64X_OP_REGPAIR = 64 - -TMS320C64X_MEM_DISP_INVALID = 0 -TMS320C64X_MEM_DISP_CONSTANT = 1 -TMS320C64X_MEM_DISP_REGISTER = 2 - -TMS320C64X_MEM_DIR_INVALID = 0 -TMS320C64X_MEM_DIR_FW = 1 -TMS320C64X_MEM_DIR_BW = 2 - -TMS320C64X_MEM_MOD_INVALID = 0 -TMS320C64X_MEM_MOD_NO = 1 -TMS320C64X_MEM_MOD_PRE = 2 -TMS320C64X_MEM_MOD_POST = 3 - -TMS320C64X_REG_INVALID = 0 -TMS320C64X_REG_AMR = 1 -TMS320C64X_REG_CSR = 2 -TMS320C64X_REG_DIER = 3 -TMS320C64X_REG_DNUM = 4 -TMS320C64X_REG_ECR = 5 -TMS320C64X_REG_GFPGFR = 6 -TMS320C64X_REG_GPLYA = 7 -TMS320C64X_REG_GPLYB = 8 -TMS320C64X_REG_ICR = 9 -TMS320C64X_REG_IER = 10 -TMS320C64X_REG_IERR = 11 -TMS320C64X_REG_ILC = 12 -TMS320C64X_REG_IRP = 13 -TMS320C64X_REG_ISR = 14 -TMS320C64X_REG_ISTP = 15 -TMS320C64X_REG_ITSR = 16 -TMS320C64X_REG_NRP = 17 -TMS320C64X_REG_NTSR = 18 -TMS320C64X_REG_REP = 19 -TMS320C64X_REG_RILC = 20 -TMS320C64X_REG_SSR = 21 -TMS320C64X_REG_TSCH = 22 -TMS320C64X_REG_TSCL = 23 -TMS320C64X_REG_TSR = 24 -TMS320C64X_REG_A0 = 25 -TMS320C64X_REG_A1 = 26 -TMS320C64X_REG_A2 = 27 -TMS320C64X_REG_A3 = 28 -TMS320C64X_REG_A4 = 29 -TMS320C64X_REG_A5 = 30 -TMS320C64X_REG_A6 = 31 -TMS320C64X_REG_A7 = 32 -TMS320C64X_REG_A8 = 33 -TMS320C64X_REG_A9 = 34 -TMS320C64X_REG_A10 = 35 -TMS320C64X_REG_A11 = 36 -TMS320C64X_REG_A12 = 37 -TMS320C64X_REG_A13 = 38 -TMS320C64X_REG_A14 = 39 -TMS320C64X_REG_A15 = 40 -TMS320C64X_REG_A16 = 41 -TMS320C64X_REG_A17 = 42 -TMS320C64X_REG_A18 = 43 -TMS320C64X_REG_A19 = 44 -TMS320C64X_REG_A20 = 45 -TMS320C64X_REG_A21 = 46 -TMS320C64X_REG_A22 = 47 -TMS320C64X_REG_A23 = 48 -TMS320C64X_REG_A24 = 49 -TMS320C64X_REG_A25 = 50 -TMS320C64X_REG_A26 = 51 -TMS320C64X_REG_A27 = 52 -TMS320C64X_REG_A28 = 53 -TMS320C64X_REG_A29 = 54 -TMS320C64X_REG_A30 = 55 -TMS320C64X_REG_A31 = 56 -TMS320C64X_REG_B0 = 57 -TMS320C64X_REG_B1 = 58 -TMS320C64X_REG_B2 = 59 -TMS320C64X_REG_B3 = 60 -TMS320C64X_REG_B4 = 61 -TMS320C64X_REG_B5 = 62 -TMS320C64X_REG_B6 = 63 -TMS320C64X_REG_B7 = 64 -TMS320C64X_REG_B8 = 65 -TMS320C64X_REG_B9 = 66 -TMS320C64X_REG_B10 = 67 -TMS320C64X_REG_B11 = 68 -TMS320C64X_REG_B12 = 69 -TMS320C64X_REG_B13 = 70 -TMS320C64X_REG_B14 = 71 -TMS320C64X_REG_B15 = 72 -TMS320C64X_REG_B16 = 73 -TMS320C64X_REG_B17 = 74 -TMS320C64X_REG_B18 = 75 -TMS320C64X_REG_B19 = 76 -TMS320C64X_REG_B20 = 77 -TMS320C64X_REG_B21 = 78 -TMS320C64X_REG_B22 = 79 -TMS320C64X_REG_B23 = 80 -TMS320C64X_REG_B24 = 81 -TMS320C64X_REG_B25 = 82 -TMS320C64X_REG_B26 = 83 -TMS320C64X_REG_B27 = 84 -TMS320C64X_REG_B28 = 85 -TMS320C64X_REG_B29 = 86 -TMS320C64X_REG_B30 = 87 -TMS320C64X_REG_B31 = 88 -TMS320C64X_REG_PCE1 = 89 -TMS320C64X_REG_ENDING = 90 -TMS320C64X_REG_EFR = TMS320C64X_REG_ECR -TMS320C64X_REG_IFR = TMS320C64X_REG_ISR - -TMS320C64X_INS_INVALID = 0 -TMS320C64X_INS_ABS = 1 -TMS320C64X_INS_ABS2 = 2 -TMS320C64X_INS_ADD = 3 -TMS320C64X_INS_ADD2 = 4 -TMS320C64X_INS_ADD4 = 5 -TMS320C64X_INS_ADDAB = 6 -TMS320C64X_INS_ADDAD = 7 -TMS320C64X_INS_ADDAH = 8 -TMS320C64X_INS_ADDAW = 9 -TMS320C64X_INS_ADDK = 10 -TMS320C64X_INS_ADDKPC = 11 -TMS320C64X_INS_ADDU = 12 -TMS320C64X_INS_AND = 13 -TMS320C64X_INS_ANDN = 14 -TMS320C64X_INS_AVG2 = 15 -TMS320C64X_INS_AVGU4 = 16 -TMS320C64X_INS_B = 17 -TMS320C64X_INS_BDEC = 18 -TMS320C64X_INS_BITC4 = 19 -TMS320C64X_INS_BNOP = 20 -TMS320C64X_INS_BPOS = 21 -TMS320C64X_INS_CLR = 22 -TMS320C64X_INS_CMPEQ = 23 -TMS320C64X_INS_CMPEQ2 = 24 -TMS320C64X_INS_CMPEQ4 = 25 -TMS320C64X_INS_CMPGT = 26 -TMS320C64X_INS_CMPGT2 = 27 -TMS320C64X_INS_CMPGTU4 = 28 -TMS320C64X_INS_CMPLT = 29 -TMS320C64X_INS_CMPLTU = 30 -TMS320C64X_INS_DEAL = 31 -TMS320C64X_INS_DOTP2 = 32 -TMS320C64X_INS_DOTPN2 = 33 -TMS320C64X_INS_DOTPNRSU2 = 34 -TMS320C64X_INS_DOTPRSU2 = 35 -TMS320C64X_INS_DOTPSU4 = 36 -TMS320C64X_INS_DOTPU4 = 37 -TMS320C64X_INS_EXT = 38 -TMS320C64X_INS_EXTU = 39 -TMS320C64X_INS_GMPGTU = 40 -TMS320C64X_INS_GMPY4 = 41 -TMS320C64X_INS_LDB = 42 -TMS320C64X_INS_LDBU = 43 -TMS320C64X_INS_LDDW = 44 -TMS320C64X_INS_LDH = 45 -TMS320C64X_INS_LDHU = 46 -TMS320C64X_INS_LDNDW = 47 -TMS320C64X_INS_LDNW = 48 -TMS320C64X_INS_LDW = 49 -TMS320C64X_INS_LMBD = 50 -TMS320C64X_INS_MAX2 = 51 -TMS320C64X_INS_MAXU4 = 52 -TMS320C64X_INS_MIN2 = 53 -TMS320C64X_INS_MINU4 = 54 -TMS320C64X_INS_MPY = 55 -TMS320C64X_INS_MPY2 = 56 -TMS320C64X_INS_MPYH = 57 -TMS320C64X_INS_MPYHI = 58 -TMS320C64X_INS_MPYHIR = 59 -TMS320C64X_INS_MPYHL = 60 -TMS320C64X_INS_MPYHLU = 61 -TMS320C64X_INS_MPYHSLU = 62 -TMS320C64X_INS_MPYHSU = 63 -TMS320C64X_INS_MPYHU = 64 -TMS320C64X_INS_MPYHULS = 65 -TMS320C64X_INS_MPYHUS = 66 -TMS320C64X_INS_MPYLH = 67 -TMS320C64X_INS_MPYLHU = 68 -TMS320C64X_INS_MPYLI = 69 -TMS320C64X_INS_MPYLIR = 70 -TMS320C64X_INS_MPYLSHU = 71 -TMS320C64X_INS_MPYLUHS = 72 -TMS320C64X_INS_MPYSU = 73 -TMS320C64X_INS_MPYSU4 = 74 -TMS320C64X_INS_MPYU = 75 -TMS320C64X_INS_MPYU4 = 76 -TMS320C64X_INS_MPYUS = 77 -TMS320C64X_INS_MVC = 78 -TMS320C64X_INS_MVD = 79 -TMS320C64X_INS_MVK = 80 -TMS320C64X_INS_MVKL = 81 -TMS320C64X_INS_MVKLH = 82 -TMS320C64X_INS_NOP = 83 -TMS320C64X_INS_NORM = 84 -TMS320C64X_INS_OR = 85 -TMS320C64X_INS_PACK2 = 86 -TMS320C64X_INS_PACKH2 = 87 -TMS320C64X_INS_PACKH4 = 88 -TMS320C64X_INS_PACKHL2 = 89 -TMS320C64X_INS_PACKL4 = 90 -TMS320C64X_INS_PACKLH2 = 91 -TMS320C64X_INS_ROTL = 92 -TMS320C64X_INS_SADD = 93 -TMS320C64X_INS_SADD2 = 94 -TMS320C64X_INS_SADDU4 = 95 -TMS320C64X_INS_SADDUS2 = 96 -TMS320C64X_INS_SAT = 97 -TMS320C64X_INS_SET = 98 -TMS320C64X_INS_SHFL = 99 -TMS320C64X_INS_SHL = 100 -TMS320C64X_INS_SHLMB = 101 -TMS320C64X_INS_SHR = 102 -TMS320C64X_INS_SHR2 = 103 -TMS320C64X_INS_SHRMB = 104 -TMS320C64X_INS_SHRU = 105 -TMS320C64X_INS_SHRU2 = 106 -TMS320C64X_INS_SMPY = 107 -TMS320C64X_INS_SMPY2 = 108 -TMS320C64X_INS_SMPYH = 109 -TMS320C64X_INS_SMPYHL = 110 -TMS320C64X_INS_SMPYLH = 111 -TMS320C64X_INS_SPACK2 = 112 -TMS320C64X_INS_SPACKU4 = 113 -TMS320C64X_INS_SSHL = 114 -TMS320C64X_INS_SSHVL = 115 -TMS320C64X_INS_SSHVR = 116 -TMS320C64X_INS_SSUB = 117 -TMS320C64X_INS_STB = 118 -TMS320C64X_INS_STDW = 119 -TMS320C64X_INS_STH = 120 -TMS320C64X_INS_STNDW = 121 -TMS320C64X_INS_STNW = 122 -TMS320C64X_INS_STW = 123 -TMS320C64X_INS_SUB = 124 -TMS320C64X_INS_SUB2 = 125 -TMS320C64X_INS_SUB4 = 126 -TMS320C64X_INS_SUBAB = 127 -TMS320C64X_INS_SUBABS4 = 128 -TMS320C64X_INS_SUBAH = 129 -TMS320C64X_INS_SUBAW = 130 -TMS320C64X_INS_SUBC = 131 -TMS320C64X_INS_SUBU = 132 -TMS320C64X_INS_SWAP4 = 133 -TMS320C64X_INS_UNPKHU4 = 134 -TMS320C64X_INS_UNPKLU4 = 135 -TMS320C64X_INS_XOR = 136 -TMS320C64X_INS_XPND2 = 137 -TMS320C64X_INS_XPND4 = 138 -TMS320C64X_INS_IDLE = 139 -TMS320C64X_INS_MV = 140 -TMS320C64X_INS_NEG = 141 -TMS320C64X_INS_NOT = 142 -TMS320C64X_INS_SWAP2 = 143 -TMS320C64X_INS_ZERO = 144 -TMS320C64X_INS_ENDING = 145 - -TMS320C64X_GRP_INVALID = 0 -TMS320C64X_GRP_JUMP = 1 -TMS320C64X_GRP_FUNIT_D = 128 -TMS320C64X_GRP_FUNIT_L = 129 -TMS320C64X_GRP_FUNIT_M = 130 -TMS320C64X_GRP_FUNIT_S = 131 -TMS320C64X_GRP_FUNIT_NO = 132 -TMS320C64X_GRP_ENDING = 133 - -TMS320C64X_FUNIT_INVALID = 0 -TMS320C64X_FUNIT_D = 1 -TMS320C64X_FUNIT_L = 2 -TMS320C64X_FUNIT_M = 3 -TMS320C64X_FUNIT_S = 4 -TMS320C64X_FUNIT_NO = 5 diff --git a/.tools/python-revlibs/capstone/tricore.py b/.tools/python-revlibs/capstone/tricore.py deleted file mode 100644 index 9a48a9f..0000000 --- a/.tools/python-revlibs/capstone/tricore.py +++ /dev/null @@ -1,51 +0,0 @@ -# Capstone Python bindings, by billow - -import ctypes -from . import copy_ctypes_list -from .tricore_const import * - -class TriCoreOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint8), - ('disp', ctypes.c_int32), - ) - - -class TriCoreOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int32), - ('mem', TriCoreOpMem), - ) - - -class TriCoreOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', TriCoreOpValue), - ('access', ctypes.c_uint8) - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -# Instruction structure -class CsTriCore(ctypes.Structure): - _fields_ = ( - ('op_count', ctypes.c_uint8), - ('operands', TriCoreOp * 8), - ('update_flags', ctypes.c_bool), - ) - -def get_arch_info(a): - return (a.update_flags, copy_ctypes_list(a.operands[:a.op_count])) diff --git a/.tools/python-revlibs/capstone/tricore_const.py b/.tools/python-revlibs/capstone/tricore_const.py deleted file mode 100644 index 258a2cd..0000000 --- a/.tools/python-revlibs/capstone/tricore_const.py +++ /dev/null @@ -1,479 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [tricore_const.py] -TRICORE_OP_INVALID = CS_OP_INVALID -TRICORE_OP_REG = CS_OP_REG -TRICORE_OP_IMM = CS_OP_IMM -TRICORE_OP_MEM = CS_OP_MEM -TRICORE_OP_COUNT = 8 - -TRICORE_REG_INVALID = 0 -TRICORE_REG_FCX = 1 -TRICORE_REG_PC = 2 -TRICORE_REG_PCXI = 3 -TRICORE_REG_PSW = 4 -TRICORE_REG_A0 = 5 -TRICORE_REG_A1 = 6 -TRICORE_REG_A2 = 7 -TRICORE_REG_A3 = 8 -TRICORE_REG_A4 = 9 -TRICORE_REG_A5 = 10 -TRICORE_REG_A6 = 11 -TRICORE_REG_A7 = 12 -TRICORE_REG_A8 = 13 -TRICORE_REG_A9 = 14 -TRICORE_REG_A10 = 15 -TRICORE_REG_A11 = 16 -TRICORE_REG_A12 = 17 -TRICORE_REG_A13 = 18 -TRICORE_REG_A14 = 19 -TRICORE_REG_A15 = 20 -TRICORE_REG_D0 = 21 -TRICORE_REG_D1 = 22 -TRICORE_REG_D2 = 23 -TRICORE_REG_D3 = 24 -TRICORE_REG_D4 = 25 -TRICORE_REG_D5 = 26 -TRICORE_REG_D6 = 27 -TRICORE_REG_D7 = 28 -TRICORE_REG_D8 = 29 -TRICORE_REG_D9 = 30 -TRICORE_REG_D10 = 31 -TRICORE_REG_D11 = 32 -TRICORE_REG_D12 = 33 -TRICORE_REG_D13 = 34 -TRICORE_REG_D14 = 35 -TRICORE_REG_D15 = 36 -TRICORE_REG_E0 = 37 -TRICORE_REG_E2 = 38 -TRICORE_REG_E4 = 39 -TRICORE_REG_E6 = 40 -TRICORE_REG_E8 = 41 -TRICORE_REG_E10 = 42 -TRICORE_REG_E12 = 43 -TRICORE_REG_E14 = 44 -TRICORE_REG_P0 = 45 -TRICORE_REG_P2 = 46 -TRICORE_REG_P4 = 47 -TRICORE_REG_P6 = 48 -TRICORE_REG_P8 = 49 -TRICORE_REG_P10 = 50 -TRICORE_REG_P12 = 51 -TRICORE_REG_P14 = 52 -TRICORE_REG_A0_A1 = 53 -TRICORE_REG_A2_A3 = 54 -TRICORE_REG_A4_A5 = 55 -TRICORE_REG_A6_A7 = 56 -TRICORE_REG_A8_A9 = 57 -TRICORE_REG_A10_A11 = 58 -TRICORE_REG_A12_A13 = 59 -TRICORE_REG_A14_A15 = 60 -TRICORE_REG_ENDING = 61 - -TRICORE_INS_INVALID = 0 -TRICORE_INS_XOR_T = 1 -TRICORE_INS_ABSDIFS_B = 2 -TRICORE_INS_ABSDIFS_H = 3 -TRICORE_INS_ABSDIFS = 4 -TRICORE_INS_ABSDIF_B = 5 -TRICORE_INS_ABSDIF_H = 6 -TRICORE_INS_ABSDIF = 7 -TRICORE_INS_ABSS_B = 8 -TRICORE_INS_ABSS_H = 9 -TRICORE_INS_ABSS = 10 -TRICORE_INS_ABS_B = 11 -TRICORE_INS_ABS_H = 12 -TRICORE_INS_ABS = 13 -TRICORE_INS_ADDC = 14 -TRICORE_INS_ADDIH_A = 15 -TRICORE_INS_ADDIH = 16 -TRICORE_INS_ADDI = 17 -TRICORE_INS_ADDSC_AT = 18 -TRICORE_INS_ADDSC_A = 19 -TRICORE_INS_ADDS_BU = 20 -TRICORE_INS_ADDS_B = 21 -TRICORE_INS_ADDS_H = 22 -TRICORE_INS_ADDS_HU = 23 -TRICORE_INS_ADDS_U = 24 -TRICORE_INS_ADDS = 25 -TRICORE_INS_ADDX = 26 -TRICORE_INS_ADD_A = 27 -TRICORE_INS_ADD_B = 28 -TRICORE_INS_ADD_F = 29 -TRICORE_INS_ADD_H = 30 -TRICORE_INS_ADD = 31 -TRICORE_INS_ANDN_T = 32 -TRICORE_INS_ANDN = 33 -TRICORE_INS_AND_ANDN_T = 34 -TRICORE_INS_AND_AND_T = 35 -TRICORE_INS_AND_EQ = 36 -TRICORE_INS_AND_GE_U = 37 -TRICORE_INS_AND_GE = 38 -TRICORE_INS_AND_LT_U = 39 -TRICORE_INS_AND_LT = 40 -TRICORE_INS_AND_NE = 41 -TRICORE_INS_AND_NOR_T = 42 -TRICORE_INS_AND_OR_T = 43 -TRICORE_INS_AND_T = 44 -TRICORE_INS_AND = 45 -TRICORE_INS_BISR = 46 -TRICORE_INS_BMERGE = 47 -TRICORE_INS_BSPLIT = 48 -TRICORE_INS_CACHEA_I = 49 -TRICORE_INS_CACHEA_WI = 50 -TRICORE_INS_CACHEA_W = 51 -TRICORE_INS_CACHEI_I = 52 -TRICORE_INS_CACHEI_WI = 53 -TRICORE_INS_CACHEI_W = 54 -TRICORE_INS_CADDN_A = 55 -TRICORE_INS_CADDN = 56 -TRICORE_INS_CADD_A = 57 -TRICORE_INS_CADD = 58 -TRICORE_INS_CALLA = 59 -TRICORE_INS_CALLI = 60 -TRICORE_INS_CALL = 61 -TRICORE_INS_CLO_B = 62 -TRICORE_INS_CLO_H = 63 -TRICORE_INS_CLO = 64 -TRICORE_INS_CLS_B = 65 -TRICORE_INS_CLS_H = 66 -TRICORE_INS_CLS = 67 -TRICORE_INS_CLZ_B = 68 -TRICORE_INS_CLZ_H = 69 -TRICORE_INS_CLZ = 70 -TRICORE_INS_CMOVN = 71 -TRICORE_INS_CMOV = 72 -TRICORE_INS_CMPSWAP_W = 73 -TRICORE_INS_CMP_F = 74 -TRICORE_INS_CRC32B_W = 75 -TRICORE_INS_CRC32L_W = 76 -TRICORE_INS_CRC32_B = 77 -TRICORE_INS_CRCN = 78 -TRICORE_INS_CSUBN_A = 79 -TRICORE_INS_CSUBN = 80 -TRICORE_INS_CSUB_A = 81 -TRICORE_INS_CSUB = 82 -TRICORE_INS_DEBUG = 83 -TRICORE_INS_DEXTR = 84 -TRICORE_INS_DIFSC_A = 85 -TRICORE_INS_DISABLE = 86 -TRICORE_INS_DIV_F = 87 -TRICORE_INS_DIV_U = 88 -TRICORE_INS_DIV = 89 -TRICORE_INS_DSYNC = 90 -TRICORE_INS_DVADJ = 91 -TRICORE_INS_DVINIT_BU = 92 -TRICORE_INS_DVINIT_B = 93 -TRICORE_INS_DVINIT_HU = 94 -TRICORE_INS_DVINIT_H = 95 -TRICORE_INS_DVINIT_U = 96 -TRICORE_INS_DVINIT = 97 -TRICORE_INS_DVSTEP_U = 98 -TRICORE_INS_DVSTEP = 99 -TRICORE_INS_ENABLE = 100 -TRICORE_INS_EQANY_B = 101 -TRICORE_INS_EQANY_H = 102 -TRICORE_INS_EQZ_A = 103 -TRICORE_INS_EQ_A = 104 -TRICORE_INS_EQ_B = 105 -TRICORE_INS_EQ_H = 106 -TRICORE_INS_EQ_W = 107 -TRICORE_INS_EQ = 108 -TRICORE_INS_EXTR_U = 109 -TRICORE_INS_EXTR = 110 -TRICORE_INS_FCALLA = 111 -TRICORE_INS_FCALLI = 112 -TRICORE_INS_FCALL = 113 -TRICORE_INS_FRET = 114 -TRICORE_INS_FTOHP = 115 -TRICORE_INS_FTOIZ = 116 -TRICORE_INS_FTOI = 117 -TRICORE_INS_FTOQ31Z = 118 -TRICORE_INS_FTOQ31 = 119 -TRICORE_INS_FTOUZ = 120 -TRICORE_INS_FTOU = 121 -TRICORE_INS_GE_A = 122 -TRICORE_INS_GE_U = 123 -TRICORE_INS_GE = 124 -TRICORE_INS_HPTOF = 125 -TRICORE_INS_IMASK = 126 -TRICORE_INS_INSERT = 127 -TRICORE_INS_INSN_T = 128 -TRICORE_INS_INS_T = 129 -TRICORE_INS_ISYNC = 130 -TRICORE_INS_ITOF = 131 -TRICORE_INS_IXMAX_U = 132 -TRICORE_INS_IXMAX = 133 -TRICORE_INS_IXMIN_U = 134 -TRICORE_INS_IXMIN = 135 -TRICORE_INS_JA = 136 -TRICORE_INS_JEQ_A = 137 -TRICORE_INS_JEQ = 138 -TRICORE_INS_JGEZ = 139 -TRICORE_INS_JGE_U = 140 -TRICORE_INS_JGE = 141 -TRICORE_INS_JGTZ = 142 -TRICORE_INS_JI = 143 -TRICORE_INS_JLA = 144 -TRICORE_INS_JLEZ = 145 -TRICORE_INS_JLI = 146 -TRICORE_INS_JLTZ = 147 -TRICORE_INS_JLT_U = 148 -TRICORE_INS_JLT = 149 -TRICORE_INS_JL = 150 -TRICORE_INS_JNED = 151 -TRICORE_INS_JNEI = 152 -TRICORE_INS_JNE_A = 153 -TRICORE_INS_JNE = 154 -TRICORE_INS_JNZ_A = 155 -TRICORE_INS_JNZ_T = 156 -TRICORE_INS_JNZ = 157 -TRICORE_INS_JZ_A = 158 -TRICORE_INS_JZ_T = 159 -TRICORE_INS_JZ = 160 -TRICORE_INS_J = 161 -TRICORE_INS_LDLCX = 162 -TRICORE_INS_LDMST = 163 -TRICORE_INS_LDUCX = 164 -TRICORE_INS_LD_A = 165 -TRICORE_INS_LD_BU = 166 -TRICORE_INS_LD_B = 167 -TRICORE_INS_LD_DA = 168 -TRICORE_INS_LD_D = 169 -TRICORE_INS_LD_HU = 170 -TRICORE_INS_LD_H = 171 -TRICORE_INS_LD_Q = 172 -TRICORE_INS_LD_W = 173 -TRICORE_INS_LEA = 174 -TRICORE_INS_LHA = 175 -TRICORE_INS_LOOPU = 176 -TRICORE_INS_LOOP = 177 -TRICORE_INS_LT_A = 178 -TRICORE_INS_LT_B = 179 -TRICORE_INS_LT_BU = 180 -TRICORE_INS_LT_H = 181 -TRICORE_INS_LT_HU = 182 -TRICORE_INS_LT_U = 183 -TRICORE_INS_LT_W = 184 -TRICORE_INS_LT_WU = 185 -TRICORE_INS_LT = 186 -TRICORE_INS_MADDMS_H = 187 -TRICORE_INS_MADDMS_U = 188 -TRICORE_INS_MADDMS = 189 -TRICORE_INS_MADDM_H = 190 -TRICORE_INS_MADDM_Q = 191 -TRICORE_INS_MADDM_U = 192 -TRICORE_INS_MADDM = 193 -TRICORE_INS_MADDRS_H = 194 -TRICORE_INS_MADDRS_Q = 195 -TRICORE_INS_MADDR_H = 196 -TRICORE_INS_MADDR_Q = 197 -TRICORE_INS_MADDSUMS_H = 198 -TRICORE_INS_MADDSUM_H = 199 -TRICORE_INS_MADDSURS_H = 200 -TRICORE_INS_MADDSUR_H = 201 -TRICORE_INS_MADDSUS_H = 202 -TRICORE_INS_MADDSU_H = 203 -TRICORE_INS_MADDS_H = 204 -TRICORE_INS_MADDS_Q = 205 -TRICORE_INS_MADDS_U = 206 -TRICORE_INS_MADDS = 207 -TRICORE_INS_MADD_F = 208 -TRICORE_INS_MADD_H = 209 -TRICORE_INS_MADD_Q = 210 -TRICORE_INS_MADD_U = 211 -TRICORE_INS_MADD = 212 -TRICORE_INS_MAX_B = 213 -TRICORE_INS_MAX_BU = 214 -TRICORE_INS_MAX_H = 215 -TRICORE_INS_MAX_HU = 216 -TRICORE_INS_MAX_U = 217 -TRICORE_INS_MAX = 218 -TRICORE_INS_MFCR = 219 -TRICORE_INS_MIN_B = 220 -TRICORE_INS_MIN_BU = 221 -TRICORE_INS_MIN_H = 222 -TRICORE_INS_MIN_HU = 223 -TRICORE_INS_MIN_U = 224 -TRICORE_INS_MIN = 225 -TRICORE_INS_MOVH_A = 226 -TRICORE_INS_MOVH = 227 -TRICORE_INS_MOVZ_A = 228 -TRICORE_INS_MOV_AA = 229 -TRICORE_INS_MOV_A = 230 -TRICORE_INS_MOV_D = 231 -TRICORE_INS_MOV_U = 232 -TRICORE_INS_MOV = 233 -TRICORE_INS_MSUBADMS_H = 234 -TRICORE_INS_MSUBADM_H = 235 -TRICORE_INS_MSUBADRS_H = 236 -TRICORE_INS_MSUBADR_H = 237 -TRICORE_INS_MSUBADS_H = 238 -TRICORE_INS_MSUBAD_H = 239 -TRICORE_INS_MSUBMS_H = 240 -TRICORE_INS_MSUBMS_U = 241 -TRICORE_INS_MSUBMS = 242 -TRICORE_INS_MSUBM_H = 243 -TRICORE_INS_MSUBM_Q = 244 -TRICORE_INS_MSUBM_U = 245 -TRICORE_INS_MSUBM = 246 -TRICORE_INS_MSUBRS_H = 247 -TRICORE_INS_MSUBRS_Q = 248 -TRICORE_INS_MSUBR_H = 249 -TRICORE_INS_MSUBR_Q = 250 -TRICORE_INS_MSUBS_H = 251 -TRICORE_INS_MSUBS_Q = 252 -TRICORE_INS_MSUBS_U = 253 -TRICORE_INS_MSUBS = 254 -TRICORE_INS_MSUB_F = 255 -TRICORE_INS_MSUB_H = 256 -TRICORE_INS_MSUB_Q = 257 -TRICORE_INS_MSUB_U = 258 -TRICORE_INS_MSUB = 259 -TRICORE_INS_MTCR = 260 -TRICORE_INS_MULMS_H = 261 -TRICORE_INS_MULM_H = 262 -TRICORE_INS_MULM_U = 263 -TRICORE_INS_MULM = 264 -TRICORE_INS_MULR_H = 265 -TRICORE_INS_MULR_Q = 266 -TRICORE_INS_MULS_U = 267 -TRICORE_INS_MULS = 268 -TRICORE_INS_MUL_F = 269 -TRICORE_INS_MUL_H = 270 -TRICORE_INS_MUL_Q = 271 -TRICORE_INS_MUL_U = 272 -TRICORE_INS_MUL = 273 -TRICORE_INS_NAND_T = 274 -TRICORE_INS_NAND = 275 -TRICORE_INS_NEZ_A = 276 -TRICORE_INS_NE_A = 277 -TRICORE_INS_NE = 278 -TRICORE_INS_NOP = 279 -TRICORE_INS_NOR_T = 280 -TRICORE_INS_NOR = 281 -TRICORE_INS_NOT = 282 -TRICORE_INS_ORN_T = 283 -TRICORE_INS_ORN = 284 -TRICORE_INS_OR_ANDN_T = 285 -TRICORE_INS_OR_AND_T = 286 -TRICORE_INS_OR_EQ = 287 -TRICORE_INS_OR_GE_U = 288 -TRICORE_INS_OR_GE = 289 -TRICORE_INS_OR_LT_U = 290 -TRICORE_INS_OR_LT = 291 -TRICORE_INS_OR_NE = 292 -TRICORE_INS_OR_NOR_T = 293 -TRICORE_INS_OR_OR_T = 294 -TRICORE_INS_OR_T = 295 -TRICORE_INS_OR = 296 -TRICORE_INS_PACK = 297 -TRICORE_INS_PARITY = 298 -TRICORE_INS_POPCNT_W = 299 -TRICORE_INS_Q31TOF = 300 -TRICORE_INS_QSEED_F = 301 -TRICORE_INS_RESTORE = 302 -TRICORE_INS_RET = 303 -TRICORE_INS_RFE = 304 -TRICORE_INS_RFM = 305 -TRICORE_INS_RSLCX = 306 -TRICORE_INS_RSTV = 307 -TRICORE_INS_RSUBS_U = 308 -TRICORE_INS_RSUBS = 309 -TRICORE_INS_RSUB = 310 -TRICORE_INS_SAT_BU = 311 -TRICORE_INS_SAT_B = 312 -TRICORE_INS_SAT_HU = 313 -TRICORE_INS_SAT_H = 314 -TRICORE_INS_SELN_A = 315 -TRICORE_INS_SELN = 316 -TRICORE_INS_SEL_A = 317 -TRICORE_INS_SEL = 318 -TRICORE_INS_SHAS = 319 -TRICORE_INS_SHA_B = 320 -TRICORE_INS_SHA_H = 321 -TRICORE_INS_SHA = 322 -TRICORE_INS_SHUFFLE = 323 -TRICORE_INS_SH_ANDN_T = 324 -TRICORE_INS_SH_AND_T = 325 -TRICORE_INS_SH_B = 326 -TRICORE_INS_SH_EQ = 327 -TRICORE_INS_SH_GE_U = 328 -TRICORE_INS_SH_GE = 329 -TRICORE_INS_SH_H = 330 -TRICORE_INS_SH_LT_U = 331 -TRICORE_INS_SH_LT = 332 -TRICORE_INS_SH_NAND_T = 333 -TRICORE_INS_SH_NE = 334 -TRICORE_INS_SH_NOR_T = 335 -TRICORE_INS_SH_ORN_T = 336 -TRICORE_INS_SH_OR_T = 337 -TRICORE_INS_SH_XNOR_T = 338 -TRICORE_INS_SH_XOR_T = 339 -TRICORE_INS_SH = 340 -TRICORE_INS_STLCX = 341 -TRICORE_INS_STUCX = 342 -TRICORE_INS_ST_A = 343 -TRICORE_INS_ST_B = 344 -TRICORE_INS_ST_DA = 345 -TRICORE_INS_ST_D = 346 -TRICORE_INS_ST_H = 347 -TRICORE_INS_ST_Q = 348 -TRICORE_INS_ST_T = 349 -TRICORE_INS_ST_W = 350 -TRICORE_INS_SUBC = 351 -TRICORE_INS_SUBSC_A = 352 -TRICORE_INS_SUBS_BU = 353 -TRICORE_INS_SUBS_B = 354 -TRICORE_INS_SUBS_HU = 355 -TRICORE_INS_SUBS_H = 356 -TRICORE_INS_SUBS_U = 357 -TRICORE_INS_SUBS = 358 -TRICORE_INS_SUBX = 359 -TRICORE_INS_SUB_A = 360 -TRICORE_INS_SUB_B = 361 -TRICORE_INS_SUB_F = 362 -TRICORE_INS_SUB_H = 363 -TRICORE_INS_SUB = 364 -TRICORE_INS_SVLCX = 365 -TRICORE_INS_SWAPMSK_W = 366 -TRICORE_INS_SWAP_A = 367 -TRICORE_INS_SWAP_W = 368 -TRICORE_INS_SYSCALL = 369 -TRICORE_INS_TLBDEMAP = 370 -TRICORE_INS_TLBFLUSH_A = 371 -TRICORE_INS_TLBFLUSH_B = 372 -TRICORE_INS_TLBMAP = 373 -TRICORE_INS_TLBPROBE_A = 374 -TRICORE_INS_TLBPROBE_I = 375 -TRICORE_INS_TRAPSV = 376 -TRICORE_INS_TRAPV = 377 -TRICORE_INS_UNPACK = 378 -TRICORE_INS_UPDFL = 379 -TRICORE_INS_UTOF = 380 -TRICORE_INS_WAIT = 381 -TRICORE_INS_XNOR_T = 382 -TRICORE_INS_XNOR = 383 -TRICORE_INS_XOR_EQ = 384 -TRICORE_INS_XOR_GE_U = 385 -TRICORE_INS_XOR_GE = 386 -TRICORE_INS_XOR_LT_U = 387 -TRICORE_INS_XOR_LT = 388 -TRICORE_INS_XOR_NE = 389 -TRICORE_INS_XOR = 390 -TRICORE_INS_ENDING = 391 -TRICORE_GRP_INVALID = 392 -TRICORE_GRP_CALL = 393 -TRICORE_GRP_JUMP = 394 -TRICORE_GRP_ENDING = 395 - -TRICORE_FEATURE_INVALID = 0 -TRICORE_FEATURE_HasV110 = 128 -TRICORE_FEATURE_HasV120_UP = 129 -TRICORE_FEATURE_HasV130_UP = 130 -TRICORE_FEATURE_HasV161 = 131 -TRICORE_FEATURE_HasV160_UP = 132 -TRICORE_FEATURE_HasV131_UP = 133 -TRICORE_FEATURE_HasV161_UP = 134 -TRICORE_FEATURE_HasV162 = 135 -TRICORE_FEATURE_HasV162_UP = 136 -TRICORE_FEATURE_ENDING = 137 diff --git a/.tools/python-revlibs/capstone/wasm.py b/.tools/python-revlibs/capstone/wasm.py deleted file mode 100644 index 23d68ca..0000000 --- a/.tools/python-revlibs/capstone/wasm.py +++ /dev/null @@ -1,71 +0,0 @@ -# Capstone Python bindings, by Peace-Maker - -import ctypes - -from . import copy_ctypes_list -from .wasm_const import * - - -# define the API -class WASMBrTable(ctypes.Structure): - _fields_ = ( - ('length', ctypes.c_uint32), - ('address', ctypes.c_uint64), - ('default_target', ctypes.c_uint32), - ) - -class WASMOpValue(ctypes.Union): - _fields_ = ( - ('int7', ctypes.c_int8), - ('varuint32', ctypes.c_uint32), - ('varuint64', ctypes.c_uint64), - ('uint32', ctypes.c_uint32), - ('uint64', ctypes.c_uint64), - ('immediate', ctypes.c_uint32 * 2), - ('brtable', WASMBrTable), - ) - -class WASMOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('size', ctypes.c_uint32), - ('value', WASMOpValue), - ) - - @property - def int7(self): - return self.value.int7 - - @property - def varuint32(self): - return self.value.varuint32 - - @property - def varuint64(self): - return self.value.varuint64 - - @property - def uint32(self): - return self.value.uint32 - - @property - def uint64(self): - return self.value.uint64 - - @property - def immediate(self): - return self.value.immediate - - @property - def brtable(self): - return self.value.brtable - -class CsWasm(ctypes.Structure): - _fields_ = ( - ('op_count', ctypes.c_uint8), - ('operands', WASMOp * 2), - ) - -def get_arch_info(a): - return (copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/wasm_const.py b/.tools/python-revlibs/capstone/wasm_const.py deleted file mode 100644 index 5ad810a..0000000 --- a/.tools/python-revlibs/capstone/wasm_const.py +++ /dev/null @@ -1,192 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [wasm_const.py] - -WASM_OP_INVALID = 0 -WASM_OP_NONE = 1 -WASM_OP_INT7 = 2 -WASM_OP_VARUINT32 = 3 -WASM_OP_VARUINT64 = 4 -WASM_OP_UINT32 = 5 -WASM_OP_UINT64 = 6 -WASM_OP_IMM = 7 -WASM_OP_BRTABLE = 8 -WASM_INS_UNREACHABLE = 0x0 -WASM_INS_NOP = 0x1 -WASM_INS_BLOCK = 0x2 -WASM_INS_LOOP = 0x3 -WASM_INS_IF = 0x4 -WASM_INS_ELSE = 0x5 -WASM_INS_END = 0xb -WASM_INS_BR = 0xc -WASM_INS_BR_IF = 0xd -WASM_INS_BR_TABLE = 0xe -WASM_INS_RETURN = 0xf -WASM_INS_CALL = 0x10 -WASM_INS_CALL_INDIRECT = 0x11 -WASM_INS_DROP = 0x1a -WASM_INS_SELECT = 0x1b -WASM_INS_GET_LOCAL = 0x20 -WASM_INS_SET_LOCAL = 0x21 -WASM_INS_TEE_LOCAL = 0x22 -WASM_INS_GET_GLOBAL = 0x23 -WASM_INS_SET_GLOBAL = 0x24 -WASM_INS_I32_LOAD = 0x28 -WASM_INS_I64_LOAD = 0x29 -WASM_INS_F32_LOAD = 0x2a -WASM_INS_F64_LOAD = 0x2b -WASM_INS_I32_LOAD8_S = 0x2c -WASM_INS_I32_LOAD8_U = 0x2d -WASM_INS_I32_LOAD16_S = 0x2e -WASM_INS_I32_LOAD16_U = 0x2f -WASM_INS_I64_LOAD8_S = 0x30 -WASM_INS_I64_LOAD8_U = 0x31 -WASM_INS_I64_LOAD16_S = 0x32 -WASM_INS_I64_LOAD16_U = 0x33 -WASM_INS_I64_LOAD32_S = 0x34 -WASM_INS_I64_LOAD32_U = 0x35 -WASM_INS_I32_STORE = 0x36 -WASM_INS_I64_STORE = 0x37 -WASM_INS_F32_STORE = 0x38 -WASM_INS_F64_STORE = 0x39 -WASM_INS_I32_STORE8 = 0x3a -WASM_INS_I32_STORE16 = 0x3b -WASM_INS_I64_STORE8 = 0x3c -WASM_INS_I64_STORE16 = 0x3d -WASM_INS_I64_STORE32 = 0x3e -WASM_INS_CURRENT_MEMORY = 0x3f -WASM_INS_GROW_MEMORY = 0x40 -WASM_INS_I32_CONST = 0x41 -WASM_INS_I64_CONST = 0x42 -WASM_INS_F32_CONST = 0x43 -WASM_INS_F64_CONST = 0x44 -WASM_INS_I32_EQZ = 0x45 -WASM_INS_I32_EQ = 0x46 -WASM_INS_I32_NE = 0x47 -WASM_INS_I32_LT_S = 0x48 -WASM_INS_I32_LT_U = 0x49 -WASM_INS_I32_GT_S = 0x4a -WASM_INS_I32_GT_U = 0x4b -WASM_INS_I32_LE_S = 0x4c -WASM_INS_I32_LE_U = 0x4d -WASM_INS_I32_GE_S = 0x4e -WASM_INS_I32_GE_U = 0x4f -WASM_INS_I64_EQZ = 0x50 -WASM_INS_I64_EQ = 0x51 -WASM_INS_I64_NE = 0x52 -WASM_INS_I64_LT_S = 0x53 -WASM_INS_I64_LT_U = 0x54 -WASM_INS_I64_GT_U = 0x56 -WASM_INS_I64_LE_S = 0x57 -WASM_INS_I64_LE_U = 0x58 -WASM_INS_I64_GE_S = 0x59 -WASM_INS_I64_GE_U = 0x5a -WASM_INS_F32_EQ = 0x5b -WASM_INS_F32_NE = 0x5c -WASM_INS_F32_LT = 0x5d -WASM_INS_F32_GT = 0x5e -WASM_INS_F32_LE = 0x5f -WASM_INS_F32_GE = 0x60 -WASM_INS_F64_EQ = 0x61 -WASM_INS_F64_NE = 0x62 -WASM_INS_F64_LT = 0x63 -WASM_INS_F64_GT = 0x64 -WASM_INS_F64_LE = 0x65 -WASM_INS_F64_GE = 0x66 -WASM_INS_I32_CLZ = 0x67 -WASM_INS_I32_CTZ = 0x68 -WASM_INS_I32_POPCNT = 0x69 -WASM_INS_I32_ADD = 0x6a -WASM_INS_I32_SUB = 0x6b -WASM_INS_I32_MUL = 0x6c -WASM_INS_I32_DIV_S = 0x6d -WASM_INS_I32_DIV_U = 0x6e -WASM_INS_I32_REM_S = 0x6f -WASM_INS_I32_REM_U = 0x70 -WASM_INS_I32_AND = 0x71 -WASM_INS_I32_OR = 0x72 -WASM_INS_I32_XOR = 0x73 -WASM_INS_I32_SHL = 0x74 -WASM_INS_I32_SHR_S = 0x75 -WASM_INS_I32_SHR_U = 0x76 -WASM_INS_I32_ROTL = 0x77 -WASM_INS_I32_ROTR = 0x78 -WASM_INS_I64_CLZ = 0x79 -WASM_INS_I64_CTZ = 0x7a -WASM_INS_I64_POPCNT = 0x7b -WASM_INS_I64_ADD = 0x7c -WASM_INS_I64_SUB = 0x7d -WASM_INS_I64_MUL = 0x7e -WASM_INS_I64_DIV_S = 0x7f -WASM_INS_I64_DIV_U = 0x80 -WASM_INS_I64_REM_S = 0x81 -WASM_INS_I64_REM_U = 0x82 -WASM_INS_I64_AND = 0x83 -WASM_INS_I64_OR = 0x84 -WASM_INS_I64_XOR = 0x85 -WASM_INS_I64_SHL = 0x86 -WASM_INS_I64_SHR_S = 0x87 -WASM_INS_I64_SHR_U = 0x88 -WASM_INS_I64_ROTL = 0x89 -WASM_INS_I64_ROTR = 0x8a -WASM_INS_F32_ABS = 0x8b -WASM_INS_F32_NEG = 0x8c -WASM_INS_F32_CEIL = 0x8d -WASM_INS_F32_FLOOR = 0x8e -WASM_INS_F32_TRUNC = 0x8f -WASM_INS_F32_NEAREST = 0x90 -WASM_INS_F32_SQRT = 0x91 -WASM_INS_F32_ADD = 0x92 -WASM_INS_F32_SUB = 0x93 -WASM_INS_F32_MUL = 0x94 -WASM_INS_F32_DIV = 0x95 -WASM_INS_F32_MIN = 0x96 -WASM_INS_F32_MAX = 0x97 -WASM_INS_F32_COPYSIGN = 0x98 -WASM_INS_F64_ABS = 0x99 -WASM_INS_F64_NEG = 0x9a -WASM_INS_F64_CEIL = 0x9b -WASM_INS_F64_FLOOR = 0x9c -WASM_INS_F64_TRUNC = 0x9d -WASM_INS_F64_NEAREST = 0x9e -WASM_INS_F64_SQRT = 0x9f -WASM_INS_F64_ADD = 0xa0 -WASM_INS_F64_SUB = 0xa1 -WASM_INS_F64_MUL = 0xa2 -WASM_INS_F64_DIV = 0xa3 -WASM_INS_F64_MIN = 0xa4 -WASM_INS_F64_MAX = 0xa5 -WASM_INS_F64_COPYSIGN = 0xa6 -WASM_INS_I32_WARP_I64 = 0xa7 -WASM_INS_I32_TRUNC_U_F32 = 0xa9 -WASM_INS_I32_TRUNC_S_F64 = 0xaa -WASM_INS_I32_TRUNC_U_F64 = 0xab -WASM_INS_I64_EXTEND_S_I32 = 0xac -WASM_INS_I64_EXTEND_U_I32 = 0xad -WASM_INS_I64_TRUNC_S_F32 = 0xae -WASM_INS_I64_TRUNC_U_F32 = 0xaf -WASM_INS_I64_TRUNC_S_F64 = 0xb0 -WASM_INS_I64_TRUNC_U_F64 = 0xb1 -WASM_INS_F32_CONVERT_S_I32 = 0xb2 -WASM_INS_F32_CONVERT_U_I32 = 0xb3 -WASM_INS_F32_CONVERT_S_I64 = 0xb4 -WASM_INS_F32_CONVERT_U_I64 = 0xb5 -WASM_INS_F32_DEMOTE_F64 = 0xb6 -WASM_INS_F64_CONVERT_S_I32 = 0xb7 -WASM_INS_F64_CONVERT_U_I32 = 0xb8 -WASM_INS_F64_CONVERT_S_I64 = 0xb9 -WASM_INS_F64_CONVERT_U_I64 = 0xba -WASM_INS_F64_PROMOTE_F32 = 0xbb -WASM_INS_I32_REINTERPRET_F32 = 0xbc -WASM_INS_I64_REINTERPRET_F64 = 0xbd -WASM_INS_F32_REINTERPRET_I32 = 0xbe -WASM_INS_F64_REINTERPRET_I64 = 0xbf -WASM_INS_INVALID = 512 -WASM_INS_ENDING = 513 - -WASM_GRP_INVALID = 0 -WASM_GRP_NUMBERIC = 8 -WASM_GRP_PARAMETRIC = 9 -WASM_GRP_VARIABLE = 10 -WASM_GRP_MEMORY = 11 -WASM_GRP_CONTROL = 12 -WASM_GRP_ENDING = 13 diff --git a/.tools/python-revlibs/capstone/x86.py b/.tools/python-revlibs/capstone/x86.py deleted file mode 100644 index caa5e35..0000000 --- a/.tools/python-revlibs/capstone/x86.py +++ /dev/null @@ -1,98 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .x86_const import * - -# define the API -class X86OpMem(ctypes.Structure): - _fields_ = ( - ('segment', ctypes.c_uint), - ('base', ctypes.c_uint), - ('index', ctypes.c_uint), - ('scale', ctypes.c_int), - ('disp', ctypes.c_int64), - ) - -class X86OpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int64), - ('mem', X86OpMem), - ) - -class X86Op(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', X86OpValue), - ('size', ctypes.c_uint8), - ('access', ctypes.c_uint8), - ('avx_bcast', ctypes.c_uint), - ('avx_zero_opmask', ctypes.c_bool), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - -class X86Flags(ctypes.Union): - _fields_ = ( - ('eflags', ctypes.c_uint64), - ('fpu_flags', ctypes.c_uint64), - ) - -class CsX86Encoding(ctypes.Structure): - _fields_ = ( - ('modrm_offset', ctypes.c_uint8), - ('disp_offset', ctypes.c_uint8), - ('disp_size', ctypes.c_uint8), - ('imm_offset', ctypes.c_uint8), - ('imm_size', ctypes.c_uint8), - ) - -class CsX86(ctypes.Structure): - _fields_ = ( - ('prefix', ctypes.c_uint8 * 4), - ('opcode', ctypes.c_uint8 * 4), - ('rex', ctypes.c_uint8), - ('addr_size', ctypes.c_uint8), - ('modrm', ctypes.c_uint8), - ('sib', ctypes.c_uint8), - ('disp', ctypes.c_int64), - ('sib_index', ctypes.c_uint), - ('sib_scale', ctypes.c_int8), - ('sib_base', ctypes.c_uint), - ('xop_cc', ctypes.c_uint), - ('sse_cc', ctypes.c_uint), - ('avx_cc', ctypes.c_uint), - ('avx_sae', ctypes.c_bool), - ('avx_rm', ctypes.c_uint), - ('flags', X86Flags), - ('op_count', ctypes.c_uint8), - ('operands', X86Op * 8), - ('encoding', CsX86Encoding), - ) - - @property - def eflags(self): - return self.flags.eflags - - @property - def fpu_flags(self): - return self.flags.fpu_flags - -def get_arch_info(a): - return (a.prefix[:], a.opcode[:], a.rex, a.addr_size, \ - a.modrm, a.sib, a.disp, a.sib_index, a.sib_scale, \ - a.sib_base, a.xop_cc, a.sse_cc, a.avx_cc, a.avx_sae, a.avx_rm, a.eflags, a.fpu_flags, \ - a.encoding, a.encoding.modrm_offset, a.encoding.disp_offset, a.encoding.disp_size, a.encoding.imm_offset, a.encoding.imm_size, \ - copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/x86_const.py b/.tools/python-revlibs/capstone/x86_const.py deleted file mode 100644 index 9b43b53..0000000 --- a/.tools/python-revlibs/capstone/x86_const.py +++ /dev/null @@ -1,1990 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [x86_const.py] - -X86_REG_INVALID = 0 -X86_REG_AH = 1 -X86_REG_AL = 2 -X86_REG_AX = 3 -X86_REG_BH = 4 -X86_REG_BL = 5 -X86_REG_BP = 6 -X86_REG_BPL = 7 -X86_REG_BX = 8 -X86_REG_CH = 9 -X86_REG_CL = 10 -X86_REG_CS = 11 -X86_REG_CX = 12 -X86_REG_DH = 13 -X86_REG_DI = 14 -X86_REG_DIL = 15 -X86_REG_DL = 16 -X86_REG_DS = 17 -X86_REG_DX = 18 -X86_REG_EAX = 19 -X86_REG_EBP = 20 -X86_REG_EBX = 21 -X86_REG_ECX = 22 -X86_REG_EDI = 23 -X86_REG_EDX = 24 -X86_REG_EFLAGS = 25 -X86_REG_EIP = 26 -X86_REG_EIZ = 27 -X86_REG_ES = 28 -X86_REG_ESI = 29 -X86_REG_ESP = 30 -X86_REG_FPSW = 31 -X86_REG_FS = 32 -X86_REG_GS = 33 -X86_REG_IP = 34 -X86_REG_RAX = 35 -X86_REG_RBP = 36 -X86_REG_RBX = 37 -X86_REG_RCX = 38 -X86_REG_RDI = 39 -X86_REG_RDX = 40 -X86_REG_RIP = 41 -X86_REG_RIZ = 42 -X86_REG_RSI = 43 -X86_REG_RSP = 44 -X86_REG_SI = 45 -X86_REG_SIL = 46 -X86_REG_SP = 47 -X86_REG_SPL = 48 -X86_REG_SS = 49 -X86_REG_CR0 = 50 -X86_REG_CR1 = 51 -X86_REG_CR2 = 52 -X86_REG_CR3 = 53 -X86_REG_CR4 = 54 -X86_REG_CR5 = 55 -X86_REG_CR6 = 56 -X86_REG_CR7 = 57 -X86_REG_CR8 = 58 -X86_REG_CR9 = 59 -X86_REG_CR10 = 60 -X86_REG_CR11 = 61 -X86_REG_CR12 = 62 -X86_REG_CR13 = 63 -X86_REG_CR14 = 64 -X86_REG_CR15 = 65 -X86_REG_DR0 = 66 -X86_REG_DR1 = 67 -X86_REG_DR2 = 68 -X86_REG_DR3 = 69 -X86_REG_DR4 = 70 -X86_REG_DR5 = 71 -X86_REG_DR6 = 72 -X86_REG_DR7 = 73 -X86_REG_DR8 = 74 -X86_REG_DR9 = 75 -X86_REG_DR10 = 76 -X86_REG_DR11 = 77 -X86_REG_DR12 = 78 -X86_REG_DR13 = 79 -X86_REG_DR14 = 80 -X86_REG_DR15 = 81 -X86_REG_FP0 = 82 -X86_REG_FP1 = 83 -X86_REG_FP2 = 84 -X86_REG_FP3 = 85 -X86_REG_FP4 = 86 -X86_REG_FP5 = 87 -X86_REG_FP6 = 88 -X86_REG_FP7 = 89 -X86_REG_K0 = 90 -X86_REG_K1 = 91 -X86_REG_K2 = 92 -X86_REG_K3 = 93 -X86_REG_K4 = 94 -X86_REG_K5 = 95 -X86_REG_K6 = 96 -X86_REG_K7 = 97 -X86_REG_MM0 = 98 -X86_REG_MM1 = 99 -X86_REG_MM2 = 100 -X86_REG_MM3 = 101 -X86_REG_MM4 = 102 -X86_REG_MM5 = 103 -X86_REG_MM6 = 104 -X86_REG_MM7 = 105 -X86_REG_R8 = 106 -X86_REG_R9 = 107 -X86_REG_R10 = 108 -X86_REG_R11 = 109 -X86_REG_R12 = 110 -X86_REG_R13 = 111 -X86_REG_R14 = 112 -X86_REG_R15 = 113 -X86_REG_ST0 = 114 -X86_REG_ST1 = 115 -X86_REG_ST2 = 116 -X86_REG_ST3 = 117 -X86_REG_ST4 = 118 -X86_REG_ST5 = 119 -X86_REG_ST6 = 120 -X86_REG_ST7 = 121 -X86_REG_XMM0 = 122 -X86_REG_XMM1 = 123 -X86_REG_XMM2 = 124 -X86_REG_XMM3 = 125 -X86_REG_XMM4 = 126 -X86_REG_XMM5 = 127 -X86_REG_XMM6 = 128 -X86_REG_XMM7 = 129 -X86_REG_XMM8 = 130 -X86_REG_XMM9 = 131 -X86_REG_XMM10 = 132 -X86_REG_XMM11 = 133 -X86_REG_XMM12 = 134 -X86_REG_XMM13 = 135 -X86_REG_XMM14 = 136 -X86_REG_XMM15 = 137 -X86_REG_XMM16 = 138 -X86_REG_XMM17 = 139 -X86_REG_XMM18 = 140 -X86_REG_XMM19 = 141 -X86_REG_XMM20 = 142 -X86_REG_XMM21 = 143 -X86_REG_XMM22 = 144 -X86_REG_XMM23 = 145 -X86_REG_XMM24 = 146 -X86_REG_XMM25 = 147 -X86_REG_XMM26 = 148 -X86_REG_XMM27 = 149 -X86_REG_XMM28 = 150 -X86_REG_XMM29 = 151 -X86_REG_XMM30 = 152 -X86_REG_XMM31 = 153 -X86_REG_YMM0 = 154 -X86_REG_YMM1 = 155 -X86_REG_YMM2 = 156 -X86_REG_YMM3 = 157 -X86_REG_YMM4 = 158 -X86_REG_YMM5 = 159 -X86_REG_YMM6 = 160 -X86_REG_YMM7 = 161 -X86_REG_YMM8 = 162 -X86_REG_YMM9 = 163 -X86_REG_YMM10 = 164 -X86_REG_YMM11 = 165 -X86_REG_YMM12 = 166 -X86_REG_YMM13 = 167 -X86_REG_YMM14 = 168 -X86_REG_YMM15 = 169 -X86_REG_YMM16 = 170 -X86_REG_YMM17 = 171 -X86_REG_YMM18 = 172 -X86_REG_YMM19 = 173 -X86_REG_YMM20 = 174 -X86_REG_YMM21 = 175 -X86_REG_YMM22 = 176 -X86_REG_YMM23 = 177 -X86_REG_YMM24 = 178 -X86_REG_YMM25 = 179 -X86_REG_YMM26 = 180 -X86_REG_YMM27 = 181 -X86_REG_YMM28 = 182 -X86_REG_YMM29 = 183 -X86_REG_YMM30 = 184 -X86_REG_YMM31 = 185 -X86_REG_ZMM0 = 186 -X86_REG_ZMM1 = 187 -X86_REG_ZMM2 = 188 -X86_REG_ZMM3 = 189 -X86_REG_ZMM4 = 190 -X86_REG_ZMM5 = 191 -X86_REG_ZMM6 = 192 -X86_REG_ZMM7 = 193 -X86_REG_ZMM8 = 194 -X86_REG_ZMM9 = 195 -X86_REG_ZMM10 = 196 -X86_REG_ZMM11 = 197 -X86_REG_ZMM12 = 198 -X86_REG_ZMM13 = 199 -X86_REG_ZMM14 = 200 -X86_REG_ZMM15 = 201 -X86_REG_ZMM16 = 202 -X86_REG_ZMM17 = 203 -X86_REG_ZMM18 = 204 -X86_REG_ZMM19 = 205 -X86_REG_ZMM20 = 206 -X86_REG_ZMM21 = 207 -X86_REG_ZMM22 = 208 -X86_REG_ZMM23 = 209 -X86_REG_ZMM24 = 210 -X86_REG_ZMM25 = 211 -X86_REG_ZMM26 = 212 -X86_REG_ZMM27 = 213 -X86_REG_ZMM28 = 214 -X86_REG_ZMM29 = 215 -X86_REG_ZMM30 = 216 -X86_REG_ZMM31 = 217 -X86_REG_R8B = 218 -X86_REG_R9B = 219 -X86_REG_R10B = 220 -X86_REG_R11B = 221 -X86_REG_R12B = 222 -X86_REG_R13B = 223 -X86_REG_R14B = 224 -X86_REG_R15B = 225 -X86_REG_R8D = 226 -X86_REG_R9D = 227 -X86_REG_R10D = 228 -X86_REG_R11D = 229 -X86_REG_R12D = 230 -X86_REG_R13D = 231 -X86_REG_R14D = 232 -X86_REG_R15D = 233 -X86_REG_R8W = 234 -X86_REG_R9W = 235 -X86_REG_R10W = 236 -X86_REG_R11W = 237 -X86_REG_R12W = 238 -X86_REG_R13W = 239 -X86_REG_R14W = 240 -X86_REG_R15W = 241 -X86_REG_BND0 = 242 -X86_REG_BND1 = 243 -X86_REG_BND2 = 244 -X86_REG_BND3 = 245 -X86_REG_ENDING = 246 -X86_EFLAGS_MODIFY_AF = 1<<0 -X86_EFLAGS_MODIFY_CF = 1<<1 -X86_EFLAGS_MODIFY_SF = 1<<2 -X86_EFLAGS_MODIFY_ZF = 1<<3 -X86_EFLAGS_MODIFY_PF = 1<<4 -X86_EFLAGS_MODIFY_OF = 1<<5 -X86_EFLAGS_MODIFY_TF = 1<<6 -X86_EFLAGS_MODIFY_IF = 1<<7 -X86_EFLAGS_MODIFY_DF = 1<<8 -X86_EFLAGS_MODIFY_NT = 1<<9 -X86_EFLAGS_MODIFY_RF = 1<<10 -X86_EFLAGS_PRIOR_OF = 1<<11 -X86_EFLAGS_PRIOR_SF = 1<<12 -X86_EFLAGS_PRIOR_ZF = 1<<13 -X86_EFLAGS_PRIOR_AF = 1<<14 -X86_EFLAGS_PRIOR_PF = 1<<15 -X86_EFLAGS_PRIOR_CF = 1<<16 -X86_EFLAGS_PRIOR_TF = 1<<17 -X86_EFLAGS_PRIOR_IF = 1<<18 -X86_EFLAGS_PRIOR_DF = 1<<19 -X86_EFLAGS_PRIOR_NT = 1<<20 -X86_EFLAGS_RESET_OF = 1<<21 -X86_EFLAGS_RESET_CF = 1<<22 -X86_EFLAGS_RESET_DF = 1<<23 -X86_EFLAGS_RESET_IF = 1<<24 -X86_EFLAGS_RESET_SF = 1<<25 -X86_EFLAGS_RESET_AF = 1<<26 -X86_EFLAGS_RESET_TF = 1<<27 -X86_EFLAGS_RESET_NT = 1<<28 -X86_EFLAGS_RESET_PF = 1<<29 -X86_EFLAGS_SET_CF = 1<<30 -X86_EFLAGS_SET_DF = 1<<31 -X86_EFLAGS_SET_IF = 1<<32 -X86_EFLAGS_TEST_OF = 1<<33 -X86_EFLAGS_TEST_SF = 1<<34 -X86_EFLAGS_TEST_ZF = 1<<35 -X86_EFLAGS_TEST_PF = 1<<36 -X86_EFLAGS_TEST_CF = 1<<37 -X86_EFLAGS_TEST_NT = 1<<38 -X86_EFLAGS_TEST_DF = 1<<39 -X86_EFLAGS_UNDEFINED_OF = 1<<40 -X86_EFLAGS_UNDEFINED_SF = 1<<41 -X86_EFLAGS_UNDEFINED_ZF = 1<<42 -X86_EFLAGS_UNDEFINED_PF = 1<<43 -X86_EFLAGS_UNDEFINED_AF = 1<<44 -X86_EFLAGS_UNDEFINED_CF = 1<<45 -X86_EFLAGS_RESET_RF = 1<<46 -X86_EFLAGS_TEST_RF = 1<<47 -X86_EFLAGS_TEST_IF = 1<<48 -X86_EFLAGS_TEST_TF = 1<<49 -X86_EFLAGS_TEST_AF = 1<<50 -X86_EFLAGS_RESET_ZF = 1<<51 -X86_EFLAGS_SET_OF = 1<<52 -X86_EFLAGS_SET_SF = 1<<53 -X86_EFLAGS_SET_ZF = 1<<54 -X86_EFLAGS_SET_AF = 1<<55 -X86_EFLAGS_SET_PF = 1<<56 -X86_EFLAGS_RESET_0F = 1<<57 -X86_EFLAGS_RESET_AC = 1<<58 -X86_FPU_FLAGS_MODIFY_C0 = 1<<0 -X86_FPU_FLAGS_MODIFY_C1 = 1<<1 -X86_FPU_FLAGS_MODIFY_C2 = 1<<2 -X86_FPU_FLAGS_MODIFY_C3 = 1<<3 -X86_FPU_FLAGS_RESET_C0 = 1<<4 -X86_FPU_FLAGS_RESET_C1 = 1<<5 -X86_FPU_FLAGS_RESET_C2 = 1<<6 -X86_FPU_FLAGS_RESET_C3 = 1<<7 -X86_FPU_FLAGS_SET_C0 = 1<<8 -X86_FPU_FLAGS_SET_C1 = 1<<9 -X86_FPU_FLAGS_SET_C2 = 1<<10 -X86_FPU_FLAGS_SET_C3 = 1<<11 -X86_FPU_FLAGS_UNDEFINED_C0 = 1<<12 -X86_FPU_FLAGS_UNDEFINED_C1 = 1<<13 -X86_FPU_FLAGS_UNDEFINED_C2 = 1<<14 -X86_FPU_FLAGS_UNDEFINED_C3 = 1<<15 -X86_FPU_FLAGS_TEST_C0 = 1<<16 -X86_FPU_FLAGS_TEST_C1 = 1<<17 -X86_FPU_FLAGS_TEST_C2 = 1<<18 -X86_FPU_FLAGS_TEST_C3 = 1<<19 - -X86_OP_INVALID = 0 -X86_OP_REG = 1 -X86_OP_IMM = 2 -X86_OP_MEM = 3 - -X86_XOP_CC_INVALID = 0 -X86_XOP_CC_LT = 1 -X86_XOP_CC_LE = 2 -X86_XOP_CC_GT = 3 -X86_XOP_CC_GE = 4 -X86_XOP_CC_EQ = 5 -X86_XOP_CC_NEQ = 6 -X86_XOP_CC_FALSE = 7 -X86_XOP_CC_TRUE = 8 - -X86_AVX_BCAST_INVALID = 0 -X86_AVX_BCAST_2 = 1 -X86_AVX_BCAST_4 = 2 -X86_AVX_BCAST_8 = 3 -X86_AVX_BCAST_16 = 4 - -X86_SSE_CC_INVALID = 0 -X86_SSE_CC_EQ = 1 -X86_SSE_CC_LT = 2 -X86_SSE_CC_LE = 3 -X86_SSE_CC_UNORD = 4 -X86_SSE_CC_NEQ = 5 -X86_SSE_CC_NLT = 6 -X86_SSE_CC_NLE = 7 -X86_SSE_CC_ORD = 8 - -X86_AVX_CC_INVALID = 0 -X86_AVX_CC_EQ = 1 -X86_AVX_CC_LT = 2 -X86_AVX_CC_LE = 3 -X86_AVX_CC_UNORD = 4 -X86_AVX_CC_NEQ = 5 -X86_AVX_CC_NLT = 6 -X86_AVX_CC_NLE = 7 -X86_AVX_CC_ORD = 8 -X86_AVX_CC_EQ_UQ = 9 -X86_AVX_CC_NGE = 10 -X86_AVX_CC_NGT = 11 -X86_AVX_CC_FALSE = 12 -X86_AVX_CC_NEQ_OQ = 13 -X86_AVX_CC_GE = 14 -X86_AVX_CC_GT = 15 -X86_AVX_CC_TRUE = 16 -X86_AVX_CC_EQ_OS = 17 -X86_AVX_CC_LT_OQ = 18 -X86_AVX_CC_LE_OQ = 19 -X86_AVX_CC_UNORD_S = 20 -X86_AVX_CC_NEQ_US = 21 -X86_AVX_CC_NLT_UQ = 22 -X86_AVX_CC_NLE_UQ = 23 -X86_AVX_CC_ORD_S = 24 -X86_AVX_CC_EQ_US = 25 -X86_AVX_CC_NGE_UQ = 26 -X86_AVX_CC_NGT_UQ = 27 -X86_AVX_CC_FALSE_OS = 28 -X86_AVX_CC_NEQ_OS = 29 -X86_AVX_CC_GE_OQ = 30 -X86_AVX_CC_GT_OQ = 31 -X86_AVX_CC_TRUE_US = 32 - -X86_AVX_RM_INVALID = 0 -X86_AVX_RM_RN = 1 -X86_AVX_RM_RD = 2 -X86_AVX_RM_RU = 3 -X86_AVX_RM_RZ = 4 -X86_PREFIX_LOCK = 0xf0 -X86_PREFIX_REP = 0xf3 -X86_PREFIX_REPE = 0xf3 -X86_PREFIX_REPNE = 0xf2 -X86_PREFIX_CS = 0x2e -X86_PREFIX_SS = 0x36 -X86_PREFIX_DS = 0x3e -X86_PREFIX_ES = 0x26 -X86_PREFIX_FS = 0x64 -X86_PREFIX_GS = 0x65 -X86_PREFIX_OPSIZE = 0x66 -X86_PREFIX_ADDRSIZE = 0x67 - -X86_INS_INVALID = 0 -X86_INS_AAA = 1 -X86_INS_AAD = 2 -X86_INS_AAM = 3 -X86_INS_AAS = 4 -X86_INS_FABS = 5 -X86_INS_ADC = 6 -X86_INS_ADCX = 7 -X86_INS_ADD = 8 -X86_INS_ADDPD = 9 -X86_INS_ADDPS = 10 -X86_INS_ADDSD = 11 -X86_INS_ADDSS = 12 -X86_INS_ADDSUBPD = 13 -X86_INS_ADDSUBPS = 14 -X86_INS_FADD = 15 -X86_INS_FIADD = 16 -X86_INS_ADOX = 17 -X86_INS_AESDECLAST = 18 -X86_INS_AESDEC = 19 -X86_INS_AESENCLAST = 20 -X86_INS_AESENC = 21 -X86_INS_AESIMC = 22 -X86_INS_AESKEYGENASSIST = 23 -X86_INS_AND = 24 -X86_INS_ANDN = 25 -X86_INS_ANDNPD = 26 -X86_INS_ANDNPS = 27 -X86_INS_ANDPD = 28 -X86_INS_ANDPS = 29 -X86_INS_ARPL = 30 -X86_INS_BEXTR = 31 -X86_INS_BLCFILL = 32 -X86_INS_BLCI = 33 -X86_INS_BLCIC = 34 -X86_INS_BLCMSK = 35 -X86_INS_BLCS = 36 -X86_INS_BLENDPD = 37 -X86_INS_BLENDPS = 38 -X86_INS_BLENDVPD = 39 -X86_INS_BLENDVPS = 40 -X86_INS_BLSFILL = 41 -X86_INS_BLSI = 42 -X86_INS_BLSIC = 43 -X86_INS_BLSMSK = 44 -X86_INS_BLSR = 45 -X86_INS_BNDCL = 46 -X86_INS_BNDCN = 47 -X86_INS_BNDCU = 48 -X86_INS_BNDLDX = 49 -X86_INS_BNDMK = 50 -X86_INS_BNDMOV = 51 -X86_INS_BNDSTX = 52 -X86_INS_BOUND = 53 -X86_INS_BSF = 54 -X86_INS_BSR = 55 -X86_INS_BSWAP = 56 -X86_INS_BT = 57 -X86_INS_BTC = 58 -X86_INS_BTR = 59 -X86_INS_BTS = 60 -X86_INS_BZHI = 61 -X86_INS_CALL = 62 -X86_INS_CBW = 63 -X86_INS_CDQ = 64 -X86_INS_CDQE = 65 -X86_INS_FCHS = 66 -X86_INS_CLAC = 67 -X86_INS_CLC = 68 -X86_INS_CLD = 69 -X86_INS_CLDEMOTE = 70 -X86_INS_CLFLUSH = 71 -X86_INS_CLFLUSHOPT = 72 -X86_INS_CLGI = 73 -X86_INS_CLI = 74 -X86_INS_CLRSSBSY = 75 -X86_INS_CLTS = 76 -X86_INS_CLWB = 77 -X86_INS_CLZERO = 78 -X86_INS_CMC = 79 -X86_INS_CMOVA = 80 -X86_INS_CMOVAE = 81 -X86_INS_CMOVB = 82 -X86_INS_CMOVBE = 83 -X86_INS_FCMOVBE = 84 -X86_INS_FCMOVB = 85 -X86_INS_CMOVE = 86 -X86_INS_FCMOVE = 87 -X86_INS_CMOVG = 88 -X86_INS_CMOVGE = 89 -X86_INS_CMOVL = 90 -X86_INS_CMOVLE = 91 -X86_INS_FCMOVNBE = 92 -X86_INS_FCMOVNB = 93 -X86_INS_CMOVNE = 94 -X86_INS_FCMOVNE = 95 -X86_INS_CMOVNO = 96 -X86_INS_CMOVNP = 97 -X86_INS_FCMOVNU = 98 -X86_INS_FCMOVNP = 99 -X86_INS_CMOVNS = 100 -X86_INS_CMOVO = 101 -X86_INS_CMOVP = 102 -X86_INS_FCMOVU = 103 -X86_INS_CMOVS = 104 -X86_INS_CMP = 105 -X86_INS_CMPPD = 106 -X86_INS_CMPPS = 107 -X86_INS_CMPSB = 108 -X86_INS_CMPSD = 109 -X86_INS_CMPSQ = 110 -X86_INS_CMPSS = 111 -X86_INS_CMPSW = 112 -X86_INS_CMPXCHG16B = 113 -X86_INS_CMPXCHG = 114 -X86_INS_CMPXCHG8B = 115 -X86_INS_COMISD = 116 -X86_INS_COMISS = 117 -X86_INS_FCOMP = 118 -X86_INS_FCOMPI = 119 -X86_INS_FCOMI = 120 -X86_INS_FCOM = 121 -X86_INS_FCOS = 122 -X86_INS_CPUID = 123 -X86_INS_CQO = 124 -X86_INS_CRC32 = 125 -X86_INS_CVTDQ2PD = 126 -X86_INS_CVTDQ2PS = 127 -X86_INS_CVTPD2DQ = 128 -X86_INS_CVTPD2PS = 129 -X86_INS_CVTPS2DQ = 130 -X86_INS_CVTPS2PD = 131 -X86_INS_CVTSD2SI = 132 -X86_INS_CVTSD2SS = 133 -X86_INS_CVTSI2SD = 134 -X86_INS_CVTSI2SS = 135 -X86_INS_CVTSS2SD = 136 -X86_INS_CVTSS2SI = 137 -X86_INS_CVTTPD2DQ = 138 -X86_INS_CVTTPS2DQ = 139 -X86_INS_CVTTSD2SI = 140 -X86_INS_CVTTSS2SI = 141 -X86_INS_CWD = 142 -X86_INS_CWDE = 143 -X86_INS_DAA = 144 -X86_INS_DAS = 145 -X86_INS_DATA16 = 146 -X86_INS_DEC = 147 -X86_INS_DIV = 148 -X86_INS_DIVPD = 149 -X86_INS_DIVPS = 150 -X86_INS_FDIVR = 151 -X86_INS_FIDIVR = 152 -X86_INS_FDIVRP = 153 -X86_INS_DIVSD = 154 -X86_INS_DIVSS = 155 -X86_INS_FDIV = 156 -X86_INS_FIDIV = 157 -X86_INS_FDIVP = 158 -X86_INS_DPPD = 159 -X86_INS_DPPS = 160 -X86_INS_ENCLS = 161 -X86_INS_ENCLU = 162 -X86_INS_ENCLV = 163 -X86_INS_ENDBR32 = 164 -X86_INS_ENDBR64 = 165 -X86_INS_ENTER = 166 -X86_INS_EXTRACTPS = 167 -X86_INS_EXTRQ = 168 -X86_INS_F2XM1 = 169 -X86_INS_LCALL = 170 -X86_INS_LJMP = 171 -X86_INS_JMP = 172 -X86_INS_FBLD = 173 -X86_INS_FBSTP = 174 -X86_INS_FCOMPP = 175 -X86_INS_FDECSTP = 176 -X86_INS_FDISI8087_NOP = 177 -X86_INS_FEMMS = 178 -X86_INS_FENI8087_NOP = 179 -X86_INS_FFREE = 180 -X86_INS_FFREEP = 181 -X86_INS_FICOM = 182 -X86_INS_FICOMP = 183 -X86_INS_FINCSTP = 184 -X86_INS_FLDCW = 185 -X86_INS_FLDENV = 186 -X86_INS_FLDL2E = 187 -X86_INS_FLDL2T = 188 -X86_INS_FLDLG2 = 189 -X86_INS_FLDLN2 = 190 -X86_INS_FLDPI = 191 -X86_INS_FNCLEX = 192 -X86_INS_FNINIT = 193 -X86_INS_FNOP = 194 -X86_INS_FNSTCW = 195 -X86_INS_FNSTSW = 196 -X86_INS_FPATAN = 197 -X86_INS_FSTPNCE = 198 -X86_INS_FPREM = 199 -X86_INS_FPREM1 = 200 -X86_INS_FPTAN = 201 -X86_INS_FRNDINT = 202 -X86_INS_FRSTOR = 203 -X86_INS_FNSAVE = 204 -X86_INS_FSCALE = 205 -X86_INS_FSETPM = 206 -X86_INS_FSINCOS = 207 -X86_INS_FNSTENV = 208 -X86_INS_FXAM = 209 -X86_INS_FXRSTOR = 210 -X86_INS_FXRSTOR64 = 211 -X86_INS_FXSAVE = 212 -X86_INS_FXSAVE64 = 213 -X86_INS_FXTRACT = 214 -X86_INS_FYL2X = 215 -X86_INS_FYL2XP1 = 216 -X86_INS_GETSEC = 217 -X86_INS_GF2P8AFFINEINVQB = 218 -X86_INS_GF2P8AFFINEQB = 219 -X86_INS_GF2P8MULB = 220 -X86_INS_HADDPD = 221 -X86_INS_HADDPS = 222 -X86_INS_HLT = 223 -X86_INS_HSUBPD = 224 -X86_INS_HSUBPS = 225 -X86_INS_IDIV = 226 -X86_INS_FILD = 227 -X86_INS_IMUL = 228 -X86_INS_IN = 229 -X86_INS_INC = 230 -X86_INS_INCSSPD = 231 -X86_INS_INCSSPQ = 232 -X86_INS_INSB = 233 -X86_INS_INSERTPS = 234 -X86_INS_INSERTQ = 235 -X86_INS_INSD = 236 -X86_INS_INSW = 237 -X86_INS_INT = 238 -X86_INS_INT1 = 239 -X86_INS_INT3 = 240 -X86_INS_INTO = 241 -X86_INS_INVD = 242 -X86_INS_INVEPT = 243 -X86_INS_INVLPG = 244 -X86_INS_INVLPGA = 245 -X86_INS_INVPCID = 246 -X86_INS_INVVPID = 247 -X86_INS_IRET = 248 -X86_INS_IRETD = 249 -X86_INS_IRETQ = 250 -X86_INS_FISTTP = 251 -X86_INS_FIST = 252 -X86_INS_FISTP = 253 -X86_INS_JAE = 254 -X86_INS_JA = 255 -X86_INS_JBE = 256 -X86_INS_JB = 257 -X86_INS_JCXZ = 258 -X86_INS_JECXZ = 259 -X86_INS_JE = 260 -X86_INS_JGE = 261 -X86_INS_JG = 262 -X86_INS_JLE = 263 -X86_INS_JL = 264 -X86_INS_JNE = 265 -X86_INS_JNO = 266 -X86_INS_JNP = 267 -X86_INS_JNS = 268 -X86_INS_JO = 269 -X86_INS_JP = 270 -X86_INS_JRCXZ = 271 -X86_INS_JS = 272 -X86_INS_KADDB = 273 -X86_INS_KADDD = 274 -X86_INS_KADDQ = 275 -X86_INS_KADDW = 276 -X86_INS_KANDB = 277 -X86_INS_KANDD = 278 -X86_INS_KANDNB = 279 -X86_INS_KANDND = 280 -X86_INS_KANDNQ = 281 -X86_INS_KANDNW = 282 -X86_INS_KANDQ = 283 -X86_INS_KANDW = 284 -X86_INS_KMOVB = 285 -X86_INS_KMOVD = 286 -X86_INS_KMOVQ = 287 -X86_INS_KMOVW = 288 -X86_INS_KNOTB = 289 -X86_INS_KNOTD = 290 -X86_INS_KNOTQ = 291 -X86_INS_KNOTW = 292 -X86_INS_KORB = 293 -X86_INS_KORD = 294 -X86_INS_KORQ = 295 -X86_INS_KORTESTB = 296 -X86_INS_KORTESTD = 297 -X86_INS_KORTESTQ = 298 -X86_INS_KORTESTW = 299 -X86_INS_KORW = 300 -X86_INS_KSHIFTLB = 301 -X86_INS_KSHIFTLD = 302 -X86_INS_KSHIFTLQ = 303 -X86_INS_KSHIFTLW = 304 -X86_INS_KSHIFTRB = 305 -X86_INS_KSHIFTRD = 306 -X86_INS_KSHIFTRQ = 307 -X86_INS_KSHIFTRW = 308 -X86_INS_KTESTB = 309 -X86_INS_KTESTD = 310 -X86_INS_KTESTQ = 311 -X86_INS_KTESTW = 312 -X86_INS_KUNPCKBW = 313 -X86_INS_KUNPCKDQ = 314 -X86_INS_KUNPCKWD = 315 -X86_INS_KXNORB = 316 -X86_INS_KXNORD = 317 -X86_INS_KXNORQ = 318 -X86_INS_KXNORW = 319 -X86_INS_KXORB = 320 -X86_INS_KXORD = 321 -X86_INS_KXORQ = 322 -X86_INS_KXORW = 323 -X86_INS_LAHF = 324 -X86_INS_LAR = 325 -X86_INS_LDDQU = 326 -X86_INS_LDMXCSR = 327 -X86_INS_LDS = 328 -X86_INS_FLDZ = 329 -X86_INS_FLD1 = 330 -X86_INS_FLD = 331 -X86_INS_LEA = 332 -X86_INS_LEAVE = 333 -X86_INS_LES = 334 -X86_INS_LFENCE = 335 -X86_INS_LFS = 336 -X86_INS_LGDT = 337 -X86_INS_LGS = 338 -X86_INS_LIDT = 339 -X86_INS_LLDT = 340 -X86_INS_LLWPCB = 341 -X86_INS_LMSW = 342 -X86_INS_LOCK = 343 -X86_INS_LODSB = 344 -X86_INS_LODSD = 345 -X86_INS_LODSQ = 346 -X86_INS_LODSW = 347 -X86_INS_LOOP = 348 -X86_INS_LOOPE = 349 -X86_INS_LOOPNE = 350 -X86_INS_RETF = 351 -X86_INS_RETFQ = 352 -X86_INS_LSL = 353 -X86_INS_LSS = 354 -X86_INS_LTR = 355 -X86_INS_LWPINS = 356 -X86_INS_LWPVAL = 357 -X86_INS_LZCNT = 358 -X86_INS_MASKMOVDQU = 359 -X86_INS_MAXPD = 360 -X86_INS_MAXPS = 361 -X86_INS_MAXSD = 362 -X86_INS_MAXSS = 363 -X86_INS_MFENCE = 364 -X86_INS_MINPD = 365 -X86_INS_MINPS = 366 -X86_INS_MINSD = 367 -X86_INS_MINSS = 368 -X86_INS_CVTPD2PI = 369 -X86_INS_CVTPI2PD = 370 -X86_INS_CVTPI2PS = 371 -X86_INS_CVTPS2PI = 372 -X86_INS_CVTTPD2PI = 373 -X86_INS_CVTTPS2PI = 374 -X86_INS_EMMS = 375 -X86_INS_MASKMOVQ = 376 -X86_INS_MOVD = 377 -X86_INS_MOVQ = 378 -X86_INS_MOVDQ2Q = 379 -X86_INS_MOVNTQ = 380 -X86_INS_MOVQ2DQ = 381 -X86_INS_PABSB = 382 -X86_INS_PABSD = 383 -X86_INS_PABSW = 384 -X86_INS_PACKSSDW = 385 -X86_INS_PACKSSWB = 386 -X86_INS_PACKUSWB = 387 -X86_INS_PADDB = 388 -X86_INS_PADDD = 389 -X86_INS_PADDQ = 390 -X86_INS_PADDSB = 391 -X86_INS_PADDSW = 392 -X86_INS_PADDUSB = 393 -X86_INS_PADDUSW = 394 -X86_INS_PADDW = 395 -X86_INS_PALIGNR = 396 -X86_INS_PANDN = 397 -X86_INS_PAND = 398 -X86_INS_PAVGB = 399 -X86_INS_PAVGW = 400 -X86_INS_PCMPEQB = 401 -X86_INS_PCMPEQD = 402 -X86_INS_PCMPEQW = 403 -X86_INS_PCMPGTB = 404 -X86_INS_PCMPGTD = 405 -X86_INS_PCMPGTW = 406 -X86_INS_PEXTRW = 407 -X86_INS_PHADDD = 408 -X86_INS_PHADDSW = 409 -X86_INS_PHADDW = 410 -X86_INS_PHSUBD = 411 -X86_INS_PHSUBSW = 412 -X86_INS_PHSUBW = 413 -X86_INS_PINSRW = 414 -X86_INS_PMADDUBSW = 415 -X86_INS_PMADDWD = 416 -X86_INS_PMAXSW = 417 -X86_INS_PMAXUB = 418 -X86_INS_PMINSW = 419 -X86_INS_PMINUB = 420 -X86_INS_PMOVMSKB = 421 -X86_INS_PMULHRSW = 422 -X86_INS_PMULHUW = 423 -X86_INS_PMULHW = 424 -X86_INS_PMULLW = 425 -X86_INS_PMULUDQ = 426 -X86_INS_POR = 427 -X86_INS_PSADBW = 428 -X86_INS_PSHUFB = 429 -X86_INS_PSHUFW = 430 -X86_INS_PSIGNB = 431 -X86_INS_PSIGND = 432 -X86_INS_PSIGNW = 433 -X86_INS_PSLLD = 434 -X86_INS_PSLLQ = 435 -X86_INS_PSLLW = 436 -X86_INS_PSRAD = 437 -X86_INS_PSRAW = 438 -X86_INS_PSRLD = 439 -X86_INS_PSRLQ = 440 -X86_INS_PSRLW = 441 -X86_INS_PSUBB = 442 -X86_INS_PSUBD = 443 -X86_INS_PSUBQ = 444 -X86_INS_PSUBSB = 445 -X86_INS_PSUBSW = 446 -X86_INS_PSUBUSB = 447 -X86_INS_PSUBUSW = 448 -X86_INS_PSUBW = 449 -X86_INS_PUNPCKHBW = 450 -X86_INS_PUNPCKHDQ = 451 -X86_INS_PUNPCKHWD = 452 -X86_INS_PUNPCKLBW = 453 -X86_INS_PUNPCKLDQ = 454 -X86_INS_PUNPCKLWD = 455 -X86_INS_PXOR = 456 -X86_INS_MONITORX = 457 -X86_INS_MONITOR = 458 -X86_INS_MONTMUL = 459 -X86_INS_MOV = 460 -X86_INS_MOVABS = 461 -X86_INS_MOVAPD = 462 -X86_INS_MOVAPS = 463 -X86_INS_MOVBE = 464 -X86_INS_MOVDDUP = 465 -X86_INS_MOVDIR64B = 466 -X86_INS_MOVDIRI = 467 -X86_INS_MOVDQA = 468 -X86_INS_MOVDQU = 469 -X86_INS_MOVHLPS = 470 -X86_INS_MOVHPD = 471 -X86_INS_MOVHPS = 472 -X86_INS_MOVLHPS = 473 -X86_INS_MOVLPD = 474 -X86_INS_MOVLPS = 475 -X86_INS_MOVMSKPD = 476 -X86_INS_MOVMSKPS = 477 -X86_INS_MOVNTDQA = 478 -X86_INS_MOVNTDQ = 479 -X86_INS_MOVNTI = 480 -X86_INS_MOVNTPD = 481 -X86_INS_MOVNTPS = 482 -X86_INS_MOVNTSD = 483 -X86_INS_MOVNTSS = 484 -X86_INS_MOVSB = 485 -X86_INS_MOVSD = 486 -X86_INS_MOVSHDUP = 487 -X86_INS_MOVSLDUP = 488 -X86_INS_MOVSQ = 489 -X86_INS_MOVSS = 490 -X86_INS_MOVSW = 491 -X86_INS_MOVSX = 492 -X86_INS_MOVSXD = 493 -X86_INS_MOVUPD = 494 -X86_INS_MOVUPS = 495 -X86_INS_MOVZX = 496 -X86_INS_MPSADBW = 497 -X86_INS_MUL = 498 -X86_INS_MULPD = 499 -X86_INS_MULPS = 500 -X86_INS_MULSD = 501 -X86_INS_MULSS = 502 -X86_INS_MULX = 503 -X86_INS_FMUL = 504 -X86_INS_FIMUL = 505 -X86_INS_FMULP = 506 -X86_INS_MWAITX = 507 -X86_INS_MWAIT = 508 -X86_INS_NEG = 509 -X86_INS_NOP = 510 -X86_INS_NOT = 511 -X86_INS_OR = 512 -X86_INS_ORPD = 513 -X86_INS_ORPS = 514 -X86_INS_OUT = 515 -X86_INS_OUTSB = 516 -X86_INS_OUTSD = 517 -X86_INS_OUTSW = 518 -X86_INS_PACKUSDW = 519 -X86_INS_PAUSE = 520 -X86_INS_PAVGUSB = 521 -X86_INS_PBLENDVB = 522 -X86_INS_PBLENDW = 523 -X86_INS_PCLMULQDQ = 524 -X86_INS_PCMPEQQ = 525 -X86_INS_PCMPESTRI = 526 -X86_INS_PCMPESTRM = 527 -X86_INS_PCMPGTQ = 528 -X86_INS_PCMPISTRI = 529 -X86_INS_PCMPISTRM = 530 -X86_INS_PCONFIG = 531 -X86_INS_PDEP = 532 -X86_INS_PEXT = 533 -X86_INS_PEXTRB = 534 -X86_INS_PEXTRD = 535 -X86_INS_PEXTRQ = 536 -X86_INS_PF2ID = 537 -X86_INS_PF2IW = 538 -X86_INS_PFACC = 539 -X86_INS_PFADD = 540 -X86_INS_PFCMPEQ = 541 -X86_INS_PFCMPGE = 542 -X86_INS_PFCMPGT = 543 -X86_INS_PFMAX = 544 -X86_INS_PFMIN = 545 -X86_INS_PFMUL = 546 -X86_INS_PFNACC = 547 -X86_INS_PFPNACC = 548 -X86_INS_PFRCPIT1 = 549 -X86_INS_PFRCPIT2 = 550 -X86_INS_PFRCP = 551 -X86_INS_PFRSQIT1 = 552 -X86_INS_PFRSQRT = 553 -X86_INS_PFSUBR = 554 -X86_INS_PFSUB = 555 -X86_INS_PHMINPOSUW = 556 -X86_INS_PI2FD = 557 -X86_INS_PI2FW = 558 -X86_INS_PINSRB = 559 -X86_INS_PINSRD = 560 -X86_INS_PINSRQ = 561 -X86_INS_PMAXSB = 562 -X86_INS_PMAXSD = 563 -X86_INS_PMAXUD = 564 -X86_INS_PMAXUW = 565 -X86_INS_PMINSB = 566 -X86_INS_PMINSD = 567 -X86_INS_PMINUD = 568 -X86_INS_PMINUW = 569 -X86_INS_PMOVSXBD = 570 -X86_INS_PMOVSXBQ = 571 -X86_INS_PMOVSXBW = 572 -X86_INS_PMOVSXDQ = 573 -X86_INS_PMOVSXWD = 574 -X86_INS_PMOVSXWQ = 575 -X86_INS_PMOVZXBD = 576 -X86_INS_PMOVZXBQ = 577 -X86_INS_PMOVZXBW = 578 -X86_INS_PMOVZXDQ = 579 -X86_INS_PMOVZXWD = 580 -X86_INS_PMOVZXWQ = 581 -X86_INS_PMULDQ = 582 -X86_INS_PMULHRW = 583 -X86_INS_PMULLD = 584 -X86_INS_POP = 585 -X86_INS_POPAW = 586 -X86_INS_POPAL = 587 -X86_INS_POPCNT = 588 -X86_INS_POPF = 589 -X86_INS_POPFD = 590 -X86_INS_POPFQ = 591 -X86_INS_PREFETCH = 592 -X86_INS_PREFETCHNTA = 593 -X86_INS_PREFETCHT0 = 594 -X86_INS_PREFETCHT1 = 595 -X86_INS_PREFETCHT2 = 596 -X86_INS_PREFETCHW = 597 -X86_INS_PREFETCHWT1 = 598 -X86_INS_PSHUFD = 599 -X86_INS_PSHUFHW = 600 -X86_INS_PSHUFLW = 601 -X86_INS_PSLLDQ = 602 -X86_INS_PSRLDQ = 603 -X86_INS_PSWAPD = 604 -X86_INS_PTEST = 605 -X86_INS_PTWRITE = 606 -X86_INS_PUNPCKHQDQ = 607 -X86_INS_PUNPCKLQDQ = 608 -X86_INS_PUSH = 609 -X86_INS_PUSHAW = 610 -X86_INS_PUSHAL = 611 -X86_INS_PUSHF = 612 -X86_INS_PUSHFD = 613 -X86_INS_PUSHFQ = 614 -X86_INS_RCL = 615 -X86_INS_RCPPS = 616 -X86_INS_RCPSS = 617 -X86_INS_RCR = 618 -X86_INS_RDFSBASE = 619 -X86_INS_RDGSBASE = 620 -X86_INS_RDMSR = 621 -X86_INS_RDPID = 622 -X86_INS_RDPKRU = 623 -X86_INS_RDPMC = 624 -X86_INS_RDRAND = 625 -X86_INS_RDSEED = 626 -X86_INS_RDSSPD = 627 -X86_INS_RDSSPQ = 628 -X86_INS_RDTSC = 629 -X86_INS_RDTSCP = 630 -X86_INS_REPNE = 631 -X86_INS_REP = 632 -X86_INS_RET = 633 -X86_INS_REX64 = 634 -X86_INS_ROL = 635 -X86_INS_ROR = 636 -X86_INS_RORX = 637 -X86_INS_ROUNDPD = 638 -X86_INS_ROUNDPS = 639 -X86_INS_ROUNDSD = 640 -X86_INS_ROUNDSS = 641 -X86_INS_RSM = 642 -X86_INS_RSQRTPS = 643 -X86_INS_RSQRTSS = 644 -X86_INS_RSTORSSP = 645 -X86_INS_SAHF = 646 -X86_INS_SAL = 647 -X86_INS_SALC = 648 -X86_INS_SAR = 649 -X86_INS_SARX = 650 -X86_INS_SAVEPREVSSP = 651 -X86_INS_SBB = 652 -X86_INS_SCASB = 653 -X86_INS_SCASD = 654 -X86_INS_SCASQ = 655 -X86_INS_SCASW = 656 -X86_INS_SETAE = 657 -X86_INS_SETA = 658 -X86_INS_SETBE = 659 -X86_INS_SETB = 660 -X86_INS_SETE = 661 -X86_INS_SETGE = 662 -X86_INS_SETG = 663 -X86_INS_SETLE = 664 -X86_INS_SETL = 665 -X86_INS_SETNE = 666 -X86_INS_SETNO = 667 -X86_INS_SETNP = 668 -X86_INS_SETNS = 669 -X86_INS_SETO = 670 -X86_INS_SETP = 671 -X86_INS_SETSSBSY = 672 -X86_INS_SETS = 673 -X86_INS_SFENCE = 674 -X86_INS_SGDT = 675 -X86_INS_SHA1MSG1 = 676 -X86_INS_SHA1MSG2 = 677 -X86_INS_SHA1NEXTE = 678 -X86_INS_SHA1RNDS4 = 679 -X86_INS_SHA256MSG1 = 680 -X86_INS_SHA256MSG2 = 681 -X86_INS_SHA256RNDS2 = 682 -X86_INS_SHL = 683 -X86_INS_SHLD = 684 -X86_INS_SHLX = 685 -X86_INS_SHR = 686 -X86_INS_SHRD = 687 -X86_INS_SHRX = 688 -X86_INS_SHUFPD = 689 -X86_INS_SHUFPS = 690 -X86_INS_SIDT = 691 -X86_INS_FSIN = 692 -X86_INS_SKINIT = 693 -X86_INS_SLDT = 694 -X86_INS_SLWPCB = 695 -X86_INS_SMSW = 696 -X86_INS_SQRTPD = 697 -X86_INS_SQRTPS = 698 -X86_INS_SQRTSD = 699 -X86_INS_SQRTSS = 700 -X86_INS_FSQRT = 701 -X86_INS_STAC = 702 -X86_INS_STC = 703 -X86_INS_STD = 704 -X86_INS_STGI = 705 -X86_INS_STI = 706 -X86_INS_STMXCSR = 707 -X86_INS_STOSB = 708 -X86_INS_STOSD = 709 -X86_INS_STOSQ = 710 -X86_INS_STOSW = 711 -X86_INS_STR = 712 -X86_INS_FST = 713 -X86_INS_FSTP = 714 -X86_INS_SUB = 715 -X86_INS_SUBPD = 716 -X86_INS_SUBPS = 717 -X86_INS_FSUBR = 718 -X86_INS_FISUBR = 719 -X86_INS_FSUBRP = 720 -X86_INS_SUBSD = 721 -X86_INS_SUBSS = 722 -X86_INS_FSUB = 723 -X86_INS_FISUB = 724 -X86_INS_FSUBP = 725 -X86_INS_SWAPGS = 726 -X86_INS_SYSCALL = 727 -X86_INS_SYSENTER = 728 -X86_INS_SYSEXIT = 729 -X86_INS_SYSEXITQ = 730 -X86_INS_SYSRET = 731 -X86_INS_SYSRETQ = 732 -X86_INS_T1MSKC = 733 -X86_INS_TEST = 734 -X86_INS_TPAUSE = 735 -X86_INS_FTST = 736 -X86_INS_TZCNT = 737 -X86_INS_TZMSK = 738 -X86_INS_UCOMISD = 739 -X86_INS_UCOMISS = 740 -X86_INS_FUCOMPI = 741 -X86_INS_FUCOMI = 742 -X86_INS_FUCOMPP = 743 -X86_INS_FUCOMP = 744 -X86_INS_FUCOM = 745 -X86_INS_UD0 = 746 -X86_INS_UD1 = 747 -X86_INS_UD2 = 748 -X86_INS_UMONITOR = 749 -X86_INS_UMWAIT = 750 -X86_INS_UNPCKHPD = 751 -X86_INS_UNPCKHPS = 752 -X86_INS_UNPCKLPD = 753 -X86_INS_UNPCKLPS = 754 -X86_INS_V4FMADDPS = 755 -X86_INS_V4FMADDSS = 756 -X86_INS_V4FNMADDPS = 757 -X86_INS_V4FNMADDSS = 758 -X86_INS_VADDPD = 759 -X86_INS_VADDPS = 760 -X86_INS_VADDSD = 761 -X86_INS_VADDSS = 762 -X86_INS_VADDSUBPD = 763 -X86_INS_VADDSUBPS = 764 -X86_INS_VAESDECLAST = 765 -X86_INS_VAESDEC = 766 -X86_INS_VAESENCLAST = 767 -X86_INS_VAESENC = 768 -X86_INS_VAESIMC = 769 -X86_INS_VAESKEYGENASSIST = 770 -X86_INS_VALIGND = 771 -X86_INS_VALIGNQ = 772 -X86_INS_VANDNPD = 773 -X86_INS_VANDNPS = 774 -X86_INS_VANDPD = 775 -X86_INS_VANDPS = 776 -X86_INS_VBLENDMPD = 777 -X86_INS_VBLENDMPS = 778 -X86_INS_VBLENDPD = 779 -X86_INS_VBLENDPS = 780 -X86_INS_VBLENDVPD = 781 -X86_INS_VBLENDVPS = 782 -X86_INS_VBROADCASTF128 = 783 -X86_INS_VBROADCASTF32X2 = 784 -X86_INS_VBROADCASTF32X4 = 785 -X86_INS_VBROADCASTF32X8 = 786 -X86_INS_VBROADCASTF64X2 = 787 -X86_INS_VBROADCASTF64X4 = 788 -X86_INS_VBROADCASTI128 = 789 -X86_INS_VBROADCASTI32X2 = 790 -X86_INS_VBROADCASTI32X4 = 791 -X86_INS_VBROADCASTI32X8 = 792 -X86_INS_VBROADCASTI64X2 = 793 -X86_INS_VBROADCASTI64X4 = 794 -X86_INS_VBROADCASTSD = 795 -X86_INS_VBROADCASTSS = 796 -X86_INS_VCMP = 797 -X86_INS_VCMPPD = 798 -X86_INS_VCMPPS = 799 -X86_INS_VCMPSD = 800 -X86_INS_VCMPSS = 801 -X86_INS_VCOMISD = 802 -X86_INS_VCOMISS = 803 -X86_INS_VCOMPRESSPD = 804 -X86_INS_VCOMPRESSPS = 805 -X86_INS_VCVTDQ2PD = 806 -X86_INS_VCVTDQ2PS = 807 -X86_INS_VCVTPD2DQ = 808 -X86_INS_VCVTPD2PS = 809 -X86_INS_VCVTPD2QQ = 810 -X86_INS_VCVTPD2UDQ = 811 -X86_INS_VCVTPD2UQQ = 812 -X86_INS_VCVTPH2PS = 813 -X86_INS_VCVTPS2DQ = 814 -X86_INS_VCVTPS2PD = 815 -X86_INS_VCVTPS2PH = 816 -X86_INS_VCVTPS2QQ = 817 -X86_INS_VCVTPS2UDQ = 818 -X86_INS_VCVTPS2UQQ = 819 -X86_INS_VCVTQQ2PD = 820 -X86_INS_VCVTQQ2PS = 821 -X86_INS_VCVTSD2SI = 822 -X86_INS_VCVTSD2SS = 823 -X86_INS_VCVTSD2USI = 824 -X86_INS_VCVTSI2SD = 825 -X86_INS_VCVTSI2SS = 826 -X86_INS_VCVTSS2SD = 827 -X86_INS_VCVTSS2SI = 828 -X86_INS_VCVTSS2USI = 829 -X86_INS_VCVTTPD2DQ = 830 -X86_INS_VCVTTPD2QQ = 831 -X86_INS_VCVTTPD2UDQ = 832 -X86_INS_VCVTTPD2UQQ = 833 -X86_INS_VCVTTPS2DQ = 834 -X86_INS_VCVTTPS2QQ = 835 -X86_INS_VCVTTPS2UDQ = 836 -X86_INS_VCVTTPS2UQQ = 837 -X86_INS_VCVTTSD2SI = 838 -X86_INS_VCVTTSD2USI = 839 -X86_INS_VCVTTSS2SI = 840 -X86_INS_VCVTTSS2USI = 841 -X86_INS_VCVTUDQ2PD = 842 -X86_INS_VCVTUDQ2PS = 843 -X86_INS_VCVTUQQ2PD = 844 -X86_INS_VCVTUQQ2PS = 845 -X86_INS_VCVTUSI2SD = 846 -X86_INS_VCVTUSI2SS = 847 -X86_INS_VDBPSADBW = 848 -X86_INS_VDIVPD = 849 -X86_INS_VDIVPS = 850 -X86_INS_VDIVSD = 851 -X86_INS_VDIVSS = 852 -X86_INS_VDPPD = 853 -X86_INS_VDPPS = 854 -X86_INS_VERR = 855 -X86_INS_VERW = 856 -X86_INS_VEXP2PD = 857 -X86_INS_VEXP2PS = 858 -X86_INS_VEXPANDPD = 859 -X86_INS_VEXPANDPS = 860 -X86_INS_VEXTRACTF128 = 861 -X86_INS_VEXTRACTF32X4 = 862 -X86_INS_VEXTRACTF32X8 = 863 -X86_INS_VEXTRACTF64X2 = 864 -X86_INS_VEXTRACTF64X4 = 865 -X86_INS_VEXTRACTI128 = 866 -X86_INS_VEXTRACTI32X4 = 867 -X86_INS_VEXTRACTI32X8 = 868 -X86_INS_VEXTRACTI64X2 = 869 -X86_INS_VEXTRACTI64X4 = 870 -X86_INS_VEXTRACTPS = 871 -X86_INS_VFIXUPIMMPD = 872 -X86_INS_VFIXUPIMMPS = 873 -X86_INS_VFIXUPIMMSD = 874 -X86_INS_VFIXUPIMMSS = 875 -X86_INS_VFMADD132PD = 876 -X86_INS_VFMADD132PS = 877 -X86_INS_VFMADD132SD = 878 -X86_INS_VFMADD132SS = 879 -X86_INS_VFMADD213PD = 880 -X86_INS_VFMADD213PS = 881 -X86_INS_VFMADD213SD = 882 -X86_INS_VFMADD213SS = 883 -X86_INS_VFMADD231PD = 884 -X86_INS_VFMADD231PS = 885 -X86_INS_VFMADD231SD = 886 -X86_INS_VFMADD231SS = 887 -X86_INS_VFMADDPD = 888 -X86_INS_VFMADDPS = 889 -X86_INS_VFMADDSD = 890 -X86_INS_VFMADDSS = 891 -X86_INS_VFMADDSUB132PD = 892 -X86_INS_VFMADDSUB132PS = 893 -X86_INS_VFMADDSUB213PD = 894 -X86_INS_VFMADDSUB213PS = 895 -X86_INS_VFMADDSUB231PD = 896 -X86_INS_VFMADDSUB231PS = 897 -X86_INS_VFMADDSUBPD = 898 -X86_INS_VFMADDSUBPS = 899 -X86_INS_VFMSUB132PD = 900 -X86_INS_VFMSUB132PS = 901 -X86_INS_VFMSUB132SD = 902 -X86_INS_VFMSUB132SS = 903 -X86_INS_VFMSUB213PD = 904 -X86_INS_VFMSUB213PS = 905 -X86_INS_VFMSUB213SD = 906 -X86_INS_VFMSUB213SS = 907 -X86_INS_VFMSUB231PD = 908 -X86_INS_VFMSUB231PS = 909 -X86_INS_VFMSUB231SD = 910 -X86_INS_VFMSUB231SS = 911 -X86_INS_VFMSUBADD132PD = 912 -X86_INS_VFMSUBADD132PS = 913 -X86_INS_VFMSUBADD213PD = 914 -X86_INS_VFMSUBADD213PS = 915 -X86_INS_VFMSUBADD231PD = 916 -X86_INS_VFMSUBADD231PS = 917 -X86_INS_VFMSUBADDPD = 918 -X86_INS_VFMSUBADDPS = 919 -X86_INS_VFMSUBPD = 920 -X86_INS_VFMSUBPS = 921 -X86_INS_VFMSUBSD = 922 -X86_INS_VFMSUBSS = 923 -X86_INS_VFNMADD132PD = 924 -X86_INS_VFNMADD132PS = 925 -X86_INS_VFNMADD132SD = 926 -X86_INS_VFNMADD132SS = 927 -X86_INS_VFNMADD213PD = 928 -X86_INS_VFNMADD213PS = 929 -X86_INS_VFNMADD213SD = 930 -X86_INS_VFNMADD213SS = 931 -X86_INS_VFNMADD231PD = 932 -X86_INS_VFNMADD231PS = 933 -X86_INS_VFNMADD231SD = 934 -X86_INS_VFNMADD231SS = 935 -X86_INS_VFNMADDPD = 936 -X86_INS_VFNMADDPS = 937 -X86_INS_VFNMADDSD = 938 -X86_INS_VFNMADDSS = 939 -X86_INS_VFNMSUB132PD = 940 -X86_INS_VFNMSUB132PS = 941 -X86_INS_VFNMSUB132SD = 942 -X86_INS_VFNMSUB132SS = 943 -X86_INS_VFNMSUB213PD = 944 -X86_INS_VFNMSUB213PS = 945 -X86_INS_VFNMSUB213SD = 946 -X86_INS_VFNMSUB213SS = 947 -X86_INS_VFNMSUB231PD = 948 -X86_INS_VFNMSUB231PS = 949 -X86_INS_VFNMSUB231SD = 950 -X86_INS_VFNMSUB231SS = 951 -X86_INS_VFNMSUBPD = 952 -X86_INS_VFNMSUBPS = 953 -X86_INS_VFNMSUBSD = 954 -X86_INS_VFNMSUBSS = 955 -X86_INS_VFPCLASSPD = 956 -X86_INS_VFPCLASSPS = 957 -X86_INS_VFPCLASSSD = 958 -X86_INS_VFPCLASSSS = 959 -X86_INS_VFRCZPD = 960 -X86_INS_VFRCZPS = 961 -X86_INS_VFRCZSD = 962 -X86_INS_VFRCZSS = 963 -X86_INS_VGATHERDPD = 964 -X86_INS_VGATHERDPS = 965 -X86_INS_VGATHERPF0DPD = 966 -X86_INS_VGATHERPF0DPS = 967 -X86_INS_VGATHERPF0QPD = 968 -X86_INS_VGATHERPF0QPS = 969 -X86_INS_VGATHERPF1DPD = 970 -X86_INS_VGATHERPF1DPS = 971 -X86_INS_VGATHERPF1QPD = 972 -X86_INS_VGATHERPF1QPS = 973 -X86_INS_VGATHERQPD = 974 -X86_INS_VGATHERQPS = 975 -X86_INS_VGETEXPPD = 976 -X86_INS_VGETEXPPS = 977 -X86_INS_VGETEXPSD = 978 -X86_INS_VGETEXPSS = 979 -X86_INS_VGETMANTPD = 980 -X86_INS_VGETMANTPS = 981 -X86_INS_VGETMANTSD = 982 -X86_INS_VGETMANTSS = 983 -X86_INS_VGF2P8AFFINEINVQB = 984 -X86_INS_VGF2P8AFFINEQB = 985 -X86_INS_VGF2P8MULB = 986 -X86_INS_VHADDPD = 987 -X86_INS_VHADDPS = 988 -X86_INS_VHSUBPD = 989 -X86_INS_VHSUBPS = 990 -X86_INS_VINSERTF128 = 991 -X86_INS_VINSERTF32X4 = 992 -X86_INS_VINSERTF32X8 = 993 -X86_INS_VINSERTF64X2 = 994 -X86_INS_VINSERTF64X4 = 995 -X86_INS_VINSERTI128 = 996 -X86_INS_VINSERTI32X4 = 997 -X86_INS_VINSERTI32X8 = 998 -X86_INS_VINSERTI64X2 = 999 -X86_INS_VINSERTI64X4 = 1000 -X86_INS_VINSERTPS = 1001 -X86_INS_VLDDQU = 1002 -X86_INS_VLDMXCSR = 1003 -X86_INS_VMASKMOVDQU = 1004 -X86_INS_VMASKMOVPD = 1005 -X86_INS_VMASKMOVPS = 1006 -X86_INS_VMAXPD = 1007 -X86_INS_VMAXPS = 1008 -X86_INS_VMAXSD = 1009 -X86_INS_VMAXSS = 1010 -X86_INS_VMCALL = 1011 -X86_INS_VMCLEAR = 1012 -X86_INS_VMFUNC = 1013 -X86_INS_VMINPD = 1014 -X86_INS_VMINPS = 1015 -X86_INS_VMINSD = 1016 -X86_INS_VMINSS = 1017 -X86_INS_VMLAUNCH = 1018 -X86_INS_VMLOAD = 1019 -X86_INS_VMMCALL = 1020 -X86_INS_VMOVQ = 1021 -X86_INS_VMOVAPD = 1022 -X86_INS_VMOVAPS = 1023 -X86_INS_VMOVDDUP = 1024 -X86_INS_VMOVD = 1025 -X86_INS_VMOVDQA32 = 1026 -X86_INS_VMOVDQA64 = 1027 -X86_INS_VMOVDQA = 1028 -X86_INS_VMOVDQU16 = 1029 -X86_INS_VMOVDQU32 = 1030 -X86_INS_VMOVDQU64 = 1031 -X86_INS_VMOVDQU8 = 1032 -X86_INS_VMOVDQU = 1033 -X86_INS_VMOVHLPS = 1034 -X86_INS_VMOVHPD = 1035 -X86_INS_VMOVHPS = 1036 -X86_INS_VMOVLHPS = 1037 -X86_INS_VMOVLPD = 1038 -X86_INS_VMOVLPS = 1039 -X86_INS_VMOVMSKPD = 1040 -X86_INS_VMOVMSKPS = 1041 -X86_INS_VMOVNTDQA = 1042 -X86_INS_VMOVNTDQ = 1043 -X86_INS_VMOVNTPD = 1044 -X86_INS_VMOVNTPS = 1045 -X86_INS_VMOVSD = 1046 -X86_INS_VMOVSHDUP = 1047 -X86_INS_VMOVSLDUP = 1048 -X86_INS_VMOVSS = 1049 -X86_INS_VMOVUPD = 1050 -X86_INS_VMOVUPS = 1051 -X86_INS_VMPSADBW = 1052 -X86_INS_VMPTRLD = 1053 -X86_INS_VMPTRST = 1054 -X86_INS_VMREAD = 1055 -X86_INS_VMRESUME = 1056 -X86_INS_VMRUN = 1057 -X86_INS_VMSAVE = 1058 -X86_INS_VMULPD = 1059 -X86_INS_VMULPS = 1060 -X86_INS_VMULSD = 1061 -X86_INS_VMULSS = 1062 -X86_INS_VMWRITE = 1063 -X86_INS_VMXOFF = 1064 -X86_INS_VMXON = 1065 -X86_INS_VORPD = 1066 -X86_INS_VORPS = 1067 -X86_INS_VP4DPWSSDS = 1068 -X86_INS_VP4DPWSSD = 1069 -X86_INS_VPABSB = 1070 -X86_INS_VPABSD = 1071 -X86_INS_VPABSQ = 1072 -X86_INS_VPABSW = 1073 -X86_INS_VPACKSSDW = 1074 -X86_INS_VPACKSSWB = 1075 -X86_INS_VPACKUSDW = 1076 -X86_INS_VPACKUSWB = 1077 -X86_INS_VPADDB = 1078 -X86_INS_VPADDD = 1079 -X86_INS_VPADDQ = 1080 -X86_INS_VPADDSB = 1081 -X86_INS_VPADDSW = 1082 -X86_INS_VPADDUSB = 1083 -X86_INS_VPADDUSW = 1084 -X86_INS_VPADDW = 1085 -X86_INS_VPALIGNR = 1086 -X86_INS_VPANDD = 1087 -X86_INS_VPANDND = 1088 -X86_INS_VPANDNQ = 1089 -X86_INS_VPANDN = 1090 -X86_INS_VPANDQ = 1091 -X86_INS_VPAND = 1092 -X86_INS_VPAVGB = 1093 -X86_INS_VPAVGW = 1094 -X86_INS_VPBLENDD = 1095 -X86_INS_VPBLENDMB = 1096 -X86_INS_VPBLENDMD = 1097 -X86_INS_VPBLENDMQ = 1098 -X86_INS_VPBLENDMW = 1099 -X86_INS_VPBLENDVB = 1100 -X86_INS_VPBLENDW = 1101 -X86_INS_VPBROADCASTB = 1102 -X86_INS_VPBROADCASTD = 1103 -X86_INS_VPBROADCASTMB2Q = 1104 -X86_INS_VPBROADCASTMW2D = 1105 -X86_INS_VPBROADCASTQ = 1106 -X86_INS_VPBROADCASTW = 1107 -X86_INS_VPCLMULQDQ = 1108 -X86_INS_VPCMOV = 1109 -X86_INS_VPCMP = 1110 -X86_INS_VPCMPB = 1111 -X86_INS_VPCMPD = 1112 -X86_INS_VPCMPEQB = 1113 -X86_INS_VPCMPEQD = 1114 -X86_INS_VPCMPEQQ = 1115 -X86_INS_VPCMPEQW = 1116 -X86_INS_VPCMPESTRI = 1117 -X86_INS_VPCMPESTRM = 1118 -X86_INS_VPCMPGTB = 1119 -X86_INS_VPCMPGTD = 1120 -X86_INS_VPCMPGTQ = 1121 -X86_INS_VPCMPGTW = 1122 -X86_INS_VPCMPISTRI = 1123 -X86_INS_VPCMPISTRM = 1124 -X86_INS_VPCMPQ = 1125 -X86_INS_VPCMPUB = 1126 -X86_INS_VPCMPUD = 1127 -X86_INS_VPCMPUQ = 1128 -X86_INS_VPCMPUW = 1129 -X86_INS_VPCMPW = 1130 -X86_INS_VPCOM = 1131 -X86_INS_VPCOMB = 1132 -X86_INS_VPCOMD = 1133 -X86_INS_VPCOMPRESSB = 1134 -X86_INS_VPCOMPRESSD = 1135 -X86_INS_VPCOMPRESSQ = 1136 -X86_INS_VPCOMPRESSW = 1137 -X86_INS_VPCOMQ = 1138 -X86_INS_VPCOMUB = 1139 -X86_INS_VPCOMUD = 1140 -X86_INS_VPCOMUQ = 1141 -X86_INS_VPCOMUW = 1142 -X86_INS_VPCOMW = 1143 -X86_INS_VPCONFLICTD = 1144 -X86_INS_VPCONFLICTQ = 1145 -X86_INS_VPDPBUSDS = 1146 -X86_INS_VPDPBUSD = 1147 -X86_INS_VPDPWSSDS = 1148 -X86_INS_VPDPWSSD = 1149 -X86_INS_VPERM2F128 = 1150 -X86_INS_VPERM2I128 = 1151 -X86_INS_VPERMB = 1152 -X86_INS_VPERMD = 1153 -X86_INS_VPERMI2B = 1154 -X86_INS_VPERMI2D = 1155 -X86_INS_VPERMI2PD = 1156 -X86_INS_VPERMI2PS = 1157 -X86_INS_VPERMI2Q = 1158 -X86_INS_VPERMI2W = 1159 -X86_INS_VPERMIL2PD = 1160 -X86_INS_VPERMILPD = 1161 -X86_INS_VPERMIL2PS = 1162 -X86_INS_VPERMILPS = 1163 -X86_INS_VPERMPD = 1164 -X86_INS_VPERMPS = 1165 -X86_INS_VPERMQ = 1166 -X86_INS_VPERMT2B = 1167 -X86_INS_VPERMT2D = 1168 -X86_INS_VPERMT2PD = 1169 -X86_INS_VPERMT2PS = 1170 -X86_INS_VPERMT2Q = 1171 -X86_INS_VPERMT2W = 1172 -X86_INS_VPERMW = 1173 -X86_INS_VPEXPANDB = 1174 -X86_INS_VPEXPANDD = 1175 -X86_INS_VPEXPANDQ = 1176 -X86_INS_VPEXPANDW = 1177 -X86_INS_VPEXTRB = 1178 -X86_INS_VPEXTRD = 1179 -X86_INS_VPEXTRQ = 1180 -X86_INS_VPEXTRW = 1181 -X86_INS_VPGATHERDD = 1182 -X86_INS_VPGATHERDQ = 1183 -X86_INS_VPGATHERQD = 1184 -X86_INS_VPGATHERQQ = 1185 -X86_INS_VPHADDBD = 1186 -X86_INS_VPHADDBQ = 1187 -X86_INS_VPHADDBW = 1188 -X86_INS_VPHADDDQ = 1189 -X86_INS_VPHADDD = 1190 -X86_INS_VPHADDSW = 1191 -X86_INS_VPHADDUBD = 1192 -X86_INS_VPHADDUBQ = 1193 -X86_INS_VPHADDUBW = 1194 -X86_INS_VPHADDUDQ = 1195 -X86_INS_VPHADDUWD = 1196 -X86_INS_VPHADDUWQ = 1197 -X86_INS_VPHADDWD = 1198 -X86_INS_VPHADDWQ = 1199 -X86_INS_VPHADDW = 1200 -X86_INS_VPHMINPOSUW = 1201 -X86_INS_VPHSUBBW = 1202 -X86_INS_VPHSUBDQ = 1203 -X86_INS_VPHSUBD = 1204 -X86_INS_VPHSUBSW = 1205 -X86_INS_VPHSUBWD = 1206 -X86_INS_VPHSUBW = 1207 -X86_INS_VPINSRB = 1208 -X86_INS_VPINSRD = 1209 -X86_INS_VPINSRQ = 1210 -X86_INS_VPINSRW = 1211 -X86_INS_VPLZCNTD = 1212 -X86_INS_VPLZCNTQ = 1213 -X86_INS_VPMACSDD = 1214 -X86_INS_VPMACSDQH = 1215 -X86_INS_VPMACSDQL = 1216 -X86_INS_VPMACSSDD = 1217 -X86_INS_VPMACSSDQH = 1218 -X86_INS_VPMACSSDQL = 1219 -X86_INS_VPMACSSWD = 1220 -X86_INS_VPMACSSWW = 1221 -X86_INS_VPMACSWD = 1222 -X86_INS_VPMACSWW = 1223 -X86_INS_VPMADCSSWD = 1224 -X86_INS_VPMADCSWD = 1225 -X86_INS_VPMADD52HUQ = 1226 -X86_INS_VPMADD52LUQ = 1227 -X86_INS_VPMADDUBSW = 1228 -X86_INS_VPMADDWD = 1229 -X86_INS_VPMASKMOVD = 1230 -X86_INS_VPMASKMOVQ = 1231 -X86_INS_VPMAXSB = 1232 -X86_INS_VPMAXSD = 1233 -X86_INS_VPMAXSQ = 1234 -X86_INS_VPMAXSW = 1235 -X86_INS_VPMAXUB = 1236 -X86_INS_VPMAXUD = 1237 -X86_INS_VPMAXUQ = 1238 -X86_INS_VPMAXUW = 1239 -X86_INS_VPMINSB = 1240 -X86_INS_VPMINSD = 1241 -X86_INS_VPMINSQ = 1242 -X86_INS_VPMINSW = 1243 -X86_INS_VPMINUB = 1244 -X86_INS_VPMINUD = 1245 -X86_INS_VPMINUQ = 1246 -X86_INS_VPMINUW = 1247 -X86_INS_VPMOVB2M = 1248 -X86_INS_VPMOVD2M = 1249 -X86_INS_VPMOVDB = 1250 -X86_INS_VPMOVDW = 1251 -X86_INS_VPMOVM2B = 1252 -X86_INS_VPMOVM2D = 1253 -X86_INS_VPMOVM2Q = 1254 -X86_INS_VPMOVM2W = 1255 -X86_INS_VPMOVMSKB = 1256 -X86_INS_VPMOVQ2M = 1257 -X86_INS_VPMOVQB = 1258 -X86_INS_VPMOVQD = 1259 -X86_INS_VPMOVQW = 1260 -X86_INS_VPMOVSDB = 1261 -X86_INS_VPMOVSDW = 1262 -X86_INS_VPMOVSQB = 1263 -X86_INS_VPMOVSQD = 1264 -X86_INS_VPMOVSQW = 1265 -X86_INS_VPMOVSWB = 1266 -X86_INS_VPMOVSXBD = 1267 -X86_INS_VPMOVSXBQ = 1268 -X86_INS_VPMOVSXBW = 1269 -X86_INS_VPMOVSXDQ = 1270 -X86_INS_VPMOVSXWD = 1271 -X86_INS_VPMOVSXWQ = 1272 -X86_INS_VPMOVUSDB = 1273 -X86_INS_VPMOVUSDW = 1274 -X86_INS_VPMOVUSQB = 1275 -X86_INS_VPMOVUSQD = 1276 -X86_INS_VPMOVUSQW = 1277 -X86_INS_VPMOVUSWB = 1278 -X86_INS_VPMOVW2M = 1279 -X86_INS_VPMOVWB = 1280 -X86_INS_VPMOVZXBD = 1281 -X86_INS_VPMOVZXBQ = 1282 -X86_INS_VPMOVZXBW = 1283 -X86_INS_VPMOVZXDQ = 1284 -X86_INS_VPMOVZXWD = 1285 -X86_INS_VPMOVZXWQ = 1286 -X86_INS_VPMULDQ = 1287 -X86_INS_VPMULHRSW = 1288 -X86_INS_VPMULHUW = 1289 -X86_INS_VPMULHW = 1290 -X86_INS_VPMULLD = 1291 -X86_INS_VPMULLQ = 1292 -X86_INS_VPMULLW = 1293 -X86_INS_VPMULTISHIFTQB = 1294 -X86_INS_VPMULUDQ = 1295 -X86_INS_VPOPCNTB = 1296 -X86_INS_VPOPCNTD = 1297 -X86_INS_VPOPCNTQ = 1298 -X86_INS_VPOPCNTW = 1299 -X86_INS_VPORD = 1300 -X86_INS_VPORQ = 1301 -X86_INS_VPOR = 1302 -X86_INS_VPPERM = 1303 -X86_INS_VPROLD = 1304 -X86_INS_VPROLQ = 1305 -X86_INS_VPROLVD = 1306 -X86_INS_VPROLVQ = 1307 -X86_INS_VPRORD = 1308 -X86_INS_VPRORQ = 1309 -X86_INS_VPRORVD = 1310 -X86_INS_VPRORVQ = 1311 -X86_INS_VPROTB = 1312 -X86_INS_VPROTD = 1313 -X86_INS_VPROTQ = 1314 -X86_INS_VPROTW = 1315 -X86_INS_VPSADBW = 1316 -X86_INS_VPSCATTERDD = 1317 -X86_INS_VPSCATTERDQ = 1318 -X86_INS_VPSCATTERQD = 1319 -X86_INS_VPSCATTERQQ = 1320 -X86_INS_VPSHAB = 1321 -X86_INS_VPSHAD = 1322 -X86_INS_VPSHAQ = 1323 -X86_INS_VPSHAW = 1324 -X86_INS_VPSHLB = 1325 -X86_INS_VPSHLDD = 1326 -X86_INS_VPSHLDQ = 1327 -X86_INS_VPSHLDVD = 1328 -X86_INS_VPSHLDVQ = 1329 -X86_INS_VPSHLDVW = 1330 -X86_INS_VPSHLDW = 1331 -X86_INS_VPSHLD = 1332 -X86_INS_VPSHLQ = 1333 -X86_INS_VPSHLW = 1334 -X86_INS_VPSHRDD = 1335 -X86_INS_VPSHRDQ = 1336 -X86_INS_VPSHRDVD = 1337 -X86_INS_VPSHRDVQ = 1338 -X86_INS_VPSHRDVW = 1339 -X86_INS_VPSHRDW = 1340 -X86_INS_VPSHUFBITQMB = 1341 -X86_INS_VPSHUFB = 1342 -X86_INS_VPSHUFD = 1343 -X86_INS_VPSHUFHW = 1344 -X86_INS_VPSHUFLW = 1345 -X86_INS_VPSIGNB = 1346 -X86_INS_VPSIGND = 1347 -X86_INS_VPSIGNW = 1348 -X86_INS_VPSLLDQ = 1349 -X86_INS_VPSLLD = 1350 -X86_INS_VPSLLQ = 1351 -X86_INS_VPSLLVD = 1352 -X86_INS_VPSLLVQ = 1353 -X86_INS_VPSLLVW = 1354 -X86_INS_VPSLLW = 1355 -X86_INS_VPSRAD = 1356 -X86_INS_VPSRAQ = 1357 -X86_INS_VPSRAVD = 1358 -X86_INS_VPSRAVQ = 1359 -X86_INS_VPSRAVW = 1360 -X86_INS_VPSRAW = 1361 -X86_INS_VPSRLDQ = 1362 -X86_INS_VPSRLD = 1363 -X86_INS_VPSRLQ = 1364 -X86_INS_VPSRLVD = 1365 -X86_INS_VPSRLVQ = 1366 -X86_INS_VPSRLVW = 1367 -X86_INS_VPSRLW = 1368 -X86_INS_VPSUBB = 1369 -X86_INS_VPSUBD = 1370 -X86_INS_VPSUBQ = 1371 -X86_INS_VPSUBSB = 1372 -X86_INS_VPSUBSW = 1373 -X86_INS_VPSUBUSB = 1374 -X86_INS_VPSUBUSW = 1375 -X86_INS_VPSUBW = 1376 -X86_INS_VPTERNLOGD = 1377 -X86_INS_VPTERNLOGQ = 1378 -X86_INS_VPTESTMB = 1379 -X86_INS_VPTESTMD = 1380 -X86_INS_VPTESTMQ = 1381 -X86_INS_VPTESTMW = 1382 -X86_INS_VPTESTNMB = 1383 -X86_INS_VPTESTNMD = 1384 -X86_INS_VPTESTNMQ = 1385 -X86_INS_VPTESTNMW = 1386 -X86_INS_VPTEST = 1387 -X86_INS_VPUNPCKHBW = 1388 -X86_INS_VPUNPCKHDQ = 1389 -X86_INS_VPUNPCKHQDQ = 1390 -X86_INS_VPUNPCKHWD = 1391 -X86_INS_VPUNPCKLBW = 1392 -X86_INS_VPUNPCKLDQ = 1393 -X86_INS_VPUNPCKLQDQ = 1394 -X86_INS_VPUNPCKLWD = 1395 -X86_INS_VPXORD = 1396 -X86_INS_VPXORQ = 1397 -X86_INS_VPXOR = 1398 -X86_INS_VRANGEPD = 1399 -X86_INS_VRANGEPS = 1400 -X86_INS_VRANGESD = 1401 -X86_INS_VRANGESS = 1402 -X86_INS_VRCP14PD = 1403 -X86_INS_VRCP14PS = 1404 -X86_INS_VRCP14SD = 1405 -X86_INS_VRCP14SS = 1406 -X86_INS_VRCP28PD = 1407 -X86_INS_VRCP28PS = 1408 -X86_INS_VRCP28SD = 1409 -X86_INS_VRCP28SS = 1410 -X86_INS_VRCPPS = 1411 -X86_INS_VRCPSS = 1412 -X86_INS_VREDUCEPD = 1413 -X86_INS_VREDUCEPS = 1414 -X86_INS_VREDUCESD = 1415 -X86_INS_VREDUCESS = 1416 -X86_INS_VRNDSCALEPD = 1417 -X86_INS_VRNDSCALEPS = 1418 -X86_INS_VRNDSCALESD = 1419 -X86_INS_VRNDSCALESS = 1420 -X86_INS_VROUNDPD = 1421 -X86_INS_VROUNDPS = 1422 -X86_INS_VROUNDSD = 1423 -X86_INS_VROUNDSS = 1424 -X86_INS_VRSQRT14PD = 1425 -X86_INS_VRSQRT14PS = 1426 -X86_INS_VRSQRT14SD = 1427 -X86_INS_VRSQRT14SS = 1428 -X86_INS_VRSQRT28PD = 1429 -X86_INS_VRSQRT28PS = 1430 -X86_INS_VRSQRT28SD = 1431 -X86_INS_VRSQRT28SS = 1432 -X86_INS_VRSQRTPS = 1433 -X86_INS_VRSQRTSS = 1434 -X86_INS_VSCALEFPD = 1435 -X86_INS_VSCALEFPS = 1436 -X86_INS_VSCALEFSD = 1437 -X86_INS_VSCALEFSS = 1438 -X86_INS_VSCATTERDPD = 1439 -X86_INS_VSCATTERDPS = 1440 -X86_INS_VSCATTERPF0DPD = 1441 -X86_INS_VSCATTERPF0DPS = 1442 -X86_INS_VSCATTERPF0QPD = 1443 -X86_INS_VSCATTERPF0QPS = 1444 -X86_INS_VSCATTERPF1DPD = 1445 -X86_INS_VSCATTERPF1DPS = 1446 -X86_INS_VSCATTERPF1QPD = 1447 -X86_INS_VSCATTERPF1QPS = 1448 -X86_INS_VSCATTERQPD = 1449 -X86_INS_VSCATTERQPS = 1450 -X86_INS_VSHUFF32X4 = 1451 -X86_INS_VSHUFF64X2 = 1452 -X86_INS_VSHUFI32X4 = 1453 -X86_INS_VSHUFI64X2 = 1454 -X86_INS_VSHUFPD = 1455 -X86_INS_VSHUFPS = 1456 -X86_INS_VSQRTPD = 1457 -X86_INS_VSQRTPS = 1458 -X86_INS_VSQRTSD = 1459 -X86_INS_VSQRTSS = 1460 -X86_INS_VSTMXCSR = 1461 -X86_INS_VSUBPD = 1462 -X86_INS_VSUBPS = 1463 -X86_INS_VSUBSD = 1464 -X86_INS_VSUBSS = 1465 -X86_INS_VTESTPD = 1466 -X86_INS_VTESTPS = 1467 -X86_INS_VUCOMISD = 1468 -X86_INS_VUCOMISS = 1469 -X86_INS_VUNPCKHPD = 1470 -X86_INS_VUNPCKHPS = 1471 -X86_INS_VUNPCKLPD = 1472 -X86_INS_VUNPCKLPS = 1473 -X86_INS_VXORPD = 1474 -X86_INS_VXORPS = 1475 -X86_INS_VZEROALL = 1476 -X86_INS_VZEROUPPER = 1477 -X86_INS_WAIT = 1478 -X86_INS_WBINVD = 1479 -X86_INS_WBNOINVD = 1480 -X86_INS_WRFSBASE = 1481 -X86_INS_WRGSBASE = 1482 -X86_INS_WRMSR = 1483 -X86_INS_WRPKRU = 1484 -X86_INS_WRSSD = 1485 -X86_INS_WRSSQ = 1486 -X86_INS_WRUSSD = 1487 -X86_INS_WRUSSQ = 1488 -X86_INS_XABORT = 1489 -X86_INS_XACQUIRE = 1490 -X86_INS_XADD = 1491 -X86_INS_XBEGIN = 1492 -X86_INS_XCHG = 1493 -X86_INS_FXCH = 1494 -X86_INS_XCRYPTCBC = 1495 -X86_INS_XCRYPTCFB = 1496 -X86_INS_XCRYPTCTR = 1497 -X86_INS_XCRYPTECB = 1498 -X86_INS_XCRYPTOFB = 1499 -X86_INS_XEND = 1500 -X86_INS_XGETBV = 1501 -X86_INS_XLATB = 1502 -X86_INS_XOR = 1503 -X86_INS_XORPD = 1504 -X86_INS_XORPS = 1505 -X86_INS_XRELEASE = 1506 -X86_INS_XRSTOR = 1507 -X86_INS_XRSTOR64 = 1508 -X86_INS_XRSTORS = 1509 -X86_INS_XRSTORS64 = 1510 -X86_INS_XSAVE = 1511 -X86_INS_XSAVE64 = 1512 -X86_INS_XSAVEC = 1513 -X86_INS_XSAVEC64 = 1514 -X86_INS_XSAVEOPT = 1515 -X86_INS_XSAVEOPT64 = 1516 -X86_INS_XSAVES = 1517 -X86_INS_XSAVES64 = 1518 -X86_INS_XSETBV = 1519 -X86_INS_XSHA1 = 1520 -X86_INS_XSHA256 = 1521 -X86_INS_XSTORE = 1522 -X86_INS_XTEST = 1523 -X86_INS_ENDING = 1524 - -X86_GRP_INVALID = 0 -X86_GRP_JUMP = 1 -X86_GRP_CALL = 2 -X86_GRP_RET = 3 -X86_GRP_INT = 4 -X86_GRP_IRET = 5 -X86_GRP_PRIVILEGE = 6 -X86_GRP_BRANCH_RELATIVE = 7 -X86_GRP_VM = 128 -X86_GRP_3DNOW = 129 -X86_GRP_AES = 130 -X86_GRP_ADX = 131 -X86_GRP_AVX = 132 -X86_GRP_AVX2 = 133 -X86_GRP_AVX512 = 134 -X86_GRP_BMI = 135 -X86_GRP_BMI2 = 136 -X86_GRP_CMOV = 137 -X86_GRP_F16C = 138 -X86_GRP_FMA = 139 -X86_GRP_FMA4 = 140 -X86_GRP_FSGSBASE = 141 -X86_GRP_HLE = 142 -X86_GRP_MMX = 143 -X86_GRP_MODE32 = 144 -X86_GRP_MODE64 = 145 -X86_GRP_RTM = 146 -X86_GRP_SHA = 147 -X86_GRP_SSE1 = 148 -X86_GRP_SSE2 = 149 -X86_GRP_SSE3 = 150 -X86_GRP_SSE41 = 151 -X86_GRP_SSE42 = 152 -X86_GRP_SSE4A = 153 -X86_GRP_SSSE3 = 154 -X86_GRP_PCLMUL = 155 -X86_GRP_XOP = 156 -X86_GRP_CDI = 157 -X86_GRP_ERI = 158 -X86_GRP_TBM = 159 -X86_GRP_16BITMODE = 160 -X86_GRP_NOT64BITMODE = 161 -X86_GRP_SGX = 162 -X86_GRP_DQI = 163 -X86_GRP_BWI = 164 -X86_GRP_PFI = 165 -X86_GRP_VLX = 166 -X86_GRP_SMAP = 167 -X86_GRP_NOVLX = 168 -X86_GRP_FPU = 169 -X86_GRP_ENDING = 170 diff --git a/.tools/python-revlibs/capstone/xcore.py b/.tools/python-revlibs/capstone/xcore.py deleted file mode 100644 index ec95b78..0000000 --- a/.tools/python-revlibs/capstone/xcore.py +++ /dev/null @@ -1,50 +0,0 @@ -# Capstone Python bindings, by Nguyen Anh Quynnh - -import ctypes -from . import copy_ctypes_list -from .xcore_const import * - -# define the API -class XcoreOpMem(ctypes.Structure): - _fields_ = ( - ('base', ctypes.c_uint8), - ('index', ctypes.c_uint8), - ('disp', ctypes.c_int32), - ('direct', ctypes.c_int), - ) - -class XcoreOpValue(ctypes.Union): - _fields_ = ( - ('reg', ctypes.c_uint), - ('imm', ctypes.c_int32), - ('mem', XcoreOpMem), - ) - -class XcoreOp(ctypes.Structure): - _fields_ = ( - ('type', ctypes.c_uint), - ('value', XcoreOpValue), - ) - - @property - def imm(self): - return self.value.imm - - @property - def reg(self): - return self.value.reg - - @property - def mem(self): - return self.value.mem - - -class CsXcore(ctypes.Structure): - _fields_ = ( - ('op_count', ctypes.c_uint8), - ('operands', XcoreOp * 8), - ) - -def get_arch_info(a): - return (copy_ctypes_list(a.operands[:a.op_count])) - diff --git a/.tools/python-revlibs/capstone/xcore_const.py b/.tools/python-revlibs/capstone/xcore_const.py deleted file mode 100644 index 5cc8ebe..0000000 --- a/.tools/python-revlibs/capstone/xcore_const.py +++ /dev/null @@ -1,162 +0,0 @@ -from . import CS_OP_INVALID, CS_OP_REG, CS_OP_IMM, CS_OP_MEM -# For Capstone Engine. AUTO-GENERATED FILE, DO NOT EDIT [xcore_const.py] - -XCORE_OP_INVALID = 0 -XCORE_OP_REG = 1 -XCORE_OP_IMM = 2 -XCORE_OP_MEM = 3 - -XCORE_REG_INVALID = 0 -XCORE_REG_CP = 1 -XCORE_REG_DP = 2 -XCORE_REG_LR = 3 -XCORE_REG_SP = 4 -XCORE_REG_R0 = 5 -XCORE_REG_R1 = 6 -XCORE_REG_R2 = 7 -XCORE_REG_R3 = 8 -XCORE_REG_R4 = 9 -XCORE_REG_R5 = 10 -XCORE_REG_R6 = 11 -XCORE_REG_R7 = 12 -XCORE_REG_R8 = 13 -XCORE_REG_R9 = 14 -XCORE_REG_R10 = 15 -XCORE_REG_R11 = 16 -XCORE_REG_PC = 17 -XCORE_REG_SCP = 18 -XCORE_REG_SSR = 19 -XCORE_REG_ET = 20 -XCORE_REG_ED = 21 -XCORE_REG_SED = 22 -XCORE_REG_KEP = 23 -XCORE_REG_KSP = 24 -XCORE_REG_ID = 25 -XCORE_REG_ENDING = 26 - -XCORE_INS_INVALID = 0 -XCORE_INS_ADD = 1 -XCORE_INS_ANDNOT = 2 -XCORE_INS_AND = 3 -XCORE_INS_ASHR = 4 -XCORE_INS_BAU = 5 -XCORE_INS_BITREV = 6 -XCORE_INS_BLA = 7 -XCORE_INS_BLAT = 8 -XCORE_INS_BL = 9 -XCORE_INS_BF = 10 -XCORE_INS_BT = 11 -XCORE_INS_BU = 12 -XCORE_INS_BRU = 13 -XCORE_INS_BYTEREV = 14 -XCORE_INS_CHKCT = 15 -XCORE_INS_CLRE = 16 -XCORE_INS_CLRPT = 17 -XCORE_INS_CLRSR = 18 -XCORE_INS_CLZ = 19 -XCORE_INS_CRC8 = 20 -XCORE_INS_CRC32 = 21 -XCORE_INS_DCALL = 22 -XCORE_INS_DENTSP = 23 -XCORE_INS_DGETREG = 24 -XCORE_INS_DIVS = 25 -XCORE_INS_DIVU = 26 -XCORE_INS_DRESTSP = 27 -XCORE_INS_DRET = 28 -XCORE_INS_ECALLF = 29 -XCORE_INS_ECALLT = 30 -XCORE_INS_EDU = 31 -XCORE_INS_EEF = 32 -XCORE_INS_EET = 33 -XCORE_INS_EEU = 34 -XCORE_INS_ENDIN = 35 -XCORE_INS_ENTSP = 36 -XCORE_INS_EQ = 37 -XCORE_INS_EXTDP = 38 -XCORE_INS_EXTSP = 39 -XCORE_INS_FREER = 40 -XCORE_INS_FREET = 41 -XCORE_INS_GETD = 42 -XCORE_INS_GET = 43 -XCORE_INS_GETN = 44 -XCORE_INS_GETR = 45 -XCORE_INS_GETSR = 46 -XCORE_INS_GETST = 47 -XCORE_INS_GETTS = 48 -XCORE_INS_INCT = 49 -XCORE_INS_INIT = 50 -XCORE_INS_INPW = 51 -XCORE_INS_INSHR = 52 -XCORE_INS_INT = 53 -XCORE_INS_IN = 54 -XCORE_INS_KCALL = 55 -XCORE_INS_KENTSP = 56 -XCORE_INS_KRESTSP = 57 -XCORE_INS_KRET = 58 -XCORE_INS_LADD = 59 -XCORE_INS_LD16S = 60 -XCORE_INS_LD8U = 61 -XCORE_INS_LDA16 = 62 -XCORE_INS_LDAP = 63 -XCORE_INS_LDAW = 64 -XCORE_INS_LDC = 65 -XCORE_INS_LDW = 66 -XCORE_INS_LDIVU = 67 -XCORE_INS_LMUL = 68 -XCORE_INS_LSS = 69 -XCORE_INS_LSUB = 70 -XCORE_INS_LSU = 71 -XCORE_INS_MACCS = 72 -XCORE_INS_MACCU = 73 -XCORE_INS_MJOIN = 74 -XCORE_INS_MKMSK = 75 -XCORE_INS_MSYNC = 76 -XCORE_INS_MUL = 77 -XCORE_INS_NEG = 78 -XCORE_INS_NOT = 79 -XCORE_INS_OR = 80 -XCORE_INS_OUTCT = 81 -XCORE_INS_OUTPW = 82 -XCORE_INS_OUTSHR = 83 -XCORE_INS_OUTT = 84 -XCORE_INS_OUT = 85 -XCORE_INS_PEEK = 86 -XCORE_INS_REMS = 87 -XCORE_INS_REMU = 88 -XCORE_INS_RETSP = 89 -XCORE_INS_SETCLK = 90 -XCORE_INS_SET = 91 -XCORE_INS_SETC = 92 -XCORE_INS_SETD = 93 -XCORE_INS_SETEV = 94 -XCORE_INS_SETN = 95 -XCORE_INS_SETPSC = 96 -XCORE_INS_SETPT = 97 -XCORE_INS_SETRDY = 98 -XCORE_INS_SETSR = 99 -XCORE_INS_SETTW = 100 -XCORE_INS_SETV = 101 -XCORE_INS_SEXT = 102 -XCORE_INS_SHL = 103 -XCORE_INS_SHR = 104 -XCORE_INS_SSYNC = 105 -XCORE_INS_ST16 = 106 -XCORE_INS_ST8 = 107 -XCORE_INS_STW = 108 -XCORE_INS_SUB = 109 -XCORE_INS_SYNCR = 110 -XCORE_INS_TESTCT = 111 -XCORE_INS_TESTLCL = 112 -XCORE_INS_TESTWCT = 113 -XCORE_INS_TSETMR = 114 -XCORE_INS_START = 115 -XCORE_INS_WAITEF = 116 -XCORE_INS_WAITET = 117 -XCORE_INS_WAITEU = 118 -XCORE_INS_XOR = 119 -XCORE_INS_ZEXT = 120 -XCORE_INS_ENDING = 121 - -XCORE_GRP_INVALID = 0 -XCORE_GRP_JUMP = 1 -XCORE_GRP_ENDING = 2 diff --git a/.tools/python-revlibs/elftools/__init__.py b/.tools/python-revlibs/elftools/__init__.py deleted file mode 100644 index 56c7840..0000000 --- a/.tools/python-revlibs/elftools/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -__version__ = '0.33' diff --git a/.tools/python-revlibs/elftools/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index a77dbb6c3bfe087fa100634ee432ff614df4fe4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmd1j<>g`k0?xvqEN(^yhQ}ZdG60G(H~?`m2arf%h+;@#3}(<|s$wzFGdA|qWW2>4 zA77SQRGgWg7azZpp@<2n3{3nAcD9NMEe1-(L`68qI2IJRB$gz`_~a)i=EQ`g<`%>h zWESX_Bo?KomguG>r1G%dhWElq=02_ca3jhEB diff --git a/.tools/python-revlibs/elftools/common/__init__.py b/.tools/python-revlibs/elftools/common/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/elftools/common/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/common/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index dfea02fa2a75b6c0cfde027c3454c936db329023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 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 diff --git a/.tools/python-revlibs/elftools/common/__pycache__/exceptions.cpython-310.pyc b/.tools/python-revlibs/elftools/common/__pycache__/exceptions.cpython-310.pyc deleted file mode 100644 index 8969165e3e712794058b9f4b6495ce616883ed70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 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 diff --git a/.tools/python-revlibs/elftools/common/construct_utils.py b/.tools/python-revlibs/elftools/common/construct_utils.py deleted file mode 100644 index 2de640c..0000000 --- a/.tools/python-revlibs/elftools/common/construct_utils.py +++ /dev/null @@ -1,144 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: common/construct_utils.py -# -# Some complementary construct utilities -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from struct import Struct -from typing import IO, TYPE_CHECKING, Any, NoReturn - -from ..construct import ( - Subconstruct, ConstructError, ArrayError, SizeofError, Construct, StaticField, FieldError - ) - -if TYPE_CHECKING: - from collections.abc import Callable, Iterable - - from ..construct import Container - - -class RepeatUntilExcluding(Subconstruct): - """ A version of construct's RepeatUntil that doesn't include the last - element (which casued the repeat to exit) in the return value. - - Only parsing is currently implemented. - - P.S. removed some code duplication - """ - __slots__ = ("predicate",) - def __init__(self, predicate: Callable[[Any, Container], bool], subcon: Construct) -> None: - Subconstruct.__init__(self, subcon) - self.predicate = predicate - self._clear_flag(self.FLAG_COPY_CONTEXT) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> list[Any]: - obj = [] - try: - context_for_subcon = context - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - context_for_subcon = context.__copy__() - - while True: - subobj = self.subcon._parse(stream, context_for_subcon) - if self.predicate(subobj, context): - break - obj.append(subobj) - except ConstructError as ex: - raise ArrayError("missing terminator", ex) - return obj - def _build(self, obj: Iterable[Any], stream: IO[bytes], context: Container) -> NoReturn: - raise NotImplementedError('no building') - def _sizeof(self, context: Container) -> int: - raise SizeofError("can't calculate size") - - -class _NamedConstruct(Construct): - if TYPE_CHECKING: - name: str # instead of `str|None` from Construct to save us from `is None` checks everywhere - - -class ULEB128(_NamedConstruct): - """A construct based parser for ULEB128 encoding. - """ - def _parse(self, stream: IO[bytes], context: Container) -> int: - value = 0 - shift = 0 - while True: - data = stream.read(1) - if len(data) != 1: - raise FieldError("unexpected end of stream while parsing a ULEB128 encoded value") - b = data[0] - value |= (b & 0x7F) << shift - shift += 7 - if b & 0x80 == 0: - return value - - -class SLEB128(_NamedConstruct): - """A construct based parser for SLEB128 encoding. - """ - def _parse(self, stream: IO[bytes], context: Container) -> int: - value = 0 - shift = 0 - while True: - data = stream.read(1) - if len(data) != 1: - raise FieldError("unexpected end of stream while parsing a SLEB128 encoded value") - b = data[0] - value |= (b & 0x7F) << shift - shift += 7 - if b & 0x80 == 0: - return value | (~0 << shift) if b & 0x40 else value - - -class StreamOffset(_NamedConstruct): - """ - Captures the current stream offset - - Parameters: - * name - the name of the value - - Example: - StreamOffset("item_offset") - """ - __slots__ = () - def __init__(self, name: str) -> None: - Construct.__init__(self, name) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> int: - return stream.tell() - def _build(self, obj: None, stream: IO[bytes], context: Container) -> None: - context[self.name] = stream.tell() - def _sizeof(self, context: Container) -> int: - return 0 - -_UBInt24_packer = Struct(">BH") -_ULInt24_packer = Struct(" None: - StaticField.__init__(self, name, 3) - - def _parse(self, stream: IO[bytes], context: Container) -> int: - (h, l) = _UBInt24_packer.unpack(StaticField._parse(self, stream, context)) - return l | (h << 16) - - def _build(self, obj: int, stream: IO[bytes], context: Container) -> None: - StaticField._build(self, _UBInt24_packer.pack(obj >> 16, obj & 0xFFFF), stream, context) - -class ULInt24(StaticField): - """unsigned, little endian 24-bit integer""" - def __init__(self, name: str) -> None: - StaticField.__init__(self, name, 3) - - def _parse(self, stream: IO[bytes], context: Container) -> int: - (l, h) = _ULInt24_packer.unpack(StaticField._parse(self, stream, context)) - return l | (h << 16) - - def _build(self, obj: int, stream: IO[bytes], context: Container) -> None: - StaticField._build(self, _ULInt24_packer.pack(obj & 0xFFFF, obj >> 16), stream, context) diff --git a/.tools/python-revlibs/elftools/common/exceptions.py b/.tools/python-revlibs/elftools/common/exceptions.py deleted file mode 100644 index eb759bb..0000000 --- a/.tools/python-revlibs/elftools/common/exceptions.py +++ /dev/null @@ -1,22 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: common/exceptions.py -# -# Exception classes for elftools -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -class ELFError(Exception): - pass - -class ELFRelocationError(ELFError): - pass - -class ELFParseError(ELFError): - pass - -class ELFCompressionError(ELFError): - pass - -class DWARFError(Exception): - pass diff --git a/.tools/python-revlibs/elftools/common/utils.py b/.tools/python-revlibs/elftools/common/utils.py deleted file mode 100644 index 9ea57c3..0000000 --- a/.tools/python-revlibs/elftools/common/utils.py +++ /dev/null @@ -1,132 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: common/utils.py -# -# Miscellaneous utilities for elftools -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from contextlib import contextmanager -from typing import IO, TYPE_CHECKING, Any, TypeVar, overload - -from .exceptions import ELFParseError, ELFError, DWARFError -from ..construct import ConstructError -import os - -if TYPE_CHECKING: - from collections.abc import Iterator, Mapping - - from ..construct import Construct, FormatField - from ..dwarf.dwarfinfo import DebugSectionDescriptor - from .construct_utils import SLEB128, ULEB128, UBInt24, ULInt24 - - _T = TypeVar("_T") - _K = TypeVar("_K") - _V = TypeVar("_V") - - -def merge_dicts(*dicts: Mapping[_K, _V]) -> dict[_K, _V]: - "Given any number of dicts, merges them into a new one.""" - result: dict[_K, _V] = {} - for d in dicts: - result.update(d) - return result - -def bytes2str(b: bytes) -> str: - """Decode a bytes object into a string.""" - return b.decode('latin-1') - - -# Use @overload to get more specific type, e.g. [SU][BLN]{EB,Int}{8,16,24,32,64,128} -> int -@overload -def struct_parse(struct: FormatField[_T] | ULEB128 | SLEB128 | UBInt24 | ULInt24, stream: IO[bytes], stream_pos: int | None = ...) -> _T: ... -@overload -def struct_parse(struct: Construct, stream: IO[bytes], stream_pos: int | None = ...) -> Any: ... -def struct_parse(struct: Construct, stream: IO[bytes], stream_pos: int | None = None) -> Any: - """ Convenience function for using the given struct to parse a stream. - If stream_pos is provided, the stream is seeked to this position before - the parsing is done. Otherwise, the current position of the stream is - used. - Wraps the error thrown by construct with ELFParseError. - """ - try: - if stream_pos is not None: - stream.seek(stream_pos) - return struct.parse_stream(stream) - except ConstructError as e: - raise ELFParseError(str(e)) - - -def parse_cstring_from_stream(stream: IO[bytes], stream_pos: int | None = None) -> bytes | None: - """ Parse a C-string from the given stream. The string is returned without - the terminating \x00 byte. If the terminating byte wasn't found, None - is returned (the stream is exhausted). - If stream_pos is provided, the stream is seeked to this position before - the parsing is done. Otherwise, the current position of the stream is - used. - Note: a bytes object is returned here, because this is what's read from - the binary file. - """ - if stream_pos is not None: - stream.seek(stream_pos) - CHUNKSIZE = 64 - chunks = [] - while True: - chunk, sep, _tail = stream.read(CHUNKSIZE).partition(b'\x00') - chunks.append(chunk) - if sep: - return b''.join(chunks) - if len(chunk) < CHUNKSIZE: - return None - - -def elf_assert(cond: object, msg: str = '') -> None: - """ Assert that cond is True, otherwise raise ELFError(msg) - """ - _assert_with_exception(cond, msg, ELFError) - - -def dwarf_assert(cond: object, msg: str = '') -> None: - """ Assert that cond is True, otherwise raise DWARFError(msg) - """ - _assert_with_exception(cond, msg, DWARFError) - - -@contextmanager -def preserve_stream_pos(stream: IO[bytes]) -> Iterator[None]: - """ Usage: - # stream has some position FOO (return value of stream.tell()) - with preserve_stream_pos(stream): - # do stuff that manipulates the stream - # stream still has position FOO - """ - saved_pos = stream.tell() - yield - stream.seek(saved_pos) - - -def roundup(num: int, bits: int) -> int: - """ Round up a number to nearest multiple of 2^bits. The result is a number - where the least significant bits passed in bits are 0. - """ - return (num - 1 | (1 << bits) - 1) + 1 - - -def save_dwarf_section(section: DebugSectionDescriptor, filename: str) -> None: - """Debug helper: dump section contents into a file - Section is expected to be one of the debug_xxx_sec elements of DWARFInfo - """ - stream = section.stream - with preserve_stream_pos(stream), open(filename, 'wb') as file: - stream.seek(0, os.SEEK_SET) - data = stream.read(section.size) - file.write(data) - - -#------------------------- PRIVATE ------------------------- - -def _assert_with_exception(cond: object, msg: str, exception_type: type[BaseException]) -> None: - if not cond: - raise exception_type(msg) diff --git a/.tools/python-revlibs/elftools/construct/__init__.py b/.tools/python-revlibs/elftools/construct/__init__.py deleted file mode 100644 index 776b87c..0000000 --- a/.tools/python-revlibs/elftools/construct/__init__.py +++ /dev/null @@ -1,123 +0,0 @@ -""" - #### #### - ## #### ## ## #### ###### ##### ## ## #### ###### ## ## - ## ## ## ### ## ## ## ## ## ## ## ## ## #### ## - ## ## ## ###### ### ## ##### ## ## ## ## ## - ## ## ## ## ### ## ## ## ## ## ## ## ## ## - #### #### ## ## #### ## ## ## ##### #### ## ###### - - Parsing made even more fun (and faster too) - -Homepage: - http://construct.wikispaces.com (including online tutorial) - -Typical usage: - >>> from ..construct import * - -Hands-on example: - >>> from ..construct import * - >>> s = Struct("foo", - ... UBInt8("a"), - ... UBInt16("b"), - ... ) - >>> s.parse(b"\\x01\\x02\\x03") - Container({'a': 1, 'b': 515}) - >>> print(s.parse(b"\\x01\\x02\\x03")) - Container({'a': 1, 'b': 515}) - >>> s.build(Container(a=1, b=0x0203)) - b'\\x01\\x02\\x03' -""" -from __future__ import annotations - -from .lib.container import * -from .core import * -from .adapters import * -from .macros import * -from .debug import Probe, Debugger - - -#=============================================================================== -# Metadata -#=============================================================================== -__author__: str = "tomer filiba (tomerfiliba [at] gmail.com)" -__maintainer__: str = "Corbin Simpson " -__version__: str = "2.06" - -#=============================================================================== -# Shorthand expressions -#=============================================================================== -Bits = BitField -Byte = UBInt8 -Bytes = Field -Const = ConstAdapter -Tunnel = TunnelAdapter -Embed = Embedded - -#=============================================================================== -# Deprecated names -# Next scheduled name cleanout: 2.1 -#=============================================================================== -import functools -import warnings -from types import FunctionType -from typing import TYPE_CHECKING, TypeVar - -if TYPE_CHECKING: - from collections.abc import Callable - - from typing_extensions import ParamSpec - - _P = ParamSpec('_P') - _T = TypeVar('_T') - - -def deprecated(f: Callable[_P, _T]) -> Callable[_P, _T]: - assert isinstance(f, (FunctionType, type)) - @functools.wraps(f) - def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _T: - warnings.warn( - "This name is deprecated, use %s instead" % f.__name__, - DeprecationWarning, stacklevel=2) - return f(*args, **kwargs) - return wrapper - -MetaBytes = deprecated(MetaField) -GreedyRepeater = deprecated(GreedyRange) -OptionalGreedyRepeater = deprecated(OptionalGreedyRange) -Repeater = deprecated(Range) -StrictRepeater = deprecated(Array) -MetaRepeater = deprecated(Array) -OneOfValidator = deprecated(OneOf) -NoneOfValidator = deprecated(NoneOf) - -#=============================================================================== -# exposed names -#=============================================================================== -__all__ = [ - 'AdaptationError', 'Adapter', 'Alias', 'Aligned', 'AlignedStruct', - 'Anchor', 'Array', 'ArrayError', 'BFloat32', 'BFloat64', 'Bit', 'BitField', - 'BitIntegerAdapter', 'BitIntegerError', 'BitStruct', 'Bits', 'Bitwise', - 'Buffered', 'Byte', 'Bytes', 'CString', 'CStringAdapter', 'Const', - 'ConstAdapter', 'ConstError', 'Construct', 'ConstructError', 'Container', - 'Debugger', 'Embed', 'Embedded', 'EmbeddedBitStruct', 'Enum', 'ExprAdapter', - 'Field', 'FieldError', 'Flag', 'FlagsAdapter', 'FlagsContainer', - 'FlagsEnum', 'FormatField', 'GreedyRange', 'GreedyRepeater', - 'HexDumpAdapter', 'If', 'IfThenElse', 'IndexingAdapter', 'LFloat32', - 'LFloat64', 'LazyBound', 'LengthValueAdapter', 'ListContainer', - 'MappingAdapter', 'MappingError', 'MetaArray', 'MetaBytes', 'MetaField', - 'MetaRepeater', 'NFloat32', 'NFloat64', 'Nibble', 'NoneOf', - 'NoneOfValidator', 'Octet', 'OnDemand', 'OnDemandPointer', 'OneOf', - 'OneOfValidator', 'OpenRange', 'Optional', 'OptionalGreedyRange', - 'OptionalGreedyRepeater', 'PaddedStringAdapter', 'Padding', - 'PaddingAdapter', 'PaddingError', 'PascalString', 'Pass', 'Peek', - 'Pointer', 'PrefixedArray', 'Probe', 'Range', 'RangeError', 'Reconfig', - 'Rename', 'RepeatUntil', 'Repeater', 'Restream', 'SBInt16', 'SBInt32', - 'SBInt64', 'SBInt8', 'SLInt16', 'SLInt32', 'SLInt64', 'SLInt8', 'SNInt16', - 'SNInt32', 'SNInt64', 'SNInt8', 'Select', 'SelectError', 'Sequence', - 'SizeofError', 'SlicingAdapter', 'StaticField', 'StrictRepeater', 'String', - 'StringAdapter', 'Struct', 'Subconstruct', 'Switch', 'SwitchError', - 'SymmetricMapping', 'Terminator', 'TerminatorError', 'Tunnel', - 'TunnelAdapter', 'UBInt16', 'UBInt32', 'UBInt64', 'UBInt8', 'ULInt16', - 'ULInt32', 'ULInt64', 'ULInt8', 'UNInt16', 'UNInt32', 'UNInt64', 'UNInt8', - 'Union', 'ValidationError', 'Validator', 'Value', "Magic", -] diff --git a/.tools/python-revlibs/elftools/construct/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 9ff200445c4044b11fd3227ab18c560b0db54841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4240 zcmbss*=`)iab~&4>~as1vL#uHqA@LpyE3&Rbuf$~5u$iVvMG`fNhfJj81&BcE=QWn zJ-y};`6V(Cy*S^H1ObBlQorU&zo3U8RoydO+He8{8Di_|>ZGHH4S6W@C;&jrdJ5eus{l?;f;C4U~E_8Vuni@E-PFLDxpQJ zuu7_+UnVuL!p1%8zTs6#UC}k5$4Nuc_4@{Ek`|jFlWdBdV;_(Y*?Dq-T_hiY-$rnW zTvGTlxeT}&{4Bgeu7F+BYXv_Kuac{wO>EO(SNSWDO#~l@(_~t$PX?ca*T^+kyXH;3 zG0CUQ_RazRg?Guj;9dN#NM_g!YlEZ%_&VUv0M7!x0k{kJCg3^1^BKMc_%`r&0N(|? zFfhE2{%Vq6dW{{UbD2s=Ud@K*6L=8+9}k*9TbUtk5gGjhh@u?j;>>lnl)2YCM#eOc z`_UM3_$Z7ZlV#|13FJyess5BPwVdfFP26xA@DKfM@&r!y-G3IkWr2$Zpffv->m^ zjN2lPJGI)AIAjSOuzSkRfe^{Pn>XD!N(CRfqI>AS^3#O6EbY2+Xt({y4Tc_CkE6hk zm@S4P<~|L;)b4TOyEL$e>8ZV?r6s%1VPhAzXEtp=OkytV>);&1NpHlF&5mf81X&RO zeG?uLHB$S5y`zF`Pxs?^dR85v+wH0x>^*uKiN*Fbo$ma^!u&#ex_5S^qc$tE-2~Fd z+P&%hqq%wb-GblkX|1plM}oqsdHeS>bmpEtKWoqQ0N1an1i_HZg;e;-ptuhXKL@TO?FHD20SMjXx>Tk?%&DSP$)Y_&jQa(uESDfuG60-d2PzkCa&?Nr=?D9zf zF8ofP-1Sv-eGSCIcxig(TjOQnydlQCf;aa4m-1?ZfxRsP_&%Kz?eepzf;x`a#esN(;h^;4@BT5h-ao4w`Zt zIklRZf*0@`t<)*-55Wk(0N@`cpF(83f3b3Je=mg>w@-e%vcH@pt5neajTlNhB#du> zw-m1e#e!uP&GNsRV<(qK$L-z^&||vP&Gb8E9qf77q9W!Okvh$OrzC4W^hZcXkI4La$K23oS{6WM#(#Qzi&`5bXa^dTerDe|PF{vq}O<0fCgP4lj zw@5}U+#zF+d?76W>plxSG6@uPKL%fR?yofxX){$2XlJqrB!mL+&`%kd9rpW-GY=My z1(PL&u)YH7P%xyK5t(UOg65P8Syw3cS5sW(O3^q?U~fJI)RL?MuNx{aV^T|NVGkTz z3VD#1$(%Y9?pibq$@tn)lAlhN^to#aY0Jg+fDT9io&^ z$DA?m_&JRROg1xyB@DhUPMS~H(dsZv^5Ykt_DSt&fA@ezYXPLM^)&L>5hN=2YHggp zFipV=t8UPf<45r@^2pQ%iw5H0OBxJWzNN9@r(zUm^BH^yXDrq;K1=U2Ca5Y9Sw&L4 zE={U@$T~`&=kZ&cr{QP{!YOb1J!qn`yctJqt1nv`LrlI$VZ4*lmMfSb)>gF2LYUd4 zl~da>v~vcPx}|nD6&h`S5T;m zF(dNK)iYkF2DlV@gWfBPz@?JuBZO;1s5%W|AISv6?QUQ~iLfVq`oVjt- z_Xni>oMEFR<2s{zk?;cv%UO84*N1oN$y7D2F)t019NkWeZ} zpvq>hf`n2*La89J2-aA@;Nu$CSl7R`!@eFeXmB9*Pgva7=Vf`7{NUR4-hON_%(w205H37?StdnC>jAZm#zC@>)wF&N>!p7KJ`$yF diff --git a/.tools/python-revlibs/elftools/construct/__pycache__/adapters.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/__pycache__/adapters.cpython-310.pyc deleted file mode 100644 index db00b8863e5d0fc69b9c1d3b6b5759f5b8f07300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22047 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 MYkdFs&WT6<8?_Lp*#H0l diff --git a/.tools/python-revlibs/elftools/construct/__pycache__/core.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/__pycache__/core.cpython-310.pyc deleted file mode 100644 index c7cf2e4e38ef93805ee6783aec4dfe3a1ede5011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49423 zcmeHwdvsjKdEdUVSOOqOf^UktgdPMa5TZyuDUt>Vku+rrWJpS~AkoXk-V1W6#V$Cz zAc-|7JEmPbsqHv%Tqlv!kj|rJ+NOEBP1>I0q&aDuq|LLhO`AvErgfi5m2=$Cj@94q zo0c$8A+$gJ@eU_?0oM`?|g11H@|9T)qLMf z-+cc}|NOwr!2If&)yS82Gv&egH8X4G*Uqe+UpKQZ9`kzDag^Ir9-3c2vwnWV%!c`m zGaIGMYJ>_j_@Fz&(ijgYtbE z_lMkf;r?A-8j$V7{e(M-`$>8KIPMR-Q@EeACp?1 z!u`A5CqqAS;EE$bAR~0IiYQ0b|RVy{z_8eZSd$r>y zk<6T_tHok{G}}xZKiTX*`^u>!`KfmwnR?Ih>0{00WM!$DK3b|2%FUi*Ud2{Ov# zF3gs_X7)IXWvb_e!ootSasl9_&UocH{NH=HR0pJ9VZNEjpB;U$Ie%~hwp z1+P$lu~ILURSL*#X3uz+7rjc+Yo=eUp!?8a0w(?!2%9~ps-+4r*G!%Ayw{uAla=SZ z`9j5QW)CmU&3Vd0>a+)Fi94hK>|E(WGc#E!UIgCKFBQs*UbFWE`sHwS5#OcrrwX+i zisN-vK4^P07o>|ESm7UgegY);twAKb*i77w%_Q9TOwvtYASTsDJiZ;9zMX1j^Z80) z-pl8kxqN=U>MoXaJ5D_85ad|o|^4};5{SElyA_F~Obwby3eJN4S+ z!oqWfdf~Mb)ncLi+F5UY;kAX*!tQ!OUGVC==ZfxPe$S<+Un`epUt3tJU#wPM!*Hrs ztL56Gey1U&yzzx40dW|$y+y=lW7)Vo>Dp4YAKB2dO%}jub-*SAfYl_QG0%fc9JY6N zEp{_=vhgbv%RCP=pA^fxyB52J+3!*;^Nje#^6sw1ZoP+MnP-<@Ebs1G?6!L-mU+hf zVtIGhV(+_$Vwq>$FP3+AEq41o6w5q&{9<``*JAI#hhmv$uU{qtar z=uFB@&ZOPcOvX*m^thRstUC$TNueY?)9X&TYuvS9^Eoh13LdGMRY+0fNX_)QN8HWs z7Nq*YMk!XLW(M42?)|QV)M~I&3JabTEFNir#k0=%Q*g&uZ`zSmQu~B&RzngcaXY34u_0O4w$9mmK2`jrUY7F z07Wj;J$K9jX?03?TlH$pCglWK=NHP}yjQ6^3k6jJ3zO`#i>0!Qn=z+W<+rG+ObUgv zs})}6PzOjjsI(MUuR1kwl`;shQ?eyiRRFc;c-N30Y}r`^Ep#SN9pA58EQ{STfBNG-Q*nQFpDkxR-VqZ5z{i=d>c=F~1$7t5~Ts(Qs!s^oeO&>g@w?;)dG z8+VQagI>WMlX42c8ao9*6BC6ig^~yWK@0LkUZ@HA7HIQPz|hgklcLJNZ^4->7cN9m zlCOF7JRb)w&KJvGLA5?CRZvz*=dFb@mufbrG+`2B0Ar%=%`I|NEi9pPL*VDZeB^aL zA1Z@D1W$E2^|~s}EaK%IO$wH+#HW7W_=BkPhI6AcuBbCj2^Rr;9@+Brp9U}}=ph%Iiph_MJny%K_!G*f?vQ$$nR2;7) z-8qX&r680kV;!|jS1ah4xgbA4;MA&kp6j{e&ZNURQuZ9k9jKd(*clnl506T3N@||u*0}Mj&`Z}8espukFU-oLX-2k%U6fYK3p@?aMA`c9Yj!SVqGR)uw z)UH=6s?tKebOq((v8wB8t`y28*C_xa&MA={91L)ffw_{W%t$U{d@o+O$oADdM?sQ7 zZi0q3dKKWgh*nxs0HEjzOw`mR(3?ExXcXAl;FcBe2~T_m!B zHJ^0pW*lYLN>$RMvrDM1Sgs1i@w3((5E9n|2GG|W84Ieq0CW_qi0Ou&z_2vqTWuRnERp$X6D5MZ4EAmPu0Mk=aT2Q$jcpboU<_k*><^o2+Rf7@? z6`7789ncogn^G1APYqpxA>$R%s|B@Wa0zi5ISZtWV;o*bPfQ-mPn|sV3NF)UkG%IR zhYxBPbCihF9M)G$m@EsVs0Ep^w)yBfB3FhxCx%xjUIdK>A0S%BoU0d0d=LUc=8u)K zEuGihqWZyszMSBN-1f^^Tt*Yk6o+avi)v&_D$2_0C@yz$m@Lk+%#&tXUN)0p1-3cZm<->Ly-K)HW^0ZzkR3 zE#^zPDf@0YmQODyaLu?eaM1L0<35?z^NY1Q2BlLVf#BpabGaGM--#b+^hYM;Xiqa$ zhyK@0B6G8ss-V`A&^XM^8YgBmCu)W~mzJwz03GUIss@2vKRJ#kEpjt;g;E9dIKPOO zwEiOo_Yl6c?Oq*wA>8tY56l#K^*7RXp)T*F_3Bl&_q7gNZ;|ZH2%6uXi9!T3jGb8$E2razozKi`P|Ad!)2 zJnut(a+cOIV8Iu-mdLtDW+8BZ{zhehog((sy`aY<5CXCod+-b)97f_Iy5U^^^*C9C z3wUoNG1^iXZHezlUd~;nfhM6QkWt14?Sl|t3y@7g3KQddn#p3hHj}I^&9{!7-UFE6 zAR`NhZsTjA&zV>vk&CDPB#}&fJ^OZJG&FodV)6KaGA%Z>L*sr4q@-*S6Wwgg zI@_3%-G>bSo0go{NPVTcJFBj~341Kh0`hW=iIP(D2*=RxIuK zQM{3nF&t~`x-0DdXD|bu#Fxz;ShQ4?ECF|@k{qL%7E_k4PimG*VeksngdbqFgSceU z*+k~+iF7WWczZCB`g&tSXCRtswyYMJexxWInNt>3VEVCJG4yrrwZ!$r^<*6k59~g9 zBMIt~GSuaeKMFN}2@9Kcpiz*tQ&d!#VB~?;G}Dlm=4&8zX4IrK#i;@o!FMwaS$ffH z9X-GRzA!4$Paw0ND%ZGf=l(rVgM>am-`*l%GTQtSauP2Gx-qAqJ9 zgsDZVbx0CynO~#nW=2~D*r5^eip%ss|rL`jo@pZyiZ0IRyFo)LKtVzqvQgwA=T!su|qN2N6>k{gu zmHl8~U|jS`CSz7mBufTw>MGK$SW8RpFXD}eQ3Kh=>R{~4yJiL?8D{J|y~j_!DhNAw zcVv+|+=$&Gk&8FJr4?Bea8Y6iLq|){;>H}9k@;V(T6`U2G>jSj1*vikiWD>x3Qz1r z(Z`^9x@FJx>wyZ@4Luoc=TPiciM0UDXvXrAW7v6 zd5g5P9=j3yQ2ciM&Z9n@oyX8uTrGululBS29$ zZS9AT;n|l6H_6ISDm<3LxF{0w_Q$jxJ?ewFQQyqV4P0&;LLXqNQ|EsiIq8Q~e+8FF z*Grw#cQ_ifx6r7@W4j=&;CcYR`Ju)ETjSMIvhQzJ-%NPnN$X!eK#W7Ig zu|}$%Tu$7Ge+c=nC*DY0jbFtyD|`Ws@v#i&V{x$zL!KxXG%Ip4%Y@bAXUwU>G6WMC zt-_1iqHFC1A);}nig|+xh+cs+wWdvRm8vsWx&||fluOb|8Y&jw*DKYltg?hz#!6{< z(AG2drB?7RE>>Q*q~%#=25}EnAqEXqC~1-p^DBzbrZ$+CR6wX{i=y2FaM1E0mW~kQ zMqNCA-tUC-=WVwAHUY<+P&jSMB8dA958W?{rr^wj?X7YFMmUQ>A6OsV`vu;bb0+Z5 z?hh~zyOc2}i&f6ptpZXyJ(`lC4W>+_Rp*+$N3In;=^sVs7bZ3ZF2zyUjJL@f8U58C z;H}77*?~+v0dv9trf>FxiMPXJQ)i6~M9vxhaUi}$%TAr5G=>*w_lI!X*mk;b)d3n? z2La340d<-n-ZtuVr-|}yc%R1Tl-Ze0H`e%NjhhCK#>I9tn$cqHyYYb%v&r*Jy@!_* zxS$eApF$cq6V*MM15fkJ?eOA%*PeG4?`>%=(fy1!iCbITP?zSy{63s+3b@?&%H7|`NHujgeTBOdE|w|N1mI}Z>Eo&Ig1zz zHNnze_5WcGZDpREFij-D;2QM5-A>!|=I?~}! z<7I6RF4Wh z6*sy)ZWcbeG(wW-Po$4=v+*bPAS_Ay6SM9H@bRr`2g+)Er_hVZSEtvI92E$SA4Y?(Q2gu-X`+mKmnB+KzjP*pD_Z-L!|^~drl8eP?!$S|7L<;gHO z%Hogl!iqp#gr-TQEn*e3uaBcM$)jl!ZLFu0&QhSjA{xw+U|4ffwaF+fNa!0UB5kB( zt(3Mbpb6c23UultytIJC7n=Z*7UAQKby0vsVwLIHCS&**)8dh>dRg!lV9Ed>L;VvS z0N{%)7J#8P07T?aoXu@r#&Ild??b}2ol2JOB2%%j!o2|Gn-WZCuTr(8X zn_K+Y;l(Gs>brUSJ-mDlm)pH9ghqWYUrq2LLqyOoDCj!TcOY{g!C_CzMDNMPF})K5 z37KU@JdXU>{E4p9c*yN_b25$ByZ!EfOydpiYIhK+9)tqu0D-K#4%2v}8b(=-kI207 zr*VN{Se}AR0a>c%PQ?3 zwGBv!NfuVjo0zcmJC-=0x?t|#gk2{%BgUr(y-b@=&U^N=U>ZBas92K~OBnik=)vCfF;*2#D1ptI-B zdhZ(C(g<*I9zu-E90LK70<}7Ws+%d;NZe);A4((}G-R1jKZ181O*wrqfEHY%SwBvk z^dV~&94ZHSdkEr&`bqy=8TM?h{oO;;VF9xZ-VA3a8!S)!2FGCcOVH*goa67JXww$; z<48*@n(3B<`?atGG#ZQd6`)gzKF^FGy%61XZ%vAi(xdA?UEDrr1*)nDmR# zQFS9E=E(RIP`ZgZCjpQ8A$;Cg8-Zm78OI{1Mkh3Cg};yPG1}t;>tn-lY;+d3}R;%5lmvK{wd%w@kxvOMG zZ8wri7Qu*IPmw|>qvLLLHzAdCcVO;qMQWA14fAbSJ&2+Uq*eZu<1CVJC&bv)ob%_k zUJvsK^n!%~yqA<$7AumZ{nv;oXFM;Q84BVeBLcObo#GDT327#RSqZjd1S+Y*oOt>0 z5|KY9=E6q%wM}nPYK+Atn6aU3Ud1gT-X9?|par_f;E^f)SyU{xE`&ynIm3r=0c67m zhr=X;Bt;jn-znHoEmNW&T_qn-J0c!nhN96ydwqI!t)=?XoegHqz^gkC>>P7;9^&QT z&U4L-E-ge;I7RG_X`cs@_ADpd_?5WffeG?Jkp1M1xSIs$TL;dVBDW*&TTX5S=L6MA z)>AjraC>orCog5Fd~vEF)@3w#Cw@pxqu4v~gN=uLU>(aCVTA&afRr!;I{;htBYR_1 za@aU7B9bFPhjQX3grU(MVW7fvnwe7?LqCHuWSk3GLkJAWI=BGB>^% zF)@@i4ghD68WPir@Pa}=fd8~9f}mMLR+Ud%z^vd|nP8IMG}Kjx(cEWTJESS)-HjJy@7kejiS z!a%MT;dv~FVu1j90EtFFsq0OSKpAg0Ac7EZW13EhX&NICrs*`tElks~>&Z8gG))uJ z>?Vk+M0hi!DT@}AguZ?Xk418^gGGR(G}}yg*IHXkv9-q5lEWq9TLLrZ+DKP)VON}Y ze%lV=rZM0%EQ}C{S1`GgalI__35NI7(smf$Q>Jw?6VbZV8!5I<>(H4HYm-K%NHkQ? zu(X~9qD}a%Q@?=fTbuWBJi8V&Z(FzK2}hhB&FYyY#7U;tKV+FQ$K;u40+dA6XL>E zFA)_(NaUz^mYO>MDKmd$Sf@NvTgFMth%!St(u4{c9Lc@($ zLs~&MN4KA81cQTViL7f74;?zB8!$fZ8{rthkC0;LFvNB#Rx(wq&OzslNC6|mbJgmw zc3_T=k4ufrJTj~+86J(k^Oui}3{&U;<1QEGXI-?Tehp2mUwhSlcuubYV4*r?svegq zKQcS~+O<9VCJ#>y>$g+Z3peuqox19s`<;DYf2;<{*`3I{^Lp2!9>?qFRx0c9ma?9+ zg~6?y(>1c6LcWb(#<04x1x`BY%U56ZK|DuuZ~a_IZs2IPKc+1Md21Lq?Yao8ItUE8 zl=4-?H<2x3hGpH_8vlKKW$YYB`BYv7Gf^fXXY8jj3B|$Qhv3vfgnRgX6|iHWYS&px zV1}SqBf?nN0AKJK#EsTaV2lMrY12{!oR6@`7MMsjK1-M|F~RT}gCTgjkbR=fuUV^c z)KXA0f`_|kDpG$pP35~$zxrX68mV2V^2%mdQMkqUCXp_}K-4dxpsotbo3^P?57&g6 z+DTy%nEyFT^C>?VZ>P?Y_v|6?5aCNqch7l(Z$HONSA~bf@(sWm7>d?`R;R>J#CJvf zMSdI(6QI;@b)?i=d`i95r_|ewU!@1?kXCrI?q*Qx?doBaRrn{UT~lfV9db3SGh!p< zM@do(h?%GtcEcfCsp~j?olAVqIyj!oeBhlaFG)G)B`as|$SCw9P;#snd6^;i+Cv>I zxuuVqYcw3JUZq+D3W^02VsO$C8dRSU8CZ4Xn=wZg#tLyh9juM*Y7zF~fHMaxfeZ`L zYFu3iJ`Ek9&Jyr1i#sqAv^%H+2VmyFSmJ|hv@e4?sZ*217FUvX7*Su;=yf{aNwbb4 zdO3r3NO9~+>qo+*{fRN>#ly!d^`|w*7}YgG^Xl~*t$qW&t7KT;V#?vgAK+~y#;1|v z$Y*Gzj;x{P#A)x-NTi`fL4S&eO%*-jO3>1ZRQ*0y_}6(k$4i)U%6oyTg-Vff{ul*>ZM8k4vr&6|j+Jogemy^=W#LWzi{Wp6MHz-!b<&>Lv3c{?;SKIJ%Y&m%bqA#!J+vCx1JAU_g_&bQq z*`@OknXwy1qqp7*D`t8*MGNL~hN>-u=gb=!iCQtHThTt%kD^VZImL$S{uZPj<1I1Y z%wX|6lv(W@zQV^FdD)5!)KSqgh0Y28Aw_G(i_Nr*p^lO^xd?-1Y8)jQ=yHfn6={1D zh0L#~dJ|ts^=7|1r0>#+ucp!iUten?D*T}w@pQ0{iX46RM=6*Orznq-zzX39%ekJ? z!H&x*X!z@8U5j}Vn0letqiZjvC)j~;guC`#=U7dm6S=x2DcuN7Y5k{GapJA$H zBJ%C80xZq0g@YOp0uCx4cOx(>X-qO)zlXK1%pA#|K2O{XAR&IselW*$Zg3zcysL=E zkzW#b6J6DqEyfy{cDEWIWd@6swWYnCIqpPRg|!%rnmK}bVRwk#1#(Eu1`R=v@WENH ze$~T*oby;^C$mTlgy-iA*Yur~Wmw{I!~A4{V(0^(v-r#qYu6atRnz=W7EZPB$72es zD3=2Ec+v!_g`OKWd6tWY^xEd##R3AxEVCbXG*87MK4y`1MT=N(MH3daGAz5P)g9Ze zpdmUOc5#86&9>8WeKZj|k!J(5oNBR%<%Z74k&{Qq99dH-mQX27qSi*oq;?Av*8tWb zJw#AtL4dgxFLij`ERZgx)E0|~!mVK~E@JdVuH`cA5aPIePq1lSCeVlw7U%8P>=r85 zS+23v5r06=q3&o)u?bKyv2qgP5eOA`*FCk^AV5$BEJF8`VKV~l?x~Jag=7osiH|{7 z+>3R&&I4Ha4nJY7zTbJ|__67er;p^1ym#uzsk6sVPUoLHa(43g390BTVt2e*TFFP| zs~ALBOAl#Joc~Z*YxPl!d#I=Kfj}hVd_RVOaYpVN9|wTi9l1AXKpSM#WR2?i>SJTh z-Z5w2xw~Y?Cy(Rr3H&|T^68iZRTbjalkcPql=D=#a)9P{S`>|YvOHs zp@tH$Ie#$m)kdEgF@b?euWAau77^+P+11-6e#$)aYnHU^VU%ucy>j1hmK- z-s?9+zc^14*Heun?2=2OoMJE?5%GS@^>iIWr=G>~zs5w3ZhP8>%1CVe{{S zCh-Z0;s-B+Xd}TyX0NyCCCyw3(h1hoVGj`{mMULS5jD^bkEpgXlPp&1>ff@sU*M&M zIIxH<93K0T*oICYjA!0XCA1a@=^VoX%kjUKWxNyKF+G44jLfG8$H3bXUvGzoQ292O zA1V<2PkkB*c*7b)ST3NKKqfadutD)%S6xN@I^MzIB`#C zc^F%^z%f!52^s5wvEY=8RZ8&iGlA`auq6PN_SdTmq5WB;G)nXow5*{Gq0_RJMX?}T zhVZqnf(20KmQ7cn!ju=WHw&s@ol=r^icof6#FArqbjsSy{1EB@I2zu9yG|y!5lGr& z)(AJ+!R&TcE&BV$ux+qJqQ$aN0pxVpCdD6r6lOv!+^I@Qr3!(AD32|VjFzUuxm#^; zrUem$+XH%g5C*NuwlNm#voU8xFj9kRr0s25VUi8{taVPehTa#XoP!6Q+2NRR=n$Tx z496N7X23)Z-kQgZ-A-Vo_0GqY`i~e6cbvf8fwkvjTu`DHN5SX875C>l4cUkVEQw;Q zl%akTH`@6cHrBBw)k#<|ZVq`bQ=^3xP)<04Nv8fK5{;n{Hdd4o?(~+ivCFHnn4aL- zAMHLqBls@dT!5U=cp4;~fl(m%6L4?#>bO^UoMDnnQ5Jw9j)uCFFCL{Bm8+b~J1(!% z+&uhE*Zli+-pdbx>-Q|Z2ZS5TZyM=(77>H^j_B<)?7!nNk7{DJR{lRwQiLWJ6 zu)h5)LGnX#Qnoaq{QMm z1U$pN9#4Ed@xg40e9zvel3CjAqF5I`*V)U3asy_k{sZn-W^D8LKz#|>8tWn*YnfX{ zh==-5EJ)DeFy*tfm3&*jkDNA^;lJ=J8JsOHO24GLnD5BZ_7Q2m`EF3mcWVdM2)8TZ zedNdSH^K3C7>TwhgruALTpT_uE;-0x4bgTJfsjE+pZ06@Af!(R@?|BEZ-;D~TKG=D zAQW~IMjX9?Dji#l832j5c9j|yc$em}{Tw!zAs5w)H^KU*%lA*NHngFFW`ANh93yJRF#*?ZX z6rp{20z-kfA|u>H%Ep`>$>b!3yio0LC#M_f0}%BNAxi!QfCin4 z)GmY-kp^z^nMeb~8GIvW`JjdKpXW1Cyjn2H4?jgrI!IuBGX7-}#3p$?13vq(%?|%1 zK8Wbbev99L(YI^e#3}!Ty|aAaGzpw$m!V+;mswyfrUn^OD_G>XAr?m?SR95S1o;^r zdOclP2h5~_v6$Kg-8GH=pyw3NZX|$Bjl;BHyhrdTtNAXkqpphuDUIBLMFuK^3LR4a z9T1%bSC_#h2$c~Q;F4&Rjdf(9YiF*m&NEXdgp!?qo(QGZEa>!+Nwi|H0-=NP)K>yz zuE4)J?~tg zSlSlcd^5_!USNo}xrsfcZpB~1yv1H%)|ZDtM@JpvZ|Crzv=@&)z_bjZNu-*+2k7s) zwxACEB%4fV6Cd0ZYwWP&M9U4KZJ2C+%yYj3u%qANyk02&8Nd8LWQvst7(d41Wnck^ zo3M;5T7e&U`EGt7{pm0zRm?KwlQv9{u7Zb*hI>%R+0Hs4@}-XI&bK7|1)5#a7y@W6~xT2)ga~~V5<@~Q(~N)z`21Ac!v6=pX|+}|%P*4%I7no%IATT4 zx!Rtu5D8EbJ?I3!FOsC#Uk?&K1N{(g?#4j54giK{Vv2a%NtWoxsyys7($w`#Wewg? z^oXf(8i6alFkq+fZDtw%1iqsn0^DU7(IW9G8-*qOPk;fe`3P&K7@yaQHnL7^Lko#q z^G*{7^iezxB$AmP2sQHcc|PyPM1P04-HsfViRx96z_PH>tYxDi%nBo&)^^n|<4Z_P z2U*1-Uf#va_wq8qi}Wy=b*Nu`#wLXK3j`pC91(ff~@<~KGluJ~)cvuJQv(P0+$GOjCMQA=$1|80g zm}dKdm>p@4t$}aIK0D9q4+L%eLa!}i7NIf5z$uW7Fw&j+(mZUvp3+-q)57~swM+q6 zirfV?i)BGEWR>PdYnO<-9{0v|#D=k~iaD79BNkk8H7N)Ro!MUrjgYeHIE1DwTOOI3 zjLu3OG}sQ?JnRq|`6978GJF+!X&#|6c|-=NysTjj8C*rZ+qZXQ7%Q{#F4fwwZl?tl zC}~%#dA_4fR=%LVC+J1);EC1%hetzdo-Ltc5onGeIsMtWYyuF~~1L|`14^@+pL3kvgb+b@e~4V;w()9F2a{E^DAQ3(!Ol zl1_41PM{I_^YWh8O_L-20a>B1>}-TRAS25N_^yb*$d9<3ARb*LEIZVzsBxMYwN>m` z?4@v$TH3>5FgR@t$H90w4(0&Px|_*jeRXy&;XW+UlROq?r#bE==Z?sUaa>D1>OSB; zh*i~n?n9X7yVN77s&ElC3-y|$g)cbuK*7Lwaoo`dT4@&?&ZMf+sRzDOWTYa@vUAmP z8N21p;+BhSr69f!yCunrVZx-dQ6dMi^`3lAZ(#w4df9_p@Z1_B#hodIA(MnYju}WK z2u*`Ci)t8#*=ow=*;wzC!P2-X=18e@mxWi%ubsT4f&;ry0k%)GHq8-ZtvQ%LigJ8d zwPzP?53s0U-h?5QZuFY(AZ1$HkGX>}w>QLIvGYcZ0UqU02OnMpV-gm5u6Kb2hu7;q z9PJfm{3tBNzIB${>!P!;_o?j^(`Ji&nw)J~I)WVy=(XHqYLinJuzR5n|1-8;0bLug z9j+ze_J*~^g@tlS_c2`AW=lXHE4l}}7i~*>rMd_#RRj)#K=Ocf`GLE@VYdSuECqL~ zyHWE+$Td5yHQl(*^Jp^q)Y{6CnINKh=Do$GHC~5@vFT0>W|Bh`K29uQ_eD7~Nc`QM z+}D9XViyvIg$8KytgkO9B2M9=lup2mZX1=Is1Lfd2OLEA1>48*=zHN z@w`i>eKr$iv~DFmZZkdkc;`&leE=i!P#e`tTB=8yXsI4z!S%LuNt~>?%IyQiO2M_H zH>gXyH1Z5J)@V$P=clXB=~GZT@XQbZ9wc1=&o{{ALoHWM~}75G5k4tS=V751^)I5~D~@fR>i?n`yS3 zqCRc&jO$D#;N3874kYe7PS8XQDl=rzQ2!<(lXHOhGWqkkLE~aLbO;`cIyPmg<(|jx z;>&TIIgq*@uV6qRP(+q;As>BhG>2snlmla!4)E0mtzc+mm2~>=q3C8>Knt*<`q}9+ znkm%V@gO9?$BG(2re=!ss*@)0BGJ-^uQ?1jiw6-?6CkDwg~LZdvmM;9*-%ByVk_LC zhk2+5d)e0((PNyK8f+P`0y{~KT~p3}RBM>2r3;zq9AV|)+5kx5UNN0#iDO?2eNeqD zM{3M5wc@k~@&skq34lOBRYH>m?j31KD~`dwm#C1@{#MfZy)4e*g+x*zA}FSQk+&1P zh-!Ox>MJ_LW};yOzT*BCgZB^iAp8^osC{p9f7*epr1GQ;Duxv}LAEF0T~RMx!@BEhg4LqUZT;Bz8;=o5JL;wf#I6J>+O zE@Q$Hc^?`{T??aSSv$>TN_7a_a@3ePg^luN_!~r~=)h0zE~Hf$t8h$X<&qzE*?qCn zH>#clmbnmYlw%3{i1?^><9M1H!ZK}arncXvpU1lu5VyO zFi~kSA_)7I#2OZVmD@gIa7d}LWS?6To)!rDEZ=9VkB-I_BjZE!JCDJqXOp~WVc{5* z^20a6j5zp@aqu%TB*MbUuKjf;cZ&>h@O3CCL~1VZS-_IRTUW_@0knmdak4LQ5|bV2 z1tumkM3BES3*M&r6Bv^@AwZwY)PWUK0Pe-#6kE3`DsesYa;!3dFwoS}191p85N)s&MF*I^61$wd3Uo>0RO10)=Si&J+WR`pA2}9TQqU*9thjrJX!*-&>l33~?i>A~*$w32AC4(+$1#YWy?{qjfjRDqI47 zg~?3e?4Jv;s|ml<3x=`aN-tXgce4j*Rp;j5Jfs1S#}+fQZ)t-iPD(O|({jTSXQ7OR zv^x3`i;@v?-lYa{F~XWqs=?Z+ZBl;Z=_Kr|RUBsLpIXXTN_%sviq*@WGK}#Xl`eGa zXwT%Hk?+W^$pdd|)iTbKH9T8S7{?;98_Jxka&Sn1E&1HW$wCYX1Q=^(gt78`04esY z>ELTT(>-?78m{sS8h4hT(+p3z)h2lT8*zLfgA&n^?%E^vjU=#nk;nV+^uP)jr}Zcgd_goYfzpgxkj4 zCz@)9Q56`q?!q`oyMLH%_Zi1}aNH!c$&BK=BK{&jHgkf*^AHkk+9cK>$W|k1Xp-Cf ztw!$i_u<+e*@x?X@!=MJ3OJOxeF`ggvEhV1-&d2p{W?aFCs*^7aX4_uUZ^p3;4dxo zUi%)og$DCtGaxEPq0gWUA?So|F>)b9rl5M1tjUt~Gx6x@KO?4KG`3bs%xckSL#`w4 z?~Wc6lfw@*84n#$j^_Ex2rv<$K{0{_4P~GXxUV=*c-mp1LLADtW&$}1@X+kW0?H0N zfc-KeI$d_-Jb|5L_u88-MA3J4&6qPpfHi`-xoVeylQLPA`0hP6zH|b*%9>u4H zkE2$hB9jai&@S3)Ww-0iQ_zJd)>s-13_~x6gYme6S|6n+hr*gu_)g#p-@O9T0?MrH zdCVjj3tH|Ia~LQrcSz-ts&#CR1M!>=U+j$tzpdFGQ3j0*&WuP zdhW2Ma}e}%^T?HF4Gc0m$(M3)knS)XDsJiVFS690}jDkP@_J$U4TGl?Cr>S zM;$)EEu7%tW-qnrEdOuR6U&JV&oPV4%sC$&nU2X4W}j9eA^(wr96y+WT*$6-(<1^g z3f5p58aa%hBy$31$0-BAzH#nTAK1kZgQBP7z&gSt?==sTaF-~Lw zO_5k^Ln30&q!UtHZ24qByHgHejRO6qzA3PJGxyFe33Zp2q5+dH2FV*1*g|0YO4XX><4cn z)7c4lma47Cad&B$Y|Z;ie(bu*(W4%Pena1I0=7Cx7P`@VD;@bDyDX=EkF5@xE}WRX zIn(PCAElTlijS_`dNZ3(9;Fv>ZvYZDk!y#LAQJ*d>Yn9-G#M?9UqLWfCFPIUmG~^7 zw|rJwvLc^F&V#J(5HIiIMI31pOmT4DB}Ses@hjknqN_@b{6_HM6!wAVnIKwq7Z#VNZgxcx|SXdapi znm{%kcm+0~E?_qj9sx(r2TGb=v7%x4|zne{--wZH%XZ9Onda(|w#4U+!h3077Y)%zHdTVb*HrNvskrca-7-wleKSob*7XclS!b|A8r)~K z`x$M6#bRu-lz=zLFAVfe)B@X+&F!QNH9b3|F`pq!Es*fVdjN?( z7i}=;0;?+LTBeuc`ImYoNs7}+?c&Af>0)wJJk{|o)+bs=9wYOI5iT>;gOv^E2G$!au znY#@M?@XRK4G$vFJpT^l8G#JWH2F@>^%NdYVAx@HphdIklQkgS{v7(g9Ub zkq24to0U(70`lL ztrVTQ&O9mlBPgM<#&*p+6BK;#A4F-wV8B>Hfw>S05ECRJ&ET>rDiDJtjainpm3$XpslNA{3-1DE!sj0Y>MYPLjJ=aI!*8wo=*qI+^bCwGiux-6|?Uk^Rjxxm?rf|yo!TfMhDNIvkc)f!&g1ZJw zVB2;Jy`}J8UDvCN(P@B8&_>J>2J+55RxcD-JAR^D(eja06WPSeBFO}3`iqce3s~;1 zYtfVgC=bU=-r}u;OEU}L1Oi#?*~|qX1)^RX-Sg+*IEt`}(sJTbLS`Om9~34C<>C=T z%7hCBf_Emg!r>TU5r8Ca@_o3qv+}6_YA+g~_VLmp+L91{JBKVaCv3he(FY`mx^sMj z2#b}%=X%p%Sk9#Acl+f#Oi3lrGbJ@i%9nRx!&=$$6aXfvNhuMR4_WB+ksX6^nFVcA zDT%BTG~(joPo*vg`3{+dSv{~e=}@dJP90q1u7x$K*IkFHwo&avF@+Zr{#4__LmhxM z%(bOeHSCONRteLN4#mQLv)aurwjL9OB~BRFeBfHKj))g)Sb2v%8Yowbb%OFCR#QTV zyFwcVgSb!?;<`-Gl3xQ{G582?;B2nhZTm>sWUivi^z1jHY3OqixSfNT;RM}zq_sMk z8Z5}qlh-C6NKx`hUR!1)pD*&-Fbgg7eWUSRVG6?SDh&0}^>^@~pXnGyH7VeZ40BO$ zIC#ps+AW^*8qeV@ra5i#RV|+YdkDQ6X9a#`tkeA{}_yuMrek+jjyvB7sH79USB< z>T`mX$zr28)@=LLCUmtz4L;GKZZiF!WZkbI(eUdQX7BGfh*#1y(w8Yr;d}L5e}M&y z=X$_4%5wP?mY)!_w@s)I8-5QlqM&zOX&0p#z4C;3*82pAA)ymJBT@M*pq4dba-Ql& zbDnBq0QE?lgK-@L>f$FX99o5ti9O4qzHH){!>iN`4}1;S~{v@RpEAQ(Gqq}bHpU~=^& z(5V+n`HZh^7ISjRF#i`wXxTa);^$I?u=4N2dmFYRGfZ9u<4Ra08Tc=8BK!&xjR9$x z&$T;_ZLW1{1B&E@KuNrwRSOJpQBSZ{-AK!?u<~DH<$b2|F4_m%?N>8|8>t2|PA9S= zOYwrQIb23p-3#Sl zABH?{UC9S$>`wzS2~-mDF<{7tKH`(_i};KDi1GIx~Aa!9`vVm@&gw4zoog!`zt6pV|8%b5$c# zm}l?68{={sH`9Uz&6uTsp8}TdYz(|0aDhx&8S7q72yP1~a53iX0;zzBrb4ry^jNXp z$i(M^R<_PTlZ7Usu&gN7SnIcW#mV0`?=hP6ydOpao&oT7Y!rvXXc#^WVC9(&)w9Az zQu$!&VcU&1^Z`Dj@6$}t7z{zV0+qm58mN)G0;R1L0WQO!QTXWUsviu4HWUSI1w!Hz zFy}6y1I0?7ZYS;>!NIz%=6Ri6OdNb2GH&}O42hfashy7B zrR~1#)vFckm!h5dT%;Agn-JZsEtWSNNhtLUt5yJzwd(lKw z#z9v#KqPaHIs0Q8h||-9lh+^mdPIE$k6OnT1=F1vTPDggFIx=dSD1fR&vn8D!va(;rw~ani*$Oktw&q@?{zv?l^qa!<+z=_O$kObOXE{leO!s3VdhV|eucp#j{nP-H^VnxO;7Su}!s%+$CLo_0Wi1tY>2N9TPeQSqd zVVLRTLRn<6;tl~1h@h3`IgTI7PfdRpND{#M^Pv@IJ%!@|c_hrAnqrV@Oi{YufCLQ( z2#1TS-g?|k$Z2QL=SPz|7O=6wKS$2=qqcHky8IYER`>Jr5nh6kDT9)OcY=eG8ZlS= z@X(Tc0DRcu&}M9~6i4mnn19nRz8i&^;)E0m6RqOUkj@-o6`}&Hi?qUUVs(I!`g41w zz`E9H?YAzN(VR?=5qW(`_-7L*VHDsS^$aeNAiy8t)4;%bjqkG|Z7+B)krjL&2nnM{ zNZaP*XbaFd;=Y+c^czPB4we?Pn%)lbi}D2iJ&Qb|=f)4nrKlm!^rNhC zI@`rZtk&}bj^SocK93l9K>sN|+Q`c$UN-Z>)#!36x!T6meY|YvMFy|K)DB)K^Xh1w zFEI50FAwta5HAn&vXd8zp|U@)+Qrl(yo~X(o0oB39_3{ZFOTs;sw(yzMV(9}Dxum! zjJ3JQ@7T~p@&`mSdtkomE|$GR7-g}Vi^~8u8S0CV#Bm&A0;dBd`V!e>HZiz*FcJMX zkcoX@@WsJ(x%Ij1V9$nigCm0v4n8(`esFT|@ZkOpql51rJU+N<@B#eo9(;Uo{f6Pe Oi9u&@!(d`)!~X^6GOH^9 diff --git a/.tools/python-revlibs/elftools/construct/__pycache__/debug.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/__pycache__/debug.cpython-310.pyc deleted file mode 100644 index e0364c3cddf37e5fa3cfed3707fb88080757b465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4964 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 diff --git a/.tools/python-revlibs/elftools/construct/__pycache__/macros.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/__pycache__/macros.cpython-310.pyc deleted file mode 100644 index 803fb1d8a2ca1c6ce7372c7e42be6d0b279eea62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25699 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 Y?0t3Ro#}hvmGNq3pm+JQ>y|J5zglP!m;e9( diff --git a/.tools/python-revlibs/elftools/construct/adapters.py b/.tools/python-revlibs/elftools/construct/adapters.py deleted file mode 100644 index 0e56953..0000000 --- a/.tools/python-revlibs/elftools/construct/adapters.py +++ /dev/null @@ -1,500 +0,0 @@ -from __future__ import annotations - -from io import BytesIO -from typing import TYPE_CHECKING, Any, Literal - -from .core import Adapter, AdaptationError, Pass -from .lib import int_to_bin, bin_to_int, swap_bytes -from .lib import FlagsContainer, HexString - -if TYPE_CHECKING: - from collections.abc import Callable, Hashable, Mapping, Sized - - from .core import Construct, _Pass - from .lib import Container, ListContainer - - -__all__ = [ - "BitIntegerError", "MappingError", "ConstError", "ValidationError", "PaddingError", - "BitIntegerAdapter", "MappingAdapter", "FlagsAdapter", "StringAdapter", "PaddedStringAdapter", - "LengthValueAdapter", "CStringAdapter", "TunnelAdapter", "ExprAdapter", "HexDumpAdapter", "ConstAdapter", - "SlicingAdapter", "IndexingAdapter", "PaddingAdapter", - "Validator", "OneOf", "NoneOf", -] - - -#=============================================================================== -# exceptions -#=============================================================================== -class BitIntegerError(AdaptationError): - __slots__ = () -class MappingError(AdaptationError): - __slots__ = () -class ConstError(AdaptationError): - __slots__ = () -class ValidationError(AdaptationError): - __slots__ = () -class PaddingError(AdaptationError): - __slots__ = () - -#=============================================================================== -# adapters -#=============================================================================== -class BitIntegerAdapter(Adapter): - """ - Adapter for bit-integers (converts bitstrings to integers, and vice versa). - See BitField. - - Parameters: - * subcon - the subcon to adapt - * width - the size of the subcon, in bits - * swapped - whether to swap byte order (little endian/big endian). - default is False (big endian) - * signed - whether the value is signed (two's complement). the default - is False (unsigned) - * bytesize - number of bits per byte, used for byte-swapping (if swapped). - default is 8. - """ - __slots__ = ("width", "swapped", "signed", "bytesize") - def __init__(self, subcon: Construct, width: int, swapped: bool = False, signed: bool = False, - bytesize: int = 8) -> None: - Adapter.__init__(self, subcon) - self.width = width - self.swapped = swapped - self.signed = signed - self.bytesize = bytesize - def _encode(self, obj: int, context: Container) -> bytes: - if obj < 0 and not self.signed: - raise BitIntegerError("object is negative, but field is not signed", - obj) - obj2 = int_to_bin(obj, width = self.width) - if self.swapped: - obj2 = swap_bytes(obj2, bytesize = self.bytesize) - return obj2 - def _decode(self, obj: bytes, context: Container) -> int: - if self.swapped: - obj = swap_bytes(obj, bytesize = self.bytesize) - return bin_to_int(obj, signed = self.signed) - -class MappingAdapter(Adapter): - """ - Adapter that maps objects to other objects. - See SymmetricMapping and Enum. - - Parameters: - * subcon - the subcon to map - * decoding - the decoding (parsing) mapping (a dict) - * encoding - the encoding (building) mapping (a dict) - * decdefault - the default return value when the object is not found - in the decoding mapping. if no object is given, an exception is raised. - if `Pass` is used, the unmapped object will be passed as-is - * encdefault - the default return value when the object is not found - in the encoding mapping. if no object is given, an exception is raised. - if `Pass` is used, the unmapped object will be passed as-is - """ - __slots__ = ("encoding", "decoding", "encdefault", "decdefault") - def __init__(self, subcon: Construct, decoding: Mapping[Any, Any], encoding: Mapping[Any, Any], - decdefault: Hashable | _Pass = NotImplemented, - encdefault: Hashable | _Pass = NotImplemented, - ) -> None: - Adapter.__init__(self, subcon) - self.decoding = decoding - self.encoding = encoding - self.decdefault = decdefault - self.encdefault = encdefault - def _encode(self, obj: Hashable, context: Container) -> Hashable: - try: - return self.encoding[obj] - except (KeyError, TypeError): - if self.encdefault is NotImplemented: - raise MappingError("no encoding mapping for %r [%s]" % ( - obj, self.subcon.name)) - if self.encdefault is Pass: - return obj - return self.encdefault - def _decode(self, obj: Hashable, context: Container) -> Hashable: - try: - return self.decoding[obj] - except (KeyError, TypeError): - if self.decdefault is NotImplemented: - raise MappingError("no decoding mapping for %r [%s]" % ( - obj, self.subcon.name)) - if self.decdefault is Pass: - return obj - return self.decdefault - -class FlagsAdapter(Adapter): - """ - Adapter for flag fields. Each flag is extracted from the number, resulting - in a FlagsContainer object. Not intended for direct usage. - See FlagsEnum. - - Parameters - * subcon - the subcon to extract - * flags - a dictionary mapping flag-names to their value - """ - __slots__ = ("flags",) - def __init__(self, subcon: Construct, flags: dict[str, int]) -> None: - Adapter.__init__(self, subcon) - self.flags = flags - def _encode(self, obj: FlagsContainer, context: Container) -> int: - flags = 0 - for name, value in self.flags.items(): - if getattr(obj, name, False): - flags |= value - return flags - def _decode(self, obj: int, context: Container) -> FlagsContainer: - obj2 = FlagsContainer() - for name, value in self.flags.items(): - setattr(obj2, name, bool(obj & value)) - return obj2 - -class StringAdapter(Adapter): - """ - Adapter for strings. Converts a sequence of characters into a python - string, and optionally handles character encoding. - See String. - - Parameters: - * subcon - the subcon to convert - * encoding - the character encoding name (e.g., "utf8"), or None to - return raw bytes (usually 8-bit ASCII). - """ - __slots__ = ("encoding",) - def __init__(self, subcon: Construct, encoding: str | None = None) -> None: - Adapter.__init__(self, subcon) - self.encoding = encoding - def _encode(self, obj: bytes | str, context: Container) -> bytes: - if self.encoding: - assert isinstance(obj, str) - obj = obj.encode(self.encoding) - assert isinstance(obj, bytes) - return obj - def _decode(self, obj: bytes, context: Container) -> bytes | str: - if self.encoding: - return obj.decode(self.encoding) - return obj - -class PaddedStringAdapter(Adapter): - r""" - Adapter for padded strings. - See String. - - Parameters: - * subcon - the subcon to adapt - * padchar - the padding character. default is b"\x00". - * paddir - the direction where padding is placed ("right", "left", or - "center"). the default is "right". - * trimdir - the direction where trimming will take place ("right" or - "left"). the default is "right". trimming is only meaningful for - building, when the given string is too long. - """ - __slots__ = ("padchar", "paddir", "trimdir") - def __init__(self, subcon: Construct, padchar: bytes = b"\x00", paddir: Literal["right", "left", "center"] = "right", - trimdir: Literal["right", "left"] = "right") -> None: - if paddir not in ("right", "left", "center"): - raise ValueError("paddir must be 'right', 'left' or 'center'", - paddir) - if trimdir not in ("right", "left"): - raise ValueError("trimdir must be 'right' or 'left'", trimdir) - Adapter.__init__(self, subcon) - self.padchar = padchar - self.paddir = paddir - self.trimdir = trimdir - def _decode(self, obj: bytes, context: Container) -> bytes: - if self.paddir == "right": - obj = obj.rstrip(self.padchar) - elif self.paddir == "left": - obj = obj.lstrip(self.padchar) - else: - obj = obj.strip(self.padchar) - return obj - def _encode(self, obj: bytes, context: Container) -> bytes: - size = self._sizeof(context) - if self.paddir == "right": - obj = obj.ljust(size, self.padchar) - elif self.paddir == "left": - obj = obj.rjust(size, self.padchar) - else: - obj = obj.center(size, self.padchar) - if len(obj) > size: - if self.trimdir == "right": - obj = obj[:size] - else: - obj = obj[-size:] - return obj - -class LengthValueAdapter(Adapter): - """ - Adapter for length-value pairs. It extracts only the value from the - pair, and calculates the length based on the value. - See PrefixedArray and PascalString. - - Parameters: - * subcon - the subcon returning a length-value pair - """ - __slots__ = () - def _encode(self, obj: Sized, context: Container) -> tuple[int, Sized]: - return (len(obj), obj) - def _decode(self, obj: tuple[int, Sized] | ListContainer, context: Container) -> Sized: - return obj[1] - -class CStringAdapter(StringAdapter): - r""" - Adapter for C-style strings (strings terminated by a terminator char). - - Parameters: - * subcon - the subcon to convert - * terminators - a sequence of terminator chars. default is b"\x00". - * encoding - the character encoding to use (e.g., "utf8"), or None to - return raw-bytes. the terminator characters are not affected by the - encoding. - """ - __slots__ = ("terminators",) - def __init__(self, subcon: Construct, terminators: bytes = b"\x00", encoding: str | None = None) -> None: - StringAdapter.__init__(self, subcon, encoding = encoding) - self.terminators = terminators - def _encode(self, obj: bytes | str, context: Container) -> bytes: - return StringAdapter._encode(self, obj, context) + self.terminators[0:1] - def _decode(self, obj: list[bytes], context: Container) -> bytes | str: # type: ignore[override] # ty: ignore[invalid-method-override] - # This violates the Liskov Substitution Principle: should be `obj: bytes`, but RepeatUntil() converts `bytes` to `list[byte]` - return StringAdapter._decode(self, b''.join(obj[:-1]), context) - -class TunnelAdapter(Adapter): - """ - Adapter for tunneling (as in protocol tunneling). A tunnel is construct - nested upon another (layering). For parsing, the lower layer first parses - the data (note: it must return a string!), then the upper layer is called - to parse that data (bottom-up). For building it works in a top-down manner; - first the upper layer builds the data, then the lower layer takes it and - writes it to the stream. - - Parameters: - * subcon - the lower layer subcon - * inner_subcon - the upper layer (tunneled/nested) subcon - - Example: - # a pascal string containing compressed data (zlib encoding), so first - # the string is read, decompressed, and finally re-parsed as an array - # of UBInt16 - TunnelAdapter( - PascalString("data", encoding = "zlib"), - GreedyRange(UBInt16("elements")) - ) - """ - __slots__ = ("inner_subcon",) - def __init__(self, subcon: Construct, inner_subcon: Construct) -> None: - Adapter.__init__(self, subcon) - self.inner_subcon = inner_subcon - def _decode(self, obj: bytes, context: Container) -> Any: - return self.inner_subcon._parse(BytesIO(obj), context) - def _encode(self, obj: Any, context: Container) -> bytes: - stream = BytesIO() - self.inner_subcon._build(obj, stream, context) - return stream.getvalue() - -class ExprAdapter(Adapter): - """ - A generic adapter that accepts 'encoder' and 'decoder' as parameters. You - can use ExprAdapter instead of writing a full-blown class when only a - simple expression is needed. - - Parameters: - * subcon - the subcon to adapt - * encoder - a function that takes (obj, context) and returns an encoded - version of obj - * decoder - a function that takes (obj, context) and returns a decoded - version of obj - - Example: - ExprAdapter(UBInt8("foo"), - encoder = lambda obj, ctx: obj / 4, - decoder = lambda obj, ctx: obj * 4, - ) - """ - __slots__ = ("__encode", "__decode") - def __init__(self, subcon: Construct, encoder: Callable[[Any, Container], bytes], decoder: Callable[[bytes, Container], Any]) -> None: - Adapter.__init__(self, subcon) - self.__encode = encoder - self.__decode = decoder - def _encode(self, obj: Any, context: Container) -> Any: - return self.__encode(obj, context) - def _decode(self, obj: Any, context: Container) -> Any: - return self.__decode(obj, context) - -class HexDumpAdapter(Adapter): - """ - Adapter for hex-dumping strings. It returns a HexString, which is a string - """ - __slots__ = ("linesize",) - def __init__(self, subcon: Construct, linesize: int = 16) -> None: - Adapter.__init__(self, subcon) - self.linesize = linesize - def _encode(self, obj: Any, context: Container) -> Any: - return obj - def _decode(self, obj: bytes, context: Container) -> HexString: - return HexString(obj, linesize = self.linesize) - -class ConstAdapter(Adapter): - """ - Adapter for enforcing a constant value ("magic numbers"). When decoding, - the return value is checked; when building, the value is substituted in. - - Parameters: - * subcon - the subcon to validate - * value - the expected value - - Example: - Const(Field("signature", 2), "MZ") - """ - __slots__ = ("value",) - def __init__(self, subcon: Construct, value: object) -> None: - Adapter.__init__(self, subcon) - self.value = value - def _encode(self, obj: object, context: Container) -> object: - if obj is None or obj == self.value: - return self.value - else: - raise ConstError("expected %r, found %r" % (self.value, obj)) - def _decode(self, obj: object, context: Container) -> object: - if obj != self.value: - raise ConstError("expected %r, found %r" % (self.value, obj)) - return obj - -class SlicingAdapter(Adapter): - """ - Adapter for slicing a list (getting a slice from that list) - - Parameters: - * subcon - the subcon to slice - * start - start index - * stop - stop index (or None for up-to-end) - * step - step (or None for every element) - """ - __slots__ = ("start", "stop", "step") - def __init__(self, subcon: Construct, start: int, stop: int | None = None) -> None: - Adapter.__init__(self, subcon) - self.start = start - self.stop = stop - def _encode(self, obj: list[Any], context: Container) -> list[Any]: - if self.start is None: - return obj - return [None] * self.start + obj - def _decode(self, obj: list[Any], context: Container) -> list[Any]: - return obj[self.start:self.stop] - -class IndexingAdapter(Adapter): - """ - Adapter for indexing a list (getting a single item from that list) - - Parameters: - * subcon - the subcon to index - * index - the index of the list to get - """ - __slots__ = ("index",) - def __init__(self, subcon: Construct, index: int) -> None: - Adapter.__init__(self, subcon) - if type(index) is not int: - raise TypeError("index must be an integer", type(index)) - self.index = index - def _encode(self, obj: Any, context: Container) -> list[Any]: - return [None] * self.index + [obj] - def _decode(self, obj: list[Any], context: Container) -> Any: - return obj[self.index] - -class PaddingAdapter(Adapter): - r""" - Adapter for padding. - - Parameters: - * subcon - the subcon to pad - * pattern - the padding pattern (character as byte). default is b"\x00" - * strict - whether or not to verify, during parsing, that the given - padding matches the padding pattern. default is False (unstrict) - """ - __slots__ = ("pattern", "strict") - def __init__(self, subcon: Construct, pattern: bytes = b"\x00", strict: bool = False) -> None: - Adapter.__init__(self, subcon) - self.pattern = pattern - self.strict = strict - def _encode(self, obj: None, context: Container) -> bytes: - return self._sizeof(context) * self.pattern - def _decode(self, obj: bytes, context: Container) -> bytes: - if self.strict: - expected = self._sizeof(context) * self.pattern - if obj != expected: - raise PaddingError("expected %r, found %r" % (expected, obj)) - return obj - - -#=============================================================================== -# validators -#=============================================================================== -class Validator(Adapter): - """ - Abstract class: validates a condition on the encoded/decoded object. - Override _validate(obj, context) in deriving classes. - - Parameters: - * subcon - the subcon to validate - """ - __slots__ = () - def _decode(self, obj: object, context: Container) -> object: - if not self._validate(obj, context): - raise ValidationError("invalid object", obj) - return obj - def _encode(self, obj: object, context: Container) -> object: - return self._decode(obj, context) - def _validate(self, obj: object, context: Container) -> bool: - raise NotImplementedError() - -class OneOf(Validator): - """ - Validates that the object is one of the listed values. - - :param ``Construct`` subcon: object to validate - :param iterable valids: a set of valid values - - >>> from ..construct import UBInt8 - >>> OneOf(UBInt8("foo"), [4,5,6,7]).parse(b"\\x05") - 5 - >>> OneOf(UBInt8("foo"), [4,5,6,7]).parse(b"\\x08") # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - ValidationError: ('invalid object', 8) - >>> - >>> OneOf(UBInt8("foo"), [4,5,6,7]).build(5) - b'\\x05' - >>> OneOf(UBInt8("foo"), [4,5,6,7]).build(9) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - ValidationError: ('invalid object', 9) - """ - __slots__ = ("valids",) - def __init__(self, subcon: Construct, valids: list[object]) -> None: - Validator.__init__(self, subcon) - self.valids = valids - def _validate(self, obj: object, context: Container) -> bool: - return obj in self.valids - -class NoneOf(Validator): - """ - Validates that the object is none of the listed values. - - :param ``Construct`` subcon: object to validate - :param iterable invalids: a set of invalid values - - >>> from ..construct import UBInt8 - >>> NoneOf(UBInt8("foo"), [4,5,6,7]).parse(b"\\x08") - 8 - >>> NoneOf(UBInt8("foo"), [4,5,6,7]).parse(b"\\x06") # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - ValidationError: ('invalid object', 6) - """ - __slots__ = ("invalids",) - def __init__(self, subcon: Construct, invalids: list[object]) -> None: - Validator.__init__(self, subcon) - self.invalids = invalids - def _validate(self, obj: object, context: Container) -> bool: - return obj not in self.invalids diff --git a/.tools/python-revlibs/elftools/construct/core.py b/.tools/python-revlibs/elftools/construct/core.py deleted file mode 100644 index fb02a09..0000000 --- a/.tools/python-revlibs/elftools/construct/core.py +++ /dev/null @@ -1,1351 +0,0 @@ -from __future__ import annotations - -from io import BytesIO -from struct import Struct as Packer -from typing import IO, TYPE_CHECKING, Any, Final, Generic, Literal, NoReturn, TypeVar - -from .lib import Container, ListContainer, LazyContainer - -if TYPE_CHECKING: - from collections.abc import Callable, Iterable, Mapping - - from typing_extensions import Self # 3.11+ - - from .lib.bitstream import BitStream - - -_T = TypeVar("_T") - -__all__ = [ - "ConstructError", "FieldError", "SizeofError", "AdaptationError", "ArrayError", "RangeError", "SwitchError", "SelectError", "TerminatorError", - "Construct", "Subconstruct", "Adapter", - "StaticField", "FormatField", "MetaField", "MetaArray", "Range", "RepeatUntil", - "Struct", "Sequence", "Union", - "Switch", "Select", - "Pointer", "Peek", "OnDemand", "Buffered", "Restream", - "Reconfig", "Anchor", "Value", "LazyBound", - "_Pass", "Pass", "_Terminator", "Terminator", -] - - -#=============================================================================== -# exceptions -#=============================================================================== -class ConstructError(Exception): - __slots__ = () -class FieldError(ConstructError): - __slots__ = () -class SizeofError(ConstructError): - __slots__ = () -class AdaptationError(ConstructError): - __slots__ = () -class ArrayError(ConstructError): - __slots__ = () -class RangeError(ConstructError): - __slots__ = () -class SwitchError(ConstructError): - __slots__ = () -class SelectError(ConstructError): - __slots__ = () -class TerminatorError(ConstructError): - __slots__ = () - -#=============================================================================== -# abstract constructs -#=============================================================================== -class Construct: - """ - The mother of all constructs. - - This object is generally not directly instantiated, and it does not - directly implement parsing and building, so it is largely only of interest - to subclass implementors. - - The external user API: - - * parse() - * parse_stream() - * build() - * build_stream() - * sizeof() - - Subclass authors should not override the external methods. Instead, - another API is available: - - * _parse() - * _build() - * _sizeof() - - There is also a flag API: - - * _set_flag() - * _clear_flag() - * _inherit_flags() - * _is_flag() - - And stateful copying: - - * __getstate__() - * __setstate__() - - Attributes and Inheritance - ========================== - - All constructs have a name and flags. The name is used for naming struct - members and context dictionaries. Note that the name can either be a - string, or None if the name is not needed. A single underscore ("_") is a - reserved name, and so are names starting with a less-than character ("<"). - The name should be descriptive, short, and valid as a Python identifier, - although these rules are not enforced. - - The flags specify additional behavioral information about this construct. - Flags are used by enclosing constructs to determine a proper course of - action. Flags are inherited by default, from inner subconstructs to outer - constructs. The enclosing construct may set new flags or clear existing - ones, as necessary. - - For example, if FLAG_COPY_CONTEXT is set, repeaters will pass a copy of - the context for each iteration, which is necessary for OnDemand parsing. - """ - - FLAG_COPY_CONTEXT = 0x0001 - FLAG_DYNAMIC = 0x0002 - FLAG_EMBED = 0x0004 - FLAG_NESTING = 0x0008 - - __slots__ = ("name", "conflags") - def __init__(self, name: str | None, flags: int = 0) -> None: - if name is not None: - if type(name) is not str: - raise TypeError("name must be a string or None", name) - if name == "_" or name.startswith("<"): - raise ValueError("reserved name", name) - self.name = name - self.conflags = flags - - def __repr__(self) -> str: - return "%s(%r)" % (self.__class__.__name__, self.name) - - def _set_flag(self, flag: int) -> None: - """ - Set the given flag or flags. - - :param int flag: flag to set; may be OR'd combination of flags - """ - - self.conflags |= flag - - def _clear_flag(self, flag: int) -> None: - """ - Clear the given flag or flags. - - :param int flag: flag to clear; may be OR'd combination of flags - """ - - self.conflags &= ~flag - - def _inherit_flags(self, *subcons: Construct) -> None: - """ - Pull flags from subconstructs. - """ - - for sc in subcons: - self._set_flag(sc.conflags) - - def _is_flag(self, flag: int) -> bool: - """ - Check whether a given flag is set. - - :param int flag: flag to check - """ - - return bool(self.conflags & flag) - - def __getstate__(self) -> dict[str, Any]: - """ - Obtain a dictionary representing this construct's state. - """ - - slots = { - sym - for cls in type(self).__mro__ - for sym in getattr(cls, "__slots__", ()) - } - return { - **getattr(self, "__dict__", {}), - **{name: getattr(self, name) for name in slots if hasattr(self, name)}, - } - - def __setstate__(self, attrs: dict[str, Any]) -> None: - """ - Set this construct's state to a given state. - """ - for name, value in attrs.items(): - setattr(self, name, value) - - def __copy__(self) -> Self: - """returns a copy of this construct""" - self2 = object.__new__(self.__class__) - self2.__setstate__(self.__getstate__()) - return self2 - - def parse(self, data: bytes) -> Any: - """ - Parse an in-memory buffer. - - Strings, buffers, memoryviews, and other complete buffers can be - parsed with this method. - """ - - return self.parse_stream(BytesIO(data)) - - def parse_stream(self, stream: IO[bytes]) -> Any: - """ - Parse a stream. - - Files, pipes, sockets, and other streaming sources of data are handled - by this method. - """ - - return self._parse(stream, Container()) - - def _parse(self, stream: IO[bytes], context: Container) -> Any: - """ - Override me in your subclass. - """ - - raise NotImplementedError() - - def build(self, obj: Any) -> bytes: - """ - Build an object in memory. - """ - stream = BytesIO() - self.build_stream(obj, stream) - return stream.getvalue() - - def build_stream(self, obj: Any, stream: IO[bytes]) -> None: - """ - Build an object directly into a stream. - """ - self._build(obj, stream, Container()) - - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - """ - Override me in your subclass. - """ - - raise NotImplementedError() - - def sizeof(self, context: Container | None = None) -> int: - """ - Calculate the size of this object, optionally using a context. - - Some constructs have no fixed size and can only know their size for a - given hunk of data; these constructs will raise an error if they are - not passed a context. - - :param ``Container`` context: contextual data - - :returns: int of the length of this construct - :raises SizeofError: the size could not be determined - """ - - if context is None: - context = Container() - try: - return self._sizeof(context) - except Exception as e: - raise SizeofError(e) - - def _sizeof(self, context: Container) -> int: - """ - Override me in your subclass. - """ - - raise SizeofError("Raw Constructs have no size!") - -class Subconstruct(Construct): - """ - Abstract subconstruct (wraps an inner construct, inheriting its - name and flags). - - Parameters: - * subcon - the construct to wrap - """ - __slots__ = ("subcon",) - def __init__(self, subcon: Construct) -> None: - Construct.__init__(self, subcon.name, subcon.conflags) - self.subcon = subcon - def _parse(self, stream: IO[bytes], context: Container) -> Any: - return self.subcon._parse(stream, context) - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - self.subcon._build(obj, stream, context) - def _sizeof(self, context: Container) -> int: - return self.subcon._sizeof(context) - -class Adapter(Subconstruct): - """ - Abstract adapter: calls _decode for parsing and _encode for building. - - Parameters: - * subcon - the construct to wrap - """ - __slots__ = () - def _parse(self, stream: IO[bytes], context: Container) -> Any: - return self._decode(self.subcon._parse(stream, context), context) - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - self.subcon._build(self._encode(obj, context), stream, context) - def _decode(self, obj: Any, context: Container) -> Any: - raise NotImplementedError() - def _encode(self, obj: Any, context: Container) -> Any: - raise NotImplementedError() - - -#=============================================================================== -# Fields -#=============================================================================== -def _read_stream(stream: IO[bytes], length: int) -> bytes: - if length < 0: - raise ValueError("length must be >= 0", length) - data = stream.read(length) - if len(data) != length: - raise FieldError("expected %d, found %d" % (length, len(data))) - return data - -def _write_stream(stream: IO[bytes], length: int, data: bytes) -> None: - if length < 0: - raise ValueError("length must be >= 0", length) - if len(data) != length: - raise FieldError("expected %d, found %d" % (length, len(data))) - stream.write(data) - -class StaticField(Construct): - """ - A fixed-size byte field. - - :param str name: field name - :param int length: number of bytes in the field - """ - - __slots__ = ("length",) - def __init__(self, name: str | None, length: int) -> None: - Construct.__init__(self, name) - self.length = length - def _parse(self, stream: IO[bytes], context: Container) -> Any: - return _read_stream(stream, self.length) - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - _write_stream(stream, self.length, obj) - def _sizeof(self, context: Container) -> int: - return self.length - -class FormatField(StaticField, Generic[_T]): - """ - A field that uses ``struct`` to pack and unpack data. - - See ``struct`` documentation for instructions on crafting format strings. - - :param str name: name of the field - :param str endianness: format endianness string; one of "<", ">", or "=" - :param str format: a single format character - """ - - __slots__ = ("packer",) - if TYPE_CHECKING: - name: str - def __init__(self, name: str, endianity: Literal["<", ">", "="], format: str) -> None: - if endianity not in (">", "<", "="): - raise ValueError("endianity must be be '=', '<', or '>'", - endianity) - if len(format) != 1: - raise ValueError("must specify one and only one format char") - self.packer = Packer(endianity + format) - StaticField.__init__(self, name, self.packer.size) - def __getstate__(self) -> dict[str, Any]: - attrs = StaticField.__getstate__(self) - attrs["packer"] = attrs["packer"].format - return attrs - def __setstate__(self, attrs: dict[str, Any]) -> None: - attrs["packer"] = Packer(attrs["packer"]) - return StaticField.__setstate__(self, attrs) - def _parse(self, stream: IO[bytes], context: Container) -> _T: - try: - return self.packer.unpack(_read_stream(stream, self.length))[0] - except Exception as ex: - raise FieldError(ex) - def _build(self, obj: _T, stream: IO[bytes], context: Container) -> None: - try: - _write_stream(stream, self.length, self.packer.pack(obj)) - except Exception as ex: - raise FieldError(ex) - -class MetaField(Construct): - """ - A variable-length field. The length is obtained at runtime from a - function. - - :param str name: name of the field - :param callable lengthfunc: callable that takes a context and returns - length as an int - - >>> from ..construct import Byte - >>> foo = Struct("foo", - ... Byte("length"), - ... MetaField("data", lambda ctx: ctx["length"]) - ... ) - >>> foo.parse(b"\\x03ABC") - Container({'length': 3, 'data': b'ABC'}) - >>> foo.parse(b"\\x04ABCD") - Container({'length': 4, 'data': b'ABCD'}) - """ - - __slots__ = ("lengthfunc",) - def __init__(self, name: str | None, lengthfunc: Callable[[Container], int]) -> None: - Construct.__init__(self, name) - self.lengthfunc = lengthfunc - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> bytes: - return _read_stream(stream, self.lengthfunc(context)) - def _build(self, obj: bytes, stream: IO[bytes], context: Container) -> None: - _write_stream(stream, self.lengthfunc(context), obj) - def _sizeof(self, context: Container) -> int: - return self.lengthfunc(context) - - -#=============================================================================== -# arrays and repeaters -#=============================================================================== -class MetaArray(Subconstruct): - """ - An array (repeater) of a meta-count. The array will iterate exactly - `countfunc()` times. Will raise ArrayError if less elements are found. - See also Array, Range and RepeatUntil. - - Parameters: - * countfunc - a function that takes the context as a parameter and returns - the number of elements of the array (count) - * subcon - the subcon to repeat `countfunc()` times - - Example: - MetaArray(lambda ctx: 5, UBInt8("foo")) - """ - __slots__ = ("countfunc",) - def __init__(self, countfunc: Callable[[Container], int], subcon: Construct) -> None: - Subconstruct.__init__(self, subcon) - self.countfunc = countfunc - self._clear_flag(self.FLAG_COPY_CONTEXT) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> ListContainer: - obj = ListContainer() - c = 0 - count = self.countfunc(context) - try: - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - while c < count: - obj.append(self.subcon._parse(stream, context.__copy__())) - c += 1 - else: - while c < count: - obj.append(self.subcon._parse(stream, context)) - c += 1 - except ConstructError as ex: - raise ArrayError("expected %d, found %d" % (count, c), ex) - return obj - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - count = self.countfunc(context) - if len(obj) != count: - raise ArrayError("expected %d, found %d" % (count, len(obj))) - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - for subobj in obj: - self.subcon._build(subobj, stream, context.__copy__()) - else: - for subobj in obj: - self.subcon._build(subobj, stream, context) - def _sizeof(self, context: Container) -> int: - return self.subcon._sizeof(context) * self.countfunc(context) - -class Range(Subconstruct): - """ - A range-array. The subcon will iterate between `mincount` to `maxcount` - times. If less than `mincount` elements are found, raises RangeError. - See also GreedyRange and OptionalGreedyRange. - - The general-case repeater. Repeats the given unit for at least mincount - times, and up to maxcount times. If an exception occurs (EOF, validation - error), the repeater exits. If less than mincount units have been - successfully parsed, a RangeError is raised. - - .. note:: - This object requires a seekable stream for parsing. - - :param int mincount: the minimal count - :param int maxcount: the maximal count - :param Construct subcon: the subcon to repeat - - >>> from ..construct import UBInt8 - >>> c = Range(3, 7, UBInt8("foo")) - >>> c.parse(b"\\x01\\x02") # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - RangeError: expected 3..7, found 2 - >>> c.parse(b"\\x01\\x02\\x03") - [1, 2, 3] - >>> c.parse(b"\\x01\\x02\\x03\\x04\\x05\\x06") - [1, 2, 3, 4, 5, 6] - >>> c.parse(b"\\x01\\x02\\x03\\x04\\x05\\x06\\x07") - [1, 2, 3, 4, 5, 6, 7] - >>> c.parse(b"\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09") - [1, 2, 3, 4, 5, 6, 7] - >>> c.build([1,2]) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - RangeError: expected 3..7, found 2 - >>> c.build([1,2,3,4]) - b'\\x01\\x02\\x03\\x04' - >>> c.build([1,2,3,4,5,6,7,8]) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - RangeError: expected 3..7, found 8 - """ - - __slots__ = ("mincount", "maxcout") - def __init__(self, mincount: int, maxcout: int, subcon: Construct) -> None: - Subconstruct.__init__(self, subcon) - self.mincount = mincount - self.maxcout = maxcout - self._clear_flag(self.FLAG_COPY_CONTEXT) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> ListContainer: - obj = ListContainer() - c = pos = 0 - try: - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - while c < self.maxcout: - pos = stream.tell() - obj.append(self.subcon._parse(stream, context.__copy__())) - c += 1 - else: - while c < self.maxcout: - pos = stream.tell() - obj.append(self.subcon._parse(stream, context)) - c += 1 - except ConstructError as ex: - if c < self.mincount: - raise RangeError("expected %d to %d, found %d" % - (self.mincount, self.maxcout, c), ex) - stream.seek(pos) - return obj - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - if len(obj) < self.mincount or len(obj) > self.maxcout: - raise RangeError("expected %d to %d, found %d" % - (self.mincount, self.maxcout, len(obj))) - cnt = 0 - try: - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - for subobj in obj: - if isinstance(obj, bytes): - subobj = bytes((subobj,)) - self.subcon._build(subobj, stream, context.__copy__()) - cnt += 1 - else: - for subobj in obj: - if isinstance(obj, bytes): - subobj = bytes((subobj,)) - self.subcon._build(subobj, stream, context) - cnt += 1 - except ConstructError as ex: - if cnt < self.mincount: - raise RangeError("expected %d to %d, found %d" % - (self.mincount, self.maxcout, len(obj)), ex) - def _sizeof(self, context: Container) -> int: - raise SizeofError("can't calculate size") - -class RepeatUntil(Subconstruct): - """ - An array that repeats until the predicate indicates it to stop. Note that - the last element (which caused the repeat to exit) is included in the - return value. - - Parameters: - * predicate - a predicate function that takes (obj, context) and returns - True if the stop-condition is met, or False to continue. - * subcon - the subcon to repeat. - - Example: - # will read chars until b\x00 (inclusive) - RepeatUntil(lambda obj, ctx: obj == b"\x00", - Field("chars", 1) - ) - """ - __slots__ = ("predicate",) - def __init__(self, predicate: Callable[[Any, Container], bool], subcon: Construct) -> None: - Subconstruct.__init__(self, subcon) - self.predicate = predicate - self._clear_flag(self.FLAG_COPY_CONTEXT) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> list[Any]: - obj = [] - try: - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - while True: - subobj = self.subcon._parse(stream, context.__copy__()) - obj.append(subobj) - if self.predicate(subobj, context): - break - else: - while True: - subobj = self.subcon._parse(stream, context) - obj.append(subobj) - if self.predicate(subobj, context): - break - except ConstructError as ex: - raise ArrayError("missing terminator", ex) - return obj - def _build(self, obj: Iterable[Any], stream: IO[bytes], context: Container) -> None: - terminated = False - if self.subcon.conflags & self.FLAG_COPY_CONTEXT: - for subobj in obj: - self.subcon._build(subobj, stream, context.__copy__()) - if self.predicate(subobj, context): - terminated = True - break - else: - for subobj in obj: - subobj = bytes((subobj,)) - self.subcon._build(subobj, stream, context.__copy__()) - if self.predicate(subobj, context): - terminated = True - break - if not terminated: - raise ArrayError("missing terminator") - def _sizeof(self, context: Container) -> int: - raise SizeofError("can't calculate size") - - -#=============================================================================== -# structures and sequences -#=============================================================================== -class Struct(Construct): - """ - A sequence of named constructs, similar to structs in C. The elements are - parsed and built in the order they are defined. - See also Embedded. - - Parameters: - * name - the name of the structure - * subcons - a sequence of subconstructs that make up this structure. - * nested - a keyword-only argument that indicates whether this struct - creates a nested context. The default is True. This parameter is - considered "advanced usage", and may be removed in the future. - - Example: - Struct("foo", - UBInt8("first_element"), - UBInt16("second_element"), - Padding(2), - UBInt8("third_element"), - ) - """ - __slots__ = ("subcons", "nested",) - def __init__(self, name: str | None, *subcons: Construct, nested: bool = True) -> None: - self.nested = nested - Construct.__init__(self, name) - self.subcons = subcons - self._inherit_flags(*subcons) - self._clear_flag(self.FLAG_EMBED) - def _parse(self, stream: IO[bytes], context: Container) -> Container: - if "" in context: - obj = context[""] - del context[""] - else: - obj = Container() - if self.nested: - context = Container(_ = context) - for sc in self.subcons: - if sc.conflags & self.FLAG_EMBED: - context[""] = obj - sc._parse(stream, context) - else: - subobj = sc._parse(stream, context) - if sc.name is not None: - obj[sc.name] = subobj - context[sc.name] = subobj - return obj - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - if "" in context: - del context[""] - elif self.nested: - context = Container(_ = context) - for sc in self.subcons: - if sc.conflags & self.FLAG_EMBED: - context[""] = True - subobj = obj - elif sc.name is None: - subobj = None - else: - subobj = getattr(obj, sc.name) - context[sc.name] = subobj - sc._build(subobj, stream, context) - def _sizeof(self, context: Container) -> int: - if self.nested: - context = Container(_ = context) - return sum(sc._sizeof(context) for sc in self.subcons) - -class Sequence(Struct): - """ - A sequence of unnamed constructs. The elements are parsed and built in the - order they are defined. - See also Embedded. - - Parameters: - * name - the name of the structure - * subcons - a sequence of subconstructs that make up this structure. - * nested - a keyword-only argument that indicates whether this struct - creates a nested context. The default is True. This parameter is - considered "advanced usage", and may be removed in the future. - - Example: - Sequence("foo", - UBInt8("first_element"), - UBInt16("second_element"), - Padding(2), - UBInt8("third_element"), - ) - """ - __slots__ = () - def _parse(self, stream: IO[bytes], context: Container) -> ListContainer: # type: ignore[override] # ty: ignore[invalid-method-override] - # This violates the Liskov Substitution Principle: `ListContainer` is no sub-class of `Container`; they're unrelated - if "" in context: - obj = context[""] - del context[""] - else: - obj = ListContainer() - if self.nested: - context = Container(_ = context) - for sc in self.subcons: - if sc.conflags & self.FLAG_EMBED: - context[""] = obj - sc._parse(stream, context) - else: - subobj = sc._parse(stream, context) - if sc.name is not None: - obj.append(subobj) - context[sc.name] = subobj - return obj - def _build(self, obj: Iterable[Any], stream: IO[bytes], context: Container) -> None: - if "" in context: - del context[""] - elif self.nested: - context = Container(_ = context) - objiter = iter(obj) - for sc in self.subcons: - if sc.conflags & self.FLAG_EMBED: - context[""] = True - subobj = objiter - elif sc.name is None: - subobj = None - else: - subobj = next(objiter) - context[sc.name] = subobj - sc._build(subobj, stream, context) - -class Union(Construct): - """ - a set of overlapping fields (like unions in C). when parsing, - all fields read the same data; when building, only the first subcon - (called "master") is used. - - Parameters: - * name - the name of the union - * master - the master subcon, i.e., the subcon used for building and - calculating the total size - * subcons - additional subcons - - Example: - Union("what_are_four_bytes", - UBInt32("one_dword"), - Struct("two_words", UBInt16("first"), UBInt16("second")), - Struct("four_bytes", - UBInt8("a"), - UBInt8("b"), - UBInt8("c"), - UBInt8("d") - ), - ) - """ - __slots__ = ("parser", "builder") - def __init__(self, name: str | None, master: Construct, *subcons: Construct) -> None: - Construct.__init__(self, name) - args: list[Construct] = [Peek(sc) for sc in subcons] - args.append(MetaField(None, lambda ctx: master._sizeof(ctx))) - self.parser = Struct(name, Peek(master, perform_build = True), *args) - self.builder = Struct(name, master) - def _parse(self, stream: IO[bytes], context: Container) -> Any: - return self.parser._parse(stream, context) - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - return self.builder._build(obj, stream, context) - def _sizeof(self, context: Container) -> int: - return self.builder._sizeof(context) - -#=============================================================================== -# conditional -#=============================================================================== -class Switch(Construct, Generic[_T]): - """ - A conditional branch. Switch will choose the case to follow based on - the return value of keyfunc. If no case is matched, and no default value - is given, SwitchError will be raised. - See also Pass. - - Parameters: - * name - the name of the construct - * keyfunc - a function that takes the context and returns a key, which - will be used to choose the relevant case. - * cases - a dictionary mapping keys to constructs. the keys can be any - values that may be returned by keyfunc. - * default - a default value to use when the key is not found in the cases. - if not supplied, an exception will be raised when the key is not found. - You can use the builtin construct Pass for 'do-nothing'. - * include_key - whether or not to include the key in the return value - of parsing. defualt is False. - - Example: - Struct("foo", - UBInt8("type"), - Switch("value", lambda ctx: ctx.type, { - 1 : UBInt8("spam"), - 2 : UBInt16("spam"), - 3 : UBInt32("spam"), - 4 : UBInt64("spam"), - } - ), - ) - """ - - class _NoDefault(Construct): - def _parse(self, stream: IO[bytes], context: Container) -> NoReturn: - raise SwitchError("no default case defined") - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> NoReturn: - raise SwitchError("no default case defined") - def _sizeof(self, context: Container) -> int: - raise SwitchError("no default case defined") - NoDefault: Final = _NoDefault("No default value specified") - - __slots__ = ("subcons", "keyfunc", "cases", "default", "include_key") - - def __init__(self, name: str | None, keyfunc: Callable[[Container], _T], cases: Mapping[_T, Construct], default: Construct = NoDefault, - include_key: bool = False) -> None: - Construct.__init__(self, name) - self._inherit_flags(*cases.values()) - self.keyfunc = keyfunc - self.cases = cases - self.default = default - self.include_key = include_key - self._inherit_flags(*cases.values()) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> tuple[_T, Any] | Any: - key = self.keyfunc(context) - obj = self.cases.get(key, self.default)._parse(stream, context) - if self.include_key: - return key, obj - else: - return obj - def _build(self, obj: tuple[_T, Construct] | Construct, stream: IO[bytes], context: Container) -> None: - if self.include_key: - assert isinstance(obj, tuple) - key, obj = obj - else: - key = self.keyfunc(context) - case = self.cases.get(key, self.default) - case._build(obj, stream, context) - def _sizeof(self, context: Container) -> int: - case = self.cases.get(self.keyfunc(context), self.default) - return case._sizeof(context) - -class Select(Construct): - """ - Selects the first matching subconstruct. It will literally try each of - the subconstructs, until one matches. - - Notes: - * requires a seekable stream. - - Parameters: - * name - the name of the construct - * subcons - the subcons to try (order-sensitive) - * include_name - a keyword only argument, indicating whether to include - the name of the selected subcon in the return value of parsing. default - is false. - - Example: - Select("foo", - UBInt64("large"), - UBInt32("medium"), - UBInt16("small"), - UBInt8("tiny"), - ) - """ - __slots__ = ("subcons", "include_name") - def __init__(self, name: str | None, *subcons: Construct, include_name: bool = False) -> None: - Construct.__init__(self, name) - self.subcons = subcons - self.include_name = include_name - self._inherit_flags(*subcons) - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> tuple[str | None, Any] | Any: - for sc in self.subcons: - pos = stream.tell() - context2 = context.__copy__() - try: - obj = sc._parse(stream, context2) - except ConstructError: - stream.seek(pos) - else: - context.update(context2) - if self.include_name: - return sc.name, obj - else: - return obj - raise SelectError("no subconstruct matched") - def _build(self, obj: tuple[str, Any] | Any, stream: IO[bytes], context: Container) -> None: - if self.include_name: - assert isinstance(obj, tuple) - name, obj = obj - for sc in self.subcons: - if sc.name == name: - sc._build(obj, stream, context) - return - else: - for sc in self.subcons: - stream2 = BytesIO() - context2 = context.__copy__() - try: - sc._build(obj, stream2, context2) - except Exception: - pass - else: - context.update(context2) - stream.write(stream2.getvalue()) - return - raise SelectError("no subconstruct matched", obj) - def _sizeof(self, context: Container) -> int: - raise SizeofError("can't calculate size") - - -#=============================================================================== -# stream manipulation -#=============================================================================== -class Pointer(Subconstruct): - """ - Changes the stream position to a given offset, where the construction - should take place, and restores the stream position when finished. - See also Anchor, OnDemand and OnDemandPointer. - - Notes: - * requires a seekable stream. - - Parameters: - * offsetfunc: a function that takes the context and returns an absolute - stream position, where the construction would take place - * subcon - the subcon to use at `offsetfunc()` - - Example: - Struct("foo", - UBInt32("spam_pointer"), - Pointer(lambda ctx: ctx.spam_pointer, - Array(5, UBInt8("spam")) - ) - ) - """ - __slots__ = ("offsetfunc",) - def __init__(self, offsetfunc: Callable[[Container], int], subcon: Construct) -> None: - Subconstruct.__init__(self, subcon) - self.offsetfunc = offsetfunc - def _parse(self, stream: IO[bytes], context: Container) -> Container: - newpos = self.offsetfunc(context) - origpos = stream.tell() - stream.seek(newpos) - obj = self.subcon._parse(stream, context) - stream.seek(origpos) - return obj - def _build(self, obj: Container, stream: IO[bytes], context: Container) -> None: - newpos = self.offsetfunc(context) - origpos = stream.tell() - stream.seek(newpos) - self.subcon._build(obj, stream, context) - stream.seek(origpos) - def _sizeof(self, context: Container) -> int: - return 0 - -class Peek(Subconstruct): - """ - Peeks at the stream: parses without changing the stream position. - See also Union. If the end of the stream is reached when peeking, - returns None. - - Notes: - * requires a seekable stream. - - Parameters: - * subcon - the subcon to peek at - * perform_build - whether or not to perform building. by default this - parameter is set to False, meaning building is a no-op. - - Example: - Peek(UBInt8("foo")) - """ - __slots__ = ("perform_build",) - def __init__(self, subcon: Construct, perform_build: bool = False) -> None: - Subconstruct.__init__(self, subcon) - self.perform_build = perform_build - def _parse(self, stream: IO[bytes], context: Container) -> Construct | None: - pos = stream.tell() - try: - return self.subcon._parse(stream, context) - except FieldError: - return None - finally: - stream.seek(pos) - def _build(self, obj: Construct, stream: IO[bytes], context: Container) -> None: - if self.perform_build: - self.subcon._build(obj, stream, context) - def _sizeof(self, context: Container) -> int: - return 0 - -class OnDemand(Subconstruct): - """ - Allows for on-demand (lazy) parsing. When parsing, it will return a - LazyContainer that represents a pointer to the data, but does not actually - parses it from stream until it's "demanded". - By accessing the 'value' property of LazyContainers, you will demand the - data from the stream. The data will be parsed and cached for later use. - You can use the 'has_value' property to know whether the data has already - been demanded. - See also OnDemandPointer. - - Notes: - * requires a seekable stream. - - Parameters: - * subcon - - * advance_stream - whether or not to advance the stream position. by - default this is True, but if subcon is a pointer, this should be False. - * force_build - whether or not to force build. If set to False, and the - LazyContainer has not been demaned, building is a no-op. - - Example: - OnDemand(Array(10000, UBInt8("foo")) - """ - __slots__ = ("advance_stream", "force_build") - def __init__(self, subcon: Construct, advance_stream: bool = True, force_build: bool = True) -> None: - Subconstruct.__init__(self, subcon) - self.advance_stream = advance_stream - self.force_build = force_build - def _parse(self, stream: IO[bytes], context: Container) -> LazyContainer: - obj = LazyContainer(self.subcon, stream, stream.tell(), context) - if self.advance_stream: - stream.seek(self.subcon._sizeof(context), 1) - return obj - def _build(self, obj: LazyContainer, stream: IO[bytes], context: Container) -> None: - if not isinstance(obj, LazyContainer): - self.subcon._build(obj, stream, context) - elif self.force_build or obj.has_value: - self.subcon._build(obj.value, stream, context) - elif self.advance_stream: - stream.seek(self.subcon._sizeof(context), 1) - -class Buffered(Subconstruct): - """ - Creates an in-memory buffered stream, which can undergo encoding and - decoding prior to being passed on to the subconstruct. - See also Bitwise. - - Note: - * Do not use pointers inside Buffered - - Parameters: - * subcon - the subcon which will operate on the buffer - * encoder - a function that takes a string and returns an encoded - string (used after building) - * decoder - a function that takes a string and returns a decoded - string (used before parsing) - * resizer - a function that takes the size of the subcon and "adjusts" - or "resizes" it according to the encoding/decoding process. - - Example: - Buffered(BitField("foo", 16), - encoder = decode_bin, - decoder = encode_bin, - resizer = lambda size: size / 8, - ) - """ - __slots__ = ("encoder", "decoder", "resizer") - def __init__(self, subcon: Construct, decoder: Callable[[bytes], bytes], encoder: Callable[[bytes], bytes], resizer: Callable[[int], int]) -> None: - Subconstruct.__init__(self, subcon) - self.encoder = encoder - self.decoder = decoder - self.resizer = resizer - def _parse(self, stream: IO[bytes], context: Container) -> Container: - data = _read_stream(stream, self._sizeof(context)) - stream2 = BytesIO(self.decoder(data)) - return self.subcon._parse(stream2, context) - def _build(self, obj: Container, stream: IO[bytes], context: Container) -> None: - size = self._sizeof(context) - stream2 = BytesIO() - self.subcon._build(obj, stream2, context) - data = self.encoder(stream2.getvalue()) - assert len(data) == size - _write_stream(stream, self._sizeof(context), data) - def _sizeof(self, context: Container) -> int: - return self.resizer(self.subcon._sizeof(context)) - -class Restream(Subconstruct): - """ - Wraps the stream with a read-wrapper (for parsing) or a - write-wrapper (for building). The stream wrapper can buffer the data - internally, reading it from- or writing it to the underlying stream - as needed. For example, BitStreamReader reads whole bytes from the - underlying stream, but returns them as individual bits. - See also Bitwise. - - When the parsing or building is done, the stream's close method - will be invoked. It can perform any finalization needed for the stream - wrapper, but it must not close the underlying stream. - - Note: - * Do not use pointers inside Restream - - Parameters: - * subcon - the subcon - * stream_reader - the read-wrapper - * stream_writer - the write wrapper - * resizer - a function that takes the size of the subcon and "adjusts" - or "resizes" it according to the encoding/decoding process. - - Example: - Restream(BitField("foo", 16), - stream_reader = BitStreamReader, - stream_writer = BitStreamWriter, - resizer = lambda size: size / 8, - ) - """ - __slots__ = ("stream_reader", "stream_writer", "resizer") - def __init__(self, subcon: Construct, stream_reader: type[BitStream], stream_writer: type[BitStream], resizer: Callable[[int], int]) -> None: - Subconstruct.__init__(self, subcon) - self.stream_reader = stream_reader - self.stream_writer = stream_writer - self.resizer = resizer - def _parse(self, stream: IO[bytes], context: Container) -> Container: - stream2 = self.stream_reader(stream) - obj = self.subcon._parse(stream2, context) - stream2.close() - return obj - def _build(self, obj: Container, stream: IO[bytes], context: Container) -> None: - stream2 = self.stream_writer(stream) - self.subcon._build(obj, stream2, context) - stream2.close() - def _sizeof(self, context: Container) -> int: - return self.resizer(self.subcon._sizeof(context)) - - -#=============================================================================== -# miscellaneous -#=============================================================================== -class Reconfig(Subconstruct): - """ - Reconfigures a subconstruct. Reconfig can be used to change the name and - set and clear flags of the inner subcon. - - Parameters: - * name - the new name - * subcon - the subcon to reconfigure - * setflags - the flags to set (default is 0) - * clearflags - the flags to clear (default is 0) - - Example: - Reconfig("foo", UBInt8("bar")) - """ - __slots__ = () - def __init__(self, name: str | None, subcon: Construct, setflags: int = 0, clearflags: int = 0) -> None: - Construct.__init__(self, name, subcon.conflags) - self.subcon = subcon - self._set_flag(setflags) - self._clear_flag(clearflags) - -class Anchor(Construct): - """ - Returns the "anchor" (stream position) at the point where it's inserted. - Useful for adjusting relative offsets to absolute positions, or to measure - sizes of constructs. - absolute pointer = anchor + relative offset - size = anchor_after - anchor_before - See also Pointer. - - Notes: - * requires a seekable stream. - - Parameters: - * name - the name of the anchor - - Example: - Struct("foo", - Anchor("base"), - UBInt8("relative_offset"), - Pointer(lambda ctx: ctx.relative_offset + ctx.base, - UBInt8("data") - ) - ) - """ - __slots__ = () - if TYPE_CHECKING: - name: str - def _parse(self, stream: IO[bytes], context: Container) -> int: - return stream.tell() - def _build(self, obj: None, stream: IO[bytes], context: Container) -> None: - context[self.name] = stream.tell() - def _sizeof(self, context: Container) -> int: - return 0 - -class Value(Construct, Generic[_T]): - """ - A computed value. - - Parameters: - * name - the name of the value - * func - a function that takes the context and return the computed value - - Example: - Struct("foo", - UBInt8("width"), - UBInt8("height"), - Value("total_pixels", lambda ctx: ctx.width * ctx.height), - ) - """ - __slots__ = ("func",) - if TYPE_CHECKING: - name: str - def __init__(self, name: str, func: Callable[[Container], _T]) -> None: - Construct.__init__(self, name) - self.func = func - self._set_flag(self.FLAG_DYNAMIC) - def _parse(self, stream: IO[bytes], context: Container) -> _T: - return self.func(context) - def _build(self, obj: _T, stream: IO[bytes], context: Container) -> None: - context[self.name] = self.func(context) - def _sizeof(self, context: Container) -> int: - return 0 - -#class Dynamic(Construct): -# """ -# Dynamically creates a construct and uses it for parsing and building. -# This allows you to create change the construction tree on the fly. -# Deprecated. -# -# Parameters: -# * name - the name of the construct -# * factoryfunc - a function that takes the context and returns a new -# construct object which will be used for parsing and building. -# -# Example: -# def factory(ctx): -# if ctx.bar == 8: -# return UBInt8("spam") -# if ctx.bar == 9: -# return String("spam", 9) -# -# Struct("foo", -# UBInt8("bar"), -# Dynamic("spam", factory), -# ) -# """ -# __slots__ = ("factoryfunc",) -# def __init__(self, name: str, factoryfunc: Callable[[Container], Construct]) -> None: -# Construct.__init__(self, name, self.FLAG_COPY_CONTEXT) -# self.factoryfunc = factoryfunc -# self._set_flag(self.FLAG_DYNAMIC) -# def _parse(self, stream: IO[bytes], context: Container) -> Container: -# return self.factoryfunc(context)._parse(stream, context) -# def _build(self, obj: Container, stream: IO[bytes], context: Container) -> None: -# return self.factoryfunc(context)._build(obj, stream, context) -# def _sizeof(self, context: Container) -> int: -# return self.factoryfunc(context)._sizeof(context) - -class LazyBound(Construct): - """ - Lazily bound construct, useful for constructs that need to make cyclic - references (linked-lists, expression trees, etc.). - - Parameters: - - - Example: - foo = Struct("foo", - UBInt8("bar"), - LazyBound("next", lambda: foo), - ) - """ - __slots__ = ("bindfunc", "bound") - def __init__(self, name: str, bindfunc: Callable[[], Construct]) -> None: - Construct.__init__(self, name) - self.bound: Construct | None = None - self.bindfunc = bindfunc - def _parse(self, stream: IO[bytes], context: Container) -> Container: - if self.bound is None: - self.bound = self.bindfunc() - return self.bound._parse(stream, context) - def _build(self, obj: Container, stream: IO[bytes], context: Container) -> None: - if self.bound is None: - self.bound = self.bindfunc() - self.bound._build(obj, stream, context) - def _sizeof(self, context: Container) -> int: - if self.bound is None: - self.bound = self.bindfunc() - return self.bound._sizeof(context) - -class _Pass(Construct): - """ - A do-nothing construct, useful as the default case for Switch, or - to indicate Enums. - See also Switch and Enum. - - Notes: - * this construct is a singleton. do not try to instatiate it, as it - will not work... - - Example: - Pass - """ - __slots__ = () - def _parse(self, stream: IO[bytes], context: Container) -> None: - pass - def _build(self, obj: None, stream: IO[bytes], context: Container) -> None: - assert obj is None - def _sizeof(self, context: Container) -> int: - return 0 - def __reduce__(self) -> str: - return self.__class__.__name__ -Pass: Final[Any] = _Pass(None) - -class _Terminator(Construct): - """ - Asserts the end of the stream has been reached at the point it's placed. - You can use this to ensure no more unparsed data follows. - - Notes: - * this construct is only meaningful for parsing. for building, it's - a no-op. - * this construct is a singleton. do not try to instatiate it, as it - will not work... - - Example: - Terminator - """ - __slots__ = () - def _parse(self, stream: IO[bytes], context: Container) -> None: - if stream.read(1): - raise TerminatorError("expected end of stream") - def _build(self, obj: None, stream: IO[bytes], context: Container) -> None: - assert obj is None - def _sizeof(self, context: Container) -> int: - return 0 -Terminator: Final[Any] = _Terminator(None) diff --git a/.tools/python-revlibs/elftools/construct/debug.py b/.tools/python-revlibs/elftools/construct/debug.py deleted file mode 100644 index 2bd5593..0000000 --- a/.tools/python-revlibs/elftools/construct/debug.py +++ /dev/null @@ -1,135 +0,0 @@ -""" -Debugging utilities for constructs -""" -from __future__ import annotations - -import sys -import traceback -import pdb -import inspect -from typing import IO, Any - -from .core import Construct, Subconstruct -from .lib import HexString, Container, ListContainer - - -class Probe(Construct): - """ - A probe: dumps the context, stack frames, and stream content to the screen - to aid the debugging process. - See also Debugger. - - Parameters: - * name - the display name - * show_stream - whether or not to show stream contents. default is True. - the stream must be seekable. - * show_context - whether or not to show the context. default is True. - * show_stack - whether or not to show the upper stack frames. default - is True. - * stream_lookahead - the number of bytes to dump when show_stack is set. - default is 100. - - Example: - Struct("foo", - UBInt8("a"), - Probe("between a and b"), - UBInt8("b"), - ) - """ - __slots__ = ( - "printname", "show_stream", "show_context", "show_stack", - "stream_lookahead" - ) - counter = 0 - - def __init__(self, name: str | None = None, show_stream: bool = True, - show_context: bool = True, show_stack: bool = True, - stream_lookahead: int = 100) -> None: - Construct.__init__(self, None) - if name is None: - Probe.counter += 1 - name = "" % (Probe.counter,) - self.printname = name - self.show_stream = show_stream - self.show_context = show_context - self.show_stack = show_stack - self.stream_lookahead = stream_lookahead - def __repr__(self) -> str: - return "%s(%r)" % (self.__class__.__name__, self.printname) - def _parse(self, stream: IO[bytes], context: Container) -> None: - self.printout(stream, context) - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - self.printout(stream, context) - def _sizeof(self, context: Container) -> int: - return 0 - - def printout(self, stream: IO[bytes], context: Container) -> None: - obj = Container() - if self.show_stream: - obj.stream_position = stream.tell() - follows = stream.read(self.stream_lookahead) - if not follows: - obj.following_stream_data = "EOF reached" - else: - stream.seek(-len(follows), 1) - obj.following_stream_data = HexString(follows) - - if self.show_context: - obj.context = context - - if self.show_stack: - obj.stack = ListContainer() - frames = [s[0] for s in inspect.stack()][1:-1] - frames.reverse() - for f in frames: - a = Container() - a.update(f.f_locals) - obj.stack.append(a) - - print("=" * 80) - print("Probe", self.printname) - print(obj) - print("=" * 80) - -class Debugger(Subconstruct): - """ - A pdb-based debugger. When an exception occurs in the subcon, a debugger - will appear and allow you to debug the error (and even fix on-the-fly). - - Parameters: - * subcon - the subcon to debug - - Example: - Debugger( - Enum(UBInt8("foo"), - a = 1, - b = 2, - c = 3 - ) - ) - """ - __slots__ = ("retval",) - def _parse(self, stream: IO[bytes], context: Container) -> Any: - try: - return self.subcon._parse(stream, context) - except Exception: - self.retval = NotImplemented - self.handle_exc("(you can set the value of 'self.retval', " - "which will be returned)") - if self.retval is NotImplemented: - raise - else: - return self.retval - def _build(self, obj: Any, stream: IO[bytes], context: Container) -> None: - try: - self.subcon._build(obj, stream, context) - except Exception: - self.handle_exc() - def handle_exc(self, msg: str | None = None) -> None: - print("=" * 80) - print("Debugging exception of %s:" % (self.subcon,)) - print("".join(traceback.format_exception(*sys.exc_info())[1:])) - if msg: - print(msg) - pdb.post_mortem(sys.exc_info()[2]) - print("=" * 80) diff --git a/.tools/python-revlibs/elftools/construct/lib/__init__.py b/.tools/python-revlibs/elftools/construct/lib/__init__.py deleted file mode 100644 index 2e09578..0000000 --- a/.tools/python-revlibs/elftools/construct/lib/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from .binary import ( - int_to_bin, bin_to_int, swap_bytes, encode_bin, decode_bin) -from .bitstream import BitStreamReader, BitStreamWriter -from .container import (Container, FlagsContainer, ListContainer, - LazyContainer) -from .hex import HexString, hexdump - diff --git a/.tools/python-revlibs/elftools/construct/lib/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/lib/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 89fca7ca3eccdfa7c47e92c84c0e030c31995981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 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 ACIA2c diff --git a/.tools/python-revlibs/elftools/construct/lib/__pycache__/container.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/lib/__pycache__/container.cpython-310.pyc deleted file mode 100644 index 7109dde4fb23565c50c295e0cb28bb1016fe2c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7897 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 diff --git a/.tools/python-revlibs/elftools/construct/lib/__pycache__/hex.cpython-310.pyc b/.tools/python-revlibs/elftools/construct/lib/__pycache__/hex.cpython-310.pyc deleted file mode 100644 index 382e0138b12789980c20c139123b203b233100d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2150 zcmaJ?UvJz*5Z_(z`Tpe6Ch0Y8`cNz&6a%?L6%Q4PA|S0=1PZ7rD444(=XR4g_1VsP zPiam*sVG6>oiC6)_ABixPxlr20yFC-G%c{n?#<5r`_0U6#@Y0Ai$H50Jl@}`5%MQa z-fSEuUlKx#Ef53|G$8{TP>M23*uV)KN~EJYFn1C@s0B4xHApf2Xb zw77D@gT_N5u8NrxB4%Xs*a=!Uy8-rgL`Z|KV3qnjv^7Q(cmQ;|Ea^jF@R9zMH8By0$MoG#w=#Obi z1^a^?FnHdXcyMs?0tQ37@Ql;nQ$91SyJBeklBg+IdDUD0qW5DVRnZH!)_Y&&`Ta;o zz3;Mql=Pm+LEg*bd`U-YSL&smz8Hop`}cZDyxq%>^j?s!BJS&cHptg7A_dxYm#As@nGi78Z~@Pm+V+u_g=r*lDvNj|jT5KZxJv4w zN?$dTxX{1Ax7gw3_a-TB|GJ% z1N+^wzT?c3Goa7G?GimdHTt^cK||ZTxbPy++UI54`?9aQ-jhA)Rkle1LNQEqwGC{H z)7`E;97E{IsI$1Z^7$6rwYa#nC<-eSR(tPl?Zg2eOprwihgZ}yMW3-;JpJT$R>G7H-Ij!Fb6a`+D@d;R1@|ax@}2Q4Q@<8oi&Nu9c`j4oH`G8i5!B(VhX0_hqC*tkhKCyv1`@8Ahk^4pbtz|av_ofT3&wfM zsrnF>`p_@6iz=}KYDoe}y?_ZCIO4jPw{)llT->mk&x4w{3H9I_R0CIZfCLMs`A9zB zv=JR;Hl&Xw7*ohp7q1DS_af~b#!2FBOAnwfAy(jo&VVx&8N9QfsI-!Z&^l>a9{Z+pBEhH)C}FhrNyd~eaw+=VB)=gWpeO(~39<%Dsc9pYS}&o5;; zDzJZ#z>sp9oKnbCdIp(RL1PMSH1#k{R1iOb74;boSnd8Hu3CcW9q1Nf zn~rARglO+E4tV^X1iGlo@5A8|7%%81d^E5!m-Liq#76enF*}1gf>n59#O~ZNwB zgCmw|l`on47!>dfMDsE_v;`gyLxgXw=D<=8%xzKkugh5NKFC+~5$yHd{|vf9YtK{5 zlEV7tQ_xlpvJ%q61_4su%FB4FZXm2_G>~BkWg#47Vwj-Z4#R_Cl)PR6&?4)Hq4Mz( zbg;rt*BiE3D=~;_5r+4mTdp+-r)}PHt~ge|@qboy;E+FsD0YVMbpR9!d23vKltb-Q zNMtixO+u^=X@Q?zYm>SSiwX->6$R@BMDlMCO=GpPa}BF$aRr7pX*15+bPlj~=Kcn) CGS{mB diff --git a/.tools/python-revlibs/elftools/construct/lib/binary.py b/.tools/python-revlibs/elftools/construct/lib/binary.py deleted file mode 100644 index a520e61..0000000 --- a/.tools/python-revlibs/elftools/construct/lib/binary.py +++ /dev/null @@ -1,107 +0,0 @@ -from __future__ import annotations - - -def int_to_bin(number: int, width: int = 32) -> bytes: - r""" - Convert an integer into its binary representation in a bytes object. - Width is the amount of bits to generate. If width is larger than the actual - amount of bits required to represent number in binary, sign-extension is - used. If it's smaller, the representation is trimmed to width bits. - Each "bit" is either '\x00' or '\x01'. The MSBit is first. - - Examples: - - >>> int_to_bin(19, 5) - b'\x01\x00\x00\x01\x01' - >>> int_to_bin(19, 8) - b'\x00\x00\x00\x01\x00\x00\x01\x01' - """ - if number < 0: - number += 1 << width - i = width - 1 - bits = bytearray(width) - while number and i >= 0: - bits[i] = number & 1 - number >>= 1 - i -= 1 - return bytes(bits) - - -_bit_values: dict[int, int] = { - 0: 0, - 1: 1, - 48: 0, # '0' - 49: 1, # '1' - } - -def bin_to_int(bits: bytes, signed: bool = False) -> int: - r""" - Logical opposite of int_to_bin. Both '0' and '\x00' are considered zero, - and both '1' and '\x01' are considered one. Set sign to True to interpret - the number as a 2-s complement signed integer. - """ - number = 0 - bias = 0 - if signed and _bit_values[bits[0]] == 1: - bits = bits[1:] - bias = 1 << len(bits) - for b in bits: - number <<= 1 - number |= _bit_values[b] - return number - bias - - -def swap_bytes(bits: bytes, bytesize: int = 8) -> bytes: - r""" - Bits is a b'' object containing a binary representation. Assuming each - bytesize bits constitute a bytes, perform a endianness byte swap. Example: - - >>> swap_bytes(b'00011011', 2) - b'11100100' - """ - i = 0 - l = len(bits) - output = [b""] * ((l // bytesize) + 1) - j = len(output) - 1 - while i < l: - output[j] = bits[i : i + bytesize] - i += bytesize - j -= 1 - return b"".join(output) - - -_char_to_bin = {} -_bin_to_char = {} -for i in range(256): - ch = bytes((i,)) - bin = int_to_bin(i, 8) - _char_to_bin[i] = bin - _bin_to_char[bin] = ch - - -def encode_bin(data: bytes) -> bytes: - r""" - Create a binary representation of the given b'' object. Assume 8-bit - ASCII. Example: - - >>> encode_bin(b'ab') - b'\x00\x01\x01\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x01\x00' - """ - return b"".join(_char_to_bin[ch] for ch in data) - - -def decode_bin(data: bytes) -> bytes: - """ - Logical opposite of decode_bin. - """ - if len(data) & 7: - raise ValueError("Data length must be a multiple of 8") - i = 0 - j = 0 - l = len(data) // 8 - chars = [b""] * l - while j < l: - chars[j] = _bin_to_char[data[i:i+8]] - i += 8 - j += 1 - return b"".join(chars) diff --git a/.tools/python-revlibs/elftools/construct/lib/bitstream.py b/.tools/python-revlibs/elftools/construct/lib/bitstream.py deleted file mode 100644 index 8ed9b13..0000000 --- a/.tools/python-revlibs/elftools/construct/lib/bitstream.py +++ /dev/null @@ -1,101 +0,0 @@ -from __future__ import annotations - -import io -from typing import IO, TYPE_CHECKING - -from .binary import encode_bin, decode_bin - -if TYPE_CHECKING: - from typing_extensions import Buffer # 3.12+ - from typing_extensions import Self # 3.11+ - - -class BitStream(io.RawIOBase, IO[bytes]): - - __slots__ = ("substream",) - - def __init__(self, substream: IO[bytes]) -> None: - self.substream = substream - - def __enter__(self) -> Self: - return self - - -class BitStreamReader(BitStream): - - __slots__ = ("buffer", "total_size") - - def __init__(self, substream: IO[bytes]) -> None: - super().__init__(substream) - self.total_size = 0 - self.buffer = b"" - - def close(self) -> None: - if self.total_size % 8 != 0: - raise ValueError("total size of read data must be a multiple of 8", - self.total_size) - - def tell(self) -> int: - return self.substream.tell() - - def seek(self, pos: int, whence: int = 0) -> int: - self.buffer = b"" - self.total_size = 0 - self.substream.seek(pos, whence) - return 0 - - def read(self, count: int = -1) -> bytes: - if count < 0: - raise ValueError("count cannot be negative") - - l = len(self.buffer) - if count == 0: - data = b"" - elif count <= l: - data = self.buffer[:count] - self.buffer = self.buffer[count:] - else: - data = self.buffer - count -= l - bytes = count // 8 - if count & 7: - bytes += 1 - buf = encode_bin(self.substream.read(bytes)) - data += buf[:count] - self.buffer = buf[count:] - self.total_size += len(data) - return data - - -class BitStreamWriter(BitStream): - - __slots__ = ("buffer", "pos") - - def __init__(self, substream: IO[bytes]) -> None: - super().__init__(substream) - self.buffer: list[bytes] = [] - self.pos = 0 - - def close(self) -> None: - self.flush() - - def flush(self) -> None: - bytes = decode_bin(b"".join(self.buffer)) - self.substream.write(bytes) - self.buffer = [] - self.pos = 0 - - def tell(self) -> int: - return self.substream.tell() + self.pos // 8 - - def seek(self, pos: int, whence: int = 0) -> int: - self.flush() - return self.substream.seek(pos, whence) - - def write(self, data: Buffer) -> int: - if not data: - return 0 - if type(data) is not bytes: - raise TypeError("data must be a bytes, not %r" % (type(data),)) - self.buffer.append(data) - return len(data) diff --git a/.tools/python-revlibs/elftools/construct/lib/container.py b/.tools/python-revlibs/elftools/construct/lib/container.py deleted file mode 100644 index 8564ddc..0000000 --- a/.tools/python-revlibs/elftools/construct/lib/container.py +++ /dev/null @@ -1,192 +0,0 @@ -""" -Various containers. -""" -from __future__ import annotations - -from collections.abc import MutableMapping -from functools import wraps -from pprint import pformat -from typing import IO, TYPE_CHECKING, Any, Literal, overload - -if TYPE_CHECKING: - from collections.abc import Callable, Iterator - from typing import Concatenate, ParamSpec, TypeVar - - from typing_extensions import Self # 3.11+ - - from ..core import Construct - from .hex import HexString - - _P = ParamSpec('_P') - _R = TypeVar('_R') - _T = TypeVar('_T') - - -__all__ = [ - "recursion_lock", - "Container", "FlagsContainer", "ListContainer", "LazyContainer", -] - - -def recursion_lock( - retval: _R, - lock_name: str = "__recursion_lock__", -) -> Callable[[Callable[Concatenate[Any, _P], _T]], Callable[Concatenate[Any, _P], _T | _R]]: - - def decorator( - func: Callable[Concatenate[Any, _P], _T], - ) -> Callable[Concatenate[Any, _P], _T | _R]: - @wraps(func) - def wrapper(self: Any, *args: _P.args, **kw: _P.kwargs) -> _T | _R: - if getattr(self, lock_name, False): - return retval - setattr(self, lock_name, True) - try: - return func(self, *args, **kw) - finally: - setattr(self, lock_name, False) - return wrapper - return decorator - -class Container(MutableMapping[str, Any]): - """ - A generic container of attributes. - - Containers are the common way to express parsed data. - """ - - def __init__(self, **kw: Any) -> None: - self.__dict__ = kw - - # The core dictionary interface. - - @overload - def __getitem__(self, name: Literal[ - "ch_addralign", "ch_size", - "length", - "n_descsz", "n_offset", "n_namesz", - "sh_addralign", "sh_flags", "sh_size", - "bloom_size", "nbuckets", "nchains", - ]) -> int: ... - @overload - def __getitem__(self, name: Literal[ - "ch_type", - "sh_type", - "n_name", "n_type", - "tag", "vendor_name", - ]) -> str: ... - @overload - def __getitem__(self, name: Literal[ - "buckets", "chains", - ]) -> list[int]: ... - @overload - def __getitem__(self, name: str) -> Any: ... - def __getitem__(self, name: str) -> Any: - return self.__dict__[name] - - def __delitem__(self, name: str) -> None: - del self.__dict__[name] - - def __setitem__(self, name: str, value: Any) -> None: - self.__dict__[name] = value - - def __iter__(self) -> Iterator[str]: - return iter(self.__dict__) - - def __len__(self) -> int: - return len(self.__dict__.keys()) - - # Copy interface. - - def copy(self) -> Self: - return self.__class__(**self.__dict__) - - __copy__ = copy - - def __repr__(self) -> str: - return "%s(%s)" % (self.__class__.__name__, repr(self.__dict__)) - - def __str__(self) -> str: - return "%s(%s)" % (self.__class__.__name__, str(self.__dict__)) - - if TYPE_CHECKING: - # elftools.construct.debug Probe.printout() - stream_position: int - following_stream_data: str | HexString - context: Container - stack: ListContainer - # allow arbitray attributes - def __setattr__(self, name: str, value: object) -> None: ... - def __getattr__(self, name: str) -> Any: ... - -class FlagsContainer(Container): - """ - A container providing pretty-printing for flags. - - Only set flags are displayed. - """ - - @recursion_lock("<...>") - def __str__(self) -> str: - d = dict((k, self[k]) for k in self - if self[k] and not k.startswith("_")) - return "%s(%s)" % (self.__class__.__name__, pformat(d)) - -class ListContainer(list[Any]): - """ - A container for lists. - """ - - __slots__ = ("__recursion_lock__",) - - @recursion_lock("[...]") - def __str__(self) -> str: - return pformat(self) - -class LazyContainer: - - __slots__ = ("subcon", "stream", "pos", "context", "_value") - - def __init__(self, subcon: Construct, stream: IO[bytes], pos: int, context: Container) -> None: - self.subcon = subcon - self.stream = stream - self.pos = pos - self.context = context - self._value = NotImplemented - - def __eq__(self, other: object) -> bool: - return isinstance(other, LazyContainer) and self._value == other._value - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __str__(self) -> str: - return self.__pretty_str__() - - def __pretty_str__(self, nesting: int = 1, indentation: str = " ") -> str: - if self._value is NotImplemented: - text = "" - elif hasattr(self._value, "__pretty_str__"): - text = self._value.__pretty_str__(nesting, indentation) - else: - text = str(self._value) - return "%s: %s" % (self.__class__.__name__, text) - - def read(self) -> Any: - self.stream.seek(self.pos) - return self.subcon._parse(self.stream, self.context) - - def dispose(self) -> None: - del self.subcon - del self.stream - del self.context - del self.pos - - def _get_value(self) -> Any: - if self._value is NotImplemented: - self._value = self.read() - return self._value - - value = property(_get_value) - - has_value = property(lambda self: self._value is not NotImplemented) diff --git a/.tools/python-revlibs/elftools/construct/lib/hex.py b/.tools/python-revlibs/elftools/construct/lib/hex.py deleted file mode 100644 index fdd2032..0000000 --- a/.tools/python-revlibs/elftools/construct/lib/hex.py +++ /dev/null @@ -1,47 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from typing_extensions import Self # 3.11+ - - -# Map an integer in the inclusive range 0-255 to its string byte representation -_printable = {i: chr(i) if 32 <= i < 128 else "." for i in range(256)} - - -def hexdump(data: bytes, linesize: int) -> list[str]: - """ - data is a bytes object. The returned result is a string. - """ - prettylines = [] - if len(data) < 65536: - fmt = "%%04X %%-%ds %%s" - else: - fmt = "%%08X %%-%ds %%s" - fmt = fmt % (3 * linesize - 1,) - for i in range(0, len(data), linesize): - line = data[i : i + linesize] - hextext = line.hex(" ") - rawtext = "".join(_printable[b] for b in line) - prettylines.append(fmt % (i, hextext, rawtext)) - return prettylines - - -class HexString(bytes): - """ - Represents bytes that will be hex-dumped to a string when its string - representation is requested. - """ - def __init__(self, data: bytes, linesize: int = 16) -> None: - self.linesize = linesize - - def __new__(cls, data: bytes, *args: object, **kwargs: object) -> Self: - return bytes.__new__(cls, data) - - def __str__(self) -> str: - if not self: - return "''" - sep = "\n" - return sep + sep.join( - hexdump(self, self.linesize)) diff --git a/.tools/python-revlibs/elftools/construct/macros.py b/.tools/python-revlibs/elftools/construct/macros.py deleted file mode 100644 index e9b68ad..0000000 --- a/.tools/python-revlibs/elftools/construct/macros.py +++ /dev/null @@ -1,676 +0,0 @@ -from __future__ import annotations - -from sys import maxsize -from typing import TYPE_CHECKING, Any, Literal, TypedDict - -from .lib import (BitStreamReader, BitStreamWriter, Container, encode_bin, - decode_bin) -from .core import (Struct, MetaField, StaticField, FormatField, - OnDemand, Pointer, Switch, Value, RepeatUntil, MetaArray, Sequence, Range, - Select, Pass, SizeofError, Buffered, Restream, Reconfig) -from .adapters import (BitIntegerAdapter, PaddingAdapter, - ConstAdapter, CStringAdapter, LengthValueAdapter, IndexingAdapter, - PaddedStringAdapter, FlagsAdapter, StringAdapter, MappingAdapter) - -if TYPE_CHECKING: - from collections.abc import Callable, Hashable, Mapping - - from typing_extensions import Unpack # Py3.11+ - - from .adapters import Adapter - from .core import Construct, Subconstruct, _Pass - - Length = int | Callable[[Container], int] - - -__all__ = [ - "Field", "BitField", "Padding", "Flag", - "Bit", "Nibble", "Octet", - "UBInt8", "UBInt16", "UBInt32", "UBInt64", - "SBInt8", "SBInt16", "SBInt32", "SBInt64", - "ULInt8", "ULInt16", "ULInt32", "ULInt64", - "SLInt8", "SLInt16", "SLInt32", "SLInt64", - "UNInt8", "UNInt16", "UNInt32", "UNInt64", - "SNInt8", "SNInt16", "SNInt32", "SNInt64", - "BFloat32", "LFloat32", "NFloat32", - "BFloat64", "LFloat64", "NFloat64", - "Array", "PrefixedArray", "OpenRange", "GreedyRange", "OptionalGreedyRange", - "Optional", "Bitwise", "Aligned", "SeqOfOne", "Embedded", "Rename", "Alias", - "SymmetricMapping", "Enum", "FlagsEnum", - "AlignedStruct", "BitStruct", "EmbeddedBitStruct", - "String", "PascalString", "CString", - "IfThenElse", "If", - "OnDemandPointer", "Magic", -] - - -#=============================================================================== -# fields -#=============================================================================== -def Field(name: str | None, length: Length) -> MetaField | StaticField: - """ - A field consisting of a specified number of bytes. - - :param str name: the name of the field - :param length: the length of the field. the length can be either an integer - (StaticField), or a function that takes the context as an argument and - returns the length (MetaField) - """ - if isinstance(length, int): - return StaticField(name, length) - else: - return MetaField(name, length) - -def BitField(name: str, length: Length, swapped: bool = False, signed: bool = False, bytesize: int = 8) -> BitIntegerAdapter: - r""" - BitFields, as the name suggests, are fields that operate on raw, unaligned - bits, and therefore must be enclosed in a BitStruct. Using them is very - similar to all normal fields: they take a name and a length (in bits). - - :param str name: name of the field - :param int length: number of bits in the field, or a function that takes - the context as its argument and returns the length - :param bool swapped: whether the value is byte-swapped - :param bool signed: whether the value is signed - :param int bytesize: number of bits per byte, for byte-swapping - - >>> foo = BitStruct("foo", - ... BitField("a", 3), - ... Flag("b"), - ... Padding(3), - ... Nibble("c"), - ... BitField("d", 5), - ... ) - >>> foo.parse(b"\xe1\x1f") - Container({'a': 7, 'b': False, 'c': 8, 'd': 31}) - >>> foo = BitStruct("foo", - ... BitField("a", 3), - ... Flag("b"), - ... Padding(3), - ... Nibble("c"), - ... Struct("bar", - ... Nibble("d"), - ... Bit("e"), - ... ) - ... ) - >>> foo.parse(b"\xe1\x1f") - Container({'a': 7, 'b': False, 'c': 8, 'bar': Container({'d': 15, 'e': 1})}) - """ - - assert isinstance(length, int) # FIXME: Field(len=f()) is supported, but not BitIntegerAdapter(width=f()) - return BitIntegerAdapter(Field(name, length), - length, - swapped=swapped, - signed=signed, - bytesize=bytesize - ) - -def Padding(length: Length, pattern: bytes = b"\x00", strict: bool = False) -> PaddingAdapter: - r"""a padding field (value is discarded) - * length - the length of the field. the length can be either an integer, - or a function that takes the context as an argument and returns the - length - * pattern - the padding pattern (character/byte) to use. default is b"\x00" - * strict - whether or not to raise an exception is the actual padding - pattern mismatches the desired pattern. default is False. - """ - return PaddingAdapter(Field(None, length), - pattern = pattern, - strict = strict, - ) - -def Flag(name: str, truth: int = 1, falsehood: int = 0, default: bool = False) -> MappingAdapter: - """ - A flag. - - Flags are usually used to signify a Boolean value, and this construct - maps values onto the ``bool`` type. - - .. note:: This construct works with both bit and byte contexts. - - .. warning:: Flags default to False, not True. This is different from the - C and Python way of thinking about truth, and may be subject to change - in the future. - - :param str name: field name - :param int truth: value of truth (default 1) - :param int falsehood: value of falsehood (default 0) - :param bool default: default value (default False) - """ - - return SymmetricMapping(Field(name, 1), - {True : bytes((truth,)), False : bytes((falsehood,))}, - default = default, - ) - -#=============================================================================== -# field shortcuts -#=============================================================================== -def Bit(name: str) -> BitIntegerAdapter: - """a 1-bit BitField; must be enclosed in a BitStruct""" - return BitField(name, 1) -def Nibble(name: str) -> BitIntegerAdapter: - """a 4-bit BitField; must be enclosed in a BitStruct""" - return BitField(name, 4) -def Octet(name: str) -> BitIntegerAdapter: - """an 8-bit BitField; must be enclosed in a BitStruct""" - return BitField(name, 8) - -def UBInt8(name: str) -> FormatField[int]: - """unsigned, big endian 8-bit integer""" - return FormatField(name, ">", "B") -def UBInt16(name: str) -> FormatField[int]: - """unsigned, big endian 16-bit integer""" - return FormatField(name, ">", "H") -def UBInt32(name: str) -> FormatField[int]: - """unsigned, big endian 32-bit integer""" - return FormatField(name, ">", "L") -def UBInt64(name: str) -> FormatField[int]: - """unsigned, big endian 64-bit integer""" - return FormatField(name, ">", "Q") - -def SBInt8(name: str) -> FormatField[int]: - """signed, big endian 8-bit integer""" - return FormatField(name, ">", "b") -def SBInt16(name: str) -> FormatField[int]: - """signed, big endian 16-bit integer""" - return FormatField(name, ">", "h") -def SBInt32(name: str) -> FormatField[int]: - """signed, big endian 32-bit integer""" - return FormatField(name, ">", "l") -def SBInt64(name: str) -> FormatField[int]: - """signed, big endian 64-bit integer""" - return FormatField(name, ">", "q") - -def ULInt8(name: str) -> FormatField[int]: - """unsigned, little endian 8-bit integer""" - return FormatField(name, "<", "B") -def ULInt16(name: str) -> FormatField[int]: - """unsigned, little endian 16-bit integer""" - return FormatField(name, "<", "H") -def ULInt32(name: str) -> FormatField[int]: - """unsigned, little endian 32-bit integer""" - return FormatField(name, "<", "L") -def ULInt64(name: str) -> FormatField[int]: - """unsigned, little endian 64-bit integer""" - return FormatField(name, "<", "Q") - -def SLInt8(name: str) -> FormatField[int]: - """signed, little endian 8-bit integer""" - return FormatField(name, "<", "b") -def SLInt16(name: str) -> FormatField[int]: - """signed, little endian 16-bit integer""" - return FormatField(name, "<", "h") -def SLInt32(name: str) -> FormatField[int]: - """signed, little endian 32-bit integer""" - return FormatField(name, "<", "l") -def SLInt64(name: str) -> FormatField[int]: - """signed, little endian 64-bit integer""" - return FormatField(name, "<", "q") - -def UNInt8(name: str) -> FormatField[int]: - """unsigned, native endianity 8-bit integer""" - return FormatField(name, "=", "B") -def UNInt16(name: str) -> FormatField[int]: - """unsigned, native endianity 16-bit integer""" - return FormatField(name, "=", "H") -def UNInt32(name: str) -> FormatField[int]: - """unsigned, native endianity 32-bit integer""" - return FormatField(name, "=", "L") -def UNInt64(name: str) -> FormatField[int]: - """unsigned, native endianity 64-bit integer""" - return FormatField(name, "=", "Q") - -def SNInt8(name: str) -> FormatField[int]: - """signed, native endianity 8-bit integer""" - return FormatField(name, "=", "b") -def SNInt16(name: str) -> FormatField[int]: - """signed, native endianity 16-bit integer""" - return FormatField(name, "=", "h") -def SNInt32(name: str) -> FormatField[int]: - """signed, native endianity 32-bit integer""" - return FormatField(name, "=", "l") -def SNInt64(name: str) -> FormatField[int]: - """signed, native endianity 64-bit integer""" - return FormatField(name, "=", "q") - -def BFloat32(name: str) -> FormatField[float]: - """big endian, 32-bit IEEE floating point number""" - return FormatField(name, ">", "f") -def LFloat32(name: str) -> FormatField[float]: - """little endian, 32-bit IEEE floating point number""" - return FormatField(name, "<", "f") -def NFloat32(name: str) -> FormatField[float]: - """native endianity, 32-bit IEEE floating point number""" - return FormatField(name, "=", "f") - -def BFloat64(name: str) -> FormatField[float]: - """big endian, 64-bit IEEE floating point number""" - return FormatField(name, ">", "d") -def LFloat64(name: str) -> FormatField[float]: - """little endian, 64-bit IEEE floating point number""" - return FormatField(name, "<", "d") -def NFloat64(name: str) -> FormatField[float]: - """native endianity, 64-bit IEEE floating point number""" - return FormatField(name, "=", "d") - - -#=============================================================================== -# arrays -#=============================================================================== -def Array(count: Length, subcon: Construct) -> MetaArray: - r""" - Repeats the given unit a fixed number of times. - - :param int count: number of times to repeat - :param ``Construct`` subcon: construct to repeat - - >>> c = Array(4, UBInt8("foo")) - >>> c.parse(b"\x01\x02\x03\x04") - [1, 2, 3, 4] - >>> c.parse(b"\x01\x02\x03\x04\x05\x06") - [1, 2, 3, 4] - >>> c.build([5,6,7,8]) - b'\x05\x06\x07\x08' - >>> c.build([5,6,7,8,9]) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - ArrayError: expected 4, found 5 - """ - - if isinstance(count, int): - con = MetaArray(lambda ctx: count, subcon) - con._clear_flag(con.FLAG_DYNAMIC) - else: - con = MetaArray(count, subcon) - return con - -def PrefixedArray(subcon: Construct, length_field: Construct = UBInt8("length")) -> LengthValueAdapter: - """an array prefixed by a length field. - * subcon - the subcon to be repeated - * length_field - a construct returning an integer - """ - assert length_field.name is not None - name = length_field.name - return LengthValueAdapter( - Sequence(subcon.name, - length_field, - Array(lambda ctx: ctx[name], subcon), - nested = False - ) - ) - -def OpenRange(mincount: int, subcon: Construct) -> Range: - return Range(mincount, maxsize, subcon) - -def GreedyRange(subcon: Construct) -> Range: - r""" - Repeats the given unit one or more times. - - :param ``Construct`` subcon: construct to repeat - - >>> from ..construct import GreedyRange, UBInt8 - >>> c = GreedyRange(UBInt8("foo")) - >>> c.parse(b"\x01") - [1] - >>> c.parse(b"\x01\x02\x03") - [1, 2, 3] - >>> c.parse(b"\x01\x02\x03\x04\x05\x06") - [1, 2, 3, 4, 5, 6] - >>> c.parse(b"") # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - RangeError: expected 1..2147483647, found 0 - >>> c.build([1,2]) - b'\x01\x02' - >>> c.build([]) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - RangeError: expected 1..2147483647, found 0 - """ - - return OpenRange(1, subcon) - -def OptionalGreedyRange(subcon: Construct) -> Range: - r""" - Repeats the given unit zero or more times. This repeater can't - fail, as it accepts lists of any length. - - :param ``Construct`` subcon: construct to repeat - - >>> from ..construct import OptionalGreedyRange, UBInt8 - >>> c = OptionalGreedyRange(UBInt8("foo")) - >>> c.parse(b"") - [] - >>> c.parse(b"\x01\x02") - [1, 2] - >>> c.build([]) - b'' - >>> c.build([1,2]) - b'\x01\x02' - """ - - return OpenRange(0, subcon) - - -#=============================================================================== -# subconstructs -#=============================================================================== -def Optional(subcon: Construct) -> Select: - """an optional construct. if parsing fails, returns None. - * subcon - the subcon to optionally parse or build - """ - return Select(subcon.name, subcon, Pass) - -def Bitwise(subcon: Construct) -> Subconstruct: - """converts the stream to bits, and passes the bitstream to subcon - * subcon - a bitwise construct (usually BitField) - """ - # subcons larger than MAX_BUFFER will be wrapped by Restream instead - # of Buffered. implementation details, don't stick your nose in :) - MAX_BUFFER = 1024 * 8 - def resizer(length: int) -> int: - if length & 7: - raise SizeofError("size must be a multiple of 8", length) - return length >> 3 - if not subcon._is_flag(subcon.FLAG_DYNAMIC) and subcon.sizeof() < MAX_BUFFER: - con: Subconstruct = Buffered(subcon, - encoder = decode_bin, - decoder = encode_bin, - resizer = resizer - ) - else: - con = Restream(subcon, - stream_reader = BitStreamReader, - stream_writer = BitStreamWriter, - resizer = resizer) - return con - -def Aligned(subcon: Construct, modulus: int = 4, pattern: bytes = b"\x00") -> IndexingAdapter: - r"""aligns subcon to modulus boundary using padding pattern - * subcon - the subcon to align - * modulus - the modulus boundary (default is 4) - * pattern - the padding pattern (default is \x00) - """ - if modulus < 2: - raise ValueError("modulus must be >= 2", modulus) - def padlength(ctx: Container) -> int: - return (modulus - (subcon._sizeof(ctx) % modulus)) % modulus - return SeqOfOne(subcon.name, - subcon, - # ?????? - # ?????? - # ?????? - # ?????? - Padding(padlength, pattern = pattern), - nested = False, - ) - -def SeqOfOne(name: str | None, *args: Construct, **kw: bool) -> IndexingAdapter: - """a sequence of one element. only the first element is meaningful, the - rest are discarded - * name - the name of the sequence - * args - subconstructs - * kw - any keyword arguments to Sequence - """ - return IndexingAdapter(Sequence(name, *args, **kw), index = 0) - -def Embedded(subcon: Construct) -> Reconfig: - """embeds a struct into the enclosing struct. - * subcon - the struct to embed - """ - return Reconfig(subcon.name, subcon, subcon.FLAG_EMBED) - -def Rename(newname: str, subcon: Construct) -> Reconfig: - """renames an existing construct - * newname - the new name - * subcon - the subcon to rename - """ - return Reconfig(newname, subcon) - -def Alias(newname: str, oldname: str) -> Value[Any]: - """creates an alias for an existing element in a struct - * newname - the new name - * oldname - the name of an existing element - """ - return Value(newname, lambda ctx: ctx[oldname]) - - -#=============================================================================== -# mapping -#=============================================================================== -def SymmetricMapping(subcon: Construct, mapping: Mapping[Any, Any], default: Hashable | _Pass = NotImplemented) -> MappingAdapter: - """defines a symmetrical mapping: a->b, b->a. - * subcon - the subcon to map - * mapping - the encoding mapping (a dict); the decoding mapping is - achieved by reversing this mapping - * default - the default value to use when no mapping is found. if no - default value is given, and exception is raised. setting to Pass would - return the value "as is" (unmapped) - """ - reversed_mapping = dict((v, k) for k, v in mapping.items()) - return MappingAdapter(subcon, - encoding = mapping, - decoding = reversed_mapping, - encdefault = default, - decdefault = default, - ) - -def Enum(subcon: Construct, **kw: Any) -> MappingAdapter: - """a set of named values mapping. - * subcon - the subcon to map - * kw - keyword arguments which serve as the encoding mapping - * _default_ - an optional, keyword-only argument that specifies the - default value to use when the mapping is undefined. if not given, - and exception is raised when the mapping is undefined. use `Pass` to - pass the unmapped value as-is - """ - return SymmetricMapping(subcon, kw, kw.pop("_default_", NotImplemented)) - -def FlagsEnum(subcon: Construct, **kw: Any) -> FlagsAdapter: - """a set of flag values mapping. - * subcon - the subcon to map - * kw - keyword arguments which serve as the encoding mapping - """ - return FlagsAdapter(subcon, kw) - - -#=============================================================================== -# structs -#=============================================================================== -class _AlignedStruct(TypedDict, total=False): - modulus: int - pattern: bytes - - -def AlignedStruct(name: str, *subcons: Construct, **kw: Unpack[_AlignedStruct]) -> Struct: - """a struct of aligned fields - * name - the name of the struct - * subcons - the subcons that make up this structure - * kw - keyword arguments to pass to Aligned: 'modulus' and 'pattern' - """ - return Struct(name, *(Aligned(sc, **kw) for sc in subcons)) - -def BitStruct(name: str, *subcons: Construct) -> Subconstruct: - """a struct of bitwise fields - * name - the name of the struct - * subcons - the subcons that make up this structure - """ - return Bitwise(Struct(name, *subcons)) - -def EmbeddedBitStruct(*subcons: Construct) -> Subconstruct: - """an embedded BitStruct. no name is necessary. - * subcons - the subcons that make up this structure - """ - return Bitwise(Embedded(Struct(None, *subcons))) - -#=============================================================================== -# strings -#=============================================================================== -def String(name: str, length: int, encoding: str | None = None, padchar: bytes | None = None, paddir: Literal["right", "left", "center"] = "right", - trimdir: Literal["right", "left"] = "right") -> Adapter: - r""" - A configurable, fixed-length string field. - - The padding character must be specified for padding and trimming to work. - - :param str name: name - :param int length: length, in bytes - :param str encoding: encoding (e.g. "utf8") or None for no encoding - :param bytes padchar: optional character to pad out strings - :param str paddir: direction to pad out strings; one of "right", "left", - or "center" - :param str trim: direction to trim strings; one of "right", "left" - - >>> from ..construct import String - >>> String("foo", 5).parse(b"hello") - b'hello' - >>> - >>> String("foo", 12, encoding="utf8").parse(b"hello joh\xd4\x83n") - 'hello joh\u0503n' - >>> - >>> foo = String("foo", 10, padchar=b"X", paddir="right") - >>> foo.parse(b"helloXXXXX") - b'hello' - >>> foo.build(b"hello") - b'helloXXXXX' - """ - - con: Adapter = StringAdapter(Field(name, length), encoding=encoding) - if padchar is not None: - con = PaddedStringAdapter(con, padchar=padchar, paddir=paddir, - trimdir=trimdir) - return con - -def PascalString(name: str, length_field: FormatField[int] = UBInt8("length"), encoding: str | None = None) -> StringAdapter: - r""" - A length-prefixed string. - - ``PascalString`` is named after the string types of Pascal, which are - length-prefixed. Lisp strings also follow this convention. - - The length field will appear in the same ``Container`` as the - ``PascalString``, with the given name. - - :param str name: name - :param ``Construct`` length_field: a field which will store the length of - the string - :param str encoding: encoding (e.g. "utf8") or None for no encoding - - >>> foo = PascalString("foo") - >>> foo.parse(b"\x05hello") - b'hello' - >>> foo.build(b"hello world") - b'\x0bhello world' - >>> - >>> foo = PascalString("foo", length_field = UBInt16("length")) - >>> foo.parse(b"\x00\x05hello") - b'hello' - >>> foo.build(b"hello") - b'\x00\x05hello' - """ - - return StringAdapter( - LengthValueAdapter( - Sequence(name, - length_field, - Field("data", lambda ctx: ctx[length_field.name]), - ) - ), - encoding=encoding, - ) - -def CString(name: str, terminators: bytes = b"\x00", encoding: str | None = None, - char_field: Construct = Field(None, 1)) -> Reconfig: - r""" - A string ending in a terminator. - - ``CString`` is similar to the strings of C, C++, and other related - programming languages. - - By default, the terminator is the NULL byte (b``0x00``). - - :param str name: name - :param iterable terminators: sequence of valid terminators, in order of - preference - :param str encoding: encoding (e.g. "utf8") or None for no encoding - :param ``Construct`` char_field: construct representing a single character - - >>> foo = CString("foo") - >>> foo.parse(b"hello\x00") - b'hello' - >>> foo.build(b"hello") - b'hello\x00' - >>> foo = CString("foo", terminators = b"XYZ") - >>> foo.parse(b"helloX") - b'hello' - >>> foo.parse(b"helloY") - b'hello' - >>> foo.parse(b"helloZ") - b'hello' - >>> foo.build(b"hello") - b'helloX' - """ - - return Rename(name, - CStringAdapter( - RepeatUntil(lambda obj, ctx: obj in terminators, char_field), - terminators=terminators, - encoding=encoding, - ) - ) - - -#=============================================================================== -# conditional -#=============================================================================== -def IfThenElse(name: str | None, predicate: Callable[[Container], bool], then_subcon: Construct, else_subcon: Construct) -> Switch[bool]: - """an if-then-else conditional construct: if the predicate indicates True, - `then_subcon` will be used; otherwise `else_subcon` - * name - the name of the construct - * predicate - a function taking the context as an argument and returning - True or False - * then_subcon - the subcon that will be used if the predicate returns True - * else_subcon - the subcon that will be used if the predicate returns False - """ - return Switch(name, lambda ctx: bool(predicate(ctx)), - { - True : then_subcon, - False : else_subcon, - } - ) - -def If(predicate: Callable[[Container], bool], subcon: Construct, elsevalue: object | None = None) -> Switch[bool]: - """an if-then conditional construct: if the predicate indicates True, - subcon will be used; otherwise, `elsevalue` will be returned instead. - * predicate - a function taking the context as an argument and returning - True or False - * subcon - the subcon that will be used if the predicate returns True - * elsevalue - the value that will be used should the predicate return False. - by default this value is None. - """ - return IfThenElse(subcon.name, - predicate, - subcon, - Value("elsevalue", lambda ctx: elsevalue) - ) - - -#=============================================================================== -# misc -#=============================================================================== -def OnDemandPointer(offsetfunc: Callable[[Container], int], subcon: Construct, force_build: bool = True) -> OnDemand: - """an on-demand pointer. - * offsetfunc - a function taking the context as an argument and returning - the absolute stream position - * subcon - the subcon that will be parsed from the `offsetfunc()` stream - position on demand - * force_build - see OnDemand. by default True. - """ - return OnDemand(Pointer(offsetfunc, subcon), - advance_stream = False, - force_build = force_build - ) - -def Magic(data: bytes) -> ConstAdapter: - return ConstAdapter(Field(None, len(data)), data) diff --git a/.tools/python-revlibs/elftools/dwarf/__init__.py b/.tools/python-revlibs/elftools/dwarf/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index e5ef101c387271dc95eb123db3832a44bd1c3538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmd1j<>g`k0?xvqED-$|L?8o3AjbiSi&=m~3PUi1CZpdI z6BXec<5*DOl30=$ww59-UHZ+-G}9|9Of+jGd>)krom$kUZD#aEorYWkGA69320n zZCU@sLAALs_|&p&seoV>vr{XxL)%8$NuA6M-OLNUtQOW_&ShTeXZ5gdTig@x15Yh& zWX-Ut*Zj1VwZk^hb=F8bSvTz3);)_gS?gPiwZ3t}9*o+o1EUU%)>!v}74%-AJb_)d zqdYHEq>>_+fm=HJ_sj0#qc88$-QVBc{d|9LuXK0v*(=9zccc>2SkXx&B!}INeZ@tj z3ITL;x5!nLLG*etY5o<6m-6U6~ zFSweDyz~Y|&SMYemknvO+%Ec>0C8%cTGTpqptnz5=z;pq{oVq~V>T$|M1KI|kzJ5T zagy^FZ&QJMiRPC?9dQ!HY8s_RH!>DQhO=5n)DxRgk3=~GvH%N_L=ljii#$rxS-*9W z8yqY@IX8*N>==_Sya@+L73DD}<3bP&ha`Wh1!9qk-Z&EMyG4wB-#qyc)Tjt)*igbk zAGlb0al{3Oi3Ge`@#-6LYA=&CdCsNrH3~lnYQ~l5MdP}wCWx2L*4xA-Sccf}Bu~c| zHoUaN2CTjw?tU`-qvS#k!$0i~cP5iPP|} zU$T{6Trgg?%-SB0(-;G8*^pia;J*-)POW1I!c7Z8&7Pl-dt7N7pKaIvjL1{4UrzAs zJ~@aI$;sz@c2@{+b}}Y;an9@vu8jZ&07LY4?Ihew_@5K0Dt-uTV`4{K2Vn#%sjX_d z8!#+eV7P@-eg$KR;H}8pk>1>#7}48S3o4z*N}(D z)_2%D-`lp;v=n6Hv3Fd%fm7jeF_-eKTq{DG9y03$SVHZ+Y<$e-z86?KqW$76UI(wpvK=+J4( zM<3n(IJ{wo=0aL=hIj|I1)jEb=>nXEO`=c-+-dDG z_(TUfj7*6{!}4s;Y1ysIJzuZHFnO-IF!~g+{SFXsl&}q5gRz9&U>(-gC2Vt1%df;o9Cqc-QQIv3GEHKxbTvU&1MYTLB|2 z!-Z_XxcLk|=|hKLe8rw$H8H;j3RSRp1i*d{dN7^w+r=Qk?Fb(ate5rxkT8HT{L@Hy z{>rjbHPLX^N(V~fC9u?zzL|7QZ+rL*FFbFZeik@keX{?{mjo<$vk zra@=xUROow&%dBJWRCl1g38%C)#iQy%Ld9{p$(3w-Q^ z8-PjR2&jjBcr*23WPVZ@TsV7;BR*>>-X?n4xMRw~Z!z~I7L!h6-RU@<)3H17_1r7l F{{znINeTb} diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/aranges.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/aranges.cpython-310.pyc deleted file mode 100644 index 0906582f6dfa03fc312f359b79d6fa4a3075781e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4081 zcmbVP-EZ5-5$BSWL{YSCC(ehH+}-wiK&rw~g1hu94br5}N7Fm_4zYt?83zQVUCERw zQrTT4ut5Pu9rU5Vp(y$Xob!114-|dxA5rkNPkHW}ADYfADOvUveJBMDXTN4=XXiIF zOcxeh1D^VeCxgG9GmL*?WB#$Ban~@2{39^TU?et%#3uxKGd72oZw+nV9#;Gc^jXY~ ztHYXK)8m!c8P@%}=Bu&myWAExVO=e53_ah|^PPBM*z}vg*O?nH4ww8TVmvZfgL$tF z=JCpbom1o-b_u_KOF>`mY|W zfBJaiQSNSpL(aCwqnN)ni$$JPV%$~1C=`-|5U&$S4s8+jchm-SIO|~?hn*M)>+2v| z&woqG<@bMc@5#eW-6y-K$oykL<1U))Au!zV2{U~2DVUC1%)DK^t@3S`?@IZumhW2m zcHmuyR!Px@*nZ$wEi4bomua+Np6Nu+{u zr1p{v2}a62T)?FaWVFw7PxAhdCrY98=vKRz& zRu6)23~>q0s>#up>$kR_O4w}M|8jl%-e`0`RN?k#X*Z0wxA<_hJ&H!xR4DpfUF&t( zIJhzR>2@4-wnuwvCr!3_+*4^9%j@h_D0G-ATms@64mtjLM2~*w zE@tj~3zkgpf)U?hmzm2NufcWM71m^nz*X3L?0vSv&b_YqRrUe9$X21Z#x8;VX;^yMyb}@&RYz;c$(jfp5)vaqu23#^_EOvnc6PwZmzf@y@s(ln15g zh;UD9G)x$cl+8%@^io34-s#Sj)`K_6_k7u%~r$Z^w~T-E=s* za~p=WR%eX;kN%fd(*>=XK>rsXAfZ42mjI&x4|A{_|Uh)KxLCYYv zM&bM#MMcb`X-~J-p8|AfhsSBsmsF)|^wka*`~(=U7E7*D!Fv#{VAi}Kfb|?WF|1CJ z*`7%e4LI3Gt15m7Z{Z+WLxN5zFi44IAT3K=L;gCD+*0GwY1=P%$7RS4LZ##RFJP*~ z#C+bq0+(REbFBT<=@oou_QTvwIA;L_SGAYh9f+Ps%jjj#iX{&a8_&D*_k$OV%Io`i z3FyN6IV6m{0a*6oW*C`R2;hMUckwrc9Do;RW!8Z;0Wcp{Gn<*K#v3xJ0B5a2X4^Hz zVbRO%6=PD>QfqIFNliJbe&}X3)yS#`IYv1FJv%6DCUoe}YMW*&NKA#<|^XyB|GKinu4aKmW{7!dM|HMFJ&DR zvczBhzrAIcxTS2+Onj@FY~g_X9s{5~SiFF?wGWrx7#ECVo65xueYzQb2F9mfq@!^h zDh@6d_u3_j>8nWXl*vY4AqC%wxztgehus~jQzN>3i3To@^8{oYy2ZsXN}x7^Op}b` zm`)|b5VsX$O{1Po{S%Dwz|aN=0tWVG>h? zSV02ytRXOAJk;3Ji1e3>Y&%yc35@3AED(sVC!u>hbS!ae|H@`jGwGsJn=Tr{#b6o5 zS!-EGS`4~;w}{j=luv>9EBCRcnWp++hlh-d{G1Nrc!#hZA-4}?gC*4_+G*l!b`^bK0J4*zA7yo7c&RcSbiF4jL zru}dCANJb*$}~!zNQ}$+1ckYSmtj2SN0+7*{?hFo2lz{r<=77KOo!~hcf!gu_b5GgqvaIU#``Ex7b{p*YCUvCDZYoz4}rAo z!ddjV?#23}MIOR{cFdbNQxE*8n0^;Kj;G(lUPqkA-U~=B0?BJZz|w9Ih&Fb8j09az z;A!Sgs6Se;QWRH!T!p``d>jMZ(s36(ulaL5(mIPDL%lJ?NB9^L=ni>R?TsL~39NJk zT3b|r_#RYt!!&7+RTN8s$j__A$7N9;U?rL_cGEa6%6!=lJ6%!7rA-K&1@zn9RB(a$ pf6iw3^`o`6spUB-ucbTXN30{{hcp{5t>u diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/callframe.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/callframe.cpython-310.pyc deleted file mode 100644 index 999454804c07427f85f3cc5ffbf4dcfc26d4aeb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21273 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 MMoL4aEfbIbKdzwh_W%F@ diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/compileunit.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/compileunit.cpython-310.pyc deleted file mode 100644 index 986c33a6830574da62f91d5965b76247eec5600b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7999 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 diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/constants.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/constants.cpython-310.pyc deleted file mode 100644 index 4ed7d55d67b8777f8d5dd239243b17c09a04f34b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8118 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 diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/die.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/die.cpython-310.pyc deleted file mode 100644 index b3cf77611cb5bfb6f8d74fc7b5d7b90d77b3af9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10470 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 diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/dwarf_expr.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/dwarf_expr.cpython-310.pyc deleted file mode 100644 index ba4f41906778d7772db68cae3c2d57707afa05e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10831 zcmbVS37lL-nSZak`k0iR22qAmn+Djcz`#%Z+Bf;@OUbU1W-p^_W#v;-TkI>kZjMd z|6Si#Ro|=n>Z|Yjs@@bwjf!gcH0|2Bw<@Kbl zQ<>#hK9CHkav;a^!DKKWN`~^`WH=v5M!@GHm}|;MlTlR;<(l)cWK7qLkUR(d!?{uU zcru=ENw(x$ldY;vBsV%gCOHP>CK1hz&9^1n(0-hFCaZ~N5xYqjqeL9oB3gl?#TejN z(FPnR#sepaiNHx>GVmlZ1$eTU3Oq$5fYZcu;Hly?;0!SnI7`e1wu?Eyxndr0zUTlh z5DS5eL?`fcu^4!USOPp#ECrq=mI2Qe%Yo;J6~J@FO5iGS9CDiz)M6oaJ|?7yi{xiZW5b;Tf}9+%f%JI_lP8LtLOo46YmA4#QT70(F@E70W?G( zuwQHkX2lNRPLTuVMFCh8CEzY0fu^v4Ww9H0r5FJ25re>g5EbB%ct7w1;)B3{6juTF zihaO;5?2GS5!V8*6aNhSkoXti_2R?8kBA$9H;Rt}ZxS~HKc?{G;u9#}B0dTHl(-f6 zX>l9yGvapOesKW!S#byOPH`9TZt*$b=fy$b7sNflFN!Y#?-lm}zbx+Gry1j6D=YW1 z)!JVDPF*~31m0H;=Y3dDP7n_o6U9TzHSw^jpRj+@0ga?2CyTG5=8@&vT1`AE9^0ph z$Bf9{K=LHekBcWjKe3l3r-*08Q{o%@c=BZN^d_zSIfwQ}yKXn93x%SUwz9>72{L@% z9?LM-t#9WxTesdGwfQ|8)}*>FSkraUy6&}hU{zs{9qmr%4Y9dg${7xWkb}A%Gc8%p zSgBH4ng*mqS6{wr=i4 zOfl7clj4~qEVX_^DlLR`uyr-N*<}br8huWPIHO!nh6F7tJCVb9rqk5O>nuCuFh=z4 zG@a%~-r}+oJB(*KqZ)Zj%TD|-p6Rp@4-=v(sPUDZ)<%};j3!o-H?MNZ8AG%;aUqK( zXRMD=+-*pw&BrKZGdrDeK8AT^y5x)}h9^@NEoTDJ-be;q;9 zG1{#sMyjlo=$uM?Z*u1LoO9X;S~@d)g3RqQ?acHw7{HTe`RHEM&nDU%h_TCQ_mTaE zGsjO_&RidfT`RXV#?NN|kNC9(@wt zB$eq)JD;Yi7PqQ53umHcd7H08HebqRGpO2~&Xo=4GgRfx)U?u>ogV*o;(G(Abtx6I z1vnpPKUI3uqNxrz2f#`Ccj$ogS!(1-HVT&9<4L}Q_@2s@9j2^3CBwPX*Bpz5(YgG) ze9hH{bJ=%;ogBGBO3de|dEJ#^ms`%~eQl+orcjcG+1d;@G=y>svnAsL43QAavmZtnbj)V zw&;*9w2FSKb{i9VMW3ME#C9=+W0v%GW)7-fh}H+SgUn_f3+(``Nj?aUg5j-Q%X+q8 zvCW?36f^ys<|Qzw+IZZdbkeXgXglIVV_He$p%`LlNf=L(;q0Ot0l|<92Jp-A8^mu2 zzr+vYHv*GtA}>c-7#4SZ$qwMbHY=ilhuh&|DMe2lY|3R#Yb(;aZ8nG1n0Bbx*Jm15 zHxj@|O0`L)>}V>5;9kZKNZGMeYF9a(qu!ueQYl{onM(QeP+#(=F!}*}O-i_;T12P6 zm@bKb^f^;Vug+QM$$*H9kO(7#B9qQ+HxlWD$eN|JmD!%K z$O&{LR`tQZB&_XeYo3y(M5|4NE`>y|fuCH?5D;22(v~4|dlK^#S!)(a2c5%^I#f?P z>^)AZ1TX~8UX}%$cNYsrhAgN0p)!5D$Qa@%Snwiy^@^5)No+z2-rdgZHn=tf$LerX zYPeXTkqk8CCftDh9>n;Ti_DgmT**jX4NBQ=Tpxrd9HHHgY9pJIf``ZT(wQMqNmR4@ zt+d~UM=R5+^<7`uHeyO-3zVpVAHG25L-QDV($?1^F@c@Co=?zWvuMPG$)UY=2rVQq%N zsIFuPrJ{wP2ouBl!zc=d30rU%UbU62nDtbDR0`o#WfX+kS?KyB@Z?Wa1q{td=k1U(R-t6u zoP^e&nvB8&xMw)&jzDeU+CH|UbxXevLQM*5u^`tOiv*%Nesvy;{Haxs1|s@+#$F#p zGBVO~>H^?kTni-2moE^!2mqJHD}P$!zC_%R{1!2uC-^qN4yRJ0n1R3fF|l4Is1LR_ zV)SoubYaD4r*GZ5Zv9rJ_ifwesby7;a@)2M zaf1$rA$+k+y4eTJYS-yv!!>%JF2W+RFNTnRsfdc^eSCjOR) zo9WI6rJ&fNT1*s^&>|!*QxtB0K!wHSikd1;0TuCNCB!sPO%+{CuLSmLdzlW`AWp6D zYqcG?AMohY6ivI!t)D^kekNufsPks2Hi253*{Tg6(WYIs!OrvK%u#JZBihVWyzmI# zJjIKQ;LTUE>SOFsbW=_C0!8aJdSOHRMMUo(Ilj(Do;ZEAwk~2~{DIQXuIH_& zSS-$R*w@ zt*q7suSUVAF-j+J@>DS&cT5RNY{;3zCl^bex8A5it=lnUCGzfd6zVB4r0Abc^py)4 zx)cBcy&X}E(d^1p8Jm0t{>bLkcKBVrS>5-J z2+x#lP&z!8+!_U{3XA|*hc-z=f{C0%ejm(sU4D&zn0ysK@)wF_2UX_bI%Jhr1aR=W z7j-J5Xw?U&9Vt`kSWaisoVlU{t%s)_!wXY-1TPGMBR(|bO*C9`_CgnIAISDV_Xu|l zo6+d28qx&&t8-D~J*dl{f$0k-ZeFxJm(KT!^a?uds9A7raQU%k;l{c`k*u#ix2hoD z6Y7CWJuBw#cz^YI5q)sZ@jvgF%TC$Z;o1w}NwnC9D4?l0LmH%$#1S-DZS3Wua0SRk z_p*L$OxG@$r2H;94%VDnO-D^+qjV@u(Ggt!26fPMJp-kQ%ijX%WM@)14QWgdy)$^u z@yr>A84`O;CI5k*P)iK#QLd7`p2R;y<`dHg=bpe5ZIv;(IlOE^|HDkJswnw;)E-ll zq;?AdVuT)L6S!4%(Tz)e3QApcm{#T((*{=_&%m(=DR;a_)7GKdQ&dTrWUH&KdS|s> ze?-f{juU$--Z#kpMcxn;(diL~d7rB4l#N}ZA)&&Z$l!95S(IV= z6w2gVG*!A;YS8M}!BR#T!C95RGq~!+=Gb{O)zW2^`zTdXsvX^^+Rn%6>12#?KDgin zpFG@g47YjMd91+;kXx*3@z59$BCPyCP=t_S!Z6_rBHhYA4mZ_OV--J!Cn({EKVig% zpcSpH>P!%{Os?k`!ZPj0B?}ID%nDqKq;NlueFyZqM+qvAVvnwS6x>JjF6vw=ZAfx+ z`j=6{wG4T19CC58Pqwf>2Ug<_rtvtLQT@^Nt!rNeViBHpjXffi9^W)oO_0GdH-^~hC2snBSII6cI z&rCtWoQMKt1N(K0VGRT1wdg2OUoUQRG6#2cC>Th(H&wo@VfMPDwRsl3o+QjXLGXDRsV(GsVlwzl&P~R37gNg%+ z<~0>peObG^C0xA*uzQuR?H1n-!ElxyRpmdZs(iXOc<%8ig5FYy6V-c*>)>jADQ$F> zKmUZDnL)qW$M32n-SSr*ldSEzVfSj27G#7IBF|d&a%K`lUE4UR;|7YuNA1*Qt6;#% z1)P@)k&3QbVKtECK>s-51$Hty)8i}iC%%RIr3y~|B$W204dd z9zh2|XAKrpX$iqnf@K8D304rSBsh;?HNp7=7Z6-X&`q#`U?ah1f-4Bf_GAyidkNl0 z&`Tf*EP@Kb`w8|D+(K|GfwHQ#C=GhAGV$JMhFK->5(b3#N|Rol%rM)-vX46E2yP~z zw~g{1f-e!=N3fk>2f+sk3IrvB-2?*!g9KL*e2CzBf{zf~NN_d5?F0u1?jX2};5Gt! zX({QQaW^jXUM1og0y;IyUlP1P@FD=ltjdnB{2GcA74FDdFg-W2EYU@X=O$Iw>$wy84lh})(| zSUehMM2$yz3~Oa{@f&(4$_U#S^`yU;`t#ShEne6dy21QPx4jl>-;?Sue^(Wjjv`;@HOmlem;AQ zuVs(&3)mxk9s4T3kUh*VVh{0)*@OHN_7&dE9^mWQ{d@!aGQX7F$2YQj`KB>C`{I}_ T?4B`~#lJ8)*&2+8p&(GW)^czq$SKRhWUSQG>~ya*(p)y( zy|Uz5R{`RMC;o!X16926&O5(iUU||#p!^W{PS32Y03%KB>FGY*r_cG$ce?2H+7_PH z*N^xA(zC38Qs?~RqVo&OveiEzaEsfimDz!9lkB8U;Fw=GaPjM=UgigW)(9HeTrh_@ z9{1B`)(ToiZlvw36LgF`mv*yW(97n7dD{{V`8o8P>4j_|STN(Q^kQ}?xCFV)JLzJ! z6f7CJn_kYAgJmQ4(v|E=a0T)WzQiy8!3$RT2Yi)Zg>;pFk2C&0q<8rD`FHtsNY}Wt zW%c`~biTe_cA`8lbfl9aSDSsebRIq`dr!XnVj~>!_7}i_g;Q{>QvMHds0Tn z&}-j+dhhXr4JixRcgn@F6iUcL5h^W3l!fC$m0ie_Scl_CDgl+|LoH;ap!mZbr_R28Xv<65;r7(pcc=EqS+-8> z-^qb>5d;DWPaxQ~yD-DEP#cLhrm zrPUfsi`WEo)`ts{d=~=|=ZKRMYTYdJ;=L!ZV6Y9-YD?LzqZ>yo7lJExL-qZjvnzB6 z8$;Mww$FU4WE0K`TJa>Tj#&DKQ92QQS6;+`T%^%9MoEjf+$b8pG z>usY)z%WTT1I94XIiQ1XjZ-#+^1;k91suW*mPI<=Bkb-)+AQ>TKJZ&eSe7#ryfDc} z#X8#(^+tz3WJ=>qkwo&$miu`9?wLV}V)&mZ;GRs^fV@h9^L!VUh7TS+{#95X=V(W6NO@8RNg@#yatk7h^iZp_px6<;W>R=uZh4r-X*hexm}>96$teQ$e>n4NSt> zWeam86_a2A*&W^|nARx*O#)<abvSCPA$}T!@dNU$^24?>%CK8-Ia}a#I zF%jY`2){Fw$ZZY8zjlCb>y-No~F8co1Yeuj7k2pQ6>P|xnASpkKFi(Dt5BY=_O zJAuz>IVox!62(-$Bs4}Wjj|ypSb;-zbb#44FxF5DsOT7VR;g4eNj0yu%DF1m>cM8e zS9(f_gVI6OY;J9Ad=_qO-Y-2Z(zNbxZ9J)9)vXZ{7n58EUZQ?x|n+7m9$i9ZiITi6nrCK)jM8t&*di7E@o`}`Y zVRR`>XotbJLVAa_-+zWVilFcOcD~iL=WWkvf{clhuh~tf0eRtH@*~>S8{rZVlY?dt zf%AVVG`C;dFKzBnotDemer4+QYw8(%QpQ$1=Wi8@2T|oKf05 zXwG*0Z;t4M7Sg z4h5>0ga=80kUpAV0luyhZas@)S*Qx|7ZIhb$k$QR#n{|!s|!oF{!Uj0^_Hy53vrPG zcxL8$G>m137H^#`ZVnK1DE9C#C5|M|z9rb8Nq0OmfIwQNMpPV3xHdjN7b}xBhSZy% mWCfq3;^!24MPBPRn@Eo(yXzn=kSbjxp|#s?yWL)yzw#g6CT_0) diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/dwarfinfo.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/dwarfinfo.cpython-310.pyc deleted file mode 100644 index 2cc9aecff1ee1459c72747e82cfbaf91e50e9d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22918 zcmdUXYmgkrec#UR?B3qq-UEljlLR>g2m(if2ZArr6igAqiy)yR1sq6e2x>XEJ$JW< zeH>?I@i;F`N`NHG66L3C%Ta8=ahxDd?22Q>c{)xMm-8)-Qptx&lu9L)s<4vE7k)?z zlF0mi|DKth*;|lQtfVS;b$vZO-96p?e?MkAI0Gr9Rf2X>GB$NWI$J+S+Dsllpjb zduxZiL+TUFovpj548^12XMcrwqh?2+Yd|MZFt_C zJ=Z#DAC&9u%|}{?>_bxDfjJ+wA2o6(b84r$>v~Sz<&It}*pK1*ZnX>7yX5+DT;HSa z#r3_{^7a$TI-8rl?;S#6)(FR(cDoZeL8H_5aamn#_-;L@d5z_j0N0asr@rE<+M3r{ zbG_ioY$42_dNCYd`0Pu^Ye%0ue)NS?^C!c~ywh^kLU*m{zLVGUjvno_1EJF>Xwxfd6l#iq-ir?H%uyw0-cv~W3o z)M++PpzfY(FLh?~;rQuJT@K=O!w>v$Q|9s|r{SSb<&4u_c6En|eqHVw;m8qb;<83~ zB&W|UpgL7sc7xiYPb}GoNcI_oj(WaatkVdIHwBuZ{mLu|4aBk zg8${{|0w=ffFWby)?@Bsclj*P0myO8_3K_^4eMMVJ@w+Ni&p~Ie=RI&*n|cA56w2V zyk2Rv1FL7vciOH!zTE6AI?ZU?VF9;7({HT1;fSM@=lcHqEi)|FY8+Xsg_T;Z)luCh z>(yHAjjq#-?o8HdDMYQ+Zsoj#*qao$?W0ehKL_;j&)c6ldj81T+A$|^&J%pi^9yck z?fhC}?cu=j0EUN`>Z)6NWc8`@&Bo&SwJX6&r+waSE(M)V(?2MvsLKX$Vs7n#9G4fW+Mo25N=yFoVK?Y z)7jM)h!HqkbG-VBw+~I>jB=NpZZoJw=ULO{kwyKdGKU zZBl(jJ*$qOHl==69aYCr+l1P2bpo|%^;LCBJ&)REtlSffnqxOpW3~D>n*OjeaMQx}0IrW59+_H8fq2wdtFO?Lp4=PPUAl8tgSlezZRt|ZTS3R_1S_s*wVc(CXLS}=L9zY;Ytd_{WiU}|(G4!SZo6VdKNlUZ(dqgYSS_aP zELj+BDbl({toK^N1m~oGSi*CFm4YJSg!HPhR}Es~_O9U^A|n5AlkV<#@7lqt>^8QsW=ii}*WAPX7m}^o(Avmh0tF8odI_e9uH#=oL|#y%Ne| zZv9WceC|xJrI%aHt!`C#KK^f0g}1qe?TsAD9a8RGX8kTH?^Xto+;pJdy#(DuA4^_Kd_b?7u~jXsS&JfnB{_d)ZS1m+f@N1N1(FkvO(be3WAo z=DJbVkqqN?lLoxcvPjfSPcUV&zaW|BchKiuS$1K4$FOBfuW+>44WP?Ghxc}K*85P@ zIV}DuphAs{*x>I(rI)(_hQ4atG_Hc7-pHd~=;d$b1v|cHopd#5VGdZdk_57law5?z z0A;NkXpv_%JDm&NHA~3Qk~Pd_d1$h>jU4odH4hO9JLWjo9&up(KqtP1lk@|pU3abh zzUwAv$m8VC9IYR$tVLOCIc=4+XgIWh-yP-8rjW-BM>*)|xtbH$C1DeOIKw7vR~v;M z^j^qn=$Z|hRX#YUAlYj;x-ehw4#I6~W^}US-$i$y=UyF|FxEAaQ{j?DCl5=y&xa$? zgGK%JUdPDW(HZTBnw@$fX>nIkN$6 z5~Qv-J3fVKwCg6UM(h*}E?)bkMzcw72L}ZOrmOmxG!IjIQ-n$p?*yCjY5+ovFpH=Q z90xE)I(-{A{Su0DrDA}w-_xh?3_e9mp>ezX)CRgvlr&0ADn}aFplgi?Q$Zd|ld&~- z&G>@R%ijQIam(!&y;qx4@7!ga#kPskC&3mrZr+ zFy(OY{+e5FU~%!B;&7CbEtXvJ2<@dZVrp|s#IPMhDNfF*RfVIHo*hd7LnQvf0-f+L};)Y4k@2I4){ zj_zN4T%Rg|ps}x^Alfy;XcTV%jn>w{TtzewLGVbl5UxPC$Qnx4I)8gM!EbBtBZr>6 zEQ;S!r%PzGW5Fb&?J@p~y_-eY0&*>jt1VuEQ))RZfMJH^7u+l22DT@~DJo`yqErt@ zgV-9l6^U{e+%n9AgAJ-+G3(VcKlL3lY5KFOGi9S{%ou4!Y@n|{PE{=UoZlAPJ4z4VSd5r?BKoC!i8KrpU=S`Zwdp)m;g5SYO#m$ z!r%)ROz)7iwwEBI6&aJmSl$q2 zV?f+Tf^MS#ISyl&j4P4Kv36qZU+egOW0AH3^;D4bfNqhX94VeZ302Ngk>wsD?2I|N z%#F|%IAQDzE69-B@7c`pDDyXSg@Por; z-*D1%VJ7IY2SB%Qs*&q$P+vsxi8nwcMsyhL&!w9?J(uRm5!@nZ^@Y#vJ=l1p(rarh zWemm#HBX;yZhdzIE^Dt31?dXdc}%uipM6B9qIyzDf)u8si}wXROpD>NEmQBG~B5~k4Q-{a4> zP~^u=SlZ@$6NS976Bf7mUbVc_m?+#0r+n%CYGM7Zta=9fp|A9XC9MWzh@Tc%Lj1J( z{-VSWvIZj%ovrA6Bdy5egtf4Ya3G_#3*IT9TNXp3t{bUs0W=Y5HPqap{A${Q46E1O zrU+R`H`J*t(<5W~U7)Vhx9c^j(X9o|xx3hG)Ge_c55!l(*$*V_LI_FEbpT|UMp&6@ z4Nhgx>iUBQ!VoG`4G+==3_+6{SAf$|9nwv^V_kHb4JAHk>@o8k_Kdb2p)-P$^$Q%w zTa10+zSM`ZvUty48=#J8kf6#hHbjPTQl0!@8v>I5jV=Ka4gWAxA_L{LEwON}ZvouNlpq#GD3F?yI3?0MGkI^5nc z&sLcno2+{eb|)^aav|->jBnqbPIg4p`QYt%SMWG&<79Rhgi!`CmGWS?sx z^c@SCg-FPJz-G{8KQ`n26c({zE4b-R<3@(IC=e2Joz7s=7Q8ivKO!0+yfkcC&0j!% zO04loTj8SN-5=?G>;WxJM?m1VGY)ee{NF*Knp$f+2^S7*qEwDTUun>&9&skEx@&Mo zPWA+##_PzbNN#N6(3B z9&5Lz6Ue|sJOuEZ@^}Rp8?0I!sRYQzu}pog!%k}p zPfI^uyPIVV$H*9|E>4(m7T=pao(;V>@Rj&fywCI5UqFGy9B2K57qeqtxi+I0c**H`%YlO^;qz9F%1h$$LbSuY%^s*8cA^(m2f)p zllTXoWP(~WNY`h0R%XP5W?G3t>l_sv00oyeQQgaMGyo=8`iCEBj6C+Fc5eDXD?qT?59Vi!_818+ z=&Xrfs*-pk{BT!f-|}FX5=j(Bh$_! zM^Z5*`Nl%dVJwY4k(~cL6iCT57^XmuFf@u`E96S&@#OVQ{bfh@Zg1fszZxerf&($b zF{=(!f-vSHEGQ0{WOOhsL0H0%hEhCkD*v{575dqYlBmvw^?3=B5{)H#v|)D)g%TZO zwiEkC^!_*Sn)z8%3k;FFvsfUqWtr3o&d&@8$YwbjT6Y5-1tmg3tLUMTooE;8ON~La z7{loZ>0@y%q62-F^m*uf1W4!~l#Ath?hO6I+}$wf zR|w(b&k+GGCkQapUu6GwW{m{)2>t}vPoff|Yoc)90oYKkiz#rM>(32>MB{M)x17bD!0r7!XZQsc1FG1BKBXAMR|#SoB54o<*xxUg z(q?6L(CvvRE+5NqOp^St9?S4|EnM(Sy@?<)U4&#vIOeqi(D6l@DI_a3nttEg z3UQ#brI?bDLJCpKhmk>*vLoK_S8%BBl9`uA;h_XOH{UbO^{suPNO#VVMH+;akUZ{CUxMg_5+q$VZ=K=l0y zp3M#xeV%ql^c5Kut>_kxMpTiKnZn+b+#&WxeQ)p2ye)yV%3SmPh&!EM>~48?4Qmum zg#=St7f6wr4sb{p-h-9>6}kV5M>6j#tK1*t-Kt@)F!Y=ajS@m?EfLz8skP& zr5R%i0oSUr-7xcMX_Xytd$*9nX)M|Y8uTwd3SM~344gIB|6>HF{^$<_k|*?cFru?K z7dt-1w4nGw_EhAM0&(Xxn&BX)75@zxc&Fo2F z@)7zxicNbosJy#ajIkg<>@DEKHOW(lXN@lzNyeN&EG%gQ*n1HjVLymX_&P`aRgSD8 zJeoXWP)#hyGkuqQm|=lZp=?z0RwlnV?j!-D zSJpejXKe7^A{wuiPMzPR^A*_lP!R7Wua- zqoz^KSB$&~=kELEy!l?KF!R6CX)*(W`#U0%_t!BY+7Y5L%2fGG`D?-q{dR#9G|5bH7A9GxtJhl!&|!0R#BCaZ+ARx_||2YJZad7PRX4*}!!aaB(;qh5-3mH5Az}^g>A!;&iVG<(^M5`JgekGYq z!qCYq9@Y+EErz)W$wr!?xhttjPp13XlfSM|BH2$QF~?s zQ-h7fa|Rvg(}T8rk?*O+c>*A6=s}D(WoR)<*+F;|dlr)O;Y1Zv5AJ2SF(XujwBb=8 zLm|??p^<_HLGGF9q72S{0oiXqE}X>$fGsBo5soI)c}zHu1c6;7 z5AY?h;|&8o1Je~aNF-sPQil0h039P(v(>B`)!Sxy{qDXgxiRG~L&O`vtTSDbG&SQw z(c3Bfo&4WmqS}Q#S`g}tuc>(>HuEJAw{#4~NfFM;W3}re!uquM%WRkn#W_R*PA0&mj-m|g zJi98QC9!gY%#lnlh#KkylCI?~pq4Nw=^uNtOE>_$jvs3*B4<2~d!5CAu%X1-O*ExR zP#s4`mQg89&~=?jm>-rdlR;6s0b^I-yT6Bvh!gc=?~-vTdQJz)CfGnCfr`;D&BV#KQTuY`@MQaRR;Ges?i;I3!c4ozZ;_nd6fdZ z8F^z&-@R$5imo9|pIM$&zEz3$D~(=BjlEq2%2$!B@e(mg5Go1@YYlfOnhWZu5nH}< zkg^BTo#KSBJZhJC8l8ZI?-|@<|qac@PS=EEQO%$uTqox7n0Lt8h!LfwySmMb_f& z&xkJzeViDxFTL_M0|AG5>3 zq@M|hf zQKRJT$6~3UVJXC}eFNMyUQrYh5P%Jw0uS_?JOwUjdm){pFr20Yz5=k#7?H8~V|ENC zWcdF9cYDUqfQcdlpu+z;nF%#|>I{FAq(?C?pujeSbG^zmcQEEL zRlQb#Ey?=0nviO^%zZh zR7B<6tnJntV`8-y!KCBWfTu$ zZ;ZWPNV$dj(m`q$CXKKMDsF$C`EZge z3oi|4={y{dR#%gZgFhn06DZ~4G^Ew~D=Di$uvA{d-~M|6OT4ogiA<+j(T5vcrC+xwd4J3f|AfV#upo|wMe!$jf5wKs)1SgL zoE*T1-{Xny#+_=B`OcMmr92H4h<_!x|7YM@qGQSYZwLZB`xiZNe5NPPgwhF6HO;5O zvA7+15%yL(di8gsghJv@m89K2kwG#d1pj4K;{!qlfv<;pH{&nLp2j7uKN~Ol zuB&_%t%OgifJPMF5SIV2%jJJQ`j3~(l=&_5w~enG(e`MhjCkM0H1;;2t86bm(<|EN zFC;EEf(BmK51f`JacScF72r@0aDq_`)I-8zi+#hAc4kJ5Ebmdq2)crJ|268N;SL<1 z_ixbrT^`&FD*3m}98~Y`$Di0L|Df`|xKCn*RFq39EcQ&CdnE!kGFt8FxE0^birPS0 zg8H%+!G9sGKfxrzP*S8d;eq``pG%=uYj4pO%An|!RR|Rp1Ag$%`*U{Qv?1lp`&Vq& z=%{%(9e&ByrCmP^d6DqO3;e)=!w{nM0636z{n@iw+zoxdgQ2# zL~Aq>{dL@7{iQ_NI?ilCMsXzm!??Z9MTxvD5JU9QN8ekDKDQLBU+HWQiK5I_^v7@r zX?~K%y`bYf6B;4JVy9rMYS{{gkIxg@Q<2S@d^5+cq7!r}kOkHwpVqObQ&U9Ch}3y| z1ib<33j;I~PV1+{Po**bUt^M~AP-qHVSpYrfVY_T32q!Z`=GYL4`FZGaAzz}=LkrR znB+-KlG&stc}`N3)M=?blk}4qrL;Ypv>i!mpG<1NlW68+N$q%2JCW2*Cbj31+Nq=_ zR;N6zFBS8ej2}fOu&3A9cQ*^^aUW}c%3CFGk@bBnUT0Bfk#xdPmkn}1-P#`|tyAcP zzCpHc)H*Q3Ciab%cR5w>4V`0pXzN?L^-K6CZ!hZ=f0?b(%wJE{zmcl{daC}dRQe{1MCISNy|8Tv;oFe{}F^V3|97^HI8 zWS8+a-(r2g_Yiv=VDT`DaHLj4CReTIy~3+9WPp6ARKKM9D!Vx>YAjkT6pPQXxWrm0tPITwZ7T~CC+y$LU? zweW?t-H{QtoF4FiCVvY4I)7Rdko$94H-JW1@rAP{abQLY_i9k{ujse zJ23x_(-3Fi`a|BJWb%4cF6{9*BSn&Rye;fVEif$UED>)TTeh?7NR-ngNmKR+xi>xl zB|${bi+fpEDDd6PhAZEF(#&ZOZyaJlhzvu5 suzXm54fPpPqI}D>TCV2#g@b+x2`|4>NW{@KGmjeo@H;g*H8WlM-%5g?#Q*>R diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/enums.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/enums.cpython-310.pyc deleted file mode 100644 index ab12de94929ce21960f9f311805b4ed2bfec3df5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17688 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 P+AqWiD-)MBV?O&IHj`5a diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/lineprogram.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/lineprogram.cpython-310.pyc deleted file mode 100644 index ceff60ecdd2d2bbe0b3ab86bb0254678b800b055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7399 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 TU|DTyO;u+lZLT!R^Q->@fqq&P diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/locationlists.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/locationlists.cpython-310.pyc deleted file mode 100644 index 41dc94e750b141ef53d280f9c9f8396c1d65c8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14736 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 diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/namelut.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/namelut.cpython-310.pyc deleted file mode 100644 index 56c9ac5230d7f6d94d901b8ccf3b7a0cdba3076a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7272 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 diff --git a/.tools/python-revlibs/elftools/dwarf/__pycache__/typeunit.cpython-310.pyc b/.tools/python-revlibs/elftools/dwarf/__pycache__/typeunit.cpython-310.pyc deleted file mode 100644 index ee966c125765fd93d424138d05a495d6934ee0b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8194 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 None: - """ Create new abbreviation table. Parses the actual table from the - stream and stores it internally. - - structs: - A DWARFStructs instance for parsing the data - - stream, offset: - The stream and offset into the stream where this abbreviation - table lives. - """ - self.structs = structs - self.stream = stream - self.offset = offset - - self._abbrev_map = self._parse_abbrev_table() - - def get_abbrev(self, code: int) -> AbbrevDecl: - """ Get the AbbrevDecl for a given code. Raise KeyError if no - declaration for this code exists. - """ - return self._abbrev_map[code] - - def _parse_abbrev_table(self) -> dict[int, AbbrevDecl]: - """ Parse the abbrev table from the stream - """ - map: dict[int, AbbrevDecl] = {} - self.stream.seek(self.offset) - while True: - decl_code: int = struct_parse( - struct=self.structs.the_Dwarf_uleb128, - stream=self.stream) - if decl_code == 0: - break - declaration = struct_parse( - struct=self.structs.Dwarf_abbrev_declaration, - stream=self.stream) - map[decl_code] = AbbrevDecl(decl_code, declaration) - return map - - -class AbbrevDecl: - """ Wraps a parsed abbreviation declaration, exposing its fields with - dict-like access, and adding some convenience methods. - - The abbreviation declaration represents an "entry" that points to it. - """ - __slots__ = ('code', 'decl', '_has_children') - def __init__(self, code: int, decl: Container) -> None: - self.code = code - self.decl = decl - self._has_children = decl['children_flag'] == 'DW_CHILDREN_yes' - - def has_children(self) -> bool: - return self._has_children - - def iter_attr_specs(self) -> Iterator[tuple[str, str]]: - """ Iterate over the attribute specifications for the entry. Yield - (name, form) pairs. - """ - for attr_spec in self['attr_spec']: - yield attr_spec.name, attr_spec.form - - def __getitem__(self, entry: str) -> Any: - return self.decl[entry] diff --git a/.tools/python-revlibs/elftools/dwarf/aranges.py b/.tools/python-revlibs/elftools/dwarf/aranges.py deleted file mode 100644 index 9fe1a95..0000000 --- a/.tools/python-revlibs/elftools/dwarf/aranges.py +++ /dev/null @@ -1,142 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/aranges.py -# -# DWARF aranges section decoding (.debug_aranges) -# -# Dorothy Chen (dorothchen@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import IO, TYPE_CHECKING, NamedTuple - -from ..common.utils import struct_parse -from bisect import bisect_right -import math - -if TYPE_CHECKING: - from collections.abc import Callable - - from ..construct.core import Construct - from .structs import DWARFStructs - - -# An entry in the aranges table; -# begin_addr: The beginning address in the CU -# length: The length of the address range in this entry -# info_offset: The CU's offset into .debug_info -# see 6.1.2 in DWARF4 docs for explanation of the remaining fields -class ARangeEntry(NamedTuple): - begin_addr: int - length: int - info_offset: int - unit_length: int - version: int - address_size: int - segment_size: int - - -class ARanges: - """ ARanges table in DWARF - - stream, size: - A stream holding the .debug_aranges section, and its size - - structs: - A DWARFStructs instance for parsing the data - """ - def __init__(self, stream: IO[bytes], size: int, structs: DWARFStructs) -> None: - self.stream = stream - self.size = size - self.structs = structs - - # Get entries of aranges table in the form of ARangeEntry tuples - self.entries = self._get_entries() - - # Sort entries by the beginning address - self.entries.sort(key=lambda entry: entry.begin_addr) - - # Create list of keys (first addresses) for better searching - self.keys = [entry.begin_addr for entry in self.entries] - - - def cu_offset_at_addr(self, addr: int) -> int | None: - """ Given an address, get the offset of the CU it belongs to, where - 'offset' refers to the offset in the .debug_info section. - """ - tup = self.entries[bisect_right(self.keys, addr) - 1] - if tup.begin_addr <= addr < tup.begin_addr + tup.length: - return tup.info_offset - else: - return None - - - #------ PRIVATE ------# - def _get_entries(self, need_empty: bool = False) -> list[ARangeEntry]: - """ Populate self.entries with ARangeEntry tuples for each range of addresses - - Terminating null entries of CU blocks are not returned, unless - need_empty is set to True and the CU block contains nothing but - a null entry. The null entry will have both address and length - set to 0. - """ - self.stream.seek(0) - entries: list[ARangeEntry] = [] - offset = 0 - - # one loop == one "set" == one CU - while offset < self.size : - aranges_header = struct_parse(self.structs.Dwarf_aranges_header, - self.stream, offset) - addr_size = self._get_addr_size_struct(aranges_header["address_size"]) - - # No segmentation - if aranges_header["segment_size"] == 0: - # pad to nearest multiple of tuple size - tuple_size: int = aranges_header["address_size"] * 2 - fp = self.stream.tell() - seek_to = int(math.ceil(fp/float(tuple_size)) * tuple_size) - self.stream.seek(seek_to) - - # We now have a binary with empty arange sections - nothing but a NULL entry. - # To keep compatibility with readelf, we need to return those. - # A two level list would be a prettier solution, but this will be compatible. - got_entries = False - - # entries in this set/CU - addr: int = struct_parse(addr_size('addr'), self.stream) - length: int = struct_parse(addr_size('length'), self.stream) - while addr != 0 or length != 0 or (not got_entries and need_empty): - # 'begin_addr length info_offset version address_size segment_size' - entries.append( - ARangeEntry(begin_addr=addr, - length=length, - info_offset=aranges_header["debug_info_offset"], - unit_length=aranges_header["unit_length"], - version=aranges_header["version"], - address_size=aranges_header["address_size"], - segment_size=aranges_header["segment_size"])) - got_entries = True - if addr != 0 or length != 0: - addr = struct_parse(addr_size('addr'), self.stream) - length = struct_parse(addr_size('length'), self.stream) - - # Segmentation exists in executable - elif aranges_header["segment_size"] != 0: - raise NotImplementedError("Segmentation not implemented") - - offset = (offset - + aranges_header.unit_length - + self.structs.initial_length_field_size()) - - return entries - - def _get_addr_size_struct(self, addr_header_value: int) -> Callable[[str], Construct]: - """ Given this set's header value (int) for the address size, - get the Construct representation of that size - """ - if addr_header_value == 4: - return self.structs.Dwarf_uint32 - else: - assert addr_header_value == 8 - return self.structs.Dwarf_uint64 diff --git a/.tools/python-revlibs/elftools/dwarf/callframe.py b/.tools/python-revlibs/elftools/dwarf/callframe.py deleted file mode 100644 index 0a5a417..0000000 --- a/.tools/python-revlibs/elftools/dwarf/callframe.py +++ /dev/null @@ -1,780 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/callframe.py -# -# DWARF call frame information -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import copy -import os -from functools import cached_property -from typing import IO, TYPE_CHECKING, Any, Literal, NamedTuple, cast -from warnings import warn - -from ..common.utils import ( - struct_parse, dwarf_assert, preserve_stream_pos) -from ..construct import Struct, Switch -from ..construct.lib.container import Container -from .enums import DW_EH_encoding_flags -from .structs import DWARFStructs -from .constants import DW_CFA - -if TYPE_CHECKING: - from collections.abc import Callable - - from ..construct.core import Construct - from ..construct.lib.container import ListContainer - - -Line = dict[Any, Any] -# TypedDict only supprts `str` as key, but "Line" mixes str|int. -# class Line(TypedDict, total=False): -# pc: int -# cfa: CFARule -# "int": RegisterRule - - -Augmentation = dict[str | bool, int | Container | Literal[True]] -# TypedDict only supprts `str` as key, but "Stack Frame" is signaled as `True: True`. -# class Augmentation(TypedDict, total=False): -# length: int -# LSDA_encoding: int -# FDE_encoding: int -# personality: Container -# "True": Literal[True] - - -class CallFrameInfo: - """ DWARF CFI (Call Frame Info) - - Note that this also supports unwinding information as found in .eh_frame - sections: its format differs slightly from the one in .debug_frame. See - . - - stream, size: - A stream holding the .debug_frame section, and the size of the - section in it. - - address: - Virtual address for this section. This is used to decode relative - addresses. - - base_structs: - The structs to be used as the base for parsing this section. - Eventually, each entry gets its own structs based on the initial - length field it starts with. The address_size, however, is taken - from base_structs. This appears to be a limitation of the DWARFv3 - standard, fixed in v4. - A discussion I had on dwarf-discuss confirms this. - So for DWARFv4 we'll take the address size from the CIE header, - but for earlier versions will use the elfclass of the containing - file; more sophisticated methods are used by libdwarf and others, - such as guessing which CU contains which FDEs (based on their - address ranges) and taking the address_size from those CUs. - """ - def __init__( - self, - stream: IO[bytes], - size: int, - address: int, - base_structs: DWARFStructs, - for_eh_frame: bool = False, - ) -> None: - self.stream = stream - self.size = size - self.address = address - self.base_structs = base_structs - self.entries: list[CFIEntry | ZERO] | None = None - - # Map between an offset in the stream and the entry object found at this - # offset. Useful for assigning CIE to FDEs according to the CIE_pointer - # header field which contains a stream offset. - self._entry_cache: dict[int, CFIEntry] = {} - - # The .eh_frame and .debug_frame section use almost the same CFI - # encoding, but there are tiny variations we need to handle during - # parsing. - self.for_eh_frame = for_eh_frame - - def get_entries(self) -> list[CFIEntry | ZERO]: - """ Get a list of entries that constitute this CFI. The list consists - of CIE or FDE objects, in the order of their appearance in the - section. - """ - if self.entries is None: - self.entries = self._parse_entries() - return self.entries - - #------------------------- - - def _parse_entries(self) -> list[CFIEntry | ZERO]: - entries = [] - offset = 0 - while offset < self.size: - entries.append(self._parse_entry_at(offset)) - offset = self.stream.tell() - return entries - - def _parse_entry_at(self, offset: int) -> CFIEntry | ZERO: - """ Parse an entry from self.stream starting with the given offset. - Return the entry object. self.stream will point right after the - entry (even if pulled from the cache). - """ - if offset in self._entry_cache: - entry = self._entry_cache[offset] - self.stream.seek(entry.header.length + - entry.structs.initial_length_field_size(), os.SEEK_CUR) - return entry - - entry_length: int = struct_parse( - self.base_structs.the_Dwarf_uint32, self.stream, offset) - - if self.for_eh_frame and entry_length == 0: - return ZERO(offset) - - dwarf_format = 64 if entry_length == 0xFFFFFFFF else 32 - - # Theoretically possible to have a DWARF bitness transition here. - # DWARF version doesn't matter (CIEs are versioned separately), endianness can't change. - # The structs are cached though, so no extraneous creation. - entry_structs = DWARFStructs( - little_endian=self.base_structs.little_endian, - dwarf_format=dwarf_format, - address_size=self.base_structs.address_size) - - # Read the next field to see whether this is a CIE or FDE - CIE_id: int = struct_parse( - entry_structs.the_Dwarf_offset, self.stream) - - if self.for_eh_frame: - is_CIE = CIE_id == 0 - else: - is_CIE = ( - (dwarf_format == 32 and CIE_id == 0xFFFFFFFF) or - CIE_id == 0xFFFFFFFFFFFFFFFF) - - # Parse the header, which goes up to and excluding the sequence of - # instructions. - if is_CIE: - header_struct = (entry_structs.EH_CIE_header - if self.for_eh_frame else - entry_structs.Dwarf_CIE_header) - header = struct_parse( - header_struct, self.stream, offset) - else: - header = self._parse_fde_header(entry_structs, offset) - - # If the augmentation string is not empty, hope to find a length field - # in order to skip the data specified augmentation. - lsda_pointer: int | None = None - aug_dict: Augmentation | None = None - if is_CIE: - aug_bytes, aug_dict = self._parse_cie_augmentation( - header, entry_structs) - else: - cie = self._parse_cie_for_fde(offset, header, entry_structs) - assert isinstance(cie, CFIEntry) - aug_bytes = self._read_augmentation_data(entry_structs) - lsda_encoding = cast(int, cie.augmentation_dict.get('LSDA_encoding', DW_EH_encoding_flags['DW_EH_PE_omit'])) - if lsda_encoding != DW_EH_encoding_flags['DW_EH_PE_omit']: - # parse LSDA pointer - lsda_pointer = self._parse_lsda_pointer(entry_structs, - self.stream.tell() - len(aug_bytes), - lsda_encoding) - - # For convenience, compute the end offset for this entry - end_offset: int = ( - offset + header.length + - entry_structs.initial_length_field_size()) - - # At this point self.stream is at the start of the instruction list - # for this entry - instructions = self._parse_instructions( - entry_structs, self.stream.tell(), end_offset) - - if is_CIE: - entry = CIE( - header=header, instructions=instructions, offset=offset, - augmentation_dict=aug_dict, - augmentation_bytes=aug_bytes, - structs=entry_structs) - - else: # FDE - cie = self._parse_cie_for_fde(offset, header, entry_structs) - assert isinstance(cie, CIE) - entry = FDE( - header=header, instructions=instructions, offset=offset, - structs=entry_structs, cie=cie, - augmentation_bytes=aug_bytes, - lsda_pointer=lsda_pointer, - ) - self._entry_cache[offset] = entry - return entry - - def _parse_instructions( - self, - structs: DWARFStructs, - offset: int, - end_offset: int, - ) -> list[CallFrameInstruction]: - """ Parse a list of CFI instructions from self.stream, starting with - the offset and until (not including) end_offset. - Return a list of CallFrameInstruction objects. - """ - instructions = [] - while offset < end_offset: - raw_opcode: int = struct_parse(structs.the_Dwarf_uint8, self.stream, offset) - - opcode, *args = DW_CFA.parse_raw_opcode(raw_opcode) - match opcode: - case DW_CFA.advance_loc | DW_CFA.restore | DW_CFA.nop | DW_CFA.remember_state | DW_CFA.restore_state | DW_CFA.AARCH64_negate_ra_state: - pass - case DW_CFA.offset: - args += [struct_parse(structs.the_Dwarf_uleb128, self.stream)] - case DW_CFA.set_loc: - args = [struct_parse(structs.the_Dwarf_target_addr, self.stream)] - case DW_CFA.advance_loc1: - args = [struct_parse(structs.the_Dwarf_uint8, self.stream)] - case DW_CFA.advance_loc2: - args = [struct_parse(structs.the_Dwarf_uint16, self.stream)] - case DW_CFA.advance_loc4: - args = [struct_parse(structs.the_Dwarf_uint32, self.stream)] - case DW_CFA.offset_extended | DW_CFA.register | DW_CFA.def_cfa | DW_CFA.val_offset: - args = [ - struct_parse(structs.the_Dwarf_uleb128, self.stream), - struct_parse(structs.the_Dwarf_uleb128, self.stream)] - case DW_CFA.restore_extended | DW_CFA.undefined | DW_CFA.same_value | DW_CFA.def_cfa_register | DW_CFA.def_cfa_offset: - args = [struct_parse(structs.the_Dwarf_uleb128, self.stream)] - case DW_CFA.def_cfa_offset_sf: - args = [struct_parse(structs.the_Dwarf_sleb128, self.stream)] - case DW_CFA.def_cfa_expression: - struct = structs.Dwarf_dw_form['DW_FORM_block'] - assert struct is not None - args = [struct_parse(struct, self.stream)] - case DW_CFA.expression | DW_CFA.val_expression: - struct = structs.Dwarf_dw_form['DW_FORM_block'] - assert struct is not None - args = [ - struct_parse(structs.the_Dwarf_uleb128, self.stream), - struct_parse(struct, self.stream)] - case DW_CFA.offset_extended_sf | DW_CFA.def_cfa_sf | DW_CFA.val_offset_sf: - args = [ - struct_parse(structs.the_Dwarf_uleb128, self.stream), - struct_parse(structs.the_Dwarf_sleb128, self.stream)] - case DW_CFA.GNU_args_size: - args = [struct_parse(structs.the_Dwarf_uleb128, self.stream)] - case _: - dwarf_assert(False, f'Unknown CFI opcode: {raw_opcode:#04x}') - - instructions.append(CallFrameInstruction(opcode=opcode, args=args)) - offset = self.stream.tell() - return instructions - - def _parse_cie_for_fde( - self, - fde_offset: int, - fde_header: Container, - entry_structs: DWARFStructs, - ) -> CFIEntry | ZERO: - """ Parse the CIE that corresponds to an FDE. - """ - # Determine the offset of the CIE that corresponds to this FDE - if self.for_eh_frame: - # CIE_pointer contains the offset for a reverse displacement from - # the section offset of the CIE_pointer field itself (not from the - # FDE header offset). - cie_displacement: int = fde_header['CIE_pointer'] - cie_offset: int = (fde_offset + entry_structs.dwarf_format // 8 - - cie_displacement) - else: - cie_offset = fde_header['CIE_pointer'] - - # Then read it - with preserve_stream_pos(self.stream): - return self._parse_entry_at(cie_offset) - - def _parse_cie_augmentation( - self, - header: Container, - entry_structs: DWARFStructs, - ) -> tuple[bytes, Augmentation]: - """ Parse CIE augmentation data from the annotation string in `header`. - - Return a tuple that contains 1) the augmentation data as a string - (without the length field) and 2) the augmentation data as a dict. - """ - augmentation: bytes | None = header.get('augmentation') - if not augmentation: - return (b'', {}) - - # Ignore armcc augmentations. - if augmentation.startswith(b'armcc'): - return (b'', {}) - - # Augmentation parsing works in minimal mode here: we need the length - # field to be able to skip unhandled augmentation fields. - assert augmentation.startswith(b'z'), ( - 'Unhandled augmentation string: {}'.format(repr(augmentation))) - - available_fields: dict[str, Construct | Literal[True]] = { - 'z': entry_structs.Dwarf_uleb128('length'), - 'L': entry_structs.Dwarf_uint8('LSDA_encoding'), - 'R': entry_structs.Dwarf_uint8('FDE_encoding'), - 'S': True, - 'P': Struct( - 'personality', - entry_structs.Dwarf_uint8('encoding'), - Switch('function', lambda ctx: ctx.encoding & 0x0f, { - enc: fld_cons('function') - for enc, fld_cons - in self._eh_encoding_to_field(entry_structs).items()})), - } - - # Build the Struct we will be using to parse the augmentation data. - # Stop as soon as we are not able to match the augmentation string. - fields: list[Construct] = [] - aug_dict: Augmentation = {} - - for b in augmentation: - try: - fld = available_fields[chr(b)] - except KeyError: - break - - if fld is True: - aug_dict[fld] = True - else: - fields.append(fld) - - # Read the augmentation twice: once with the Struct, once for the raw - # bytes. Read the raw bytes last so we are sure we leave the stream - # pointing right after the augmentation: the Struct may be incomplete - # (missing trailing fields) due to an unknown char: see the KeyError - # above. - offset = self.stream.tell() - struct = Struct('Augmentation_Data', *fields) - aug_dict.update(struct_parse(struct, self.stream, offset)) - self.stream.seek(offset) - aug_bytes = self._read_augmentation_data(entry_structs) - return (aug_bytes, aug_dict) - - def _read_augmentation_data(self, entry_structs: DWARFStructs) -> bytes: - """ Read augmentation data. - - This assumes that the augmentation string starts with 'z', i.e. that - augmentation data is prefixed by a length field, which is not returned. - """ - if not self.for_eh_frame: - return b'' - - augmentation_data_length: int = struct_parse( - Struct('Dummy_Augmentation_Data', - entry_structs.Dwarf_uleb128('length')), - self.stream)['length'] - return self.stream.read(augmentation_data_length) - - def _parse_lsda_pointer(self, structs: DWARFStructs, stream_offset: int, encoding: int) -> int: - """ Parse bytes to get an LSDA pointer. - - The basic encoding (lower four bits of the encoding) describes how the values are encoded in a CIE or an FDE. - The modifier (upper four bits of the encoding) describes how the raw values, after decoded using a basic - encoding, should be modified before using. - - Ref: https://www.airs.com/blog/archives/460 - """ - assert encoding != DW_EH_encoding_flags['DW_EH_PE_omit'] - basic_encoding = encoding & 0x0f - modifier = encoding & 0xf0 - - formats = self._eh_encoding_to_field(structs) - - ptr: int = struct_parse( - Struct('Augmentation_Data', - formats[basic_encoding]('LSDA_pointer')), - self.stream, stream_pos=stream_offset)['LSDA_pointer'] - - if modifier == DW_EH_encoding_flags['DW_EH_PE_absptr']: - pass - - elif modifier == DW_EH_encoding_flags['DW_EH_PE_pcrel']: - ptr += self.address + stream_offset - - else: - assert False, 'Unsupported encoding modifier for LSDA pointer: {:#x}'.format(modifier) - - return ptr - - def _parse_fde_header(self, entry_structs: DWARFStructs, offset: int) -> Container: - """ Compute a struct to parse the header of the current FDE. - """ - if not self.for_eh_frame: - return struct_parse(entry_structs.Dwarf_FDE_header, self.stream, - offset) - - fields: list[Construct] = [entry_structs.Dwarf_initial_length('length'), - entry_structs.Dwarf_offset('CIE_pointer')] - - # Parse the couple of header fields that are always here so we can - # fetch the corresponding CIE. - minimal_header = struct_parse(Struct('eh_frame_minimal_header', - *fields), self.stream, offset) - cie = self._parse_cie_for_fde(offset, minimal_header, entry_structs) - assert isinstance(cie, CFIEntry) - initial_location_offset = self.stream.tell() - - # Try to parse the initial location. We need the initial location in - # order to create a meaningful FDE, so assume it's there. Omission does - # not seem to happen in practice. - encoding = cast(int, cie.augmentation_dict['FDE_encoding']) - assert encoding != DW_EH_encoding_flags['DW_EH_PE_omit'] - basic_encoding = encoding & 0x0f - encoding_modifier = encoding & 0xf0 - - # Depending on the specified encoding, complete the header Struct - formats = self._eh_encoding_to_field(entry_structs) - fields.append(formats[basic_encoding]('initial_location')) - fields.append(formats[basic_encoding]('address_range')) - - result = struct_parse(Struct('Dwarf_FDE_header', *fields), - self.stream, offset) - - if encoding_modifier == 0: - pass - - elif encoding_modifier == DW_EH_encoding_flags['DW_EH_PE_pcrel']: - # Start address is relative to the address of the - # "initial_location" field. - result['initial_location'] += ( - self.address + initial_location_offset) - else: - assert False, 'Unsupported encoding: {:#x}'.format(encoding) - - return result - - @staticmethod - def _eh_encoding_to_field( - entry_structs: DWARFStructs, - ) -> dict[int, Callable[[str], Construct]]: - """ - Return a mapping from basic encodings (DW_EH_encoding_flags) the - corresponding field constructors (for instance - entry_structs.Dwarf_uint32). - """ - return { - DW_EH_encoding_flags['DW_EH_PE_absptr']: - entry_structs.Dwarf_target_addr, - DW_EH_encoding_flags['DW_EH_PE_uleb128']: - entry_structs.Dwarf_uleb128, - DW_EH_encoding_flags['DW_EH_PE_udata2']: - entry_structs.Dwarf_uint16, - DW_EH_encoding_flags['DW_EH_PE_udata4']: - entry_structs.Dwarf_uint32, - DW_EH_encoding_flags['DW_EH_PE_udata8']: - entry_structs.Dwarf_uint64, - - DW_EH_encoding_flags['DW_EH_PE_sleb128']: - entry_structs.Dwarf_sleb128, - DW_EH_encoding_flags['DW_EH_PE_sdata2']: - entry_structs.Dwarf_int16, - DW_EH_encoding_flags['DW_EH_PE_sdata4']: - entry_structs.Dwarf_int32, - DW_EH_encoding_flags['DW_EH_PE_sdata8']: - entry_structs.Dwarf_int64, - } - - -def instruction_name(opcode: DW_CFA) -> str: - """ Given an opcode, return the instruction name. - """ - warn("Switch to DW_CFA.FQN", DeprecationWarning, stacklevel=2) - return opcode.FQN - - -class CallFrameInstruction: - """ An instruction in the CFI section. opcode is the instruction - opcode, numeric - as it appears in the section. args is a list of - arguments (including arguments embedded in the low bits of some - instructions, when applicable), decoded from the stream. - """ - def __init__(self, opcode: DW_CFA, args: list[Any]) -> None: - self.opcode = opcode - self.args = args - - def __repr__(self) -> str: - return f"{self.opcode.FQN} ({self.opcode.value:#02x}): {self.args}" - - -class CFIEntry: - """ A common base class for CFI entries. - Contains a header and a list of instructions (CallFrameInstruction). - offset: the offset of this entry from the beginning of the section - cie: for FDEs, a CIE pointer is required - augmentation_dict: Augmentation data as a parsed struct (dict): see - CallFrameInfo._parse_cie_augmentation and - http://www.airs.com/blog/archives/460. - augmentation_bytes: Augmentation data as a chain of bytes: see - CallFrameInfo._parse_cie_augmentation and - http://www.airs.com/blog/archives/460. - """ - def __init__( - self, - header: Container, - structs: DWARFStructs, - instructions: list[CallFrameInstruction], - offset: int, - augmentation_dict: Augmentation | None = None, - augmentation_bytes: bytes | None = b'', - cie: CIE | None = None, - ) -> None: - self.header = header - self.structs = structs - self.instructions = instructions - self.offset = offset - self.cie = cie - self.augmentation_dict = augmentation_dict or {} - self.augmentation_bytes = augmentation_bytes - - def get_decoded(self) -> DecodedCallFrameTable: - """ Decode the CFI contained in this entry and return a - DecodedCallFrameTable object representing it. See the documentation - of that class to understand how to interpret the decoded table. - """ - return self._decode_CFI_table - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - @cached_property - def _decode_CFI_table(self) -> DecodedCallFrameTable: - """ Decode the instructions contained in the given CFI entry and return - a DecodedCallFrameTable. - """ - last_line_in_CIE: Line | None = None - if isinstance(self, CIE): - # For a CIE, initialize cur_line to an "empty" line - cie = self - cur_line: Line = dict(pc=0, cfa=CFARule(reg=None, offset=0)) - reg_order = [] - else: # FDE - # For a FDE, we need to decode the attached CIE first, because its - # decoded table is needed. Its "initial instructions" describe a - # line that serves as the base (first) line in the FDE's table. - assert self.cie is not None - cie = self.cie - cie_decoded_table = cie.get_decoded() - pc = self['initial_location'] - if cie_decoded_table.table: - last_line_in_CIE = copy.copy(cie_decoded_table.table[-1]) - cur_line = dict(last_line_in_CIE, pc=pc) - else: - cur_line = dict(cfa=CFARule(reg=None, offset=0), pc=pc) - reg_order = copy.copy(cie_decoded_table.reg_order) - - table: list[Line] = [] - - # Keeps a stack for the use of DW_CFA.{remember|restore}_state - # instructions. - line_stack: list[Line] = [] - - def _add_to_order(regnum: int) -> None: - # DW_CFA.restore and others remove registers from cur_line, - # but they stay in reg_order. Avoid duplicates. - if regnum not in reg_order: - reg_order.append(regnum) - - for instr in self.instructions: - # Throughout this loop, cur_line is the current line. Some - # instructions add it to the table, but most instructions just - # update it without adding it to the table. - match instr.opcode: - case DW_CFA.set_loc: - table.append(copy.copy(cur_line)) - cur_line['pc'] = instr.args[0] - case DW_CFA.advance_loc1 | DW_CFA.advance_loc2 | DW_CFA.advance_loc4 | DW_CFA.advance_loc: - table.append(copy.copy(cur_line)) - cur_line['pc'] += instr.args[0] * cie['code_alignment_factor'] - case DW_CFA.def_cfa: - cur_line['cfa'] = CFARule( - reg=instr.args[0], - offset=instr.args[1]) - case DW_CFA.def_cfa_sf: - cur_line['cfa'] = CFARule( - reg=instr.args[0], - offset=instr.args[1] * cie['code_alignment_factor']) - case DW_CFA.def_cfa_register: - cur_line['cfa'] = CFARule( - reg=instr.args[0], - offset=cur_line['cfa'].offset) - case DW_CFA.def_cfa_offset: - cur_line['cfa'] = CFARule( - reg=cur_line['cfa'].reg, - offset=instr.args[0]) - case DW_CFA.def_cfa_offset_sf: - cur_line['cfa'] = CFARule( - reg=cur_line['cfa'].reg, - offset=instr.args[0] * cie['data_alignment_factor']) - case DW_CFA.def_cfa_expression: - cur_line['cfa'] = CFARule(expr=instr.args[0]) - case DW_CFA.undefined: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule(RegisterRule.UNDEFINED) - case DW_CFA.same_value: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule(RegisterRule.SAME_VALUE) - case DW_CFA.offset | DW_CFA.offset_extended | DW_CFA.offset_extended_sf: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule( - RegisterRule.OFFSET, - instr.args[1] * cie['data_alignment_factor']) - case DW_CFA.val_offset | DW_CFA.val_offset_sf: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule( - RegisterRule.VAL_OFFSET, - instr.args[1] * cie['data_alignment_factor']) - case DW_CFA.register: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule( - RegisterRule.REGISTER, - instr.args[1]) - case DW_CFA.expression: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule( - RegisterRule.EXPRESSION, - instr.args[1]) - case DW_CFA.val_expression: - _add_to_order(instr.args[0]) - cur_line[instr.args[0]] = RegisterRule( - RegisterRule.VAL_EXPRESSION, - instr.args[1]) - case DW_CFA.restore | DW_CFA.restore_extended as cfa: - _add_to_order(instr.args[0]) - dwarf_assert( - isinstance(self, FDE), - f'{cfa.FQN} instruction must be in a FDE') - assert last_line_in_CIE is not None - if instr.args[0] in last_line_in_CIE: - cur_line[instr.args[0]] = last_line_in_CIE[instr.args[0]] - else: - cur_line.pop(instr.args[0], None) - case DW_CFA.remember_state: - line_stack.append(copy.deepcopy(cur_line)) - case DW_CFA.restore_state: - pc = cur_line['pc'] - cur_line = line_stack.pop() - cur_line['pc'] = pc - case DW_CFA.nop | DW_CFA.AARCH64_negate_ra_state: - pass - case _: - dwarf_assert(False, f"Unknown CFI opcode: {instr.opcode:#02x}") - - # The current line is appended to the table after all instructions - # have ended, if there were instructions. - if cur_line['cfa'].reg is not None or len(cur_line) > 2: - table.append(cur_line) - - return DecodedCallFrameTable(table=table, reg_order=reg_order) - - -# A CIE and FDE have exactly the same functionality, except that a FDE has -# a pointer to its CIE. The functionality was wholly encapsulated in CFIEntry, -# so the CIE and FDE classes exists separately for identification (instead -# of having an explicit "entry_type" field in CFIEntry). -# -class CIE(CFIEntry): - pass - - -class FDE(CFIEntry): - def __init__( - self, - header: Container, - structs: DWARFStructs, - instructions: list[CallFrameInstruction], - offset: int, - augmentation_bytes: bytes | None = None, - cie: CIE | None = None, - lsda_pointer: int | None = None, - ) -> None: - super().__init__(header, structs, instructions, offset, augmentation_bytes=augmentation_bytes, cie=cie) - self.lsda_pointer = lsda_pointer - - -class ZERO: - """ End marker for the sequence of CIE/FDE. - - This is specific to `.eh_frame` sections: this kind of entry does not exist - in pure DWARF. `readelf` displays these as "ZERO terminator", hence the - class name. - """ - def __init__(self, offset: int) -> None: - self.offset = offset - - -class RegisterRule: - """ Register rules are used to find registers in call frames. Each rule - consists of a type (enumeration following DWARFv3 section 6.4.1) - and an optional argument to augment the type. - """ - UNDEFINED = 'UNDEFINED' - SAME_VALUE = 'SAME_VALUE' - OFFSET = 'OFFSET' - VAL_OFFSET = 'VAL_OFFSET' - REGISTER = 'REGISTER' - EXPRESSION = 'EXPRESSION' - VAL_EXPRESSION = 'VAL_EXPRESSION' - ARCHITECTURAL = 'ARCHITECTURAL' - - def __init__(self, type: str, arg: int | ListContainer | None = None) -> None: - self.type = type - self.arg = arg - - def __repr__(self) -> str: - return 'RegisterRule(%s, %s)' % (self.type, self.arg) - - -class CFARule: - """ A CFA rule is used to compute the CFA for each location. It either - consists of a register+offset, or a DWARF expression. - """ - def __init__( - self, - reg: int | None = None, - offset: int | None = None, - expr: ListContainer | None = None, - ) -> None: - self.reg = reg - self.offset = offset - self.expr = expr - - def __repr__(self) -> str: - return 'CFARule(reg=%s, offset=%s, expr=%s)' % ( - self.reg, self.offset, self.expr) - - -# Represents the decoded CFI for an entry, which is just a large table, -# according to DWARFv3 section 6.4.1 -# -# DecodedCallFrameTable is a simple named tuple to group together the table -# and the register appearance order. -# -# table: -# -# A list of dicts that represent "lines" in the decoded table. Each line has -# some special dict entries: 'pc' for the location/program counter (LOC), -# and 'cfa' for the CFARule to locate the CFA on that line. -# The other entries are keyed by register numbers with RegisterRule values, -# and describe the rules for these registers. -# -# reg_order: -# -# A list of register numbers that are described in the table by the order of -# their appearance. -# -class DecodedCallFrameTable(NamedTuple): - table: list[Line] - reg_order: list[int] diff --git a/.tools/python-revlibs/elftools/dwarf/compileunit.py b/.tools/python-revlibs/elftools/dwarf/compileunit.py deleted file mode 100644 index 86a8b0b..0000000 --- a/.tools/python-revlibs/elftools/dwarf/compileunit.py +++ /dev/null @@ -1,300 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/compileunit.py -# -# DWARF compile unit -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from bisect import bisect_right -from functools import cached_property -from typing import TYPE_CHECKING, Any - -from .die import DIE -from ..common.utils import dwarf_assert - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct.lib.container import Container - from .abbrevtable import AbbrevTable - from .dwarfinfo import DWARFInfo - from .structs import DWARFStructs - - -class CompileUnit: - """ A DWARF compilation unit (CU). - - A normal compilation unit typically represents the text and data - contributed to an executable by a single relocatable object file. - It may be derived from several source files, - including pre-processed "include files" - - Serves as a container and context to DIEs that describe objects and code - belonging to a compilation unit. - - CU header entries can be accessed as dict keys from this object, i.e. - cu = CompileUnit(...) - cu['version'] # version field of the CU header - - To get the top-level DIE describing the compilation unit, call the - get_top_DIE method. - """ - def __init__( - self, - header: Container, - dwarfinfo: DWARFInfo, - structs: DWARFStructs, - cu_offset: int, - cu_die_offset: int, - ) -> None: - """ header: - CU header for this compile unit - - dwarfinfo: - The DWARFInfo context object which created this one - - structs: - A DWARFStructs instance suitable for this compile unit - - cu_offset: - Offset in the stream to the beginning of this CU (its header) - - cu_die_offset: - Offset in the stream of the top DIE of this CU - """ - self.dwarfinfo = dwarfinfo - self.header = header - self.structs = structs - self.cu_offset = cu_offset - self.cu_die_offset = cu_die_offset - - # A list of DIEs belonging to this CU. - # This list is lazily constructed as DIEs are iterated over. - self._dielist: list[DIE] = [] - # A list of file offsets, corresponding (by index) to the DIEs - # in `self._dielist`. This list exists separately from - # `self._dielist` to make it binary searchable, enabling the - # DIE population strategy used in `iter_DIE_children`. - # Like `self._dielist`, this list is lazily constructed - # as DIEs are iterated over. - self._diemap: list[int] = [] - - def dwarf_format(self) -> int: - """ Get the DWARF format (32 or 64) for this CU - """ - return self.structs.dwarf_format - - def get_abbrev_table(self) -> AbbrevTable: - """ Get the abbreviation table (AbbrevTable object) for this CU - """ - return self._abbrev_table - - @cached_property - def _abbrev_table(self) -> AbbrevTable: - return self.dwarfinfo.get_abbrev_table(self['debug_abbrev_offset']) - - def get_top_DIE(self) -> DIE: - """ Get the top DIE (which is either a DW_TAG_compile_unit or - DW_TAG_partial_unit) of this CU - """ - - # Note that a top DIE always has minimal offset and is therefore - # at the beginning of our lists, so no bisect is required. - if self._diemap: - return self._dielist[0] - - assert self.dwarfinfo.debug_info_sec is not None - top = DIE( - cu=self, - stream=self.dwarfinfo.debug_info_sec.stream, - offset=self.cu_die_offset) - - self._dielist.insert(0, top) - self._diemap.insert(0, self.cu_die_offset) - - top._translate_indirect_attributes() # Can't translate indirect attributes until the top DIE has been parsed to the end - - return top - - def has_top_DIE(self) -> bool: - """ Returns whether the top DIE in this CU has already been parsed and cached. - No parsing on demand! - """ - return bool(self._diemap) - - @property - def size(self) -> int: - return self['unit_length'] + self.structs.initial_length_field_size() - - def get_DIE_from_refaddr(self, refaddr: int) -> DIE: - """ Obtain a DIE contained in this CU from a reference. - - refaddr: - The offset into the .debug_info section, which must be - contained in this CU or a DWARFError will be raised. - - When using a reference class attribute with a form that is - relative to the compile unit, add unit add the compile unit's - .cu_addr before calling this function. - """ - # All DIEs are after the cu header and within the unit - dwarf_assert( - self.cu_die_offset <= refaddr < self.cu_offset + self.size, - 'refaddr %s not in DIE range of CU %s' % (refaddr, self.cu_offset)) - - return self._get_cached_DIE(refaddr) - - def iter_DIEs(self) -> Iterator[DIE]: - """ Iterate over all the DIEs in the CU, in order of their appearance. - Note that null DIEs will also be returned. - """ - assert self.dwarfinfo.debug_info_sec is not None - stm = self.dwarfinfo.debug_info_sec.stream - pos = self.cu_die_offset - end_pos = self.cu_offset + self.size - - die = self.get_top_DIE() - yield die - pos += die.size - parent: DIE | None = die - i = 1 - while pos < end_pos: - if i < len(self._diemap) and self._diemap[i] == pos: # DIE already cached - die = self._dielist[i] - else: - die = DIE(self, stm, pos) - self._dielist.insert(i, die) - self._diemap.insert(i, pos) - i += 1 - - die._parent = parent - - if die.tag is None and parent is not None: - parent._terminator = die - parent = parent._parent - - if die.has_children: - parent = die - - if die.tag == 'DW_TAG_imported_unit' and self.dwarfinfo.supplementary_dwarfinfo: - # Falls back to subtree traversal in the supplemental DWARF. Any way to streamline that too? - supp_die = die.get_DIE_from_attribute('DW_AT_import') - yield from supp_die.cu._iter_DIE_subtree(supp_die) - else: - yield die - - pos += die.size - - - def iter_DIE_children(self, die: DIE) -> Iterator[DIE]: - """ Given a DIE, yields either its children, without null DIE list - terminator, or nothing, if that DIE has no children. - - The null DIE terminator is saved in that DIE when iteration ended. - """ - if not die.has_children: - return - - # `cur_offset` tracks the stream offset of the next DIE to yield - # as we iterate over our children, - cur_offset = die.offset + die.size - - while True: - child = self._get_cached_DIE(cur_offset) - - child.set_parent(die) - - if child.is_null(): - die._terminator = child - return - - yield child - - if not child.has_children: - cur_offset += child.size - elif "DW_AT_sibling" in child.attributes: - sibling = child.attributes["DW_AT_sibling"] - if sibling.form in ('DW_FORM_ref1', 'DW_FORM_ref2', - 'DW_FORM_ref4', 'DW_FORM_ref8', - 'DW_FORM_ref', 'DW_FORM_ref_udata'): - cur_offset = sibling.value + self.cu_offset - elif sibling.form == 'DW_FORM_ref_addr': - cur_offset = sibling.value - else: - raise NotImplementedError('sibling in form %s' % sibling.form) - else: - # If no DW_AT_sibling attribute is provided by the producer - # then the whole child subtree must be parsed to find its next - # sibling. There is one zero byte representing null DIE - # terminating children list. It is used to locate child subtree - # bounds. - - # If children are not parsed yet, this instruction will manage - # to recursive call of this function which will result in - # setting of `_terminator` attribute of the `child`. - if child._terminator is None: - for _ in self.iter_DIE_children(child): - pass - assert child._terminator is not None - - cur_offset = child._terminator.offset + child._terminator.size - - #------ PRIVATE ------# - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - def _iter_DIE_subtree(self, die: DIE) -> Iterator[DIE]: - """ Given a DIE, this yields it with its subtree including null DIEs - (child list terminators). - """ - # If the die is an imported unit, replace it with what it refers to if - # we can - if die.tag == 'DW_TAG_imported_unit' and self.dwarfinfo.supplementary_dwarfinfo: - die = die.get_DIE_from_attribute('DW_AT_import') - yield die - if die.has_children: - for c in die.iter_children(): - yield from die.cu._iter_DIE_subtree(c) - assert die._terminator is not None - yield die._terminator - - def _get_cached_DIE(self, offset: int) -> DIE: - """ Given a DIE offset, look it up in the cache. If not present, - parse the DIE and insert it into the cache. - - offset: - The offset of the DIE in the debug_info section to retrieve. - - The stream reference is copied from the top DIE. The top die will - also be parsed and cached if needed. - - See also get_DIE_from_refaddr(self, refaddr). - """ - # The top die must be in the cache if any DIE is in the cache. - # The stream is the same for all DIEs in this CU, so populate - # the top DIE and obtain a reference to its stream. - top_die_stream = self.get_top_DIE().stream - - # `offset` is the offset in the stream of the DIE we want to return. - # The map is maintined as a parallel array to the list. We call - # bisect each time to ensure new DIEs are inserted in the correct - # order within both `self._dielist` and `self._diemap`. - i = bisect_right(self._diemap, offset) - - # Note that `self._diemap` cannot be empty because a the top DIE - # was inserted by the call to .get_top_DIE(). Also it has the minimal - # offset, so the bisect_right insert point will always be at least 1. - if offset == self._diemap[i - 1]: - die = self._dielist[i - 1] - else: - die = DIE(cu=self, stream=top_die_stream, offset=offset) - self._dielist.insert(i, die) - self._diemap.insert(i, offset) - - return die diff --git a/.tools/python-revlibs/elftools/dwarf/constants.py b/.tools/python-revlibs/elftools/dwarf/constants.py deleted file mode 100644 index 4e8d0c6..0000000 --- a/.tools/python-revlibs/elftools/dwarf/constants.py +++ /dev/null @@ -1,277 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/constants.py -# -# Constants and flags -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from enum import Enum -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from typing_extensions import Self # 3.11+ - - -class _IntEnum(int, Enum): # Py3.11: enum.ReprEnum - def __repr__(self) -> str: - return int.__str__(self.value) - - @property # Py3.11+: enum.property - def FQN(self) -> str: - return f"{self.__class__.__name__}_{self.name}" - - -class DW_INL(_IntEnum): - """Inline codes.""" - not_inlined = 0 - inlined = 1 - declared_not_inlined = 2 - declared_inlined = 3 - - -class DW_LANG(_IntEnum): - """Source languages.""" - C89 = 0x0001 - C = 0x0002 - Ada83 = 0x0003 - C_plus_plus = 0x0004 - Cobol74 = 0x0005 - Cobol85 = 0x0006 - Fortran77 = 0x0007 - Fortran90 = 0x0008 - Pascal83 = 0x0009 - Modula2 = 0x000a - Java = 0x000b - C99 = 0x000c - Ada95 = 0x000d - Fortran95 = 0x000e - PLI = 0x000f - ObjC = 0x0010 - ObjC_plus_plus = 0x0011 - UPC = 0x0012 - D = 0x0013 - Python = 0x0014 - OpenCL = 0x0015 - Go = 0x0016 - Modula3 = 0x0017 - Haskell = 0x0018 - C_plus_plus_03 = 0x0019 - C_plus_plus_11 = 0x001a - OCaml = 0x001b - Rust = 0x001c - C11 = 0x001d - Swift = 0x001e - Julia = 0x001f - Dylan = 0x0020 - C_plus_plus_14 = 0x0021 - Fortran03 = 0x0022 - Fortran08 = 0x0023 - RenderScript = 0x0024 - BLISS = 0x0025 - Mips_Assembler = 0x8001 - Upc = 0x8765 - HP_Bliss = 0x8003 - HP_Basic91 = 0x8004 - HP_Pascal91 = 0x8005 - HP_IMacro = 0x8006 - HP_Assembler = 0x8007 - GOOGLE_RenderScript = 0x8e57 - BORLAND_Delphi = 0xb000 - - -class DW_ATE(_IntEnum): - """Encodings.""" - void = 0x0 - address = 0x1 - boolean = 0x2 - complex_float = 0x3 - float = 0x4 - signed = 0x5 - signed_char = 0x6 - unsigned = 0x7 - unsigned_char = 0x8 - imaginary_float = 0x9 - packed_decimal = 0xa - numeric_string = 0xb - edited = 0xc - signed_fixed = 0xd - unsigned_fixed = 0xe - decimal_float = 0xf - UTF = 0x10 - UCS = 0x11 - ASCII = 0x12 - lo_user = 0x80 - hi_user = 0xff - HP_float80 = 0x80 - HP_complex_float80 = 0x81 - HP_float128 = 0x82 - HP_complex_float128 = 0x83 - HP_floathpintel = 0x84 - HP_imaginary_float80 = 0x85 - HP_imaginary_float128 = 0x86 - - -class DW_ACCESS(_IntEnum): - """Access.""" - public = 1 - protected = 2 - private = 3 - - -class DW_VIS(_IntEnum): - """Visibility.""" - local = 1 - exported = 2 - qualified = 3 - - -class DW_VIRTUALITY(_IntEnum): - """Virtuality.""" - none = 0 - virtual = 1 - pure_virtual = 2 - - -class DW_ID(_IntEnum): - """ID cases.""" - case_sensitive = 0 - up_case = 1 - down_case = 2 - case_insensitive = 3 - - -class DW_CC(_IntEnum): - """Calling conventions.""" - normal = 0x1 - program = 0x2 - nocall = 0x3 - pass_by_reference = 0x4 - pass_by_valuee = 0x5 - - -class DW_ORD(_IntEnum): - """Orderings.""" - row_major = 0 - col_major = 1 - - -class DW_LNS(_IntEnum): - """Line program opcodes.""" - copy = 0x01 - advance_pc = 0x02 - advance_line = 0x03 - set_file = 0x04 - set_column = 0x05 - negate_stmt = 0x06 - set_basic_block = 0x07 - const_add_pc = 0x08 - fixed_advance_pc = 0x09 - set_prologue_end = 0x0a - set_epilogue_begin = 0x0b - set_isa = 0x0c - - -class DW_LNE(_IntEnum): - """Line program extended opcodes.""" - end_sequence = 0x01 - set_address = 0x02 - define_file = 0x03 - set_discriminator = 0x04 - lo_user = 0x80 - hi_user = 0xff - - -class DW_LNCT(_IntEnum): - """Line program header content types.""" - path = 0x01 - directory_index = 0x02 - timestamp = 0x03 - size = 0x04 - MD5 = 0x05 - lo_user = 0x2000 - LLVM_source = 0x2001 - LLVM_is_MD5 = 0x2002 - hi_user = 0x3fff - - -class DW_CFA(_IntEnum): - """ - Call frame instructions. - - Note that the first 3 instructions have the so-called "primary opcode" - (as described in DWARFv3 7.23), so only their highest 2 bits take part - in the opcode decoding. They are kept as constants with the low bits masked - out, and the callframe module knows how to handle this. - The other instructions use an "extended opcode" encoded just in the low 6 - bits, with the high 2 bits, so these constants are exactly as they would - appear in an actual file. - """ - advance_loc = 0b01000000 - offset = 0b10000000 - restore = 0b11000000 - - nop = 0x00 - set_loc = 0x01 - advance_loc1 = 0x02 - advance_loc2 = 0x03 - advance_loc4 = 0x04 - offset_extended = 0x05 - restore_extended = 0x06 - undefined = 0x07 - same_value = 0x08 - register = 0x09 - remember_state = 0x0a - restore_state = 0x0b - def_cfa = 0x0c - def_cfa_register = 0x0d - def_cfa_offset = 0x0e - def_cfa_expression = 0x0f - expression = 0x10 - offset_extended_sf = 0x11 - def_cfa_sf = 0x12 - def_cfa_offset_sf = 0x13 - val_offset = 0x14 - val_offset_sf = 0x15 - val_expression = 0x16 - AARCH64_negate_ra_state = 0x2d - GNU_window_save = 0x2d # Used on SPARC, not in the corpus - GNU_args_size = 0x2e - - @classmethod - def parse_raw_opcode(cls, /, opcode: int, *, __MASK: int = 0b11_00_0000) -> tuple[Self, int] | tuple[Self]: - """Extract primary or extended opcode from raw byte.""" - if primary := opcode & __MASK: - return (cls(primary), opcode & ~__MASK) - return (cls(opcode),) - - -class DW_UT(_IntEnum): - """ - Compilation unit types. - - DWARFv5 introduces the "unit_type" field to each CU header, allowing - individual CUs to indicate whether they're complete, partial, and so forth. - See DWARFv5 3.1 ("Unit Entries") and 7.5.1 ("Unit Headers"). - """ - compile = 0x01 - type = 0x02 - partial = 0x03 - skeleton = 0x04 - split_compile = 0x05 - split_type = 0x06 - lo_user = 0x80 - hi_user = 0xff - - -# Add back legacy names `DW_UT_type = DW_UT.type` for `from .constants import *`. -# These are invisible to typing as the members are added dynamically by code! -# Use __members__ to also add aliases like DW_CFA.{AARCH64_negate_ra_state,GNU_window_save}. -globals().update({ - f"{enum_name}_{member_name}": member.value - for enum_name, enum in globals().items() - if enum_name.startswith("DW_") and issubclass(enum, _IntEnum) - for member_name, member in enum.__members__.items() -}) diff --git a/.tools/python-revlibs/elftools/dwarf/datatype_cpp.py b/.tools/python-revlibs/elftools/dwarf/datatype_cpp.py deleted file mode 100644 index 469bb88..0000000 --- a/.tools/python-revlibs/elftools/dwarf/datatype_cpp.py +++ /dev/null @@ -1,249 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/datatype_cpp.py -# -# First draft at restoring the source level name a C/C++ datatype -# from DWARF data. Aiming at compatibility with llvm-dwarfdump v15. -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import TYPE_CHECKING - -from ..common.utils import bytes2str - -if TYPE_CHECKING: - from .die import DIE - - -cpp_symbols = dict( - pointer = "*", - reference = "&", - const = "const", - volatile = "volatile") - -def describe_cpp_datatype(var_die: DIE) -> str: - return str(parse_cpp_datatype(var_die)) - -def parse_cpp_datatype(var_die: DIE) -> TypeDesc: - """Given a DIE that describes a variable, a parameter, or a member - with DW_AT_type in it, tries to return the C++ datatype as a string - - Returns a TypeDesc. - - Does not follow typedefs, doesn't resolve array element types - or struct members. Not good for a debugger. - """ - t = TypeDesc() - - if 'DW_AT_type' not in var_die.attributes: - t.tag = '' - return t - - type_die = var_die.get_DIE_from_attribute('DW_AT_type') - - mods: list[str] = [] - # Unlike readelf, dwarfdump doesn't chase typedefs - while type_die.tag in ('DW_TAG_const_type', 'DW_TAG_volatile_type', 'DW_TAG_pointer_type', 'DW_TAG_reference_type'): - modifier = _strip_type_tag(type_die) # const/volatile/reference/pointer - mods.insert(0, modifier) - if 'DW_AT_type' not in type_die.attributes: # void* is encoded as a pointer to nothing - t.name = t.tag = "void" - t.modifiers = tuple(mods) - return t - type_die = type_die.get_DIE_from_attribute('DW_AT_type') - - # From this point on, type_die doesn't change - t.tag = _strip_type_tag(type_die) - t.modifiers = tuple(mods) - - if t.tag in ('ptr_to_member', 'subroutine'): - if t.tag == 'ptr_to_member': - ptr_prefix = DIE_name(type_die.get_DIE_from_attribute('DW_AT_containing_type')) + "::" - type_die = type_die.get_DIE_from_attribute('DW_AT_type') - elif "DW_AT_object_pointer" in type_die.attributes: # Older compiler... Subroutine, but with an object pointer - ptr_prefix = DIE_name(DIE_type(DIE_type(type_die.get_DIE_from_attribute('DW_AT_object_pointer')))) + "::" - else: # Not a pointer to member - ptr_prefix = '' - - if t.tag == 'subroutine': - params = ", ".join( - format_function_param(p, p) - for p in type_die.iter_children() - if p.tag in ("DW_TAG_formal_parameter", "DW_TAG_unspecified_parameters") and 'DW_AT_artificial' not in p.attributes - ) - if 'DW_AT_type' in type_die.attributes: - datatype = parse_cpp_datatype(type_die) - is_pointer = datatype.modifiers and datatype.modifiers[-1] == 'pointer' - retval_type = str(datatype) - if not is_pointer: - retval_type += " " - else: - retval_type = "void " - - if mods and mods[-1] == 'pointer': - mods.pop() - t.modifiers = tuple(mods) - t.name = "%s(%s*)(%s)" % (retval_type, ptr_prefix, params) - else: - t.name = "%s(%s)" % (retval_type, params) - return t - elif DIE_is_ptr_to_member_struct(type_die): - dt = parse_cpp_datatype(next(type_die.iter_children())) # The first element is pfn, a function pointer with a this - dt.modifiers = tuple(dt.modifiers[:-1]) # Pop the extra pointer - dt.tag = "ptr_to_member_type" # Not a function pointer per se - return dt - elif t.tag == 'array': - t.dimensions = tuple(_array_subtype_size(sub) - for sub - in type_die.iter_children() - if sub.tag == 'DW_TAG_subrange_type') - t.name = describe_cpp_datatype(type_die) - return t - - # Now the nonfunction types - # Blank name is sometimes legal (unnamed unions, etc) - - t.name = safe_DIE_name(type_die, t.tag + " ") - - # Check the nesting - important for parameters - parent = type_die.get_parent() - scopes: list[str] = [] - while parent and parent.tag in ('DW_TAG_class_type', 'DW_TAG_structure_type', 'DW_TAG_union_type', 'DW_TAG_namespace'): - scopes.insert(0, safe_DIE_name(parent, _strip_type_tag(parent) + " ")) - # If unnamed scope, fall back to scope type - like "structure " - parent = parent.get_parent() - t.scopes = tuple(scopes) - - return t - -#-------------------------------------------------- - -class TypeDesc: - """ Encapsulates a description of a datatype, as parsed from DWARF DIEs. - Not enough to display the variable in the debugger, but enough - to produce a type description string similar to those of llvm-dwarfdump. - - name - name for primitive datatypes, element name for arrays, the - whole name for functions and function pouinters - - modifiers - a collection of "const"/"pointer"/"reference", from the - chain of DIEs preceeding the real type DIE - - scopes - a collection of struct/class/namespace names, parents of the - real type DIE - - tag - the tag of the real type DIE, stripped of initial DW_TAG_ and - final _type - - dimensions - the collection of array dimensions, if the type is an - array. -1 means an array of unknown dimension. - - """ - def __init__(self) -> None: - self.name: str - self.modifiers: tuple[str, ...] = () # Reads left to right - self.scopes: tuple[str, ...] = () # Reads left to right - self.tag: str | None = None - self.dimensions: tuple[int, ...] | None = None - - def __str__(self) -> str: - # Some reference points from dwarfdump: - # const->pointer->const->char = const char *const - # const->reference->const->int = const const int & - # const->reference->int = const int & - name = str(self.name) - mods = self.modifiers - - parts = [] - # Initial const/volatile applies to the var ifself, other consts apply to the pointee - if mods and mods[0] in ('const', 'volatile'): - parts.append(mods[0]) - mods = mods[1:] - - # ref->const in the end, const goes in front - if mods[-2:] == ("reference", "const"): - parts.append("const") - mods = mods[0:-1] - - if self.scopes: - name = '::'.join(self.scopes)+'::' + name - parts.append(name) - - if mods: - parts.append("".join(cpp_symbols[mod] for mod in mods)) - - if self.dimensions: - dims = "".join('[%s]' % (str(dim) if dim > 0 else '',) - for dim in self.dimensions) - else: - dims = '' - - return " ".join(parts)+dims - -def DIE_name(die: DIE) -> str: - return bytes2str(die.attributes['DW_AT_name'].value) - -def safe_DIE_name(die: DIE, default: str = '') -> str: - return bytes2str(die.attributes['DW_AT_name'].value) if 'DW_AT_name' in die.attributes else default - -def DIE_type(die: DIE) -> DIE: - return die.get_DIE_from_attribute("DW_AT_type") - -class ClassDesc: - def __init__(self) -> None: - self.scopes: tuple[str, ...] = () - self.const_member: bool = False - -def get_class_spec_if_member(func_spec: DIE, the_func: DIE) -> ClassDesc | None: - if 'DW_AT_object_pointer' in the_func.attributes: - this_param = the_func.get_DIE_from_attribute('DW_AT_object_pointer') - this_type = parse_cpp_datatype(this_param) - class_spec = ClassDesc() - class_spec.scopes = (*this_type.scopes, this_type.name) - class_spec.const_member = any(("const", "pointer") == this_type.modifiers[i:i+2] - for i in range(len(this_type.modifiers))) # const -> pointer -> const for this arg of const - return class_spec - - # Check the parent element chain - could be a class - parent = func_spec.get_parent() - - scopes: list[str] = [] - while parent and parent.tag in ("DW_TAG_class_type", "DW_TAG_structure_type", "DW_TAG_namespace"): - scopes.insert(0, DIE_name(parent)) - parent = parent.get_parent() - if scopes: - cs = ClassDesc() - cs.scopes = tuple(scopes) - return cs - - return None - -def format_function_param(param_spec: DIE, param: DIE) -> str: - if param_spec.tag == 'DW_TAG_formal_parameter': - type = parse_cpp_datatype(param_spec) - return str(type) - else: # unspecified_parameters AKA variadic - return "..." - -def DIE_is_ptr_to_member_struct(type_die: DIE) -> bool: - if type_die.tag == 'DW_TAG_structure_type': - members = tuple(die for die in type_die.iter_children() if die.tag == "DW_TAG_member") - return len(members) == 2 and safe_DIE_name(members[0]) == "__pfn" and safe_DIE_name(members[1]) == "__delta" - return False - -def _strip_type_tag(die: DIE) -> str: - """Given a DIE with DW_TAG_foo_type, returns foo""" - if not isinstance(die.tag, str): # User-defined tag - return "" - return die.tag[7:-5] - -def _array_subtype_size(sub: DIE) -> int: - if 'DW_AT_upper_bound' in sub.attributes: - return sub.attributes['DW_AT_upper_bound'].value + 1 - if 'DW_AT_count' in sub.attributes: - return sub.attributes['DW_AT_count'].value - else: - return -1 - diff --git a/.tools/python-revlibs/elftools/dwarf/descriptions.py b/.tools/python-revlibs/elftools/dwarf/descriptions.py deleted file mode 100644 index 1ddfd3e..0000000 --- a/.tools/python-revlibs/elftools/dwarf/descriptions.py +++ /dev/null @@ -1,721 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/descriptions.py -# -# Textual descriptions of the various values and enums of DWARF -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from collections import defaultdict -from typing import TYPE_CHECKING, Any, Literal, overload - -from .constants import ( - DW_ACCESS, DW_ATE, DW_CC, DW_CFA, DW_ID, DW_INL, DW_LANG, DW_ORD, DW_VIRTUALITY, DW_VIS, - ) -from .dwarf_expr import DWARFExprParser -from .die import DIE -from ..common.utils import preserve_stream_pos, dwarf_assert, bytes2str -from .callframe import CIE, FDE - -if TYPE_CHECKING: - from collections.abc import Callable, Iterable, Mapping - from typing import TypeVar - - from .callframe import CallFrameInstruction, CFARule, CFIEntry, RegisterRule - from .die import AttributeValue - from .structs import DWARFStructs - - _INT = TypeVar("_INT", bound=int) - - -def set_global_machine_arch(machine_arch: str) -> None: - global _MACHINE_ARCH - _MACHINE_ARCH = machine_arch - - -def describe_attr_value(attr: AttributeValue, die: DIE, section_offset: int) -> str: - """ Given an attribute attr, return the textual representation of its - value, suitable for tools like readelf. - - To cover all cases, this function needs some extra arguments: - - die: the DIE this attribute was extracted from - section_offset: offset in the stream of the section the DIE belongs to - """ - descr_func = _ATTR_DESCRIPTION_MAP[attr.form] - val_description = descr_func(attr, die, section_offset) - - # For some attributes we can display further information - extra_info_func = _EXTRA_INFO_DESCRIPTION_MAP[attr.name] - extra_info = extra_info_func(attr, die, section_offset) - return str(val_description) + '\t' + extra_info - - -def describe_CFI_instructions(entry: CFIEntry) -> str: - """ Given a CFI entry (CIE or FDE), return the textual description of its - instructions. - """ - def _assert_FDE_instruction(instr: CallFrameInstruction) -> None: - dwarf_assert( - isinstance(entry, FDE), - 'Unexpected instruction "%s" for a CIE' % instr) - - def _full_reg_name(regnum: int) -> str: - regname = describe_reg_name(regnum, _MACHINE_ARCH, False) - if regname: - return 'r%s (%s)' % (regnum, regname) - else: - return 'r%s' % regnum - - if isinstance(entry, CIE): - cie = entry - pc: int | None = None - else: # FDE - assert entry.cie is not None - cie = entry.cie - pc = entry['initial_location'] - - s = '' - for instr in entry.instructions: - name = instr.opcode.FQN - match instr.opcode: - case DW_CFA.offset | DW_CFA.offset_extended | DW_CFA.offset_extended_sf | DW_CFA.val_offset | DW_CFA.val_offset_sf: - s += ' %s: %s at cfa%+d\n' % ( - name, _full_reg_name(instr.args[0]), - instr.args[1] * cie['data_alignment_factor']) - case DW_CFA.restore | DW_CFA.restore_extended | DW_CFA.undefined | DW_CFA.same_value | DW_CFA.def_cfa_register: - s += ' %s: %s\n' % (name, _full_reg_name(instr.args[0])) - case DW_CFA.register: - s += ' %s: %s in %s' % ( - name, _full_reg_name(instr.args[0]), - _full_reg_name(instr.args[1])) - case DW_CFA.set_loc: - pc = instr.args[0] - assert pc is not None - s += ' %s: %08x\n' % (name, pc) - case DW_CFA.advance_loc1 | DW_CFA.advance_loc2 | DW_CFA.advance_loc4 | DW_CFA.advance_loc: - _assert_FDE_instruction(instr) - assert pc is not None - factored_offset: int = instr.args[0] * cie['code_alignment_factor'] - s += ' %s: %s to %08x\n' % ( - name, factored_offset, factored_offset + pc) - pc += factored_offset - case DW_CFA.remember_state | DW_CFA.restore_state | DW_CFA.nop | DW_CFA.AARCH64_negate_ra_state: - s += ' %s\n' % name - case DW_CFA.def_cfa: - s += ' %s: %s ofs %s\n' % ( - name, _full_reg_name(instr.args[0]), instr.args[1]) - case DW_CFA.def_cfa_sf: - s += ' %s: %s ofs %s\n' % ( - name, _full_reg_name(instr.args[0]), - instr.args[1] * cie['data_alignment_factor']) - case DW_CFA.def_cfa_offset | DW_CFA.GNU_args_size: - s += ' %s: %s\n' % (name, instr.args[0]) - case DW_CFA.def_cfa_offset_sf: - assert entry.cie is not None - s += ' %s: %s\n' % (name, instr.args[0]*entry.cie['data_alignment_factor']) - case DW_CFA.def_cfa_expression: - expr_dumper = ExprDumper(entry.structs) - # readelf output is missing a colon for DW_CFA.def_cfa_expression - s += ' %s (%s)\n' % (name, expr_dumper.dump_expr(instr.args[0])) - case DW_CFA.expression: - expr_dumper = ExprDumper(entry.structs) - s += ' %s: %s (%s)\n' % ( - name, _full_reg_name(instr.args[0]), - expr_dumper.dump_expr(instr.args[1])) - case _: - s += ' %s: \n' % name - - return s - - -def describe_CFI_register_rule(rule: RegisterRule) -> str: - s = _DESCR_CFI_REGISTER_RULE_TYPE[rule.type] - if rule.type in ('OFFSET', 'VAL_OFFSET'): - assert isinstance(rule.arg, int) - s += '%+d' % rule.arg - elif rule.type == 'REGISTER': - assert isinstance(rule.arg, int) - reg = describe_reg_name(rule.arg) - s += reg - return s - - -def describe_CFI_CFA_rule(rule: CFARule) -> str: - if rule.expr: - return 'exp' - else: - assert isinstance(rule.reg, int) - assert isinstance(rule.offset, int) - return '%s%+d' % (describe_reg_name(rule.reg), rule.offset) - - -def describe_DWARF_expr(expr: Any, structs: DWARFStructs, cu_offset: int | None = None) -> str: - """ Textual description of a DWARF expression encoded in 'expr'. - structs should come from the entity encompassing the expression - it's - needed to be able to parse it correctly. - """ - # Since this function can be called a lot, initializing a fresh new - # ExprDumper per call is expensive. So a rudimentary caching scheme is in - # place to create only one such dumper per instance of structs. - cache_key = id(structs) - if cache_key not in _DWARF_EXPR_DUMPER_CACHE: - _DWARF_EXPR_DUMPER_CACHE[cache_key] = \ - ExprDumper(structs) - dwarf_expr_dumper = _DWARF_EXPR_DUMPER_CACHE[cache_key] - return '(' + dwarf_expr_dumper.dump_expr(expr, cu_offset) + ')' - - -@overload -def describe_reg_name(regnum: int, machine_arch: str | None, default: Literal[False]) -> str | None: ... -@overload -def describe_reg_name(regnum: int, machine_arch: str | None = ..., default: Literal[True] = ...) -> str: ... -def describe_reg_name(regnum: int, machine_arch: str | None = None, default: bool = True) -> str | None: - """ Provide a textual description for a register name, given its serial - number. The number is expected to be valid. - """ - if machine_arch is None: - machine_arch = _MACHINE_ARCH - - if machine_arch == 'x86': - return _REG_NAMES_x86[regnum] - elif machine_arch == 'x64': - return _REG_NAMES_x64[regnum] - elif machine_arch == 'AArch64': - return _REG_NAMES_AArch64[regnum] - elif default: - return 'r%s' % regnum - else: - return None - -def describe_form_class(form: str) -> str | None: - """For a given form name, determine its value class. - - For example, given 'DW_FORM.data1' returns 'constant'. - - For some forms, like DW_FORM.indirect and DW_FORM.sec_offset, the class is - not hard-coded and extra information is required. For these, None is - returned. - """ - return _FORM_CLASS[form] - - -#------------------------------------------------------------------------------- - -# The machine architecture. Set globally via set_global_machine_arch -# -_MACHINE_ARCH: str | None = None - -# Implements the alternative format of readelf: lowercase hex, prefixed with 0x unless 0 -def _format_hex(n: int) -> str: - return '0x%x' % n if n != 0 else '0' - -def _describe_attr_ref(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return '<%s>' % _format_hex(attr.value + die.cu.cu_offset) - -def _describe_attr_ref_sig8(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return 'signature: %s' % _format_hex(attr.value) - -def _describe_attr_value_passthrough( - attr: AttributeValue, - die: DIE, - section_offset: int, -) -> str | int: - return attr.value - -def _describe_attr_hex(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return '%s' % _format_hex(attr.value) - -def _describe_attr_hex_addr(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return '<%s>' % _format_hex(attr.value) - -def _describe_attr_split_64bit(attr: AttributeValue, die: DIE, section_offset: int) -> str: - low_word = attr.value & 0xFFFFFFFF - high_word = (attr.value >> 32) & 0xFFFFFFFF - return '%s %s' % (_format_hex(low_word), _format_hex(high_word)) - -def _describe_attr_strp(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return '(indirect string, offset: %s): %s' % ( - _format_hex(attr.raw_value), bytes2str(attr.value)) - -def _describe_attr_line_strp(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return '(indirect line string, offset: %s): %s' % ( - _format_hex(attr.raw_value), bytes2str(attr.value)) - -def _describe_attr_string(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return bytes2str(attr.value) - -def _describe_attr_debool(attr: AttributeValue, die: DIE, section_offset: int) -> str: - """ To be consistent with readelf, generate 1 for True flags, 0 for False - flags. - """ - return '1' if attr.value else '0' - -def _describe_attr_present(attr: AttributeValue, die: DIE, section_offset: int) -> str: - """ Some forms may simply mean that an attribute is present, - without providing any value. - """ - return '1' - -def _describe_attr_block(attr: AttributeValue, die: DIE, section_offset: int) -> str: - s = '%s byte block: ' % len(attr.value) - s += ' '.join('%x' % item for item in attr.value) + ' ' - return s - - -_ATTR_DESCRIPTION_MAP = defaultdict( - lambda: _describe_attr_value_passthrough, # default_factory - - DW_FORM_ref1=_describe_attr_ref, - DW_FORM_ref2=_describe_attr_ref, - DW_FORM_ref4=_describe_attr_ref, - DW_FORM_ref8=_describe_attr_split_64bit, - DW_FORM_ref_udata=_describe_attr_ref, - DW_FORM_ref_addr=_describe_attr_hex_addr, - DW_FORM_data4=_describe_attr_hex, - DW_FORM_data8=_describe_attr_hex, - DW_FORM_addr=_describe_attr_hex, - DW_FORM_sec_offset=_describe_attr_hex, - DW_FORM_flag=_describe_attr_debool, - DW_FORM_data1=_describe_attr_value_passthrough, - DW_FORM_data2=_describe_attr_value_passthrough, - DW_FORM_sdata=_describe_attr_value_passthrough, - DW_FORM_udata=_describe_attr_value_passthrough, - DW_FORM_string=_describe_attr_string, - DW_FORM_strp=_describe_attr_strp, - DW_FORM_line_strp=_describe_attr_line_strp, - DW_FORM_block1=_describe_attr_block, - DW_FORM_block2=_describe_attr_block, - DW_FORM_block4=_describe_attr_block, - DW_FORM_block=_describe_attr_block, - DW_FORM_flag_present=_describe_attr_present, - DW_FORM_exprloc=_describe_attr_block, - DW_FORM_ref_sig8=_describe_attr_ref_sig8, -) - -_FORM_CLASS = dict( - DW_FORM_addr='address', - DW_FORM_block2='block', - DW_FORM_block4='block', - DW_FORM_data2='constant', - DW_FORM_data4='constant', - DW_FORM_data8='constant', - DW_FORM_string='string', - DW_FORM_block='block', - DW_FORM_block1='block', - DW_FORM_data1='constant', - DW_FORM_flag='flag', - DW_FORM_sdata='constant', - DW_FORM_strp='string', - DW_FORM_udata='constant', - DW_FORM_ref_addr='reference', - DW_FORM_ref1='reference', - DW_FORM_ref2='reference', - DW_FORM_ref4='reference', - DW_FORM_ref8='reference', - DW_FORM_ref_udata='reference', - DW_FORM_indirect=None, - DW_FORM_sec_offset=None, - DW_FORM_exprloc='exprloc', - DW_FORM_flag_present='flag', - DW_FORM_ref_sig8='reference', -) - -_DESCR_DW_INL = { - DW_INL.not_inlined: '(not inlined)', - DW_INL.inlined: '(inlined)', - DW_INL.declared_not_inlined: '(declared as inline but ignored)', - DW_INL.declared_inlined: '(declared as inline and inlined)', -} - -_DESCR_DW_LANG = { - DW_LANG.C89: '(ANSI C)', - DW_LANG.C: '(non-ANSI C)', - DW_LANG.Ada83: '(Ada)', - DW_LANG.C_plus_plus: '(C++)', - DW_LANG.Cobol74: '(Cobol 74)', - DW_LANG.Cobol85: '(Cobol 85)', - DW_LANG.Fortran77: '(FORTRAN 77)', - DW_LANG.Fortran90: '(Fortran 90)', - DW_LANG.Pascal83: '(ANSI Pascal)', - DW_LANG.Modula2: '(Modula 2)', - DW_LANG.Java: '(Java)', - DW_LANG.C99: '(ANSI C99)', - DW_LANG.Ada95: '(ADA 95)', - DW_LANG.Fortran95: '(Fortran 95)', - DW_LANG.PLI: '(PLI)', - DW_LANG.ObjC: '(Objective C)', - DW_LANG.ObjC_plus_plus: '(Objective C++)', - DW_LANG.UPC: '(Unified Parallel C)', - DW_LANG.D: '(D)', - DW_LANG.Python: '(Python)', - DW_LANG.OpenCL: '(OpenCL)', - DW_LANG.Go: '(Go)', - DW_LANG.Modula3: '(Modula 3)', - DW_LANG.Haskell: '(Haskell)', - DW_LANG.C_plus_plus_03: '(C++03)', - DW_LANG.C_plus_plus_11: '(C++11)', - DW_LANG.OCaml: '(OCaml)', - DW_LANG.Rust: '(Rust)', - DW_LANG.C11: '(C11)', - DW_LANG.Swift: '(Swift)', - DW_LANG.Julia: '(Julia)', - DW_LANG.Dylan: '(Dylan)', - DW_LANG.C_plus_plus_14: '(C++14)', - DW_LANG.Fortran03: '(Fortran 03)', - DW_LANG.Fortran08: '(Fortran 08)', - DW_LANG.RenderScript: '(RenderScript)', - DW_LANG.BLISS: '(Bliss)', # Not in binutils - DW_LANG.Mips_Assembler: '(MIPS assembler)', - DW_LANG.HP_Bliss: '(HP Bliss)', - DW_LANG.HP_Basic91: '(HP Basic 91)', - DW_LANG.HP_Pascal91: '(HP Pascal 91)', - DW_LANG.HP_IMacro: '(HP IMacro)', - DW_LANG.HP_Assembler: '(HP assembler)' -} - -_DESCR_DW_ATE = { - DW_ATE.void: '(void)', - DW_ATE.address: '(machine address)', - DW_ATE.boolean: '(boolean)', - DW_ATE.complex_float: '(complex float)', - DW_ATE.float: '(float)', - DW_ATE.signed: '(signed)', - DW_ATE.signed_char: '(signed char)', - DW_ATE.unsigned: '(unsigned)', - DW_ATE.unsigned_char: '(unsigned char)', - DW_ATE.imaginary_float: '(imaginary float)', - DW_ATE.decimal_float: '(decimal float)', - DW_ATE.packed_decimal: '(packed_decimal)', - DW_ATE.numeric_string: '(numeric_string)', - DW_ATE.edited: '(edited)', - DW_ATE.signed_fixed: '(signed_fixed)', - DW_ATE.unsigned_fixed: '(unsigned_fixed)', - DW_ATE.UTF: '(unicode string)', - DW_ATE.HP_float80: '(HP_float80)', - DW_ATE.HP_complex_float80: '(HP_complex_float80)', - DW_ATE.HP_float128: '(HP_float128)', - DW_ATE.HP_complex_float128: '(HP_complex_float128)', - DW_ATE.HP_floathpintel: '(HP_floathpintel)', - DW_ATE.HP_imaginary_float80: '(HP_imaginary_float80)', - DW_ATE.HP_imaginary_float128: '(HP_imaginary_float128)', -} - -_DESCR_DW_ACCESS = { - DW_ACCESS.public: '(public)', - DW_ACCESS.protected: '(protected)', - DW_ACCESS.private: '(private)', -} - -_DESCR_DW_VIS = { - DW_VIS.local: '(local)', - DW_VIS.exported: '(exported)', - DW_VIS.qualified: '(qualified)', -} - -_DESCR_DW_VIRTUALITY = { - DW_VIRTUALITY.none: '(none)', - DW_VIRTUALITY.virtual: '(virtual)', - DW_VIRTUALITY.pure_virtual: '(pure virtual)', -} - -_DESCR_DW_ID_CASE = { - DW_ID.case_sensitive: '(case_sensitive)', - DW_ID.up_case: '(up_case)', - DW_ID.down_case: '(down_case)', - DW_ID.case_insensitive: '(case_insensitive)', -} - -_DESCR_DW_CC = { - DW_CC.normal: '(normal)', - DW_CC.program: '(program)', - DW_CC.nocall: '(nocall)', - DW_CC.pass_by_reference: '(pass by ref)', - DW_CC.pass_by_valuee: '(pass by value)', -} - -_DESCR_DW_ORD = { - DW_ORD.row_major: '(row major)', - DW_ORD.col_major: '(column major)', -} - -_DESCR_CFI_REGISTER_RULE_TYPE = dict( - UNDEFINED='u', - SAME_VALUE='s', - OFFSET='c', - VAL_OFFSET='v', - REGISTER='', - EXPRESSION='exp', - VAL_EXPRESSION='vexp', - ARCHITECTURAL='a', -) - -def _make_extra_mapper( - mapping: Mapping[_INT, str], - default: str, - default_interpolate_value: bool = False, -) -> Callable[[AttributeValue, DIE, int], str]: - """ Create a mapping function from attribute parameters to an extra - value that should be displayed. - """ - - def mapper(attr: AttributeValue, die: DIE, section_offset: int) -> str: - if default_interpolate_value: - d = default % attr.value - else: - d = default - return mapping.get(attr.value, d) - - return mapper - - -def _make_extra_string(s: str = '') -> Callable[[AttributeValue, DIE, int], str]: - """ Create an extra function that just returns a constant string. - """ - def extra(attr: AttributeValue, die: DIE, section_offset: int) -> str: - return s - return extra - - -_DWARF_EXPR_DUMPER_CACHE: dict[int, ExprDumper] = {} - -def _location_list_extra(attr: AttributeValue, die: DIE, section_offset: int) -> str: - # According to section 2.6 of the DWARF spec v3, class loclistptr means - # a location list, and class block means a location expression. - # DW_FORM.sec_offset is new in DWARFv4 as a section offset. - if attr.form in ('DW_FORM_data4', 'DW_FORM_data8', 'DW_FORM_sec_offset'): - return '(location list)' - else: - return describe_DWARF_expr(attr.value, die.cu.structs, die.cu.cu_offset) - - -def _data_member_location_extra(attr: AttributeValue, die: DIE, section_offset: int) -> str: - # According to section 5.5.6 of the DWARF spec v4, a data member location - # can be an integer offset, or a location description. - # - if attr.form in ('DW_FORM_data1', 'DW_FORM_data2', - 'DW_FORM_data4', 'DW_FORM_data8', - 'DW_FORM_sdata', 'DW_FORM_implicit_const'): - return '' # No extra description needed - else: - return describe_DWARF_expr(attr.value, die.cu.structs, die.cu.cu_offset) - - -def _import_extra(attr: AttributeValue, die: DIE, section_offset: int) -> str: - # For DW_AT_import the value points to a DIE (that can be either in the - # current DIE's CU or in another CU, depending on the FORM). The extra - # information for it is the abbreviation number in this DIE and its tag. - if attr.form == 'DW_FORM_ref_addr': - # Absolute offset value - ref_die_offset = section_offset + attr.value - else: - # Relative offset to the current DIE's CU - ref_die_offset = attr.value + die.cu.cu_offset - - # Now find the CU this DIE belongs to (since we have to find its abbrev - # table). This is done by linearly scanning through all CUs, looking for - # one spanning an address space containing the referred DIE's offset. - for cu in die.dwarfinfo.iter_CUs(): - if cu['unit_length'] + cu.cu_offset > ref_die_offset >= cu.cu_offset: - # Once we have the CU, we can actually parse this DIE from the - # stream. - with preserve_stream_pos(die.stream): - ref_die = DIE(cu, die.stream, ref_die_offset) - return '[Abbrev Number: %s (%s)]' % ( - ref_die.abbrev_code, ref_die.tag) - - return '[unknown]' - - -_EXTRA_INFO_DESCRIPTION_MAP = defaultdict( - lambda: _make_extra_string(''), # default_factory - - DW_AT_inline=_make_extra_mapper( - _DESCR_DW_INL, '(Unknown inline attribute value: %x)', - default_interpolate_value=True), - DW_AT_language=_make_extra_mapper( - _DESCR_DW_LANG, '(Unknown: %x)', default_interpolate_value=True), - DW_AT_encoding=_make_extra_mapper(_DESCR_DW_ATE, '(unknown type)'), - DW_AT_accessibility=_make_extra_mapper( - _DESCR_DW_ACCESS, '(unknown accessibility)'), - DW_AT_visibility=_make_extra_mapper( - _DESCR_DW_VIS, '(unknown visibility)'), - DW_AT_virtuality=_make_extra_mapper( - _DESCR_DW_VIRTUALITY, '(unknown virtuality)'), - DW_AT_identifier_case=_make_extra_mapper( - _DESCR_DW_ID_CASE, '(unknown case)'), - DW_AT_calling_convention=_make_extra_mapper( - _DESCR_DW_CC, '(unknown convention)'), - DW_AT_ordering=_make_extra_mapper( - _DESCR_DW_ORD, '(undefined)'), - DW_AT_frame_base=_location_list_extra, - DW_AT_location=_location_list_extra, - DW_AT_string_length=_location_list_extra, - DW_AT_return_addr=_location_list_extra, - DW_AT_data_member_location=_data_member_location_extra, - DW_AT_vtable_elem_location=_location_list_extra, - DW_AT_segment=_location_list_extra, - DW_AT_static_link=_location_list_extra, - DW_AT_use_location=_location_list_extra, - DW_AT_allocated=_location_list_extra, - DW_AT_associated=_location_list_extra, - DW_AT_data_location=_location_list_extra, - DW_AT_stride=_location_list_extra, - DW_AT_call_value=_location_list_extra, - DW_AT_import=_import_extra, - DW_AT_GNU_call_site_value=_location_list_extra, - DW_AT_GNU_call_site_data_value=_location_list_extra, - DW_AT_GNU_call_site_target=_location_list_extra, - DW_AT_GNU_call_site_target_clobbered=_location_list_extra, -) - -# 8 in a line, for easier counting -_REG_NAMES_x86 = [ - 'eax', 'ecx', 'edx', 'ebx', 'esp', 'ebp', 'esi', 'edi', - 'eip', 'eflags', '', 'st0', 'st1', 'st2', 'st3', 'st4', - 'st5', 'st6', 'st7', '', '', 'xmm0', 'xmm1', 'xmm2', - 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'mm0', 'mm1', 'mm2', - 'mm3', 'mm4', 'mm5', 'mm6', 'mm7', 'fcw', 'fsw', 'mxcsr', - 'es', 'cs', 'ss', 'ds', 'fs', 'gs', '', '', 'tr', 'ldtr' -] - -_REG_NAMES_x64 = [ - 'rax', 'rdx', 'rcx', 'rbx', 'rsi', 'rdi', 'rbp', 'rsp', - 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15', - 'rip', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', - 'xmm7', 'xmm8', 'xmm9', 'xmm10', 'xmm11', 'xmm12', 'xmm13', 'xmm14', - 'xmm15', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', - 'st7', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6', - 'mm7', 'rflags', 'es', 'cs', 'ss', 'ds', 'fs', 'gs', - '', '', 'fs.base', 'gs.base', '', '', 'tr', 'ldtr', - 'mxcsr', 'fcw', 'fsw' -] - -# https://developer.arm.com/documentation/ihi0057/e/?lang=en#dwarf-register-names -_REG_NAMES_AArch64 = [ - 'x0', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', - 'x8', 'x9', 'x10', 'x11', 'x12', 'x13', 'x14', 'x15', - 'x16', 'x17', 'x18', 'x19', 'x20', 'x21', 'x22', 'x23', - 'x24', 'x25', 'x26', 'x27', 'x28', 'x29', 'x30', 'sp', - '', 'ELR_mode', 'RA_SIGN_STATE', '', '', '', '', '', - '', '', '', '', '', '', 'VG', 'FFR', - 'p0', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', - 'p8', 'p9', 'p10', 'p11', 'p12', 'p13', 'p14', 'p15', - 'v0', 'v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7', - 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', - 'v16', 'v17', 'v18', 'v19', 'v20', 'v21', 'v22', 'v23', - 'v24', 'v25', 'v26', 'v27', 'v28', 'v29', 'v30', 'v31', - 'z0', 'z1', 'z2', 'z3', 'z4', 'z5', 'z6', 'z7', - 'z8', 'z9', 'z10', 'z11', 'z12', 'z13', 'z14', 'z15', - 'z16', 'z17', 'z18', 'z19', 'z20', 'z21', 'z22', 'z23', - 'z24', 'z25', 'z26', 'z27', 'z28', 'z29', 'z30', 'z31' -] - - -class ExprDumper: - """ A dumper for DWARF expressions that dumps a textual - representation of the complete expression. - - Usage: after creation, call dump_expr repeatedly - it's stateless. - """ - def __init__(self, structs: DWARFStructs) -> None: - self.structs = structs - self.expr_parser = DWARFExprParser(self.structs) - self._init_lookups() - - def dump_expr(self, expr: bytes | Iterable[int], cu_offset: int | None = None) -> str: - """ Parse and dump a DWARF expression. - expr should be bytes or a list of (integer) byte values. - cu_offset is the cu_offset - value from the CU object where the expression resides. - Only affects a handful of GNU opcodes, if None is provided, - that's not a crash condition, only the expression dump will - not be consistent of that of readelf. - - Returns a string representing the expression. - """ - parsed = self.expr_parser.parse_expr(bytes(expr)) - return '; '.join( - self._dump_to_string(deo.op, deo.op_name, deo.args, cu_offset) - for deo in parsed - ) - - def _init_lookups(self) -> None: - self._ops_with_decimal_arg = { - 'DW_OP_const1u', 'DW_OP_const1s', 'DW_OP_const2u', 'DW_OP_const2s', - 'DW_OP_const4u', 'DW_OP_const4s', 'DW_OP_const8u', 'DW_OP_const8s', - 'DW_OP_constu', 'DW_OP_consts', 'DW_OP_pick', 'DW_OP_plus_uconst', - 'DW_OP_bra', 'DW_OP_skip', 'DW_OP_fbreg', 'DW_OP_piece', - 'DW_OP_deref_size', 'DW_OP_xderef_size', 'DW_OP_regx'} - - for n in range(0, 32): - self._ops_with_decimal_arg.add('DW_OP_breg%s' % n) - - self._ops_with_two_decimal_args = {'DW_OP_bregx'} - - self._ops_with_hex_arg = { - 'DW_OP_addr', 'DW_OP_call2', 'DW_OP_call4', 'DW_OP_call_ref'} - - def _dump_to_string( - self, - opcode: int, - opcode_name: str, - args: list[Any], - cu_offset: int | None = None, - ) -> str: - # Some GNU ops contain an offset from the current CU as an argument, - # but readelf emits those ops with offset from the info section - # so we need the base offset of the parent CU. - # If omitted, arguments on some GNU opcodes will be off. - if cu_offset is None: - cu_offset = 0 - - if not args: - if opcode_name.startswith('DW_OP_reg'): - regnum = int(opcode_name[9:]) - return '%s (%s)' % ( - opcode_name, - describe_reg_name(regnum, _MACHINE_ARCH)) - else: - return opcode_name - elif opcode_name in self._ops_with_decimal_arg: - if opcode_name.startswith('DW_OP_breg'): - regnum = int(opcode_name[10:]) - return '%s (%s): %s' % ( - opcode_name, - describe_reg_name(regnum, _MACHINE_ARCH), - args[0]) - elif opcode_name.endswith('regx'): - # applies to both regx and bregx - return '%s: %s (%s)' % ( - opcode_name, - args[0], - describe_reg_name(args[0], _MACHINE_ARCH)) - else: - return '%s: %s' % (opcode_name, args[0]) - elif opcode_name in self._ops_with_hex_arg: - return '%s: %x' % (opcode_name, args[0]) - elif opcode_name in self._ops_with_two_decimal_args: - return '%s: %s %s' % (opcode_name, args[0], args[1]) - elif opcode_name in ('DW_OP_GNU_entry_value', 'DW_OP_entry_value'): - return '%s: (%s)' % (opcode_name, ','.join([self._dump_to_string(deo.op, deo.op_name, deo.args, cu_offset) for deo in args[0]])) - elif opcode_name == 'DW_OP_implicit_value': - return "%s %s byte block: %s" % (opcode_name, len(args[0]), ''.join(["%x " % b for b in args[0]])) - elif opcode_name == 'DW_OP_GNU_parameter_ref': - return "%s: <0x%x>" % (opcode_name, args[0] + cu_offset) - elif opcode_name in ('DW_OP_GNU_implicit_pointer', 'DW_OP_implicit_pointer'): - return "%s: <0x%x> %d" % (opcode_name, args[0], args[1]) - elif opcode_name in ('DW_OP_GNU_convert', 'DW_OP_convert'): - return "%s <0x%x>" % (opcode_name, args[0] + cu_offset) - elif opcode_name in ('DW_OP_GNU_deref_type', 'DW_OP_deref_type'): - return "%s: %d <0x%x>" % (opcode_name, args[0], args[1] + cu_offset) - elif opcode_name in ('DW_OP_GNU_const_type', 'DW_OP_const_type'): - return "%s: <0x%x> %d byte block: %s " % (opcode_name, args[0] + cu_offset, len(args[1]), ' '.join("%x" % b for b in args[1])) - elif opcode_name in ('DW_OP_GNU_regval_type', 'DW_OP_regval_type'): - return "%s: %d (%s) <0x%x>" % (opcode_name, args[0], describe_reg_name(args[0], _MACHINE_ARCH), args[1] + cu_offset) - elif opcode_name == 'DW_OP_bit_piece': - return '%s: size: %s offset: %s' % (opcode_name, args[0], args[1]) - else: - return '' % opcode_name diff --git a/.tools/python-revlibs/elftools/dwarf/die.py b/.tools/python-revlibs/elftools/dwarf/die.py deleted file mode 100644 index 0bc1036..0000000 --- a/.tools/python-revlibs/elftools/dwarf/die.py +++ /dev/null @@ -1,373 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/die.py -# -# DWARF Debugging Information Entry -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import os -from typing import IO, TYPE_CHECKING, Any, NamedTuple - -from ..common.exceptions import DWARFError, ELFParseError -from ..common.utils import bytes2str, struct_parse -from .enums import DW_FORM_raw2name -from .dwarf_util import _resolve_via_offset_table, _get_base_offset -from ..construct import ConstructError - -if TYPE_CHECKING: - from collections.abc import Iterator - - from .compileunit import CompileUnit - from .typeunit import TypeUnit - - -# AttributeValue - describes an attribute value in the DIE: -# -# name: -# The name (DW_AT_*) of this attribute -# -# form: -# The DW_FORM_* name of this attribute -# -# value: -# The value parsed from the section and translated accordingly to the form -# (e.g. for a DW_FORM_strp it's the actual string taken from the string table) -# -# raw_value: -# Raw value as parsed from the section - used for debugging and presentation -# (e.g. for a DW_FORM_strp it's the raw string offset into the table) -# -# offset: -# Offset of this attribute's value in the stream (absolute offset, relative -# the beginning of the whole stream) -# -# indirection_length: -# If the form of the attribute is DW_FORM_indirect, the form will contain -# the resolved form, and this will contain the length of the indirection chain. -# 0 means no indirection. -class AttributeValue(NamedTuple): - name: str - form: str - value: Any - raw_value: int - offset: int - indirection_length: int - - -class DIE: - """ A DWARF debugging information entry. On creation, parses itself from - the stream. Each DIE is held by a CU. - - Accessible attributes: - - tag: - The DIE tag - - size: - The size this DIE occupies in the section - - offset: - The offset of this DIE in the stream - - attributes: - An ordered dictionary mapping attribute names to values. It's - ordered to preserve the order of attributes in the section - - has_children: - Specifies whether this DIE has children - - abbrev_code: - The abbreviation code pointing to an abbreviation entry (note - that this is for informational purposes only - this object - interacts with its abbreviation table transparently). - - See also the public methods. - """ - def __init__(self, cu: CompileUnit | TypeUnit, stream: IO[bytes], offset: int) -> None: - """ cu: - CompileUnit object this DIE belongs to. Used to obtain context - information (structs, abbrev table, etc.) - - stream, offset: - The stream and offset into it where this DIE's data is located - """ - self.cu = cu - self.dwarfinfo = self.cu.dwarfinfo # get DWARFInfo context - self.stream = stream - self.offset = offset - - self.attributes: dict[str, Any] = {} - self.tag: str | int | None = None - self.has_children: bool | None = None - self.abbrev_code: int | None = None - self.size = 0 - # Null DIE terminator. It can be used to obtain offset range occupied - # by this DIE including its whole subtree. - self._terminator: DIE | None = None - self._parent: DIE | None = None - - self._parse_DIE() - - def is_null(self) -> bool: - """ Is this a null entry? - """ - return self.tag is None - - def get_DIE_from_attribute(self, name: str) -> DIE: - """ Return the DIE referenced by the named attribute of this DIE. - The attribute must be in the reference attribute class. - - name: - The name of the attribute in the reference class. - """ - attr = self.attributes[name] - if attr.form in ('DW_FORM_ref1', 'DW_FORM_ref2', 'DW_FORM_ref4', - 'DW_FORM_ref8', 'DW_FORM_ref', 'DW_FORM_ref_udata'): - refaddr = self.cu.cu_offset + attr.raw_value - return self.cu.get_DIE_from_refaddr(refaddr) - elif attr.form in ('DW_FORM_ref_addr'): - return self.cu.dwarfinfo.get_DIE_from_refaddr(attr.raw_value) - elif attr.form in ('DW_FORM_ref_sig8'): - return self.cu.dwarfinfo.get_DIE_by_sig8(attr.raw_value) - elif attr.form in ('DW_FORM_ref_sup4', 'DW_FORM_ref_sup8', 'DW_FORM_GNU_ref_alt'): - if self.dwarfinfo.supplementary_dwarfinfo: - return self.dwarfinfo.supplementary_dwarfinfo.get_DIE_from_refaddr(attr.raw_value) - # FIXME: how to distinguish supplementary files from dwo ? - raise NotImplementedError('%s to dwo' % attr.form) - else: - raise DWARFError('%s is not a reference class form attribute' % attr) - - def get_parent(self) -> DIE | None: - """ Return the parent DIE of this DIE, or None if the DIE has no - parent (i.e. is a top-level DIE). - """ - if self._parent is None: - self._search_ancestor_offspring() - return self._parent - - def get_full_path(self) -> str: - """ Return the full path filename for the DIE. - - The filename is the join of 'DW_AT_comp_dir' and 'DW_AT_name', - either of which may be missing in practice. Note that its value is - usually a string taken from the .debug_string section and the - returned value will be a string. - """ - comp_dir_attr = self.attributes.get('DW_AT_comp_dir', None) - comp_dir = bytes2str(comp_dir_attr.value) if comp_dir_attr else '' - fname_attr = self.attributes.get('DW_AT_name', None) - fname = bytes2str(fname_attr.value) if fname_attr else '' - return os.path.join(comp_dir, fname) - - def iter_children(self) -> Iterator[DIE]: - """ Iterates all children of this DIE - """ - return self.cu.iter_DIE_children(self) - - def iter_siblings(self) -> Iterator[DIE]: - """ Yield all siblings of this DIE - """ - parent = self.get_parent() - if parent: - for sibling in parent.iter_children(): - if sibling is not self: - yield sibling - else: - raise StopIteration() - - # The following methods are used while creating the DIE and should not be - # interesting to consumers - # - - def set_parent(self, die: DIE) -> None: - self._parent = die - - #------ PRIVATE ------# - - def _search_ancestor_offspring(self) -> None: - """ Search our ancestors identifying their offspring to find our parent. - - DIEs are stored as a flattened tree. The top DIE is the ancestor - of all DIEs in the unit. Each parent is guaranteed to be at - an offset less than their children. In each generation of children - the sibling with the closest offset not greater than our offset is - our ancestor. - """ - # This code is called when get_parent notices that the _parent has - # not been identified. To avoid execution for each sibling record all - # the children of any parent iterated. Assuming get_parent will also be - # called for siblings, it is more efficient if siblings references are - # provided and no worse than a single walk if they are missing, while - # stopping iteration early could result in O(n^2) walks. - search: DIE = self.cu.get_top_DIE() - while search.offset < self.offset: - prev = search - for child in search.iter_children(): - child.set_parent(search) - if child.offset <= self.offset: - prev = child - - # We also need to check the offset of the terminator DIE - if search.has_children and search._terminator and search._terminator.offset <= self.offset: - prev = search._terminator - - # If we didn't find a closer parent, give up, don't loop. - # Either we mis-parsed an ancestor or someone created a DIE - # by an offset that was not actually the start of a DIE. - if prev is search: - raise ValueError("offset %s not in CU %s DIE tree" % - (self.offset, self.cu.cu_offset)) - - search = prev - - def __repr__(self) -> str: - s = 'DIE %s, size=%s, has_children=%s\n' % ( - self.tag, self.size, self.has_children) - for attrname, attrval in self.attributes.items(): - s += ' |%-18s: %s\n' % (attrname, attrval) - return s - - def __str__(self) -> str: - return self.__repr__() - - def _parse_DIE(self) -> None: - """ Parses the DIE info from the section, based on the abbreviation - table of the CU - """ - try: - structs = self.cu.structs - stream = self.stream - - # A DIE begins with the abbreviation code. Read it and use it to - # obtain the abbrev declaration for this DIE. - # Note: here and elsewhere, preserve_stream_pos is used on operations - # that manipulate the stream by reading data from it. - stream.seek(self.offset) - self.abbrev_code = structs.the_Dwarf_uleb128.parse_stream(stream) - assert self.abbrev_code is not None - - # This may be a null entry - if self.abbrev_code == 0: - self.size = stream.tell() - self.offset - return - - abbrev_decl = self.cu.get_abbrev_table().get_abbrev(self.abbrev_code) - self.tag = abbrev_decl['tag'] - self.has_children = abbrev_decl.has_children() - - # Guided by the attributes listed in the abbreviation declaration, parse - # values from the stream. - for spec in abbrev_decl['attr_spec']: - form = spec.form - name = spec.name - attr_offset = stream.tell() - indirection_length = 0 - # Special case here: the attribute value is stored in the attribute - # definition in the abbreviation spec, not in the DIE itself. - if form == 'DW_FORM_implicit_const': - value = spec.value - raw_value = value - # Another special case: the attribute value is a form code followed by the real value in that form - elif form == 'DW_FORM_indirect': - (form, raw_value, indirection_length) = self._resolve_indirect() - value = self._translate_attr_value(form, raw_value) - else: - dw_form = structs.Dwarf_dw_form[form] - assert dw_form is not None - raw_value = dw_form.parse_stream(stream) - value = self._translate_attr_value(form, raw_value) - self.attributes[name] = AttributeValue( - name=name, - form=form, - value=value, - raw_value=raw_value, - offset=attr_offset, - indirection_length = indirection_length) - - self.size = stream.tell() - self.offset - except ConstructError as e: - raise ELFParseError(str(e)) - - def _resolve_indirect(self) -> tuple[str, int, int]: - # Supports arbitrary indirection nesting (the standard doesn't prohibit that). - # Expects the stream to be at the real form. - # Returns (form, raw_value, length). - structs = self.cu.structs - length = 1 - real_form_code: int = struct_parse(structs.the_Dwarf_uleb128, self.stream) # Numeric form code - while True: - try: - real_form = DW_FORM_raw2name[real_form_code] # Form name or exception if bogus code - except KeyError: - raise DWARFError('Found DW_FORM_indirect with unknown real form 0x%x' % real_form_code) - - dw_form = structs.Dwarf_dw_form[real_form] - assert dw_form is not None - raw_value: int = struct_parse(dw_form, self.stream) - - if real_form != 'DW_FORM_indirect': # Happy path: one level of indirection - return (real_form, raw_value, length) - else: # Indirection cascade - length += 1 - real_form_code = raw_value - # And continue parsing - # No explicit infinite loop guard because the stream will end eventually - - def _translate_attr_value(self, form: str, raw_value: Any) -> Any: - """ Translate a raw attr value according to the form - """ - # Indirect forms can only be parsed if the top DIE of this CU has already been parsed - # and listed in the CU, since the top DIE would have to contain the DW_AT_xxx_base attributes. - # This breaks if there is an indirect encoding in the top DIE itself before the - # corresponding _base, and it was seen in the wild. - # There is a hook in get_top_DIE() to resolve those lazily. - translate_indirect = self.cu.has_top_DIE() or self.offset != self.cu.cu_die_offset - if form == 'DW_FORM_strp': - return self.dwarfinfo.get_string_from_table(raw_value) - elif form == 'DW_FORM_line_strp': - return self.dwarfinfo.get_string_from_linetable(raw_value) - elif form in ('DW_FORM_GNU_strp_alt', 'DW_FORM_strp_sup') and self.dwarfinfo.supplementary_dwarfinfo: - return self.dwarfinfo.supplementary_dwarfinfo.get_string_from_table(raw_value) - elif form == 'DW_FORM_flag': - return not raw_value == 0 - elif form == 'DW_FORM_flag_present': - return True - elif form in ('DW_FORM_addrx', 'DW_FORM_addrx1', 'DW_FORM_addrx2', 'DW_FORM_addrx3', 'DW_FORM_addrx4') and translate_indirect: - return self.cu.dwarfinfo.get_addr(self.cu, raw_value) - elif form in ('DW_FORM_strx', 'DW_FORM_strx1', 'DW_FORM_strx2', 'DW_FORM_strx3', 'DW_FORM_strx4') and translate_indirect: - assert self.dwarfinfo.debug_str_offsets_sec is not None - stream = self.dwarfinfo.debug_str_offsets_sec.stream - base_offset = _get_base_offset(self.cu, 'DW_AT_str_offsets_base') - offset_size = 4 if self.cu.structs.dwarf_format == 32 else 8 - str_offset = struct_parse(self.cu.structs.the_Dwarf_offset, stream, base_offset + raw_value*offset_size) - return self.dwarfinfo.get_string_from_table(str_offset) - elif form == 'DW_FORM_loclistx' and translate_indirect: - assert self.dwarfinfo.debug_loclists_sec is not None - return _resolve_via_offset_table(self.dwarfinfo.debug_loclists_sec.stream, self.cu, raw_value, 'DW_AT_loclists_base') - elif form == 'DW_FORM_rnglistx' and translate_indirect: - assert self.dwarfinfo.debug_rnglists_sec is not None - return _resolve_via_offset_table(self.dwarfinfo.debug_rnglists_sec.stream, self.cu, raw_value, 'DW_AT_rnglists_base') - return raw_value - - def _translate_indirect_attributes(self) -> None: - """ This is a hook to translate the DW_FORM_...x values in the top DIE - once the top DIE is parsed to the end. They can't be translated - while the top DIE is being parsed, because they implicitly make a - reference to the DW_AT_xxx_base attribute in the same DIE that may - not have been parsed yet. - """ - for key, attr in self.attributes.items(): - if attr.form in ('DW_FORM_strx', 'DW_FORM_strx1', 'DW_FORM_strx2', 'DW_FORM_strx3', 'DW_FORM_strx4', - 'DW_FORM_addrx', 'DW_FORM_addrx1', 'DW_FORM_addrx2', 'DW_FORM_addrx3', 'DW_FORM_addrx4', - 'DW_FORM_loclistx', 'DW_FORM_rnglistx'): - # Can't change value in place, got to replace the whole attribute record - self.attributes[key] = AttributeValue( - name=attr.name, - form=attr.form, - value=self._translate_attr_value(attr.form, attr.raw_value), - raw_value=attr.raw_value, - offset=attr.offset, - indirection_length=attr.indirection_length) diff --git a/.tools/python-revlibs/elftools/dwarf/dwarf_expr.py b/.tools/python-revlibs/elftools/dwarf/dwarf_expr.py deleted file mode 100644 index 1b5b90d..0000000 --- a/.tools/python-revlibs/elftools/dwarf/dwarf_expr.py +++ /dev/null @@ -1,293 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/dwarf_expr.py -# -# Decoding DWARF expressions -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from io import BytesIO -from typing import IO, TYPE_CHECKING, Any, NamedTuple - -from ..common.utils import struct_parse -from ..common.exceptions import DWARFError - -if TYPE_CHECKING: - from collections.abc import Callable, Iterable, Mapping - - from ..construct.core import Construct - from .structs import DWARFStructs - - -# DWARF expression opcodes. name -> opcode mapping -DW_OP_name2opcode: Mapping[str, int] = dict( - DW_OP_addr=0x03, - DW_OP_deref=0x06, - DW_OP_const1u=0x08, - DW_OP_const1s=0x09, - DW_OP_const2u=0x0a, - DW_OP_const2s=0x0b, - DW_OP_const4u=0x0c, - DW_OP_const4s=0x0d, - DW_OP_const8u=0x0e, - DW_OP_const8s=0x0f, - DW_OP_constu=0x10, - DW_OP_consts=0x11, - DW_OP_dup=0x12, - DW_OP_drop=0x13, - DW_OP_over=0x14, - DW_OP_pick=0x15, - DW_OP_swap=0x16, - DW_OP_rot=0x17, - DW_OP_xderef=0x18, - DW_OP_abs=0x19, - DW_OP_and=0x1a, - DW_OP_div=0x1b, - DW_OP_minus=0x1c, - DW_OP_mod=0x1d, - DW_OP_mul=0x1e, - DW_OP_neg=0x1f, - DW_OP_not=0x20, - DW_OP_or=0x21, - DW_OP_plus=0x22, - DW_OP_plus_uconst=0x23, - DW_OP_shl=0x24, - DW_OP_shr=0x25, - DW_OP_shra=0x26, - DW_OP_xor=0x27, - DW_OP_bra=0x28, - DW_OP_eq=0x29, - DW_OP_ge=0x2a, - DW_OP_gt=0x2b, - DW_OP_le=0x2c, - DW_OP_lt=0x2d, - DW_OP_ne=0x2e, - DW_OP_skip=0x2f, - DW_OP_regx=0x90, - DW_OP_fbreg=0x91, - DW_OP_bregx=0x92, - DW_OP_piece=0x93, - DW_OP_deref_size=0x94, - DW_OP_xderef_size=0x95, - DW_OP_nop=0x96, - DW_OP_push_object_address=0x97, - DW_OP_call2=0x98, - DW_OP_call4=0x99, - DW_OP_call_ref=0x9a, - DW_OP_form_tls_address=0x9b, - DW_OP_call_frame_cfa=0x9c, - DW_OP_bit_piece=0x9d, - DW_OP_implicit_value=0x9e, - DW_OP_stack_value=0x9f, - DW_OP_implicit_pointer=0xa0, - DW_OP_addrx=0xa1, - DW_OP_constx=0xa2, - DW_OP_entry_value=0xa3, - DW_OP_const_type=0xa4, - DW_OP_regval_type=0xa5, - DW_OP_deref_type=0xa6, - DW_OP_xderef_type=0xa7, - DW_OP_convert=0xa8, - DW_OP_reinterpret=0xa9, - DW_OP_lo_user=0xe0, - DW_OP_GNU_push_tls_address=0xe0, - DW_OP_WASM_location=0xed, - DW_OP_GNU_uninit=0xf0, - DW_OP_GNU_implicit_pointer=0xf2, - DW_OP_GNU_entry_value=0xf3, - DW_OP_GNU_const_type=0xf4, - DW_OP_GNU_regval_type=0xf5, - DW_OP_GNU_deref_type=0xf6, - DW_OP_GNU_convert=0xf7, - DW_OP_GNU_parameter_ref=0xfa, - DW_OP_GNU_addr_index=0xfb, - DW_OP_GNU_const_index=0xfc, - DW_OP_GNU_variable_value=0xfd, - DW_OP_hi_user=0xff, - **{f"DW_OP_lit{val}": 0x30 + val for val in range(0, 32)}, - **{f"DW_OP_reg{val}": 0x50 + val for val in range(0, 32)}, - **{f"DW_OP_breg{val}": 0x70 + val for val in range(0, 32)}, -) - -# opcode -> name mapping -DW_OP_opcode2name: Mapping[int, str] = {v: k for k, v in DW_OP_name2opcode.items()} - - -# Each parsed DWARF expression is returned as this type with its numeric opcode, -# op name (as a string) and a list of arguments. -class DWARFExprOp(NamedTuple): - op: int - op_name: str - args: list[Any] - offset: int - - -class DWARFExprParser: - """DWARF expression parser. - - When initialized, requires structs to cache a dispatch table. After that, - parse_expr can be called repeatedly - it's stateless. - """ - - def __init__(self, structs: DWARFStructs) -> None: - self._dispatch_table = _init_dispatch_table(structs) - - def parse_expr(self, expr: bytes | Iterable[int]) -> list[DWARFExprOp]: - """ Parses expr (bytes or a list of integers) into a list of DWARFExprOp. - - The list can potentially be nested. - """ - stream = BytesIO(bytes(expr)) - parsed: list[DWARFExprOp] = [] - - while True: - # Get the next opcode from the stream. If nothing is left in the - # stream, we're done. - offset = stream.tell() - byte = stream.read(1) - if not byte: - break - - # Decode the opcode and its name. - op = ord(byte) - op_name = DW_OP_opcode2name.get(op, 'OP:0x%x' % op) - - # Use dispatch table to parse args. - arg_parser = self._dispatch_table[op] - args = arg_parser(stream) - - parsed.append(DWARFExprOp(op=op, op_name=op_name, args=args, offset=offset)) - - return parsed - - -def _init_dispatch_table(structs: DWARFStructs) -> dict[int, Callable[[IO[bytes]], list[Any]]]: - """Creates a dispatch table for parsing args of an op. - - Returns a dict mapping opcode to a function. The function accepts a stream - and return a list of parsed arguments for the opcode from the stream; - the stream is advanced by the function as needed. - """ - table: dict[int, Callable[[IO[bytes]], list[Any]]] = {} - def add(opcode_name: str, func: Callable[[IO[bytes]], list[Any]]) -> None: - table[DW_OP_name2opcode[opcode_name]] = func - - def parse_noargs() -> Callable[[IO[bytes]], list[None]]: - return lambda stream: [] - - def parse_op_addr() -> Callable[[IO[bytes]], list[int]]: - return lambda stream: [struct_parse(structs.the_Dwarf_target_addr, - stream)] - - def parse_arg_struct(arg_struct: Construct) -> Callable[[IO[bytes]], list[Any]]: - return lambda stream: [struct_parse(arg_struct, stream)] - - def parse_arg_struct2( - arg1_struct: Construct, - arg2_struct: Construct, - ) -> Callable[[IO[bytes]], list[Any]]: - return lambda stream: [struct_parse(arg1_struct, stream), - struct_parse(arg2_struct, stream)] - - # ULEB128, then an expression of that length - def parse_nestedexpr() -> Callable[[IO[bytes]], list[list[DWARFExprOp]]]: - - def parse(stream: IO[bytes]) -> list[list[DWARFExprOp]]: - size: int = struct_parse(structs.the_Dwarf_uleb128, stream) - nested_expr_blob = stream.read(size) - return [DWARFExprParser(structs).parse_expr(nested_expr_blob)] - return parse - - # ULEB128, then a blob of that size - def parse_blob() -> Callable[[IO[bytes]], list[list[int]]]: - return lambda stream: [list(stream.read(struct_parse(structs.the_Dwarf_uleb128, stream)))] - - # ULEB128 with datatype DIE offset, then byte, then a blob of that size - def parse_typedblob() -> Callable[[IO[bytes]], list[int | list[int]]]: - return lambda stream: [struct_parse(structs.the_Dwarf_uleb128, stream), list(stream.read(struct_parse(structs.the_Dwarf_uint8, stream)))] - - # https://yurydelendik.github.io/webassembly-dwarf/ - # Byte, then variant: 0, 1, 2 => uleb128, 3 => uint32 - def parse_wasmloc() -> Callable[[IO[bytes]], list[int]]: - - def parse(stream: IO[bytes]) -> list[int]: - op: int = struct_parse(structs.the_Dwarf_uint8, stream) - if 0 <= op <= 2: - return [op, struct_parse(structs.the_Dwarf_uleb128, stream)] - elif op == 3: - return [op, struct_parse(structs.the_Dwarf_uint32, stream)] - else: - raise DWARFError("Unknown operation code in DW_OP_WASM_location: %d" % (op,)) - return parse - - add('DW_OP_addr', parse_op_addr()) - add('DW_OP_addrx', parse_arg_struct(structs.the_Dwarf_uleb128)) - add('DW_OP_const1u', parse_arg_struct(structs.the_Dwarf_uint8)) - add('DW_OP_const1s', parse_arg_struct(structs.Dwarf_int8(''))) - add('DW_OP_const2u', parse_arg_struct(structs.the_Dwarf_uint16)) - add('DW_OP_const2s', parse_arg_struct(structs.Dwarf_int16(''))) - add('DW_OP_const4u', parse_arg_struct(structs.the_Dwarf_uint32)) - add('DW_OP_const4s', parse_arg_struct(structs.Dwarf_int32(''))) - add('DW_OP_const8u', parse_arg_struct(structs.Dwarf_uint64(''))) - add('DW_OP_const8s', parse_arg_struct(structs.Dwarf_int64(''))) - add('DW_OP_constu', parse_arg_struct(structs.the_Dwarf_uleb128)) - add('DW_OP_consts', parse_arg_struct(structs.the_Dwarf_sleb128)) - add('DW_OP_pick', parse_arg_struct(structs.the_Dwarf_uint8)) - add('DW_OP_plus_uconst', parse_arg_struct(structs.the_Dwarf_uleb128)) - add('DW_OP_bra', parse_arg_struct(structs.Dwarf_int16(''))) - add('DW_OP_skip', parse_arg_struct(structs.Dwarf_int16(''))) - - for opname in [ 'DW_OP_deref', 'DW_OP_dup', 'DW_OP_drop', 'DW_OP_over', - 'DW_OP_swap', 'DW_OP_swap', 'DW_OP_rot', 'DW_OP_xderef', - 'DW_OP_abs', 'DW_OP_and', 'DW_OP_div', 'DW_OP_minus', - 'DW_OP_mod', 'DW_OP_mul', 'DW_OP_neg', 'DW_OP_not', - 'DW_OP_or', 'DW_OP_plus', 'DW_OP_shl', 'DW_OP_shr', - 'DW_OP_shra', 'DW_OP_xor', 'DW_OP_eq', 'DW_OP_ge', - 'DW_OP_gt', 'DW_OP_le', 'DW_OP_lt', 'DW_OP_ne', 'DW_OP_nop', - 'DW_OP_push_object_address', 'DW_OP_form_tls_address', - 'DW_OP_call_frame_cfa', 'DW_OP_stack_value', - 'DW_OP_GNU_push_tls_address', 'DW_OP_GNU_uninit']: - add(opname, parse_noargs()) - - for n in range(0, 32): - add('DW_OP_lit%s' % n, parse_noargs()) - add('DW_OP_reg%s' % n, parse_noargs()) - add('DW_OP_breg%s' % n, parse_arg_struct(structs.the_Dwarf_sleb128)) - - for opname in [ 'DW_OP_regx', 'DW_OP_piece', 'DW_OP_convert', 'DW_OP_GNU_convert', - 'DW_OP_GNU_addr_index', 'DW_OP_GNU_const_index', 'DW_OP_GNU_variable_value']: - add(opname, parse_arg_struct(structs.the_Dwarf_uleb128)) - - add('DW_OP_fbreg', parse_arg_struct(structs.the_Dwarf_sleb128)) - add('DW_OP_bregx', parse_arg_struct2(structs.the_Dwarf_uleb128, - structs.the_Dwarf_sleb128)) - add('DW_OP_bit_piece', parse_arg_struct2(structs.the_Dwarf_uleb128, - structs.the_Dwarf_uleb128)) - add('DW_OP_deref_size', parse_arg_struct(structs.Dwarf_int8(''))) - add('DW_OP_xderef_size', parse_arg_struct(structs.Dwarf_int8(''))) - add('DW_OP_call2', parse_arg_struct(structs.the_Dwarf_uint16)) - add('DW_OP_call4', parse_arg_struct(structs.the_Dwarf_uint32)) - add('DW_OP_call_ref', parse_arg_struct(structs.the_Dwarf_offset)) - add('DW_OP_implicit_value', parse_blob()) - add('DW_OP_entry_value', parse_nestedexpr()) - add('DW_OP_const_type', parse_typedblob()) - add('DW_OP_regval_type', parse_arg_struct2(structs.the_Dwarf_uleb128, - structs.the_Dwarf_uleb128)) - add('DW_OP_deref_type', parse_arg_struct2(structs.the_Dwarf_uint8, - structs.the_Dwarf_uleb128)) - add('DW_OP_implicit_pointer', parse_arg_struct2(structs.the_Dwarf_offset, - structs.the_Dwarf_sleb128)) - add('DW_OP_GNU_entry_value', parse_nestedexpr()) - add('DW_OP_GNU_const_type', parse_typedblob()) - add('DW_OP_GNU_regval_type', parse_arg_struct2(structs.the_Dwarf_uleb128, - structs.the_Dwarf_uleb128)) - add('DW_OP_GNU_deref_type', parse_arg_struct2(structs.the_Dwarf_uint8, - structs.the_Dwarf_uleb128)) - add('DW_OP_GNU_implicit_pointer', parse_arg_struct2(structs.the_Dwarf_offset, - structs.the_Dwarf_sleb128)) - add('DW_OP_GNU_parameter_ref', parse_arg_struct(structs.the_Dwarf_offset)) - add('DW_OP_WASM_location', parse_wasmloc()) - - return table diff --git a/.tools/python-revlibs/elftools/dwarf/dwarf_util.py b/.tools/python-revlibs/elftools/dwarf/dwarf_util.py deleted file mode 100644 index 4f25c34..0000000 --- a/.tools/python-revlibs/elftools/dwarf/dwarf_util.py +++ /dev/null @@ -1,95 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/dwarf_utils.py -# -# Minor, shared DWARF helpers -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import os -import binascii -from typing import IO, TYPE_CHECKING, Any - -from ..construct.macros import Array -from ..common.exceptions import DWARFError -from ..common.utils import preserve_stream_pos, struct_parse - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct import Struct - from .compileunit import CompileUnit - from .structs import DWARFStructs - from .typeunit import TypeUnit - - -def _get_base_offset(cu: CompileUnit | TypeUnit, base_attribute_name: str) -> int: - """Retrieves a required, base offset-type atribute - from the top DIE in the CU. Applies to several indirectly - encoded objects - range lists, location lists, strings, addresses. - """ - cu_top_die = cu.get_top_DIE() - if base_attribute_name not in cu_top_die.attributes: - raise DWARFError("The CU at offset 0x%x needs %s" % (cu.cu_offset, base_attribute_name)) - return cu_top_die.attributes[base_attribute_name].value - -def _resolve_via_offset_table( - stream: IO[bytes], - cu: CompileUnit | TypeUnit, - index: int, - base_attribute_name: str, -) -> int: - """Given an index in the offset table and directions where to find it, - retrieves an offset. Works for loclists, rnglists. - - The DWARF offset bitness of the CU block in the section matches that - of the CU record in dwarf_info. See DWARFv5 standard, section 7.4. - - This is used for translating DW_FORM_loclistx, DW_FORM_rnglistx - via the offset table in the respective section. - """ - base_offset = _get_base_offset(cu, base_attribute_name) - # That's offset (within the rnglists/loclists/str_offsets section) of - # the offset table for this CU's block in that section, which in turn is indexed by the index. - - offset_size = 4 if cu.structs.dwarf_format == 32 else 8 - with preserve_stream_pos(stream): - return base_offset + struct_parse(cu.structs.the_Dwarf_offset, stream, base_offset + index*offset_size) - -def _iter_CUs_in_section( - stream: IO[bytes], - structs: DWARFStructs, - parser: Struct, -) -> Iterator[Any]: - """Iterates through the list of CU sections in loclists or rangelists. Almost identical structures there. - - get_parser is a lambda that takes structs, returns the parser - """ - stream.seek(0, os.SEEK_END) - endpos = stream.tell() - stream.seek(0, os.SEEK_SET) - - offset = 0 - while offset < endpos: - header = struct_parse(parser, stream, offset) - if header.offset_count > 0: - offset_parser = structs.Dwarf_uint64 if header.is64 else structs.Dwarf_uint32 - header['offsets'] = struct_parse(Array(header.offset_count, offset_parser('')), stream) - else: - header['offsets'] = False - yield header - offset = header.offset_after_length + header.unit_length - -def _file_crc32(file: IO[bytes]) -> int: - """ Provided a readable binary stream, reads the stream to the end - and computes the CRC32 checksum of its contents, - with the initial value of 0. - """ - d = file.read(4096) - checksum = 0 - while d: - checksum = binascii.crc32(d, checksum) - d = file.read(4096) - return checksum diff --git a/.tools/python-revlibs/elftools/dwarf/dwarfinfo.py b/.tools/python-revlibs/elftools/dwarf/dwarfinfo.py deleted file mode 100644 index 3b72598..0000000 --- a/.tools/python-revlibs/elftools/dwarf/dwarfinfo.py +++ /dev/null @@ -1,762 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/dwarfinfo.py -# -# DWARFInfo - Main class for accessing DWARF debug information -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from bisect import bisect_right -from functools import cached_property -from typing import IO, TYPE_CHECKING, NamedTuple - -from ..construct.lib.container import Container -from ..common.exceptions import DWARFError -from ..common.utils import (struct_parse, dwarf_assert, - parse_cstring_from_stream) -from .structs import DWARFStructs -from .compileunit import CompileUnit -from .typeunit import TypeUnit -from .abbrevtable import AbbrevTable -from .lineprogram import LineProgram -from .callframe import CallFrameInfo -from .locationlists import LocationLists, LocationListsPair -from .ranges import RangeLists, RangeListsPair -from .aranges import ARanges -from .namelut import NameLUT -from .dwarf_util import _get_base_offset - -if TYPE_CHECKING: - from collections.abc import Callable, Iterator - - from ..construct.lib.container import ListContainer - from .callframe import ZERO, CFIEntry - from .die import DIE - from .namelut import NameLUTEntry - - -# Describes a debug section -# -# stream: a stream object containing the data of this section -# name: section name in the container file -# global_offset: the global offset of the section in its container file -# size: the size of the section's data, in bytes -# address: the virtual address for the section's data -# -# 'name' and 'global_offset' are for descriptional purposes only and -# aren't strictly required for the DWARF parsing to work. 'address' is required -# to properly decode the special '.eh_frame' format. -# -class DebugSectionDescriptor(NamedTuple): - stream: IO[bytes] - name: str - global_offset: int | None - size: int - address: int - - -# Some configuration parameters for the DWARF reader. This exists to allow -# DWARFInfo to be independent from any specific file format/container. -# -# little_endian: -# boolean flag specifying whether the data in the file is little endian -# -# machine_arch: -# Machine architecture as a string. For example 'x86' or 'x64' -# -# default_address_size: -# The default address size for the container file (sizeof pointer, in bytes) -# -class DwarfConfig(NamedTuple): - little_endian: bool - machine_arch: str - default_address_size: int - - -class DWARFInfo: - """ Acts also as a "context" to other major objects, bridging between - various parts of the debug information. - """ - def __init__( - self, - config: DwarfConfig, - debug_info_sec: DebugSectionDescriptor | None, - debug_aranges_sec: DebugSectionDescriptor | None, - debug_abbrev_sec: DebugSectionDescriptor | None, - debug_frame_sec: DebugSectionDescriptor | None, - eh_frame_sec: DebugSectionDescriptor | None, - debug_str_sec: DebugSectionDescriptor | None, - debug_loc_sec: DebugSectionDescriptor | None, - debug_ranges_sec: DebugSectionDescriptor | None, - debug_line_sec: DebugSectionDescriptor | None, - debug_pubtypes_sec: DebugSectionDescriptor | None, - debug_pubnames_sec: DebugSectionDescriptor | None, - debug_addr_sec: DebugSectionDescriptor | None, - debug_str_offsets_sec: DebugSectionDescriptor | None, - debug_line_str_sec: DebugSectionDescriptor | None, - debug_loclists_sec: DebugSectionDescriptor | None, - debug_rnglists_sec: DebugSectionDescriptor | None, - debug_sup_sec: DebugSectionDescriptor | None, - gnu_debugaltlink_sec: DebugSectionDescriptor | None, - debug_types_sec: DebugSectionDescriptor | None, - ) -> None: - """ config: - A DwarfConfig object - - debug_*_sec: - DebugSectionDescriptor for a section. Pass None for sections - that don't exist. These arguments are best given with - keyword syntax. - """ - self.config = config - self.debug_info_sec = debug_info_sec - self.debug_aranges_sec = debug_aranges_sec - self.debug_abbrev_sec = debug_abbrev_sec - self.debug_frame_sec = debug_frame_sec - self.eh_frame_sec = eh_frame_sec - self.debug_str_sec = debug_str_sec - self.debug_loc_sec = debug_loc_sec - self.debug_ranges_sec = debug_ranges_sec - self.debug_line_sec = debug_line_sec - self.debug_addr_sec = debug_addr_sec - self.debug_str_offsets_sec = debug_str_offsets_sec - self.debug_line_str_sec = debug_line_str_sec - self.debug_pubtypes_sec = debug_pubtypes_sec - self.debug_pubnames_sec = debug_pubnames_sec - self.debug_loclists_sec = debug_loclists_sec - self.debug_rnglists_sec = debug_rnglists_sec - self.debug_sup_sec = debug_sup_sec - self.gnu_debugaltlink_sec = gnu_debugaltlink_sec - self.debug_types_sec = debug_types_sec - - # Sets the supplementary_dwarfinfo to None. Client code can set this - # to something else, typically a DWARFInfo file read from an ELFFile - # which path is stored in the debug_sup_sec or gnu_debugaltlink_sec. - self.supplementary_dwarfinfo: DWARFInfo | None = None - - # This is the DWARFStructs the context uses, so it doesn't depend on - # DWARF format and address_size (these are determined per CU) - set them - # to default values. - self.structs = DWARFStructs( - little_endian=self.config.little_endian, - dwarf_format=32, - address_size=self.config.default_address_size) - - # Cache for abbrev tables: a dict keyed by offset - self._abbrevtable_cache: dict[int, AbbrevTable] = {} - # Cache for program lines tables: a dict keyed by offset - self._linetable_cache: dict[int, LineProgram] = {} - - # Cache of compile units and map of their offsets for bisect lookup. - # Access with .iter_CUs(), .get_CU_containing(), and/or .get_CU_at(). - self._cu_cache: list[CompileUnit] = [] - self._cu_offsets_map: list[int] = [] - - @property - def has_debug_info(self) -> bool: - """ Return whether this contains debug information. - - It can be not the case when the ELF only contains .eh_frame, which is - encoded DWARF but not actually for debugging. - """ - return bool(self.debug_info_sec) - - def has_debug_types(self) -> bool: - """ Return whether this contains debug types information. - """ - return bool(self.debug_types_sec) - - def get_DIE_from_lut_entry(self, lut_entry: NameLUTEntry) -> DIE: - """ Get the DIE from the pubnames or putbtypes lookup table entry. - - lut_entry: - A NameLUTEntry object from a NameLUT instance (see - .get_pubmames and .get_pubtypes methods). - """ - cu = self.get_CU_at(lut_entry.cu_ofs) - return self.get_DIE_from_refaddr(lut_entry.die_ofs, cu) - - def get_DIE_from_refaddr(self, refaddr: int, cu: CompileUnit | None = None) -> DIE: - """ Given a .debug_info section offset of a DIE, return the DIE. - - refaddr: - The refaddr may come from a DW_FORM_ref_addr attribute. - - cu: - The compile unit object, if known. If None a search - from the closest offset less than refaddr will be performed. - """ - if cu is None: - cu = self.get_CU_containing(refaddr) - return cu.get_DIE_from_refaddr(refaddr) - - def get_DIE_by_sig8(self, sig8: int) -> DIE: - """ Find and return a DIE referenced by its type signature. - sig8: - The 8 byte signature (as a 64-bit unsigned integer) - Returns the DIE with the given type signature by searching - for the Type Unit with the matching signature then finding - the DIE at the offset given by the type_die field in the - Type Unit header. - Signatures are an 64-bit unsigned integers computed by the - DWARF producer as specified in the DWARF standard. Each - Type Unit contains one signature and the offset to the - corresponding DW_AT_type DIE in its unit header. - Describing a type can generate several DIEs. By moving - a DIE and its related DIEs to a Type Unit and generating - a hash of the DIEs and attributes in a flattened form - multiple Compile Units in a linked object can reference - the same DIE in the overall DWARF structure. - In DWARF v4 type units are identified by their appearance in the - .debug_types section. - """ - tu = self._type_units_by_sig.get(sig8) - if tu is None: - raise KeyError("Signature %016x not found in .debug_types" % sig8) - return tu._get_cached_DIE(tu.tu_offset + tu['type_offset']) - - def get_CU_containing(self, refaddr: int) -> CompileUnit: - """ Find the CU that includes the given reference address in the - .debug_info section. - - refaddr: - Either a refaddr of a DIE (possibly from a DW_FORM_ref_addr - attribute) or the section offset of a CU (possibly from an - aranges table). - - This function will parse and cache CUs until the search criteria - is met, starting from the closest known offset lessthan or equal - to the given address. - """ - dwarf_assert( - self.has_debug_info, - 'CU lookup but no debug info section') - assert self.debug_info_sec is not None - dwarf_assert( - 0 <= refaddr < self.debug_info_sec.size, - "refaddr %s beyond .debug_info size" % refaddr) - - # The CU containing the DIE we desire will be to the right of the - # DIE insert point. If we have a CU address, then it will be a - # match but the right insert minus one will still be the item. - # The first CU starts at offset 0, so start there if cache is empty. - i = bisect_right(self._cu_offsets_map, refaddr) - start = self._cu_offsets_map[i - 1] if i > 0 else 0 - - # parse CUs until we find one containing the desired address - for cu in self._parse_CUs_iter(start): - if cu.cu_offset <= refaddr < cu.cu_offset + cu.size: - return cu - - raise ValueError("CU for reference address %s not found" % refaddr) - - def get_CU_at(self, offset: int) -> CompileUnit: - """ Given a CU header offset, return the parsed CU. - - offset: - The offset may be from an accelerated access table such as - the public names, public types, address range table, or - prior use. - - This function will directly parse the CU doing no validation of - the offset beyond checking the size of the .debug_info section. - """ - dwarf_assert( - self.has_debug_info, - 'CU lookup but no debug info section') - assert self.debug_info_sec is not None - dwarf_assert( - 0 <= offset < self.debug_info_sec.size, - "offset %s beyond .debug_info size" % offset) - - return self._cached_CU_at_offset(offset) - - def get_TU_by_sig8(self, sig8: int) -> TypeUnit: - """ Find and return a Type Unit referenced by its signature - - sig8: - The 8 byte unique signature (as a 64-bit unsigned integer) - - Returns the TU with the given type signature by parsing the - .debug_types section. - - """ - tu = self._type_units_by_sig.get(sig8) - if tu is None: - raise KeyError("Signature %016x not found in .debug_types" % sig8) - return tu - - def iter_CUs(self) -> Iterator[CompileUnit]: - """ Yield all the compile units (CompileUnit objects) in the debug info - """ - return self._parse_CUs_iter() - - def iter_TUs(self) -> Iterator[TypeUnit]: - """Yield all the type units (TypeUnit objects) in the debug_types - """ - return self._parse_TUs_iter() - - def get_abbrev_table(self, offset: int) -> AbbrevTable: - """ Get an AbbrevTable from the given offset in the debug_abbrev - section. - - The only verification done on the offset is that it's within the - bounds of the section (if not, an exception is raised). - It is the caller's responsibility to make sure the offset actually - points to a valid abbreviation table. - - AbbrevTable objects are cached internally (two calls for the same - offset will return the same object). - """ - assert self.debug_abbrev_sec is not None - dwarf_assert( - offset < self.debug_abbrev_sec.size, - "Offset '0x%x' to abbrev table out of section bounds" % offset) - if offset not in self._abbrevtable_cache: - self._abbrevtable_cache[offset] = AbbrevTable( - structs=self.structs, - stream=self.debug_abbrev_sec.stream, - offset=offset) - return self._abbrevtable_cache[offset] - - def get_string_from_table(self, offset: int) -> bytes | None: - """ Obtain a string from the string table section, given an offset - relative to the section. - """ - assert self.debug_str_sec is not None - return parse_cstring_from_stream(self.debug_str_sec.stream, offset) - - def get_string_from_linetable(self, offset: int) -> bytes | None: - """ Obtain a string from the string table section, given an offset - relative to the section. - """ - assert self.debug_line_str_sec is not None - return parse_cstring_from_stream(self.debug_line_str_sec.stream, offset) - - def line_program_for_CU(self, CU: CompileUnit) -> LineProgram | None: - """ Given a CU object, fetch the line program it points to from the - .debug_line section. - If the CU doesn't point to a line program, return None. - - Note about directory and file names. They are returned as two collections - in the lineprogram object's header - include_directory and file_entry. - - In DWARFv5, they have introduced a different, extensible format for those - collections. So in a lineprogram v5+, there are two more collections in - the header - directories and file_names. Those might contain extra DWARFv5 - information that is not exposed in include_directory and file_entry. - """ - # The line program is pointed to by the DW_AT_stmt_list attribute of - # the top DIE of a CU. - top_DIE = CU.get_top_DIE() - if 'DW_AT_stmt_list' in top_DIE.attributes: - return self._parse_line_program_at_offset( - top_DIE.attributes['DW_AT_stmt_list'].value, CU.structs) - else: - return None - - def has_CFI(self) -> bool: - """ Does this dwarf info have a dwarf_frame CFI section? - """ - return self.debug_frame_sec is not None - - def CFI_entries(self) -> list[CFIEntry | ZERO]: - """ Get a list of dwarf_frame CFI entries from the .debug_frame section. - """ - assert self.debug_frame_sec is not None - cfi = CallFrameInfo( - stream=self.debug_frame_sec.stream, - size=self.debug_frame_sec.size, - address=self.debug_frame_sec.address, - base_structs=self.structs) - return cfi.get_entries() - - def has_EH_CFI(self) -> bool: - """ Does this dwarf info have a eh_frame CFI section? - """ - return self.eh_frame_sec is not None - - def EH_CFI_entries(self) -> list[CFIEntry | ZERO]: - """ Get a list of eh_frame CFI entries from the .eh_frame section. - """ - assert self.eh_frame_sec is not None - cfi = CallFrameInfo( - stream=self.eh_frame_sec.stream, - size=self.eh_frame_sec.size, - address=self.eh_frame_sec.address, - base_structs=self.structs, - for_eh_frame=True) - return cfi.get_entries() - - def get_pubtypes(self) -> NameLUT | None: - """ - Returns a NameLUT object that contains information read from the - .debug_pubtypes section in the ELF file. - - NameLUT is essentially a dictionary containing the CU/DIE offsets of - each symbol. See the NameLUT doc string for more details. - """ - - if self.debug_pubtypes_sec: - return NameLUT(self.debug_pubtypes_sec.stream, - self.debug_pubtypes_sec.size, - self.structs) - else: - return None - - def get_pubnames(self) -> NameLUT | None: - """ - Returns a NameLUT object that contains information read from the - .debug_pubnames section in the ELF file. - - NameLUT is essentially a dictionary containing the CU/DIE offsets of - each symbol. See the NameLUT doc string for more details. - """ - - if self.debug_pubnames_sec: - return NameLUT(self.debug_pubnames_sec.stream, - self.debug_pubnames_sec.size, - self.structs) - else: - return None - - def get_aranges(self) -> ARanges | None: - """ Get an ARanges object representing the .debug_aranges section of - the DWARF data, or None if the section doesn't exist - """ - if self.debug_aranges_sec: - return ARanges(self.debug_aranges_sec.stream, - self.debug_aranges_sec.size, - self.structs) - else: - return None - - def location_lists(self) -> LocationLists | LocationListsPair | None: - """ Get a LocationLists object representing the .debug_loc/debug_loclists section of - the DWARF data, or None if this section doesn't exist. - - If both sections exist, it returns a LocationListsPair. - """ - if self.debug_loclists_sec and self.debug_loc_sec is None: - return LocationLists(self.debug_loclists_sec.stream, self.structs, 5, self) - elif self.debug_loc_sec and self.debug_loclists_sec is None: - return LocationLists(self.debug_loc_sec.stream, self.structs, 4, self) - elif self.debug_loc_sec and self.debug_loclists_sec: - return LocationListsPair(self.debug_loc_sec.stream, self.debug_loclists_sec.stream, self.structs, self) - else: - return None - - def range_lists(self) -> RangeLists | RangeListsPair | None: - """ Get a RangeLists object representing the .debug_ranges/.debug_rnglists section of - the DWARF data, or None if this section doesn't exist. - - If both sections exist, it returns a RangeListsPair. - """ - if self.debug_rnglists_sec and self.debug_ranges_sec is None: - return RangeLists(self.debug_rnglists_sec.stream, self.structs, 5, self) - elif self.debug_ranges_sec and self.debug_rnglists_sec is None: - return RangeLists(self.debug_ranges_sec.stream, self.structs, 4, self) - elif self.debug_ranges_sec and self.debug_rnglists_sec: - return RangeListsPair(self.debug_ranges_sec.stream, self.debug_rnglists_sec.stream, self.structs, self) - else: - return None - - def get_addr(self, cu: CompileUnit | TypeUnit, addr_index: int) -> int: - """Provided a CU and an index, retrieves an address from the debug_addr section - """ - if not self.debug_addr_sec: - raise DWARFError('The file does not contain a debug_addr section for indirect address access') - # Selectors are not supported, but no assert on that. TODO? - cu_addr_base = _get_base_offset(cu, 'DW_AT_addr_base') - return struct_parse(cu.structs.the_Dwarf_target_addr, self.debug_addr_sec.stream, cu_addr_base + addr_index*cu.header.address_size) - - #------ PRIVATE ------# - - def _parse_CUs_iter(self, offset: int = 0) -> Iterator[CompileUnit]: - """ Iterate CU objects in order of appearance in the debug_info section. - - offset: - The offset of the first CU to yield. Additional iterations - will return the sequential unit objects. - - See .iter_CUs(), .get_CU_containing(), and .get_CU_at(). - """ - if self.debug_info_sec is None: - return - - while offset < self.debug_info_sec.size: - cu = self._cached_CU_at_offset(offset) - # Compute the offset of the next CU in the section. The unit_length - # field of the CU header contains its size not including the length - # field itself. - offset = (offset + - cu['unit_length'] + - cu.structs.initial_length_field_size()) - yield cu - - def _parse_TUs_iter(self, offset: int = 0) -> Iterator[TypeUnit]: - """ Iterate Type Unit objects in order of appearance in the debug_types section. - - offset: - The offset of the first TU to yield. Additional iterations - will return the sequential unit objects. - - See .iter_TUs(). - """ - if self.debug_types_sec is None: - return - - while offset < self.debug_types_sec.size: - tu = self._parse_TU_at_offset(offset) - # Compute the offset of the next TU in the section. The unit_length - # field of the TU header contains its size not including the length - # field itself. - offset = (offset + - tu['unit_length'] + - tu.structs.initial_length_field_size()) - - yield tu - - @cached_property - def _type_units_by_sig(self) -> dict[int, TypeUnit]: - """ Check if the .debug_types section is previously parsed. If not, - parse all TUs and store them in an ordered dict using their unique - 64-bit signature as the key. - - See .get_TU_by_sig8(). - """ - if self.debug_types_sec is None: - return {} - - # Parse all the Type Units in the types section for access by sig8 - units = {} - offset = 0 - while offset < self.debug_types_sec.size: - tu = self._parse_TU_at_offset(offset) - # Compute the offset of the next TU in the section. The unit_length - # field of the TU header contains its size not including the length - # field itself. - offset += tu['unit_length'] + tu.structs.initial_length_field_size() - units[tu['signature']] = tu - - return units - - def _cached_CU_at_offset(self, offset: int) -> CompileUnit: - """ Return the CU with unit header at the given offset into the - debug_info section from the cache. If not present, the unit is - header is parsed and the object is installed in the cache. - - offset: - The offset of the unit header in the .debug_info section - to of the unit to fetch from the cache. - - See get_CU_at(). - """ - # Find the insert point for the requested offset. With bisect_right, - # if this entry is present in the cache it will be the prior entry. - i = bisect_right(self._cu_offsets_map, offset) - if i >= 1 and offset == self._cu_offsets_map[i - 1]: - return self._cu_cache[i - 1] - - # Parse the CU and insert the offset and object into the cache. - # The ._cu_offsets_map[] contains just the numeric offsets for the - # bisect_right search while the parallel indexed ._cu_cache[] holds - # the object references. - cu = self._parse_CU_at_offset(offset) - self._cu_offsets_map.insert(i, offset) - self._cu_cache.insert(i, cu) - return cu - - def _parse_CU_at_offset(self, offset: int) -> CompileUnit: - """ Parse and return a CU at the given offset in the debug_info stream. - """ - # Section 7.4 (32-bit and 64-bit DWARF Formats) of the DWARF spec v3 - # states that the first 32-bit word of the CU header determines - # whether the CU is represented with 32-bit or 64-bit DWARF format. - # - # So we peek at the first word in the CU header to determine its - # dwarf format. Based on it, we then create a new DWARFStructs - # instance suitable for this CU and use it to parse the rest. - # - assert self.debug_info_sec is not None - initial_length = struct_parse( - self.structs.the_Dwarf_uint32, self.debug_info_sec.stream, offset) - dwarf_format = 64 if initial_length == 0xFFFFFFFF else 32 - - - # Temporary structs for parsing the header - # The structs for the rest of the CU depend on the header data. - # - cu_structs = DWARFStructs( - little_endian=self.config.little_endian, - dwarf_format=dwarf_format, - address_size=4, - dwarf_version=2) - - cu_header = struct_parse( - cu_structs.Dwarf_CU_header, self.debug_info_sec.stream, offset) - - # structs for the rest of the CU, taking into account bitness and DWARF version - cu_structs = DWARFStructs( - little_endian=self.config.little_endian, - dwarf_format=dwarf_format, - address_size=cu_header['address_size'], - dwarf_version=cu_header['version']) - - cu_die_offset = self.debug_info_sec.stream.tell() - dwarf_assert( - self._is_supported_version(cu_header['version']), - "Expected supported DWARF version. Got '%s'" % cu_header['version']) - return CompileUnit( - header=cu_header, - dwarfinfo=self, - structs=cu_structs, - cu_offset=offset, - cu_die_offset=cu_die_offset) - - def _parse_TU_at_offset(self, offset: int) -> TypeUnit: - """ Parse and return a Type Unit (TU) at the given offset in the debug_types stream. - """ - # Section 7.4 (32-bit and 64-bit DWARF Formats) of the DWARF spec v4 - # states that the first 32-bit word of the TU header determines - # whether the TU is represented with 32-bit or 64-bit DWARF format. - # - # So we peek at the first word in the TU header to determine its - # dwarf format. Based on it, we then create a new DWARFStructs - # instance suitable for this TU and use it to parse the rest. - # - assert self.debug_types_sec is not None - initial_length = struct_parse( - self.structs.the_Dwarf_uint32, self.debug_types_sec.stream, offset) - dwarf_format = 64 if initial_length == 0xFFFFFFFF else 32 - - # Temporary structs for parsing the header - # The structs for the rest of the TU depend on the header data. - # - tu_structs = DWARFStructs( - little_endian=self.config.little_endian, - dwarf_format=dwarf_format, - address_size=4, - dwarf_version=2) - - tu_header = struct_parse( - tu_structs.Dwarf_TU_header, self.debug_types_sec.stream, offset) - - # structs for the rest of the TU, taking into account bit-width and DWARF version - tu_structs = DWARFStructs( - little_endian=self.config.little_endian, - dwarf_format=dwarf_format, - address_size=tu_header['address_size'], - dwarf_version=tu_header['version']) - - tu_die_offset = self.debug_types_sec.stream.tell() - dwarf_assert( - self._is_supported_version(tu_header['version']), - "Expected supported DWARF version. Got '%s'" % tu_header['version']) - return TypeUnit( - header=tu_header, - dwarfinfo=self, - structs=tu_structs, - tu_offset=offset, - tu_die_offset=tu_die_offset) - - def _is_supported_version(self, version: int) -> bool: - """ DWARF version supported by this parser - """ - return 2 <= version <= 5 - - def _parse_line_program_at_offset(self, offset: int, structs: DWARFStructs) -> LineProgram: - """ Given an offset to the .debug_line section, parse the line program - starting at this offset in the section and return it. - structs is the DWARFStructs object used to do this parsing. - """ - - if offset in self._linetable_cache: - return self._linetable_cache[offset] - - assert self.debug_line_sec is not None - lineprog_header = struct_parse( - structs.Dwarf_lineprog_header, - self.debug_line_sec.stream, - offset) - - # DWARF5: resolve names - def resolve_strings( - lineprog_header: Container, - format_field: str, - data_field: str, - ) -> None: - if lineprog_header.get(format_field, False): - data = lineprog_header[data_field] - for field in lineprog_header[format_field]: - - def replace_value( - data: ListContainer, - content_type: str, - replacer: Callable[[int], bytes | None], - ) -> None: - for entry in data: - entry[content_type] = replacer(entry[content_type]) - - if field.form == 'DW_FORM_line_strp': - replace_value(data, field.content_type, self.get_string_from_linetable) - elif field.form == 'DW_FORM_strp': - replace_value(data, field.content_type, self.get_string_from_table) - elif field.form in ('DW_FORM_strp_sup', 'DW_FORM_GNU_strp_alt'): - if self.supplementary_dwarfinfo: - replace_value(data, field.content_type, self.supplementary_dwarfinfo.get_string_from_table) - else: - replace_value(data, field.content_type, lambda x: str(x).encode()) - elif field.form in ('DW_FORM_strp_sup', 'DW_FORM_strx', 'DW_FORM_strx1', 'DW_FORM_strx2', 'DW_FORM_strx3', 'DW_FORM_strx4'): - raise NotImplementedError() - - resolve_strings(lineprog_header, 'directory_entry_format', 'directories') - resolve_strings(lineprog_header, 'file_name_entry_format', 'file_names') - - # DWARF5: provide compatible file/directory name arrays for legacy lineprogram consumers - if lineprog_header.get('directories', False): - lineprog_header.include_directory = tuple(d.DW_LNCT_path for d in lineprog_header.directories) - if lineprog_header.get('file_names', False): - lineprog_header.file_entry = tuple( - Container(**{ - 'name':e.get('DW_LNCT_path'), - 'dir_index': e.get('DW_LNCT_directory_index'), - 'mtime': e.get('DW_LNCT_timestamp'), - 'length': e.get('DW_LNCT_size')}) - for e in lineprog_header.file_names) - - # Calculate the offset to the next line program (see DWARF 6.2.4) - end_offset = ( offset + lineprog_header['unit_length'] + - structs.initial_length_field_size()) - - lineprogram = LineProgram( - header=lineprog_header, - stream=self.debug_line_sec.stream, - structs=structs, - program_start_offset=self.debug_line_sec.stream.tell(), - program_end_offset=end_offset) - - self._linetable_cache[offset] = lineprogram - return lineprogram - - def parse_debugsupinfo(self) -> bytes | None: - """ - Extract a filename from .debug_sup, .gnu_debualtlink sections. - """ - if self.debug_sup_sec is not None: - self.debug_sup_sec.stream.seek(0) - suplink = self.structs.Dwarf_debugsup.parse_stream(self.debug_sup_sec.stream) - if suplink.is_supplementary == 0: - return suplink.sup_filename - if self.gnu_debugaltlink_sec is not None: - self.gnu_debugaltlink_sec.stream.seek(0) - suplink = self.structs.Dwarf_debugaltlink.parse_stream(self.gnu_debugaltlink_sec.stream) - return suplink.sup_filename - # The section .gnu_debuglink with similarly looking contents - # has a different meaning - it doesn't point at supplementary DWARF, - # which is meant to be referenced from primary DWARF, - # it points at DWARF proper. - return None - diff --git a/.tools/python-revlibs/elftools/dwarf/enums.py b/.tools/python-revlibs/elftools/dwarf/enums.py deleted file mode 100644 index cfdc67b..0000000 --- a/.tools/python-revlibs/elftools/dwarf/enums.py +++ /dev/null @@ -1,600 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/enums.py -# -# Mappings of enum names to values -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from ..construct import Pass - - -ENUM_DW_TAG = dict( - DW_TAG_null = 0x00, - DW_TAG_array_type = 0x01, - DW_TAG_class_type = 0x02, - DW_TAG_entry_point = 0x03, - DW_TAG_enumeration_type = 0x04, - DW_TAG_formal_parameter = 0x05, - DW_TAG_global_subroutine = 0x06, - DW_TAG_global_variable = 0x07, - DW_TAG_imported_declaration = 0x08, - DW_TAG_label = 0x0a, - DW_TAG_lexical_block = 0x0b, - DW_TAG_local_variable = 0x0c, - DW_TAG_member = 0x0d, - DW_TAG_pointer_type = 0x0f, - DW_TAG_reference_type = 0x10, - DW_TAG_compile_unit = 0x11, - DW_TAG_string_type = 0x12, - DW_TAG_structure_type = 0x13, - DW_TAG_subroutine = 0x14, - DW_TAG_subroutine_type = 0x15, - DW_TAG_typedef = 0x16, - DW_TAG_union_type = 0x17, - DW_TAG_unspecified_parameters = 0x18, - DW_TAG_variant = 0x19, - DW_TAG_common_block = 0x1a, - DW_TAG_common_inclusion = 0x1b, - DW_TAG_inheritance = 0x1c, - DW_TAG_inlined_subroutine = 0x1d, - DW_TAG_module = 0x1e, - DW_TAG_ptr_to_member_type = 0x1f, - DW_TAG_set_type = 0x20, - DW_TAG_subrange_type = 0x21, - DW_TAG_with_stmt = 0x22, - DW_TAG_access_declaration = 0x23, - DW_TAG_base_type = 0x24, - DW_TAG_catch_block = 0x25, - DW_TAG_const_type = 0x26, - DW_TAG_constant = 0x27, - DW_TAG_enumerator = 0x28, - DW_TAG_file_type = 0x29, - DW_TAG_friend = 0x2a, - DW_TAG_namelist = 0x2b, - DW_TAG_namelist_item = 0x2c, - DW_TAG_namelist_items = 0x2c, - DW_TAG_packed_type = 0x2d, - DW_TAG_subprogram = 0x2e, - - # The DWARF standard defines these as _parameter, not _param, but we - # maintain compatibility with readelf. - DW_TAG_template_type_param = 0x2f, - DW_TAG_template_value_param = 0x30, - - DW_TAG_thrown_type = 0x31, - DW_TAG_try_block = 0x32, - DW_TAG_variant_part = 0x33, - DW_TAG_variable = 0x34, - DW_TAG_volatile_type = 0x35, - DW_TAG_dwarf_procedure = 0x36, - DW_TAG_restrict_type = 0x37, - DW_TAG_interface_type = 0x38, - DW_TAG_namespace = 0x39, - DW_TAG_imported_module = 0x3a, - DW_TAG_unspecified_type = 0x3b, - DW_TAG_partial_unit = 0x3c, - DW_TAG_imported_unit = 0x3d, - DW_TAG_mutable_type = 0x3e, - DW_TAG_condition = 0x3f, - DW_TAG_shared_type = 0x40, - DW_TAG_type_unit = 0x41, - DW_TAG_rvalue_reference_type = 0x42, - DW_TAG_template_alias = 0x43, - DW_TAG_coarray_type = 0x44, - DW_TAG_generic_subrange = 0x45, - DW_TAG_dynamic_type = 0x46, - DW_TAG_atomic_type = 0x47, - DW_TAG_call_site = 0x48, - DW_TAG_call_site_parameter = 0x49, - DW_TAG_skeleton_unit = 0x4a, - DW_TAG_immutable_type = 0x4b, - - # Tags between 0x4080 and 0xffff are user-defined. - # different implementations may overlap? - - DW_TAG_lo_user = 0x4080, - DW_TAG_GNU_template_template_param = 0x4106, - DW_TAG_GNU_template_parameter_pack = 0x4107, - DW_TAG_GNU_formal_parameter_pack = 0x4108, - DW_TAG_GNU_call_site = 0x4109, - DW_TAG_GNU_call_site_parameter = 0x410a, - - DW_TAG_APPLE_property = 0x4200, - - DW_TAG_hi_user = 0xffff, - - _default_ = Pass, -) - - -ENUM_DW_CHILDREN = dict( - DW_CHILDREN_no = 0x00, - DW_CHILDREN_yes = 0x01, -) - - -ENUM_DW_AT = dict( - DW_AT_null = 0x00, - DW_AT_sibling = 0x01, - DW_AT_location = 0x02, - DW_AT_name = 0x03, - DW_AT_fund_type = 0x05, - DW_AT_mod_fund_type = 0x06, - DW_AT_user_def_type = 0x07, - DW_AT_mod_u_d_type = 0x08, - DW_AT_ordering = 0x09, - DW_AT_subscr_data = 0x0a, - DW_AT_byte_size = 0x0b, - DW_AT_bit_offset = 0x0c, - DW_AT_bit_size = 0x0d, - DW_AT_element_list = 0x0f, - DW_AT_stmt_list = 0x10, - DW_AT_low_pc = 0x11, - DW_AT_high_pc = 0x12, - DW_AT_language = 0x13, - DW_AT_member = 0x14, - DW_AT_discr = 0x15, - DW_AT_discr_value = 0x16, - DW_AT_visibility = 0x17, - DW_AT_import = 0x18, - DW_AT_string_length = 0x19, - DW_AT_common_reference = 0x1a, - DW_AT_comp_dir = 0x1b, - DW_AT_const_value = 0x1c, - DW_AT_containing_type = 0x1d, - DW_AT_default_value = 0x1e, - DW_AT_friends = 0x1f, - DW_AT_inline = 0x20, - DW_AT_is_optional = 0x21, - DW_AT_lower_bound = 0x22, - DW_AT_program = 0x23, - DW_AT_private = 0x24, - DW_AT_producer = 0x25, - DW_AT_protected = 0x26, - DW_AT_prototyped = 0x27, - DW_AT_public = 0x28, - DW_AT_pure_virtual = 0x29, - DW_AT_return_addr = 0x2a, - # In DWARFv1, DW_AT_specification was at 0x2b, moved to 0x47 in v2 - DW_AT_start_scope = 0x2c, - DW_AT_bit_stride = 0x2e, - DW_AT_stride_size = 0x2e, - DW_AT_upper_bound = 0x2f, - DW_AT_virtual = 0x30, - DW_AT_abstract_origin = 0x31, - DW_AT_accessibility = 0x32, - DW_AT_address_class = 0x33, - DW_AT_artificial = 0x34, - DW_AT_base_types = 0x35, - DW_AT_calling_convention = 0x36, - DW_AT_count = 0x37, - DW_AT_data_member_location = 0x38, - DW_AT_decl_column = 0x39, - DW_AT_decl_file = 0x3a, - DW_AT_decl_line = 0x3b, - DW_AT_declaration = 0x3c, - DW_AT_discr_list = 0x3d, - DW_AT_encoding = 0x3e, - DW_AT_external = 0x3f, - DW_AT_frame_base = 0x40, - DW_AT_friend = 0x41, - DW_AT_identifier_case = 0x42, - DW_AT_macro_info = 0x43, - DW_AT_namelist_item = 0x44, - DW_AT_priority = 0x45, - DW_AT_segment = 0x46, - DW_AT_specification = 0x47, - DW_AT_static_link = 0x48, - DW_AT_type = 0x49, - DW_AT_use_location = 0x4a, - DW_AT_variable_parameter = 0x4b, - DW_AT_virtuality = 0x4c, - DW_AT_vtable_elem_location = 0x4d, - DW_AT_allocated = 0x4e, - DW_AT_associated = 0x4f, - DW_AT_data_location = 0x50, - DW_AT_byte_stride = 0x51, - DW_AT_stride = 0x51, - DW_AT_entry_pc = 0x52, - DW_AT_use_UTF8 = 0x53, - DW_AT_extension = 0x54, - DW_AT_ranges = 0x55, - DW_AT_trampoline = 0x56, - DW_AT_call_column = 0x57, - DW_AT_call_file = 0x58, - DW_AT_call_line = 0x59, - DW_AT_description = 0x5a, - DW_AT_binary_scale = 0x5b, - DW_AT_decimal_scale = 0x5c, - DW_AT_small = 0x5d, - DW_AT_decimal_sign = 0x5e, - DW_AT_digit_count = 0x5f, - DW_AT_picture_string = 0x60, - DW_AT_mutable = 0x61, - DW_AT_threads_scaled = 0x62, - DW_AT_explicit = 0x63, - DW_AT_object_pointer = 0x64, - DW_AT_endianity = 0x65, - DW_AT_elemental = 0x66, - DW_AT_pure = 0x67, - DW_AT_recursive = 0x68, - DW_AT_signature = 0x69, - DW_AT_main_subprogram = 0x6a, - DW_AT_data_bit_offset = 0x6b, - DW_AT_const_expr = 0x6c, - DW_AT_enum_class = 0x6d, - DW_AT_linkage_name = 0x6e, - DW_AT_string_length_bit_size = 0x6f, - DW_AT_string_length_byte_size = 0x70, - DW_AT_rank = 0x71, - DW_AT_str_offsets_base = 0x72, - DW_AT_addr_base = 0x73, - DW_AT_rnglists_base = 0x74, - DW_AT_dwo_name = 0x76, - DW_AT_reference = 0x77, - DW_AT_rvalue_reference = 0x78, - DW_AT_macros = 0x79, - DW_AT_call_all_calls = 0x7a, - DW_AT_call_all_source_calls = 0x7b, - DW_AT_call_all_tail_calls = 0x7c, - DW_AT_call_return_pc = 0x7d, - DW_AT_call_value = 0x7e, - DW_AT_call_origin = 0x7f, - DW_AT_call_parameter = 0x80, - DW_AT_call_pc = 0x81, - DW_AT_call_tail_call = 0x82, - DW_AT_call_target = 0x83, - DW_AT_call_target_clobbered = 0x84, - DW_AT_call_data_location = 0x85, - DW_AT_call_data_value = 0x86, - DW_AT_noreturn = 0x87, - DW_AT_alignment = 0x88, - DW_AT_export_symbols = 0x89, - DW_AT_deleted = 0x8a, - DW_AT_defaulted = 0x8b, - DW_AT_loclists_base = 0x8c, - - DW_AT_MIPS_fde = 0x2001, - DW_AT_MIPS_loop_begin = 0x2002, - DW_AT_MIPS_tail_loop_begin = 0x2003, - DW_AT_MIPS_epilog_begin = 0x2004, - DW_AT_MIPS_loop_unroll_factor = 0x2005, - DW_AT_MIPS_software_pipeline_depth = 0x2006, - DW_AT_MIPS_linkage_name = 0x2007, - DW_AT_MIPS_stride = 0x2008, - DW_AT_MIPS_abstract_name = 0x2009, - DW_AT_MIPS_clone_origin = 0x200a, - DW_AT_MIPS_has_inlines = 0x200b, - DW_AT_MIPS_stride_byte = 0x200c, - DW_AT_MIPS_stride_elem = 0x200d, - DW_AT_MIPS_ptr_dopetype = 0x200e, - DW_AT_MIPS_allocatable_dopetype = 0x200f, - DW_AT_MIPS_assumed_shape_dopetype = 0x2010, - DW_AT_MIPS_assumed_size = 0x2011, - - DW_AT_HP_opt_level = 0x2014, - - DW_AT_sf_names = 0x2101, - DW_AT_src_info = 0x2102, - DW_AT_mac_info = 0x2103, - DW_AT_src_coords = 0x2104, - DW_AT_body_begin = 0x2105, - DW_AT_body_end = 0x2106, - DW_AT_GNU_vector = 0x2107, - DW_AT_GNU_template_name = 0x2110, - DW_AT_GNU_odr_signature = 0x210f, - - DW_AT_GNU_call_site_value = 0x2111, - DW_AT_GNU_call_site_data_value = 0x2112, - DW_AT_GNU_call_site_target = 0x2113, - DW_AT_GNU_call_site_target_clobbered = 0x2114, - DW_AT_GNU_tail_call = 0x2115, - DW_AT_GNU_all_tail_call_sites = 0x2116, - DW_AT_GNU_all_call_sites = 0x2117, - DW_AT_GNU_all_source_call_sites = 0x2118, - DW_AT_GNU_macros = 0x2119, - DW_AT_GNU_deleted = 0x211a, - DW_AT_GNU_dwo_name = 0x2130, - DW_AT_GNU_dwo_id = 0x2131, - DW_AT_GNU_ranges_base = 0x2132, - DW_AT_GNU_addr_base = 0x2133, - DW_AT_GNU_pubnames = 0x2134, - DW_AT_GNU_pubtypes = 0x2135, - DW_AT_GNU_discriminator = 0x2136, - DW_AT_GNU_locviews = 0x2137, - DW_AT_GNU_entry_view = 0x2138, - - DW_AT_LLVM_include_path = 0x3e00, - DW_AT_LLVM_config_macros = 0x3e01, - DW_AT_LLVM_isysroot = 0x3e02, # sysroot elsewhere - DW_AT_LLVM_tag_offset = 0x3e03, - DW_AT_LLVM_apinotes = 0x3e07, - - DW_AT_APPLE_optimized = 0x3fe1, - DW_AT_APPLE_flags = 0x3fe2, - DW_AT_APPLE_isa = 0x3fe3, - DW_AT_APPLE_block = 0x3fe4, - DW_AT_APPLE_major_runtime_vers = 0x3fe5, - DW_AT_APPLE_runtime_class = 0x3fe6, - DW_AT_APPLE_omit_frame_ptr = 0x3fe7, - DW_AT_APPLE_property_name = 0x3fe8, - DW_AT_APPLE_property_getter = 0x3fe9, - DW_AT_APPLE_property_setter = 0x3fea, - DW_AT_APPLE_property_attribute = 0x3feb, - DW_AT_APPLE_objc_complete_type = 0x3fec, - DW_AT_APPLE_property = 0x3fed, - DW_AT_APPLE_objc_direct = 0x3fee, - DW_AT_APPLE_sdk = 0x3fef, - - _default_ = Pass, -) - - -ENUM_DW_FORM = dict( - DW_FORM_null = 0x00, - DW_FORM_addr = 0x01, - DW_FORM_ref = 0x02, - DW_FORM_block2 = 0x03, - DW_FORM_block4 = 0x04, - DW_FORM_data2 = 0x05, - DW_FORM_data4 = 0x06, - DW_FORM_data8 = 0x07, - DW_FORM_string = 0x08, - DW_FORM_block = 0x09, - DW_FORM_block1 = 0x0a, - DW_FORM_data1 = 0x0b, - DW_FORM_flag = 0x0c, - DW_FORM_sdata = 0x0d, - DW_FORM_strp = 0x0e, - DW_FORM_udata = 0x0f, - DW_FORM_ref_addr = 0x10, - DW_FORM_ref1 = 0x11, - DW_FORM_ref2 = 0x12, - DW_FORM_ref4 = 0x13, - DW_FORM_ref8 = 0x14, - DW_FORM_ref_udata = 0x15, - DW_FORM_indirect = 0x16, - DW_FORM_sec_offset = 0x17, - DW_FORM_exprloc = 0x18, - DW_FORM_flag_present = 0x19, - DW_FORM_strx = 0x1a, - DW_FORM_addrx = 0x1b, - DW_FORM_ref_sup4 = 0x1c, - DW_FORM_strp_sup = 0x1d, - DW_FORM_data16 = 0x1e, - DW_FORM_line_strp = 0x1f, - DW_FORM_ref_sig8 = 0x20, - DW_FORM_implicit_const = 0x21, - DW_FORM_loclistx = 0x22, - DW_FORM_rnglistx = 0x23, - DW_FORM_ref_sup8 = 0x24, - DW_FORM_strx1 = 0x25, - DW_FORM_strx2 = 0x26, - DW_FORM_strx3 = 0x27, - DW_FORM_strx4 = 0x28, - DW_FORM_addrx1 = 0x29, - DW_FORM_addrx2 = 0x2a, - DW_FORM_addrx3 = 0x2b, - DW_FORM_addrx4 = 0x2c, - - DW_FORM_GNU_addr_index = 0x1f01, - DW_FORM_GNU_str_index = 0x1f02, - DW_FORM_GNU_ref_alt = 0x1f20, - DW_FORM_GNU_strp_alt = 0x1f21, - _default_ = Pass, -) - -# Inverse mapping for ENUM_DW_FORM -DW_FORM_raw2name = dict((v, k) for k, v in ENUM_DW_FORM.items()) - -# See http://www.airs.com/blog/archives/460 -DW_EH_encoding_flags = dict( - DW_EH_PE_absptr = 0x00, - DW_EH_PE_uleb128 = 0x01, - DW_EH_PE_udata2 = 0x02, - DW_EH_PE_udata4 = 0x03, - DW_EH_PE_udata8 = 0x04, - - DW_EH_PE_signed = 0x08, - DW_EH_PE_sleb128 = 0x09, - DW_EH_PE_sdata2 = 0x0a, - DW_EH_PE_sdata4 = 0x0b, - DW_EH_PE_sdata8 = 0x0c, - - DW_EH_PE_pcrel = 0x10, - DW_EH_PE_textrel = 0x20, - DW_EH_PE_datarel = 0x30, - DW_EH_PE_funcrel = 0x40, - DW_EH_PE_aligned = 0x50, - DW_EH_PE_indirect = 0x80, - - DW_EH_PE_omit = 0xff, -) - -ENUM_DW_LNCT = dict( - DW_LNCT_path = 0x1, - DW_LNCT_directory_index = 0x2, - DW_LNCT_timestamp = 0x3, - DW_LNCT_size = 0x4, - DW_LNCT_MD5 = 0x5, - DW_LNCT_lo_user = 0x2000, - DW_LNCT_LLVM_source = 0x2001, - DW_LNCT_LLVM_is_MD5 = 0x2002, - DW_LNCT_hi_user = 0x3fff -) - -ENUM_DW_UT = dict( - DW_UT_compile = 0x01, - DW_UT_type = 0x02, - DW_UT_partial = 0x03, - DW_UT_skeleton = 0x04, - DW_UT_split_compile = 0x05, - DW_UT_split_type = 0x06, - DW_UT_lo_user = 0x80, - DW_UT_hi_user = 0xff -) - -ENUM_DW_LLE = dict( - DW_LLE_end_of_list = 0x00, - DW_LLE_base_addressx = 0x01, - DW_LLE_startx_endx = 0x02, - DW_LLE_startx_length = 0x03, - DW_LLE_offset_pair = 0x04, - DW_LLE_default_location = 0x05, - DW_LLE_base_address = 0x06, - DW_LLE_start_end = 0x07, - DW_LLE_start_length = 0x08 -) - -ENUM_DW_RLE = dict( - DW_RLE_end_of_list = 0x00, - DW_RLE_base_addressx = 0x01, - DW_RLE_startx_endx = 0x02, - DW_RLE_startx_length = 0x03, - DW_RLE_offset_pair = 0x04, - DW_RLE_base_address = 0x05, - DW_RLE_start_end = 0x06, - DW_RLE_start_length = 0x07 -) - -# See https://dwarfstd.org/languages.html -ENUM_DW_LANG = dict( - # DWARF v5 and earlier - DW_LANG_C89 = 0x0001, - DW_LANG_C = 0x0002, - DW_LANG_Ada83 = 0x0003, - DW_LANG_C_plus_plus = 0x0004, - DW_LANG_Cobol74 = 0x0005, - DW_LANG_Cobol85 = 0x0006, - DW_LANG_Fortran77 = 0x0007, - DW_LANG_Fortran90 = 0x0008, - DW_LANG_Pascal83 = 0x0009, - DW_LANG_Modula2 = 0x000a, - DW_LANG_Java = 0x000b, - DW_LANG_C99 = 0x000c, - DW_LANG_Ada95 = 0x000d, - DW_LANG_Fortran95 = 0x000e, - DW_LANG_PLI = 0x000f, - DW_LANG_ObjC = 0x0010, - DW_LANG_ObjC_plus_plus = 0x0011, - DW_LANG_UPC = 0x0012, - DW_LANG_D = 0x0013, - DW_LANG_Python = 0x0014, - DW_LANG_OpenCL = 0x0015, - DW_LANG_Go = 0x0016, - DW_LANG_Modula3 = 0x0017, - DW_LANG_Haskell = 0x0018, - DW_LANG_C_plus_plus_03 = 0x0019, - DW_LANG_C_plus_plus_11 = 0x001a, - DW_LANG_OCaml = 0x001b, - DW_LANG_Rust = 0x001c, - DW_LANG_C11 = 0x001d, - DW_LANG_Swift = 0x001e, - DW_LANG_Julia = 0x001f, - DW_LANG_Dylan = 0x0020, - DW_LANG_C_plus_plus_14 = 0x0021, - DW_LANG_Fortran03 = 0x0022, - DW_LANG_Fortran08 = 0x0023, - DW_LANG_RenderScript = 0x0024, - DW_LANG_BLISS = 0x0025, - # After DWARF v5 - DW_LANG_Kotlin = 0x0026, - DW_LANG_Zig = 0x0027, - DW_LANG_Crystal = 0x0028, - DW_LANG_C_plus_plus_17 = 0x002a, - DW_LANG_C_plus_plus_20 = 0x002b, - DW_LANG_C17 = 0x002c, - DW_LANG_Fortran18 = 0x002d, - DW_LANG_Ada2005 = 0x002e, - DW_LANG_Ada2012 = 0x002f, - DW_LANG_HIP = 0x0030, - DW_LANG_Assembly = 0x0031, - DW_LANG_C_sharp = 0x0032, - DW_LANG_Mojo = 0x0033, - DW_LANG_GLSL = 0x0034, - DW_LANG_GLSL_ES = 0x0035, - DW_LANG_HLSL = 0x0036, - DW_LANG_OpenCL_CPP = 0x0037, - DW_LANG_CPP_for_OpenCL = 0x0038, - DW_LANG_SYCL = 0x0039, - DW_LANG_C_plus_plus_23 = 0x003a, - DW_LANG_Odin = 0x003b, - DW_LANG_P4 = 0x003c, - DW_LANG_Metal = 0x003d, - DW_LANG_C23 = 0x003e, - DW_LANG_Fortran23 = 0x003f, - DW_LANG_Ruby = 0x0040, - DW_LANG_Move = 0x0041, - DW_LANG_Hylo = 0x0042, - DW_LANG_V = 0x0043, - DW_LANG_Algol68 = 0x0044, - DW_LANG_Nim = 0x0045, - DW_LANG_Erlang = 0x0046, - DW_LANG_Elixir = 0x0047, - DW_LANG_Gleam = 0x0048, - # Vendor extensions range - DW_LANG_lo_user = 0x8000, - DW_LANG_hi_user = 0xffff, - # Note: in absense of official names, the naming of the following - # extensions follows what's done in the include/dwarf2.h file in the GCC - # repo. - # Mips extensions - DW_LANG_Mips_Assembler = 0x8001, - # UPC (Unified Parallel C) extensions - DW_LANG_Upc = 0x8765, # Replaced by DW_LANG_UPC - # HP extensions - DW_LANG_HP_Bliss = 0x8003, - DW_LANG_HP_Basic91 = 0x8004, - DW_LANG_HP_Pascal91 = 0x8005, - DW_LANG_HP_IMacro = 0x8006, - DW_LANG_HP_Assembler = 0x8007, - # Rust extensions - DW_LANG_Rust_old = 0x9000 # Replaced by DW_LANG_Rust -) - -ENUM_DW_ATE = dict( - DW_ATE_address = 0x01, - DW_ATE_boolean = 0x02, - DW_ATE_complex_float = 0x03, - DW_ATE_float = 0x04, - DW_ATE_signed = 0x05, - DW_ATE_signed_char = 0x06, - DW_ATE_unsigned = 0x07, - DW_ATE_unsigned_char = 0x08, - DW_ATE_imaginary_float = 0x09, - DW_ATE_packed_decimal = 0x0a, - DW_ATE_numeric_string = 0x0b, - DW_ATE_edited = 0x0c, - DW_ATE_signed_fixed = 0x0d, - DW_ATE_unsigned_fixed = 0x0e, - DW_ATE_decimal_float = 0x0f, - DW_ATE_UTF = 0x10, - DW_ATE_UCS = 0x11, - DW_ATE_ASCII = 0x12, - DW_ATE_lo_user = 0x80, - DW_ATE_hi_user = 0xff -) - -ENUM_DW_ACCESS = dict( - DW_ACCESS_public = 0x01, - DW_ACCESS_protected = 0x02, - DW_ACCESS_private = 0x03 -) - -ENUM_DW_INL = dict( - DW_INL_not_inlined = 0x00, - DW_INL_inlined = 0x01, - DW_INL_declared_not_inlined = 0x02, - DW_INL_declared_inlined = 0x03 -) - -ENUM_DW_CC = dict( - DW_CC_normal = 0x01, - DW_CC_program = 0x02, - DW_CC_nocall = 0x03, - DW_CC_pass_by_reference = 0x04, - DW_CC_pass_by_value = 0x05, - DW_CC_lo_user = 0x40, - DW_CC_hi_user = 0xff -) diff --git a/.tools/python-revlibs/elftools/dwarf/lineprogram.py b/.tools/python-revlibs/elftools/dwarf/lineprogram.py deleted file mode 100644 index d666e2d..0000000 --- a/.tools/python-revlibs/elftools/dwarf/lineprogram.py +++ /dev/null @@ -1,280 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/lineprogram.py -# -# DWARF line number program -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import os -import copy -from functools import cached_property -from typing import IO, TYPE_CHECKING, Any, NamedTuple - -from ..common.utils import struct_parse, dwarf_assert -from .constants import DW_LNE, DW_LNS - -if TYPE_CHECKING: - from ..construct.lib.container import Container - from .structs import DWARFStructs - - -# LineProgramEntry - an entry in the line program. -# A line program is a sequence of encoded entries. Some of these entries add a -# new LineState (mapping between line and address), and some don't. -# -# command: -# The command/opcode - always numeric. For standard commands - it's the opcode -# that can be matched with one of the DW_LNS constants. For extended commands -# it's the extended opcode that can be matched with one of the DW_LNE -# constants. For special commands, it's the opcode itself. -# -# args: -# A list of decoded arguments of the command. -# -# is_extended: -# Since extended commands are encoded by a zero followed by an extended -# opcode, and these extended opcodes overlap with other opcodes, this -# flag is needed to mark that the command has an extended opcode. -# -# state: -# For commands that add a new state, it's the relevant LineState object. -# For commands that don't add a new state, it's None. -# -class LineProgramEntry(NamedTuple): - command: int - is_extended: bool - args: list[int] - state: LineState | None - - -class LineState: - """ Represents a line program state (or a "row" in the matrix - describing debug location information for addresses). - The instance variables of this class are the "state machine registers" - described in section 6.2.2 of DWARFv3 - """ - def __init__(self, default_is_stmt: int) -> None: - self.address = 0 - self.file = 1 - self.line = 1 - self.column = 0 - self.op_index = 0 - self.is_stmt = default_is_stmt - self.basic_block = False - self.end_sequence = False - self.prologue_end = False - self.epilogue_begin = False - self.isa = 0 - self.discriminator = 0 - - def __repr__(self) -> str: - return '\n'.join(( - '', - )) - - -class LineProgram: - """ Builds a "line table", which is essentially the matrix described - in section 6.2 of DWARFv3. It's a list of LineState objects, - sorted by increasing address, so it can be used to obtain the - state information for each address. - """ - def __init__( - self, - header: Container, - stream: IO[bytes], - structs: DWARFStructs, - program_start_offset: int, - program_end_offset: int, - ) -> None: - """ - header: - The header of this line program. Note: LineProgram may modify - its header by appending file entries if DW_LNE.define_file - instructions are encountered. - - stream: - The stream this program can be read from. - - structs: - A DWARFStructs instance suitable for this line program - - program_{start|end}_offset: - Offset in the debug_line section stream where this program - starts (the actual program, after the header), and where it - ends. - The actual range includes start but not end: [start, end - 1] - """ - self.stream = stream - self.header = header - self.structs = structs - self.program_start_offset = program_start_offset - self.program_end_offset = program_end_offset - - def get_entries(self) -> list[LineProgramEntry]: - """ Get the decoded entries for this line program. Return a list of - LineProgramEntry objects. - Note that this contains more information than absolutely required - for the line table. The line table can be easily extracted from - the list of entries by looking only at entries with non-None - state. The extra information is mainly for the purposes of display - with readelf and debugging. - """ - return self._decode_line_program - - #------ PRIVATE ------# - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - @cached_property - def _decode_line_program(self) -> list[LineProgramEntry]: - entries = [] - state = LineState(self.header['default_is_stmt']) - - def add_entry_new_state(cmd: int, args: list[int], is_extended: bool = False) -> None: - # Add an entry that sets a new state. - # After adding, clear some state registers. - entries.append(LineProgramEntry( - cmd, is_extended, args, copy.copy(state))) - state.discriminator = 0 - state.basic_block = False - state.prologue_end = False - state.epilogue_begin = False - - def add_entry_old_state(cmd: int, args: list[int], is_extended: bool = False) -> None: - # Add an entry that doesn't visibly set a new state - entries.append(LineProgramEntry(cmd, is_extended, args, None)) - - offset = self.program_start_offset - while offset < self.program_end_offset: - opcode: int = struct_parse( - self.structs.the_Dwarf_uint8, - self.stream, - offset) - - # As an exercise in avoiding premature optimization, if...elif - # chains are used here for standard and extended opcodes instead - # of dispatch tables. This keeps the code much cleaner. Besides, - # the majority of instructions in a typical program are special - # opcodes anyway. - if opcode >= self.header['opcode_base']: - # Special opcode (follow the recipe in 6.2.5.1) - maximum_operations_per_instruction: int = self['maximum_operations_per_instruction'] - adjusted_opcode: int = opcode - self['opcode_base'] - operation_advance: int = adjusted_opcode // self['line_range'] - address_addend: int = ( - self['minimum_instruction_length'] * - ((state.op_index + operation_advance) // - maximum_operations_per_instruction)) - state.address += address_addend - state.op_index = (state.op_index + operation_advance) % maximum_operations_per_instruction - line_addend: int = self['line_base'] + (adjusted_opcode % self['line_range']) - state.line += line_addend - add_entry_new_state( - opcode, [line_addend, address_addend, state.op_index]) - elif opcode == 0: - # Extended opcode: start with a zero byte, followed by - # instruction size and the instruction itself. - inst_len: int = struct_parse(self.structs.the_Dwarf_uleb128, - self.stream) - ex_opcode: int = struct_parse(self.structs.the_Dwarf_uint8, - self.stream) - - if ex_opcode == DW_LNE.end_sequence: - state.end_sequence = True - state.is_stmt = 0 - add_entry_new_state(ex_opcode, [], is_extended=True) - # reset state - state = LineState(self.header['default_is_stmt']) - elif ex_opcode == DW_LNE.set_address: - operand: int = struct_parse(self.structs.the_Dwarf_target_addr, - self.stream) - state.address = operand - add_entry_old_state(ex_opcode, [operand], is_extended=True) - elif ex_opcode == DW_LNE.define_file: - operand = struct_parse( - self.structs.Dwarf_lineprog_file_entry, self.stream) - self['file_entry'].append(operand) - add_entry_old_state(ex_opcode, [operand], is_extended=True) - elif ex_opcode == DW_LNE.set_discriminator: - operand = struct_parse(self.structs.the_Dwarf_uleb128, - self.stream) - state.discriminator = operand - else: - # Unknown, but need to roll forward the stream because the - # length is specified. Seek forward inst_len - 1 because - # we've already read the extended opcode, which takes part - # in the length. - self.stream.seek(inst_len - 1, os.SEEK_CUR) - else: # 0 < opcode < opcode_base - # Standard opcode - if opcode == DW_LNS.copy: - add_entry_new_state(opcode, []) - elif opcode == DW_LNS.advance_pc: - operand = struct_parse(self.structs.the_Dwarf_uleb128, - self.stream) - address_addend = ( - operand * self.header['minimum_instruction_length']) - state.address += address_addend - add_entry_old_state(opcode, [address_addend]) - elif opcode == DW_LNS.advance_line: - operand = struct_parse(self.structs.the_Dwarf_sleb128, - self.stream) - state.line += operand - elif opcode == DW_LNS.set_file: - operand = struct_parse(self.structs.the_Dwarf_uleb128, - self.stream) - state.file = operand - add_entry_old_state(opcode, [operand]) - elif opcode == DW_LNS.set_column: - operand = struct_parse(self.structs.the_Dwarf_uleb128, - self.stream) - state.column = operand - add_entry_old_state(opcode, [operand]) - elif opcode == DW_LNS.negate_stmt: - state.is_stmt = not state.is_stmt - add_entry_old_state(opcode, []) - elif opcode == DW_LNS.set_basic_block: - state.basic_block = True - add_entry_old_state(opcode, []) - elif opcode == DW_LNS.const_add_pc: - adjusted_opcode = 255 - self['opcode_base'] - address_addend = ((adjusted_opcode // self['line_range']) * - self['minimum_instruction_length']) - state.address += address_addend - add_entry_old_state(opcode, [address_addend]) - elif opcode == DW_LNS.fixed_advance_pc: - operand = struct_parse(self.structs.the_Dwarf_uint16, - self.stream) - state.address += operand - add_entry_old_state(opcode, [operand]) - elif opcode == DW_LNS.set_prologue_end: - state.prologue_end = True - add_entry_old_state(opcode, []) - elif opcode == DW_LNS.set_epilogue_begin: - state.epilogue_begin = True - add_entry_old_state(opcode, []) - elif opcode == DW_LNS.set_isa: - operand = struct_parse(self.structs.the_Dwarf_uleb128, - self.stream) - state.isa = operand - add_entry_old_state(opcode, [operand]) - else: - dwarf_assert(False, 'Invalid standard line program opcode: %s' % ( - opcode,)) - offset = self.stream.tell() - return entries diff --git a/.tools/python-revlibs/elftools/dwarf/locationlists.py b/.tools/python-revlibs/elftools/dwarf/locationlists.py deleted file mode 100644 index 820ee95..0000000 --- a/.tools/python-revlibs/elftools/dwarf/locationlists.py +++ /dev/null @@ -1,422 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/locationlists.py -# -# DWARF location lists section decoding (.debug_loc) -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import os -from typing import IO, TYPE_CHECKING, NamedTuple - -from ..common.exceptions import DWARFError -from ..common.utils import struct_parse -from .dwarf_util import _iter_CUs_in_section - -if TYPE_CHECKING: - from collections.abc import Callable, Iterator, Mapping - - from ..construct.lib.container import Container - from .compileunit import CompileUnit - from .die import DIE, AttributeValue - from .dwarfinfo import DWARFInfo - from .structs import DWARFStructs - from .typeunit import TypeUnit - - -class LocationExpr(NamedTuple): - loc_expr: list[int] - - -class LocationEntry(NamedTuple): - entry_offset: int - entry_length: int - begin_offset: int - end_offset: int - loc_expr: list[int] - is_absolute: bool - - -class BaseAddressEntry(NamedTuple): - entry_offset: int - entry_length: int - base_address: int - - -class LocationViewPair(NamedTuple): - entry_offset: int - begin: int - end: int - - -if TYPE_CHECKING: - _Location = LocationExpr | LocationEntry | BaseAddressEntry | LocationViewPair - - -def _translate_startx_length(e: Container, cu: CompileUnit | TypeUnit) -> LocationEntry: - start_offset: int = cu.dwarfinfo.get_addr(cu, e.start_index) - return LocationEntry(e.entry_offset, e.entry_length, start_offset, start_offset + e.length, e.loc_expr, True) - -# Maps parsed entries to the tuples above; LocationViewPair is mapped elsewhere -entry_translate: dict[str, Callable[[Container, CompileUnit | TypeUnit], _Location]] = { - 'DW_LLE_base_address' : lambda e, cu: BaseAddressEntry(e.entry_offset, e.entry_length, e.address), - 'DW_LLE_offset_pair' : lambda e, cu: LocationEntry(e.entry_offset, e.entry_length, e.start_offset, e.end_offset, e.loc_expr, False), - 'DW_LLE_start_length' : lambda e, cu: LocationEntry(e.entry_offset, e.entry_length, e.start_address, e.start_address + e.length, e.loc_expr, True), - 'DW_LLE_start_end' : lambda e, cu: LocationEntry(e.entry_offset, e.entry_length, e.start_address, e.end_address, e.loc_expr, True), - 'DW_LLE_default_location': lambda e, cu: LocationEntry(e.entry_offset, e.entry_length, -1, -1, e.loc_expr, True), - 'DW_LLE_base_addressx' : lambda e, cu: BaseAddressEntry(e.entry_offset, e.entry_length, cu.dwarfinfo.get_addr(cu, e.index)), # type: ignore[has-type] - 'DW_LLE_startx_endx' : lambda e, cu: LocationEntry(e.entry_offset, e.entry_length, cu.dwarfinfo.get_addr(cu, e.start_index), cu.dwarfinfo.get_addr(cu, e.end_index), e.loc_expr, True), # type: ignore[has-type] - 'DW_LLE_startx_length' : _translate_startx_length -} - -class LocationListsPair: - """For those binaries that contain both a debug_loc and a debug_loclists section, - it holds a LocationLists object for both and forwards API calls to the right one. - """ - def __init__( - self, - streamv4: IO[bytes], - streamv5: IO[bytes], - structs: DWARFStructs, - dwarfinfo: DWARFInfo | None = None, - ) -> None: - self._loc = LocationLists(streamv4, structs, 4, dwarfinfo) - self._loclists = LocationLists(streamv5, structs, 5, dwarfinfo) - - def get_location_list_at_offset(self, offset: int, die: DIE | None = None) -> list[_Location]: - """See LocationLists.get_location_list_at_offset(). - """ - if die is None: - raise DWARFError("For this binary, \"die\" needs to be provided") - section = self._loclists if die.cu.header.version >= 5 else self._loc - return section.get_location_list_at_offset(offset, die) - - def iter_location_lists(self) -> Iterator[BaseAddressEntry | LocationEntry]: - """Tricky proposition, since the structure of loc and loclists - is not identical. A realistic readelf implementation needs to be aware of both - """ - raise DWARFError("Iterating through two sections is not supported") - - def iter_CUs(self) -> Iterator[CompileUnit]: - """See LocationLists.iter_CUs() - - There are no CUs in DWARFv4 sections. - """ - raise DWARFError("Iterating through two sections is not supported") - -class LocationLists: - """ A single location list is a Python list consisting of LocationEntry or - BaseAddressEntry objects. - - Starting with DWARF5, it may also contain LocationViewPair, but only - if scanning the section, never when requested for a DIE attribute. - - The default location entries are returned as LocationEntry with - begin_offset == end_offset == -1 - - Version determines whether the executable contains a debug_loc - section, or a DWARFv5 style debug_loclists one. Only the 4/5 - distinction matters. - - Dwarfinfo is only needed for DWARFv5 location entry encodings - that contain references to other sections (e. g. DW_LLE_startx_endx), - and only for location list enumeration. - """ - def __init__( - self, - stream: IO[bytes], - structs: DWARFStructs, - version: int = 4, - dwarfinfo: DWARFInfo | None = None, - ) -> None: - self.stream = stream - self.structs = structs - self.dwarfinfo = dwarfinfo - self.version = version - self._max_addr: int = 2 ** (self.structs.address_size * 8) - 1 - - def get_location_list_at_offset(self, offset: int, die: DIE | None = None) -> list[_Location]: - """ Get a location list at the given offset in the section. - Passing the die is only neccessary in DWARF5+, for decoding - location entry encodings that contain references to other sections. - """ - self.stream.seek(offset, os.SEEK_SET) - if self.version >= 5: - if die is None: - raise DWARFError("For this binary, \"die\" needs to be provided") - return self._parse_location_list_from_stream_v5(die.cu) - return self._parse_location_list_from_stream() - - def iter_location_lists(self) -> Iterator[list[_Location]]: - """ Iterates through location lists and view pairs. Returns lists of - LocationEntry, BaseAddressEntry, and LocationViewPair objects. - """ - # The location lists section was never meant for sequential access. - # Location lists are referenced by DIE attributes by offset or by index. - - # As of DWARFv5, it may contain, in addition to proper location lists, - # location list view pairs, which are referenced by the nonstandard DW_AT_GNU_locviews - # attribute. A set of locview pairs (which is a couple of ULEB128 values) may preceed - # a location list; the former is referenced by the DW_AT_GNU_locviews attribute, the - # latter - by DW_AT_location (in the same DIE). Binutils' readelf dumps those. - # There is a view pair for each location-type entry in the list. - # - # Also, the section may contain gaps. - # - # Taking a cue from binutils, we would have to scan this section while looking at - # what's in DIEs. - ver5 = self.version >= 5 - stream = self.stream - stream.seek(0, os.SEEK_END) - endpos = stream.tell() - - stream.seek(0, os.SEEK_SET) - - # Need to provide support for DW_AT_GNU_locviews. They are interspersed in - # the locations section, no way to tell where short of checking all DIEs - all_offsets = set() # Set of offsets where either a locview pair set can be found, or a view-less loclist - locviews = dict() # Map of locview offset to the respective loclist offset - cu_map = dict() # Map of loclist offsets to CUs - assert self.dwarfinfo is not None - for cu in self.dwarfinfo.iter_CUs(): - cu_ver: int = cu['version'] - if (cu_ver >= 5) == ver5: - for die in cu.iter_DIEs(): - # A combination of location and locviews means there is a location list - # preceed by several locview pairs - if 'DW_AT_GNU_locviews' in die.attributes: - assert('DW_AT_location' in die.attributes and - LocationParser._attribute_has_loc_list(die.attributes['DW_AT_location'], cu_ver)) - views_offset: int = die.attributes['DW_AT_GNU_locviews'].value - list_offset: int = die.attributes['DW_AT_location'].value - locviews[views_offset] = list_offset - cu_map[list_offset] = cu - all_offsets.add(views_offset) - - # Scan other attributes for location lists - for key in die.attributes: - attr = die.attributes[key] - if ((key != 'DW_AT_location' or 'DW_AT_GNU_locviews' not in die.attributes) and - LocationParser.attribute_has_location(attr, cu_ver) and - LocationParser._attribute_has_loc_list(attr, cu_ver)): - list_offset = attr.value - all_offsets.add(list_offset) - cu_map[list_offset] = cu - sorted_offsets = sorted(all_offsets) - - if ver5: - # Loclists section is organized as an array of CUs, each length prefixed. - # We don't assume that the CUs go in the same order as the ones in info. - offset_index = 0 - while stream.tell() < endpos: - # We are at the start of the CU block in the loclists now - cu_header = struct_parse(self.structs.Dwarf_loclists_CU_header, stream) - assert(cu_header.version == 5) - - # GNU binutils supports two traversal modes: by offsets in CU header, and sequential. - # We don't have a binary for the former yet. On an off chance that we one day might, - # let's parse the header anyway. - - cu_end_offset: int = cu_header.offset_after_length + cu_header.unit_length - # Unit_length includes the header but doesn't include the length - - while stream.tell() < cu_end_offset: - # Skip the gap to the next object - next_offset = sorted_offsets[offset_index] - if next_offset == stream.tell(): # At an object, either a loc list or a loc view pair - locview_pairs = self._parse_locview_pairs(locviews) - entries = self._parse_location_list_from_stream_v5(cu_map[stream.tell()]) - yield locview_pairs + entries - offset_index += 1 - else: # We are at a gap - skip the gap to the next object or to the next CU - if next_offset > cu_end_offset: # Gap at the CU end - the next object is in the next CU - next_offset = cu_end_offset # And implicitly quit the loop within the CU - stream.seek(next_offset, os.SEEK_SET) - else: - for offset in sorted_offsets: - list_offset = locviews.get(offset, offset) - if cu_map[list_offset].header.version < 5: - stream.seek(offset, os.SEEK_SET) - locview_pairs = self._parse_locview_pairs(locviews) - entries = self._parse_location_list_from_stream() - yield locview_pairs + entries - - def iter_CUs(self) -> Iterator[CompileUnit]: - """For DWARF5 returns an array of objects, where each one has an array of offsets - """ - if self.version < 5: - raise DWARFError("CU iteration in loclists is not supported with DWARF<5") - - assert self.dwarfinfo is not None - structs = next(self.dwarfinfo.iter_CUs()).structs # Just pick one - return _iter_CUs_in_section(self.stream, structs, structs.Dwarf_loclists_CU_header) - - #------ PRIVATE ------# - - def _parse_location_list_from_stream(self) -> list[_Location]: - lst: list[_Location] = [] - while True: - entry_offset = self.stream.tell() - begin_offset: int = struct_parse( - self.structs.the_Dwarf_target_addr, self.stream) - end_offset: int = struct_parse( - self.structs.the_Dwarf_target_addr, self.stream) - if begin_offset == 0 and end_offset == 0: - # End of list - we're done. - break - elif begin_offset == self._max_addr: - # Base address selection entry - entry_length = self.stream.tell() - entry_offset - lst.append(BaseAddressEntry(entry_offset=entry_offset, entry_length=entry_length, base_address=end_offset)) - else: - # Location list entry - expr_len: int = struct_parse( - self.structs.the_Dwarf_uint16, self.stream) - loc_expr: list[int] = [struct_parse(self.structs.the_Dwarf_uint8, - self.stream) - for i in range(expr_len)] - entry_length = self.stream.tell() - entry_offset - lst.append(LocationEntry( - entry_offset=entry_offset, - entry_length=entry_length, - begin_offset=begin_offset, - end_offset=end_offset, - loc_expr=loc_expr, - is_absolute = False)) - return lst - - def _parse_location_list_from_stream_v5( - self, - cu: CompileUnit | TypeUnit | None = None, - ) -> list[_Location]: - """ Returns an array with BaseAddressEntry and LocationEntry. - No terminator entries. - - The cu argument is necessary if the section is a - DWARFv5 debug_loclists one, and the target loclist - contains indirect encodings. - """ - return [entry_translate[entry.entry_type](entry, cu) # type: ignore[arg-type] # ty: ignore[invalid-argument-type] - for entry - in struct_parse(self.structs.Dwarf_loclists_entries, self.stream)] - - # From V5 style entries to a LocationEntry/BaseAddressEntry - def _translate_entry_v5(self, entry: Container, die: DIE) -> _Location: - off: int = entry.entry_offset - len: int = entry.entry_end_offset - off - type: str = entry.entry_type - if type == 'DW_LLE_base_address': - return BaseAddressEntry(off, len, entry.address) - elif type == 'DW_LLE_offset_pair': - return LocationEntry(off, len, entry.start_offset, entry.end_offset, entry.loc_expr, False) - elif type == 'DW_LLE_start_length': - return LocationEntry(off, len, entry.start_address, entry.start_address + entry.length, entry.loc_expr, True) - elif type == 'DW_LLE_start_end': # No test for this yet, but the format seems straightforward - return LocationEntry(off, len, entry.start_address, entry.end_address, entry.loc_expr, True) - elif type == 'DW_LLE_default_location': # No test for this either, and this is new in the API - return LocationEntry(off, len, -1, -1, entry.loc_expr, True) - elif type in ('DW_LLE_base_addressx', 'DW_LLE_startx_endx', 'DW_LLE_startx_length'): - # We don't have sample binaries for those LLEs. Their proper parsing would - # require knowing the CU context (so that indices can be resolved to code offsets) - raise NotImplementedError("Location list entry type %s is not supported yet" % (type,)) - else: - raise DWARFError(False, "Unknown DW_LLE code: %s" % (type,)) - - # Locviews is the dict, mapping locview offsets to corresponding loclist offsets - def _parse_locview_pairs(self, locviews: Mapping[int, int]) -> list[LocationViewPair]: - stream = self.stream - list_offset: int | None = locviews.get(stream.tell(), None) - pairs: list[LocationViewPair] = [] - if list_offset is not None: - while stream.tell() < list_offset: - pair = struct_parse(self.structs.Dwarf_locview_pair, stream) - pairs.append(LocationViewPair(pair.entry_offset, pair.begin, pair.end)) - assert(stream.tell() == list_offset) - return pairs - -class LocationParser: - """ A parser for location information in DIEs. - Handles both location information contained within the attribute - itself (represented as a LocationExpr object) and references to - location lists in the .debug_loc section (represented as a - list). - """ - def __init__(self, location_lists: LocationLists | LocationListsPair | None) -> None: - self.location_lists = location_lists - - @staticmethod - def attribute_has_location(attr: AttributeValue, dwarf_version: int) -> bool: - """ Checks if a DIE attribute contains location information. - """ - return (LocationParser._attribute_is_loclistptr_class(attr) and - (LocationParser._attribute_has_loc_expr(attr, dwarf_version) or - LocationParser._attribute_has_loc_list(attr, dwarf_version))) - - def parse_from_attribute( - self, - attr: AttributeValue, - dwarf_version: int, - die: DIE | None = None, - ) -> LocationExpr | list[_Location]: - """ Parses a DIE attribute and returns either a LocationExpr or - a list. - """ - if self.attribute_has_location(attr, dwarf_version): - if self._attribute_has_loc_expr(attr, dwarf_version): - return LocationExpr(attr.value) - elif self._attribute_has_loc_list(attr, dwarf_version): - assert self.location_lists is not None - return self.location_lists.get_location_list_at_offset( - attr.value, die) - # We don't yet know if the DIE context will be needed. - # We might get it without a full tree traversal using - # attr.offset as a key, but we assume a good DWARF5 - # aware consumer would pass a DIE along. - raise ValueError("Attribute does not have location information") - - #------ PRIVATE ------# - - @staticmethod - def _attribute_has_loc_expr(attr: AttributeValue, dwarf_version: int) -> bool: - return ((dwarf_version < 4 and attr.form.startswith('DW_FORM_block') and - not attr.name == 'DW_AT_const_value') or - attr.form == 'DW_FORM_exprloc') - - @staticmethod - def _attribute_has_loc_list(attr: AttributeValue, dwarf_version: int) -> bool: - return (((dwarf_version < 4 and - attr.form in ('DW_FORM_data1', 'DW_FORM_data2', 'DW_FORM_data4', 'DW_FORM_data8') and - not attr.name == 'DW_AT_const_value') or - attr.form in ('DW_FORM_sec_offset', 'DW_FORM_loclistx')) and - not LocationParser._attribute_is_constant(attr, dwarf_version)) - - # Starting with DWARF3, DW_AT_data_member_location may contain an integer offset - # instead of a location expression. Need to prevent false positives on attribute_has_location(). - # As for DW_AT_upper_bound/DW_AT_count, we've seen it in form DW_FORM_locexpr in a V5 binary. usually it's a constant, - # but the constant sholdn't be misinterpreted as a loclist pointer. - @staticmethod - def _attribute_is_constant(attr: AttributeValue, dwarf_version: int) -> bool: - return (((dwarf_version >= 3 and attr.name == 'DW_AT_data_member_location') or - (attr.name in ('DW_AT_upper_bound', 'DW_AT_count'))) and - attr.form in ('DW_FORM_data1', 'DW_FORM_data2', 'DW_FORM_data4', 'DW_FORM_data8', 'DW_FORM_sdata', 'DW_FORM_udata')) - - @staticmethod - def _attribute_is_loclistptr_class(attr: AttributeValue) -> bool: - return (attr.name in ( 'DW_AT_location', 'DW_AT_string_length', - 'DW_AT_const_value', 'DW_AT_return_addr', - 'DW_AT_data_member_location', - 'DW_AT_frame_base', 'DW_AT_segment', - 'DW_AT_static_link', 'DW_AT_use_location', - 'DW_AT_vtable_elem_location', - 'DW_AT_call_value', - 'DW_AT_GNU_call_site_value', - 'DW_AT_GNU_call_site_target', - 'DW_AT_GNU_call_site_data_value', - 'DW_AT_call_target', - 'DW_AT_call_target_clobbered', - 'DW_AT_call_data_location', - 'DW_AT_call_data_value', - 'DW_AT_upper_bound', - 'DW_AT_count')) diff --git a/.tools/python-revlibs/elftools/dwarf/namelut.py b/.tools/python-revlibs/elftools/dwarf/namelut.py deleted file mode 100644 index 2cbebb1..0000000 --- a/.tools/python-revlibs/elftools/dwarf/namelut.py +++ /dev/null @@ -1,201 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/namelut.py -# -# DWARF pubtypes/pubnames section decoding (.debug_pubtypes, .debug_pubnames) -# -# Vijay Ramasami (rvijayc@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from collections.abc import Mapping -from functools import cached_property -from typing import IO, TYPE_CHECKING, NamedTuple, TypeVar, overload - -from ..common.utils import struct_parse -from ..construct import CString, Struct, If - -if TYPE_CHECKING: - from collections.abc import ItemsView, Iterator - - from ..construct.lib.container import Container - from .structs import DWARFStructs - - _T = TypeVar("_T") - - -class NameLUTEntry(NamedTuple): - cu_ofs: int - die_ofs: int - - -class NameLUT(Mapping[str, NameLUTEntry]): - """ - A "Name LUT" holds any of the tables specified by .debug_pubtypes or - .debug_pubnames sections. This is basically a dictionary where the key is - the symbol name (either a public variable, function or a type), and the - value is the tuple (cu_offset, die_offset) corresponding to the variable. - The die_offset is an absolute offset (meaning, it can be used to search the - CU by iterating until a match is obtained). - - An ordered dictionary is used to preserve the CU order (i.e, items are - stored on a per-CU basis (as it was originally in the .debug_* section). - - Usage: - - The NameLUT walks and talks like a dictionary and hence it can be used as - such. Some examples below: - - # get the pubnames (a NameLUT from DWARF info). - pubnames = dwarf_info.get_pubnames() - - # lookup a variable. - entry1 = pubnames["var_name1"] - entry2 = pubnames.get("var_name2", default=) - print(entry2.cu_ofs) - ... - - # iterate over items. - for (name, entry) in pubnames.items(): - # do stuff with name, entry.cu_ofs, entry.die_ofs - - # iterate over items on a per-CU basis. - import itertools - for cu_ofs, item_list in itertools.groupby(pubnames.items(), - key = lambda x: x[1].cu_ofs): - # items are now grouped by cu_ofs. - # item_list is an iterator yeilding NameLUTEntry'ies belonging - # to cu_ofs. - # We can parse the CU at cu_offset and use the parsed CU results - # to parse the pubname DIEs in the CU listed by item_list. - for item in item_list: - # work with item which is part of the CU with cu_ofs. - - """ - - def __init__(self, stream: IO[bytes], size: int, structs: DWARFStructs) -> None: - self._stream = stream - self._size = size - self._structs = structs - - def get_entries(self) -> dict[str, NameLUTEntry]: - """ - Returns the parsed NameLUT entries. The returned object is a dictionary - with the symbol name as the key and NameLUTEntry(cu_ofs, die_ofs) as - the value. - - This is useful when dealing with very large ELF files with millions of - entries. The returned entries can be pickled to a file and restored by - calling set_entries on subsequent loads. - """ - return self._entries - - def set_entries(self, entries: dict[str, NameLUTEntry], cu_headers: list[Container]) -> None: - """ - Set the NameLUT entries from an external source. The input is a - dictionary with the symbol name as the key and NameLUTEntry(cu_ofs, - die_ofs) as the value. - - This option is useful when dealing with very large ELF files with - millions of entries. The entries can be parsed once and pickled to a - file and can be restored via this function on subsequent loads. - """ - self._entries = entries - self._cu_headers = cu_headers - - def __len__(self) -> int: - """ - Returns the number of entries in the NameLUT. - """ - return len(self._entries) - - def __getitem__(self, name: str) -> NameLUTEntry: - """ - Returns a namedtuple - NameLUTEntry(cu_ofs, die_ofs) - that corresponds - to the given symbol name. - """ - return self._entries[name] - - def __iter__(self) -> Iterator[str]: - """ - Returns an iterator to the NameLUT dictionary. - """ - return iter(self._entries) - - def items(self) -> ItemsView[str, NameLUTEntry]: - """ - Returns the NameLUT dictionary items. - """ - return self._entries.items() - - @overload - def get(self, name: str) -> NameLUTEntry | None: ... - @overload - def get(self, name: str, default: NameLUTEntry | _T = ...) -> NameLUTEntry | _T: ... - def get(self, name: str, default: NameLUTEntry | _T | None = None) -> NameLUTEntry | _T | None: - """ - Returns NameLUTEntry(cu_ofs, die_ofs) for the provided symbol name or - None if the symbol does not exist in the corresponding section. - """ - return self._entries.get(name, default) - - def get_cu_headers(self) -> list[Container]: - """ - Returns all CU headers. Mainly required for readelf. - """ - return self._cu_headers - - @cached_property - def _entries(self) -> dict[str, NameLUTEntry]: - return self.__entries[0] - - @cached_property - def _cu_headers(self) -> list[Container]: - return self.__entries[1] - - @cached_property - def __entries(self) -> tuple[dict[str, NameLUTEntry], list[Container]]: - """ - Parse the (name, cu_ofs, die_ofs) information from this section. - """ - self._stream.seek(0) - entries: dict[str, NameLUTEntry] = {} - cu_headers: list[Container] = [] - offset = 0 - # According to 6.1.1. of DWARFv4, each set of names is terminated by - # an offset field containing zero (and no following string). Because - # of sequential parsing, every next entry may be that terminator. - # So, field "name" is conditional. - entry_struct = Struct("Dwarf_offset_name_pair", - self._structs.Dwarf_offset('die_ofs'), - If(lambda ctx: ctx['die_ofs'], CString('name'))) - - # each run of this loop will fetch one CU worth of entries. - while offset < self._size: - - # read the header for this CU. - namelut_hdr = struct_parse(self._structs.Dwarf_nameLUT_header, - self._stream, offset) - cu_headers.append(namelut_hdr) - # compute the next offset. - offset = (offset + namelut_hdr.unit_length + - self._structs.initial_length_field_size()) - - # before inner loop, latch data that will be used in the inner - # loop to avoid attribute access and other computation. - hdr_cu_ofs = namelut_hdr.debug_info_offset - - # while die_ofs of the entry is non-zero (which indicates the end) ... - while True: - entry = struct_parse(entry_struct, self._stream) - - # if it is zero, this is the terminating record. - if entry.die_ofs == 0: - break - # add this entry to the look-up dictionary. - entries[entry.name.decode('utf-8')] = NameLUTEntry( - cu_ofs = hdr_cu_ofs, - die_ofs = hdr_cu_ofs + entry.die_ofs) - - # return the entries parsed so far. - return (entries, cu_headers) diff --git a/.tools/python-revlibs/elftools/dwarf/ranges.py b/.tools/python-revlibs/elftools/dwarf/ranges.py deleted file mode 100644 index 677013d..0000000 --- a/.tools/python-revlibs/elftools/dwarf/ranges.py +++ /dev/null @@ -1,252 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/ranges.py -# -# DWARF ranges section decoding (.debug_ranges) -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -import os -from typing import IO, TYPE_CHECKING, NamedTuple, NoReturn - -from ..common.utils import struct_parse -from ..common.exceptions import DWARFError -from .dwarf_util import _iter_CUs_in_section - -if TYPE_CHECKING: - from collections.abc import Callable, Iterator - - from ..construct.lib.container import Container - from .compileunit import CompileUnit - from .dwarfinfo import DWARFInfo - from .structs import DWARFStructs - - -class RangeEntry(NamedTuple): - entry_offset: int - entry_length: int - begin_offset: int - end_offset: int - is_absolute: bool - - -class BaseAddressEntry(NamedTuple): - entry_offset: int - base_address: int - -# If we ever see a list with a base entry at the end, there will be an error that entry_length is not a field. - -def _translate_startx_length(e: Container, cu: CompileUnit) -> RangeEntry: - start_offset = cu.dwarfinfo.get_addr(cu, e.start_index) - return RangeEntry(e.entry_offset, e.entry_length, start_offset, start_offset + e.length, True) - -# Maps parsed entry types to RangeEntry/BaseAddressEntry objects -entry_translate: dict[str, Callable[[Container, CompileUnit], RangeEntry | BaseAddressEntry]] = { - 'DW_RLE_base_address' : lambda e, cu: BaseAddressEntry(e.entry_offset, e.address), - 'DW_RLE_offset_pair' : lambda e, cu: RangeEntry(e.entry_offset, e.entry_length, e.start_offset, e.end_offset, False), - 'DW_RLE_start_end' : lambda e, cu: RangeEntry(e.entry_offset, e.entry_length, e.start_address, e.end_address, True), - 'DW_RLE_start_length' : lambda e, cu: RangeEntry(e.entry_offset, e.entry_length, e.start_address, e.start_address + e.length, True), - 'DW_RLE_base_addressx': lambda e, cu: BaseAddressEntry(e.entry_offset, cu.dwarfinfo.get_addr(cu, e.index)), # type: ignore[has-type] - 'DW_RLE_startx_endx' : lambda e, cu: RangeEntry(e.entry_offset, e.entry_length, cu.dwarfinfo.get_addr(cu, e.start_index), cu.dwarfinfo.get_addr(cu, e.end_index), True), # type: ignore[has-type] - 'DW_RLE_startx_length': _translate_startx_length -} - -class RangeListsPair: - """For those binaries that contain both a debug_ranges and a debug_rnglists section, - it holds a RangeLists object for both and forwards API calls to the right one based - on the CU version. - """ - def __init__( - self, - streamv4: IO[bytes], - streamv5: IO[bytes], - structs: DWARFStructs, - dwarfinfo: DWARFInfo | None = None, - ) -> None: - self._ranges = RangeLists(streamv4, structs, 4, dwarfinfo) - self._rnglists = RangeLists(streamv5, structs, 5, dwarfinfo) - - def get_range_list_at_offset( - self, - offset: int, - cu: CompileUnit | None = None, - ) -> list[RangeEntry | BaseAddressEntry]: - """Forwards the call to either v4 section or v5 one, - depending on DWARF version in the CU. - """ - if cu is None: - raise DWARFError("For this binary, \"cu\" needs to be provided") - section = self._rnglists if cu.header.version >= 5 else self._ranges - return section.get_range_list_at_offset(offset, cu) - - def get_range_list_at_offset_ex(self, offset: int) -> Container: - """Gets an untranslated v5 rangelist from the v5 section. - """ - return self._rnglists.get_range_list_at_offset_ex(offset) - - def iter_range_lists(self) -> NoReturn: - """Tricky proposition, since the structure of ranges and rnglists - is not identical. A realistic readelf implementation needs to be aware of both. - """ - raise DWARFError("Iterating through two sections is not supported") - - def iter_CUs(self) -> Iterator[CompileUnit]: - """See RangeLists.iter_CUs() - - CU structure is only present in DWARFv5 rnglists sections. A well written - section dumper should check if one is present. - """ - return self._rnglists.iter_CUs() - - def iter_CU_range_lists_ex(self, cu: Container) -> Iterator[CompileUnit]: - """See RangeLists.iter_CU_range_lists_ex() - - CU structure is only present in DWARFv5 rnglists sections. A well written - section dumper should check if one is present. - """ - return self._rnglists.iter_CU_range_lists_ex(cu) - - def translate_v5_entry( - self, - entry: Container, - cu: CompileUnit, - ) -> RangeEntry | BaseAddressEntry: - """Forwards a V5 entry translation request to the V5 section - """ - return self._rnglists.translate_v5_entry(entry, cu) - -class RangeLists: - """ A single range list is a Python list consisting of RangeEntry or - BaseAddressEntry objects. - - Since v0.29, two new parameters - version and dwarfinfo - - version is used to distinguish DWARFv5 rnglists section from - the DWARF<=4 ranges section. Only the 4/5 distinction matters. - - The dwarfinfo is needed for enumeration, because enumeration - requires scanning the DIEs, because ranges may overlap, even on DWARF<=4 - """ - def __init__( - self, - stream: IO[bytes], - structs: DWARFStructs, - version: int, - dwarfinfo: DWARFInfo | None, - ) -> None: - self.stream = stream - self.structs = structs - self._max_addr = 2 ** (self.structs.address_size * 8) - 1 - self.version = version - self._dwarfinfo = dwarfinfo - - def get_range_list_at_offset( - self, - offset: int, - cu: CompileUnit | None = None, - ) -> list[RangeEntry | BaseAddressEntry]: - """ Get a range list at the given offset in the section. - - The cu argument is necessary if the ranges section is a - DWARFv5 debug_rnglists one, and the target rangelist - contains indirect encodings - """ - self.stream.seek(offset, os.SEEK_SET) - return self._parse_range_list_from_stream(cu) - - def get_range_list_at_offset_ex(self, offset: int) -> Container: - """Get a DWARF v5 range list, addresses and offsets unresolved, - at the given offset in the section - """ - return struct_parse(self.structs.Dwarf_rnglists_entries, self.stream, offset) - - def iter_range_lists(self) -> Iterator[list[RangeEntry | BaseAddressEntry]]: - """ Yields all range lists found in the section according to readelf rules. - Scans the DIEs for rangelist offsets, then pulls those. - Returned rangelists are always translated into lists of BaseAddressEntry/RangeEntry objects. - """ - # Rangelists can overlap. That is, one DIE points at the rangelist beginning, and another - # points at the middle of the same. Therefore, enumerating them is not a well defined - # operation - do you count those as two different (but overlapping) ones, or as a single one? - # For debugging utility, you want two. That's what readelf does. For faithfully - # representing the section contents, you want one. - # That was the behaviour of pyelftools 0.28 and below - calling - # parse until the stream end. Leaving aside the question of correctless, - # that's uncompatible with readelf. - - ver5 = self.version >= 5 - # This maps list offset to CU - cu_map = {die.attributes['DW_AT_ranges'].value : cu - for cu in self._dwarfinfo.iter_CUs() # type: ignore[union-attr] # ty: ignore[unresolved-attribute] - for die in cu.iter_DIEs() - if 'DW_AT_ranges' in die.attributes and (cu['version'] >= 5) == ver5} - all_offsets = list(cu_map.keys()) - all_offsets.sort() - - for offset in all_offsets: - yield self.get_range_list_at_offset(offset, cu_map[offset]) - - def iter_CUs(self) -> Iterator[CompileUnit]: - """For DWARF5 returns an array of objects, where each one has an array of offsets - """ - if self.version < 5: - raise DWARFError("CU iteration in rnglists is not supported with DWARF<5") - - assert self._dwarfinfo is not None - structs = next(self._dwarfinfo.iter_CUs()).structs # Just pick one - return _iter_CUs_in_section(self.stream, structs, structs.Dwarf_rnglists_CU_header) - - def iter_CU_range_lists_ex(self, cu: Container) -> Iterator[CompileUnit]: - """For DWARF5, returns untranslated rangelists in the CU, where CU comes from iter_CUs above - """ - stream = self.stream - stream.seek(cu.offset_table_offset + (64 if cu.is64 else 32) * cu.offset_count) - while stream.tell() < cu.offset_after_length + cu.unit_length: - yield struct_parse(self.structs.Dwarf_rnglists_entries, stream) - - def translate_v5_entry( - self, - entry: Container, - cu: CompileUnit, - ) -> RangeEntry | BaseAddressEntry: - """Translates entries in a DWARFv5 rangelist from raw parsed format to - a list of BaseAddressEntry/RangeEntry, using the CU - """ - return entry_translate[entry.entry_type](entry, cu) - - #------ PRIVATE ------# - - def _parse_range_list_from_stream( - self, - cu: CompileUnit | None, - ) -> list[RangeEntry | BaseAddressEntry]: - if self.version >= 5: - assert cu is not None - return list(entry_translate[entry.entry_type](entry, cu) - for entry - in struct_parse(self.structs.Dwarf_rnglists_entries, self.stream)) - else: - lst: list[RangeEntry | BaseAddressEntry] = [] - while True: - entry_offset = self.stream.tell() - begin_offset = struct_parse( - self.structs.the_Dwarf_target_addr, self.stream) - end_offset = struct_parse( - self.structs.the_Dwarf_target_addr, self.stream) - if begin_offset == 0 and end_offset == 0: - # End of list - we're done. - break - elif begin_offset == self._max_addr: - # Base address selection entry - lst.append(BaseAddressEntry(entry_offset=entry_offset, base_address=end_offset)) - else: - # Range entry - lst.append(RangeEntry( - entry_offset=entry_offset, - entry_length=self.stream.tell() - entry_offset, - begin_offset=begin_offset, - end_offset=end_offset, - is_absolute=False)) - return lst diff --git a/.tools/python-revlibs/elftools/dwarf/structs.py b/.tools/python-revlibs/elftools/dwarf/structs.py deleted file mode 100644 index 5ba5cf9..0000000 --- a/.tools/python-revlibs/elftools/dwarf/structs.py +++ /dev/null @@ -1,603 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/structs.py -# -# Encapsulation of Construct structs for parsing DWARF, adjusted for correct -# endianness and word-size. -# -# Eli Bendersky (eliben@gmail.com) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import IO, TYPE_CHECKING, Any, ClassVar - -import elftools.dwarf.enums as e -from ..construct import ( - UBInt8, UBInt16, UBInt32, UBInt64, ULInt8, ULInt16, ULInt32, ULInt64, - SBInt8, SBInt16, SBInt32, SBInt64, SLInt8, SLInt16, SLInt32, SLInt64, - Adapter, Struct, ConstructError, If, Enum, Array, PrefixedArray, - CString, Embed, StaticField, IfThenElse, Construct, Rename, String, Switch, Value - ) -from ..common.construct_utils import (RepeatUntilExcluding, ULEB128, SLEB128, - StreamOffset, ULInt24, UBInt24) - -if TYPE_CHECKING: - from collections.abc import Callable - - from typing_extensions import Self # 3.11+ - - from ..construct.adapters import LengthValueAdapter - from ..construct.lib.container import Container - - -class DWARFStructs: - """ Exposes Construct structs suitable for parsing information from DWARF - sections. Each compile unit in DWARF info can have its own structs - object. Keep in mind that these structs have to be given a name (by - calling them with a name) before being used for parsing (like other - Construct structs). Those that should be used without a name are marked - by (+). - - Accessible attributes (mostly as described in chapter 7 of the DWARF - spec v3): - - Dwarf_[u]int{8,16,32,64): - Data chunks of the common sizes - - Dwarf_offset: - 32-bit or 64-bit word, depending on dwarf_format - - Dwarf_length: - 32-bit or 64-bit word, depending on dwarf_format - - Dwarf_target_addr: - 32-bit or 64-bit word, depending on address size - - Dwarf_initial_length: - "Initial length field" encoding - section 7.4 - - Dwarf_{u,s}leb128: - ULEB128 and SLEB128 variable-length encoding - - Dwarf_CU_header (+): - Compilation unit header - - Dwarf_TU_header (+): - Type unit header - - Dwarf_abbrev_declaration (+): - Abbreviation table declaration - doesn't include the initial - code, only the contents. - - Dwarf_dw_form (+): - A dictionary mapping 'DW_FORM_*' keys into construct Structs - that parse such forms. These Structs have already been given - dummy names. - - Dwarf_lineprog_header (+): - Line program header - - Dwarf_lineprog_file_entry (+): - A single file entry in a line program header or instruction - - Dwarf_CIE_header (+): - A call-frame CIE - - Dwarf_FDE_header (+): - A call-frame FDE - - See also the documentation of public methods. - """ - - if TYPE_CHECKING: - # type hints for dynamically defined class variables - little_endian: bool - dwarf_format: int - address_size: int - dwarf_version: int - - # Cache for structs instances based on creation parameters. Structs - # initialization is expensive and we don't won't to repeat it - # unnecessarily. - _structs_cache: ClassVar[dict[tuple[bool, int, int, int], Self]] = {} - - def __new__( - cls, - little_endian: bool, - dwarf_format: int, - address_size: int, - dwarf_version: int = 2, - ) -> Self: - """ dwarf_version: - Numeric DWARF version - - little_endian: - True if the file is little endian, False if big - - dwarf_format: - DWARF Format: 32 or 64-bit (see spec section 7.4) - - address_size: - Target machine address size, in bytes (4 or 8). (See spec - section 7.5.1) - """ - key = (little_endian, dwarf_format, address_size, dwarf_version) - - if key in cls._structs_cache: - return cls._structs_cache[key] - - self = super().__new__(cls) - assert dwarf_format == 32 or dwarf_format == 64 - assert address_size == 8 or address_size == 4, str(address_size) - self.little_endian = little_endian - self.dwarf_format = dwarf_format - self.address_size = address_size - self.dwarf_version = dwarf_version - self._create_structs() - cls._structs_cache[key] = self - return self - - def initial_length_field_size(self) -> int: - """ Size of an initial length field. - """ - return 4 if self.dwarf_format == 32 else 12 - - def _create_structs(self) -> None: - if self.little_endian: - self.Dwarf_uint8 = ULInt8 - self.Dwarf_uint16 = ULInt16 - self.Dwarf_uint24: type[ULInt24 | UBInt24] = ULInt24 - self.Dwarf_uint32 = ULInt32 - self.Dwarf_uint64 = ULInt64 - self.Dwarf_offset = ULInt32 if self.dwarf_format == 32 else ULInt64 - self.Dwarf_length = ULInt32 if self.dwarf_format == 32 else ULInt64 - self.Dwarf_target_addr = ( - ULInt32 if self.address_size == 4 else ULInt64) - self.Dwarf_int8 = SLInt8 - self.Dwarf_int16 = SLInt16 - self.Dwarf_int32 = SLInt32 - self.Dwarf_int64 = SLInt64 - else: - self.Dwarf_uint8 = UBInt8 - self.Dwarf_uint16 = UBInt16 - self.Dwarf_uint24 = UBInt24 - self.Dwarf_uint32 = UBInt32 - self.Dwarf_uint64 = UBInt64 - self.Dwarf_offset = UBInt32 if self.dwarf_format == 32 else UBInt64 - self.Dwarf_length = UBInt32 if self.dwarf_format == 32 else UBInt64 - self.Dwarf_target_addr = ( - UBInt32 if self.address_size == 4 else UBInt64) - self.Dwarf_int8 = SBInt8 - self.Dwarf_int16 = SBInt16 - self.Dwarf_int32 = SBInt32 - self.Dwarf_int64 = SBInt64 - - # Only instantiate those parsers that are used standalone, - # as opposed to dispatch tables (e. g. forms, opcodes). - # In dispatch tables, they are instantiated already. - # LEB128 parsers are instantiated too, elsewhere. - self.the_Dwarf_offset = self.Dwarf_offset('') - self.the_Dwarf_target_addr = self.Dwarf_target_addr('') - self.the_Dwarf_uint32 = self.Dwarf_uint32('') - self.the_Dwarf_uint16 = self.Dwarf_uint16('') - self.the_Dwarf_uint8 = self.Dwarf_uint8('') - - self._create_initial_length() - self._create_leb128() - self._create_cu_header() - self._create_tu_header() - self._create_abbrev_declaration() - self._create_dw_form() - self._create_lineprog_header() - self._create_callframe_entry_headers() - self._create_aranges_header() - self._create_nameLUT_header() - self._create_string_offsets_table_header() - self._create_address_table_header() - self._create_loclists_parsers() - self._create_rnglists_parsers() - - self._create_debugsup() - self._create_gnu_debugaltlink() - - def _create_initial_length(self) -> None: - - def _InitialLength(name: str) -> _InitialLengthAdapter: - # Adapts a Struct that parses forward a full initial length field. - # Only if the first word is the continuation value, the second - # word is parsed from the stream. - return _InitialLengthAdapter( - Struct(name, - self.Dwarf_uint32('first'), - If(lambda ctx: ctx.first == 0xFFFFFFFF, - self.Dwarf_uint64('second'), - elsevalue=None))) - - self.Dwarf_initial_length = _InitialLength - - def _create_leb128(self) -> None: - self.Dwarf_uleb128 = ULEB128 - self.Dwarf_sleb128 = SLEB128 - self.the_Dwarf_uleb128 = self.Dwarf_uleb128('') - self.the_Dwarf_sleb128 = self.Dwarf_sleb128('') - - def _create_cu_header(self) -> None: - dwarfv4_CU_header = Struct('', - self.Dwarf_offset('debug_abbrev_offset'), - self.Dwarf_uint8('address_size') - ) - # DWARFv5 reverses the order of address_size and debug_abbrev_offset. - # DWARFv5 7.5.1.1 - dwarfv5_CP_CU_header = Struct('', - self.Dwarf_uint8('address_size'), - self.Dwarf_offset('debug_abbrev_offset') - ) - # DWARFv5 7.5.1.2 - dwarfv5_SS_CU_header = Struct('', - self.Dwarf_uint8('address_size'), - self.Dwarf_offset('debug_abbrev_offset'), - self.Dwarf_uint64('dwo_id') - ) - # DWARFv5 7.5.1.3 - dwarfv5_TS_CU_header = Struct('', - self.Dwarf_uint8('address_size'), - self.Dwarf_offset('debug_abbrev_offset'), - self.Dwarf_uint64('type_signature'), - self.Dwarf_offset('type_offset') - ) - dwarfv5_CU_header = Struct('', - Enum(self.Dwarf_uint8('unit_type'), **e.ENUM_DW_UT), - Embed(Switch('', lambda ctx: ctx.unit_type, - { - 'DW_UT_compile' : dwarfv5_CP_CU_header, - 'DW_UT_partial' : dwarfv5_CP_CU_header, - 'DW_UT_skeleton' : dwarfv5_SS_CU_header, - 'DW_UT_split_compile' : dwarfv5_SS_CU_header, - 'DW_UT_type' : dwarfv5_TS_CU_header, - 'DW_UT_split_type' : dwarfv5_TS_CU_header, - }))) - self.Dwarf_CU_header = Struct('Dwarf_CU_header', - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - IfThenElse('', lambda ctx: ctx['version'] >= 5, - Embed(dwarfv5_CU_header), - Embed(dwarfv4_CU_header), - )) - - def _create_tu_header(self) -> None: - self.Dwarf_TU_header = Struct('Dwarf_TU_header', - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - self.Dwarf_offset('debug_abbrev_offset'), - self.Dwarf_uint8('address_size'), - self.Dwarf_uint64('signature'), - self.Dwarf_offset('type_offset')) - - def _create_abbrev_declaration(self) -> None: - self.Dwarf_abbrev_declaration = Struct('Dwarf_abbrev_entry', - Enum(self.Dwarf_uleb128('tag'), **e.ENUM_DW_TAG), - Enum(self.Dwarf_uint8('children_flag'), **e.ENUM_DW_CHILDREN), - RepeatUntilExcluding( - lambda obj, ctx: - obj.name == 'DW_AT_null' and obj.form == 'DW_FORM_null', - Struct('attr_spec', - Enum(self.Dwarf_uleb128('name'), **e.ENUM_DW_AT), - Enum(self.Dwarf_uleb128('form'), **e.ENUM_DW_FORM), - If(lambda ctx: ctx['form'] == 'DW_FORM_implicit_const', - self.Dwarf_sleb128('value'))))) - - def _create_debugsup(self) -> None: - # We don't care about checksums, for now. - self.Dwarf_debugsup = Struct('Elf_debugsup', - self.Dwarf_int16('version'), - self.Dwarf_uint8('is_supplementary'), - CString('sup_filename')) - - def _create_gnu_debugaltlink(self) -> None: - self.Dwarf_debugaltlink = Struct('Elf_debugaltlink', - CString("sup_filename"), - String("sup_checksum", length=20)) - - def _create_dw_form(self) -> None: - self.Dwarf_dw_form = dict( - DW_FORM_addr=self.the_Dwarf_target_addr, - DW_FORM_addrx=self.the_Dwarf_uleb128, - DW_FORM_addrx1=self.the_Dwarf_uint8, - DW_FORM_addrx2=self.the_Dwarf_uint16, - DW_FORM_addrx3=self.Dwarf_uint24(''), - DW_FORM_addrx4=self.the_Dwarf_uint32, - - DW_FORM_block1=self._make_block_struct(self.Dwarf_uint8), - DW_FORM_block2=self._make_block_struct(self.Dwarf_uint16), - DW_FORM_block4=self._make_block_struct(self.Dwarf_uint32), - DW_FORM_block=self._make_block_struct(self.Dwarf_uleb128), - - # All DW_FORM_data forms are assumed to be unsigned - DW_FORM_data1=self.the_Dwarf_uint8, - DW_FORM_data2=self.the_Dwarf_uint16, - DW_FORM_data4=self.the_Dwarf_uint32, - DW_FORM_data8=self.Dwarf_uint64(''), - DW_FORM_data16=Array(16, self.the_Dwarf_uint8), # Used for hashes and such, not for integers - DW_FORM_sdata=self.the_Dwarf_sleb128, - DW_FORM_udata=self.the_Dwarf_uleb128, - - DW_FORM_string=CString(''), - DW_FORM_strp=self.the_Dwarf_offset, - DW_FORM_strp_sup=self.the_Dwarf_offset, - DW_FORM_line_strp=self.the_Dwarf_offset, - DW_FORM_strx=self.the_Dwarf_uleb128, - DW_FORM_strx1=self.the_Dwarf_uint8, - DW_FORM_strx2=self.the_Dwarf_uint16, - DW_FORM_strx3=self.Dwarf_uint24(''), - DW_FORM_strx4=self.Dwarf_uint64(''), - DW_FORM_flag=self.the_Dwarf_uint8, - - DW_FORM_ref=self.the_Dwarf_uint32, - DW_FORM_ref1=self.the_Dwarf_uint8, - DW_FORM_ref2=self.the_Dwarf_uint16, - DW_FORM_ref4=self.the_Dwarf_uint32, - DW_FORM_ref_sup4=self.the_Dwarf_uint32, - DW_FORM_ref8=self.Dwarf_uint64(''), - DW_FORM_ref_sup8=self.Dwarf_uint64(''), - DW_FORM_ref_udata=self.the_Dwarf_uleb128, - DW_FORM_ref_addr=self.the_Dwarf_target_addr if self.dwarf_version == 2 else self.the_Dwarf_offset, - - DW_FORM_indirect=self.the_Dwarf_uleb128, - - # Treated separatedly while parsing, but here so that all forms resolve - DW_FORM_implicit_const=None, - - # New forms in DWARFv4 - DW_FORM_flag_present = StaticField('', 0), - DW_FORM_sec_offset = self.the_Dwarf_offset, - DW_FORM_exprloc = self._make_block_struct(self.Dwarf_uleb128), - DW_FORM_ref_sig8 = self.Dwarf_uint64(''), - - DW_FORM_GNU_strp_alt=self.the_Dwarf_offset, - DW_FORM_GNU_ref_alt=self.the_Dwarf_offset, - DW_AT_GNU_all_call_sites=self.the_Dwarf_uleb128, - - # New forms in DWARFv5 - DW_FORM_loclistx=self.the_Dwarf_uleb128, - DW_FORM_rnglistx=self.the_Dwarf_uleb128 - ) - - def _create_aranges_header(self) -> None: - self.Dwarf_aranges_header = Struct("Dwarf_aranges_header", - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - self.Dwarf_offset('debug_info_offset'), # a little tbd - self.Dwarf_uint8('address_size'), - self.Dwarf_uint8('segment_size') - ) - - def _create_nameLUT_header(self) -> None: - self.Dwarf_nameLUT_header = Struct("Dwarf_nameLUT_header", - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - self.Dwarf_offset('debug_info_offset'), - self.Dwarf_length('debug_info_length') - ) - - def _create_string_offsets_table_header(self) -> None: - self.Dwarf_string_offsets_table_header = Struct( - "Dwarf_string_offets_table_header", - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - self.Dwarf_uint16('padding'), - ) - - def _create_address_table_header(self) -> None: - self.Dwarf_address_table_header = Struct("Dwarf_address_table_header", - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - self.Dwarf_uint8('address_size'), - self.Dwarf_uint8('segment_selector_size'), - ) - - def _create_lineprog_header(self) -> None: - # A file entry is terminated by a NULL byte, so we don't want to parse - # past it. Therefore an If is used. - self.Dwarf_lineprog_file_entry = Struct('file_entry', - CString('name'), - If(lambda ctx: bool(ctx.name), - Embed(Struct('', - self.Dwarf_uleb128('dir_index'), - self.Dwarf_uleb128('mtime'), - self.Dwarf_uleb128('length'))))) - - class FormattedEntry(Construct): - # Generates a parser based on a previously parsed piece, - # similar to deprecared Dynamic. - # Strings are resolved later, since it potentially requires - # looking at another section. - def __init__(self, name: str, structs: DWARFStructs, format_field: str) -> None: - Construct.__init__(self, name) - self.structs = structs - self.format_field = format_field - - def _parse(self, stream: IO[bytes], context: Container) -> Any: - # Somewhat tricky technique here, explicitly writing back to the context - if self.format_field + "_parser" in context: - parser = context[self.format_field + "_parser"] - else: - fields = tuple( - Rename(f.content_type, self.structs.Dwarf_dw_form[f.form]) # type: ignore[arg-type] # ty: ignore[invalid-argument-type] - for f in context[self.format_field]) - parser = Struct('formatted_entry', *fields) - context[self.format_field + "_parser"] = parser - return parser._parse(stream, context) - - ver5 = lambda ctx: ctx.version >= 5 - - self.Dwarf_lineprog_header = Struct('Dwarf_lineprog_header', - self.Dwarf_initial_length('unit_length'), - self.Dwarf_uint16('version'), - If(ver5, - self.Dwarf_uint8("address_size"), - None), - If(ver5, - self.Dwarf_uint8("segment_selector_size"), - None), - self.Dwarf_offset('header_length'), - self.Dwarf_uint8('minimum_instruction_length'), - If(lambda ctx: ctx.version >= 4, - self.Dwarf_uint8("maximum_operations_per_instruction"), - 1), - self.Dwarf_uint8('default_is_stmt'), - self.Dwarf_int8('line_base'), - self.Dwarf_uint8('line_range'), - self.Dwarf_uint8('opcode_base'), - Array(lambda ctx: ctx.opcode_base - 1, - self.Dwarf_uint8('standard_opcode_lengths')), - If(ver5, - PrefixedArray( - Struct('directory_entry_format', - Enum(self.Dwarf_uleb128('content_type'), **e.ENUM_DW_LNCT), - Enum(self.Dwarf_uleb128('form'), **e.ENUM_DW_FORM)), - self.Dwarf_uint8("directory_entry_format_count"))), - If(ver5, # Name deliberately doesn't match the legacy object, since the format can't be made compatible - PrefixedArray( - FormattedEntry('directories', self, "directory_entry_format"), - self.Dwarf_uleb128('directories_count'))), - If(ver5, - PrefixedArray( - Struct('file_name_entry_format', - Enum(self.Dwarf_uleb128('content_type'), **e.ENUM_DW_LNCT), - Enum(self.Dwarf_uleb128('form'), **e.ENUM_DW_FORM)), - self.Dwarf_uint8("file_name_entry_format_count"))), - If(ver5, - PrefixedArray( - FormattedEntry('file_names', self, "file_name_entry_format"), - self.Dwarf_uleb128('file_names_count'))), - # Legacy directories/files - DWARF < 5 only - If(lambda ctx: ctx.version < 5, - RepeatUntilExcluding( - lambda obj, ctx: obj == b'', - CString('include_directory'))), - If(lambda ctx: ctx.version < 5, - RepeatUntilExcluding( - lambda obj, ctx: not obj.name, - self.Dwarf_lineprog_file_entry)) # array name is file_entry - ) - - def _create_callframe_entry_headers(self) -> None: - self.Dwarf_CIE_header = Struct('Dwarf_CIE_header', - self.Dwarf_initial_length('length'), - self.Dwarf_offset('CIE_id'), - self.Dwarf_uint8('version'), - CString('augmentation'), - If(lambda ctx: ctx.version >= 4, self.Dwarf_uint8('address_size')), - If(lambda ctx: ctx.version >= 4, self.Dwarf_uint8('segment_size')), - self.Dwarf_uleb128('code_alignment_factor'), - self.Dwarf_sleb128('data_alignment_factor'), - IfThenElse('return_address_register', lambda ctx: ctx.version > 1, - self.Dwarf_uleb128(''), - self.Dwarf_uint8(''))) - self.EH_CIE_header = self.Dwarf_CIE_header - - # The CIE header was modified in DWARFv4, but the - # CIE header version is driven by the version # in the header - # itself, independent of the DWARF version - # in the CUs. - - self.Dwarf_FDE_header = Struct('Dwarf_FDE_header', - self.Dwarf_initial_length('length'), - self.Dwarf_offset('CIE_pointer'), - self.Dwarf_target_addr('initial_location'), - self.Dwarf_target_addr('address_range')) - - def _make_block_struct(self, length_field: Callable[[str], Construct]) -> LengthValueAdapter: - """ Create a struct for DW_FORM_block - """ - return PrefixedArray( - subcon=self.Dwarf_uint8('elem'), - length_field=length_field('')) - - def _create_loclists_parsers(self) -> None: - """ Create a struct for debug_loclists CU header, DWARFv5, 7,29 - """ - self.Dwarf_loclists_CU_header = Struct('Dwarf_loclists_CU_header', - StreamOffset('cu_offset'), - self.Dwarf_initial_length('unit_length'), - Value('is64', lambda ctx: ctx.is64), - StreamOffset('offset_after_length'), - self.Dwarf_uint16('version'), - self.Dwarf_uint8('address_size'), - self.Dwarf_uint8('segment_selector_size'), - self.Dwarf_uint32('offset_count'), - StreamOffset('offset_table_offset')) - - cld = self.Dwarf_loclists_counted_location_description = PrefixedArray(self.Dwarf_uint8('loc_expr'), self.the_Dwarf_uleb128) - - self.Dwarf_loclists_entries = RepeatUntilExcluding( - lambda obj, ctx: obj.entry_type == 'DW_LLE_end_of_list', - Struct('entry', - StreamOffset('entry_offset'), - Enum(self.Dwarf_uint8('entry_type'), **e.ENUM_DW_LLE), - Embed(Switch('', lambda ctx: ctx.entry_type, - { - 'DW_LLE_end_of_list' : Struct('end_of_list'), - 'DW_LLE_base_addressx' : Struct('base_addressx', self.Dwarf_uleb128('index')), - 'DW_LLE_startx_endx' : Struct('startx_endx', self.Dwarf_uleb128('start_index'), self.Dwarf_uleb128('end_index'), cld), - 'DW_LLE_startx_length' : Struct('startx_endx', self.Dwarf_uleb128('start_index'), self.Dwarf_uleb128('length'), cld), - 'DW_LLE_offset_pair' : Struct('startx_endx', self.Dwarf_uleb128('start_offset'), self.Dwarf_uleb128('end_offset'), cld), - 'DW_LLE_default_location' : Struct('default_location', cld), - 'DW_LLE_base_address' : Struct('base_address', self.Dwarf_target_addr('address')), - 'DW_LLE_start_end' : Struct('start_end', self.Dwarf_target_addr('start_address'), self.Dwarf_target_addr('end_address'), cld), - 'DW_LLE_start_length' : Struct('start_length', self.Dwarf_target_addr('start_address'), self.Dwarf_uleb128('length'), cld), - })), - StreamOffset('entry_end_offset'), - Value('entry_length', lambda ctx: ctx.entry_end_offset - ctx.entry_offset))) - - self.Dwarf_locview_pair = Struct('locview_pair', - StreamOffset('entry_offset'), self.Dwarf_uleb128('begin'), self.Dwarf_uleb128('end')) - - def _create_rnglists_parsers(self) -> None: - self.Dwarf_rnglists_CU_header = Struct('Dwarf_rnglists_CU_header', - StreamOffset('cu_offset'), - self.Dwarf_initial_length('unit_length'), - Value('is64', lambda ctx: ctx.is64), - StreamOffset('offset_after_length'), - self.Dwarf_uint16('version'), - self.Dwarf_uint8('address_size'), - self.Dwarf_uint8('segment_selector_size'), - self.Dwarf_uint32('offset_count'), - StreamOffset('offset_table_offset')) - - self.Dwarf_rnglists_entries = RepeatUntilExcluding( - lambda obj, ctx: obj.entry_type == 'DW_RLE_end_of_list', - Struct('entry', - StreamOffset('entry_offset'), - Enum(self.Dwarf_uint8('entry_type'), **e.ENUM_DW_RLE), - Embed(Switch('', lambda ctx: ctx.entry_type, - { - 'DW_RLE_end_of_list' : Struct('end_of_list'), - 'DW_RLE_base_addressx' : Struct('base_addressx', self.Dwarf_uleb128('index')), - 'DW_RLE_startx_endx' : Struct('startx_endx', self.Dwarf_uleb128('start_index'), self.Dwarf_uleb128('end_index')), - 'DW_RLE_startx_length' : Struct('startx_endx', self.Dwarf_uleb128('start_index'), self.Dwarf_uleb128('length')), - 'DW_RLE_offset_pair' : Struct('startx_endx', self.Dwarf_uleb128('start_offset'), self.Dwarf_uleb128('end_offset')), - 'DW_RLE_base_address' : Struct('base_address', self.Dwarf_target_addr('address')), - 'DW_RLE_start_end' : Struct('start_end', self.Dwarf_target_addr('start_address'), self.Dwarf_target_addr('end_address')), - 'DW_RLE_start_length' : Struct('start_length', self.Dwarf_target_addr('start_address'), self.Dwarf_uleb128('length')) - })), - StreamOffset('entry_end_offset'), - Value('entry_length', lambda ctx: ctx.entry_end_offset - ctx.entry_offset))) - - -class _InitialLengthAdapter(Adapter): - """ A standard Construct adapter that expects a sub-construct - as a struct with one or two values (first, second). - """ - def _decode(self, obj: Container, context: Container) -> int: - if obj.first < 0xFFFFFF00: - context['is64'] = False - return obj.first - else: - if obj.first == 0xFFFFFFFF: - context['is64'] = True - return obj.second - else: - raise ConstructError("Failed decoding initial length for %X" % ( - obj.first)) diff --git a/.tools/python-revlibs/elftools/dwarf/typeunit.py b/.tools/python-revlibs/elftools/dwarf/typeunit.py deleted file mode 100644 index 1076c8e..0000000 --- a/.tools/python-revlibs/elftools/dwarf/typeunit.py +++ /dev/null @@ -1,278 +0,0 @@ -#------------------------------------------------------------------------------- -# elftools: dwarf/typeunit.py -# -# DWARF type unit -# -# Dinkar Khandalekar (contact@dinkar.dev) -# This code is in the public domain -#------------------------------------------------------------------------------- -from __future__ import annotations - -from bisect import bisect_right -from functools import cached_property -from typing import TYPE_CHECKING, Any - -from .die import DIE -from ..common.utils import dwarf_assert - -if TYPE_CHECKING: - from collections.abc import Iterator - - from ..construct.lib.container import Container - from .abbrevtable import AbbrevTable - from .dwarfinfo import DWARFInfo - from .structs import DWARFStructs - - -class TypeUnit: - """ A DWARF type unit (TU). - - A type unit contains type definition entries that can be used to - reference to type definition for debugging information entries in - other compilation units and type units. Each type unit must be uniquely - identified by a 64-bit signature. (DWARFv4 section 3.1.3) - - Type units are stored in the .debug_types section. This section was - introduced by the DWARFv4 standard (and removed in the DWARFv5 standard; - the underlying type units were relocated to the .debug_info - section - DWARFv5 section 1.4) - - Serves as a container and context to DIEs that describe type definitions - referenced from compilation units and other type units. - - TU header entries can be accessed as dict keys from this object, i.e. - tu = TypeUnit(...) - tu['version'] # version field of the TU header - - To get the top-level DIE describing the type unit, call the - get_top_DIE method. - """ - def __init__( - self, - header: Container, - dwarfinfo: DWARFInfo, - structs: DWARFStructs, - tu_offset: int, - tu_die_offset: int, - ) -> None: - """ header: - TU header for this type unit - - dwarfinfo: - The DWARFInfo context object which created this one - - structs: - A DWARFStructs instance suitable for this type unit - - tu_offset: - Offset in the stream to the beginning of this TU (its header) - - tu_die_offset: - Offset in the stream of the top DIE of this TU - """ - self.dwarfinfo = dwarfinfo - self.header = header - self.structs = structs - self.tu_offset = tu_offset - self.tu_die_offset = tu_die_offset - - # A list of DIEs belonging to this TU. - # This list is lazily constructed as DIEs are iterated over. - self._dielist: list[DIE] = [] - # A list of file offsets, corresponding (by index) to the DIEs - # in `self._dielist`. This list exists separately from - # `self._dielist` to make it binary searchable, enabling the - # DIE population strategy used in `iter_DIE_children`. - # Like `self._dielist`, this list is lazily constructed - # as DIEs are iterated over. - self._diemap: list[int] = [] - - @property - def cu_offset(self) -> int: - """Simulates the cu_offset attribute required by the DIE by returning the tu_offset instead - """ - return self.tu_offset - - @property - def cu_die_offset(self) -> int: - """Simulates the cu_die_offset attribute required by the DIE by returning the tu_offset instead - """ - return self.tu_die_offset - - def dwarf_format(self) -> int: - """ Get the DWARF format (32 or 64) for this TU - """ - return self.structs.dwarf_format - - def get_abbrev_table(self) -> AbbrevTable: - """ Get the abbreviation table (AbbrevTable object) for this TU - """ - return self._abbrev_table - - @cached_property - def _abbrev_table(self) -> AbbrevTable: - return self.dwarfinfo.get_abbrev_table(self['debug_abbrev_offset']) - - def get_top_DIE(self) -> DIE: - """ Get the top DIE (which is DW_TAG_type_unit entry) of this TU - """ - - # Note that a top DIE always has minimal offset and is therefore - # at the beginning of our lists, so no bisect is required. - if self._diemap: - return self._dielist[0] - - assert self.dwarfinfo.debug_types_sec is not None - top = DIE( - cu=self, - stream=self.dwarfinfo.debug_types_sec.stream, - offset=self.tu_die_offset) - - self._dielist.insert(0, top) - self._diemap.insert(0, self.tu_die_offset) - - top._translate_indirect_attributes() # Can't translate indirect attributes until the top DIE has been parsed to the end - - return top - - def has_top_DIE(self) -> bool: - """ Returns whether the top DIE in this TU has already been parsed and cached. - No parsing on demand! - """ - return bool(self._diemap) - - @property - def size(self) -> int: - return self['unit_length'] + self.structs.initial_length_field_size() - - def iter_DIEs(self) -> Iterator[DIE]: - """ Iterate over all the DIEs in the TU, in order of their appearance. - Note that null DIEs will also be returned. - """ - return self._iter_DIE_subtree(self.get_top_DIE()) - - def iter_DIE_children(self, die: DIE) -> Iterator[DIE]: - """ Given a DIE, yields either its children, without null DIE list - terminator, or nothing, if that DIE has no children. - - The null DIE terminator is saved in that DIE when iteration ended. - """ - if not die.has_children: - return - - # `cur_offset` tracks the stream offset of the next DIE to yield - # as we iterate over our children, - cur_offset = die.offset + die.size - - while True: - child = self._get_cached_DIE(cur_offset) - - child.set_parent(die) - - if child.is_null(): - die._terminator = child - return - - yield child - - if not child.has_children: - cur_offset += child.size - elif "DW_AT_sibling" in child.attributes: - sibling = child.attributes["DW_AT_sibling"] - if sibling.form in ('DW_FORM_ref1', 'DW_FORM_ref2', - 'DW_FORM_ref4', 'DW_FORM_ref8', - 'DW_FORM_ref', 'DW_FORM_ref_udata'): - cur_offset = sibling.value + self.tu_offset - elif sibling.form == 'DW_FORM_ref_addr': - cur_offset = sibling.value - else: - raise NotImplementedError('sibling in form %s' % sibling.form) - else: - # If no DW_AT_sibling attribute is provided by the producer - # then the whole child subtree must be parsed to find its next - # sibling. There is one zero byte representing null DIE - # terminating children list. It is used to locate child subtree - # bounds. - - # If children are not parsed yet, this instruction will manage - # to recursive call of this function which will result in - # setting of `_terminator` attribute of the `child`. - if child._terminator is None: - for _ in self.iter_DIE_children(child): - pass - assert child._terminator is not None - - cur_offset = child._terminator.offset + child._terminator.size - - def get_DIE_from_refaddr(self, refaddr: int) -> DIE: - """ Obtain a DIE contained in this CU from a reference. - refaddr: - The offset into the .debug_info section, which must be - contained in this CU or a DWARFError will be raised. - When using a reference class attribute with a form that is - relative to the compile unit, add unit add the compile unit's - .cu_addr before calling this function. - """ - # All DIEs are after the cu header and within the unit - dwarf_assert( - self.cu_die_offset <= refaddr < self.cu_offset + self.size, - 'refaddr %s not in DIE range of CU %s' % (refaddr, self.cu_offset)) - - return self._get_cached_DIE(refaddr) - - #------ PRIVATE ------# - - def __getitem__(self, name: str) -> Any: - """ Implement dict-like access to header entries - """ - return self.header[name] - - def _iter_DIE_subtree(self, die: DIE) -> Iterator[DIE]: - """ Given a DIE, this yields it with its subtree including null DIEs - (child list terminators). - """ - # If the die is an imported unit, replace it with what it refers to if - # we can - if die.tag == 'DW_TAG_imported_unit' and self.dwarfinfo.supplementary_dwarfinfo: - die = die.get_DIE_from_attribute('DW_AT_import') - yield die - if die.has_children: - for c in die.iter_children(): - yield from die.cu._iter_DIE_subtree(c) - assert die._terminator is not None - yield die._terminator - - def _get_cached_DIE(self, offset: int) -> DIE: - """ Given a DIE offset, look it up in the cache. If not present, - parse the DIE and insert it into the cache. - - offset: - The offset of the DIE in the debug_types section to retrieve. - - The stream reference is copied from the top DIE. The top die will - also be parsed and cached if needed. - - See also get_DIE_from_refaddr(self, refaddr). - """ - # The top die must be in the cache if any DIE is in the cache. - # The stream is the same for all DIEs in this TU, so populate - # the top DIE and obtain a reference to its stream. - top_die_stream = self.get_top_DIE().stream - - # `offset` is the offset in the stream of the DIE we want to return. - # The map is maintined as a parallel array to the list. We call - # bisect each time to ensure new DIEs are inserted in the correct - # order within both `self._dielist` and `self._diemap`. - i = bisect_right(self._diemap, offset) - - # Note that `self._diemap` cannot be empty because a the top DIE - # was inserted by the call to .get_top_DIE(). Also it has the minimal - # offset, so the bisect_right insert point will always be at least 1. - if offset == self._diemap[i - 1]: - die = self._dielist[i - 1] - else: - die = DIE(cu=self, stream=top_die_stream, offset=offset) - self._dielist.insert(i, die) - self._diemap.insert(i, offset) - - return die diff --git a/.tools/python-revlibs/elftools/ehabi/__init__.py b/.tools/python-revlibs/elftools/ehabi/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/elftools/ehabi/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/ehabi/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index c9412bfa974f4e4cecd28a04ed09e0965a79196f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmd1j<>g`k0?xvqED-$|L?8o3AjbiSi&=m~3PUi1CZpdI z6BXec<5*DOl30=$g`k0?xvqECnF_7{oya%s`F<5ElypiBN_VhA4(q##E*hMjM6{reFq5=9e5m ziCbc>9*$0)@t%Gzt`YIBej!1T@xh)^u6~-#MNA-h=FGg3Tm13yiFtYXC5a`O`FX|h z@hcgMSb>sY;#ZWjRZM7cYEf}aRD^SkV?lvSVo73*PkwS@PE1H@Zb3{zW`S-=Vo`c( ziEdhQN@=`7mPJfXW>QQ+Wl2VUUQB9ET1kF>PO*M!Mq*N?elpO8lEl1{V!eXOTO2mI T`6;D2sdkJ&>xw}R5@G-VdG$kj diff --git a/.tools/python-revlibs/elftools/ehabi/__pycache__/decoder.cpython-310.pyc b/.tools/python-revlibs/elftools/ehabi/__pycache__/decoder.cpython-310.pyc deleted file mode 100644 index 943399b1f6fa391e7b66a6fd63a7c3c701ff0a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9483 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 lbd-M$cOy!b zTe^C#txM;O}0;BPEbMIq~kT1BI9yV;2 zLDWr{IN>xS0~*qS6Y9cwMq{zwb8hN%}+?fMk#VuqSNyFBrRe;5ksss z+l_Oc30ZOFZw99D$5hVY1DL;RYN3WrcNIjT;!=;gmWKgfoeg-lCa2=Y+L%gT14Tn~ zVx75lRITj!qJiH}70qQ(rlUE8`Z3EyVOLR@)XEEBcMAM;yPXOCJlwhs zqOkrIc>l*gLpSaNOV;6XFK8ff^LQW_D}BZW1s_3!va-q8+fkgIoYWcPMFO9lKCoZT z!&O57iFuTWXDY#lD25}L542VI$s-P3Z1|4v&DSNK^nzO0NQ%5_BEwe0;;NQtahB84 Rds2aXihW}m?V`VE{{+2)a2Ego diff --git a/.tools/python-revlibs/elftools/ehabi/constants.py b/.tools/python-revlibs/elftools/ehabi/constants.py deleted file mode 100644 index 3fe208c..0000000 --- a/.tools/python-revlibs/elftools/ehabi/constants.py +++ /dev/null @@ -1 +0,0 @@ -EHABI_INDEX_ENTRY_SIZE: int = 8 diff --git a/.tools/python-revlibs/elftools/ehabi/decoder.py b/.tools/python-revlibs/elftools/ehabi/decoder.py deleted file mode 100644 index 57c6b54..0000000 --- a/.tools/python-revlibs/elftools/ehabi/decoder.py +++ /dev/null @@ -1,289 +0,0 @@ -# ------------------------------------------------------------------------------- -# elftools: ehabi/decoder.py -# -# Decode ARM exception handler bytecode. -# -# LeadroyaL (leadroyal@qq.com) -# This code is in the public domain -# ------------------------------------------------------------------------------- -from __future__ import annotations - -from typing import Callable, NamedTuple - - -class EHABIBytecodeDecoder: - """ Decoder of a sequence of ARM exception handler abi bytecode. - - Reference: - https://github.com/llvm/llvm-project/blob/master/llvm/tools/llvm-readobj/ARMEHABIPrinter.h - https://developer.arm.com/documentation/ihi0038/b/ - - Accessible attributes: - - mnemonic_array: - MnemonicItem array. - - Parameters: - - bytecode_array: - Integer array, raw data of bytecode. - - """ - - def __init__(self, bytecode_array: list[int]) -> None: - self._bytecode_array = bytecode_array - self._index: int = 0 - self.mnemonic_array: list[MnemonicItem] | None = None - self._decode() - - def _decode(self) -> None: - """ Decode bytecode array, put result into mnemonic_array. - """ - self._index = 0 - self.mnemonic_array = [] - while self._index < len(self._bytecode_array): - for mask, value, handler in self.ring: - if (self._bytecode_array[self._index] & mask) == value: - start_idx = self._index - mnemonic = handler(self) - end_idx = self._index - self.mnemonic_array.append( - MnemonicItem(self._bytecode_array[start_idx: end_idx], mnemonic)) - break - - def _decode_00xxxxxx(self) -> str: - # SW.startLine() << format("0x%02X ; vsp = vsp + %u\n", Opcode, - # ((Opcode & 0x3f) << 2) + 4); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'vsp = vsp + %u' % (((opcode & 0x3f) << 2) + 4) - - def _decode_01xxxxxx(self) -> str: - # SW.startLine() << format("0x%02X ; vsp = vsp - %u\n", Opcode, - # ((Opcode & 0x3f) << 2) + 4); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'vsp = vsp - %u' % (((opcode & 0x3f) << 2) + 4) - - gpr_register_names = ("r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "fp", "ip", "sp", "lr", "pc") - - def _calculate_range(self, start: int, count: int) -> int: - return ((1 << (count + 1)) - 1) << start - - def _printGPR(self, gpr_mask: int) -> str: - hits = [self.gpr_register_names[i] for i in range(32) if gpr_mask & (1 << i) != 0] - return '{%s}' % ', '.join(hits) - - def _print_registers(self, vfp_mask: int, prefix: str) -> str: - hits = [prefix + str(i) for i in range(32) if vfp_mask & (1 << i) != 0] - return '{%s}' % ', '.join(hits) - - def _decode_1000iiii_iiiiiiii(self) -> str: - op0 = self._bytecode_array[self._index] - self._index += 1 - op1 = self._bytecode_array[self._index] - self._index += 1 - # uint16_t GPRMask = (Opcode1 << 4) | ((Opcode0 & 0x0f) << 12); - # SW.startLine() - # << format("0x%02X 0x%02X ; %s", - # Opcode0, Opcode1, GPRMask ? "pop " : "refuse to unwind"); - # if (GPRMask) - # PrintGPR(GPRMask); - gpr_mask = (op1 << 4) | ((op0 & 0x0f) << 12) - if gpr_mask == 0: - return 'refuse to unwind' - else: - return 'pop %s' % self._printGPR(gpr_mask) - - def _decode_10011101(self) -> str: - self._index += 1 - return 'reserved (ARM MOVrr)' - - def _decode_10011111(self) -> str: - self._index += 1 - return 'reserved (WiMMX MOVrr)' - - def _decode_1001nnnn(self) -> str: - # SW.startLine() << format("0x%02X ; vsp = r%u\n", Opcode, (Opcode & 0x0f)); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'vsp = r%u' % (opcode & 0x0f) - - def _decode_10100nnn(self) -> str: - # SW.startLine() << format("0x%02X ; pop ", Opcode); - # PrintGPR((((1 << ((Opcode & 0x7) + 1)) - 1) << 4)); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'pop %s' % self._printGPR(self._calculate_range(4, opcode & 0x07)) - - def _decode_10101nnn(self) -> str: - # SW.startLine() << format("0x%02X ; pop ", Opcode); - # PrintGPR((((1 << ((Opcode & 0x7) + 1)) - 1) << 4) | (1 << 14)); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'pop %s' % self._printGPR(self._calculate_range(4, opcode & 0x07) | (1 << 14)) - - def _decode_10110000(self) -> str: - # SW.startLine() << format("0x%02X ; finish\n", Opcode); - self._index += 1 - return 'finish' - - def _decode_10110001_0000iiii(self) -> str: - # SW.startLine() - # << format("0x%02X 0x%02X ; %s", Opcode0, Opcode1, - # ((Opcode1 & 0xf0) || Opcode1 == 0x00) ? "spare" : "pop "); - # if (((Opcode1 & 0xf0) == 0x00) && Opcode1) - # PrintGPR((Opcode1 & 0x0f)); - self._index += 1 # skip constant byte - op1 = self._bytecode_array[self._index] - self._index += 1 - if (op1 & 0xf0) != 0 or op1 == 0x00: - return 'spare' - else: - return 'pop %s' % self._printGPR(op1 & 0x0f) - - def _decode_10110010_uleb128(self) -> str: - # SmallVector ULEB; - # do { ULEB.push_back(Opcodes[OI ^ 3]); } while (Opcodes[OI++ ^ 3] & 0x80); - # uint64_t Value = 0; - # for (unsigned BI = 0, BE = ULEB.size(); BI != BE; ++BI) - # Value = Value | ((ULEB[BI] & 0x7f) << (7 * BI)); - # OS << format("; vsp = vsp + %" PRIu64 "\n", 0x204 + (Value << 2)); - self._index += 1 # skip constant byte - uleb_buffer = [self._bytecode_array[self._index]] - self._index += 1 - while self._bytecode_array[self._index] & 0x80 == 0: - uleb_buffer.append(self._bytecode_array[self._index]) - self._index += 1 - value = 0 - for b in reversed(uleb_buffer): - value = (value << 7) + (b & 0x7F) - return 'vsp = vsp + %u' % (0x204 + (value << 2)) - - def _decode_10110011_sssscccc(self) -> str: - # these two decoders are equal - return self._decode_11001001_sssscccc() - - def _decode_101101nn(self) -> str: - return self._spare() - - def _decode_10111nnn(self) -> str: - # SW.startLine() << format("0x%02X ; pop ", Opcode); - # PrintRegisters((((1 << ((Opcode & 0x07) + 1)) - 1) << 8), "d"); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'pop %s' % self._print_registers(self._calculate_range(8, opcode & 0x07), "d") - - def _decode_11000110_sssscccc(self) -> str: - # SW.startLine() << format("0x%02X 0x%02X ; pop ", Opcode0, Opcode1); - # uint8_t Start = ((Opcode1 & 0xf0) >> 4); - # uint8_t Count = ((Opcode1 & 0x0f) >> 0); - # PrintRegisters((((1 << (Count + 1)) - 1) << Start), "wR"); - self._index += 1 # skip constant byte - op1 = self._bytecode_array[self._index] - self._index += 1 - start = ((op1 & 0xf0) >> 4) - count = ((op1 & 0x0f) >> 0) - return 'pop %s' % self._print_registers(self._calculate_range(start, count), "wR") - - def _decode_11000111_0000iiii(self) -> str: - # SW.startLine() - # << format("0x%02X 0x%02X ; %s", Opcode0, Opcode1, - # ((Opcode1 & 0xf0) || Opcode1 == 0x00) ? "spare" : "pop "); - # if ((Opcode1 & 0xf0) == 0x00 && Opcode1) - # PrintRegisters(Opcode1 & 0x0f, "wCGR"); - self._index += 1 # skip constant byte - op1 = self._bytecode_array[self._index] - self._index += 1 - if (op1 & 0xf0) != 0 or op1 == 0x00: - return 'spare' - else: - return 'pop %s' % self._print_registers(op1 & 0x0f, "wCGR") - - def _decode_11001000_sssscccc(self) -> str: - # SW.startLine() << format("0x%02X 0x%02X ; pop ", Opcode0, Opcode1); - # uint8_t Start = 16 + ((Opcode1 & 0xf0) >> 4); - # uint8_t Count = ((Opcode1 & 0x0f) >> 0); - # PrintRegisters((((1 << (Count + 1)) - 1) << Start), "d"); - self._index += 1 # skip constant byte - op1 = self._bytecode_array[self._index] - self._index += 1 - start = 16 + ((op1 & 0xf0) >> 4) - count = ((op1 & 0x0f) >> 0) - return 'pop %s' % self._print_registers(self._calculate_range(start, count), "d") - - def _decode_11001001_sssscccc(self) -> str: - # SW.startLine() << format("0x%02X 0x%02X ; pop ", Opcode0, Opcode1); - # uint8_t Start = ((Opcode1 & 0xf0) >> 4); - # uint8_t Count = ((Opcode1 & 0x0f) >> 0); - # PrintRegisters((((1 << (Count + 1)) - 1) << Start), "d"); - self._index += 1 # skip constant byte - op1 = self._bytecode_array[self._index] - self._index += 1 - start = ((op1 & 0xf0) >> 4) - count = ((op1 & 0x0f) >> 0) - return 'pop %s' % self._print_registers(self._calculate_range(start, count), "d") - - def _decode_11001yyy(self) -> str: - return self._spare() - - def _decode_11000nnn(self) -> str: - # SW.startLine() << format("0x%02X ; pop ", Opcode); - # PrintRegisters((((1 << ((Opcode & 0x07) + 1)) - 1) << 10), "wR"); - opcode = self._bytecode_array[self._index] - self._index += 1 - return 'pop %s' % self._print_registers(self._calculate_range(10, opcode & 0x07), "wR") - - def _decode_11010nnn(self) -> str: - # these two decoders are equal - return self._decode_10111nnn() - - def _decode_11xxxyyy(self) -> str: - return self._spare() - - def _spare(self) -> str: - self._index += 1 - return 'spare' - - class _DECODE_RECIPE_TYPE(NamedTuple): - mask: int - value: int - handler: Callable[[EHABIBytecodeDecoder], str] - - ring = ( - _DECODE_RECIPE_TYPE(mask=0xc0, value=0x00, handler=_decode_00xxxxxx), - _DECODE_RECIPE_TYPE(mask=0xc0, value=0x40, handler=_decode_01xxxxxx), - _DECODE_RECIPE_TYPE(mask=0xf0, value=0x80, handler=_decode_1000iiii_iiiiiiii), - _DECODE_RECIPE_TYPE(mask=0xff, value=0x9d, handler=_decode_10011101), - _DECODE_RECIPE_TYPE(mask=0xff, value=0x9f, handler=_decode_10011111), - _DECODE_RECIPE_TYPE(mask=0xf0, value=0x90, handler=_decode_1001nnnn), - _DECODE_RECIPE_TYPE(mask=0xf8, value=0xa0, handler=_decode_10100nnn), - _DECODE_RECIPE_TYPE(mask=0xf8, value=0xa8, handler=_decode_10101nnn), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xb0, handler=_decode_10110000), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xb1, handler=_decode_10110001_0000iiii), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xb2, handler=_decode_10110010_uleb128), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xb3, handler=_decode_10110011_sssscccc), - _DECODE_RECIPE_TYPE(mask=0xfc, value=0xb4, handler=_decode_101101nn), - _DECODE_RECIPE_TYPE(mask=0xf8, value=0xb8, handler=_decode_10111nnn), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xc6, handler=_decode_11000110_sssscccc), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xc7, handler=_decode_11000111_0000iiii), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xc8, handler=_decode_11001000_sssscccc), - _DECODE_RECIPE_TYPE(mask=0xff, value=0xc9, handler=_decode_11001001_sssscccc), - _DECODE_RECIPE_TYPE(mask=0xc8, value=0xc8, handler=_decode_11001yyy), - _DECODE_RECIPE_TYPE(mask=0xf8, value=0xc0, handler=_decode_11000nnn), - _DECODE_RECIPE_TYPE(mask=0xf8, value=0xd0, handler=_decode_11010nnn), - _DECODE_RECIPE_TYPE(mask=0xc0, value=0xc0, handler=_decode_11xxxyyy), - ) - - -class MnemonicItem: - """ Single mnemonic item. - """ - - def __init__(self, bytecode: list[int], mnemonic: str) -> None: - self.bytecode = bytecode - self.mnemonic = mnemonic - - def __repr__(self) -> str: - return '%s ; %s' % (' '.join(['0x%02x' % x for x in self.bytecode]), self.mnemonic) diff --git a/.tools/python-revlibs/elftools/ehabi/ehabiinfo.py b/.tools/python-revlibs/elftools/ehabi/ehabiinfo.py deleted file mode 100644 index 59392cc..0000000 --- a/.tools/python-revlibs/elftools/ehabi/ehabiinfo.py +++ /dev/null @@ -1,232 +0,0 @@ -# ------------------------------------------------------------------------------- -# elftools: ehabi/ehabiinfo.py -# -# Decoder for ARM exception handler bytecode. -# -# LeadroyaL (leadroyal@qq.com) -# This code is in the public domain -# ------------------------------------------------------------------------------- -from __future__ import annotations - -from functools import cached_property -from typing import TYPE_CHECKING - -from ..common.utils import struct_parse - -from .decoder import EHABIBytecodeDecoder -from .constants import EHABI_INDEX_ENTRY_SIZE -from .structs import EHABIStructs - -if TYPE_CHECKING: - from ..elf.sections import Section - from .decoder import MnemonicItem - - -class EHABIInfo: - """ ARM exception handler abi information class. - - Parameters: - - arm_idx_section: - elf.sections.Section object, section which type is SHT_ARM_EXIDX. - - little_endian: - bool, endianness of elf file. - """ - - def __init__(self, arm_idx_section: Section, little_endian: bool) -> None: - self._arm_idx_section = arm_idx_section - self._struct = EHABIStructs(little_endian) - - def section_name(self) -> str: - return self._arm_idx_section.name - - def section_offset(self) -> int: - return self._arm_idx_section['sh_offset'] - - def num_entry(self) -> int: - """ Number of exception handler entry in the section. - """ - return self._num_entry - - @cached_property - def _num_entry(self) -> int: - return self._arm_idx_section['sh_size'] // EHABI_INDEX_ENTRY_SIZE - - def get_entry(self, n: int) -> EHABIEntry: - """ Get the exception handler entry at index #n. (EHABIEntry object or a subclass) - """ - if n >= self.num_entry(): - raise IndexError('Invalid entry %d/%d' % (n, self.num_entry())) - eh_index_entry_offset = self.section_offset() + n * EHABI_INDEX_ENTRY_SIZE - eh_index_data = struct_parse(self._struct.EH_index_struct, self._arm_idx_section.stream, eh_index_entry_offset) - word0, word1 = eh_index_data['word0'], eh_index_data['word1'] - - if word0 & 0x80000000 != 0: - return CorruptEHABIEntry('Corrupt ARM exception handler table entry: %x' % n) - - function_offset = arm_expand_prel31(word0, self.section_offset() + n * EHABI_INDEX_ENTRY_SIZE) - - if word1 == 1: - # 0x1 means cannot unwind - return CannotUnwindEHABIEntry(function_offset) - elif word1 & 0x80000000 == 0: - # highest bit is zero, point to .ARM.extab data - eh_table_offset = arm_expand_prel31(word1, self.section_offset() + n * EHABI_INDEX_ENTRY_SIZE + 4) - eh_index_data = struct_parse(self._struct.EH_table_struct, self._arm_idx_section.stream, eh_table_offset) - word0 = eh_index_data['word0'] - if word0 & 0x80000000 == 0: - # highest bit is one, generic model - return GenericEHABIEntry(function_offset, arm_expand_prel31(word0, eh_table_offset)) - else: - # highest bit is one, arm compact model - # highest half must be 0b1000 for compact model - if word0 & 0x70000000 != 0: - return CorruptEHABIEntry('Corrupt ARM compact model table entry: %x' % n) - per_index = (word0 >> 24) & 0x7f - if per_index == 0: - # arm compact model 0 - opcode = [(word0 & 0xFF0000) >> 16, (word0 & 0xFF00) >> 8, word0 & 0xFF] - return EHABIEntry(function_offset, per_index, opcode) - elif per_index == 1 or per_index == 2: - # arm compact model 1/2 - more_word = (word0 >> 16) & 0xff - opcode = [(word0 >> 8) & 0xff, (word0 >> 0) & 0xff] - self._arm_idx_section.stream.seek(eh_table_offset + 4) - for i in range(more_word): - r = struct_parse(self._struct.EH_table_struct, self._arm_idx_section.stream)['word0'] - opcode.append((r >> 24) & 0xFF) - opcode.append((r >> 16) & 0xFF) - opcode.append((r >> 8) & 0xFF) - opcode.append((r >> 0) & 0xFF) - return EHABIEntry(function_offset, per_index, opcode, eh_table_offset=eh_table_offset) - else: - return CorruptEHABIEntry('Unknown ARM compact model %d at table entry: %x' % (per_index, n)) - else: - # highest bit is one, compact model must be 0 - if word1 & 0x7f000000 != 0: - return CorruptEHABIEntry('Corrupt ARM compact model table entry: %x' % n) - opcode = [(word1 & 0xFF0000) >> 16, (word1 & 0xFF00) >> 8, word1 & 0xFF] - return EHABIEntry(function_offset, 0, opcode) - - -class EHABIEntry: - """ Exception handler abi entry. - - Accessible attributes: - - function_offset: - Integer. - None if corrupt. (Reference: CorruptEHABIEntry) - - personality: - Integer. - None if corrupt or unwindable. (Reference: CorruptEHABIEntry, CannotUnwindEHABIEntry) - 0/1/2 for ARM personality compact format. - Others for generic personality. - - bytecode_array: - Integer array. - None if corrupt or unwindable or generic personality. - (Reference: CorruptEHABIEntry, CannotUnwindEHABIEntry, GenericEHABIEntry) - - eh_table_offset: - Integer. - Only entries who point to .ARM.extab contains this field, otherwise return None. - - unwindable: - bool. Whether this function is unwindable. - - corrupt: - bool. Whether this entry is corrupt. - - """ - - def __init__( - self, - function_offset: int | None, - personality: int | None, - bytecode_array: list[int] | None, - eh_table_offset: int | None = None, - unwindable: bool = True, - corrupt: bool = False, - ) -> None: - self.function_offset = function_offset - self.personality = personality - self.bytecode_array = bytecode_array - self.eh_table_offset = eh_table_offset - self.unwindable = unwindable - self.corrupt = corrupt - - def mnmemonic_array(self) -> list[MnemonicItem] | None: - if self.bytecode_array: - return EHABIBytecodeDecoder(self.bytecode_array).mnemonic_array - else: - return None - - def __repr__(self) -> str: - fo = self.function_offset - to = self.eh_table_offset - return ( - "" - ) - - -class CorruptEHABIEntry(EHABIEntry): - """ This entry is corrupt. Attribute #corrupt will be True. - """ - - def __init__(self, reason: str) -> None: - super().__init__(function_offset=None, personality=None, bytecode_array=None, - corrupt=True) - self.reason = reason - - def __repr__(self) -> str: - return "" % self.reason - - -class CannotUnwindEHABIEntry(EHABIEntry): - """ This function cannot be unwind. Attribute #unwindable will be False. - """ - - if TYPE_CHECKING: - function_offset: int # instead of `int|None` to save `is None` checks everywhere - - def __init__(self, function_offset: int) -> None: - super().__init__(function_offset, personality=None, bytecode_array=None, - unwindable=False) - - def __repr__(self) -> str: - return "" % self.function_offset - - -class GenericEHABIEntry(EHABIEntry): - """ This entry is generic model rather than ARM compact model.Attribute #bytecode_array will be None. - """ - - if TYPE_CHECKING: - function_offset: int # instead of `int|None` to save `is None` checks everywhere - personality: int - - def __init__(self, function_offset: int, personality: int) -> None: - super().__init__(function_offset, personality, bytecode_array=None) - - def __repr__(self) -> str: - return "" % (self.function_offset, self.personality) - - -def arm_expand_prel31(address: int, place: int) -> int: - """ - address: uint32 - place: uint32 - return: uint64 - """ - location = address & 0x7fffffff - if location & 0x04000000: - location |= 0xffffffff80000000 - return location + place & 0xffffffffffffffff diff --git a/.tools/python-revlibs/elftools/ehabi/structs.py b/.tools/python-revlibs/elftools/ehabi/structs.py deleted file mode 100644 index 8134575..0000000 --- a/.tools/python-revlibs/elftools/ehabi/structs.py +++ /dev/null @@ -1,47 +0,0 @@ -# ------------------------------------------------------------------------------- -# elftools: ehabi/structs.py -# -# Encapsulation of Construct structs for parsing an EHABI, adjusted for -# correct endianness and word-size. -# -# LeadroyaL (leadroyal@qq.com) -# This code is in the public domain -# ------------------------------------------------------------------------------- - -from ..construct import UBInt32, ULInt32, Struct - - -class EHABIStructs: - """ Accessible attributes: - - EH_index_struct: - Struct of item in section .ARM.exidx. - - EH_table_struct: - Struct of item in section .ARM.extab. - """ - - def __init__(self, little_endian: bool) -> None: - self._little_endian = little_endian - self._create_structs() - - def _create_structs(self) -> None: - if self._little_endian: - self.EHABI_uint32 = ULInt32 - else: - self.EHABI_uint32 = UBInt32 - self._create_exception_handler_index() - self._create_exception_handler_table() - - def _create_exception_handler_index(self) -> None: - self.EH_index_struct = Struct( - 'EH_index', - self.EHABI_uint32('word0'), - self.EHABI_uint32('word1') - ) - - def _create_exception_handler_table(self) -> None: - self.EH_table_struct = Struct( - 'EH_table', - self.EHABI_uint32('word0'), - ) diff --git a/.tools/python-revlibs/elftools/elf/__init__.py b/.tools/python-revlibs/elftools/elf/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/__init__.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 9c25e31f1153740c173df25faa500ccff90a49ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmd1j<>g`k0?xvqED-$|L?8o3AjbiSi&=m~3PUi1CZpdI z6BXec<5*DOl30=$jBv=>#+tn>O diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/constants.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/constants.cpython-310.pyc deleted file mode 100644 index 27ed342c8197f72915dd822ce14ab53f862b9fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5193 zcmb_gS##US5vFcZ2PNyWe8b1?MoDbzvR3OoA_xR2#2~;0K$)6S3QKDs3to!k0@S+f zN>W>u{D9Q{fV}4+{~^CauX$os9yZBaUYxH7ln5SLC#g_EbNZN`p6Q7%czH*3_J3a%zw(*1sjJyOJ z;0ZR!2iOpYc0R;L_%IvgBbYzRl6;J%c#@6t6r14VY?4o~DL%>4e2Pu;G@Iem>PD7uapc-{Ff)!koMOD!a#**nNJD zJ>b{b2mA*6kl$n<@muUC{5D&LuAlNd>}QbuIdndR&PTu>L+=Xou5yX3fwvCb8~iSN z0{KnIea!E%EpLr|;;pl%-Uj>Bd%`~RHreOi$LtGli~WM%$N4-s8&ln^F6ZpGpGetC z`K9!2xpL}-(orpt8podGxksP^_q__2YDa>o>RIX7D|0Uxm+<);`5B+z4kdhi4GCz=w0Z35)4^Oe4eR+=Hz z5`h&0+XM;(z9LXRmxjvbCe zTAVT0<+VfCWz%Zbm94z1$~#(Kwx6+?7{T3Bt<@gNS`THthqBQ_dBV~y%{fI8E1lz( zs;ebcxiDo{wpGKi_St-Eg1w)&WlOb9%TY7zYKxlLH;7TRRa?zznG&08G4gVO7+KA- z9X8$~>gv|Tcn9N!79HD0teCRn+Gf@{>m~2XRz{dsC@7m7F3In$bQ4y)32W>M7RYM_ z+ciu}HLZ+lv59k1K~vb|Iihr6rJU)Aort-c8#|igKHt?Wy*&XYL@p2_WRPjB#}-^) z!=${KQH4>F4YIMeva%J^VJW-9A(0MX?rIml)`hQk;Tv7}llF2l>4QlWT?ix95~)d{h;pGA2!OtORw?p=#Zbf zE3dW=D*lUu`kTgat$N^9jvBREC47v*^z3`;d z(Bq;i;t;;|s=ik}^rY9vUR8Qs3%>TNFQwOh<5+5G7#D@nIrc*d|79ukPwEvPMU+eB zdOfI>506nv%MHP;gtbWhi#JlvC`vE<>S@ETghEF^b+&RO#(v@lDuk$*&4ff%bA?9R zRLWApJoXtZ5LhH|6@YGGzLiyw2~e)um}?^GbWxCXP#9t|ROukrOWfRO$5=GFPK(|I zDBuax03s$vB2U3f#Jki>A$HQ=OGD_!hS80Upc@-SH#UZDYz*C45*|yPP1w7Js~H(h zQSG<4B)je%`sIogdWQ|aR+aoJ_Yb|+K~k{#iFW{Z2>hMEKM1@7FqS9#o?wa=C>j|x z%cf|kqe9uLwWqT22rXEq5{-8?F&-njykkd1#mwhTBbtlS6rWpy-D;`tIZ80~S9n5l zYVX~`X_Ca{r@0I6`(yq;>20ZpK11L0}S~`5ld>2vA!XqyU=OJ6x9dVLF&58by_{JbRg=vhH(Bb5sVOp;6OyI0in; zy3{dghV57pC$CyLl_7GnE@;T9b|j`5S<}@u;~7g6k4A3PjLZ{mQhQ=3CZw!9W<|I#=u={_7$E`0_cr_ zb_N_CKs=E2?dB2GaoX)0Tc=4R!h?vM_7AIS%O)(p`tHD~ ziLELK-^eb*L=roy?HhwsJAZ>Gq`{BJAjKo%kOVJ{!{7$EsIy~* zRyujwH*D(N*#rgiWl%n8y>s@>Cdd-+5&_;FFRg{cg{)g*1fL6tY=H6k-E0jny^SA0 z^Y?h#m95p0V9&(6bkE@yxc}ST!yTJCo3)F^a~CgZB0WV}*b>Lqen}7g?h}jOE_y}x ztK!A|kx&-CIq|DUweu<&wHg2Q?K76seJ|N;+t!?$LCI4b)rj7T$xU?b{I;}w6 zS1n7;^t~M)!n1#*m{}SGv-pu{_#!`fM_i z&AB`HQJ{@ISLJ7IjH0OTWr7N*IVoCf(ZPwvLsT1a)kW+Fv_&D> hPxD#wv*?GFFX)XSoB>Fu(%JMB{^rsP>B-sYe*>=Voge@J diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/descriptions.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/descriptions.cpython-310.pyc deleted file mode 100644 index 85cad033ee13f4025ef3ff0dfb6273fb205cbc62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28961 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 diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/dynamic.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/dynamic.cpython-310.pyc deleted file mode 100644 index e9ed229defa221ea6c840a65603a45dc6d4c4a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14173 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 diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/notes.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/notes.cpython-310.pyc deleted file mode 100644 index 747a20ee953e2e23d794b00f14b3e1f9d0cdbce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1960 zcmZ8i&1>976rYi_`daPUUORDo>QZRS9^!;tT1qHQoVB~utc~rIWV%JjJ6c<7ePyJD z+GwH0CAUK9E%ag^OaF%c3%wR}?a7D!1A#PsZ=@t90uAruH^2Ahz4=I5Et|k+J=>f9 z)*|E|RIYz2C|?pnvls+UI1Nce8Ko#Ip%SS~1zF`Cv+3#c`5*d62{z zsI7yiyM1@#tNzBK9Y}zU*)D!Xx z6(8ia4-nwt^k;S607Qc;_i?uNDVbCBU4Zoxx&j_`jfg?6R}$CGmARf9xyc*n^um%@ zyU;HIeU3c3yocGWF&)6Xz839uLFeWXnOm~Luy*K;U6_S^Ld46OYf*BU=jyy!m{8^BbcruR zzsR)1SAg$duEmt!I9H&eW?@|{7fsn0$&&qDSP&1_qREtt)AWMJ`MbkcfBy|=Er^)&WWFOgShK;Gk=UHrke;5k0L+L z*X=HRJ<4o24!#$;X_7HBcB@^DQtU;3b|y5~rzK%}Wf-D|``I`@nHLrJ9xyFYs1zK=->4B_6Ivd)&%43-tPWj zxVgg&P&NnKeRi{k?(XgE_V*5+y7J)Py)q%at1b?Bz%UdZ#okJ3RCfR@svl0=;V~Db zj;>@P8h`{vt{aZ7@1F=fjl#eI3Cl)xb7)W*&I}~*4ui5G?~hVF_P=Ki8h1sS1@Rmp@JdohM0{-2vf_ z+*0f5X=w*=Wy)~bDnyY_g7Sl@I<&1SRHqt+@s+8W)S)JAD+*nq=4)Fql|{v*x4?!7 z`@dUi2eh_CRTf8m=hFa%dWU{UZEC)otO86}FzreRA!?YdK PQC1X(YVbSox7GgvgVX&@ diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/relocation.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/relocation.cpython-310.pyc deleted file mode 100644 index 5cb609e0951e9111cd71de7e52ff03162ecf5e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15308 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 diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/sections.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/sections.cpython-310.pyc deleted file mode 100644 index 77650b1e76565cca4ac337d71e7756f29ee9ec06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23516 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 diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/segments.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/segments.cpython-310.pyc deleted file mode 100644 index 70f74d99e54a29fee4529e6b19edf21dfc51a898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4643 zcmbtYOLH5?5#ASo#e?8elqgH`nogo15h*K)9YvMcq9Ia5i2_vwT(MS^SIeCR334Cs z?1Czypc7SbRjTwK>?05U3;7{?%}Hn9l*;4lSpWnqD^;m%6=r*SW_x;iy1(v0I5ky} z@Z`VVIsEp5B>kN_&eJn|VQJyn)Kd_QN-iFrkD z-d`{m1YPnj_>1PEEZvvb6f3`!Sou^jFQPZiX3(2)FP^IACG=<69Qt#jzr^MnQf1*a z?W`gvMLP(>*pAy_5LGgXQrk|ZnvWl?Th-0=>VsPSexj}gCrNIr9lPB25ABOcl;S0##i9Fk|{IERM=IPWBNw?6D8nBGG1+Ewjt)Jy1Dz1;+Z2)Y$jkAWpIeuFYJ|r?G01 z#eQAef0M6mKiNCMrk*BQ?#5jnBw9TTTt^+#m}oLtl{{z$L|^Vpmeg0!LivVtCf6$p zpT`JaKy#)hTI71IF^S7Rqa)b=7DPr zG%y%;VYGPY8!@;ood0UU7(9vIvBFj>a$}-sEb3KMVJEVZdz5H633ev)%UD{NDQ&Kx zn`k8ZeNbXgGwO`oD-HKVLx~pHzWe6mfsa4AK3wAZ4Fk0A`cW?>Qyo(J*k+7hf10T6 zAa>|vhY!(Y4l>0LWD`1FehGxo=}bwL{P~bErfJc#aB7GW-?C`@2a=`9z4@WKW8-gT z$MlU)Ixgt~k9?;t{Fk)iNDp3lTLJzn@U9d8*VJUt{NLilG9>OTNuzKe+$I0$!&l%L za_$aIUnUoRq2jILt@X87I+X89e6g=E?HKQ%Jmj&= zk;0e3&mPNsIZ#-xA&D{Nt|Z28VNAz2x5h{KGswtS zB<7>ddpjGI4F3%=3SiuOTwi-wtD4h;@7Iw~ch(-R^IJ4yD7DdCt3D745H6XyjwJv} zaH4h(x($$w7lq))X49%~e_m@gnr0r_rqIR-Cb@wI@LHmYxyI%Osc+_qSlim#u2%9X zf~|^i;P+tfIC3(AjF?OwV=_sUR=a@K~erSho7eEswV3S_!;6~1Fv^^2&Zo^RzJ(8 z7(y9dBp8lb5J64NMKm}nL0=vy$<$bx6u21V9Sneym{l@8|bcQAYa%(9027D3(sCYLWZOcM6K^VdAbRNha!cQ1}U( zFJa~xidM^VJUfak>)e6Ggky}0JToWv7AH(Fs-Zaf!9)c`d5K&?Bpd?-Ko|M&g&a#U zQVv}tUZH+Eqy&_CrNX}1-k*%^bDNFZN!X8!WxT^kgt;Qv6RDT!#;ujxsJ3-Ca6%@E zd9#ofw^khRAX5bfV~*Mj?YBrsEf$e1Z=mLKIz9P*rO1 zyzD=FS0}CWqi^`{Fn<_uB8YPQW3c!q)chVzlCvxpIyeDwFrN}@YH%!$>v_YY5z5`6 zuS781CJMhuN28;{DywrUC+`2?{?o$!>6$_AKO^p7oqxrsZ#UQ9;rimr zWQdzlnpS?wiIW^s6cxXm?hogX|I|nEnqOKPkKn7cskGMeE{A6VW z9OV3>q73&Ak+h8GZJ^C^ApCUs22qsAK-mGK9&;mS83=>*BQX6i*pK1~X(51$k5vR? zc~s$3*jH-C4~d!#6fyc&@C9HjW_pX`mK?h<>p$fZsn|((7zPZ0M5_EaVEAXGf(RC& z)?MnJYjhqWYZy4i?>t15IgJyyUb#$3snx|z7fFc|a3xt-48XxvbU68+xIFMIQIws` zJSxHT{{ev`X2}VC7;;sVQUYI+bc!9sktjWqj5uRqpk&$!Juj^(qg8v);boF6lC*G8 zGC@L>hxjKW&8GzDBB+JhW4jzVa-#n+&8?r3BSwS`CH;z0Qc6gRC0V1lpv&samkYE1 E0r@r(_y7O^ diff --git a/.tools/python-revlibs/elftools/elf/__pycache__/structs.cpython-310.pyc b/.tools/python-revlibs/elftools/elf/__pycache__/structs.cpython-310.pyc deleted file mode 100644 index 0d392a1415573051043f581437b4b99004efd13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17511 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