No description
Find a file
Quintin Kong e4ff240001
x86/amd64: fix UMUL CF/OF flags (widen before multiply) (#6703)
Fixes #6067

pc_actions_UMUL computed the product at operand width, so the extracted
"high half" was always zero and CF/OF (OF = CF) were constantly 0:

    lo = (cc_dep1 * cc_dep2)[nbits-1:0]   # truncated to nbits
    hi = (lo >> nbits)[nbits-1:0]         # lo is nbits wide -> always 0

The sibling pc_actions_SMUL is correct because it widens first
(sign_extend). Mirror it with zero_extend: multiply the operands widened to
2*nbits and take the high half. For CC_OP_MUL{B,W,L,Q}, CF = OF =
(high half != 0) per the Intel SDM. This is why `imul` reported CF/OF
correctly while `mul` did not (issue #6067: `mul %ebx` left CF clear).
2026-07-26 22:32:25 -07:00
.github ci: bump actions/setup-python from 6.3.0 to 7.0.0 (#6637) 2026-07-20 10:08:44 -07:00
angr x86/amd64: fix UMUL CF/OF flags (widen before multiply) (#6703) 2026-07-26 22:32:25 -07:00
corpus_tests Enable ruff isort rule (#6452) 2026-06-02 14:48:07 -07:00
docs docs: Fix dangling links (#6533) 2026-07-23 17:31:25 -07:00
native AILVexLifter: Fix libVEX overread by padding in convert_from_lift. (#6686) 2026-07-24 01:43:20 -07:00
tests SimpleSolver: Memoize least common ancestors on type lattices. (#6707) 2026-07-26 17:17:09 -07:00
.dockerignore Oxidizer: Rust pseudocode generation (#6283) 2026-05-19 07:15:07 -07:00
.git-blame-ignore-revs .git-blame-ignore-revs: Fix reference 2025-11-26 17:44:09 -07:00
.gitignore DecompilationCache: Serialization support. (#6624) 2026-07-22 03:03:40 -07:00
.pre-commit-config.yaml [pre-commit.ci] pre-commit autoupdate (#6644) 2026-07-20 10:49:02 -07:00
.readthedocs.yml docs: Use integrated RTD rust support (#6382) 2026-05-01 23:08:38 -07:00
Cargo.lock rust: bump regex from 1.12.2 to 1.13.1 (#6640) 2026-07-20 10:08:14 -07:00
Cargo.toml Update to Rust 1.88 (#5561) 2025-06-26 21:00:49 -07:00
COPYRIGHT Update LICENSE and COPYRIGHT. (#5376) 2025-03-27 23:58:21 -07:00
LICENSE Update LICENSE and COPYRIGHT. (#5376) 2025-03-27 23:58:21 -07:00
MANIFEST.in DecompilationCache: Serialization support. (#6624) 2026-07-22 03:03:40 -07:00
pyproject.toml Migrate rust demangling to pydemumble (#6663) 2026-07-23 17:32:00 -07:00
README.md README: Update some links 2025-10-13 13:57:08 -07:00
rust-toolchain.toml Upgrade rust toolchain to 1.96 (#6552) 2026-06-29 17:13:42 -07:00
SECURITY.md Draft security and reporting advisory (#3072) 2022-01-09 19:49:40 -07:00
setup.py DecompilationCache: Serialization support. (#6624) 2026-07-22 03:03:40 -07:00

angr

Latest Release Python Version PyPI Statistics License

angr is a platform-agnostic binary analysis framework. It is brought to you by the Computer Security Lab at UC Santa Barbara, SEFCOM at Arizona State University, their associated CTF team, Shellphish, the open source community, and @rhelmot.

Homepage: https://angr.io

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

Documentation: https://docs.angr.io

API Documentation: https://docs.angr.io/en/latest/api.html

What is angr?

angr is a suite of Python 3 libraries that let you load a binary and do a lot of cool things to it:

  • Disassembly and intermediate-representation lifting
  • Program instrumentation
  • Symbolic execution
  • Control-flow analysis
  • Data-dependency analysis
  • Value-set analysis (VSA)
  • Decompilation

The most common angr operation is loading a binary: p = angr.Project('/bin/bash') If you do this in an enhanced REPL like IPython, you can use tab-autocomplete to browse the top-level-accessible methods and their docstrings.

The short version of "how to install angr" is mkvirtualenv --python=$(which python3) angr && python -m pip install angr.

Example

angr does a lot of binary analysis stuff. To get you started, here's a simple example of using symbolic execution to get a flag in a CTF challenge.

import angr

project = angr.Project("angr-doc/examples/defcamp_r100/r100", auto_load_libs=False)

@project.hook(0x400844)
def print_flag(state):
    print("FLAG SHOULD BE:", state.posix.dumps(0))
    project.terminate_execution()

project.execute()

Quick Start