summaryrefslogtreecommitdiff
path: root/plugins/workflow_objc
AgeCommit message (Collapse)Author
2026-05-10[Rust] Refactor `binary_view` moduleMason Reed
- Remove the "viral" `BinaryViewExt` trait and its blanket impl - Split up the binary view type from the custom trait impl - Simplify and fix bugs regarding custom binary view initialization - Rewrite Minidump binary view example, parses the PE headers to create proper sections now - Add some extra documentation - Add unit test for custom binary view
2026-03-30[ObjC] Set return type on objc_msgSend calls that send an init message to a ↵Mark Rowe
known class
2026-03-30[ObjC] Propagate types from objc_alloc_init and friendsMark Rowe
2026-03-24[Rust] Move `ObjectDestructor` to own module and add some extra documentationMason Reed
2026-02-23[Rust] Fix plugins being referenced in `cargo about` outputMason Reed
2026-02-10Fix rpath of workflow_objc on macOSMark Rowe
2026-01-14Allow controlling which address is used for instructions created when ↵Mark Rowe
inlining during analysis Previously the address of the instruction in the function being inlined was used as the new instruction's address when copying it during inlining. Now there is an additional option: use the address of the call instruction that is being replaced as the new instruction's address. This new mode is useful when inlining thunks or stub functions, but care must be taken if using it beyond that. The benefit is that it ensures that when a function contains multiple calls to the same stub function, each inlined copy ends up with distinct addresses. This ensures that call type adjustments and other overrides that are stored on the function and keyed by address can be applied independently to each callsite that was inlined. The trade-off is that if the function being inlined contains non-trivial logic, all of the inlined instructions sharing an address will limit what type of adjustments can be applied to them. The Objective-C and shared cache workflows are updated to take advantage of this new mode when they enable inlining of stub functions. This will make it possible for multiple calls to the same runtime function within a single function to have separate call type adjustments applied in the future.
2026-01-11[Rust] Enter more session scoped tracing spans for debug info and binary ↵Mason Reed
view callbacks
2026-01-11[Rust] Replace `log` with `tracing`Mason Reed
- Added more documentation - Replaced global named logger for plugins, fixing the issue when the CU has multiple (e.g. statically linked demo) - Simplified some misc code This is a breaking change, but I believe there is no better time to make it, we cannot continue to use the `log` crate, it is too limited for our needs.
2025-12-11[ObjC] Don't override the core.function.metaAnalysis workflow descriptionMark Rowe
Fixes https://github.com/Vector35/binaryninja-api/issues/7770.
2025-12-05[Rust] Do not clean out-of-tree dependencies for incremental buildsMason Reed
We already do this for a number of plugins / crates, this commit goes over the rest to make sure that they all do this. We keep cleaning binaryninjacore-sys as we want to generate the core bindings immediately on changes to binaryninjacore.h
2025-12-05[Rust] Bump pinned version to 1.91.1Mason Reed
2025-12-01[ObjC] Support removing reference counting operations in more places in the ↵Mark Rowe
shared cache Dataflow is now used to determine call targets when detecting calls to reference counting runtime functions. The previous approach of matching on specific instructions missed some patterns that are common in the shared cache.
2025-10-22Add more plugins to freeMason Reed
Adds WARP, DWARF Import and Objective-C plugins to free
2025-10-02[ObjC] Add support for removing runtime calls that perform retain count ↵Mark Rowe
operations A new activity is added that will remove calls to `objc_retain`, `objc_release`, `objc_autorelease`, and related functions. It is disabled by default due to the fact it changes the semantics of the code. It can be enabled on a per-function basis via the Function Settings context menu or command palette entry. Alternatively, it can be enabled in Open with Options or in user settings if a user would prefer it be on for an entire file or for all files they open. For now the activity is only eligible within arm64 binaries. Supporting x86_64 will require matching some slightly different IL patterns.
2025-10-02[ObjC] Silence some more unnecessary loggingMark Rowe
2025-09-26[ObjC] Don't assume that all calls to objc_msgSend have parametersMark Rowe
2025-09-25[ObjC] Don't log when encountering an objc_msgSendSuper2 call from Swift codeMark Rowe
2025-09-17[ObjC] Propagate type information from calls to `[super init]`Mark Rowe
Calls to `objc_msgSendSuper2` with a selector in the `init` family are detected and their arguments are analyzed to determine the receiver class. A call type adjustment is added to update the return type. This handles most calls to `[super init]` from Objective-C code as the compiler generates a straightforward code sequence for these calls. Some calls from Swift are handled, but the Swift compiler generates more varied code so additional work is needed for complete coverage.
2025-08-27Rewrite Obj-C workflow in RustMark Rowe
This is functionally equivalent to the previous workflow_objc, with the following changes: 1. It mutates the `core.function.metaAnalysis` workflow rather than registering a new named workflow. The activities now all check for the presence of the Objective-C metadata added by `ObjCProcessor` to determine whether they should do work, rather than relying on `MachoView` to override the function workflow when Objective-C metadata is present. This fixes https://github.com/Vector35/binaryninja-api/issues/6779. 2. The auto-inlining of `objc_msgSend` selector stub functions is performed in a separate activity from the processing of `objc_msgSend` call sites. The selector stub inlining activity is configured so that it does not run in `DSCView` as the shared cache needs different behavior for stub functions more generally that `SharedCacheWorkflow` already provides. 3. The way that types like `id` and `SEL` are referenced is fixed so that they show up as `id` rather than `objc_struct*`. This also replaces the Objective-C portion of the shared cache's workflow, and incorporates several bug fixes that had been applied to it but not the standalone Objective-C workflow.
2025-08-20Deprecate Workflow::Instance in favor of Workflow::Get and Workflow::GetOrCreateMark Rowe
Calls to `Workflow::Instance` that were looking up a built-in workflow name are updated to use `Workflow::Get`. Others use `Workflow::GetOrCreate`.
2025-08-14[Mac] Consistently specify rpaths for plug-insMark Rowe
C++ plug-ins now consistently use the `plugin_rpath` or `ui_plugin_rpath` macros to ensure they have `SKIP_BUILD_RPATH` set when building on Mac (i.e., no `LC_RPATH` is added). Rust plug-ins have their build.rs updated to only specify `-Wl,-rpath` when building for Linux. It is not needed on macOS. On macOS we instead explicitly specify an `@rpath`-relative install name. This doesn't change any behavior, but avoids leaving an absolute path as the library's install name and is consistent with CMake's behavior for C++ plug-ins.
2025-08-08Update remaining projects to C++20Mark Rowe
2025-07-14Revert "Update Objective-C Workflow to use the meta workflow."Brian Potchik
This reverts commit 5bafe5c7bdb0b56037a0b5c573236f9c6367353a.
2025-07-14Update Objective-C Workflow to use the meta workflow.Brian Potchik
2025-07-13[ObjC] Handle LLIL_TAILCALL instructions when ↵Mark Rowe
analysis.objectiveC.resolveDynamicDispatch is enabled
2025-07-13[ObjC] Handle tail calls to objc_msgSend when applying call type adjustmentsMark Rowe
2025-07-13[ObjC] Fix an off-by-one error that would skip inlining of the first ↵Mark Rowe
objc_msgSend stub
2025-07-02Fix Objective-C dynamic dispatch setting.Brian Potchik
2025-06-23Move workflow_objc to API repo, remove CFString & relptr rendererskat