summaryrefslogtreecommitdiff
path: root/view
AgeCommit message (Collapse)Author
2025-10-07Remove old banners from DSC and KC pluginsMason Reed
Extra noise in the CMake configure step, much of the value from these has been removed after the refactor(s), e.g. metadata version is no longer used
2025-10-03Add zero-copy data pointer access for BinaryData objects for API-side ↵Brian Potchik
container transforms.
2025-10-03Update IMG4 transform to use DecodeWithContext and synthesize a filename for ↵Brian Potchik
the payload.
2025-10-02[MachO] Tweak handling of LC_FUNCTION_STARTSMark Rowe
`LC_FUNCTION_STARTS` includes both functions and jump tables. We want to avoid calling `AddFunctionForAnalysis` on jump tables since it can result in a function being created at the jump table's location with a bogus body. We already skip adding functions for entries in `LC_FUNCTION_STARTS` if the lifting of their first few bytes end up including `LLIL_UNDEF`. However, arm64 intentionally lifts `udf` instructions (i.e., opcodes in the Permanently Undefined range) to `LLIL_TRAP` in order to preserve the immediate portion of the instruction. To address this, `MachoView::IsValidFunctionStart` now returns false if the first lifted instruction is `LLIL_TRAP` in addition to when the lifting contains `LLIL_UNDEF`.
2025-10-01Cleanup for some container format handling.Brian Potchik
2025-09-30Initial support for opening container formats.Brian Potchik
2025-09-29Treat .got.plt as read-only for HexagonBrandon Miller
This allows types to propagate to thunks in cases where there are GOT entries for internal functions
2025-09-29Apply platform types on Hexagon statically linked binariesBrandon Miller
2025-09-25Sort table views in the shared cache / kernel cache triage views by address ↵Mark Rowe
by default The table views previously visually suggested they were being sorted by address, but in practice they were not sorted until the user set an explicit sort order by clicking on a column header.
2025-09-17[DSC] Ignore .a2s files when loading a shared cacheMark Rowe
These files are present alongside iOS 26 shared caches. Explicitly ignoring them avoids an error being logged to the console.
2025-09-17[DSC] Rework handling of .symbols files to be compatible with iOS 15Mark Rowe
In some iOS 15 caches, the .symbols file's mapping has an address of 0. This would cause it to be returned by `SharedCache::GetEntryContaining` and loaded into the view. The .symbols file contains the local symbol tables for images in the shared cache. It is not intended to be mapped into the same address space as the rest of the shared cache. `SharedCache` now tracks the symbols cache entry separately from other entries. A dedicated `VirtualMemory` region is used when accessing the data it contains. This could be a `FileAccessor`, but that would require additional changes within `SharedCacheMachOHeader`. `SharedCacheMachOProcessor` now directly accesses the local symbols cache entry rather than needing to search for it.
2025-09-17[DSC] Support relative direct selectors in older shared cache versionsMark Rowe
Prior to macOS 13 / iOS 16, the base offset to use for relative direct selector references within Objective-C message lists was stored within the `__TEXT,__objc_opt_ro` section of /usr/lib/libobjc.A.dylib.
2025-09-17[MachO] Populate external links with library imports for files in projectsMark Rowe
A mapping from imported symbol names to libraries is added to metadata. This is used to populate external links for files within projects, following the lead of `PEView`.
2025-09-05[KernelCache] Pass the correct flags when adding an image's segmentsMark Rowe
Fixes https://github.com/Vector35/binaryninja-api/issues/7354.
2025-09-02[SharedCache] Move plugin_rpath calls into BN_INTERNAL_BUILD blocksMark Rowe
These calls set the rpaths used for release builds of the dylibs using a macro that isn't available in the API repository. They are not necessary when building the shared cache plug-in outside of the context of the app.
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-20Fix memory leak in LZFSE transform along with some other fixes.Brian Potchik
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-14ELFView performance fix: avoid calling GetSectionsAt in the innerloopPeter LaFosse
When the section list gets large GetSectionsAt becomes quite slow instead the the whole list of sections outside the loop and just encour that hit once. It could probably be made even faster if we used an interval tree but then we have to pay the cost of building the tree which may be more nauanced
2025-08-14Ensure ELFView only add segments in a Begin/EndBulkAddSegments contextPeter LaFosse
2025-08-13[DSC] Add support for DriverKit shared cachesMark Rowe
2025-08-05[ELF] Fix a memory leak when parsing .gnu_debugdataMark Rowe
2025-08-01Add LogForException APIs to pass stack trace information separate from the ↵Rusty Wagner
message
2025-07-30Add dependency tracking to the Python code generationMark Rowe
This ensures that the Python source files are only generated and copied into the output directory if inputs have changed, rather than being done unconditionally.
2025-07-30[CMake] Specify CONFIGURE_DEPENDS for all file(GLOB ..)Mark Rowe
This ensures that CMake detects when files that match the glob are added or removed.
2025-07-29Added check for sharedobject without program header section start address.Hongyu Chen
2025-07-28SharedCache: Fix a compile error w/ GCCkat
2025-07-28Improve and migrate to fmt logging functions in Mach-O/KernelCache/SharedCachekat
2025-07-23KernelCache: Fix double-click load dialog in symbol listkat
2025-07-22Fix an incorrect offset used in KernelCache header parsingkat
2025-07-21Fix MachO loading some settings too earlyGlenn Smith
Fixes #7117
2025-07-16Miscellaneous leak fixes in MachoView and ObjCProcessorMark Rowe
2025-07-16Mach-O/KernelCache warning cleanupkat
2025-07-15Added search placeholder for DSCView and KCView.Hongyu Chen
2025-07-15[KernelCache] Fix misc warningsMason Reed
2025-07-15Fix shared cache cmake artifact in kernel cacheMason Reed
2025-07-14Disable outlining in .gnu_debugdata to prevent incorrect symbol definitions.Brian Potchik
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-14[Mach-O] Handling for special library ordinals used in binding informationkat
2025-07-10[DSC] Performance improvements and clean-up in SymbolTableViewMark Rowe
Avoid copying the vector of symbols where possible. When no filter string is applied we no longer copy the entire vector symbols by having the symbols used for display be indirected via a pointer. It points either to the unfiltered symbols or the filtered symbols. Some unncessary copies have been removed by using `std::move` where appropriate. Filtering has been updated to avoid `std::vector::reserve` / `std::vector::shrink_to_fit` in favor of letting the filtered vector control its own growth and reuse its buffer. This avoids allocating a ~100MB buffer every time we update the filter only to later reallocate and move the contents into a smaller buffer. Instead the buffer grows via `std::vector`'s usual growth algorithm and it is preserved across filter calls to avoid unnecessarily reallocating it, and only shrink the buffer if it has shrunk significantly vs previous iterations.
2025-07-10[DSC] Use BNAllocStringWithLength when copying strings for the APIMark Rowe
We're copying `std::string` objects that know their length. There's no reason to force a call to `strlen`.
2025-07-10[DSC] Fix GetRegionAt / optimize GetRegionContainingMark Rowe
`GetRegionAt` was really providing the semantics of `GetRegionContaining` due to `m_regions` being an `AddressRangeMap` and using transparent comparators to allow `find` to work with any address in the range. `GetRegionAt` is updated to verify that the start address of the region that was found matches the requested address. `GetRegionContaining` is updated to use `AddressRangeMap::find` rather than doing a linear search over all regions.
2025-07-09[MachO] Treat a binary as containing Objective-C metadata if it has __objc_stubsMark Rowe
`__objc_stubs` is not technically Objective-C metadata, but binaries containing Objective-C stubs need the same processing. `MachoView` was previously only enabling the Objective-C workflow if it thinks there is type metadata. The same criteria was used to determine whether to process Objective-C metadata via `MachoObjCProcessor`. This meant binaries with `__objc_stubs` but no Objective-C type metadata were not running the Objective-C workflow, preventing stub functions from being inlined during analysis.
2025-07-08[MachO] Avoid leaking MachoObjCProcessorMark Rowe
This would leak if parsing of CFStrings was enabled while parsing of Objective-C metadata was disabled. It would also leak if exceptions were thrown or early returns were taken in the ~500 lines between where the object was allocated and it was deleted.
2025-07-08Parse sections containing Objective-C constantsMark Rowe
This adds support for the `__objc_arrayobj`, `_objc_dictobj`, `__objc_intobj`, `__objc_floatobj`, `__objc_doubleobj` and `__objc_dateobj` sections that contain Objective-C constants. These are emitted by Apple's versions of Clang for `const` literals, amongst other things.
2025-07-07[ObjC] Fix handling of relative method selectors with MSVCMark Rowe
The order that the operands to `+` are evaluated in is unspecified. Clang happens to evaluate them left to right and gives the expected answer. MSVC picks the opposite order and so the value it computes is off by 4. This was resulting in missing method names when arm64 binaries containing Objective-C are analyzed on Windows.
2025-07-07KernelCache rewritekat
2025-07-05Fix ELF loader image base calculation to include memory-only PT_LOAD segments.Brian Potchik