Skip to main content

A Python interface to libVEX and VEX IR

Project description

PyVEX

Latest Release Python Version PyPI Statistics License

PyVEX is Python bindings for the VEX IR.

Project Links

Project repository: https://github.com/angr/pyvex

Documentation: https://api.angr.io/projects/pyvex/en/latest/

Installing PyVEX

PyVEX can be pip-installed:

pip install pyvex

Using PyVEX

import pyvex
import archinfo

# translate an AMD64 basic block (of nops) at 0x400400 into VEX
irsb = pyvex.lift(b"\x90\x90\x90\x90\x90", 0x400400, archinfo.ArchAMD64())

# pretty-print the basic block
irsb.pp()

# this is the IR Expression of the jump target of the unconditional exit at the end of the basic block
print(irsb.next)

# this is the type of the unconditional exit (i.e., a call, ret, syscall, etc)
print(irsb.jumpkind)

# you can also pretty-print it
irsb.next.pp()

# iterate through each statement and print all the statements
for stmt in irsb.statements:
    stmt.pp()

# pretty-print the IR expression representing the data, and the *type* of that IR expression written by every store statement
import pyvex
for stmt in irsb.statements:
    if isinstance(stmt, pyvex.IRStmt.Store):
        print("Data:", end="")
        stmt.data.pp()
        print("")

        print("Type:", end="")
        print(stmt.data.result_type)
        print("")

# pretty-print the condition and jump target of every conditional exit from the basic block
for stmt in irsb.statements:
    if isinstance(stmt, pyvex.IRStmt.Exit):
        print("Condition:", end="")
        stmt.guard.pp()
        print("")

        print("Target:", end="")
        stmt.dst.pp()
        print("")

# these are the types of every temp in the IRSB
print(irsb.tyenv.types)

# here is one way to get the type of temp 0
print(irsb.tyenv.types[0])

Keep in mind that this is a syntactic representation of a basic block. That is, it'll tell you what the block means, but you don't have any context to say, for example, what actual data is written by a store instruction.

VEX Intermediate Representation

To deal with widely diverse architectures, it is useful to carry out analyses on an intermediate representation. An IR abstracts away several architecture differences when dealing with different architectures, allowing a single analysis to be run on all of them:

  • Register names. The quantity and names of registers differ between architectures, but modern CPU designs hold to a common theme: each CPU contains several general purpose registers, a register to hold the stack pointer, a set of registers to store condition flags, and so forth. The IR provides a consistent, abstracted interface to registers on different platforms. Specifically, VEX models the registers as a separate memory space, with integer offsets (i.e., AMD64's rax is stored starting at address 16 in this memory space).
  • Memory access. Different architectures access memory in different ways. For example, ARM can access memory in both little-endian and big-endian modes. The IR must abstract away these differences.
  • Memory segmentation. Some architectures, such as x86, support memory segmentation through the use of special segment registers. The IR understands such memory access mechanisms.
  • Instruction side-effects. Most instructions have side-effects. For example, most operations in Thumb mode on ARM update the condition flags, and stack push/pop instructions update the stack pointer. Tracking these side-effects in an ad hoc manner in the analysis would be crazy, so the IR makes these effects explicit.

There are lots of choices for an IR. We use VEX, since the uplifting of binary code into VEX is quite well supported. VEX is an architecture-agnostic, side-effects-free representation of a number of target machine languages. It abstracts machine code into a representation designed to make program analysis easier. This representation has five main classes of objects:

  • Expressions. IR Expressions represent a calculated or constant value. This includes memory loads, register reads, and results of arithmetic operations.
  • Operations. IR Operations describe a modification of IR Expressions. This includes integer arithmetic, floating-point arithmetic, bit operations, and so forth. An IR Operation applied to IR Expressions yields an IR Expression as a result.
  • Temporary variables. VEX uses temporary variables as internal registers: IR Expressions are stored in temporary variables between use. The content of a temporary variable can be retrieved using an IR Expression. These temporaries are numbered, starting at t0. These temporaries are strongly typed (i.e., "64-bit integer" or "32-bit float").
  • Statements. IR Statements model changes in the state of the target machine, such as the effect of memory stores and register writes. IR Statements use IR Expressions for values they may need. For example, a memory store IR Statement uses an IR Expression for the target address of the write, and another IR Expression for the content.
  • Blocks. An IR Block is a collection of IR Statements, representing an extended basic block (termed "IR Super Block" or "IRSB") in the target architecture. A block can have several exits. For conditional exits from the middle of a basic block, a special Exit IR Statement is used. An IR Expression is used to represent the target of the unconditional exit at the end of the block.

VEX IR is actually quite well documented in the libvex_ir.h file (https://github.com/angr/vex/blob/dev/pub/libvex_ir.h) in the VEX repository. For the lazy, we'll detail some parts of VEX that you'll likely interact with fairly frequently. To begin with, here are some IR Expressions:

IR Expression Evaluated Value VEX Output Example
Constant A constant value. 0x4:I32
Read Temp The value stored in a VEX temporary variable. RdTmp(t10)
Get Register The value stored in a register. GET:I32(16)
Load Memory The value stored at a memory address, with the address specified by another IR Expression. LDle:I32 / LDbe:I64
Operation A result of a specified IR Operation, applied to specified IR Expression arguments. Add32
If-Then-Else If a given IR Expression evaluates to 0, return one IR Expression. Otherwise, return another. ITE
Helper Function VEX uses C helper functions for certain operations, such as computing the conditional flags registers of certain architectures. These functions return IR Expressions. function_name()

These expressions are then, in turn, used in IR Statements. Here are some common ones:

IR Statement Meaning VEX Output Example
Write Temp Set a VEX temporary variable to the value of the given IR Expression. WrTmp(t1) = (IR Expression)
Put Register Update a register with the value of the given IR Expression. PUT(16) = (IR Expression)
Store Memory Update a location in memory, given as an IR Expression, with a value, also given as an IR Expression. STle(0x1000) = (IR Expression)
Exit A conditional exit from a basic block, with the jump target specified by an IR Expression. The condition is specified by an IR Expression. if (condition) goto (Boring) 0x4000A00:I32

An example of an IR translation, on ARM, is produced below. In the example, the subtraction operation is translated into a single IR block comprising 5 IR Statements, each of which contains at least one IR Expression (although, in real life, an IR block would typically consist of more than one instruction). Register names are translated into numerical indices given to the GET Expression and PUT Statement. The astute reader will observe that the actual subtraction is modeled by the first 4 IR Statements of the block, and the incrementing of the program counter to point to the next instruction (which, in this case, is located at 0x59FC8) is modeled by the last statement.

The following ARM instruction:

subs R2, R2, #8

Becomes this VEX IR:

t0 = GET:I32(16)
t1 = 0x8:I32
t3 = Sub32(t0,t1)
PUT(16) = t3
PUT(68) = 0x59FC8:I32

Cool stuff!

Citing PyVEX

If you use PyVEX in an academic work, please cite the paper for which it was developed:

@article{shoshitaishvili2015firmalice,
  title={Firmalice - Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware},
  author={Shoshitaishvili, Yan and Wang, Ruoyu and Hauser, Christophe and Kruegel, Christopher and Vigna, Giovanni},
  booktitle={NDSS},
  year={2015}
}

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyvex-9.2.217.tar.gz (3.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyvex-9.2.217-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

pyvex-9.2.217-cp314-cp314-musllinux_1_2_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pyvex-9.2.217-cp314-cp314-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

pyvex-9.2.217-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pyvex-9.2.217-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pyvex-9.2.217-cp314-cp314-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyvex-9.2.217-cp313-cp313-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86-64

pyvex-9.2.217-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pyvex-9.2.217-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pyvex-9.2.217-cp313-cp313-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyvex-9.2.217-cp312-cp312-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.12Windows x86-64

pyvex-9.2.217-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pyvex-9.2.217-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pyvex-9.2.217-cp312-cp312-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file pyvex-9.2.217.tar.gz.

File metadata

  • Download URL: pyvex-9.2.217.tar.gz
  • Upload date:
  • Size: 3.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyvex-9.2.217.tar.gz
Algorithm Hash digest
SHA256 ea9569a9884a715d65904378c70d5501cc3bc5e7e51d646c55c00334ab981f3c
MD5 8869d7b08b602694a8547d5f5ad090eb
BLAKE2b-256 23d61931633933d5a3bbba65a8f74e4a45124d0988691a443e06f5533a19945f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217.tar.gz:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pyvex-9.2.217-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyvex-9.2.217-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9bcc2261792e75f30bddcd784c77531e44610f592557cb84ed8d5dc95a7180ce
MD5 c42deb2a51a089df72656628fc8c13fb
BLAKE2b-256 917668c41c5cc2c0014302230ad23aafe700cbed4ad0d346f88d439b1624b982

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp314-cp314-win_amd64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f4381e1e903b7693a73b1fe745f1baa7d72fb6b0a3ef80709757ff01eac0eb79
MD5 eb4d79c1386070dbbeaa958171c86526
BLAKE2b-256 70c78dc393b08a318e7ca04083f372bdcc238b2b2252432f571b324993aa3be6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f7b2c2207cdb55adf6fe39aa2ebe2f5fbf9da75348d879788caf2a1c5d3882be
MD5 94a2010ee70cc610bc7a7190f2fa2dbf
BLAKE2b-256 85873304c195ec370ab20e3c7893bc80a26c92187c2221b401cfe1bf05ab8eaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be26b9df3d8e8b54b79256d00d46e59fbb10aad1a0f015662405e8f342857b7d
MD5 d6972d3a4a346a5ba605190220684071
BLAKE2b-256 be370b4eb6fb33216d3b8d99a740b77ce2e95254dc254367ff2bbab66dcc75d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7ef16ec32dbc270158a7a3aa603adc98f0deb7c2bf72702fd250bb9ff86a5b9d
MD5 141bd3d62e371b92712e0b4a4d21b7c4
BLAKE2b-256 0bdd3da75054d240fc7843d5f1a27160d83e988bf0320907a32db0677c07ef3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25e772d9dfa01a6f27048e82862c32e331e529dece228a878f63a55c00213c97
MD5 09d19ad1c802e41f9358ddc1d33ef95d
BLAKE2b-256 bb9f0b78b1c10ebf2784fbcae22d480ec2d82833f53ccd33fb22e0b5ca21308c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pyvex-9.2.217-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyvex-9.2.217-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 778e68bc92e1c22d7a9a17f88993a139fcced2163e140bef267cdab631e85e76
MD5 2180462e66ced937f5c1bf0b7434d5cc
BLAKE2b-256 94251c976f82b81f307654d1b6f7d0f61aa6931f17fbaad7e6852c1691ff5338

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp313-cp313-win_amd64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 71141848232eef0b3e61f9a49a90f98a969179ad6cf0389990baf149747e19de
MD5 9d83d2f9de9c9babdc4c1a6cfac680ec
BLAKE2b-256 c692f226646f5cc0c775a89c14b7bf51ea421281ad7043bbeb0d4a57511eab0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 39dd95ef1d397d612997397c9ad89454478f99eb873ae12889d32057ce913f28
MD5 2836e6a9ae9b97f83e38cb64477c518d
BLAKE2b-256 7c33eb5a74896b15d7ed883539d1a5583037a99626f26eb2252e0625ae3471b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9269df1fdce4f8310951c562b4b89aa3616ba26065a611f0a494832af3085228
MD5 be3717cbfa37d0e3eb4da5ccc079c9c2
BLAKE2b-256 657309f64934cedc13bc97491a4e7434b63c809b240a86f51321862089063213

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pyvex-9.2.217-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyvex-9.2.217-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e8d5fa3f3ea1592796c2bafc00c2d2f93eb6649d4e2032c7019d24b3cead8dd9
MD5 5a1609e2a8f530aaffb99f1d1ab52cc0
BLAKE2b-256 8b68f8d332af6ab0104ea8a5bbf955609deef5ac60291c261d056b9e4e6e1c01

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp312-cp312-win_amd64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b10b658c5944bb8ce33f0b063394510fcdf38abdbfcaff9b7308575404bd5c61
MD5 4a7f7452a6420024e6d7016474e5983c
BLAKE2b-256 374e2e9e0db797bfbf9286d03114f317fc9787e1605164f84b33407db9d99640

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0f88d4a090a6a76f9bd4977a92b24fd2154a1cc273e2c0adbcb6d6da586d8f3a
MD5 e39f757ccfeb534ef31ba40037f550ce
BLAKE2b-256 a7af28b7f28c1385346cccde9c9d6b6aaff28652f07f332e745c0264373ddea6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyvex-9.2.217-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyvex-9.2.217-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 802234ebdd57b15de473aa6343fd9f63cb06755b0aff810a285ce26d36a97277
MD5 9d6fdb9d7fb8410929795fb5c892c2bb
BLAKE2b-256 5a6cd398395e736af5eb87e8184999953ccdca00220b1a4af5f8998a1ecaa9f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyvex-9.2.217-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: angr-release.yml on angr/ci-settings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page