Add support for pwndbg (gdb) on apple silicon chips (#2666)

* bump nix

* add ci

* add pwndbg to nix darwin

* fix test
pull/2668/head
patryk4815 11 months ago committed by GitHub
parent d1896f9afc
commit dd75e208eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -24,6 +24,7 @@ jobs:
os: [
ubuntu-latest, # x86_64-linux
# ubuntu-arm, # aarch64-linux, not public yet
macos-13, # x86_64-darwin
]
runs-on: ${{ matrix.os }}
timeout-minutes: 60

@ -41,11 +41,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1731245184,
"narHash": "sha256-vmLS8+x+gHRv1yzj3n+GTAEObwmhxmkkukB2DwtJRdU=",
"lastModified": 1736241350,
"narHash": "sha256-CHd7yhaDigUuJyDeX0SADbTM9FXfiWaeNyY34FL1wQU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "aebe249544837ce42588aa4b2e7972222ba12e8f",
"rev": "8c9fd3e564728e90829ee7dbac6edc972971cd0f",
"type": "github"
},
"original": {
@ -66,11 +66,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1731205797,
"narHash": "sha256-F7N1mxH1VrkVNHR3JGNMRvp9+98KYO4b832KS8Gl2xI=",
"lastModified": 1736323755,
"narHash": "sha256-lUSZtb4+lONT7MKradw9FLMzc+fxtrkKGX7w3oKJmJg=",
"owner": "nix-community",
"repo": "poetry2nix",
"rev": "f554d27c1544d9c56e5f1f8e2b8aff399803674e",
"rev": "29b2641c1c6e67d836f9a9fda8a6de85be9644ac",
"type": "github"
},
"original": {
@ -110,8 +110,9 @@
"type": "github"
},
"original": {
"id": "systems",
"type": "indirect"
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {

@ -32,11 +32,22 @@
"archlinux"
];
overlayDarwin =
final: prev:
nixpkgs.lib.optionalAttrs prev.stdenv.isDarwin {
gdb = prev.gdb.override {
# dynamic version of libiconv use to much of `dlopen`
libiconv = prev.pkgsStatic.libiconv;
};
};
pkgsBySystem = forAllSystems (
system:
import nixpkgs {
inherit system;
overlays = [ poetry2nix.overlays.default ];
overlays = [
poetry2nix.overlays.default
overlayDarwin
];
}
);
pkgUtil = forAllSystems (system: import ./nix/bundle/pkg.nix { pkgs = pkgsBySystem.${system}; });
@ -73,20 +84,29 @@
packages = forAllSystems (
system:
{
pwndbg = import ./nix/pwndbg.nix {
pkgs = pkgsBySystem.${system};
python3 = pkgsBySystem.${system}.python3;
gdb = pkgsBySystem.${system}.gdb;
inputs.pwndbg = self;
};
default = self.packages.${system}.pwndbg;
pwndbg-dev = import ./nix/pwndbg.nix {
pkgs = pkgsBySystem.${system};
python3 = pkgsBySystem.${system}.python3;
gdb = pkgsBySystem.${system}.gdb;
inputs.pwndbg = self;
isDev = true;
};
}
// (
let
systemfix = if (system == "aarch64-darwin") then "x86_64-darwin" else system;
in
{
pwndbg = import ./nix/pwndbg.nix {
pkgs = pkgsBySystem.${systemfix};
python3 = pkgsBySystem.${systemfix}.python3;
gdb = pkgsBySystem.${systemfix}.gdb;
inputs.pwndbg = self;
};
pwndbg-dev = import ./nix/pwndbg.nix {
pkgs = pkgsBySystem.${systemfix};
python3 = pkgsBySystem.${systemfix}.python3;
gdb = pkgsBySystem.${systemfix}.gdb;
inputs.pwndbg = self;
isDev = true;
};
}
)
// {
pwndbg-lldb = import ./nix/pwndbg.nix {
pkgs = pkgsBySystem.${system};
python3 = pkgsBySystem.${system}.python3;

@ -30,6 +30,7 @@ let
"/lib/terminfo" # Debian
"/usr/share/terminfo" # upstream default, probably all FHS-based distros
"/run/current-system/sw/share/terminfo" # NixOS
"$dir/share/terminfo"
]
}
''
@ -38,6 +39,7 @@ let
pkgs.lib.concatStringsSep ":" [
# Fix issue Darwin https://github.com/pwndbg/pwndbg/issues/2531
"/usr/share/terminfo" # upstream default, probably all FHS-based distros
"$dir/share/terminfo"
]
}
''
@ -72,34 +74,38 @@ let
'';
skipVenv = pkgs.writeScript "pwndbg-skip-venv" "";
pwndbgGdbBundled = bundler [
"${pkgs.lib.getBin gdb}/bin/gdb"
"exe/gdb"
pwndbgGdbBundled = bundler (
# Darwin don't have gdbserver
(pkgs.lib.optionals (!pkgs.stdenv.isDarwin) [
"${pkgs.lib.getBin gdb}/bin/gdbserver"
"exe/gdbserver"
"${pkgs.lib.getBin gdb}/bin/gdbserver"
"exe/gdbserver"
"${wrapperBin "exe/gdbserver"}"
"bin/gdbserver"
])
++ [
"${pkgs.lib.getBin gdb}/bin/gdb"
"exe/gdb"
"${gdb}/share/gdb/"
"share/gdb/"
"${gdb}/share/gdb/"
"share/gdb/"
"${pwndbgVenv}/lib/"
"lib/"
"${pwndbg.src}/pwndbg/"
"lib/${python3.libPrefix}/site-packages/pwndbg/"
"${pwndbgVenv}/lib/"
"lib/"
"${pwndbg.src}/gdbinit.py"
"exe/gdbinit.py"
"${pwndbg.src}/pwndbg/"
"lib/${python3.libPrefix}/site-packages/pwndbg/"
"${skipVenv}"
"exe/.skip-venv"
"${pwndbg.src}/gdbinit.py"
"exe/gdbinit.py"
"${wrapperBinPwndbgGdbinit}"
"bin/pwndbg"
"${skipVenv}"
"exe/.skip-venv"
"${wrapperBin "exe/gdbserver"}"
"bin/gdbserver"
];
"${wrapperBinPwndbgGdbinit}"
"bin/pwndbg"
]
);
pwndbgLldbBundled = bundler [
"${pkgs.lib.getBin lldb}/bin/.lldb-wrapped"
@ -157,6 +163,9 @@ let
# writable out
chmod -R +w $out
# copy extra files
cp -rf ${pkgs.lib.getLib pkgs.ncurses}/share/terminfo/ $out/pwndbg/share/
# fix python "subprocess.py" to use "/bin/sh" and not the nix'ed version, otherwise "gdb-pt-dump" is broken
substituteInPlace $out/pwndbg/lib/${python3.libPrefix}/subprocess.py --replace "'${pkgs.bash}/bin/sh'" "'/bin/sh'"

@ -146,9 +146,7 @@ def run_test(
"py import sys;print(sys.path);import coverage;coverage.process_startup();",
] + gdb_args
env = os.environ.copy()
env["LC_ALL"] = "C.UTF-8"
env["LANG"] = "C.UTF-8"
env["LC_CTYPE"] = "C.UTF-8"
env["LANG"] = "en_US.UTF-8"
env["SRC_DIR"] = root_dir
env["COVERAGE_FILE"] = os.path.join(root_dir, ".cov/coverage")
env["COVERAGE_PROCESS_START"] = os.path.join(root_dir, "pyproject.toml")

Loading…
Cancel
Save