about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--fix-box64.patch46
-rw-r--r--flake.nix62
2 files changed, 107 insertions, 1 deletions
diff --git a/fix-box64.patch b/fix-box64.patch
new file mode 100644
index 0000000..495dd4a
--- /dev/null
+++ b/fix-box64.patch
@@ -0,0 +1,46 @@
+From 5f7a1982ac307d2bcdc9119c85847f48d193e378 Mon Sep 17 00:00:00 2001
+From: ckrinitsin <101062646+ckrinitsin@users.noreply.github.com>
+Date: Wed, 22 Oct 2025 18:20:31 +0200
+Subject: [PATCH] [TRACE] Fix flags output for better parsing (#3090)
+
+---
+ src/emu/x64emu.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c
+index f4fa700b..dde9a496 100644
+--- a/src/emu/x64emu.c
++++ b/src/emu/x64emu.c
+@@ -442,12 +442,12 @@ const char* DumpCPURegs(x64emu_t* emu, uintptr_t ip, int is32bits)
+             if(i==_RBX) {
+                 if(emu->df) {
+ #define FLAG_CHAR(f) (ACCESS_FLAG(F_##f##F)) ? #f : "?"
+-                    sprintf(tmp, "flags=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
++                    sprintf(tmp, " flags=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
+                     strcat(buff, tmp);
+ #undef FLAG_CHAR
+                 } else {
+ #define FLAG_CHAR(f) (ACCESS_FLAG(F_##f##F)) ? #f : "-"
+-                    sprintf(tmp, "FLAGS=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
++                    sprintf(tmp, " FLAGS=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
+                     strcat(buff, tmp);
+ #undef FLAG_CHAR
+                 }
+@@ -473,12 +473,12 @@ const char* DumpCPURegs(x64emu_t* emu, uintptr_t ip, int is32bits)
+                 if(i==4) {
+                     if(emu->df) {
+ #define FLAG_CHAR(f) (ACCESS_FLAG(F_##f##F)) ? #f : "?"
+-                        sprintf(tmp, "flags=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
++                        sprintf(tmp, " flags=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
+                         strcat(buff, tmp);
+ #undef FLAG_CHAR
+                     } else {
+ #define FLAG_CHAR(f) (ACCESS_FLAG(F_##f##F)) ? #f : "-"
+-                        sprintf(tmp, "FLAGS=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
++                        sprintf(tmp, " FLAGS=%s%s%s%s%s%s%s\n", FLAG_CHAR(O), FLAG_CHAR(D), FLAG_CHAR(S), FLAG_CHAR(Z), FLAG_CHAR(A), FLAG_CHAR(P), FLAG_CHAR(C));
+                         strcat(buff, tmp);
+ #undef FLAG_CHAR
+                     }
+--
+2.51.1.dirty
+
diff --git a/flake.nix b/flake.nix
index 425040b..755c18b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -71,6 +71,60 @@
 			members = [ "focaccia" "miasm" ];
 		};
 
+        # Box64
+        zydis-shared-object = pkgs.zydis.overrideAttrs (oldAttrs: {
+          cmakeFlags = (oldAttrs.cmakeFlags or []) ++ [
+            "-DZYDIS_BUILD_SHARED_LIB=ON"
+          ];
+        });
+
+        repoSrc = pkgs.fetchFromGitHub {
+          owner = "ptitSeb";
+          repo = "box64";
+          rev = "74d4db051b4c74aaab23b19fbb51e441448faf8e";
+          sha256 = "sha256-G6tsqXsnTrs8I47YLnuivC79IFDGfbiLSm4J2Djc0kU=";
+        };
+
+        box64-patch = ./fix-box64.patch;
+
+        patched-box64 = pkgs.stdenv.mkDerivation {
+          name = "patched-source";
+          src = repoSrc;
+          patches = [ box64-patch ];
+          installPhase = ''
+            cp -r . $out
+          '';
+        };
+
+        box64-custom = pkgs.stdenv.mkDerivation rec {
+          pname = "box64";
+          version = "74d4db";
+
+          src = patched-box64;
+
+          nativeBuildInputs = with pkgs; [
+            cmake
+            pkg-config
+            zydis-shared-object
+            python314
+          ];
+
+          buildInputs = with pkgs; [
+          ];
+
+          cmakeFlags = [
+            "-DDYNAREC=ON"
+            "-DHAVE_TRACE=ON"
+          ];
+
+          installPhase = ''
+            runHook preInstall
+            mkdir -p $out/bin
+            cp box64 $out/bin/
+            runHook postInstall
+          '';
+        };
+
 		# Another overlay layer for flake-specific overloads
 		# This might be needed because uv does not have sufficient metadata
 		# Here, uv does include metadata about build systems used by each dependency
@@ -312,12 +366,18 @@
 					packages.dev
 					musl-pkgs.gcc
 					musl-pkgs.pkg-config
+                    box64-custom
 				];
 
 				hardeningDisable = [ "pie" ];
 
 				env = uvEnv;
-				shellHook = uvShellHook;
+				shellHook = uvShellHook + ''
+                  export BOX64_TRACE=1
+                  export BOX64_DYNAREC_TRACE=1
+                  export BOX64_DYNAREC_DF=0
+                  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${zydis-shared-object}/lib
+                '';
 			};
 		};