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;
# 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;
};
ghidra-extensions = final.lib.recurseIntoAttrs (final.callPackage ./pkgs/reverse-engineering/ghidra/extensions.nix { });

View File

@ -65,4 +65,11 @@
];
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_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;
};
buildGhidraExtension =
buildGhidraExtension = lib.extendMkDerivation {
constructDrv = stdenv.mkDerivation;
extendDrvArgs =
finalAttrs:
{
pname,
nativeBuildInputs ? [ ],
meta ? { },
...
}@args:
stdenv.mkDerivation (
args
// {
{
nativeBuildInputs = nativeBuildInputs ++ [
unzip
jdk
@ -58,22 +59,28 @@ let
mkdir -p $out/lib/ghidra/Ghidra/Extensions
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
'';
meta = metaCommon meta;
}
);
};
};
buildGhidraScripts =
buildGhidraScripts = lib.extendMkDerivation {
constructDrv = stdenv.mkDerivation;
extendDrvArgs =
finalAttrs:
{
pname,
meta ? { },
...
}@args:
stdenv.mkDerivation (
args
// {
{
installPhase = ''
runHook preInstall
@ -95,8 +102,8 @@ let
'';
meta = metaCommon meta;
}
);
};
};
in
{
inherit buildGhidraExtension buildGhidraScripts;

View File

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

View File

@ -15,7 +15,7 @@
binsync
] ++ binsync.optional-dependencies.ghidra));
in buildGhidraScripts {
pname = "binsync-ghidra";
pname = "BinSync";
inherit (python.pkgs.binsync) version;
src = runCommand "binsync-ghidra-scripts" {
@ -37,4 +37,10 @@ in buildGhidraScripts {
--replace-fail 'plugin_command = "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,
ghidra,
buildGhidraExtension,
gradle,
fetchFromGitHub,
}:
ghidra.buildGhidraExtension (finalAttrs: {
buildGhidraExtension (finalAttrs: {
pname = "ghidra-delinker-extension";
version = "0.5.1";

View File

@ -25,7 +25,7 @@ buildGhidraExtension {
pname = "gnudisassembler";
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 = ''
ln -s ${binutils-src} binutils-${binutils-version}.tar.bz2

View File

@ -8,7 +8,7 @@ buildGhidraExtension {
pname = "machinelearning";
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;
# Built as part ghidra

View File

@ -9,7 +9,7 @@ buildGhidraExtension {
pname = "sleighdevtools";
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;
# Built as part ghidra

View File

@ -23,7 +23,7 @@ buildGhidraExtension (finalAttrs: {
# this doesn't really compile, it compresses sinc into sla
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
runHook postConfigure

View File

@ -29,8 +29,10 @@ let
nativeBuildInputs = [
makeBinaryWrapper
] ++ 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" \
--set NIX_GHIDRAHOME "$out/lib/ghidra/Ghidra"
makeWrapper '${ghidra}/bin/ghidra-analyzeHeadless' "$out/bin/ghidra-analyzeHeadless" \