pince: init at 0.4.5 (#475728)

This commit is contained in:
Fernando Rodrigues
2026-01-20 01:46:10 +00:00
committed by GitHub
3 changed files with 319 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "libc"
version = "0.2.180"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
[[package]]
name = "machx"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ac9b6ef56836bbcf4a55a3b7ac0964fdeb988ee4ef288a34b184d156965bd93"
dependencies = [
"libc",
]
[[package]]
name = "libptrscan"
version = "0.7.4"
dependencies = [
"machx",
]
+186
View File
@@ -0,0 +1,186 @@
{
stdenv,
lib,
fetchFromGitHub,
replaceVars,
nix-update-script,
rustPlatform,
cmake,
makeWrapper,
python3Packages,
python3,
gdb,
qt6,
gtk3,
gobject-introspection,
}:
let
libptrscan = rustPlatform.buildRustPackage {
pname = "libptrscan";
version = "0.7.4-unstable-2024-09-13";
src = fetchFromGitHub {
owner = "kekeimiku";
repo = "PointerSearcher-X";
rev = "ba2b5eab4856aa4ffb3ece0bd2c7d0917fa4e6ce"; # last commit on pince_fix_32 branch
hash = "sha256-skOM2dx+u7dYbWywaC8dtUuJuXzc4Mm6skBbMfaTwfY=";
};
cargoLock.lockFile = ./libptrscan/Cargo.lock;
postPatch = ''
cp ${./libptrscan/Cargo.lock} Cargo.lock
chmod +w Cargo.lock
'';
cargoBuildFlags = [ "-p libptrscan" ];
postInstall = ''
install -Dm644 libptrscan/ptrscan.py -t "$out"/lib/
'';
};
pythonEnv = python3.withPackages (
ps: with ps; [
capstone
keyboard
keystone-engine
pexpect
pygdbmi
pygobject3
pyqt6
]
);
gdb' = gdb.override {
python3 = pythonEnv;
};
# LD_LIBRARY_PATH libraries
LDPath = lib.makeLibraryPath [
(lib.getLib stdenv.cc.cc)
gtk3
gdb'
];
# GI_TYPELIB_PATH libraries
GIPath = lib.makeSearchPath "lib/girepository-1.0" [
gtk3
gobject-introspection
];
in
python3Packages.buildPythonApplication rec {
pname = "pince";
version = "0.4.5";
pyproject = false;
src = fetchFromGitHub {
owner = "korcankaraokcu";
repo = "PINCE";
tag = "v${version}";
hash = "sha256-NgoZmmcMEPGpIF3IPEIoeRPOwwuxdinBlkeP0P5eVmU=";
fetchSubmodules = true;
};
patches = [
(replaceVars ./set-gdb-path.patch {
gdb_exe_path = lib.getExe gdb';
})
];
build-system = with python3Packages; [
setuptools
];
nativeBuildInputs = [
cmake
gobject-introspection
qt6.qttools
qt6.wrapQtAppsHook
makeWrapper
];
buildInputs = [
pythonEnv
gdb'
gobject-introspection
qt6.qtbase
qt6.qtwayland
gtk3
];
dontUseCmakeConfigure = true;
buildPhase = ''
runHook preBuild
# libscanmem
pushd libscanmem-PINCE
cmake -DCMAKE_BUILD_TYPE=Release .
make -j$NIX_BUILD_CORES
install -Dm555 libscanmem.so -t ../libpince/libscanmem/
install -Dm444 wrappers/scanmem.py -t ../libpince/libscanmem/
popd
# libptrscan
install -Dm555 ${libptrscan}/lib/libptrscan.so -t libpince/libptrscan
install -Dm444 ${libptrscan}/lib/ptrscan.py -t libpince/libptrscan
# Translations
lrelease i18n/ts/*
mkdir -p i18n/qm
mv i18n/ts/*.qm i18n/qm/
runHook postBuild
'';
makeWrapperArgs = [
''--chdir "$out/lib/pince"''
''--prefix LD_LIBRARY_PATH : "${LDPath}"''
''--prefix GI_TYPELIB_PATH : "${GIPath}"''
''--set PYTHONPATH "$out/lib/pince"''
''--set PYTHONDONTWRITEBYTECODE "1"''
''--add-flags "$out/lib/pince/PINCE.py"''
''--prefix PATH : "${lib.makeBinPath [ pythonEnv ]}"''
];
installPhase = ''
runHook preInstall
mkdir -p $out/lib/pince/
cp -r GUI i18n libpince media tr AUTHORS COPYING COPYING.CC-BY PINCE.py THANKS $out/lib/pince/
mkdir -p $out/bin
ln -s $out/lib/pince/PINCE.py $out/bin/pince
runHook postInstall
'';
postFixup = ''
wrapPythonProgramsIn "$out/lib/pince" "$out $pythonPath"
'';
passthru = {
inherit libptrscan;
updateScript = nix-update-script { };
};
meta = {
description = "Reverse engineering tool for games (Linux alternative to Cheat Engine)";
homepage = "https://github.com/korcankaraokcu/PINCE";
mainProgram = "pince";
license = with lib.licenses; [
gpl3Plus
cc-by-30
];
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ yuannan ];
};
}
+108
View File
@@ -0,0 +1,108 @@
diff --git a/GUI/Settings/settings.py b/GUI/Settings/settings.py
index 05cf0fa..598ac87 100644
--- a/GUI/Settings/settings.py
+++ b/GUI/Settings/settings.py
@@ -118,7 +118,7 @@ def set_default_settings():
settings.setValue("bytes_per_scroll", 0x40)
settings.endGroup()
settings.beginGroup("Debug")
- settings.setValue("gdb_path", typedefs.PATHS.GDB)
+ settings.setValue("gdb_path", utils.get_default_gdb_path())
settings.setValue("gdb_logging", False)
settings.setValue("interrupt_signal", "SIGINT")
settings.setValue("handle_signals", json.dumps(default_signals))
diff --git a/GUI/Widgets/Settings/Settings.py b/GUI/Widgets/Settings/Settings.py
index 11ae44e..8ca87a1 100644
--- a/GUI/Widgets/Settings/Settings.py
+++ b/GUI/Widgets/Settings/Settings.py
@@ -91,7 +91,7 @@ class SettingsDialog(QDialog, Ui_Dialog):
self.settings.setValue("MemoryView/show_memory_view_on_stop", self.checkBox_ShowMemoryViewOnStop.isChecked())
self.settings.setValue("MemoryView/instructions_per_scroll", self.spinBox_InstructionsPerScroll.value())
self.settings.setValue("MemoryView/bytes_per_scroll", self.spinBox_BytesPerScroll.value())
- if not os.environ.get("APPDIR"):
+ if False:
selected_gdb_path = self.lineEdit_GDBPath.text()
if selected_gdb_path != states.gdb_path:
if utilwidgets.InputDialog(self, tr.GDB_RESET).exec():
@@ -147,7 +147,7 @@ class SettingsDialog(QDialog, Ui_Dialog):
self.spinBox_InstructionsPerScroll.setValue(self.settings.value("MemoryView/instructions_per_scroll", type=int))
self.spinBox_BytesPerScroll.setValue(self.settings.value("MemoryView/bytes_per_scroll", type=int))
self.lineEdit_GDBPath.setText(str(self.settings.value("Debug/gdb_path", type=str)))
- if os.environ.get("APPDIR"):
+ if True:
self.label_GDBPath.setDisabled(True)
self.label_GDBPath.setToolTip(tr.UNUSED_APPIMAGE_SETTING)
self.lineEdit_GDBPath.setDisabled(True)
diff --git a/PINCE.py b/PINCE.py
index aa5da2f..b356458 100644
--- a/PINCE.py
+++ b/PINCE.py
@@ -334,7 +334,7 @@ class MainForm(QMainWindow, MainWindow):
settings.init_settings()
self.settings_changed()
- if os.environ.get("APPDIR"):
+ if True:
gdb_path = utils.get_default_gdb_path()
else:
gdb_path = states.gdb_path
@@ -1426,7 +1426,7 @@ class MainForm(QMainWindow, MainWindow):
# Returns: a bool value indicates whether the operation succeeded.
def attach_to_pid(self, pid: int):
- attach_result = debugcore.attach(pid, states.gdb_path)
+ attach_result = debugcore.attach(pid, utils.get_default_gdb_path())
if attach_result == typedefs.ATTACH_RESULT.SUCCESSFUL:
settings.apply_after_init()
scanmem.pid(pid)
@@ -1524,7 +1524,7 @@ class MainForm(QMainWindow, MainWindow):
self.flashAttachButtonTimer.start(100)
self.label_SelectedProcess.setText(tr.NO_PROCESS_SELECTED)
self.memory_view_window.setWindowTitle(tr.NO_PROCESS_SELECTED)
- if os.environ.get("APPDIR"):
+ if True:
gdb_path = utils.get_default_gdb_path()
else:
gdb_path = states.gdb_path
diff --git a/libpince/debugcore.py b/libpince/debugcore.py
index 987762f..9779120 100644
--- a/libpince/debugcore.py
+++ b/libpince/debugcore.py
@@ -498,7 +498,7 @@ def init_gdb(gdb_path=utils.get_default_gdb_path()):
status_thread.start()
gdb_initialized = True
set_logging(False)
- if not is_appimage:
+ if False:
send_command("source ./gdbinit_venv")
set_pince_paths()
send_command("source " + utils.get_user_path(typedefs.USER_PATHS.GDBINIT))
diff --git a/libpince/utils.py b/libpince/utils.py
index 604aeb3..0569a7e 100644
--- a/libpince/utils.py
+++ b/libpince/utils.py
@@ -881,10 +881,7 @@ def get_user_path(user_path):
def get_default_gdb_path():
- appdir = os.environ.get("APPDIR")
- if appdir:
- return appdir + "/usr/bin/gdb"
- return typedefs.PATHS.GDB
+ return "@gdb_exe_path@"
def execute_script(file_path):
diff --git a/tr/tr.py b/tr/tr.py
index 81e156c..74aef4c 100644
--- a/tr/tr.py
+++ b/tr/tr.py
@@ -148,7 +148,7 @@ class TranslationConstants(QObject):
r"\[asdf\] --> search for opcodes that contain [asdf]"
)
SEPARATE_PROCESSES_WITH = QT_TR_NOOP("Separate processes with {}")
- UNUSED_APPIMAGE_SETTING = QT_TR_NOOP("This setting is unused in AppImage builds")
+ UNUSED_APPIMAGE_SETTING = QT_TR_NOOP("This setting is unused in nixpkgs-based builds")
SELECT_GDB_BINARY = QT_TR_NOOP("Select the gdb binary")
QUIT_SESSION_CRASH = QT_TR_NOOP("Quitting current session will crash PINCE")
CONT_SESSION_CRASH = QT_TR_NOOP("Use global hotkeys or the commands 'interrupt' and 'c&' to stop/run the inferior")