{"id":13841401,"url":"https://github.com/airbus-cert/Yagi","last_synced_at":"2025-07-11T12:31:57.110Z","repository":{"id":46534963,"uuid":"403906808","full_name":"airbus-cert/Yagi","owner":"airbus-cert","description":"Yet Another Ghidra Integration for IDA","archived":false,"fork":false,"pushed_at":"2022-08-04T15:01:49.000Z","size":38301,"stargazers_count":477,"open_issues_count":8,"forks_count":39,"subscribers_count":22,"default_branch":"main","last_synced_at":"2024-08-05T17:27:25.243Z","etag":null,"topics":["decompiler","disassembler","ghidra","ida-plugin","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/airbus-cert.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-07T08:48:55.000Z","updated_at":"2024-07-17T14:31:34.000Z","dependencies_parsed_at":"2022-08-12T12:51:05.303Z","dependency_job_id":null,"html_url":"https://github.com/airbus-cert/Yagi","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airbus-cert%2FYagi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airbus-cert%2FYagi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airbus-cert%2FYagi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airbus-cert%2FYagi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/airbus-cert","download_url":"https://codeload.github.com/airbus-cert/Yagi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225720402,"owners_count":17513597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["decompiler","disassembler","ghidra","ida-plugin","reverse-engineering"],"created_at":"2024-08-04T17:01:10.125Z","updated_at":"2024-11-21T11:30:51.391Z","avatar_url":"https://github.com/airbus-cert.png","language":"C++","readme":"# Yagi\n\nYet Another Ghidra Integration for IDA\n\n## Overview\n\nYagi intends to include the wonderful [Ghidra](https://github.com/NationalSecurityAgency/ghidra) decompiler into both [IDA pro](https://hex-rays.com/ida-pro/) and [IDA Free](https://hex-rays.com/ida-free/).\n\n![Example of Yagi](.img/yagi.gif)\n\n:package: **You can download installers for Windows and Linux versions [here](https://github.com/airbus-cert/Yagi/releases), then press F3 and enjoy!** :package:\n\nHere is the list of architectures that Yagi can decompile at the moment:\n\n|Arch Names|Yagi|\n|----------|-----------|\n|x86|✔️|\n|x86_64|✔️|\n|arm|✔️|\n|aarch64(armv8)|✔️|\n|powerpc|✔️|\n|mips|✔️|\n|sparc|✔️|\n|avr8|✔️|\n|6502|✔️|\n|z80|✔️|\n|eBPF|:bee:✔️:bee:|\n|cp1600|❌|\n|cr16|❌|\n|dalvik|❌|\n|jvm|❌|\n|tricore|❌|\n|riscv|❌|\n|System Z|❌|\n|xCore|❌|\n|68000|❌|\n\nIt's easy to add one if it's supported by Ghidra. Just open an issue, and we will do our best!\n\nIt allows you to edit the following items:\n* Global Symbol like function prototype, global variable, etc.\n* Local stack variables name and type\n* Local registry variables name and type\n\n|Key|Interact|\n|----------|-----------|\n|Decompile| :computer_mouse: Place cursor on function :keyboard: **F3** |\n|Edit Type| :keyboard: **Y** |\n|Clear Type| :keyboard: **C** |\n|Edit Name| :keyboard: **N** |\n|Cross References| :keyboard: **X** |\n|Navigate| :computer_mouse: **Double Click** on keyword |\n\n:floppy_disk: **Changes are save into IDA database** :floppy_disk:\n\n## Build\n\nAs `Yagi` is built using git `submodules` to handle Ghidra dependencies, you will first need to do a *recursive* clone:\n\n```\ngit clone https://github.com/airbus-cert/Yagi --recursive\n```\n\n### For Windows\n\n#### Install Dependencies\n\nAs Ghidra uses `bison` and `flex` to parse  the `sleigh` grammar, we need first to install build dependencies from [here](https://github.com/lexxmark/winflexbison/releases/)\n\nYou also need the `IDA` SDK associated with your version of IDA.\n\n#### Cmake\n\nYagi's build system is based on cmake; you can find an MSI package [here](https://github.com/Kitware/CMake/releases/).\n\nYou need at least a Visual Studio compiler with C++ toolchain.\n\n#### Production\n\nTo generate a Wix installer, you need to install [WiX](https://github.com/wixtoolset/wix3/releases) before.\n\nThen, let the `cmake` magic happen:\n\n```\ngit clone https://github.com/airbus-cert/Yagi --recursive\nmkdir build_yagi\ncd build_yagi\ncmake ..\\Yagi -DIDA_SDK_SOURCE_DIR=[PATH_TO_IDA_SDK_ROOT_FOLDER] -DCPACK_PACKAGE_INSTALL_DIRECTORY=\"IDA Pro 7.6\"\ncmake --build . --target package --config release\n```\n\nA new `yagi-1.0.0-win64.msi` will be generated. It will contain all the necessary dependencies to install the plugin.\n\n#### Development\n\nTo create a dev environment you need to generate the Visual Studio solution:\n\n```\ngit clone https://github.com/airbus-cert/Yagi --recursive\nmkdir build_yagi\ncd build_yagi\ncmake ..\\Yagi -DIDA_SDK_SOURCE_DIR=[PATH_TO_IDA_SDK_ROOT_FOLDER] -DBUILD_TESTS=ON\n```\n\n`PATH_TO_IDA_SDK_ROOT_FOLDER` represents the root path of the decompressed archive provided by Hex-Rays.\n\nTo launch unit tests, just use `ctest` installed with `cmake`:\n\n```\ncd tests\nctest -VV\n```\n\n### For Linux\n\n#### Install Dependencies\n\nAs Ghidra uses `bison` and `flex` to parse  the `sleigh` grammar and Yagi is built using Cmake and C++, you will need the following:\n\n```\napt install cmake c++ git flex bison yacc\n```\n\n#### Production\n\nTo generate an installer script:\n\n```\ngit clone https://github.com/airbus-cert/Yagi --recursive\nmkdir build_yagi\ncd build_yagi\ncmake ../Yagi -DIDA_SDK_SOURCE_DIR=[PATH_TO_IDA_SDK_ROOT_FOLDER]\ncmake --build . --target package --config release\n```\n\nThis will produce a `yagi-1.0.0-Linux.sh` script. Then you just have to launch it:\n\n```\n./yagi-1.0.0-Linux.sh --prefix=[PATH_TO_IDA_INSTALL_FOLDER]\ny\nn\n```\n\nEnjoy!\n\n#### Development\n\nTo generate a dev environment you need to generate the Makefile:\n\n```\ngit clone https://github.com/airbus-cert/Yagi --recursive\nmkdir build_yagi\ncd build_yagi\ncmake ../Yagi -DIDA_SDK_SOURCE_DIR=[PATH_TO_IDA_SDK_ROOT_FOLDER] -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug\nmake\n```\n\nTo launch unit tests, just use `ctest` installed with `cmake`:\n\n```\ncd tests\nctest -VV\n```\n\n## TODO\n\n* Handle enum types\n* Add rules to handle end function computation on AARCH64\n* Change constant type (key H, R)\n\n## Credits and references\n\nThanks [Ghidra](https://ghidra-sre.org/) development team to open sources this master piece of software.\n\nThanks [Hex-Ray](https://hex-rays.com/) teams to built a very extensible software.\n","funding_links":[],"categories":["C++"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairbus-cert%2FYagi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fairbus-cert%2FYagi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairbus-cert%2FYagi/lists"}