Git Product home page Git Product logo

arch-arm64's Introduction

arch-arm64

This is the Aarch64 plugin that ships with Binary Ninja.

What's What

  • arch_arm64.cpp implements the Architecture class
  • il.cpp contains the lifter, the translator from disassembly to intermediate language
  • disassembler/* is the disassembler

Testing

  • arm64test.py currently implements a very basic "lift to string and compare" set of unit tests
  • disassembler/test.py implements a very basic "disassemble to string and compare" set of unit tests

Personal Binary Ninja users can test via the built in console:

>>> sys.path.append('C:/users/x/documents/binja/arch-arm64') # Path directory containing arm64test.py
>>> from importlib import reload
>>> import arm64test
success!
>>> # Add or fix any testcases
>>> reload(arm64test)
success!

And, of course, you can open a test binary in Binary Ninja with this architecture built and activated to see if results are as expected.

Pull Requests

Please follow whatever formatting conventions are present in the file you edit. Pay attention to curly brackets, spacing, tabs vs. spaces, etc.

If you're making an architecture or lifter change, add a test case to arm64test.py that fails before your change and succeeds after your change.

If you're making a disassembler change, add a test case to disassembler/test.py that fails before your change and succeeds after your change.

When you submit your first PR to one of Vector 35's repositories, you'll receive a notice from CLA Assistant that allows you to sign our Contribution License Agreement online.

Building

Building the architecture plugin requires cmake 3.9 or above. You will also need the Binary Ninja API source.

First, set the BN_API_PATH environment variable to the path containing the Binary Ninja API source tree.

Run cmake. This can be done either from a separate build directory or from the source directory. If your app is installed in a non-default location, set BN_INSTALL_DIR in your cmake invocation, like cmake -DBN_INSTALL_DIR=/Applications/Binary\ Ninja\ DEV.app/. Once that is complete, run make in the build directory to compile the plugin.

The plugin can be found in the root of the build directory as libarch_arm64.so, libarch_arm64.dylib or arch_arm64.dll depending on your platform.

To install the plugin, first launch Binary Ninja and uncheck the "Aarch64 architecture plugin" option in the "Core Plugins" section. This will cause Binary Ninja to stop loading the bundled plugin so that its replacement can be loaded. Once this is complete, you can copy the plugin into the user plugins directory (you can locate this by using the "Open Plugin Folder" option in the Binary Ninja UI).

Do not replace the architecture plugin in the Binary Ninja install directory. This will be overwritten every time there is a Binary Ninja update. Use the above process to ensure that updates do not automatically uninstall your custom build.

Build Example

acquire repositories

mkdir ~/repos/vector35
cd ~/repos/vector35
git clone [email protected]:Vector35/binaryninja-api.git
git clone [email protected]:Vector35/arch-arm64.git

environment variables

export BN_API_PATH=~/repos/vector35/binaryninja-api

cmake, make

cd arch-arm64
cmake -DBN_INSTALL_DIR=/Applications/Binary\ Ninja\ DEV.app/ .
make

Build Troubleshooting

example

CMake Error at CMakeLists.txt:8 (message):
  Provide path to Binary Ninja API source in BN_API_PATH
resolution:
ensure BN_API_PATH is in your environment

example

CMake Error at /Users/andrewl/repos/vector35/binaryninja-api/CMakeLists.txt:53 (message):
  Binary Ninja Core Not Found
resolution:
ensure BN_INSTALL_DIR is supplied at command line invocation of cmake
ensure some bad directory is not cached in CMakeCache.txt

example

cmake seems to ignore your setting of BN_INSTALL_DIR and other cmake variables
resolution:
rm CMakeCache.txt

example

undefined symbols at link time, like:
Undefined symbols for architecture x86_64:
  "_BNClearUserVariableValue", referenced from:
  BinaryNinja::Function::ClearUserVariableValue(BinaryNinja::Variable const&, unsigned long long) in libbinaryninjaapi.a(function.cpp.o)
resolution:
ensure that your api repo is on the same channel and at the same commit as the libbinaryninjacore you're linking against
eg: binaryninja is on dev update channel and is up-to-date and binaryninja-api repo is on branch dev with latest pulled

arch-arm64's People

Contributors

brinlyau avatar couleeapps avatar d0ntpanic avatar joshwatson avatar lwerdna avatar nshp avatar plafosse avatar psifertex avatar radare avatar sharksthere avatar toshipiazza avatar xusheng6 avatar yrp604 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.