diff options
| -rw-r--r-- | fix-box64.patch | 46 | ||||
| -rw-r--r-- | flake.nix | 62 |
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 + ''; }; }; |