| Age | Commit message (Collapse) | Author |
|
It wasn't supported before and having it enabled means needing to change charset to utf-8
|
|
|
|
Quantized Floating Point instructions, fixes/completes 64-bit instruction/register support)
|
|
Allows language bindings like rust to free conditions lists sanely
|
|
Allows language bindings like rust to free register lists sanely
|
|
DEP_BINARYNINJACORE_PATH is an artifact from the branch `rust_break_everything`
|
|
|
|
|
|
This was missing as apparently some of this was written against the `rust_break_everything` branch.
|
|
Add safety doc comment to explain why this is allowed
|
|
|
|
|
|
Instead of using the interaction api or text input just use a rust crate to manage the file picker dialog
|
|
https://github.com/Vector35/binaryninja-api/issues/6132
|
|
|
|
This command will update or create a signature file with the selected function
|
|
|
|
|
|
There seem to be a number of issues with slide info parsing. I decided the simplest fix was to largely mimick what `dyld` is doing.
Part of this process was to remove creating a vector of page starts and processing them in another loop below the one where they were read out. It wasn't clear to me the original design decision to separate it into 2 loops like that. I think this was part of the problem that was causing issues.
By adding rewrites in the same loop where page starts are being read out, it was much easier to mimick the code in `dyld` which I assume has to be correct. So as long as my copying was correct then I believe this should work as intended.
Not everything has been thoroughly tested but I'm pretty confident v3 and v5 are now working as intended. v2 should be but less testing of it has been done.
|
|
The issue this commit fixes was causing `SharedCache::ParseAndApplySlideInfoForFile` to completely fail to work with v5 slide info, which had a lot of knock on effects, i.e. lots of Objective-C analysis was failing due to invalid pointers which hadn't been fixed up.
`dyld_cache_slide_info5` has 4 bytes of padding before `value_add`. Whilst `value_add` is not actually being read from, `SharedCache::ParseAndApplySlideInfoForFile` will read at a location in the file based on the size of the structure `dyld_cache_slide_info5`. This being off by 4 bytes basically broke v5 slide info fixups.
With this fix many more Objective-C functions have names and a lot more `msgSend` calls are fixed up.
|
|
|
|
Copying the state from the cache into a new `SharedCache` object is done
with a global lock held and is so expensive that it results in much of
the shared cache analysis running on a single thread, with others
blocked waiting to acquire the lock.
The cache now holds a `std::shared_ptr` to the state. New `SharedCache`
objects take a reference to the cached state and only create their own
copy of it the first time they perform an operation that would mutate
it. The cached copy is never mutated, only replaced, so there is no
danger of modifying the state out from under a `SharedCache` object.
Since the copy happens at first mutation, it is performed without any
global locks held. This avoids blocking other threads.
This cuts the initial load time of a macOS shared cache from 3 minutes
to 70 seconds, and cuts the time taken to load and analyze AppKit from
multiple hours to around 14 minutes.
|
|
The flags field was being left uninitialized which could result in the
region being mishandled during later analysis.
|
|
There are typically only a few dozen mappings, while there can be
millions of pages. This reduces the amount of time spent populating the
mapping from region to file accessor along with the memory usage of the
same.
|
|
|
|
api/MetadataSerializable.hpp is removed in favor of including
core/MetadataSerializable.hpp. Both headers defined types with the same
name leading to One Definition Rule violations and surprising behavior.
The serialization and deserialization context are now created on-demand
during serialization rather than being a member of
`MetadataSerializable`. This reduces the size of every serializable
object by ~220 bytes.
The context is passed explicitly as an argument to `Serialize` /
`Deserialize`. As a result, `Serialize` / `Deserialize` can now be free
functions rather than member functions.
Since `MetadataSerializable` is not used for dynamic dispatch,
the virtual methods are removed and the class is updated to be a class
template using CRTP. This allows delegating to the derived class's
`Load` and `Store` methods without the additional size overhead of the
vtable pointer in every serializable object.
These changes reduce the memory footprint of Binary Ninja after loading
the macOS shared cache and loading a single dylib from it from 8.3GB to
4.6GB.
|
|
|
|
|
|
|
|
|
|
|
|
Fixes more parsing failures: https://github.com/Vector35/idb-rs/compare/0.1.5...0.1.6
|
|
|
|
|
|
Previously only the relocation ranges were available
|
|
|
|
Fixes many of the known parsing failures
|
|
Some binaries consist of LO16 entires that are BEFORE associated HI16
entries. Also, prior to this commit we don't appear to be applying
HI16 relocations at all for MIPS64. mips_decompose was being called
with MIPS_32 and failing prior to fixing up the relocation
|
|
|
|
|
|
This reverts commit 0237e4d47493e60d256fd7332866b1a7f881abd9.
|
|
|
|
Also bumps WARP so that loading of extremely large signature files can occur
|
|
|
|
|
|
|
|
Will handle optional temporary register assignment now
|
|
|
|
|
|
|