Compare commits

..

5 Commits

Author SHA1 Message Date
xenia 9d42d525a8 fix extension build 2025-09-13 23:45:17 -04:00
xenia 26d03f13e2 oops 2025-09-13 23:38:05 -04:00
xenia 5fb85e43b3 fix ghidra extensions 2025-09-13 23:36:41 -04:00
xenia bce039f350 fix ghidra extensions 2025-09-13 23:34:19 -04:00
xenia b1cdaa01d5 fix binsync metadata 2025-09-13 23:29:43 -04:00
12 changed files with 67 additions and 38 deletions

View File

@ -10,7 +10,7 @@ final: prev: {
ghidra_headless = final.ghidra.lib; ghidra_headless = final.ghidra.lib;
# stuff that tracks upstream # stuff that tracks upstream
ghidra = final.callPackage ./pkgs/reverse-enginering/ghidra/build.nix { ghidra = final.callPackage ./pkgs/reverse-engineering/ghidra/build.nix {
protobuf = final.protobuf_21; protobuf = final.protobuf_21;
}; };
ghidra-extensions = final.lib.recurseIntoAttrs (final.callPackage ./pkgs/reverse-engineering/ghidra/extensions.nix { }); ghidra-extensions = final.lib.recurseIntoAttrs (final.callPackage ./pkgs/reverse-engineering/ghidra/extensions.nix { });

View File

@ -65,4 +65,11 @@
]; ];
pythonImportsCheck = [ "binsync" ]; pythonImportsCheck = [ "binsync" ];
meta = {
description = "Reversing plugin for cross-decompiler collaboration, built on git";
homepage = "https://github.com/binsync/binsync";
changelog = "https://github.com/binsync/binsync/releases/tag/${src.tag}";
license = lib.licenses.bsd2;
};
} }

View File

@ -67,4 +67,11 @@
"tests/test_decompilers.py" "tests/test_decompilers.py"
"tests/test_remote_ghidra.py" "tests/test_remote_ghidra.py"
]; ];
meta = {
description = "Library for writing plugins in any decompiler: includes API lifting, common data formatting, and GUI abstraction";
homepage = "https://github.com/binsync/libbs";
changelog = "https://github.com/binsync/libbs/releases/tag/${src.tag}";
license = lib.licenses.bsd2;
};
} }

View File

@ -21,16 +21,17 @@ let
platforms = oldMeta.platforms or ghidra.meta.platforms; platforms = oldMeta.platforms or ghidra.meta.platforms;
}; };
buildGhidraExtension = buildGhidraExtension = lib.extendMkDerivation {
{ constructDrv = stdenv.mkDerivation;
pname, extendDrvArgs =
nativeBuildInputs ? [ ], finalAttrs:
meta ? { }, {
... pname,
}@args: nativeBuildInputs ? [ ],
stdenv.mkDerivation ( meta ? { },
args ...
// { }@args:
{
nativeBuildInputs = nativeBuildInputs ++ [ nativeBuildInputs = nativeBuildInputs ++ [
unzip unzip
jdk jdk
@ -58,22 +59,28 @@ let
mkdir -p $out/lib/ghidra/Ghidra/Extensions mkdir -p $out/lib/ghidra/Ghidra/Extensions
unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip unzip -d $out/lib/ghidra/Ghidra/Extensions dist/*.zip
# Prevent attempted creation of plugin lock files in the Nix store.
for i in $out/lib/ghidra/Ghidra/Extensions/*; do
touch "$i/.dbDirLock"
done
runHook postInstall runHook postInstall
''; '';
meta = metaCommon meta; meta = metaCommon meta;
} };
); };
buildGhidraScripts = buildGhidraScripts = lib.extendMkDerivation {
{ constructDrv = stdenv.mkDerivation;
pname, extendDrvArgs =
meta ? { }, finalAttrs:
... {
}@args: pname,
stdenv.mkDerivation ( meta ? { },
args ...
// { }@args:
{
installPhase = '' installPhase = ''
runHook preInstall runHook preInstall
@ -95,8 +102,8 @@ let
''; '';
meta = metaCommon meta; meta = metaCommon meta;
} };
); };
in in
{ {
inherit buildGhidraExtension buildGhidraScripts; inherit buildGhidraExtension buildGhidraScripts;

View File

@ -11,11 +11,13 @@ lib.makeScope newScope (self: {
buildGhidraScripts buildGhidraScripts
; ;
binsync = self.callPackage ./extensions/binsync {};
findcrypt = self.callPackage ./extensions/findcrypt { }; findcrypt = self.callPackage ./extensions/findcrypt { };
ghidra-delinker-extension = self.callPackage ./extensions/ghidra-delinker-extension { ghidra-delinker-extension = self.callPackage ./extensions/ghidra-delinker-extension { };
inherit ghidra;
}; ghidra-firmware-utils = self.callPackage ./extensions/ghidra-firmware-utils { };
ghidra-golanganalyzerextension = self.callPackage ./extensions/ghidra-golanganalyzerextension { }; ghidra-golanganalyzerextension = self.callPackage ./extensions/ghidra-golanganalyzerextension { };
@ -34,6 +36,4 @@ lib.makeScope newScope (self: {
sleighdevtools = self.callPackage ./extensions/sleighdevtools { inherit ghidra; }; sleighdevtools = self.callPackage ./extensions/sleighdevtools { inherit ghidra; };
wasm = self.callPackage ./extensions/wasm { inherit ghidra; }; wasm = self.callPackage ./extensions/wasm { inherit ghidra; };
binsync = self.callPackage ./extensions/binsync {};
}) })

View File

@ -15,7 +15,7 @@
binsync binsync
] ++ binsync.optional-dependencies.ghidra)); ] ++ binsync.optional-dependencies.ghidra));
in buildGhidraScripts { in buildGhidraScripts {
pname = "binsync-ghidra"; pname = "BinSync";
inherit (python.pkgs.binsync) version; inherit (python.pkgs.binsync) version;
src = runCommand "binsync-ghidra-scripts" { src = runCommand "binsync-ghidra-scripts" {
@ -37,4 +37,10 @@ in buildGhidraScripts {
--replace-fail 'plugin_command = "binsync -s ghidra"' \ --replace-fail 'plugin_command = "binsync -s ghidra"' \
'plugin_command = "${lib.getExe' binsync_env "binsync"} -s ghidra"' 'plugin_command = "${lib.getExe' binsync_env "binsync"} -s ghidra"'
''; '';
meta = {
description = "Reversing plugin for cross-decompiler collaboration, built on git";
homepage = "https://github.com/binsync/binsync";
license = lib.licenses.bsd2;
};
} }

View File

@ -1,10 +1,10 @@
{ {
lib, lib,
ghidra, buildGhidraExtension,
gradle, gradle,
fetchFromGitHub, fetchFromGitHub,
}: }:
ghidra.buildGhidraExtension (finalAttrs: { buildGhidraExtension (finalAttrs: {
pname = "ghidra-delinker-extension"; pname = "ghidra-delinker-extension";
version = "0.5.1"; version = "0.5.1";

View File

@ -25,7 +25,7 @@ buildGhidraExtension {
pname = "gnudisassembler"; pname = "gnudisassembler";
version = lib.getVersion ghidra; version = lib.getVersion ghidra;
src = "${ghidra}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_GnuDisassembler.zip"; src = "${ghidra.lib}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_GnuDisassembler.zip";
postPatch = '' postPatch = ''
ln -s ${binutils-src} binutils-${binutils-version}.tar.bz2 ln -s ${binutils-src} binutils-${binutils-version}.tar.bz2

View File

@ -8,7 +8,7 @@ buildGhidraExtension {
pname = "machinelearning"; pname = "machinelearning";
version = lib.getVersion ghidra; version = lib.getVersion ghidra;
src = "${ghidra}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_MachineLearning.zip"; src = "${ghidra.lib}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_MachineLearning.zip";
dontUnpack = true; dontUnpack = true;
# Built as part ghidra # Built as part ghidra

View File

@ -9,7 +9,7 @@ buildGhidraExtension {
pname = "sleighdevtools"; pname = "sleighdevtools";
version = lib.getVersion ghidra; version = lib.getVersion ghidra;
src = "${ghidra}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_SleighDevTools.zip"; src = "${ghidra.lib}/lib/ghidra/Extensions/Ghidra/${ghidra.distroPrefix}_SleighDevTools.zip";
dontUnpack = true; dontUnpack = true;
# Built as part ghidra # Built as part ghidra

View File

@ -23,7 +23,7 @@ buildGhidraExtension (finalAttrs: {
# this doesn't really compile, it compresses sinc into sla # this doesn't really compile, it compresses sinc into sla
pushd data pushd data
ant -f build.xml -Dghidra.install.dir=${ghidra}/lib/ghidra sleighCompile ant -f build.xml -Dghidra.install.dir=${ghidra.lib}/lib/ghidra sleighCompile
popd popd
runHook postConfigure runHook postConfigure

View File

@ -29,8 +29,10 @@ let
nativeBuildInputs = [ nativeBuildInputs = [
makeBinaryWrapper makeBinaryWrapper
] ++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle; ] ++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle;
postBuild = postBuild = ''
'' # Prevent attempted creation of plugin lock files in the Nix store.
touch $out/lib/ghidra/Ghidra/.dbDirLock
makeWrapper '${ghidra}/bin/ghidra' "$out/bin/ghidra" \ makeWrapper '${ghidra}/bin/ghidra' "$out/bin/ghidra" \
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra" --set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
makeWrapper '${ghidra}/bin/ghidra-analyzeHeadless' "$out/bin/ghidra-analyzeHeadless" \ makeWrapper '${ghidra}/bin/ghidra-analyzeHeadless' "$out/bin/ghidra-analyzeHeadless" \