summaryrefslogtreecommitdiff
path: root/view/sharedcache
AgeCommit message (Collapse)Author
2025-04-02[SharedCache] Fix some of the workflow issuesMason Reed
Still have the issue with newer IOS stubs not having their direct function address taken
2025-04-02[SharedCache] Fix the triage symbol table data racesMason Reed
Any update to the model should only happen on the UI thread now. This also fixes the other issue here: https://github.com/Vector35/binaryninja-api/issues/6300
2025-04-02[SharedCache] Fix some bugsMason Reed
2025-04-02[SharedCache] Fix some issues with project loadingMason Reed
2025-04-02[SharedCache] Refactor Shared CacheMason Reed
In absence of a better name, this commit refactors the shared cache code.
2025-04-02[SharedCache] Use DefineAutoUserSymbol instead of DefineAutoSymbolMason Reed
This makes it so that we persist the symbols within the regular symbol list in storage
2025-04-02[SharedCache] Make error about invalid metadata a warning, we recover sorta ↵Mason Reed
gracefully now
2025-04-02[SharedCache] Don't show DSCTriage when not in shared cache viewMason Reed
2025-04-02[SharedCache] Optimize parsing of slide infoMark Rowe
Slide info is parsed and applied on the main thread, below the `SharedCache` constructor, when a shared cache is opened. Time spent applying the slide is time that the main thread is blocked. These changes eliminate some unnecessary overhead so what work remains is dominated by kernel work (paging in data, copying pages when the first modification is made). The changes are: 1. Read slide pointers via `ReadULong` rather than the variable-length `Read` method. The compiler isn't able to eliminate the call to `memcpy` in the variable-length `Read` function, and the function call overhead is noticeable given the small size of the read and number of times it is called. 2. Remove the file member from `MappingInfo`. Slide info is applied for a single file at a time so there's no reason to track the file it belongs to. This removes unnecesssary reference counting on the `std::shared_ptr` that holds the `MMappedFileAccessor`.
2025-04-02[SharedCache] Stop crashing if we don't have a valid dyld in PerformInitialLoadMason Reed
Still need to decide on how we want handle this, because we need multiple files we probably just want to prompt the user for a directory?
2025-04-02[SharedCache] Remove warning which is unlikely to be usefulMason Reed
This warning will happen anytime you load an image with already processed regions.
2025-04-02[ObjC] Create a shared ObjC processor for Macho and DSC viewsWeiN76LQh
Both the Macho and DSC views need to process Objective-C but have separate processor classes. It would appear that the DSC version was largely a copy and paste of the Macho view one, with some modifications. The majority of code overlaps between the 2 so it doesn't make sense to maintain 2 and copy and paste improvements/fixes between them. This commit fixes that by creating a base Objective-C processor that contains the shared code. View specific code is implemented in the respective subclasses for the views. Although there is very little view specific code for each.
2025-04-02[SharedCache] Don't serialize state twiceGlenn Smith
2025-04-02[SharedCache] Make it faster to look up which image contains an addressMark Rowe
`MemoryRegion` now tracks the start address of the image to which it belongs. `SharedCache::HeaderForAddress` uses the existing address range map to quickly find the `MemoryRegion` for a given address, and from there can look up the image via its start address. Some extra logic is added to `CacheInfo::Load` to populate the image start address on `MemoryRegion` when loading from metadata that predates this change. The result is that `HeaderForAddress` is no longer the most expensive part of `FindSymbolAtAddrAndApplyToAddr`.
2025-04-02[SharedCache] Demangle relevant symbolsMason Reed
Use the LLVM demangler to demangle relevant symbols
2025-04-02[SharedCache] Remove some dead code and misc lintsMason Reed
2025-04-02[SharedCache] Cleanup SharedCacheWorkflow::FixupStubsMason Reed
Moved some code to a helper function and removed dead code and other oddities
2025-04-02[SharedCache] Don't crash if we have a different metadata versionMason Reed
Also we now initialize m_cacheInfo when calling `DeserializeFromRawView` the responsibility is on the caller to handle
2025-04-02[SharedCache] Warn when loading BNDB with different shared cache metadata ↵Mason Reed
version This does not actually give the user control to exit early, that looks to need core changes.
2025-03-28belated copyright year updateJordan Wiens
2025-03-28Fix initial navigation to DSCTriage viewPeter LaFosse
2025-03-18[SharedCache] Limit sections being added in `SharedCache::InitializeHeader` ↵WeiN76LQh
to the regions being loaded The logic before would default to adding a section unless it was from a region in the `regionsToLoad` argument and its header had already been initialized. However if a user does `Load Section by Address` then there's only one region in `regionsToLoad`. All sections not in that region would be automatically added, even if they had already been or the user hadn't requested them to be loaded.
2025-03-18dyld_shared_cache: Resolve issue where Cache info tables were mistakenly ↵kat
editable
2025-03-18[SharedCache] Improvements to triage view; Fix double-click double-load ↵kat
issue, dont prompt on loading from symbol, auto-navigate to symbol when clicked, loading first if required
2025-03-18Documentation and type hints for sharedcache.py, properly import ↵kat
binaryninja.sharedcache automatically
2025-03-18[SharedCache] Resolve x86_64h binaries not being recognizedkat
2025-02-28[SharedCache] Fix symbol view navigation away from DSCTriage into Linear/Graphkat
2025-02-26[SharedCache] Add the ability to install the plugin using CMakeWeiN76LQh
Using `-t install` currently doesn't install the plugin into the Binary Ninja user plugin directory. This commit fixes that.
2025-02-26[SharedCache] Fix loading DSC BNDB from a local project crashingGlenn Smith
Also fixes a BinaryViewRef leak
2025-02-19[SharedCache] Don't capture `this` within lambda passed to ↵Mark Rowe
MMappedFileAccessor::Open Nothing guarantees that the `SharedCache` lives long enough.
2025-02-18[SharedCache] Fix un-updated symbols listMason Reed
There was a second BeginBulkModifySymbols after rebasing the new processing symbols commit
2025-02-17[SharedCache] Fix building on windows due to unresolved extern symbolsMason Reed
This is _probably_ the fix? I am not actually sure I am pushing so the CI can figure it out for me :)
2025-02-17[SharedCache] Remove using namespace statement from headersMason Reed
2025-02-17Don't fully initialize when in parseOnly modePeter LaFosse
2025-02-17[SharedCache] Split out symbol processing into own functionMason Reed
Split out from https://github.com/WeiN76LQh/binaryninja-api/tree/process-local-symbols
2025-02-17[SharedCache] Define BackingCacheTypeWeiN76LQh
Split out from https://github.com/WeiN76LQh/binaryninja-api/tree/process-local-symbols
2025-02-17[SharedCache] Remove serialization of "unsigned long" in favor of uintX_tGlenn Smith
2025-02-17Fix assert on deserialize routines_command_64Glenn Smith
2025-02-17[SharedCache] Split state into initial, loaded, and modifiedMark Rowe
The initial state is initialized during `PerformInitialLoad` and is immutable after that point. This required some slight restructuring of how information about memory regions is tracked as that was previously modified as regions were loaded. Memory regions are now stored in a map from their address range to the `MemoryRegion` object. This makes it cheap to look them up by address which is a common operation. The modified state consists of changes since the last save to the `DSCView` / `ViewSpecificState`. This means it is no longer necessary to copy any state when mutating a `SharedCache` instance for the first time. Instead, its data structures start off empty and are populated as images, sections, or symbol information is loaded. The loaded state consists of all modified state that has since been saved. It lives on the `ViewSpecificState`. Saving modified state merges it into the the existing loaded state. This pattern is carried over to the `Metadata` stored on the `DSCView`. The initial state is stored under its own metadata key, and each modified state is stored under a key with an incrementing number. This means each save of the state only needs to serialize the state that changed, rather than reserializing all of the state all of the time. There are two huge benefits from these changes: 1. At no point does `SharedCache` have to copy its in memory state. The basic copy-on-write approach introduced in #6129 reduced how often these copies are made, but they're still frequent and very expensive. 1. At no point does `SharedCache` have to re-serialize state to JSON that it has already serialized. JSON serialization previously added hundreds of milliseconds to any mutating operation on `SharedCache`. As a result, this speeds up the initial load of the shared cache by around 2x and loading of subsequent images improves by about the same. One trade-off is that the serialization / deserialization logic is more complicated. There are two reasons for this: 1. The state is now split across multiple metadata keys and needs to be merged when it is loaded. 2. The in-memory representation uses pointers to identify memory regions. These relationships have to be re-established after the JSON is deserialized. As a future direction it is worth considering whether the logic owned by `SharedCache` could be split in a similar manner to the data. The initial loading of the cache header, loading of images, and handling of symbol information are all mostly independent and work on separate data. If the logic were split into separate classes it would be easier to reason about which data is valid when, and would easily permit concurrent loading of multiple images from the shared library in a thread-safe manner.
2025-02-13[SharedCache] Use StringRef for performanceGlenn Smith
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.