summaryrefslogtreecommitdiff
path: root/view
AgeCommit message (Collapse)Author
2026-03-16Refactor where architecture selection is performed for universal binariesMark Rowe
Responsibility for selecting an architecture is moved out of `UniversalTransform` and into a new `ContainerOpenRequest` class. `UniversalTransform` still handles architecture selection in headless operation (for now).
2026-03-06Implement DTPOFF64 and DTPMOD64 relocations.Alexander Taylor
Finally closes #5463.
2026-03-06Remove unused variable (skip-ci)Xusheng
2026-03-05Parse and display PE resource information in triage view. Fix ↵Xusheng
https://github.com/Vector35/binaryninja-api/issues/4052, fix https://github.com/Vector35/binaryninja-api/issues/5607
2026-01-27Fix MIPS64 relocation entry parsing.Alexander Taylor
2026-02-27[MachO] Ensure that weak bound symbols are not resolved to their import addressMark Rowe
Fixes https://github.com/Vector35/binaryninja-api/issues/7989. Also corrects an oversight from d92b3684 in handling of library ordinals >= 128.
2026-02-27[MachO] Fix incorrect handling of BIND_SPECIAL_DYLIB_*_LOOKUP in chained fixupsMark Rowe
These lookup modes are negative values that are encoded in the library ordinal, an unsigned field, of an import fixup entry. Incorrect sign extension when converting these ordinals back to signed values led to them being misinterpreted.
2026-02-24[DSC] Simplify file mapping to fix intermittent unrelocated pointersMark Rowe
The `FileAccessorCache`'s LRU eviction could discard a file's mapped data after slide info had already been applied to it. Future accesses to the file produced a fresh mapping, but failed to reapply the slide info. This could result in pointers not correctly being slid, such as in https://github.com/Vector35/binaryninja-api/issues/7689. The LRU cache existed to stay within OS file descriptor limits, since the old `MappedFile` held its fd open for the lifetime of the mapping. There's no real reason for it to hold the file descriptor open like this. Closing it after `mmap` is sufficient to avoid the file descriptor limits. `MappedFileRegion` replaces the combination of `FileAccessorCache`, `WeakFileAccessor`, and `MappedFileAccessor`. It closes the fd immediately after mmap, so all files can stay mapped without consuming descriptors, making the cache unnecessary. `MappedFileRegion` is owned directly by the `CacheEntry` for its full lifetime. Slide info is applied exactly once to each `MappedFileRegion`.
2026-02-23[KernelCache] Automatically unwrap kernel caches within a full IMG4 containerMark Rowe
This builds on the existing support for opening kernel caches directly from IM4P payload files, and allows opening macOS kernel caches directly from `/System/Volumes/Preboot/<apfs-uuid>/boot/<boot-manifest-hash>/System/Library/Caches/com.apple.kernelcaches/kernelcache`.
2026-02-23Revert "validation for zero sized symbol or string tables"Brian Potchik
This reverts commit bcc40473b3660005e83f51150bdc17ae177768dc.
2026-02-23Revert "guard against empty .interp and .dynamic"Brian Potchik
This reverts commit 4573354f23da495099983dac4b665988cd837ff5.
2026-02-23[Rust] Fix plugins being referenced in `cargo about` outputMason Reed
2026-02-19guard against empty .interp and .dynamicJordan Wiens
2026-02-19validation for zero sized symbol or string tablesJordan Wiens
2026-02-17Handle Universal binaries through container transform system.Brian Potchik
2026-02-13[DSC] Correctly mark symbols as having local, global, or weak bindingMark Rowe
2026-02-06Add regex and case sensitivity options to FilterEditJosh Ferrell
2026-02-02[MachO] Set segment flags for kernel images based on how XNU initially maps themMark Rowe
This was done for kernel cache in https://github.com/Vector35/binaryninja-api/pull/7519, and is now being extended to Mach-O images that appear to be XNU kernels (that is, they contain `__KLD` segments). This improves the experience when opening kernels from the macOS Kernel Debug Kit.
2026-01-30Force ELF view addr size to 4 bytes for x32 and ilp32Brandon Miller
These binaries can be ELF64 or ELF32 format, if the user specifies linux-x32 or linux-ilp32 platforms the BinaryView's default address size needs to be 4, even if it's an ELF64
2026-01-30Improve filename handling for container files.Brian Potchik
2026-01-23Lifted new PPC insns, MIPS reloc fix.Alexander Taylor
2026-01-23Implement R_386_IRELATIVE relocation handling.Alexander Taylor
Closes #7851.
2026-01-22[ELF] Fix reading dynamic string tables at large offsetsJosh Ferrell
2026-01-22[Mach-O] Improve how section types are identifiedwanghaiwei
1. A section's `flags` are masked with `SECTION_TYPE` before being compared. This prevents misclassifying a section when its low bits are shared with other section types. 2. `__mod_init_func` and `__init_offsets` are identified by section type flags, rather than by name. There's no documented reason why these were being matched by name. 3. A fallback is added to detect `__got` sections by name. This is necessary as some kext bundles that have their `__got` sections as `S_REGULAR` rather than `S_NON_LAZY_SYMBOL_POINTERS`. This fixes https://github.com/Vector35/binaryninja-api/issues/7891. Thanks to @WHW0x455 for these fixes.
2026-01-22architecturePreference description updateJordan Wiens
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.
2026-01-01update copyrights for 2026Jordan Wiens
2025-12-20Fix many of the warnings that show up when compiling with GCC 15.2Mark Rowe
2025-12-16Support automatic and manual endianness override for x86 ELF files (#7347)Copilot
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2025-12-15[MachO] Fix handling of relocations for self-bound data symbolsMark Rowe
Fixes https://github.com/Vector35/binaryninja-api/issues/7781.
2025-12-10[Rust] Move architecture module code into more reasonable filesMason Reed
To keep backwards compatibility for commonly referenced code we re-export them within the architecture module. Also does some light refactoring of some newly added APIs to keep them more consistent with other parts of the codebase.
2025-12-08[KernelCache] Wrap section creation within BeginBulkAddSegments / ↵Mark Rowe
EndBulkAddSegments This defers rebuilding of the section map until after all sections for an image have been added, rather than having the section map be rebuilt after adding each section.
2025-12-08[DSC] Wrap section creation within BeginBulkAddSegments / EndBulkAddSegmentsMark Rowe
This defers rebuilding of the section map until after all sections for an image have been added, rather than having the section map be rebuilt after adding each section.
2025-12-08Introduce an RAII type for managing bulk symbol modificationsMark Rowe
Fixes https://github.com/Vector35/binaryninja-api/issues/7666. Correctly managing the state of bulk symbol modifications via `BeginBulkModifySymbols` / `EndBulkModifySymbols` is error-prone in the face of exceptions and early returns. Leaking a bulk symbol modification can leave the view in a state where no further changes to symbols will be applied. All users of the C++ API are encouraged to move from `BeginBulkModifySymbols` / `EndBulkModifySymbols` to the new `BulkSymbolModification` class.
2025-12-04[DSC] Fix unhandled exception when opening secondary cache file with ↵Mason Reed
unbacked regions Fixes https://github.com/Vector35/binaryninja-api/issues/7724
2025-11-26[DSC] Place synthetic sections after the cache's address rangeMark Rowe
This ensures they do not overlap with any images that may later be loaded from the shared cache.
2025-11-26[KernelCache] Place synthetic sections after the cache's address rangeMark Rowe
This ensures they do not overlap with any images that may later be loaded from the kernel cache. Fixes https://github.com/Vector35/binaryninja-api/issues/7634.
2025-11-25Update to Qt 6.10.1Rusty Wagner
2025-11-17Fix some compiler warningsRusty Wagner
2025-11-11[KernelCache] Remove 'Load Selected Image and Dependencies'Mark Rowe
Fixes https://github.com/Vector35/binaryninja-api/issues/7615. The dependency loading for kernel cache images was copied from the shared cache code, and looks for `LC_LOAD_DYLIB` load commands to determine the direct dependencies of an image. Images in kernel caches don't use `LC_LOAD_DYLIB` load commands so no dependencies were ever loaded. It could, however, result in a crash.
2025-11-04[MachO] Set display name of memory regions to match the segment names they ↵Mark Rowe
correspond to
2025-11-04Update FilterEdit and FilterTarget to preserve existing selectionsMark Rowe
The down and enter keys now preserve an existing selection in the associated list or table views, rather than unconditionally selecting or activating the first item.
2025-11-04Fix whitespace. (skip-ci)Brian Potchik
2025-10-23[KernelCache] Set segment permissions based on how XNU initially maps themMark Rowe
XNU maps kernel cache segments in with different permissions than the load commands indicate. For instance, `__DATA_CONST` is initially mapped as read-write before later being re-mapped as read-only. Treating it as read-only results in analysis falsely assuming that global variables cannot change. To work around this we maintain a mapping from segment name to initial permissions (i.e., most lax permissions) and favor them over permissions derived from the segment load command. Section semantics are also derived from the segment's permissions when the segment is present in the mapping. The mapping is based on the initial permissions established by `arm_vm_prot_init` within the XNU source.
2025-10-22[MachO] Fix GCC buildMark Rowe
Clang, MSVC and GCC all have different opinions about what's permissible with initialization from a braced initializer list.
2025-10-22[MachO] Fix Windows buildMark Rowe
2025-10-22[Mach-O] Refactor fixup chain parsingMark Rowe
The parsing of fix-up chains is moved out of `MachoView` and into its own class. It deals purely in terms of offsets into the Mach-O slice. `MachoView` translates those offsets to mapped addresses when needed. This is primarily aimed at fixing incorrect handling of pointer formats that use offsets where in some cases the relocations would be applied at incorrect addresses due to confusion between file offsets, Mach-O slice offsets, and VM offsets. It incidentally fixes addends from bind operations not being respected. These show up most frequently in C++ RTTI information.
2025-10-21better validation for malformed PE RSRC records and cleanup (fixes an ↵Jordan Wiens
infinite loop)