You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pwndbg/nix/pwndbg.nix

70 lines
1.7 KiB
Nix

{
pkgs,
inputs,
python3 ? pkgs.python3,
isDev ? false,
groups,
...
}:
let
lib = pkgs.lib;
extraPackags = [
python3.pkgs.pwntools # ref: https://github.com/pwndbg/pwndbg/blob/2023.07.17/pwndbg/wrappers/checksec.py#L8
]
++ lib.optionals pkgs.stdenv.isLinux [
python3.pkgs.ropper # ref: https://github.com/pwndbg/pwndbg/blob/2023.07.17/pwndbg/commands/ropper.py#L30
];
pyEnv = import ./pyenv.nix {
inherit
pkgs
inputs
python3
groups
isDev
;
};
pwndbgVersion =
let
versionFile = builtins.readFile "${inputs.self}/pwndbg/lib/version.py";
versionMatch = builtins.match ".*\n__version__ = \"([0-9]+.[0-9]+.[0-9]+)\".*" versionFile;
version = if versionMatch == null then "unknown" else (builtins.elemAt versionMatch 0);
in
version;
mainProgram =
if groups == [ "lldb" ] then
"pwndbg-lldb"
else if groups == [ "gdb" ] then
"pwndbg"
else
"pwndbg-any";
pwndbg_any =
pkgs.runCommand mainProgram
{
version = pwndbgVersion;
nativeBuildInputs = [ pkgs.pkgsBuildHost.makeWrapper ];
meta = {
pwndbgVenv = pyEnv;
isLLDB = groups == [ "lldb" ];
mainProgram = mainProgram;
};
}
''
mkdir -p $out/bin/
if [ -e "${pyEnv}/bin/gdb" ]; then
makeWrapper ${pyEnv}/bin/pwndbg $out/bin/pwndbg \
--prefix PATH : ${lib.makeBinPath extraPackags}
fi
if [ -e "${pyEnv}/bin/lldb" ]; then
makeWrapper ${pyEnv}/bin/pwndbg-lldb $out/bin/pwndbg-lldb \
--prefix PATH : ${lib.makeBinPath extraPackags}
fi
'';
in
pwndbg_any