summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-02-17Associate a RemoteProject to a Project when applicableJosh Ferrell
2025-02-14uidf refactorRyan Snyder
2025-02-14Update MemoryMap UI with better support for segment modifications.Brian Potchik
2025-02-14fix typo in il_function variable property in python apiJordan Wiens
2025-02-13Add missing test binaries for Rust APIMason Reed
2025-02-13Fix base detection in rust API failing on auto arch detectionMason Reed
Also added actual test for base address detection
2025-02-13Add licensing check for Rust codeMason Reed
If we add new rust dependencies we should now be alerted when a new license type is added.
2025-02-13[SharedCache] Use StringRef for performanceGlenn Smith
2025-02-13StringRef and direct access to symbol namesGlenn Smith
2025-02-13Remove bintxt pluginMason Reed
Binary Ninja now supports these formats in the core
2025-02-13Remove bintxt.Brian Potchik
2025-02-13Update MemoryMap UI Segment Columns.Brian Potchik
2025-02-13Fix leaking BNDataVariableAndName when calling BNGetDebugDataVariableBy ↵Mason Reed
functions
2025-02-13Set default analysis level in BASE to fullBrandon Miller
2025-02-12[SharedCache] Remove designator initializationMason Reed
Fixes MSVC C++17 failing to compile, hopefully.
2025-02-12[SharedCache] Don't pretty-print the metadataGlenn Smith
2025-02-12[SharedCache] Fix crash when trying to deserialize a `routines_command_64` ↵Mason Reed
which had not been serialized. We will just return early, this is fine as the previous code would effectively do the same thing.
2025-02-12[SharedCache] Fix misc compiler warningsMason Reed
These are from clang so there are still a bunch of warnings on GCC and MSVC
2025-02-12[SharedCache] Fix designator order for fieldsMason Reed
This apparently is not an issue on LLVM, but GCC and MSVC both seem to dislike this.
2025-02-12[SharedCache] Always initialize logger firstMason Reed
Potential nullptr deref on invalid view type (see the error log right after the logger init)
2025-02-12[SharedCache] Appease formatting rulezMason Reed
This is a meaningless commit, i'm throwing this in for when someone inevitably calls out the inconsistent "formatting" (what style is this again?)
2025-02-12[SharedCache] Fix performance when loading images from iOS 14 shared cachesMark Rowe
A logic error in `FindSymbolAtAddrAndApplyToAddr` meant that a code path that would attempt to re-use existing symbol definitions in the view would still fall back to searching the exported symbol list. `FindSymbolAtAddrAndApplyToAddr` is updated to return early if a symbol already exists at the target location and the target location is the same as the symbol location. Additionally, in the event a symbol was found in the view at the symbol location, it is applied to the target location and then the function returns. Additionally, `WillMutateState` is moved after these initial checks so it is only called in the codepaths that attempt to locate the symbol amongst the exported symbols. After these changes it is now possible to load QuartzCore from the iOS 14 shared cache in around 70 seconds. Previously it would run for hours without the load completing.
2025-02-12[SharedCache] Don't crash if we open a file with slide version 1Mason Reed
Also add some other misc error reporting and nullptr check
2025-02-12Add Symbol constructor for pre-allocated core namespaceMason Reed
This allows a consumer to bypass the alloc + free of the API NameSpace, removing the need for the consumer to manually construct a symbol for said behavior.
2025-02-12[SharedCache] Rework how file accessors are handledMark Rowe
Previously, `MMappedFileAccessor::Open` attempted to impose a fixed limit on the number of file accessors that were live at one time. This was done because the default file descriptor limit on some platforms is relatively low (256 on macOS). Given that recent iOS shared caches can contain 60+ files it is easy to tie up a large percentage of this limit by opening one or two shared caches. This is problematic as if the limit imposed by `MMappedFileAccessor::Open` is reached, the attempt to access the file will block waiting for another file accessor to be closed. This can lead to a deadlock. This commit makes three changes to this strategy: 1. It attempts to raise the file descriptor limit to 1024. Unix systems support both soft and hard file descriptor limits. The soft file descriptor limit is what is enforced, but a process can explicitly raise the limit to any value below the hard limit if it wishes. 2. The fixed limit on open files accessors is changed to a soft limit. `FileAccessorCache` is introduced to manage the caching of file accessors. It provides a basic LRU cache. Whenever a new file is opened, the cache of open accessors is pruned to stay below the target limit (50% of the soft file descriptor limit). This limiting is primarily done to allow files containing dirty pages to be unmapped if they're no longer being used. LRU isn't the optimal strategy for this, but it is simple to implement and understand. Ideally there'd be some access time component to the cache so files that haven't been accessed can be released. 3. File accessors are cached even for sessions corresponding to views that have been closed. The "Open Selection with Options..." context menu hits this case as a view is created and destroyed as part of populating the options dialog, and the real view is then created in the same session. The most significant benefit of this change is that the logic around opening / closing file accessors is simpler and can no longer deadlock. While working on this I noticed that `SharedCache` opened some files via `MMappedFileAccessor::Open` without specifying a post-open operation to apply slide information. Instead, it would explicitly apply the slide information after opening the file. This works fine so long as the file accessor limit is never hit. If it is hit and the accessor is closed, the next time the file is opened it will not have any slide information applied. This would lead to very confusing bugs.
2025-02-12[SharedCache] Simplify MMappedFileAccessor::Read* methodsMark Rowe
This change is mostly motivated by simplifying the code, but it also brings minor correctness and performance benefits. 1. The pointer returned by mmap is stored as a uint8_t* rather than void* as that is how it is used. This reduces how often it needs to be cast to a different type before it is used. 2. Read methods for primitives delegate to a new Read template function that in turn delegates to the general-purpose `Read(void* dest, size_t address, size_t length)`. This improves the consistency of bounds checking and simplifies the code. The compiler is more than willing to inline this so we get less repetition with no overhead. 3. ReadNullTermString now uses std::find to find the nul byte and directly constructs the string from that range of bytes. This removes an unnecessary allocation that was previously being forced by the use reserve followed by shrink_to_fit. It also avoids repeated reallocation for longer strings as they grew past the the reserved size as they were being built up a character at a time.
2025-02-12[SharedCache] Make MetadataSerializable::Load staticMark Rowe
`MetadataSerializable` is updated to allow a subclass to optionally specify the return type of `Load`. If not specified it defaults to the subclass itself. `SharedCache` specifies `std::optional` to represent the case where the serialized metadata is in a format or version it does not recognize. By making `Load` a static member function and having it return a new object it becomes easier to reason about the state of objects when a deserialization failure occurs. It can return `std::optional` to indicate failure and there is no object left in an unknown state. Prior to this, `Load` worked on an existing instance of an object. It was unclear what state the object would be in if a deserialization failure occurred (its original state prior to `Load`? some partially-loaded state? a null state?). The failure itself also had to be communicated out of band.
2025-02-12bugfix: ARM64: missing break in il.cpp's switchMaxime Meignan
A `break` was missing in the switch, making the LDXRH instruction generate 2 IL instructions
2025-02-12Fix setter in FWN relationships Python APIBrandon Miller
2025-02-11Fix partial initialization of `DisassemblyTextLine`Mason Reed
The usage of `DisassemblyTextLine` in the FFI was unsound, we would forget to initialize some fields causing a myriad of issues where round-tripping through the FFI was losing information.
2025-02-11Fix memory leak when calling `DataRenderer::GetLinesForData` or ↵Mason Reed
`DataRenderer::RenderLinesForData`
2025-02-11Rust API misc formattingMason Reed
2025-02-11Fix FlowGraph::low_level_il crash in Rust APi with no LLIL function objectMason Reed
2025-02-11Do not load user or repo plugins by default when initializing a headless ↵Mason Reed
instance in Rust API
2025-02-11Fix Rust InstructionTextTokenKind not consulting the string token contextMason Reed
This caused a crash if we visited a builtin with a "fake" string. Where the token value is not actually the string type.
2025-02-11Add AsMut impl for Ref in Rust APIMason Reed
2025-02-11Truncate requested section names to 16 bytes when importing DWARF info from ↵Josh Ferrell
a Mach-O
2025-02-11Implement Snapshot::HasData()Glenn Smith
2025-02-11Add SplitTabWidget::setTabSizesGlenn Smith
2025-02-11Add typedef for ProgressFunction and add DefaultProgressFunctionGlenn Smith
2025-02-11Add LowLevelILOperation.LLIL_BOOL_TO_INT. Fix ↵Xusheng
https://github.com/Vector35/binaryninja-api/issues/6408
2025-02-10[mips] Merging PR https://github.com/Vector35/binaryninja-api/pull/6013: ↵Galen Williamson
adding mips3 support
2025-02-10Add API to get remote server build versionJosh Ferrell
2025-02-10Fix item indices getting desynced when moving nested items in project browserJosh Ferrell
2025-02-10[SharedCache] Optimizations regarding stl container usage in SharedCache.cppkat
2025-02-10Fix some issues regarding allocations within the sharedcache plugin FFIkat
2025-02-10[SharedCache] Make `m_exportInfos` map's values a `shared_ptr`WeiN76LQh
This avoids expensive copying when returning a value from the map in `SharedCache::GetExportListForHeader`. Additionally it ensures that the value stays alive and at the same location in memory if `m_exportInfos` is modified and requires its storage to be re-allocated. I was unable to use a `unique_ptr` instead of a `shared_ptr` because of copy semantics with `m_exportInfos` in `ViewStateCacheStore`. I don't see things being any worse using `shared_ptr` instead of `unique_ptr` anyway and it means less code changes.
2025-02-10[SharedCache] Only setup undo actions and bulk modify in ↵WeiN76LQh
`SharedCache::FindSymbolAtAddrAndApplyToAddr` if a symbol is found
2025-02-10[SharedCache] Improve the types for `m_exportInfos`WeiN76LQh
This commit changes 2 things; 1. `m_exportInfos` is now a map where its values are also a map rather than a vector of pairs. The reason for this is that `SharedCache::FindSymbolAtAddrAndApplyToAddr` is a hot path which does by far the most accesses to `m_exportInfos`. In that function it must find the correct symbol for a given address so a map lookup will be much quicker than iterating a vector. The other use cases of `m_exportInfos` would prefer a vector but they are executed very infrequently. 2. The symbols are stored in `m_exportInfos` as references to the `Symbol` type. This makes more sense because otherwise there is a lot of time spent converting to and from a `Symbol` type and a pair of `BNSymbolType` + a `std::string`.
2025-02-10[SharedCache] Add parameter to `SharedCache::InitializeHeader` to check if ↵WeiN76LQh
`m_exportInfos` was modified This probably makes more sense than the current solution of using execution of the callback parameter to determine if `m_exportInfos` was modified.