Repository navigation
Conversation
d06250a to
ef08cf3
Compare
|
This PR also addresses the 1st and 5th issue in the list here: https://github.com/Vector35/binaryninja/issues/1479 |
emesare
left a comment
There was a problem hiding this comment.
Looks much better thanks
can we see about adding an example plugin for modifying the cpuid instr to return a particular cpu
If not I can see about adding it myself shortly after, i just think a plugin example to go along with this would be beneficial.
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.
ef08cf3 to
9057d22
Compare
Pushed one of the example arch hooks that I was testing with that adds an annotation to thumb instructions setting the PRIMASK register: https://github.com/Vector35/binaryninja-api/blob/test_rust_arch_hooks/rust/examples/primask_write_hook.rs |
9057d22 to
59574fc
Compare
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