Commit graph

14658 commits

Author SHA1 Message Date
dependabot[bot]
a8a5cabdfa
rust: bump pyo3 from 0.29.0 to 0.29.2 (#6800)
Some checks failed
CI / Rust Check (push) Failing after 2s
CI / rust_test (ubuntu-latest) (push) Failing after 2s
Test with coverage / Test-6 (push) Has been skipped
Test with coverage / Test-7 (push) Has been skipped
Test with coverage / Build (push) Failing after 2s
Test with coverage / Test (push) Has been skipped
Test with coverage / Test-1 (push) Has been skipped
Test with coverage / Test-2 (push) Has been skipped
Test with coverage / Test-3 (push) Has been skipped
Test with coverage / Test-4 (push) Has been skipped
Test with coverage / Test-5 (push) Has been skipped
Test with coverage / Test-8 (push) Has been skipped
Test with coverage / Test-9 (push) Has been skipped
Test with coverage / Report (push) Has been skipped
Test with coverage / Test Rust packages (push) Failing after 2s
CI / ci (push) Has been cancelled
CI / Test installation (macos-26, py3.12) (push) Has been cancelled
CI / Test installation (ubuntu-24.04, py3.14) (push) Has been cancelled
CI / Test installation (windows-2025, py3.12) (push) Has been cancelled
CI / rust_test (macos-latest) (push) Has been cancelled
CI / rust_test (windows-latest) (push) Has been cancelled
Bumps [pyo3](https://github.com/pyo3/pyo3) from 0.29.0 to 0.29.2.
- [Release notes](https://github.com/pyo3/pyo3/releases)
- [Changelog](https://github.com/PyO3/pyo3/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pyo3/pyo3/compare/v0.29.0...v0.29.2)

---
updated-dependencies:
- dependency-name: pyo3
  dependency-version: 0.29.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 06:22:01 -07:00
dependabot[bot]
2165b8e2a5
ci: bump Swatinem/rust-cache from 2.9.1 to 2.9.2 (#6801)
Bumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from 2.9.1 to 2.9.2.
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](c19371144d...6323deb102)

---
updated-dependencies:
- dependency-name: Swatinem/rust-cache
  dependency-version: 2.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 05:56:49 -07:00
dependabot[bot]
09e59e4204
ci: bump taiki-e/install-action from 2.85.5 to 2.85.10 (#6799)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.85.5 to 2.85.10.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](6a1bd70eaa...6c6fd71fe4)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.85.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 05:56:43 -07:00
Yan Shoshitaishvili
55530509ce
SimLinux: Stop pre-growing the stack past address zero. (#6806)
SimLinux.state_blank pre-grows the stack by a fixed 0x20 pages without
checking that 0x20 pages exist beneath the stack pointer. When they do
not, the allocation loop wraps past address 0 and hands out the remainder
at the top of the address space.

On x86-64 that is silent: blank_state(stack_end=0x10000) maps sixteen
stack pages from 0x0 up and sixteen more from 0xfffffffffffff000 down.
Where the wrap reaches a page the same call already handed out, the state
fails with SimSegfaultException("stack collided with heap") instead, and
where it reaches the loaded image it replaces it with blank pages.

Skip the pre-grow when that much space does not exist. Clamping it to the
space that does exist is not an option: the pre-allocated pages are not
backed by the loader, so a stack that reaches down to an image beneath it
hides that image. The pages that are skipped are still faulted in on
demand.

Also reject an allocation that does not fit beneath the top of the stack
in allocate_stack_pages() itself, so a caller that asks for one gets an
error rather than pages at the top of the address space.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 05:55:58 -07:00
Fish
503b1be066
SLiveness: Drop the redundant successors/predecessors caches. (#6843) 2026-08-14 03:13:58 -04:00
Yan Shoshitaishvili
2c95eb92e6
CFG: Warn when the regions to analyze cover no bytes. (#6825) 2026-08-13 17:26:22 -05:00
Fish
b80f4cf2af
Outliner: Rebuild phi statements; update output phis; return only region-defined vvars. (#6831)
* Rebuild phi statements instead of mutating them in place

* Update the phis of every dispatcher target

* Return only the variables the outlined region defines
2026-08-13 13:51:21 -07:00
Fish
41a7db2f17
SLiveness: propagate to predecessors instead of re-walking the graph (#6830) 2026-08-13 12:38:23 -07:00
Yan Shoshitaishvili
2bfaa7e8f7
CFGModel: Stop aborting when tidying a data reference at an unmapped address (#6811)
Fix #6770.
2026-08-11 13:27:06 -07:00
Fish
0c293dc0de
Phoenix: Fix incorrect virtualization of orphaned edges. (#6790) 2026-08-09 02:00:48 -07:00
Fish
ede5faf162
Decompiler: Add edits layer; add more tools to MCP. (#6789) 2026-08-09 01:48:07 -07:00
Fish
bdc1321845
RustCodeGen: Add more handlers. (#6788) 2026-08-08 09:28:22 -07:00
Fish
666fadabc5
Dephication: Keep the remapped assignment destination with source is not a vvar. (#6787) 2026-08-07 23:50:03 -07:00
Fish
fdd66945ea
CFGTransformationMixin: Rebuild conditional jumps when replacing branch targets. (#6786) 2026-08-07 23:46:34 -07:00
Fish
b0e3541dfd
SwitchClusterSimplifier: Do not merge different default nodes. (#6782) 2026-08-07 19:13:10 -07:00
Fish
780a80de79
Phoenix: Correct Loop.continue_addr. (#6785) 2026-08-07 18:41:56 -07:00
Fish
c751678d55
Decompiler: Handle compare-and-swap statements that CASIntrinsics leaves behind. (#6783) 2026-08-07 18:13:32 -07:00
Fish
08c7e48d5b
CFGFast: Mark bad blocks found by complete scanning as nodecode. (#6781) 2026-08-07 14:16:21 -07:00
Fish
c844a13eac
Clinic: Skip unnecessary simplification runs and recomputations. (#6780)
* Clinic: Skip the second pre-SSA-level1 _simplify_function when it cannot help.

* Clinic: Merge the two identical post-SSA-level1 _simplify_function calls.

* AILSimplifier, SLiveness: Skip recomputation that cannot change anything.
2026-08-07 12:06:49 -07:00
Fish
795eadfe84
Decompiler: Deterministically pick variables from sets. (#6778)
* Decompiler: Deterministically pick variables from sets.

* Add missing file.
2026-08-06 20:12:43 -05:00
Fish
0f4be85db4
Make CallSiteMaker a normal class instead of an Analysis. (#6776) 2026-08-06 08:44:29 -04:00
Fish
04b40a1eec
InlinedStringTransformationSimplifier: Pre-filter loops before symbolic execution. (#6775) 2026-08-05 20:00:09 -07:00
Fish
4018e26076
ExpressionNarrower: Compare rebuilt operands by value instead of identity. (#6774) 2026-08-05 22:34:33 -04:00
Fish
e76c4118a7
AILSimplifier: Only store replaced blocks into self.blocks. (#6773)
_rebuild_func_graph marks all blocks in self.blocks dirty, so adding unchanged blocks to self.blocks led to redundant
simplification runs after.
2026-08-05 22:34:13 -04:00
Fish
7d3c7c82ce
AILSimplifier: De-quadratify _unify_local_variables. (#6772) 2026-08-05 22:33:55 -04:00
Fish
b948687876
AIL: Fix identity comparisons against re-read statement attributes. (#6771) 2026-08-05 19:42:30 -05:00
Md7
1c99579f69
Fix #6744: avoid empty Or expression in memory.find (#6750) 2026-08-05 04:01:10 -07:00
angr-bot
f62f45363c Update version to 9.3.3.dev0 [ci skip] 2026-08-05 09:02:54 +00:00
Fish
3333f39fff
CFGFast: Make the smart scan nodecode ratio O(log n) (#6767) 2026-08-05 01:42:45 -07:00
Fish
7c2e3501e6
SimStruct: Remove _arch_memo to fix the cache leak. (#6757)
* SimStruct: Remove _arch_memo to fix the cache leak.

* Fix the comment

* Better typing.

* Fix RustSimTypes.

* More fixes.

* Fix caching for anonymous structs.

* SimUnion: Cache alignment.

* Convert returnty to a arch-ed returnty.

* RustSimType: Do not shadow SimType.with_arch.

* Rust: Bind an arch to types before they reach the type solver.

* RustSimType: Make it a subclass of SimType.
2026-08-05 01:12:55 -07:00
Yan Shoshitaishvili
f160178837
reaching_definitions: reject mismatched conversion widths (#6749)
* reaching_definitions: reject mismatched conversion widths

* Tests: satisfy RDA lint and type checks
2026-08-05 00:26:01 -07:00
Fish
71bf42c9b8
Decompiler: Test common C conditions. (#6762)
* Decompiler: Test common C conditions.

* Improve c-style null compatison implementation

* Make order-sensitive

---------

Co-authored-by: Kevin Phoenix <kevin@kphoenix.us>
2026-08-04 18:27:09 -07:00
Kevin Phoenix
fd235fcb90
icicle: Disable inspect and actions during memory sync-back (#6761) 2026-08-04 10:51:07 -07:00
Kevin Phoenix
f4b23d4444
UltraPage: Write to concrete_data as a single block instead of loop (#6760) 2026-08-04 10:11:26 -07:00
Kevin Phoenix
4a9c1454dc
icicle: Remove double-underscore methods (#6759) 2026-08-04 09:58:57 -07:00
Kevin Phoenix
233724f38e
icicle: Avoid repeatedly calling memory.permissions (#6758) 2026-08-04 09:54:45 -07:00
Fish
551df09fc5
Decompiler: Fix duplicate struct defs for pre-defined structs. (#6756) 2026-08-03 22:12:47 -07:00
Kevin Phoenix
f71b07cebf
CodeGen: Skip parenthesis on binops when representing as an unop (#6755) 2026-08-03 21:11:36 -07:00
pre-commit-ci[bot]
f9c789ff6a
[pre-commit.ci] pre-commit autoupdate (#6754)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.16.0 → v0.16.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.16.0...v0.16.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-08-03 11:15:42 -07:00
dependabot[bot]
15757fb2da
ci: bump taiki-e/install-action from 2.85.2 to 2.85.5 (#6753)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.85.2 to 2.85.5.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](41049aa566...6a1bd70eaa)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.85.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 09:37:54 -07:00
Yibo Liu
0f8e082f9a
Clinic: recover variable-length arrays (VLAs) (#6634) 2026-08-01 13:41:12 -07:00
Kevin Phoenix
49434bc3fc
Render truncations to non-C widths as masks instead of casts (#6741) 2026-07-31 17:05:47 -07:00
Kevin Phoenix
2f891d1d69
Update capstone to 5.0.9 (#6740) 2026-07-31 13:47:32 -07:00
Quintin Kong
d46e56f891
Fix signed division and remainder in the pcode engine (#6739)
* Fix signed division and remainder in the pcode engine

OpBehaviorIntSdiv and OpBehaviorIntSrem used Claripy's `/` and `%`, which are
unsigned bit-vector operations. For negative operands they therefore produced
the same results as the unsigned INT_DIV and INT_REM behaviors.

INT_SDIV now uses claripy.SDiv (truncation toward zero). INT_SREM is defined as
in1 - SDiv(in1, in2) * in2, giving a remainder with the dividend's sign, which
matches the p-code semantics documented in the class comments.

For 64-bit -5 and 2, INT_SDIV now yields -2 (0xfffffffffffffffe) and INT_SREM
yields -1 (0xffffffffffffffff) instead of large unsigned values.

The arithmetic behavior test table enables both INT_SDIV and INT_SREM with the
matching signed reference expressions, and a new concrete test checks mixed-sign
combinations (-5/2, 5/-2, -5/-2, ...) that an unsigned implementation cannot
satisfy.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Use claripy.SMod for INT_SREM

Per review, INT_SREM uses claripy.SMod directly instead of the equivalent
in1 - claripy.SDiv(in1, in2) * in2. Verified identical to a truncated-toward-zero
reference over 100k random 64-bit pairs, including the INT_MIN / -1 corner.

* Address pcode signed arithmetic review comments

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-31 12:23:05 -07:00
Fish
61bac8ffd0
SimConstantVariable: Fix overflows and value out of range errors. (#6738)
* SimConstantVariable: Fix overflows and value out of range errors.

* Fix usages of SimConstantVariable.

* Mask the value.

* Fix negative values.
2026-07-29 13:58:20 -07:00
pre-commit-ci[bot]
d38cc5a019
[pre-commit.ci] pre-commit autoupdate (#6721)
* [pre-commit.ci] pre-commit autoupdate

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.15.22 → v0.16.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.22...v0.16.0)

* Apply fixes

* Add values()

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Kevin Phoenix <kevin@kphoenix.us>
2026-07-29 13:46:11 -07:00
angr-bot
a4b05a0ce9 Update version to 9.3.2.dev0 [ci skip] 2026-07-29 09:44:55 +00:00
Fish
7cedfbfa8b
Dephication: Correctly consider phi congruence classes. (#6735) 2026-07-29 01:53:02 -07:00
Fish
b9358da5da
AIL: Fix __eq__. (#6728)
* AIL: Merge likes/matches into a single mode-parameterized walk

* AIL: Make __eq__ idx-aware at every node, not just the root

* AIL: Stop hashing fields that equality does not compare

* AIL: Regression-test the hash/eq contract

* AIL: Compare bits in StringLiteral and Struct

* AIL: Replace the CMP_* constants with a CmpMode enum

* AIL: cargo fmt

* AIL: Compare and hash rounding_mode on Convert and BinaryOp

* Update comments.
2026-07-29 01:22:10 -07:00
Ati Priya
6933b065f0
Decompiler: rewrite CondBE and CondNB ccalls on amd64 (#6645)
* Decompiler: rewrite CondBE and CondNB ccalls on amd64

* Decompiler: fix inverted CondZ/CondNZ over G_CC_OP_COPY on amd64

* tests: add binary-driven regressions for CondBE/CondNB ccall recovery
2026-07-29 01:11:09 -07:00