Repository navigation
Conversation
Introduce ArchitectureHook and register_architecture_hook with default forwarding to the previous implementation. Preserve address normalization and architecture-specific flag IL and intrinsic classes when delegating.
Forward flag-write operations unsupported by LowLevelILFlagWriteOp to the previous architecture with their raw arguments intact, preserving native floating-point flag semantics. Route intrinsic-class queries through ArchitectureHook::intrinsic_class while retaining existing custom-architecture behavior.
Change associated_arch_by_addr to accept &mut u64 and preserve updates through the shared C callback. Update RISC-V and MSP430 implementations.
Dispatch the shared intrinsic-class callback through Architecture::intrinsic_class. Default to Intrinsic::class() for known IDs and GeneralIntrinsicClass otherwise, preserving existing intrinsic implementations.
Add floating-point and comparison variants to LowLevelILFlagWriteOp, updating decoding, operation/size mapping, and operand conversion together. Add a shared Raw variant to preserve unrepresented operations and complete operand lists.
Install an explicit freeFunctionArchContext callback that forwards to the stored previous implementation. This avoids relying on the core fallback chain, which is lost when another hook copies the callback table.
Forward the native length and success result together through CoreArchitecture::instruction_llil, preserving length updates when lifting returns false.
Store native token fields directly and serialize them without reconstructing metadata from the typed kind. Preserve widths, operands, values, type names, and floating-point payload bits, matching C++ behavior. Keep typed constructors and expose kind() as a convenience view. Add raw C token comparisons before and after stacked empty hooks, covering native x86, synthetic metadata, and contextual disassembly.
zznop
force-pushed
the
test_rust_arch_hooks
branch
from
October 20, 2026 19:35
d06250a to
ef08cf3
Compare
Member
Author
|
This PR also addresses the 1st and 5th issue in the list here: https://github.com/Vector35/binaryninja/issues/1479 |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds ArchitectureHook and register_architecture_hook to the Rust API so plugins can override selected behavior of existing architectures. Default methods delegate to the previous implementation, supporting stacked hooks without recursive calls.
The attached demonstration plugin annotates ARM instructions that enable or disable interrupts in the attached binary.
ra4m1_hello_world.ino.elf.zip
lib.rs.zip