Commit Graph
808 Commits
Author SHA1 Message Date
Ole André Vadla Ravnås 69c706789f Follow the pattern compiler's module API
Compile, then decode through the module. Pass platform before arch,
and default both to the host rather than darwin/arm64.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 53d2c52f1c gtk: Stop leaking every event controller
Add controllers through the binding, which now takes the widget's ref
itself, so the extra ref the helper took no longer outlives them.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås ff39657cd8 gtk: Let the completion provider forget its view
Hold the view unowned, so the view's own completion object no longer
keeps it alive.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 1ffe1e7470 gtk: Unparent context menus when they close 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 703a953ab3 gtk: Fold code and preview colours in the editor
Put fold chevrons in the gutter, fading in while the pointer is over
it, a guide down each open scope, and a placeholder after a folded one.
Number lines past folded ones, and put a swatch before each colour the
server reports.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås a744f8ce24 gtk: Encode VM screenshots with GDK 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås a8d412e202 gtk: Show decoded patterns in the inspector 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 5d5cfe2ffe gtk: Add a patterns section with an editor
List pattern files and their types in the sidebar, and create, import,
rename, delete and edit them.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 6eaa8115ea gtk: Move insight refreshes to the sidebar menu 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 531468e7b9 gtk: Visualize decoded patterns
Open a field's visualizer from its tree row, and draw each kind in the
render tests.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 1885b87427 gtk: Decode hex dumps against pattern types
Outline decoded fields over the hex view, list them in a tree beside
it, and place types from its context menu. Read more of an insight's
memory when a decode runs out.
2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås ebd2b8ad3a gtk: Wrap the hex caret across rows 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 660946f2c0 Share VM keystroke events 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås 1aa3cbca29 deps: Bump frida-core, frida-swift and gir2swift 2026-10-01 20:49:11 +02:00
Ole André Vadla Ravnås f4b1b8ab08 gtk: Follow light and dark themes in the hex view
Pick light or dark variants of the byte colours, dim the ASCII column
and zero bytes from the theme's foreground, and redraw on a switch.
2026-09-28 20:11:25 +02:00
Ole André Vadla Ravnås 2bb14e1dff gtk: Keep the hex view fast at any size
Draw the bytes once, a glyph run per colour per row, and show the
selection as themed bands beneath them, so a drag repaints only what
changed. Lay the rows out on a character grid, as the SwiftUI view
does.
2026-09-28 20:03:23 +02:00
Ole André Vadla Ravnås c888fcdc83 gtk: Carry the app icon on a spawn target 2026-09-28 19:40:57 +02:00
Ole André Vadla Ravnås cf72d48425 build: Build on UNIX in a fixed environment
SwiftPM re-reads every manifest when the environment changes, and
both it and Xcode key link and plugin tasks on PATH. An agent's shell
has a different PATH than the terminal's, so a build that was a no-op
in one relinks everything and regenerates the GTK bindings in the
other.

Run swift and xcodebuild from an allowlisted environment, with PATH
reduced to the directories that exist, each named once.
2026-09-26 21:46:33 +02:00
Ole André Vadla Ravnås 02962abfa3 deps: Bump SwiftyPharo
Its VM now starts on macOS 27.
2026-09-26 20:43:53 +02:00
Ole André Vadla Ravnås 74f3f499e6 deps: Bump SwiftyPharo
Its VM now builds from frida/pharo-vm, and the image comes from the
release built that way.
2026-09-26 09:11:26 +02:00
Ole André Vadla Ravnås b625123bc5 gtk: Load vcvars on a Path cmd can expand
On CI the inherited Path runs past cmd's 8191 characters, so vcvars
loaded nothing and said nothing.

Load it on the system directories and put the caller's Path back
after. What it keeps as __VSCMD_PREINIT_PATH is then the same each
time, so the build no longer drops it.
2026-09-25 21:02:32 +02:00
Ole André Vadla Ravnås b9d0088a64 deps: Bump frida-swift
Picks up bindings that build on Linux.
2026-09-25 19:30:52 +02:00
Ole André Vadla Ravnås deebeb8ecd gtk: Build on Windows in a fixed environment
SwiftPM rebuilds everything when the environment changes. Each run
grew LIB in the caller's shell, and each terminal brings its own
variables, so no build was ever a no-op.

Build from an allowlisted environment and hand the caller's back
afterwards.
2026-09-25 18:50:42 +02:00
Ole André Vadla Ravnås b9b5047928 deps: Bump Frida to 17.19.0 2026-09-25 17:55:01 +02:00
Ole André Vadla Ravnås 761ee194fb core: Run the Android emulator on Windows
The emulator's control channel was the only thing pulling grpc-swift
in, and with it swift-nio-ssl, which does not build on Windows at all
-- it has no branch for the platform and its PosixPort reaches for
mlock, lstat and readlink. Nothing here wants TLS: the endpoint is
plaintext on the loopback, and only seven calls are ever made.

So the wire is spoken directly. GRPCConnection opens one HTTP/2
stream per call over swift-nio-http2 and frames length-prefixed
protobuf into it; EmulatorControlClient names the seven. That drops
grpc-swift-2, grpc-swift-nio-transport, grpc-swift-protobuf and
swift-nio-ssl from the graph, along with 7840 lines of generated
service stubs. The generated messages stay.

The rest is what running it on Windows turned up:

  - AVD discovery split on "\n" and trimmed only .whitespaces, so
    every name kept a trailing \r and every AVD was dropped.
  - An AVD config spells its paths with backslashes, which URL keeps
    as ordinary characters rather than separators.
  - emulator and adb want .exe, and the SDK sits under LOCALAPPDATA.
  - Port reservation and process lookup move into HostPort and
    HostProcessLookup, which QemuMachine's two copies also wanted.
  - The launcher re-execs into QEMU there, so the discovery ini is
    named after that process; the one naming this launch's debug port
    is taken when the launcher's own is absent.

Frames still arrive through a mapping rather than the socket:
CreateFileMapping backs the same file:// handle the emulator is
handed elsewhere.

A guest without vsock is refused outright on Windows, where the
virtio-serial fallback would ask QEMU for a QMP UNIX socket and be
told "unix sockets are not available on windows".

LUMA_EMULATOR_DISPLAY_ONLY drives launch, control and streaming
without a guest agent. Against a Pixel_2 AVD it reports a 1080x1920
first frame and nine more in three seconds.
2026-09-17 13:13:47 +02:00
Ole André Vadla Ravnås f9f9b0b514 ci: Keep wrap subprojects across a ref bump
Sync-Checkout deleted subprojects/<name> for every wrap whenever the
checkout moved, which also took frida-gum, a wrap rather than a
submodule. capstone.wrap redirects into that tree, and meson resolves
every redirect while parsing, before it downloads anything, so the
next `subprojects update` failed outright:

    ERROR: wrap-redirect subprojects\frida-gum\subprojects\capstone.wrap
    filename does not exist

Bumping FRIDA_CORE_REF could therefore never work on Windows. The
deletion was redundant anyway -- `update --reset` already brings each
subproject to the revision its wrap names -- so only the build
directory goes now.
2026-09-16 22:30:56 +02:00
Ole André Vadla Ravnås 261135f1d3 gtk: Show how connecting to a device is going
Observe the shared connection activity in the target picker and show
the current stage under the process and application spinners, animating
the bar toward the next stage over its expected duration with a timed
animation. Show the stage on an attaching session's row too.
2026-09-16 13:00:08 +02:00
Ole André Vadla Ravnås 3f4a7d14ba ci: Bring the packaged radare2 up with the rest
Snap and Flatpak name a radare2 of their own, and both were left
behind when the ref moved -- so SwiftyR2, which follows the newer
RIOPlugin layout, met a struct without the field it sets.

Ubuntu and Fedora were spared: they read the ref of record.
2026-09-15 15:15:32 +02:00
Ole André Vadla Ravnås a82e25840b gtk: Say where the emulators are
Bootstrap provisions QEMU into a prefix of its own, and nothing told
the app about it -- the search goes by PATH, which named every other
prefix but that one.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås aa46fb5328 ci: Refresh meson subprojects with the checkout
Only git's own submodules were being updated, and a wrap subproject
is invisible to git -- so radare2 kept an sdb from whatever ref was
built before, and the build failed on symbols the pinned one has.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås 4796610b87 ci: Look for DBus where QEMU can start
The check ran the emulator without vcpkg on the path, so it could not
load GLib and answered nothing -- and the build failed saying the
dbus display was missing from a QEMU that has it.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås ab2990282f ci: Take QEMU's libraries from vcpkg alone
MSYS2's profile exports a PKG_CONFIG_PATH of its own, which is read
before PKG_CONFIG_LIBDIR, so zlib, bzip2 and zstd came from the
compiler's own prefix while glib and pixman came from vcpkg. A second
zlib then travelled beside the emulators under the same name as the
app's, and won by sitting closer.

Let go of that path, and point the linker at vcpkg for bzip2, which
asks the compiler rather than pkg-config. Bring zstd along so nothing
is given up for it, say outright that both are wanted so a build
stops rather than quietly dropping them, and leave behind only what
vcpkg has no answer for.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås a2ed6997eb ci: Stage the MinGW libraries QEMU needs
The sweep that picks them out of ntldd's output asked for a literal
bracket after the drive letter, so it matched nothing and not one
library travelled. The emulator then found vcpkg's zlib beside the
app instead of the one it was built against, and died on a missing
entry point before it could say anything.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås 45968ffc88 ci: Build QEMU without the plugin examples
contrib/plugins is a C++ sample that GCC 15's libstdc++ cannot
compile against the win32 thread model, and nothing here loads a TCG
plugin -- the backend drives QEMU over QMP and the gdbstub.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås 842597f9a1 ci: Let meson find gdbus-codegen
vcpkg keeps it in tools/glib, beside glib-mkenums, and only bin was
on the path -- so the dbus display the app draws from could not be
configured at all.
2026-09-15 13:45:09 +02:00
Ole André Vadla Ravnås 4767b7ded0 ci: Build QEMU on Windows from source
The emulators were downloaded from a qemu-<build> release built in
MSYS2 against MinGW's GLib and pixman, so the installer carried
those beside the vcpkg ones the app links: two copies of GLib and
friends.

Build them in the Windows job instead, against the vcpkg prefix,
cached like the other dependencies on the QEMU version and the
build script. QEMU builds under MinGW and nowhere else on Windows,
but UCRT64 and CLANGARM64 sit on the same C runtime as the MSVC
DLLs they now link, so a descriptor means the same on both sides.
The x86_64 environment moves from MINGW64 for that reason.

The emulators live a directory below the app, where nothing looks
for its GLib on its own, so they are started with the installation
root on PATH.

Windows drops out of the QEMU workflow, which macOS still uses.
2026-09-15 13:45:03 +02:00
Ole André Vadla Ravnås 11c28e41d9 Unpack the Barebone agent through liblzma
Off Apple the xz container was unpacked by running /usr/bin/env xz,
which Windows has no answer for: Process reports that the file does
not exist, and the message reaches the user as it stands.

Decode in-process instead, the way Compression already does on
Apple, and ask for the library the platforms package.
2026-09-15 13:44:57 +02:00
Ole André Vadla Ravnås d9489c0fdd gtk: Drop what the webview needed
The webview shims went with the native editors; the libraries and
packages they pulled in stayed. Let go of the WebView2 loader and
its COM and WinRT companions, the vcpkg port, and webkitgtk in the
AppImage.
2026-09-14 19:59:53 +02:00
Ole André Vadla Ravnås 00c053339e build: Bump SwiftyR2 and radare2
The new xcframework carries the RIOPlugin layout change.
2026-09-11 14:52:59 +02:00
Ole André Vadla Ravnås e13dc2ead9 gtk: Pass the Pharo prefix on when packaging 2026-09-11 00:03:57 +02:00
Ole André Vadla Ravnås 2dbdc17bf9 gtk: Stop linking WebKit
Nothing has used it since the editors became native.
2026-09-10 23:16:55 +02:00
Ole André Vadla Ravnås 815a6659a3 ci: Keep the Windows PATH within cmd's limit
Stacking the toolchains leaves it near 10k characters, and cmd
expands at most 8191, so every child process saw an empty PATH.
2026-09-10 22:45:06 +02:00
Ole André Vadla Ravnås 0618c3da1a gtk: Import Observation where it is used 2026-09-10 22:44:22 +02:00
Ole André Vadla Ravnås 69882da7a8 build: Pin radare2 to what the xcframework has
SwiftyR2 links a prebuilt radare2 on Apple platforms, so the other
platforms have to build the same revision.
2026-09-10 22:44:22 +02:00
Ole André Vadla Ravnås 487ff9cbf4 build: Bump frida-swift for the Linux socket fix 2026-09-10 21:41:04 +02:00
Ole André Vadla Ravnås 507bcf7fb3 build: Bump frida-swift and SwiftyR2
For the uint64 variant on Linux, and seeking past Int64.max.
2026-09-10 17:54:51 +02:00
Ole André Vadla Ravnås 52fcf32ac0 Put the kernel first in the process list
It is the one process nothing else stands in for. Name it as such,
and let the device rows ellipsize rather than widen the column.
2026-09-10 16:30:19 +02:00
Ole André Vadla Ravnås b092b17bc2 core: Fix disassembling what the map misses
Open through the r2 command so what it opens is mapped: the
disassembler skips whatever falls outside a map, and reading is not
enough. Drop the bin load, which only sniffed formats at address zero.

Let a failed read say so instead of returning null, remember the pages
that have none, and resolve an anchor live or not at all -- a stale
address lands on whatever occupies it now.
2026-09-10 16:30:19 +02:00
Ole André Vadla Ravnås 356dbfac7a build: Fix the CI builds after the bump
frida-core wants Go 1.26 for its compiler backend and Node for the
barebone runtime, and frida-swift now reaches for the GIO headers.
Swift needs ncurses in the snap.
2026-09-10 16:29:28 +02:00
Ole André Vadla Ravnås 54fdc97e6d build: Pin the QEMU archives
The scripts printed the build on stdout too, so the release body was a
truncated log without the checksums. Keep stdout for the notes.
2026-09-10 15:46:58 +02:00