pwngdb: make gdbinit.py self-contained

This avoids polluting child processes with PYTHONPATH (also PATH is
still propagated).
Also it makes it easier to load the resulting gdbinit.py in your own
.gdbinit.
This commit is contained in:
Jörg Thalheim
2024-04-29 09:53:30 +02:00
parent ba1e6fdd89
commit 86c2fc3406
+17 -5
View File
@@ -18,7 +18,7 @@ let
python3.pkgs.ropgadget # ref: https://github.com/pwndbg/pwndbg/blob/2022.12.19/pwndbg/commands/rop.py#L32
]);
in
stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "pwndbg";
version = lib.getVersion pwndbg-py;
format = "other";
@@ -31,20 +31,32 @@ stdenv.mkDerivation rec {
runHook preInstall
mkdir -p $out/share/pwndbg
cp gdbinit.py $out/share/pwndbg
cp gdbinit.py $out/share/pwndbg/gdbinit.py
chmod +x $out/share/pwndbg/gdbinit.py
# First line is a import from future, so we need to append our imports after that
sed '2 i import sys, os
3 i [sys.path.append(p) for p in "${pythonPath}".split(":")]
4 i os.environ["PATH"] += ":${binPath}"' -i $out/share/pwndbg/gdbinit.py
# Don't require an in-package venv
touch $out/share/pwndbg/.skip-venv
makeWrapper ${gdb}/bin/gdb $out/bin/pwndbg \
--add-flags "-q -x $out/share/pwndbg/gdbinit.py" \
--prefix PATH : ${binPath} \
--set PYTHONPATH ${pythonPath} \
--add-flags "-q -x $out/share/pwndbg/gdbinit.py"
runHook postInstall
'';
doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
# Check if pwndbg is installed correctly
HOME=$TMPDIR LC_CTYPE=C.UTF-8 $out/bin/pwndbg -ex exit
runHook postInstallCheck
'';
meta = with lib; {
description = "Exploit Development and Reverse Engineering with GDB Made Easy";
mainProgram = "pwndbg";