Compare commits

...
509 Commits
Author SHA1 Message Date
Ole André Vadla Ravnås 2d18d5cdba subprojects: Prepare for release 2026-04-28 16:54:40 +02:00
Ole André Vadla Ravnås 70e219dab5 base: Fix installed-asset path resolution
When frida-core is statically linked, the module containing
AssetLocation.detect() is the host executable itself. If that
binary lives under bin/ or sbin/, the derived asset path was
anchored at that directory rather than the configured libdir —
e.g. /usr/sbin/frida-1.0/... instead of /usr/lib/frida-1.0/...

Generalize the existing Windows-only bin -> lib redirect so it
also handles sbin, and resolve to the Meson-configured libdir
name (now exposed as Config.FRIDA_LIBDIR).

Also stop including the <arch> subdirectory on Darwin: the
default asset path template doesn't have one there because we
ship fat binaries, so the literal <arch> ended up in the final
path with nothing to substitute it.
2026-04-28 16:35:27 +02:00
Ole André Vadla Ravnås 12d21fb8a9 subprojects: Bump outdated 2026-04-28 12:50:03 +02:00
Ole André Vadla Ravnås 8191442724 submodules: Bump releng 2026-04-28 12:50:02 +02:00
Ole André Vadla Ravnås cee6330e8d subprojects: Prepare for release 2026-04-28 12:23:06 +02:00
Ole André Vadla Ravnås 74b86cb838 compat: Forward parent's apple-min-os
The compat sub-build creates fresh MachineSpecs and lets
env_apple fall back to APPLE_MINIMUM_OS_VERSIONS, which on
macOS is 11.0. With a higher parent setting (e.g. 15.0 to
unlock Apple's TLS backend) frida-core's TLS provider check
silently fails in the sub-build and we end up linking
gioopenssl into the compat slice — pulling libssl/libcrypto
into frida-agent-arm64e.dylib alongside the wrap-built libnice
that already uses CommonCrypto.

Forward host_os_family from compat/meson.build (mirroring how
tools/cgo/detect.py already takes it), parse the parent's
frida-{os}-{arch}.txt machine file for the existing
-target ...-apple-{os}<ver> stamp on Darwin, and feed that
back as apple_min_os to the recursive configure() call so the
sub-build inherits the same deployment floor.
2026-04-26 19:47:40 +02:00
Ole André Vadla Ravnås 07f8d8dd9a deps: Skip OpenSSL on macOS
Now that libnice uses the apple-crypto backend (CommonCrypto +
arc4random_buf) and the fruity sources that called into OpenSSL
(pairing.vala, tls-psk.vala, tunnel.vala) are gated on
host_os != 'macos', nothing on macOS depends on OpenSSL.

Drop openssl_dep / 'openssl' from backend_deps_private and the
fruity backend's --pkg list on macOS so it stops appearing in
frida-core-1.0.pc and getting merged into the devkit.
2026-04-26 17:35:09 +02:00
Ole André Vadla Ravnås 642129c7fc subprojects: Bump outdated 2026-04-26 17:21:09 +02:00
Ole André Vadla Ravnås 44021fc5f2 submodules: Bump releng 2026-04-26 17:19:16 +02:00
Ole André Vadla Ravnås 04952c9f74 fruity: Polish XPC UUID helper
Two small tidy-ups on the make_random_v4_uuid helper added in
the previous commit:

- Drop the redundant `static` qualifier on hex_nibble; at
  namespace scope (rather than inside a class) it's meaningless.
- Use `i != uuid.length` rather than `i < uuid.length` for the
  loop bound, matching the surrounding house style.
2026-04-26 15:34:02 +02:00
Ole André Vadla Ravnås c760728677 fruity: Use GLib.Uuid for XPC random UUID
Drop OpenSSL.Rng.generate from xpc.vala's make_random_v4_uuid in
favour of GLib.Uuid.string_random, parsing the 32 hex chars back
into 16 bytes. Removes the only remaining OpenSSL caller in
xpc.vala, and the v4-and-variant bit fixup goes with it -- the
GLib helper bakes those in already.
2026-04-26 15:28:13 +02:00
Ole André Vadla Ravnås 73031586ab fruity: Skip tls-psk.vala on macOS
TlsPskClientStream is only consumed by TcpTunnelConnection, and
tunnel.vala (along with the rest of the iOS USB tunneling glue)
is already excluded from the macOS build. Move tls-psk.vala into
the same conditional block so its OpenSSL TLS-PSK code stops
getting compiled in -- and pulled into Luma's macOS binary -- on
a host that never reaches that code path.
2026-04-26 15:25:27 +02:00
Ole André Vadla Ravnås fafb45499f package-server-fruity: Use lib/frida-1.0 paths
Catches up with the install-path rename from cd3b35bd. Both
ends move: the input is read from the new bundle layout, and
the output is placed where frida-server resolves the agent
at runtime (via FRIDA_LIBDIR_NAME).
2026-04-26 14:04:52 +02:00
Ole André Vadla Ravnås e600ff51ed compiler: Fix asset paths in c-archive mode
The compiler-backend asset path is only meaningful when the
backend lives as a separate file. In c-archive mode it is
linked into libfrida-core, so FRIDA_COMPILER_BACKEND_NAME is
never defined — narrow the gate to the installed-library and
installed-executable modes that actually consume it.
2026-04-26 13:33:57 +02:00
Ole André Vadla Ravnås cec816b7da subprojects: Bump outdated 2026-04-26 13:17:26 +02:00
Ole André Vadla Ravnås 9d67b97b6e nice: Pick Apple CommonCrypto backend on Darwin
Bump the libnice subproject to 9a3da6e3 (auto-picks
CommonCrypto + arc4random_buf on Darwin) and switch the wrap's
crypto-library default from openssl to auto, matching
releng/deps.toml. On Darwin that gets STUN's RAND/HMAC-SHA1/MD5
from the new Apple primitives instead of OpenSSL; elsewhere it
falls through to gnutls or openssl as before.
2026-04-26 13:12:33 +02:00
Ole André Vadla Ravnås 5cb91d9e25 compiler: Fix backend mode on Apple non-macOS
Use host_os_family to detect Apple platforms instead of
checking Go's GOOS, which is "ios" (not "darwin") for iOS.
The previous check always evaluated false on iOS, causing
configure to pick c-shared — unsupported by Go's toolchain
on any Apple OS other than macOS.
2026-04-26 11:28:23 +02:00
Ole André Vadla Ravnås 9a0880ff5d api: Merge referenced top-level delegates
The .gir merge pulls classes, interfaces, enums and gtype
structs from core and base, but not the top-level <callback>
elements Vala emits for namespace-level delegates. Downstream
consumers like frida-node's codegen then fail to resolve the
delegate type (e.g. WebRequestHeaderFunc).

Scan the merged namespace for Frida./FridaBase. type
references and pull in any source-gir <callback> whose name
is referenced but not yet present. This avoids relying on
beautified C typedef strings and naturally extends to any
future namespace-level delegate.
2026-04-26 11:09:15 +02:00
Ole André Vadla Ravnås 562a74ded7 Revert "api: Propagate top-level delegates"
This reverts commit 4393572b45.

The fix was a no-op: it scanned beautified typedef strings of
the form "(* FridaFoo)" with the regex \(\*(\w+)\), which never
matched because beautify_cprototype rewrites "(*" to "(* " and
the regex requires no space. delegate_c_types stayed empty, so
no callbacks were ever copied into the merged gir. Replaced
in a follow-up commit by a reference-driven merge.
2026-04-26 11:09:15 +02:00
Ole André Vadla Ravnås 3d0f4b0529 subprojects: Bump outdated 2026-04-26 10:28:18 +02:00
Ole André Vadla Ravnås 7c6ad4fdf8 meson: Flatten TLS provider default_options
Splice tls_provider_backend_options into dependency()'s
default_options with `+` instead of nesting it. meson rejects
array[list | str]; default_options must be array[str].
2026-04-26 10:21:04 +02:00
Ole André Vadla Ravnås 751f19e2db subprojects: Bump outdated 2026-04-26 10:16:28 +02:00
Ole André Vadla Ravnås 4059c74936 submodules: Bump releng 2026-04-26 10:16:27 +02:00
Ole André Vadla Ravnås af1b89d02c p2p: Replace OpenSSL cert gen with SecKey
On Darwin, _frida_generate_certificate now uses SecKey for RSA
keygen and signing and hand-rolls the X.509 TBSCertificate DER
instead of going through OpenSSL's X509 + EVP_PKEY + PEM APIs.
The OpenSSL path stays for non-Apple builds.
2026-04-26 09:22:56 +02:00
Ole André Vadla Ravnås f77ae76242 apple: Use gioapple TLS backend on Darwin
Select the Apple-native gioapple backend (Security.framework +
Network.framework) instead of gioopenssl on Darwin.

This removes frida-core's OpenSSL TLS dependency on Apple
platforms, eliminating the non-exempt-crypto footprint App
Store review calls out.
2026-04-26 09:22:56 +02:00
Ole André Vadla Ravnås 0fec62a283 host-session: Add simmy and local provider icons
Give the two remaining providers without artwork a bundled
glyph:

  - local: desktop monitor with a white shell prompt on a
    dark screen — now the default for LocalHostSessionProvider
    on Linux, FreeBSD, and QNX. Windows and Darwin keep
    overriding with their system-extracted icons.
  - simmy: light silver phone with macOS traffic-light dots
    on the screen — reads as a simulated iOS device on macOS.
2026-04-24 01:02:55 +02:00
Ole André Vadla Ravnås bdcae8b809 host-session: Modernize provider icons
Replace the hardcoded base64 RGBA blobs with clean 96x96 PNGs
bundled through the resource compiler (src/icons.resources).
Each provider now calls a shared make_provider_icon helper to
build the icon Variant from the embedded blob.

The new artwork (fruity-network phone, droidy head, socket
globe, barebone chip, portal hub) follows SF Symbols and
libadwaita conventions so it reads well in both SwiftUI and
GTK/Adwaita consumers.

Add tools/generate-provider-icons.py to regenerate the PNGs
from SVG sources.
2026-04-24 00:43:44 +02:00
cl45h ee784bdd18 compat: Fix build with empty prebuild set (#1230)
When FRIDA_ALLOWED_PREBUILDS is set to an empty string (e.g. when
building with --without-prebuilds on platforms without prebuilt
binaries), `"".split(",")` produces `['']` instead of `[]`. This
results in a set containing an empty string `{''}` rather than an
empty set, which is then passed as `allowed` to the build system
causing it to attempt downloading nonexistent prebuilds.

Use `filter(None, ...)` to strip empty strings from the split result,
so an empty env var correctly produces an empty set.

This fixes building from source on platforms like FreeBSD where no
prebuilt toolchain/SDK binaries are available.
2026-04-20 17:19:17 +02:00
Ole André Vadla Ravnås 5adb546db6 subprojects: Bump outdated 2026-04-20 17:16:30 +02:00
Ole André Vadla Ravnås 4393572b45 api: Propagate top-level delegates into merged gir
The .gir merge pulls classes, interfaces, enums and gtype
structs from core and base, but not the top-level <callback>
elements Vala emits for namespace-level delegates. Downstream
consumers like frida-node's codegen then fail to resolve the
delegate type (e.g. WebRequestHeaderFunc). Copy matching
callbacks over using the delegate c-types we already captured
per object type.
2026-04-20 17:00:32 +02:00
Ole André Vadla Ravnås 440a03f0d4 ci: Bypass success() chain for xcframework publish
The needs.xcframework.result alone isn't enough to escape GitHub
Actions' chained success() check; add !cancelled() so the condition
is evaluated even when needed jobs transitively report failure.
2026-04-20 16:34:21 +02:00
Ole André Vadla Ravnås cdcb36b0f3 subprojects: Bump outdated 2026-04-20 16:31:40 +02:00
Ole André Vadla Ravnås 862d4781e0 submodules: Bump releng 2026-04-20 16:31:39 +02:00
Ole André Vadla Ravnås a7be127b63 ci: Gate publish-xcframework on xcframework only
GitHub Actions' default success() check walks the whole needs
graph, so a Linux fluke failing native ended up skipping
publish-xcframework even though xcframework itself succeeded.
Reference needs.xcframework.result explicitly so only that
direct dependency decides whether to publish.
2026-04-20 15:16:04 +02:00
Ole André Vadla Ravnås be055ae47b ci: Add setuptools for Windows distutils shim
glib's gdbus-codegen still imports distutils, which Python 3.12
removed from the stdlib. setuptools ships a distutils-precedence
.pth that puts its own distutils back on sys.path, so installing
it is enough to keep the codegen running.
2026-04-20 15:15:51 +02:00
Ole André Vadla Ravnås 7bbf62c092 subprojects: Bump outdated 2026-04-20 14:52:15 +02:00
Ole André Vadla Ravnås 40bbe0b925 submodules: Bump releng 2026-04-20 14:52:15 +02:00
Ole André Vadla Ravnås 7c61cedeae ci: Drop now-unneeded wrap overrides
With releng isolating pkg-config per machine, the cross-mingw
and emulator jobs no longer leak host packages into their host
machine configuration, so the wraps for glib, pcre2, and openssl
kick in naturally. Keep --force-fallback-for=openssl on native
Windows since msys2's OpenSSL lacks Frida's QUIC patches.
2026-04-20 14:51:51 +02:00
Ole André Vadla Ravnås ec1981aeeb subprojects: Bump outdated 2026-04-20 14:40:58 +02:00
Ole André Vadla Ravnås 8488018e90 submodules: Bump releng 2026-04-20 14:40:58 +02:00
Ole André Vadla Ravnås b386666646 ci: Run xcframework despite unrelated failures
Use !cancelled() on the xcframework job so it still runs when
needed jobs (native, mobile) report failure for unrelated matrix
entries such as a flaky Linux build. The download-artifact steps
will fail if the macOS/iOS devkits are actually missing, so the
publish step still gates on xcframework's real success.
2026-04-20 14:32:26 +02:00
Ole André Vadla Ravnås c9028d73c2 ci: Force glib wrap on emulator and x86-mingw
Both the x-tools-linux-be-target container and the i686 mingw
cross-toolchain expose a target glib through pkg-config, which
the build now prefers over the wrap. That skips wrap-provided
deps such as zlib (needed by libunwind) and pcre2 (needed by
glib's gregex). Force the wrap so Frida's patched glib is used
along with its bundled subprojects.
2026-04-20 14:32:18 +02:00
Ole André Vadla Ravnås 71244206db ci: Force openssl wrap for fruity backend
System OpenSSL on the affected runners lacks the experimental
SSL_QUIC_METHOD API needed by ngtcp2's quictls helper, so the
ngtcp2 subproject builds neither libngtcp2_crypto_quictls nor
libngtcp2_crypto_ossl. Force the openssl wrap, which carries
Frida's QUIC patches, matching the windows-shared workflow.
2026-04-20 14:32:10 +02:00
Ole André Vadla Ravnås 96ebd59ffa core: Use Json.Reader helper to pin root node
Reroute remaining hand-constructed Json.Reader call sites through
make_json_reader_from_node, which attaches the original root node
to the reader as object data.

Json.Reader.set_root() copies the supplied node via json_node_copy().
For object/array nodes that copy is a shallow shell that shares the
JsonObject/JsonArray via refcount, but the members inside the shared
container keep their parent pointers set to the *original* root, not
the shell. Dropping the original leaves json_reader_end_member()'s
walk via json_node_get_parent() touching a freed node, which on
builds with glib checks enabled (e.g. Fedora) trips JSON_NODE_IS_VALID
and aborts.

See GNOME bugzilla #774684.
2026-04-19 16:40:25 +02:00
Ole André Vadla Ravnås 86be996ede compiler: Skip version script on Windows
Windows PE linkers don't honor --version-script. MSYS2 CLANGARM64's
lld rejects the unknown argument outright; the MinGW x86_64 gcc+bfd
toolchain used to silently ignore it. In c-shared mode on Windows,
Go's default export filtering already limits visibility to symbols
tagged with //export, so dropping the version script changes no
observable behavior.
2026-04-19 11:12:10 +02:00
Ole André Vadla Ravnås 2abe10aeec meson: Fall back to system lzfse without .pc file
Detect lzfse.h + -llzfse directly when pkg-config has no entry,
matching how frida-gum handles libdwarf. Lets Fedora's lzfse-devel
satisfy the dependency.
2026-04-18 23:58:30 +02:00
Ole André Vadla Ravnås 3d49a01980 compat: Skip helper/agent without local backend
Without the local backend, frida-helper and frida-agent are not
produced by the main or nested meson builds, so the compat
arch-support target failed trying to compile them for the other
architecture. Treat helper and agent as components gated on
have_local_backend, matching how gadget and server are already
wired, and drop empty output groups before state serialization.
2026-04-18 14:45:54 +02:00
Ole André Vadla Ravnås 7721867fd4 linux: Drop libbpf dep without local backend
The BPF wrappers in lib/base/linux.vala are only consumed by
helper-backend sources that ship as part of the local backend,
and nothing else references libbpf. Gate the class definitions
on HAVE_LOCAL_BACKEND and the libbpf lookup/link on
have_local_backend so socket-only or compiler-only builds on
Linux no longer require libbpf at all.
2026-04-18 14:45:08 +02:00
Ole André Vadla Ravnås b2023ade06 meson: Simplify libbpf dependency lookup
Drop the non-Frida-GLib branch that explicitly instantiated the
libbpf subproject before resolving the dependency. Meson already
falls back to the wrap automatically when the dependency is not
found, so the extra subproject() call was redundant.
2026-04-18 14:29:21 +02:00
Ole André Vadla Ravnås c5e3c37849 compiler: Fix shared-library build on Windows
backend-glue.c unconditionally referenced the cgo init symbol
whenever the compiler backend was enabled, but that symbol only
exists when the Go backend is statically linked (c-archive mode).
Gate it on a new HAVE_COMPILER_BACKEND_LINKED define to mirror
the Vala-side COMPILER_BACKEND_LINKED guard.
2026-04-18 14:18:35 +02:00
Ole André Vadla Ravnås b62bc0e17c compiler: Pass Go config via file, not cmdline
The base64-encoded config embeds the full process environment,
which can easily blow past command-line length limits on some
platforms. Write it to <build_root>/tools/cgo/go-config.json
instead and pass the path to build-backend.py.
2026-04-18 13:00:44 +02:00
Ole André Vadla Ravnås a787ecc4bf socket: Add WebRequestHandler support
Add a WebRequestHandler interface plus WebRequest / WebResponse
data classes. EndpointParameters gains a request_handler property;
ConnectionHandler consults it (via a new handle_http_request flow)
before falling through to asset_root, and returns 404 if neither
is set.

Also extend the API generator to list the new types and scan both
core_header and base_header for delegate typedefs, so types living
in lib/base (including WebRequestHeaderFunc) end up in the public
header.
2026-04-18 01:39:00 +02:00
Ole André Vadla Ravnås 86f76f8630 windows: Install dbghelp / symsrv alongside agent
frida-gum's ext/ subprojects install these helpers, but
releng/meson_make runs `meson install --skip-subprojects` when
default_library=shared to keep other subproject artifacts (e.g.
capstone) out of the prefix. That also drops the dbghelp /
symsrv rules on the floor. Re-install them from frida-core so
installed-mode distributions ship them next to frida-agent.dll,
where the host session's elevated-injection asset bundling
expects them.
2026-04-17 23:51:10 +02:00
Ole André Vadla Ravnås 5e1b97236d portal-service: Allow registering extra endpoints
Add add_cluster_endpoint() and add_control_endpoint() that queue
extra EndpointParameters. start() spins up a WebService per
registered endpoint; stop() tears them all down. Both throw
INVALID_OPERATION once the service has started — dynamic
add-after-start isn't supported.

Motivated by wanting a second control listener (e.g. a plain-HTTP
one behind a Cloudflare Tunnel) alongside the main TLS-pinned one.
2026-04-17 23:50:53 +02:00
Ole André Vadla Ravnås ec8df6a896 windows: Fix agent loading in installed-mode
The host session only populated the AgentDescriptor under
HAVE_EMBEDDED_ASSETS, so any attach with assets=installed
crashed inside Winjector.inject_library_resource() with a null
agent. Mirror the Linux pattern: take the #else branch through
inject_library_file_with_template() using Frida.agent_path (and
the per-arch dbghelp / symsrv neighbors as dependencies for
the elevated-injection asset bundle).

Two supporting fixes:

* AssetLocation.detect() now translates <prefix>\bin to
  <prefix>\lib on Windows, where the frida-core DLL ships in
  bin/ but agent assets live under lib/frida-1.0/.
* Winjector.inject_library_file_with_template() is now public,
  as on Linux, so host sessions can target an installed layout
  without building an AgentDescriptor.
2026-04-17 23:40:49 +02:00
Ole André Vadla Ravnås b92a4562b8 build: Force sqlite subproject to static
libsoup's internal `dependency('sqlite3')` would otherwise trigger the
wrap fallback with the parent's `default_library=shared`.
2026-04-17 23:40:49 +02:00
joe 25d7c2a648 fruity-syscall-trace: Tolerate sig fails (#1226)
In the add-targets handler, the loop that populates target_pids
previously let any failing query_symbolicator_signature call
propagate out and abort the entire request, meaning one unhappy
PID killed the whole trace.

Catch Frida.Error per PID and fall back to a bare Fruity.CsSignature
carrying just the pid. The trace keeps going for the remaining
targets, and the fallback signature is benign for downstream code
that only reads the pid field until a real signature becomes
available.
2026-04-17 20:21:15 +02:00
Megladon 6fef95a6dd syscall-trace: Support include-syscall (#1228) 2026-04-17 20:14:39 +02:00
Francesco Tamagni 1f0c537720 fruity: Detach lldb only if no attached gadgets
before: when multiple gadget entries relied on the same lldb session,
the first to detach also detached lldb
after: only the last detached gadget entry actually detaches lldb
2026-04-17 20:10:52 +02:00
Ole André Vadla Ravnås c41fadd01e core: Expose _-prefixed asset path init helpers
The init/deinit_asset_paths functions are implemented in Vala
and called from frida-glue.c. Declaring them internal made
Vala warn they were never used (it doesn't see the C callers).

Promote to public so Vala stops complaining, and add a leading
underscore to signal they aren't part of the stable public API.
2026-04-14 23:51:21 +02:00
Ole André Vadla Ravnås b0ded01fd3 fruity: Move sleep to device-monitor-portable
The sleep helper only has callers in device-monitor-portable.vala,
which isn't built on macOS — leaving the definition in
device-monitor.vala looked unused there and tripped Vala.
2026-04-14 23:51:21 +02:00
Ole André Vadla Ravnås 98546506e2 fruity: Move OpenSSL keypair helpers to pairing
The make_keypair / get_raw_public_key / get_raw_private_key
wrappers lived in xpc.vala but are only referenced from
pairing.vala and tunnel.vala, which aren't built on macOS.
That orphaned them there and tripped Vala "never used"
warnings on macOS builds.
2026-04-14 23:47:09 +02:00
Ole André Vadla Ravnås a3b336ec15 compiler: Keep backend Module resident
The Module holding the dlopen'd backend was a local in init(),
so it was released the moment init() returned — at which point
g_module_close() is free to unload the image out from under the
build/watch/dispose function pointers we just resolved.

Mark it resident so the module's lifetime matches the symbols.
2026-04-14 23:26:10 +02:00
Ole André Vadla Ravnås 36b092ea66 core: Drop soversion from shared library
The previous soversion tracked the outer Frida toolkit version,
bumping the SONAME on every Frida release regardless of whether
frida-core's ABI actually changed. Drop it for now; the "1.0" in
the library name should probably be replaced by the Frida major
version eventually, at which point any soversion scheme can be
revisited.
2026-04-14 18:43:41 +02:00
Ole André Vadla Ravnås a2a1cce8e9 compiler: Fix macOS c-shared symbol export
The exported_symbols_list patterns use Mach-O symbol names, which
add an underscore prefix to C names. Since CGO //export directives
already start with an underscore, the real Mach-O symbols are
__frida_compiler_backend_*, so the single-underscore pattern matched
nothing and the plugin exported zero symbols.
2026-04-14 18:29:27 +02:00
Ole André Vadla Ravnås b63ff37ad7 build: Always define FRIDA_LIBDIR_NAME
AssetLocation references it unconditionally, so it must
be present in config.h even for embedded-asset builds.
2026-04-13 16:02:12 +02:00
Ole André Vadla Ravnås 9fe9f529b5 subprojects: Bump outdated 2026-04-13 14:36:35 +02:00
Ole André Vadla Ravnås 2bd2816d9a ci: Add Windows shared library build
Test both x86_64 and arm64 using vcpkg for the system
dependencies (GLib, json-glib, libsoup).
2026-04-13 14:28:22 +02:00
Ole André Vadla Ravnås 5d221ea316 api: Bundle GModule-2.0.gir
Gio-2.0.gir depends on GModule, so g-ir-compiler
needs it when compiling the Frida typelib.
2026-04-13 14:28:16 +02:00
Ole André Vadla Ravnås 2c8bb33afb api: Pass girdir to g-ir-compiler
Supply --includedir so g-ir-compiler can find base GIR
files on platforms where they are not in a default search
path.
2026-04-13 14:28:11 +02:00
Ole André Vadla Ravnås 8b5b56990c build: Support shared library on Windows
Add Windows-specific asset directory layout with per-arch
subdirs. Set HAVE_EMBEDDED_ASSETS and HAVE_COMPILER_BACKEND
in config.h for the C code. Link shlwapi on Windows.
2026-04-13 13:52:35 +02:00
Ole André Vadla Ravnås 1875ededf2 windows: Gate embedded assets
Guard resource store and agent blob references with
HAVE_EMBEDDED_ASSETS so non-embedded builds compile.
2026-04-13 13:52:31 +02:00
Ole André Vadla Ravnås 35063b1dea build: Default to static for more fallbacks
Specify default_library=static for json-glib, libsoup,
and libnghttp2, consistent with how other fallback
subprojects are already configured.
2026-04-13 13:52:04 +02:00
Ole André Vadla Ravnås 66c4c0e288 build: Add nghttp2 wrap
Needed for builds without an SDK, where libnghttp2 would
otherwise not be available as a system dependency.
2026-04-13 13:52:04 +02:00
Ole André Vadla Ravnås 7a2127cfd3 build: Add relocatable asset resolution
For non-embedded asset builds, dynamically compute
asset paths at init time using the module's own
location instead of hardcoding absolute paths at
compile time.

Add AssetLocation in lib/base, which uses
Gum.Process.enumerate_modules to find the directory
containing our shared library, then derives asset
paths relative to it.
2026-04-13 13:51:59 +02:00
Ole André Vadla Ravnås d72314b3fa subprojects: Bump outdated 2026-04-10 23:55:08 +02:00
Ole André Vadla Ravnås 58d4b7fa17 submodules: Bump releng 2026-04-10 23:55:07 +02:00
Ole André Vadla Ravnås cfcc8ae9e4 meson: Fix has_function with internal libsoup
Work around a Meson bug where cc.has_function() rejects
internal (subproject) dependencies. Assume the feature is
present when libsoup comes from a subproject, matching
the existing GLib pattern.
2026-04-10 23:54:08 +02:00
Ole André Vadla Ravnås 21cdaee891 meson: Finish adding default_library=static
Cover all remaining dependency() calls that have a corresponding .wrap.
2026-04-10 23:41:56 +02:00
Ole André Vadla Ravnås 2251f7893e fruity: Fix non-macOS build after code split
Add OpenSSL using-directives to pairing.vala, and fully
qualify the few OpenSSL type references in tunnel.vala and
xpc.vala instead of pulling in using-directives for just a
handful of call sites. Also drop the now-unnecessary ones
from xpc.vala.
2026-04-10 20:07:47 +02:00
Ole André Vadla Ravnås 7dc83ad22a fruity: Split out portable tunnel and pairing code
Move UsbmuxTunnel and the PortableCoreDevice* classes from
device-monitor.vala into device-monitor-portable.vala.

Move TunnelConnection, TunnelParameters, TcpTunnelConnection,
QuicTunnelConnection, and TunnelKey from xpc.vala into
tunnel.vala.

Move PairingService, PairingTransport, XpcPairingTransport,
PlainPairingTransport, PairingStore, PairingIdentity,
PairingPeer, PairingServiceMetadata, DeviceOptions,
DeviceInfo, and supporting types from xpc.vala into
pairing.vala.

Also move network-stack.vala into the same conditional
group now that all its users are in excluded files.

These are all excluded at the meson.build level on macOS,
replacing the #if !MACOS blocks with file-level exclusion.
2026-04-10 14:28:38 +02:00
Ole André Vadla Ravnås 15a9fef3a5 subprojects: Bump outdated 2026-04-10 13:21:01 +02:00
Ole André Vadla Ravnås f6d274f49e macos: Fix shared library build
Drop libngtcp2, libusb-1.0, and lwip deps on macOS, where
Apple's CoreDevice tunnel is used instead. Guard the
portable USB/NCM/tunnel code with #if !MACOS in the Vala
sources, and exclude usb.vala/ncm.vala at the meson.build
level.

Fix gee-0.8 vapi discovery for builds using system libgee
by querying its pkg-config prefix to locate the vapidir.

Fix compat sub-builds to use installed assets and filter
conflicting options, avoiding the embed-agent chicken-and-
egg problem on macOS.

Also fix OpenSSL vapi headers, Capstone compat with system
packages, compiler backend linker flags on macOS, and add
missing CoreFoundation framework linkage.
2026-04-10 13:13:22 +02:00
Ole André Vadla Ravnås 7300274bcf subprojects: Bump outdated 2026-04-09 13:41:29 +02:00
Ole André Vadla Ravnås 3b04d85adf submodules: Bump releng 2026-04-09 13:41:29 +02:00
Ole André Vadla Ravnås ba97684104 subprojects: Bump outdated 2026-04-09 12:14:30 +02:00
Ole André Vadla Ravnås e90015f917 submodules: Bump releng 2026-04-09 12:14:29 +02:00
Ole André Vadla Ravnås 57b378387b subprojects: Bump outdated 2026-04-09 11:50:28 +02:00
Ole André Vadla Ravnås 627152da6a submodules: Bump releng 2026-04-09 11:50:27 +02:00
Ole André Vadla Ravnås f7511ea32d fruity: Drive PSK TLS via OpenSSL directly
The TCP tunnel handshake to a paired Apple device speaks TLS-PSK,
which we previously set up by getting at the underlying SSL handle
of a GTlsClientConnection through glib-networking's OpenSSL backend
(g_tls_connection_openssl_get_ssl). This only works on systems where
glib-networking ships an OpenSSL backend, which excludes most distros
that build it against GnuTLS — including Fedora — leaving the Fruity
backend with "GIO OpenSSL TLS backend not available" the moment a
shared build is run there.

Replace the glib-networking detour with a small TlsPskClientStream
that drives OpenSSL on the raw IOStream returned by the netstack:

  - The class is an IOStream wrapping the raw stream's pollable
    input/output. The handshake runs in init_async, alternating
    SSL_do_handshake with non-blocking BIO drains and reads from the
    underlying pollable stream.
  - Steady-state read/write go through SSL_read/SSL_write against
    a pair of memory BIOs. The non-blocking input path pulls fresh
    ciphertext via base.read_nonblocking when SSL signals WANT_READ;
    the non-blocking output path produces ciphertext into wbio and
    drains it via base.write_nonblocking, leaving any leftover in
    wbio so a subsequent call (woken by the chained pollable source)
    can finish flushing it. Back-pressure is structural — there are
    no buffers we own, no pump tasks, no watermarks.
  - The pollable sources chain directly to the base stream's source
    via PollableSource.full, so the consumer's poll loop wakes
    correctly and SSL_pending() is folded into is_readable() to
    avoid stalling on already-decrypted plaintext.

Drop the HAVE_GIOOPENSSL helpers and the runtime dlsym fallback in
xpc.vala — TcpTunnelConnection.open now wraps the raw stream with
TlsPskClientStream and TLS no longer touches GIO at all. Other parts
of frida-core that use the gioopenssl backend (portal, gadget, agent)
are unaffected since they still go through tls_provider_dep.

Extend vapi/openssl.vapi with the bits the new code needs:
SSL_set_bio, SSL_do_handshake, SSL_read/write, SSL_get_error,
SSL_pending, the SSL_ERROR_* enum, and BIO_new/free/read/write/
ctrl_pending/get_mem_data wrappers using void* so we can hand the
BIO ownership to the SSL via SSL_set_bio. Also add the missing
cheader_filename to the OpenSSL.Error namespace.
2026-04-09 11:04:43 +02:00
Ole André Vadla Ravnås 4a7ebebff5 base: Add make_json_reader() lifetime helper
Json.Reader.set_root() copies the supplied node via json_node_copy().
For object/array nodes that copy is a thin shell that shares the
original JsonObject/JsonArray via refcount, but the members inside
the shared container have their parent pointers set to the *original*
root, not the shell. If the original is then dropped — as happens any
time we call `new Json.Reader (Json.from_string (...))` — the parent
walk inside json_reader_end_member() touches a freed node. On builds
with GLib checks enabled (e.g. Fedora) this trips JSON_NODE_IS_VALID
and aborts; on our toolchain builds it silently corrupts.

This is GNOME bugzilla #774684 from 2016. The fix lives in our
JSON-GLib fork but was never upstreamed.

Add a tiny helper that constructs the Json.Reader and attaches the
parsed root to it as object data, keeping the original alive for the
reader's lifetime so the parent pointers inside the shared container
remain valid. Migrate every existing call site that piped from_string
straight into a new Json.Reader.
2026-04-09 11:04:20 +02:00
Ole André Vadla Ravnås 30ef70353e fruity: Fix plist hash/eq for Bytes values
hash_value() and compare_values_eq() in the binary plist serializer
lumped Bytes in with PlistDict and PlistArray and routed all three
through g_value_get_object(). Bytes is a G_TYPE_BOXED, not a GObject,
so the call asserts under GLib builds with checks enabled (e.g. on
Fedora). Our toolchain builds disable checks, so the misuse went
unnoticed and returned the boxed pointer reinterpreted as a GObject*.

Use get_boxed() for Bytes and hash/compare by content, which is also
what the deduplication map presumably wanted in the first place: two
equal-content Bytes will now actually share an offset table entry
instead of staying distinct because their pointers differ.
2026-04-09 11:04:10 +02:00
Ole André Vadla Ravnås 89686d07bb build: Fix installed pkg-config for shared builds
Two issues with the installed frida-core-1.0.pc:

- vapidir was being overwritten by a build-tree path further down in
  meson.build, leaking a local source directory into the installed
  variables. Rename the local one to local_vapidir.

- Passing the core library object to pkg.generate caused Meson to
  auto-derive Requires.private from its declared dependencies, which
  pulled in a bunch of internal subprojects (frida-gum-1.0, libbpf,
  usrsctp, etc.) that aren't installed. In shared mode, pass the
  library as raw -L/-l strings instead so the shared library's
  DT_NEEDED stays the source of truth for runtime dependencies.
2026-04-08 16:43:57 +02:00
Ole André Vadla Ravnås 943cc1e261 compat: Rename upstream-glib payloads on install
When building with upstream GLib, the native-arch agent and gadget come
out of the compat subsystem alongside the cross-arch ones. They share
the same custom_target output list, so the native ones get an arch
suffix in the build directory to avoid colliding with the cross ones.

Install them under the canonical frida-agent.so / frida-gadget.so names
via a small install script that copies them into the correct per-bits
subdirectory of libdir/frida-1.0. Also strip frida-gum:gumjs and
frida-gum:inspector from the forwarded options so the nested compat
build picks them based on its own default_library=static rather than
inheriting the parent's shared-mode choices.
2026-04-08 16:43:57 +02:00
Ole André Vadla Ravnås cd3b35bdde build: Polish shared library output
A grab-bag of related improvements aimed at producing a clean shared
libfrida-core-1.0.so suitable for distro packaging:

- Use frida-1.0/ for the per-API-version asset directory (matching
  libfrida-core-1.0.so, frida-core-1.0.pc, etc.) so future API
  versions can install in parallel.
- Default the assets option to installed for shared builds, embedded
  for static.
- Install the typelib via gobject-introspection's typelibdir variable,
  so it lands next to the system's other typelibs.
- Force frida-gum, quickjs, and libtcc to static linking, and skip
  in-tree agent/gadget/payload + their pkg-config files when building
  shared (the agent and gadget come from compat in that case).
- Disable GumJS in shared builds and rely on the new inspector-only
  option in frida-gum to keep Script.enable_debugger() working.
- Build the compiler backend as an installable plugin under
  frida-1.0/plugins/ when assets=installed, with new
  COMPILER_BACKEND_INSTALLED_LIBRARY and
  COMPILER_BACKEND_INSTALLED_EXECUTABLE modes. Rename the existing
  modes to LINKED, EMBEDDED_LIBRARY, and EMBEDDED_EXECUTABLE for
  symmetry. The plugin is loaded by path at runtime, so distros can
  ship it as an optional separate package and frida-core gracefully
  reports a context-rich error when it's missing.
2026-04-08 16:43:57 +02:00
Ole André Vadla Ravnås 751f43145b subprojects: Bump outdated 2026-04-08 16:22:24 +02:00
Ole André Vadla Ravnås 7f3553d9fe submodules: Bump releng 2026-04-08 16:22:23 +02:00
Ole André Vadla Ravnås 420279280d subprojects: Bump outdated 2026-04-08 01:15:43 +02:00
Ole André Vadla Ravnås 96d4202ff6 submodules: Bump releng 2026-04-08 01:15:42 +02:00
Ole André Vadla Ravnås 8a72775477 compat: Strip subproject default_library opts too
When forcing default_library=static for upstream-glib builds, also
drop per-subproject overrides forwarded from the parent (e.g.
-Dfrida-gum:default_library=shared) so they don't escape the static
linking requirement.
2026-04-08 01:00:03 +02:00
Ole André Vadla Ravnås 287d211bb8 init: Only assign runtime inside once-init guard
Assigning runtime unconditionally meant a later frida_init() call
would clobber the runtime chosen by an earlier
frida_init_with_runtime(). E.g. an app can now select a runtime
before a language binding calls frida_init().
2026-04-07 12:26:03 +02:00
Ole André Vadla Ravnås a6bb4c536f subprojects: Bump outdated 2026-04-06 15:36:53 +02:00
Ole André Vadla Ravnås e7562fcf69 submodules: Bump releng 2026-04-06 15:36:52 +02:00
Ole André Vadla Ravnås 873f5cae3d docs: Add distro packaging instructions
Document the shared library build workflow and list
prerequisites for Fedora and Ubuntu.
2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås d841b5ea8d claude-md: Add code style section 2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås 3d37dfe966 Support upstream GLib and system dependencies
Guard Frida GLib fork APIs (glib_init, gio_init,
g_thread_set_garbage_handler, etc.) with HAVE_FRIDA_GLIB.
Guard libsoup back-pressure APIs with a feature check.

Support ngtcp2_crypto_ossl as alternative to the quictls
variant, with the correct API (configure_client_session
on SSL instead of configure_client_context on SSLContext).

Dynamically resolve gioopenssl symbols when not
statically linked, throwing NOT_SUPPORTED if the GIO
OpenSSL backend is unavailable.
2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås c178aee655 compat: Build agent via SDK with upstream GLib
When glib_flavor is "upstream", add a native-arch output
group for agent and gadget, force default_library=static,
and allow all prebuilds so the SDK is downloaded even if
the top-level build excluded it.
2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås 46d1b6be32 api: Generate symbol maps and refactor args
Add symbol-maps output mode that generates a version
script and symbols file exporting frida_* and _frida_*
while hiding all other symbols. Refactor argument
parsing so that output_dir is the first positional arg
and the remaining args are mode-specific.
2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås 6927214f6e build: Add distro packaging support
Detect shared vs static GLib, skip gioopenssl when
using a shared GLib (system GLib already has GIO TLS
support via glib-networking), produce a versioned
shared library with soversion when building shared,
generate typelib via g-ir-compiler when available, and
adjust pkg-config and dependency declarations for the
shared case.
2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås 94a9aec68d api: Include class records in GIR
The generated GIR was missing record elements for GType class structs
(e.g. DeviceManagerClass), which caused g-ir-compiler to fail with
"type reference not found" errors when compiling the typelib.
2026-04-06 15:31:11 +02:00
Ole André Vadla Ravnås 4d82b7e98b Add CLAUDE.md 2026-04-05 23:08:27 +02:00
Ole André Vadla Ravnås a62376a3d6 subprojects: Prepare for release 2026-03-27 11:36:34 +01:00
Ole André Vadla Ravnås f5803e76ca subprojects: Bump outdated 2026-03-27 11:34:53 +01:00
Ole André Vadla Ravnås 3b052905d7 package-manager: Fix semver pre-release overflow
Numeric pre-release identifiers like "202508252028" would
fail validation because parse_uint() rejects values beyond
UINT32_MAX. The same overflow affected version comparison,
which also used uint.

Fix validation to only check the semver-mandated rule that
numeric identifiers must not have leading zeros, and fix
comparison to use length-prefixed string comparison, which
handles arbitrarily large numeric identifiers correctly.
2026-03-27 11:32:50 +01:00
Ole André Vadla Ravnås c3864a15a1 subprojects: Prepare for release 2026-03-26 20:43:41 +01:00
Ole André Vadla Ravnås b49aac0765 subprojects: Bump outdated 2026-03-26 20:42:39 +01:00
Ole André Vadla Ravnås 1f77154b83 fruity: Add control-endpoint backend option
Default is `tcp:27042`. Only TCP endpoints are supported.
2026-03-26 20:26:02 +01:00
Ole André Vadla Ravnås d2f2c400dc droidy: Add control-endpoint backend option
Default is `tcp:27042`, but may be set to any endpoint supported by ADB,
such as `localabstract:/my-frida-server`.
2026-03-26 20:26:02 +01:00
Ole André Vadla Ravnås 3df058764b device: Add override_option()
Allow callers to override backend-specific options when creating
a host session.

Overrides take effect when establishing a host session. If a host
session already exists, updated values are applied on the next
connection.

Inspired-by: @giantpune
2026-03-26 20:25:33 +01:00
Ole André Vadla Ravnås f962931617 host-session-options: Add copy() 2026-03-26 20:06:47 +01:00
Ole André Vadla Ravnås be23998210 android: Skip 32-bit helper on 64-bit only systems
Do not waste time trying to spawn it.
2026-03-26 15:24:53 +01:00
Ole André Vadla Ravnås 0bee9cba2b linux: Support injection into group-stopped PIDs 2026-03-26 15:24:53 +01:00
NSEchoandOle André Vadla Ravnås 465698a907 linux: Add eBPF-based spawn gater implementation
Co-authored-by: Ole André Vadla Ravnås <[email protected]>
2026-03-26 15:24:53 +01:00
Ole André Vadla Ravnås 4e5a60a576 subprojects: Prepare for release 2026-03-24 15:40:37 +01:00
Ole André Vadla Ravnås aaa66bbafd subprojects: Bump outdated 2026-03-24 15:39:15 +01:00
Soumik Sarkhel 1dc4435f96 android: Modify RTLD path if dlopen(libart) fails 2026-03-24 15:38:14 +01:00
Ole André Vadla Ravnås ac9f8cac5f fruity: Fix TcpTunnelConnection stalls
The remotepairingdeviced service may defer CDTunnel TLS records
larger than 8192 bytes until a smaller record arrives, which can
stall sustained tunnel output.

When a large write drains the pending output queue, send a minimal
dummy IPv6 datagram to trigger delivery of deferred data and
improve reliability.

Kudos to @tux-mind for identifying this behavior and helping track
it down.

Fixes #1223.
2026-03-24 14:54:04 +01:00
Francesco Tamagni 0ed112fac1 fruity: Leak injector pages on deallocate fail
On iOS 26.4 `lldb.deallocate()` fails all the time for sandbox issues,
probably it's an iOS bug or a new "security" feature from Apple. This is
a sub-optimal workaround that will change in the future.
2026-03-23 14:08:08 +01:00
Francesco Tamagni 266032d035 fruity: Search restartWithDyldInCache by substring 2026-03-23 14:08:08 +01:00
Ole André Vadla Ravnås 8995f83898 fruity: Handle tunnel lost super-early
E.g. because remotepairingdeviced crashes.
2026-03-22 15:24:16 +01:00
Ole André Vadla Ravnås 680159ef78 fruity: Fix TreeSet comparator dropping transports
Gee.TreeSet treats elements as equal when the comparator returns 0.
Our comparator returned 0 for transports with the same score, causing
later transports to be dropped from the set.

This happens on macOS when a CoreDevice transport appears after usbmux
transports with the same score. Because the comparator reported
equality, the CoreDevice transport was not inserted.

As a result Frida would prefer usbmuxd with lwIP instead of the already
available CoreDevice tunnel.

Fix this by adding a deterministic tie-breaker based on pointer identity
so the comparator only returns 0 for the same instance.

Fixes #1220.
2026-03-16 19:34:40 +01:00
Ole André Vadla Ravnås 71e50bfb9e subprojects: Prepare for release 2026-03-14 11:52:00 +01:00
Ole André Vadla Ravnås 0416b95375 subprojects: Bump outdated 2026-03-14 11:51:19 +01:00
Ole André Vadla Ravnås 6c2f1e6ae3 android: Detect setArgV0() in anonymous memory too
Fixes #1219.
2026-03-14 11:50:01 +01:00
Ole André Vadla Ravnås 04aef7f0c4 subprojects: Prepare for release 2026-03-13 13:22:03 +01:00
Ole André Vadla Ravnås eefce5d860 Revert "linux: Rebuild native helpers for arm and arm64"
This reverts commit 5d015c5e1c.
2026-03-13 13:20:53 +01:00
Ole André Vadla Ravnås beb2c221ec ci: Temporarily skip helpers and labrats checks
Will revisit them post-release.
2026-03-13 13:20:53 +01:00
Ole André Vadla Ravnås 5444842b22 subprojects: Bump outdated 2026-03-13 13:12:01 +01:00
Ole André Vadla Ravnås 5d015c5e1c linux: Rebuild native helpers for arm and arm64
To satisfy CI checks after the Android NDK upgrade.
2026-03-13 13:09:21 +01:00
Ole André Vadla Ravnås f1eaccaecd ci: Fix linux-helpers and labrats checks 2026-03-13 13:06:33 +01:00
Ole André Vadla Ravnås 1be2ed39ba linux: Fix helpers A32 build with Android NDK r29 2026-03-13 12:58:37 +01:00
Ole André Vadla Ravnås e51bf43bc3 android: Handle Chrome's zygote process
So it's invisible to our spawn gating, but its children are gated.
2026-03-13 12:33:38 +01:00
Ole André Vadla Ravnås e2fef93e03 linux: Add missing newline to the nolibc patch 2026-03-13 11:47:54 +01:00
Ole André Vadla Ravnås 9414cfe281 ci: Bump Android NDK to r29 2026-03-13 11:44:58 +01:00
Ole André Vadla Ravnås 74cbc8646f linux: Fix helpers build with Android NDK r29 2026-03-13 11:38:52 +01:00
Ole André Vadla Ravnås 5925eda6b2 libc-shim: Fix stdio buffer allocation order
The stdio shim initialized rcap/wcap after allocating rbuf/wbuf, so
buffered streams ended up with zero-sized allocations.

This caused buffered reads like fdopen(..., "r") + fread() to pass an
invalid buffer to read(), which could fail with EFAULT ("Bad address").
2026-03-13 10:11:48 +01:00
Ole André Vadla Ravnås 686cfcfda8 subprojects: Bump outdated 2026-03-13 00:01:18 +01:00
Ole André Vadla Ravnås 98a4f4f3e6 submodules: Bump releng 2026-03-13 00:01:17 +01:00
Ole André Vadla Ravnås 5b1e77a04c android: Only load in namespace if ART ns exists 2026-03-12 23:59:45 +01:00
Ole André Vadla Ravnås 9a93437b68 meson: Fix linking on modern LLVM toolchains
Modern LLVM/LLD linkers are stricter about undefined symbols in version
scripts. Some of our executable version scripts referenced
FreeBSD-specific symbols (__progname and environ), which older linkers
silently ignored but newer ones reject.

Fix this by providing a FreeBSD-specific version script and selecting it
in Meson when targeting FreeBSD.

Also centralize the linker scripts used for executables that export no
symbols into tools/, and reuse them across targets instead of
duplicating identical files.
2026-03-12 23:58:44 +01:00
Ole André Vadla Ravnås 685526c52c compiler: Add musl-compatible backend mode
The Go toolchain emits TLS relocations that musl only supports for
objects present at program startup. This rules out the integration
strategies based on c-archive and c-shared that we use elsewhere for
the compiler backend.

Introduce a third backend mode where the Go code is built as a PIE
executable and embedded as a resource. At runtime we extract it to a
temporary file and spawn it as a long-lived helper process. Requests
and events are exchanged over a simple length-prefixed JSON protocol.

This keeps the existing in-process integration on platforms where
c-archive or c-shared works, while providing a musl-compatible backend
strategy.

Implementation details:

  - Add a new executable backend mode selected automatically when the
    target libc is musl.
  - Extend the Meson detection logic to propagate libc and choose
    between archive, shared, or executable backends.
  - Split the Go frontend into two implementations selected by build
    tags: one exposing the C API and one implementing the stdio
    protocol used by the executable mode.
  - Introduce a BackendProcess implementation on the Vala side that
    manages a persistent backend subprocess and multiplexes build and
    watch requests.

This makes it possible to support the compiler backend on musl without
depending on Go integration modes that conflict with musl's TLS model,
which would preclude loading frida-core as a plugin or after the
initial exec.
2026-03-12 14:39:30 +01:00
Ole André Vadla Ravnås 326dd071e7 Revert "compiler: Fix crash on startup on musl"
This only gets us partway there. The Go toolchain emits initial-exec TLS
relocations (e.g. for runtime.tls_g), which musl only supports for objects
present at program startup.

frida-core may also be loaded via dlopen(), and musl rejects such objects
when they contain initial-exec TLS relocations:

```
initial-exec TLS resolves to dynamic definition
```

This is a separate issue from the constructor crash fixed by the
reverted commit.

This reverts commit e096c363e0.
2026-03-11 19:40:38 +01:00
Ole André Vadla Ravnås e096c363e0 compiler: Fix crash on startup on musl
The Go runtime assumes that constructor functions are called with argc
and argv. This is the case with glibc's RTLD, but not musl's. So to work
around this we modify go.o to remove its initializer from .init_array,
and instead call it manually, so we can pass it argc and argv.
2026-03-10 12:32:18 +00:00
Ole André Vadla Ravnås b588219d80 linux: Improve the process enumeration UID logic
- Handle sysconf(_SC_GETPW_R_SIZE_MAX) failing or returning
  "indeterminate".
- Retry with a larger buffer size if getpwuid_r() returns ERANGE.
- Do not fall back to stringifying the UID as the `user` parameter.
- Add a `uid` parameter that is always present.
2026-03-10 10:57:43 +00:00
Ole André Vadla Ravnås 9b567080e9 libc-shim: Fix setbuffer signature on glibc + musl 2026-03-10 09:36:02 +00:00
Ole André Vadla Ravnås e2580ce294 libc-shim: Plug some more holes in the stdio API
Add implementations for a few remaining BSD stdio entry-points:

- setbuf() and __srget() (currently referenced on Darwin)
- setlinebuf() and setbuffer()
2026-03-10 10:16:51 +01:00
Ole André Vadla Ravnås 1bdf9a2fd3 android: Implement sigchain logic when needed 2026-03-09 11:41:15 +01:00
Ole André Vadla Ravnås d5d500be3a subprojects: Prepare for release 2026-03-08 20:35:38 +01:00
Ole André Vadla Ravnås 6a1aa42685 subprojects: Bump outdated 2026-03-08 19:44:01 +01:00
Ole André Vadla Ravnås 2f75c98c0c syscall-tracer: Make eBPF more verifier-friendly 2026-03-08 18:50:15 +01:00
Ole André Vadla Ravnås c50c6cc6dc linux: Bump BpfObject log buffer size to 128 KiB 2026-03-08 18:49:33 +01:00
Ole André Vadla Ravnås 34742d09c3 android: Use in-process helper everywhere
Even as far back as API level 19.
2026-03-08 17:24:05 +01:00
Ole André Vadla Ravnås b08453341d atomics: Fix -Watomic-alignment warnings
Clang may warn that 64-bit atomic operations are misaligned when guint64
only has 4-byte alignment on the target ABI.

Use an explicitly 8-byte aligned typedef for the atomic helpers and
update the Vala bindings to use typed pointers instead of void *.
2026-03-08 17:05:51 +01:00
Ole André Vadla Ravnås cd9c2183ce android: Support in-process helper on Nougat
And potentially even older OSes.

This brings us another step closer to using in-process everywhere.
2026-03-08 12:27:48 +01:00
Ole André Vadla Ravnås 35bb528992 android: Fix in-process helper on older ARTs
Where ART expects the main executable to export certain symbols. We work
around this by replacing the crashing stubs with a function that does
nothing.
2026-03-08 11:21:16 +01:00
Ole André Vadla Ravnås e3a4a031f8 tests: Fix the icon width/height checks 2026-03-08 00:13:06 +01:00
Ole André Vadla Ravnås e9083013a8 subprojects: Bump outdated 2026-03-07 23:51:36 +01:00
Ole André Vadla Ravnås 1105d0d45d droidy: Port to the new AndroidHelperClient API 2026-03-07 23:45:37 +01:00
Ole André Vadla Ravnås 0f5153a5d0 compiler: Bump @types/frida-gum to 19.0.2 2026-03-07 23:37:23 +01:00
Ole André Vadla Ravnås 23f288c5e5 android: Run android-helper in-process if possible
We only try to do this on modern systems, as older versions of ART
require the main executable to export certain symbols. That precludes
usage in scenarios where frida-core is embedded, e.g. like in r2frida.
2026-03-07 22:36:48 +01:00
Ole André Vadla Ravnås e25b4debac base: Add missing G_{BEGIN,END}_DECLS to headers 2026-03-07 21:54:55 +01:00
Ole André Vadla Ravnås e5e3033415 libc-shim: Omit fseeko64 and ftello64 on QNX
They're implicitly defined.
2026-03-03 21:50:37 +01:00
Ole André Vadla Ravnås 719c0c1161 meson: Ensure libc is defined for non-Linux too 2026-03-03 21:36:48 +01:00
Dep c899e04a9c android-helper: Fix crash on Transsion ROMs
Fix a NullPointerException when the android-helper initializes on
Infinix and other Transsion OS devices.

Their modified ActivityThread expects a fully initialized main
looper. Using Looper.prepare() causes a crash in android.os.Handler
before initialization completes.

Use Looper.prepareMainLooper() instead so the expected main looper
is available.

Verified on a rooted Infinix device by compiling the .dex and
running it via app_process.
2026-03-03 21:33:33 +01:00
Alexander Hude 575161cad7 darwin: Fix early instrumentation on iOS 26.4
In iOS 26.4, Apple changed the signature of restartWithDyldInCache,
which broke the existing detection logic.

Generalize the logic instead of relying on another specific symbol.
2026-03-03 21:26:43 +01:00
Ole André Vadla Ravnås a05633f683 linux: Fix the helpers host_machine auto-detection 2026-03-03 21:23:07 +01:00
Ole André Vadla Ravnås 6053f4eb84 linux: Update helpers/rebuild.sh to match Makefile 2026-03-03 21:22:28 +01:00
Ole André Vadla Ravnås 0753bcf4b8 gadget: Only use versioned stdio symbols on glibc 2026-03-03 21:14:18 +01:00
Ole André Vadla Ravnås a66dff2d71 agent: Only use versioned stdio symbols on glibc 2026-03-03 21:13:43 +01:00
Ole André Vadla Ravnås f0fd7aef7b libc-shim: Plug some more holes in the stdio API
- fseeko, fseeko64
- ftello, ftello64
2026-03-03 19:36:42 +01:00
Ole André Vadla Ravnås 41e02684f3 libc-shim: Version fopen/fopen64 for libstdc++
Static libstdc++ introduces references to fopen@GLIBC_2.2.5 and
fopen64@GLIBC_2.2.5.

Provide matching versioned symbols from the libc shim and define a
GLIBC_2.2.5 node in the embedding version scripts so these bind to the
shim instead of glibc in both agent and gadget.
2026-03-03 19:11:27 +01:00
Ole André Vadla Ravnås 3f251baaa2 libc-shim: Plug some more holes in the stdio API
- getwc, fgetwc, ungetwc
- putc, putwc, fputwc
2026-03-03 15:39:26 +01:00
Ole André Vadla Ravnås 066f2dd718 libc-shim: Skip deinit unless explicitly requested
When the process exits and runs destructor functions, there is no
need to clean up these resources.

Previously this could cause undefined behavior because higher-level
subsystems had not been torn down first, e.g. threads still running
when GThread was torn down. Skipping deinit in this case avoids
teardown-time undefined behavior.
2026-03-03 14:48:40 +01:00
Ole André Vadla Ravnås 1fa296e285 linux: Move to latest syscall-trace protocol
- Use a uint64 for the thread ID. Move it before PID for better packing.
- Support including a module UUID and version string. Not yet wired up
  in the Linux backend.
- Support excluding specific syscalls.

This is to align with the tweaks made for the Fruity implementation.
2026-03-02 15:12:32 +01:00
Ole André Vadla Ravnås 9a4b6ac14d linux: Add uint64 key helpers to BpfMap 2026-03-02 15:12:31 +01:00
Ole André Vadla RavnåsandHåvard Sørbø c23ab3e2c9 fruity: Implement syscall-trace service
Wire up a syscall tracing service on top of CoreProfile ktrace/kdebug.

Configure the ktrace tap to emit syscall entry and exit events and
decode them using the XNU syscall signatures.

Detect syscalls with filesystem path arguments and correlate them with
VFS activity to reconstruct the contents of userspace string pointers
passed to the kernel.

Stitch in callstack events and provide symbolication by leveraging
query_symbolicator_signature().

Stream decoded events to consumer and manage lifecycle, including start,
stop, and cleanup on termination.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-03-02 15:12:30 +01:00
Ole André Vadla Ravnås a6701b2fc9 base: Add XNU syscall enums and signatures
Introduce enums and signature metadata for XNU syscalls.

Define syscall numbers, names, and argument layouts to enable decoding
of ktrace/kdebug events.

Provide a foundation for higher-level tracing and analysis.
2026-03-02 15:02:57 +01:00
Ole André Vadla RavnåsandHåvard Sørbø f810946569 dtx: Introduce CoreProfileService
Provide access to CoreProfile via DTX with initial support for
ktrace/kdebug collection through a TapConfig abstraction.

Add KtraceConfig as the first tap type, modelling a subset of available
flags and filters.

Allow additional tap types and broader configuration to be introduced
later.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-03-02 15:02:57 +01:00
Ole André Vadla Ravnås 5cac7c0c6e dtx: Add per-PID symbolicator signature query
Extend DeviceInfoService with support for retrieving the symbolicator
signature for a specific process.

The returned data describes the process' loaded images, including UUIDs,
segment layouts, load addresses, and versions from each image's
Info.plist. Symbols themselves are not included.

Parse the response into structured types to simplify matching against
crash logs and trace data.
2026-03-02 15:02:57 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 65c694a66d fruity: Support spawning non-debuggable apps
As these cannot be launched suspended through LLDB, fall back to
ProcessControlService and send SIGSTOP immediately after launch.

Ensure the app is not already running before spawning, as relying on
ExistingInstancePolicy.KILL may leave it in an inconsistent state.

Track launched PIDs and resume them by sending SIGCONT when requested.
Clean up tracking when the process terminates.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-03-02 15:02:57 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 13bfcaf1a4 dtx: Extend ProcessControlService process control
Extend ProcessControlService with additional capabilities exposed by
Instruments' processcontrol endpoint.

This adds support for:

- Resolving PID from bundle identifier
- Checking whether a PID is debuggable
- Launching apps with arguments and environment
- Sending signals to a process
- Observing process termination events

Introduce LaunchOptions to control launch behavior such as suspended
start and handling of existing instances.

Expose termination notifications via a new process_terminated signal.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-03-02 15:02:57 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 8f83d5c269 dtx: Lift buffering restrictions
Turned out to be too conservative. And it's hard to decide on
appropriate limits when dealing with bulk data use-cases.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-03-02 15:02:57 +01:00
Ole André Vadla Ravnås b12c30078a dtx: Handle incoming nil arguments 2026-03-02 14:14:22 +01:00
Ole André Vadla Ravnås c7669b9701 numeric: Add bytes_hash() and bytes_equal() 2026-02-24 10:43:40 +01:00
Ole André Vadla Ravnås 5096dbfac4 linux: Fix a stylistic inconsistency 2026-02-23 20:24:45 +01:00
Ole André Vadla Ravnås 9c16fa16fb marshal: Avoid null dereference in enum_to_nick()
Return a formatted fallback string when the enum value is unknown.
2026-02-22 20:20:58 +01:00
Ole André Vadla Ravnås 966f609906 buffer: Make recyclable; add peek + align
Allow Buffer to be reset from either Bytes or an unowned uint8[] without
allocating intermediate Bytes objects.

Extend BufferReader with peeking and alignment helpers and make both
classes reusable through reset() semantics.

This enables zero-allocation parsing in hot paths such as kcdata
stackshot processing.
2026-02-22 15:30:25 +01:00
Ole André Vadla Ravnås 889576e1d5 linux: Simplify build_signatures_variant()
The null-check was a leftover from the older API.
2026-02-21 15:29:38 +01:00
Ole André Vadla Ravnås bb9d9bc6a8 linux: Use int32 for syscall numbers
For consistency with Darwin.
2026-02-21 15:29:34 +01:00
Ole André Vadla Ravnås fc2e14a7cf linux: Simplify the syscall event variant logic 2026-02-21 11:31:00 +01:00
Ole André Vadla Ravnås 868166c23a buffer: Add BufferReader.seek() 2026-02-20 22:19:09 +01:00
Ole André Vadla Ravnås 4d7a0464fb dns: Avoid allocating Bytes object needlessly 2026-02-20 12:42:43 +01:00
Ole André Vadla Ravnås 150e4425ed buffer: Add read_data() to Buffer and BufferReader
To access the raw data without having to allocate a new Bytes object.
2026-02-20 12:39:45 +01:00
Ole André Vadla Ravnås 6bbef7880f buffer: Make read_bytes() zero-copy 2026-02-20 12:39:45 +01:00
Ole André Vadla Ravnås 963a8de514 buffer: Optimize read_fixed_string()
We can't avoid copying, but at least don't waste time on UTF-8
validation. This should be done at the higher level.
2026-02-20 12:39:45 +01:00
Ole André Vadla Ravnås fdb0eebb5e buffer: Optimize read_string()
- Do not copy. The caller should make a copy if the string needs to
  outlive the Buffer/BufferReader.
- Do not validate. This should be done at the higher level.
2026-02-20 12:39:44 +01:00
Ole André Vadla Ravnås ea26ae84b7 subprojects: Bump outdated 2026-02-18 22:53:56 +01:00
Ole André Vadla Ravnås 69016b9d5b submodules: Bump releng 2026-02-18 22:53:55 +01:00
03afdb072a websocket: Pause libsoup input to avoid starvation
Co-authored-by: Håvard Sørbø <[email protected]>
Co-authored-by: Ole André Vadla Ravnås <[email protected]>
2026-02-18 22:52:39 +01:00
bf0830c1a2 network-stack: Handle incoming datagrams async
Incoming datagram delivery previously blocked while waiting for lwIP
thread work to complete.

Switch handle_incoming_datagrams() to an async API and schedule the
processing on the lwIP thread without joining immediately.

Use this to pace callers so they don't monopolize the GLib.MainContext
when floods of datagrams are coming in.

Co-authored-by: Håvard Sørbø <[email protected]>
Co-authored-by: Ole André Vadla Ravnås <[email protected]>
2026-02-18 22:52:39 +01:00
Kerbiter 4aac1ae324 compat: Include x86_64 in Windows x86 builds 2026-02-18 22:28:31 +01:00
Ole André Vadla Ravnås e74d51dd13 keyed-archive: Make to_string() prettier 2026-02-18 01:07:43 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 984413c057 keyed-archive: Improve to_string() support
Intended for debugging during development.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-02-17 23:55:02 +01:00
Ole André Vadla RavnåsandHåvard Sørbø ed78ab19d7 keyed-archive: Support NSSet
Only encoding for now.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-02-17 23:54:57 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 5b877cbbff dtx: Upgrade protocol handling
- Rename DTXMessageType.INVOKE to DISPATCH.
- Rename DTXMessageType.RESULT to OBJECT.
- Fix channel code and is_notification logic.
- Add missing message types.
- Support data messages.
- Do not advertise compression support. We don't support it yet.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-02-17 23:54:54 +01:00
Ole André Vadla Ravnås 3f3457b249 subprojects: Prepare for release 2026-02-16 22:45:39 +01:00
Ole André Vadla Ravnås f1c0e87871 subprojects: Bump outdated 2026-02-16 22:08:06 +01:00
Ole André Vadla Ravnås 6096046b05 syscall-tracer: Decode timespec values
Recognize timespec pointer arguments and decode them into structured
values rather than emitting opaque byte arrays.

Supports both __kernel_timespec and old_timespec32 layouts.
2026-02-16 21:27:26 +01:00
Ole André Vadla Ravnås c0815c4d1a syscall-tracer: Fix a stylistic inconsistency 2026-02-16 21:24:05 +01:00
Ole André Vadla Ravnås ab42fcb1ed syscall-tracer: Remove a redundant check 2026-02-16 21:23:52 +01:00
Ole André Vadla Ravnås cd0a327a3c syscall-tracer: Fix raw attachment lifetime
The GVariant was previously created from data freed before return,
leaving it with a dangling pointer.
2026-02-16 21:01:17 +01:00
Ole André Vadla Ravnås 51ff27a08b syscall-tracer: Fix multi-attachment parsing
Fix parsing of multiple attachments by encoding how much space is
reserved for each attachment.
2026-02-16 20:56:54 +01:00
Ole André Vadla Ravnås 6b54eeb7d8 subprojects: Prepare for release 2026-02-14 10:52:09 +01:00
Ole André Vadla Ravnås 08de3d3d07 subprojects: Bump outdated 2026-02-14 10:50:25 +01:00
Ole André Vadla Ravnås 174b93cbd4 xpc-service: Drop support for redundant casts 2026-02-14 10:44:29 +01:00
Ole André Vadla Ravnås d0f8162a65 android: Fix a stylistic inconsistency 2026-02-13 22:53:59 +01:00
Ole André Vadla Ravnås a3427baeb3 subprojects: Prepare for release 2026-02-13 22:48:30 +01:00
Ole André Vadla Ravnås c792a09002 subprojects: Bump outdated 2026-02-13 22:47:31 +01:00
Ole André Vadla Ravnås 27605f7fde android: Defer spawn completion until setArgV0()
Only record the package name in selinux_android_setcontext(), and delay
contacting RoboLauncher until setArgV0(). This ensures ART is ready so
frida-java-bridge can attach to the VM.

Also refactor Zymbiote code and improve naming.
2026-02-13 22:46:03 +01:00
Ole André Vadla Ravnås ba8784fe8c subprojects: Prepare for release 2026-02-13 15:12:30 +01:00
Ole André Vadla Ravnås 0a6c2103fa subprojects: Bump outdated 2026-02-13 15:09:43 +01:00
Ole André Vadla Ravnås 14de0ef567 android: Fix spawn package name logic on new OSes
Where we should be hooking selinux_android_setcontext() to infer it,
like we used to.
2026-02-13 14:39:22 +01:00
Ole André Vadla Ravnås 4165572919 linux: Avoid repeated /proc/pid/maps parsing
By folding the ProcMapsSoEntry functionality into ProcMapsSnapshot.
2026-02-13 14:39:17 +01:00
Ole André Vadla Ravnås 690d7005fa syscall-tracer: Capture more structured args
Log non-primitive in/out syscall arguments for a broader set of calls.

This extends the eBPF tracer to attach common structured arguments
(strings, paths, timespec/stat buffers, and socket addresses) on enter
and exit, including multi-argument cases like two-path operations and
mount(2) (source/target/fstype).

Userspace decoding is now guided by syscall signature arg types (e.g.
only attempt sockaddr parsing for "struct sockaddr *"), reducing
per-syscall special-casing.
2026-02-12 20:44:54 +01:00
Ole André Vadla Ravnås b68585027b syscall-tracer: Expose ABI and track file mappings
Also clamp arguments based on signatures.
2026-02-12 15:54:04 +01:00
Ole André Vadla Ravnås eb457fddba meson: Add libbpf to the toplevel deps and reqs 2026-02-12 14:18:06 +01:00
Ole André Vadla Ravnås e9c1ead852 linux: Omit trailing newline from eBPF kernel log 2026-02-09 22:21:24 +01:00
Ole André Vadla Ravnås e2826c9d38 subprojects: Bump outdated 2026-02-07 21:19:39 +01:00
Ole André Vadla Ravnås 66c517b76a linux: Fix syscall-trace signatures response 2026-02-07 21:15:07 +01:00
Ole André Vadla Ravnås 3b05c631f9 linux: Migrate to libbpf
So we can start using BTF relocations, for true CO-RE.
2026-02-07 21:12:48 +01:00
Ole André Vadla Ravnås 3ae919fb97 api: Fix .gir filtering
Apparently AgentMessageSink either ends up in Frida or FridaBase,
depending on the build environment. Hmm. Rabbit hole for another day.
2026-02-07 13:34:16 +01:00
Ole André Vadla Ravnås bbe4872c73 Revert "api: Fix a .gir filtering regression"
Makes no sense that this would change namespace.

This reverts commit 01665c9e1a.
2026-02-06 23:35:27 +01:00
Ole André Vadla Ravnås f114e92502 linux: Add SyscallTracer and ActivitySampler
Only SyscallTracer is exposed for now. It is exposed as a Service.
2026-02-06 14:00:48 +01:00
Ole André Vadla Ravnås de03a755b1 linux: Add API for retrieving syscall signatures 2026-02-06 14:00:41 +01:00
Ole André Vadla Ravnås b62d5f9f83 linux: Add Bpf.PercpuArrayMap.foreach_value() 2026-01-29 16:46:05 +01:00
Ole André Vadla Ravnås 67d9423e90 icons: Use uint16 for width and height
Both as it makes more sense than int64, and so these don't end up as
BigInt values in frida-node.
2026-01-29 12:13:00 +01:00
Ole André Vadla Ravnås 06a28acc76 macos: Omit width and height for PNG icons 2026-01-29 12:12:52 +01:00
Ole André Vadla Ravnås 144ec84483 api: Omit the new Bpf.RingbufReader enum names 2026-01-28 23:29:31 +01:00
Ole André Vadla Ravnås 623531a385 linux: Improve the Bpf.RingbufReader.drain() API
- Let the caller know whether it got fully drained.
- Rename DrainResult to RecordAction.
2026-01-28 22:20:46 +01:00
Ole André Vadla Ravnås f365831c05 droidy: Support consuming remote services 2026-01-27 15:24:09 +01:00
Ole André Vadla Ravnås e5efd8ba89 local-host-session: Support implementing services 2026-01-27 15:24:09 +01:00
Ole André Vadla Ravnås 01665c9e1a api: Fix a .gir filtering regression
Due to AgentMessageSink now being in the Frida namespace.
2026-01-27 15:23:34 +01:00
Ole André Vadla Ravnås 944c7acaec api: Omit the internal DrainResult enum 2026-01-27 14:42:42 +01:00
Ole André Vadla Ravnås 9a3ee39e78 linux: Add Bpf.RingbufReader drain stop support 2026-01-27 13:59:02 +01:00
Ole André Vadla Ravnås 97cf8dc68d linux: Add Bpf.HashMap.remove() 2026-01-27 13:58:57 +01:00
Ole André Vadla Ravnås 09cab2e08c linux: Fix some stylistic inconsistencies 2026-01-27 13:58:50 +01:00
Ole André Vadla RavnåsandHåvard Sørbø e4372b42f3 linux-syscalls: Emit .h with preprocessor defines
Instead of enum values. In this way we can check for syscall
availability at the preprocessor level.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-01-26 19:30:25 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 52b93ce299 linux: Add Bpf.HashMap
Co-authored-by: Håvard Sørbø <[email protected]>
2026-01-26 19:30:19 +01:00
Ole André Vadla Ravnås 58d3bd1251 linux-syscalls: Support --abi=armbe 2026-01-26 17:49:45 +01:00
Ole André Vadla Ravnås c4c101972e linux-syscalls: Refactor generate-bindings.py
To remove an unused function and fix a stylistic inconsistency.
2026-01-26 17:49:41 +01:00
Ole André Vadla Ravnås 8463e7514f linux: Improve the Bpf.RingbufReader API 2026-01-26 17:49:34 +01:00
Ole André Vadla Ravnås dd06ba6c54 linux: Improve the Bpf.StackTraceMap API 2026-01-26 17:49:29 +01:00
Ole André Vadla Ravnås 542c7a4014 linux: Add Bpf.PercpuArrayMap 2026-01-26 17:49:24 +01:00
Ole André Vadla Ravnås ea16ec8ea7 linux: Improve eBPF relocation error message 2026-01-26 17:49:20 +01:00
Ole André Vadla Ravnås d7a866af47 linux: Re-organize helper artifacts 2026-01-26 01:49:43 +01:00
Ole André Vadla Ravnås 3686e0e5c3 base: Improve the linux-syscalls autogen
- Move capabilities logic into the generator.
- Support C header output.
- Support remaining ABIs.
2026-01-26 01:48:32 +01:00
Ole André Vadla Ravnås 9d91e52490 base: Add auto-generated LinuxSyscall enum 2026-01-25 21:50:26 +01:00
Ole André Vadla Ravnås f055550e38 linux: Add eBPF and perf_event_open() helpers 2026-01-25 01:03:32 +01:00
Ole André Vadla Ravnås 8c62357b94 subprojects: Prepare for release 2026-01-23 22:31:22 +01:00
Ole André Vadla Ravnås af43551888 subprojects: Bump outdated 2026-01-23 22:30:22 +01:00
Francesco Tamagni f332bddbfc fruity: Fix PortableCoreDevice flush infinite loop (#1207)
By reviving the call to `handle_events_completed` during FLUSHING state,
so that `pending_usb_ops` can get emptied eventually.
2026-01-23 22:29:05 +01:00
NSEcho e1bb883ba0 compiler: Rename conflictful Go symbols (#1205) 2026-01-23 12:40:11 +01:00
Ole André Vadla Ravnås a341cd1292 compiler: Load backend through memfd with fallback
So we retain the benefits of avoiding temporary files when possible.
2026-01-22 15:18:48 +01:00
Ole André Vadla Ravnås 70881a4e40 linux: Fix system session when memfd is restricted
Observed to happen in the Termux environment on Android.
2026-01-22 14:31:19 +01:00
Ole André Vadla Ravnås e0cae3fded subprojects: Prepare for release 2026-01-20 23:12:46 +01:00
Ole André Vadla Ravnås ff28ff33d9 subprojects: Bump outdated 2026-01-20 23:09:17 +01:00
Ole André Vadla Ravnås d072d48dfa subprojects: Bump outdated 2026-01-20 20:26:34 +01:00
Ole André Vadla Ravnås d8557b2c86 submodules: Bump releng 2026-01-20 20:26:34 +01:00
Ole André Vadla Ravnås de8a63b1f3 subprojects: Bump outdated 2026-01-20 18:54:21 +01:00
Ole André Vadla Ravnås 0f53d1b2ee submodules: Bump releng 2026-01-20 18:54:20 +01:00
Ole André Vadla Ravnås a638218794 compiler: Fix loading of backend on Android
The memfd path would typically fail because we were trying to open the
same underlying file with more restrictive permissions.

Avoid this and simplify things by using a temporary file even on systems
where memfd is supported.
2026-01-20 18:48:41 +01:00
Ole André Vadla Ravnås 5ea6e8507a file-descriptor: Add pwrite_all() 2026-01-20 18:45:16 +01:00
Ole André Vadla Ravnås 0ef2a0859b file-descriptor: Fix a stylistic inconsistency 2026-01-20 18:45:06 +01:00
Ole André Vadla Ravnås 01af5b3041 android: Place zymbiote payload on a better range
Picking a range not used by Zygote. The forked app/service might use it,
but by then we will have reverted it.
2026-01-20 13:02:54 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 3df3834f17 android: Fix zymbiote payload on BTI systems
The zymbiote payload must be built with BTI enabled on arm64, otherwise
indirect branches into it will fault.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-01-20 01:12:56 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 31d11965e0 linux: Fix alignment in the helper linker script
Ensure .payload is 4 KiB–aligned to match ADRP page semantics on arm64.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-01-20 01:10:06 +01:00
Ole André Vadla Ravnås 2e705e3f44 subprojects: Prepare for release 2026-01-17 08:43:29 +01:00
Ole André Vadla Ravnås 13c3e00be3 subprojects: Bump outdated 2026-01-17 00:24:19 +01:00
Ole André Vadla Ravnås 90164ccf7a subprojects: Bump outdated 2026-01-16 15:31:46 +01:00
Ole André Vadla Ravnås 3f9159e80a libc-shim: Revive FreeBSD support 2026-01-16 12:58:13 +00:00
Ole André Vadla Ravnås d4ca46a213 subprojects: Bump outdated 2026-01-16 13:44:36 +01:00
Ole André Vadla Ravnås 126ab29dce submodules: Bump releng 2026-01-16 13:44:36 +01:00
Ole André Vadla Ravnås 5104b0d08e libc-shim: Fix portability regressions
- Make stdio handling compatible with musl by treating FILE as
  opaque and fixing stdin/stdout/stderr definitions.
- Improve Linux compatibility.
- Add Darwin dirent shim.
- Fix MSVC support.
2026-01-16 13:34:11 +01:00
Ole André Vadla Ravnås 55c8bcb8ec fruity: Fix USB startup/shutdown race
Fix a race where stopping shortly after startup could leave the USB
worker blocked inside libusb_handle_events_completed().

Restructure the USB event loop to observe state transitions before
entering blocking libusb calls, ensuring FLUSHING and STOPPING are
handled deterministically.

Make initial USB enumeration during startup robust by gating completion
on a startup barrier and tracking in-flight arrivals, deduplicated by
device ID. This accounts for libusb HOTPLUG_ENUMERATE semantics where
arrival callbacks may be duplicated or delayed.

Together these changes ensure startup only completes once all initially
present devices are known, and shutdown cannot deadlock the USB thread.
2026-01-16 10:47:21 +01:00
Ole André Vadla Ravnås 4fbfae9b92 subprojects: Bump outdated 2026-01-15 18:07:56 +01:00
Ole André Vadla Ravnås 4d1e9f1113 submodules: Bump releng 2026-01-15 18:07:56 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 3e778a99c0 android: Move to light-weight Zygote hooking
Instead of injecting an internal agent into the Zygote/USAP processes
and using child gating, rethink this completely:

1. Write a tiny payload into a code region through /proc/$pid/mem.
2. Patch the ArtMethod of android.os.Process.setArgV0Native() so it
   jumps to the payload.
3. The payload acts as a proxy, chaining to the original setArgV0Native.
4. It also makes a UNIX socket connection back to frida-core, giving it
   a chance to instrument it.

Co-authored-by: Håvard Sørbø <[email protected]>
2026-01-15 18:06:05 +01:00
Ole André Vadla Ravnås 2d2a944d8e file-descriptor: Add pread{,_all}() and pwrite() 2026-01-15 18:06:00 +01:00
Ole André Vadla Ravnås 0ba8b05fef linux: Fix the WaitResult constructor
Early returns from a struct constructor results in the Vala compiler
generating invalid C code. We'll just avoid this pattern for now.
2026-01-15 18:05:56 +01:00
Ole André Vadla Ravnås 783626e8fb android: Ignore noisy frida-helper.dex warnings
Coming from the dynamic linker on older Android OSes.
2026-01-15 12:53:39 +01:00
Ole André Vadla Ravnås 7399cc1092 android: Improve frida-helper.dex Android compat
- Support Android OS versions as far back as 4.4.
- Improve get_frontmost_application() to support a wider range of
  versions, not just Android >= 10.
2026-01-15 12:53:34 +01:00
Ole André Vadla Ravnås cefa0d0567 libc-shim: Improve stylistic consistency 2026-01-15 12:02:13 +01:00
Ole André Vadla Ravnås 0824ee85d9 libc-shim: Fix Android SELinux getline() UB
Fix a long-standing heap corruption/UB on Android caused by the SELinux
userspace library running a constructor that calls getline() and then
free().

Only free() went through our libc shim, while getline() allocated using
libc's heap, so the pointer was freed by the wrong allocator.

Add a minimal stdio shim (including getline()/getdelim()) and related
FILE*/__sF handling so allocations stay on the shim heap and are cleaned
up correctly.
2026-01-15 01:24:32 +01:00
Ole André Vadla Ravnås bea37618d1 android: Fix app spawn() on older Android versions 2026-01-13 22:45:36 +01:00
Ole André Vadla Ravnås cae7be99f8 meson: Fix Android dirty build from backend output 2026-01-11 14:21:56 +01:00
Ole André Vadla Ravnås 4406c8d146 android: Unlink frida-helper.dex on early error 2026-01-11 14:21:56 +01:00
Ole André Vadla Ravnås c89190e4f6 android: Explicitly set frida-helper.dex file mode 2026-01-11 14:21:56 +01:00
Ole André Vadla Ravnås dd68e84217 android: Improve frida-helper.dex spawn logic
- Include stderr and logcat output when unable to spawn.
- Process stdout and stderr. There shouldn't be any output on either,
  so if there is we definitely want to see it. This also makes it easier
  to add temporary logging to the helper.
2026-01-11 14:21:56 +01:00
Ole André Vadla Ravnås dc56b2eb16 subprojects: Bump outdated 2026-01-11 00:48:04 +01:00
Ole André Vadla Ravnås 1b908e69f3 android: Migrate to frida-helper.dex
Previously this helper was only used on non-rooted systems.
We now use it universally, which lets us stop injecting code
into system_server and drop the dependency on frida-java-bridge.

The only functionality lost is launch-timeout suppression.
2026-01-11 00:14:55 +01:00
Ole André Vadla Ravnås fae32353e1 linux: Fix ptrace signal waiter forwarding
Signal wait helpers could incorrectly forward ptrace-internal stops
(e.g. event SIGTRAPs) or syscall-stops back into the tracee while
waiting for a specific signal. This can perturb execution and break
spawn/attach flows.

Use WaitResult.should_deliver_to_tracee to gate signal reinjection.
Waiters now always satisfy the requested stop first, and only pass
through unmatched stops when they represent a real deliverable
signal.
2026-01-08 14:08:01 +01:00
Ole André Vadla Ravnås babe40274f linux: Fix ptrace syscall tracing desync
Syscall tracing could become desynchronized when the tracee stopped for
non-syscall reasons (e.g. PTRACE_EVENT_EXEC or real signals). These
SIGTRAP stops were incorrectly treated as syscall entry/exit points,
leading to bogus syscall IDs and eventual timeouts.

Fix this by decoding the raw waitpid() status into a structured
WaitResult, distinguishing syscall-stops, ptrace event stops, and real
signal stops. The syscall entry/exit phase is now advanced only on true
syscall-stops, and ptrace-internal traps are no longer reinjected into
the tracee.
2026-01-08 13:42:14 +01:00
Ole André Vadla Ravnås d19036305d subprojects: Bump outdated 2026-01-06 22:40:20 +01:00
Ole André Vadla Ravnås 1572fb6594 submodules: Bump releng 2026-01-06 22:40:19 +01:00
wyxhjr 747a9cd172 Add preliminary support for RISC-V (#1201) 2026-01-06 20:06:58 +01:00
Francesco Tamagni 8ff3a58612 fruity: Throw CLOSED on tcp write in closed state
In this way the stream stops being polled and an infinite loop is
avoided.
2026-01-06 20:03:50 +01:00
Ole André Vadla Ravnås bcd4a3d586 subprojects: Prepare for release 2025-12-15 21:28:35 +01:00
Ole André Vadla Ravnås 9937b40032 subprojects: Bump outdated 2025-12-15 21:16:49 +01:00
Ole André Vadla Ravnås 81299af1ef darwin: Use DO_NOT_REAP_CHILD when spawning helper
When the system is booted without -arm64e_preview_abi, the helper
binary is killed very early during startup. Enabling
DO_NOT_REAP_CHILD allows GLib to use posix_spawn(), insulating the
host process from signal-related side effects during helper launch.

This means the child process is no longer reaped automatically.
Since this code may run inside a host process that installs its own
signal handlers, GLib's child-watch support cannot be used. Instead,
the helper is reaped explicitly using non-blocking polling.
2025-12-15 17:54:19 +01:00
Ole André Vadla Ravnås f76a3315e7 submodules: Bump releng 2025-12-15 15:06:33 +01:00
Ole André Vadla Ravnås f5c01842c9 meson: Avoid repeating the GLib requirement 2025-12-15 15:05:40 +01:00
Ole André Vadla Ravnås 40879413c0 meson: Remove the unused frida_profile variable 2025-12-15 12:43:25 +01:00
Ole André Vadla Ravnås ab4a7f43f6 meson: Update version logic to support snapshot tags 2025-12-15 12:31:16 +01:00
Ole André Vadla Ravnås 8ed4a69e03 meson: Restore support for GLib being a subproject
Which was broken when gio-unix-2.0 became part of the public API on
non-Windows systems.
2025-12-15 12:09:12 +01:00
Ole André Vadla Ravnås d93557625d ci: Move xcframework .modulemap inside a subdir
To avoid clashes when an app links with multiple static frameworks, each
with their own modulemap.
2025-12-11 15:12:50 +01:00
Ole André Vadla Ravnås 7ecebf23b1 ci: Remove snapshot-tag.yml
Actually triggering ci.yml seems like a rabbit-hole. Leaving for later.
2025-12-08 23:48:06 +01:00
Ole André Vadla Ravnås e2b4b120d7 ci: Add modulemap to xcframework for FridaCore
Add a Clang module.modulemap to each header slice in the generated
FridaCore.xcframework so SwiftPM can load the FridaCore C module.
2025-12-08 23:44:34 +01:00
Ole André Vadla Ravnås e1cb645805 ci: Fix some stylistic inconsistencies 2025-12-08 23:43:35 +01:00
Ole André Vadla Ravnås a0ea09d4d6 ci: Improve snapshot-tag.yml so it triggers ci.yml 2025-12-08 22:46:53 +01:00
Ole André Vadla Ravnås 0f32cc8f4e darwin: Emit 128px app icons on macOS
Instead of two small sizes, we'll emit just one larger one.
2025-12-08 22:29:15 +01:00
Ole André Vadla Ravnås 46a566655f submodules: Bump releng 2025-12-08 22:21:08 +01:00
Ole André Vadla Ravnås 690597f908 ci: Add workflow for automated snapshot tagging 2025-12-08 22:21:08 +01:00
Ole André Vadla Ravnås 0c49c7ee62 ci: Publish releases with .xcframework 2025-12-08 22:21:08 +01:00
Ole André Vadla Ravnås ce40c30a20 ci: Build and upload .xcframework artifact 2025-12-08 22:21:08 +01:00
Ole André Vadla Ravnås 3bb44c222a ci: Add ios-arm64-simulator to the mobile matrix 2025-12-08 22:21:07 +01:00
Ole André Vadla Ravnås 5ec73cab32 ci: Temporarily disable mobile tests
As the backend infrastructure needs some love.
2025-12-08 18:05:39 +01:00
Ole André Vadla Ravnås 257f198659 ci: Fix the emulator job 2025-12-08 18:05:39 +01:00
Ole André Vadla Ravnås 5fca68ebe0 ci: Fix the macOS/x86_64 job
As --host was omitted, we ended up building for macOS/arm64.
2025-12-08 18:05:39 +01:00
Ole André Vadla Ravnås 9eab4f8975 linux: Add missing Gum #include
Which only worked in the past due to luck, i.e. some unrelated code
including it.
2025-11-12 13:18:00 +00:00
Ole André Vadla Ravnås afd8c8789f subprojects: Prepare for release 2025-11-05 18:59:04 +01:00
Ole André Vadla Ravnås cfd5a730e4 subprojects: Bump outdated 2025-11-05 18:57:16 +01:00
Ole André Vadla Ravnås 3f411908e7 subprojects: Prepare for release 2025-11-04 10:30:52 +01:00
Ole André Vadla Ravnås 4e44f4d243 subprojects: Bump outdated 2025-11-04 10:29:26 +01:00
Leo Conforti 9573f1aa22 compiler: Add platform and externals options
Introduce a platform property and externals API to CompilerOptions, and
plumb them through to the Go backend. The backend maps the platform to an
esbuild platform and passes externals to esbuild for exclusion from the
bundle.
2025-11-04 09:52:09 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 79a08e4767 simmy: Wire up spawn() argv and env options
Though `argv` was already wired up for the program case, we didn't wire
it up for the app case.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-11-03 19:30:56 +01:00
Ole André Vadla Ravnås 57dfe9d5ad subprojects: Prepare for release 2025-11-01 00:38:11 +01:00
Ole André Vadla Ravnås 347662b45b subprojects: Bump outdated 2025-11-01 00:36:24 +01:00
Ole André Vadla Ravnås cc95375136 darwin: Revive app listing/launching on iOS >= 16
When running on rootful systems. This brings dccb612 back to life.
It was broken in 8108d4d, which fixed two Interceptor singleton leaks.
Turns out the one in springboard.m was intentional, as it was done as
part of init-once logic, with no teardown intended. And since nothing
else uses Interceptor in this case, the instrumentation we just
applied gets reverted right away.

Kudo to @alexhude for reporting.
2025-11-01 00:23:17 +01:00
Ole André Vadla Ravnås 329c4075d0 subprojects: Prepare for release 2025-10-31 20:24:06 +01:00
Ole André Vadla Ravnås c4198498d5 subprojects: Bump outdated 2025-10-31 20:21:36 +01:00
Ole André Vadla Ravnås 20ef7bb318 simmy: Degrade functionality when SIP is enabled
As get_frontmost_application() and icons rely on being able to inject
our internal agent into SpringBoard.

Down the road we might be able to reimplement this functionality as a
helper program that we spawn inside the Simulator runtime. The uncertain
part is whether we'll be able to give that program the appropriate
entitlements.
2025-10-31 20:09:20 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 367f8cf22b simmy: Handle app enumeration with selected IDs
Co-authored-by: Håvard Sørbø <[email protected]>
2025-10-30 14:58:35 +01:00
Ole André Vadla Ravnås 9f04675b87 subprojects: Prepare for release 2025-10-29 16:47:53 +01:00
Ole André Vadla Ravnås cd8bda0513 subprojects: Bump outdated 2025-10-29 16:45:40 +01:00
Ole André Vadla RavnåsandHåvard Sørbø e09e09fb85 simmy: Wire up application icons
Co-authored-by: Håvard Sørbø <[email protected]>
2025-10-29 15:08:50 +01:00
Ole André Vadla RavnåsandHåvard Sørbø c24a5da82c simmy: Implement get_frontmost_application()
Co-authored-by: Håvard Sørbø <[email protected]>
2025-10-29 15:01:15 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 05ec6563d1 internal-agent: Support non-local HostSession
So we can use it in the Simmy backend, too.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-10-28 14:12:01 +01:00
Ole André Vadla RavnåsandHåvard Sørbø 9dc9d30fa4 simmy: Fix the reported hardware.product
In query_system_parameters().

So it's e.g. `iPhone18,2` instead of `iPhone 17 Pro Max`.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-10-28 13:15:38 +01:00
Ole André Vadla Ravnås 0b57936285 subprojects: Prepare for release 2025-10-24 15:25:15 +02:00
Ole André Vadla Ravnås 41be857a91 subprojects: Bump outdated 2025-10-24 15:23:37 +02:00
Ole André Vadla Ravnås afa847b898 submodules: Bump releng 2025-10-24 15:23:37 +02:00
Ole André Vadla Ravnås 3e43478de0 android: Bump frida-java-bridge in system-server 2025-10-24 15:22:18 +02:00
Ole André Vadla Ravnås a847a012c9 freebsd: Wire up PTY support 2025-10-12 08:11:13 +02:00
Ole André Vadla Ravnås c34fad1ff0 freebsd: Port remaining bits to the new stdio API 2025-10-12 07:50:00 +02:00
Ole André Vadla Ravnås ceef1d696b darwin: Fix a stylistic inconsistency 2025-10-12 07:47:09 +02:00
Ole André Vadla Ravnås d0cfe69dba subprojects: Prepare for release 2025-10-11 19:22:49 +02:00
Ole André Vadla Ravnås a35aff1865 api: Exclude HostSessionHub from .gir
As it's an internal interface.
2025-10-11 11:46:28 +02:00
Ole André Vadla Ravnås be8a59607a android: Bump frida-java-bridge in system-server 2025-10-11 11:07:51 +02:00
Ole André Vadla Ravnås 726740f96a simmy: Move to CoreSimulator.framework 2025-10-10 12:34:41 +02:00
Ole André Vadla Ravnås 9e11d57a76 Add new Simmy backend
For interacting with Apple's simulators on macOS.
2025-10-10 12:34:41 +02:00
Ole André Vadla Ravnås d8c3c9bfb5 darwin: Support early instrumentation of dyld_sim 2025-10-10 12:34:41 +02:00
Ole André Vadla Ravnås 2720968791 base: Add StdioPipes and FileDescriptor helpers
Factored out of the Darwin and Linux backends.
2025-10-10 12:34:41 +02:00
Ole André Vadla Ravnås b8998e52cd host-session: Support cross-backend communication 2025-10-10 12:34:41 +02:00
Ole André Vadla Ravnås c23f046968 value: Add VariantReader.list_members() 2025-10-10 12:34:41 +02:00
Francesco Tamagni 2d521bbeb7 fruity: Unpair on InvalidHostID
So the error doesn't become persistent, and the
device can be paired again.
2025-10-07 11:37:57 +02:00
Ole André Vadla Ravnås cdae790ba9 darwin: Port to the latest Gum.Darwin API 2025-10-01 10:52:33 +02:00
Ole André Vadla Ravnås 90d2d93799 subprojects: Bump outdated 2025-10-01 10:49:57 +02:00
Ole André Vadla Ravnås 61ad9a0f9f subprojects: Prepare for release 2025-09-19 17:16:18 +02:00
Ole André Vadla Ravnås 48af36f4d1 subprojects: Bump outdated 2025-09-19 17:14:21 +02:00
Ole André Vadla Ravnås 053b34c5fd ncm: Speed up TX packing with fixed-slot NDP
Switch to a fixed-slot NDP layout to eliminate the slow O(k²) "shrink
until it fits" algorithm. The new packer runs in O(k) time and stops
adding datagrams when the NTB max size would be exceeded.

This greatly reduces CPU time spent building NTBs, dropping total layout
time from ~1.1s to negligible levels for a 256 MiB transfer on a modern
desktop.
2025-09-19 17:01:32 +02:00
Ole André Vadla Ravnås 010d5ee500 ncm: Improve TX scheduling to keep USB pipe full
Rework host->device transfer logic to remove the single `writing` gate
as a throughput bottleneck. Manage OUT transfers with a rolling window
and refill as soon as any transfer completes instead of waiting for all
in-flight transfers to finish.

Reduce idle gaps between URBs and keep the USB bulk pipe continuously
fed, improving HS throughput from ~29 MB/s to ~34 MB/s in testing.
Maintain bounded memory usage via transfer and byte window limits.
2025-09-19 17:01:32 +02:00
Ole André Vadla Ravnås 2fa39e28ed fruity: Optimize datagram handling
Deliver datagrams in batches when we can, to make cross-thread delivery
more deterministic.
2025-09-19 16:58:32 +02:00
Ole André Vadla Ravnås 250dc83016 subprojects: Prepare for release 2025-09-18 07:39:38 +02:00
Ole André Vadla Ravnås eec4fc0883 subprojects: Bump outdated 2025-09-17 22:10:20 +02:00
Ole André Vadla Ravnås 4535e3dfd4 submodules: Bump releng 2025-09-17 22:10:20 +02:00
Ole André Vadla Ravnås 01203eab3b meson: Remove lwIP TCP options
The defaults are now tuned to our use-case, so we can avoid duplicating
those in two different places.
2025-09-17 13:56:33 +02:00
Ole André Vadla Ravnås a43311da90 subprojects: Prepare for release 2025-09-15 22:57:00 +02:00
Ole André Vadla Ravnås 204e0ed565 barebone: Move non-Windows-only bits behind #if
To fix warning regressions on Windows.
2025-09-15 22:09:32 +02:00
Ole André Vadla Ravnås 8fe7c13c27 meson: Ensure lzfse ends up in .pc
To fix linking in static consumers when the Barebone backend is enabled.
2025-09-15 22:08:45 +02:00
vinaykumar🍁 123ea7c004 fruity: Fall back to usbmux when tunnel times out
And other such network-/transport-errors.
2025-09-15 21:39:33 +02:00
Ole André Vadla Ravnås 3968ac635b subprojects: Bump outdated 2025-09-11 10:31:54 +02:00
Håvard Sørbø bc8c7cde1b fruity: Handle CoreDevice pairing events
Our request_pairing_data() was previously assuming request/response
semantics, which is incorrect.
2025-09-11 10:19:22 +02:00
Håvard Sørbø 7c3b4e900c fruity: Match pairing request/response using FIFO
Instead of using the sequence number.
2025-09-11 10:19:22 +02:00
Francesco Tamagni bf7558197c fruity: Handle edge cases on teardown 2025-09-11 09:01:11 +02:00
Ole André Vadla RavnåsandHåvard Sørbø e95fea688b barebone: Add basic support for XNU injection
Tested on iOS 14.0 running in QEMU. For now this depends on my
micro-fork of QEMUAppleSilicon, which adds the hostlink device
that we depend on for communicating with the agent.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-09-08 12:42:07 +02:00
Ole André Vadla Ravnås 8cbbe21192 barebone: Expose underscore-prefixed CModule syms 2025-09-08 12:42:06 +02:00
Ole André Vadla Ravnås a49f5e4b26 meson: Require json-glib >= 1.8
Needed for Json.Reader.get_current_node().
2025-09-08 12:42:06 +02:00
Ole André Vadla Ravnås 87b3c76fa2 subprojects: Prepare for release 2025-08-20 12:07:16 +02:00
Ole André Vadla Ravnås 9c3cfeda62 subprojects: Bump outdated 2025-08-20 12:06:02 +02:00
Ole André Vadla Ravnås 4e3b670677 subprojects: Prepare for release 2025-08-12 10:15:42 +02:00
Ole André Vadla Ravnås 393637ced2 subprojects: Bump outdated 2025-08-12 09:48:31 +02:00
Ole André Vadla Ravnås 7457b7d355 subprojects: Prepare for release 2025-08-02 09:42:45 +02:00
Ole André Vadla Ravnås 1d80fc635e subprojects: Bump outdated 2025-08-02 08:53:27 +02:00
Abc Xyz 02a6884000 freebsd: Add support for x86 (32-bit) (#1188) 2025-08-02 08:52:39 +02:00
Cheng Yang 820b9f0284 platform: Add support for visionOS 2025-08-02 08:41:15 +02:00
Ole André Vadla Ravnås 5364736d8c subprojects: Bump outdated 2025-08-01 20:21:02 +02:00
Ole André Vadla Ravnås 9134ee1562 submodules: Bump releng 2025-08-01 20:21:01 +02:00
Ole André Vadla Ravnås 85e99cfbd1 gadget: Fix compilation on tvOS and watchOS 2025-08-01 18:17:40 +02:00
Ole André Vadla Ravnås bd1cbc2813 gadget: Fix compilation on non-arm64 Darwin 2025-08-01 18:17:22 +02:00
Ole André Vadla Ravnås a9b4bc7abd subprojects: Bump outdated 2025-08-01 15:48:35 +02:00
Ole André Vadla Ravnås f00ed7357f submodules: Bump releng 2025-08-01 15:48:34 +02:00
Ole André Vadla Ravnås e117570aca android: Bump frida-java-bridge in system-server
To pick up the improved ART offset lookup fix by @AeonLucid.

See frida/frida-java-bridge#366 for details.
2025-08-01 15:29:01 +02:00
Ole André Vadla Ravnås d7bdd776c3 gadget: Fix compilation on non-Darwin 2025-08-01 10:09:13 +02:00
03d861ca80 fruity: Support iOS 26 through dual-mapping
Where we implement the breakpoint protocol expected by Gum's latest
Darwin backend on systems with debugger mappings.

Co-authored-by: Alex Soler <[email protected]>
Co-authored-by: Håvard Sørbø <[email protected]>
Co-authored-by: Ole André Vadla Ravnås <[email protected]>
2025-07-31 20:50:07 +02:00
Francesco Tamagni c047e64c00 fruity: Support injection on palera1n 2025-07-31 19:43:37 +02:00
Ole André Vadla Ravnås 5192ac381f buffer: Fix BufferReader.read_pointer()
No offset should be passed to it.
2025-07-31 19:42:40 +02:00
Ole André Vadla Ravnås 9450f3fa31 barebone: Handle MMU being disabled
We should refine this further, so we re-query the page size later.
2025-07-29 00:29:41 +02:00
Ole André Vadla Ravnås b7157aa45c barebone: Add support for the uint type
In the NativeFunction and NativeCallback APIs.
2025-07-29 00:29:35 +02:00
Ole André Vadla Ravnås d9dfde5748 subprojects: Prepare for release 2025-07-24 11:16:39 +02:00
Ole André Vadla Ravnås 6fdb9b3834 subprojects: Bump outdated 2025-07-24 11:15:07 +02:00
Ole André Vadla Ravnås 92aae264f0 cloak: Plug leak in ThreadCountCloaker.dispose()
Where we were failing to chain up to GObject.dispose().
2025-07-24 11:13:12 +02:00
AeonLucid 5b850e49b2 cloak: Support Art::GetOsThreadStat on Android
The issue is similar to #500, where Zygote is waiting for the process to
become single-threaded before continuing, otherwise it crashes.

For a while this has been changed to use art::GetOsThreadStat, so the
old fix no longer works.
2025-07-24 11:13:12 +02:00
Ole André Vadla Ravnås a6e60f4de6 barebone: Bump @types/frida-gum to 19.0.1 2025-07-24 10:47:16 +02:00
Ole André Vadla Ravnås aac44b8748 compiler: Bump @types/frida-gum to 19.0.1 2025-07-24 10:45:34 +02:00
Ole André Vadla Ravnås f052966d2b android: Bump frida-java-bridge in system-server
To pick up the improved ART offset lookup fix by @AeonLucid.

See frida/frida-java-bridge#362 for details.
2025-07-24 10:37:37 +02:00
Ole André Vadla Ravnås af5c6744ab subprojects: Prepare for release 2025-07-21 15:06:16 +02:00
Ole André Vadla Ravnås 11c3c4cbc0 subprojects: Bump outdated 2025-07-21 15:04:37 +02:00
Ole André Vadla Ravnås ddf42a869a android: Bump frida-java-bridge in system-server
Pick up ART offset lookup fix by @AeonLucid.

See frida/frida-java-bridge#361 for details.
2025-07-21 14:51:52 +02:00
Ole André Vadla Ravnås de4ea7e25a subprojects: Prepare for release 2025-07-18 10:32:18 +02:00
Ole André Vadla Ravnås 9032c83b1e subprojects: Bump outdated 2025-07-18 10:28:26 +02:00
Ole André Vadla Ravnås 6ea09653c4 submodules: Bump releng 2025-07-18 10:28:25 +02:00
Ole André Vadla Ravnås 681c6f0011 android: Bump frida-java-bridge in system-server
Update frida-java-bridge to include fix for incorrect ART
class spec offset detection. This prevents crashes caused by
libart.so being updated independently of the SDK version,
which previously led to offset mismatches.

The fix uses runtime detection via known classes instead of
SDK heuristics, improving reliability across Android updates.
2025-07-18 10:25:19 +02:00
Ole André Vadla Ravnås 5175be48be buffer: Expose BufferReader.offset 2025-07-16 08:28:10 +02:00
Ole André Vadla Ravnås 96ec48e5db barebone: Clear PXN on tables in protect_pages() 2025-07-12 11:02:04 +02:00
Ole André Vadla Ravnås 950e75556c barebone: Improve portability of uint64 constants 2025-07-12 11:01:57 +02:00
Ole André Vadla Ravnås 774b81fe15 buffer: Add helper for constructing large Bytes
This works around a Vala limitation where array lengths are represented
using 32-bit signed integers, which restricts the size of arrays that
can be passed to GLib.Bytes.
2025-07-08 19:57:54 +02:00
Ole André Vadla Ravnås c9d2899f9a buffer: Add Buffer.write_bytes() 2025-07-08 14:22:16 +02:00
Ole André Vadla Ravnås 82a02e112a buffer: Add Buffer.read_bytes() 2025-07-08 14:22:11 +02:00
Ole André Vadla Ravnås 001873a0e9 buffer: Add Buffer.write_int64() 2025-07-08 14:22:05 +02:00
Ole André Vadla Ravnås a56f94305c buffer: Add Buffer.write_uint16() 2025-07-08 14:21:59 +02:00
Ole André Vadla Ravnås 4f6614fe9c buffer: Add Buffer.write_int16() 2025-07-08 14:21:54 +02:00
Ole André Vadla Ravnås f62261b807 buffer: Add Buffer.write_uint8() 2025-07-08 14:21:48 +02:00
Ole André Vadla Ravnås e83804fd3e buffer: Add Buffer.write_int8() 2025-07-08 14:21:41 +02:00
Ole André Vadla Ravnås 3c5c49031c buffer: Fix a stylistic inconsistency 2025-07-08 14:21:37 +02:00
Ole André Vadla Ravnås b2debc767a meson: Add devkit_symbol_scope option
Introduce the combo option `devkit_symbol_scope` with the values
`prefixed` (default) and `original`.  It mirrors the
`--dep-symbol-scope` flag in mkdevkit.py and lets projects control
how the generated devkits treat third-party symbols at configure
time.

* `prefixed`  – add the “_frida_” prefix to avoid clashes with the
  consumer’s own copies of the same libraries (current behaviour)
* `original`  – keep upstream symbol names untouched

The default remains `prefixed`, so existing builds are unchanged.
2025-07-06 19:23:59 +02:00
Ole André Vadla Ravnås 8681999deb submodules: Bump releng 2025-07-06 19:23:09 +02:00
Håvard Sørbø 25efd44d81 barebone: Support R_AARCH64_PREL32 relocations 2025-07-06 13:28:56 +02:00
Ole André Vadla Ravnås b04f69ead9 buffer: Add Buffer.write_int32() 2025-07-06 13:28:38 +02:00
Ole André Vadla Ravnås 63c66f4630 barebone: Add target-function allocator
This introduces a new configuration file (JSON) pointed to by the
FRIDA_BAREBONE_CONFIG environment variable. The file can now describe
three allocator modes:

  * "physical"         – allocate from a fixed physical base
  * "target-functions" – call alloc/free functions on the target
  * "none"             – no allocator configured

Example (target-functions):

    {
      "allocator": {
        "mode": "target-functions",
        "alloc_function": "0xfffffff007a3c278",
        "free_function":  "0xfffffff007a3c338"
      }
    }

BREAKING: The following environment variables are removed. Use the
equivalent JSON instead.

  * FRIDA_BAREBONE_ADDRESS   → "connection.host" / "connection.port"
  * FRIDA_BAREBONE_HEAP_BASE → "allocator.mode": "physical"

Both connection and allocator sections are optional; defaults are
unchanged.
2025-07-06 13:11:55 +02:00
Ole André Vadla Ravnås fec7b84263 barebone: Drop landing_zone from Machine.invoke()
No need for it as we can simply use PC.
2025-07-06 13:11:44 +02:00
Ole André Vadla Ravnås 5bcf41ef07 gadget: Remove redundant Json.Serializable methods
These methods are no longer needed, as json-glib-1.0.vapi now correctly
marks them as non-abstract.
2025-07-06 13:11:11 +02:00
Ole André Vadla Ravnås a7b95c4d89 gadget: Fix config casts
They should not be dynamic casts, since we know the type.
2025-07-06 13:05:16 +02:00
Ole André Vadla Ravnås faf4b24f2b barebone: Implement CModule
Only supporting construction from an ELF blob, for now.
2025-07-03 20:57:27 +02:00
Ole André Vadla Ravnås dbadfb617c rust-module: Split out ELF and console logic 2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø a22a3ea7d1 barebone: Implement Memory.protect()
Only supported on arm64 for now.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø a5a934c05f barebone: Add support for void and size_t types
In the NativeFunction and NativeCallback APIs.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø e7fe9d7c16 barebone: Add Arm64Machine.execute()
Useful for experimentation.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø 42869f7fb1 rust-module: Explicitly make ELF executable
Needed on SPRR targets, where allocations are `rw-` by default.

We should improve this so we only apply it to executable segments.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø ef2638f57d barebone: Add support for SPRR
Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø 619865e19a barebone: Avoid inserting into PXN tables on arm64
As we won't be able to make such allocations executable.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 20:57:27 +02:00
Ole André Vadla RavnåsandHåvard Sørbø 660782101c gdb: Fix read_register() for CPSR
The response may not be pointer-sized.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-03 19:27:02 +02:00
683dcf59cd fruity: Spray Gadget's r-x pages before uploading
To turn them into debugger mappings. This is only needed on newer
hardware generations, and only on iOS >= 26, but for now we do it
on all of them.

Co-authored-by: Francesco Tamagni <[email protected]>
Co-authored-by: Håvard Sørbø <[email protected]>
Co-authored-by: Murphy <[email protected]>
2025-07-03 19:08:32 +02:00
7ed356fe63 gdb: Add spray_pages()
For efficiently tainting a range of pages before first-time use.

Useful on e.g. iOS targets where debugger mappings are enforced.

Co-authored-by: Francesco Tamagni <[email protected]>
Co-authored-by: Håvard Sørbø <[email protected]>
Co-authored-by: Murphy <[email protected]>
2025-07-03 19:02:39 +02:00
Ole André Vadla Ravnås 27e2d4b96e control-service: Fix build w/o the local backend 2025-07-03 18:59:48 +02:00
Ole André Vadla Ravnås d05515c6f1 subprojects: Prepare for release 2025-07-03 16:10:12 +02:00
Ole André Vadla Ravnås 97742e01f5 subprojects: Bump outdated 2025-07-03 16:09:14 +02:00
Francesco Tamagni f354fcafe4 fruity: Get away with killing prewarmed target
Killing a prewarmed process at spawn time results in a "connection
closed" error. This change catches it so it's possible to go on and
spawn a fresh instance.
2025-07-03 14:59:16 +02:00
Ole André Vadla Ravnås dca42cfa11 subprojects: Prepare for release 2025-07-03 12:56:59 +02:00
Ole André Vadla Ravnås aecfdb92a3 subprojects: Bump outdated 2025-07-03 12:55:43 +02:00
Ole André Vadla Ravnås 4f5badfeff rust-module: Ensure C ABI entrypoints survive GC
Newer Rust toolchains use --gc-sections, stripping unused sections.
Refactor make_linker_script() to scan the Rust source for symbols
intended to be visible, and emit KEEP(*(.text.<symbol>)) directives
so those entrypoints are retained.
2025-07-03 02:19:21 +02:00
Ole André Vadla Ravnås b2e64a69c1 subprojects: Prepare for release 2025-07-02 12:59:06 +02:00
Ole André Vadla Ravnås 147b1c1e73 subprojects: Bump outdated 2025-07-02 12:56:11 +02:00
Francesco Tamagni e9d4e56b9c gadget: Avoid Interceptor during config detection
By iterating modules on Darwin using Gum.Darwin.ModuleResolver instead
of relying on the module registry which attempts to use Interceptor
before the configuration had a chance to specify the `code_signing`
policy.
2025-07-02 12:54:35 +02:00
Francesco Tamagni 1e4f398fb2 fruity: Inject on enforced debugger mapping
Add support for injecting the gadget on iOS targets where debugger
mappings are enforced and we can't flip the memory protection back to
executable from inside the target process.

In that case, the Gadget configuration will have `code_signing` set to
`required` for now, until Interceptor is ready for enforced debugger
mappings too.
2025-07-02 12:54:35 +02:00
Ole André Vadla Ravnås 4dcce299d0 subprojects: Prepare for release 2025-07-02 00:09:13 +02:00
Ole André Vadla Ravnås 474199c1e7 subprojects: Bump outdated 2025-07-02 00:08:31 +02:00
Ole André Vadla Ravnås 6ff8d931e0 package-manager: Fix broken #if on Windows 2025-07-02 00:07:44 +02:00
Ole André Vadla Ravnås 4b25d3b987 subprojects: Prepare for release 2025-07-01 23:40:01 +02:00
Ole André Vadla Ravnås 0f98678051 subprojects: Bump outdated 2025-07-01 23:38:55 +02:00
Henrik Grimler 52948f6c4f meson: Clarify Vala build system gotcha (#1182)
The Vala README only mentions autotools instructions, and when Vala is
compiled that way the -frida suffix is not added to the version string,
and the frida-core check for Vala fails.

Therefore, clarify that Vala needs to be built from source with Meson.
2025-07-01 21:33:05 +02:00
Ole André Vadla Ravnås ae7a3725d3 meson: Add missing libc Vala defines
Needed by the latest PackageManager.
2025-07-01 21:15:39 +02:00
Ole André Vadla Ravnås 62234b16ae package-manager: Refactor the installation logic 2025-07-01 21:07:35 +02:00
Ole André Vadla Ravnås 1000cba56b package-manager: Fix the has_install_script logic
Should also take `preinstall` and `postinstall` into account.
2025-07-01 21:07:35 +02:00
Ole André Vadla Ravnås 40004affdb package-manager: Improve optional package handling 2025-07-01 21:07:35 +02:00
Ole André Vadla Ravnås a836182ac9 package-manager: Add install() option for role
To achieve the equivalent of npm install's --save-* switches.
2025-07-01 21:07:35 +02:00
Ole André Vadla Ravnås 600d2bf948 package-manager: Add install() option for omits
To achieve the equivalent of npm install's --omit=x switch.
2025-07-01 21:07:35 +02:00
Ole André Vadla Ravnås 466705f0da package-manager: Handle file mode when extracting
On non-Windows systems.
2025-07-01 21:07:35 +02:00
Ole André Vadla RavnåsandHåvard Sørbø 18ad19554a package-manager: Improve resolution and hoisting
To mimic npm's behavior more closely.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-07-01 21:07:35 +02:00
Ole André Vadla Ravnås 58c8062f93 subprojects: Prepare for release 2025-06-27 15:59:50 +02:00
Kyle Bouchard a6be95d8ae agent: Disable Exceptor for the emulated realm
Exceptor needs to hook signal() and sigaction(), but they are in libc,
leading to gum_mprotect() aborting because it cannot change libc's
'r--' mapping.

I tested it on AVDs with Android 14 and 15 and it prevents the crash
observed in the upstream version when using frida-server or
frida-inject.
2025-06-27 15:58:12 +02:00
Ole André Vadla Ravnås db258f0d35 subprojects: Bump outdated 2025-06-27 15:50:28 +02:00
Francesco Tamagni bea95d0045 buffer: Fix max_length in read_fixed_string
So it is constrained both within the requested size and the buffer's
size.
2025-06-26 12:25:01 +02:00
Ole André Vadla Ravnås 57d2a83548 subprojects: Prepare for release 2025-06-23 18:44:25 +02:00
Ole André Vadla Ravnås 4474490f9b subprojects: Bump outdated 2025-06-23 18:41:09 +02:00
Ole André Vadla Ravnås a9ba854aa7 package-manager: Fix the dev logic 2025-06-22 10:22:42 +02:00
Ole André Vadla Ravnås 47c265b3df package-manager: Only bump if explicitly requested 2025-06-20 21:37:31 +02:00
Ole André Vadla Ravnås 36200d4c17 subprojects: Prepare for release 2025-06-20 15:45:32 +02:00
Ole André Vadla Ravnås bd1f855f4a subprojects: Bump outdated 2025-06-20 15:44:10 +02:00
Ole André Vadla RavnåsandHåvard Sørbø d752b63d3f package-manager: Improve manifest handling
To get us closer to npm's behavior.

Co-authored-by: Håvard Sørbø <[email protected]>
2025-06-20 15:43:29 +02:00
Ole André Vadla Ravnås a66e35d457 package-manager: Improve progress reporting 2025-06-20 11:46:30 +02:00
Ole André Vadla Ravnås 931270de32 package-manager: Refactor a little bit 2025-06-20 11:45:50 +02:00
Ole André Vadla Ravnås 90d54afbf4 promise: Add Future.then() and Future.get_result() 2025-06-20 10:58:00 +02:00
Ole André Vadla Ravnås 0a75b51e7b package-manager: Fix dependency install deadlock
A deadlock could occur when a package's sub-dependency was also a
dependency of another package higher up in the installation stack.
The sub-dependency would wait for the higher-level package to be
physically installed, but that package would not complete its own
installation until its sub-dependencies were resolved, creating a
circular wait.

Refactor the installation logic to first perform the physical
installation of a package. Once the package is on disk, a promise
tracking its physical presence is resolved. Only then does the process
recurse to install the package's own dependencies. This ensures that
any other part of the installation process waiting for this specific
package can proceed, breaking the cycle.
2025-06-20 10:17:38 +02:00
Ole André Vadla Ravnås 20d5d121b7 subprojects: Prepare for release 2025-06-20 01:13:54 +02:00
Ole André Vadla Ravnås dc71534220 subprojects: Bump outdated 2025-06-20 01:12:26 +02:00
Ole André Vadla Ravnås 35afee9b4a package-manager: Handle tarballs with root entries
Like if there's a directory entry for "package/", or somehow any files
at the root level.
2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås 7b130e6eba package-manager: Fix handling of scoped specs 2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås d28c46c332 package-manager: Fix a stylistic inconsistency 2025-06-20 01:11:39 +02:00
Ole André Vadla Ravnås ab103a73ca package-manager: Simplify substring logic 2025-06-20 01:11:39 +02:00
334 changed files with 53396 additions and 11668 deletions

No files matched your search

@@ -0,0 +1,4 @@
set(VCPKG_TARGET_ARCHITECTURE arm64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_BUILD_TYPE release)
@@ -0,0 +1,4 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_BUILD_TYPE release)
+236 -10
View File
@@ -2,11 +2,15 @@ name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
inputs:
tag:
description: "Tag to build/test"
required: false
type: string
env:
FRIDA_CORE_OPTIONS: '--with-devkits=core --enable-tests'
@@ -57,13 +61,17 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install gcc-multilib lib32stdc++-13-dev
- name: Install setuptools for distutils shim
if: ${{ startsWith(matrix.id, 'windows-') }}
run: pip install setuptools
- name: Build
if: ${{ startsWith(matrix.id, 'windows-') }}
run: |
.\configure `
--host=${{ matrix.id }} `
--enable-compiler-backend `
${{ env.FRIDA_CORE_OPTIONS }}
${{ env.FRIDA_CORE_OPTIONS }} `
-- --force-fallback-for=openssl
.\make
env:
MSYS2_LOCATION: ${{ steps.msys2.outputs.msys2-location }}
@@ -71,6 +79,7 @@ jobs:
if: ${{ !startsWith(matrix.id, 'windows-') && matrix.id != 'linux-x86' }}
run: |
./configure \
--host=${{ matrix.id }} \
--enable-compiler-backend \
${{ env.FRIDA_CORE_OPTIONS }}
make
@@ -205,7 +214,7 @@ jobs:
/sbin/entropy
cat /etc/motd
export PS1='\u@frida:\w\$ '
/root/frida-tests
/root/tests/frida-tests
status=\$?
echo "exit status: \$status"
if [ \$status -eq 0 ]; then
@@ -281,7 +290,8 @@ jobs:
COPY initscript /tmp/initramfs/init
RUN chmod +x /tmp/initramfs/init
COPY build/tests /tmp/initramfs/root/
COPY build/tests /tmp/initramfs/root/tests/
COPY build/lib/agent/frida-agent.so /tmp/initramfs/root/lib/agent/
RUN find . | cpio -o --format=newc -R root:root > /root/initramfs.img
COPY launch.sh /root/launch.sh
@@ -297,6 +307,7 @@ jobs:
matrix:
id:
- ios-arm64
- ios-arm64-simulator
- android-x86
- android-x86_64
- android-arm
@@ -324,7 +335,7 @@ jobs:
if: startsWith(matrix.id, 'android-')
id: setup-ndk
with:
ndk-version: r25c
ndk-version: r29
- name: Add NDK to env
if: startsWith(matrix.id, 'android-')
run: echo ANDROID_NDK_ROOT=${{ steps.setup-ndk.outputs.ndk-path }} >> $GITHUB_ENV
@@ -341,6 +352,7 @@ jobs:
name: core-devkit-${{ matrix.id }}
path: build/src/devkit/
- name: Package tests
if: false
run: |
mkdir -p /tmp/pkg
cd build
@@ -360,7 +372,7 @@ jobs:
esac
tar -C /tmp/pkg -czf /tmp/runner.tar.gz .
- name: Test on Corellium iOS device
if: matrix.id == 'ios-arm64'
if: false
continue-on-error: true
uses: frida/corellium-action@v4
with:
@@ -376,7 +388,7 @@ jobs:
tar xf $ASSET_PATH
./frida-tests
- name: Test on Corellium Android device
if: matrix.id == 'android-arm64'
if: false
continue-on-error: true
uses: frida/corellium-action@v4
with:
@@ -420,6 +432,7 @@ jobs:
# in, and we want to ensure that they are up-to-date with respect to the source
# for all architectures.
check-linux-helpers:
if: false
strategy:
matrix:
arch: [x86, x86_64, arm, armbe8, arm64, arm64be, arm64beilp32, mips, mipsel, mips64, mips64el]
@@ -437,7 +450,7 @@ jobs:
- name: Check for unexpected changes
run: |
git config --global --add safe.directory "$(realpath .)"
status_output=$(git status --porcelain tests/labrats/{resident-agent,simple-agent}-linux-${{ matrix.arch }}.so tests/labrats/{forker,sleeper,spawner}-linux-${{ matrix.arch }})
status_output=$(git status --porcelain src/linux/helpers/artifacts)
if [ -n "$status_output" ]; then
echo "Unexpected changes detected:"
echo "$status_output"
@@ -453,6 +466,7 @@ jobs:
# in, and we want to ensure that they are up-to-date with respect to the source
# for all architectures.
check-labrats:
if: false
strategy:
matrix:
arch: [x86, x86_64, arm, armbe8, arm64, arm64be, arm64beilp32, mips, mipsel, mips64, mips64el]
@@ -470,7 +484,7 @@ jobs:
- name: Check for unexpected changes
run: |
git config --global --add safe.directory "$(realpath .)"
status_output=$(git status --porcelain src/linux/helpers/{bootstrapper,loader}-${{ matrix.arch }}.bin)
status_output=$(git status --porcelain tests/labrats/{resident-agent,simple-agent}-linux-${{ matrix.arch }}.so tests/labrats/{forker,sleeper,spawner}-linux-${{ matrix.arch }})
if [ -n "$status_output" ]; then
echo "Unexpected changes detected:"
echo "$status_output"
@@ -480,3 +494,215 @@ jobs:
else
echo "No unexpected changes detected."
fi
xcframework:
name: Build FridaCore.xcframework
if: ${{ !cancelled() }}
runs-on: macos-latest
needs:
- native
- mobile
steps:
- name: Check out repo
uses: actions/checkout@v4
- name: Download macOS/x86_64 devkit
uses: actions/download-artifact@v4
with:
name: core-devkit-macos-x86_64
path: devkits/macos-x86_64
- name: Download macOS/arm64 devkit
uses: actions/download-artifact@v4
with:
name: core-devkit-macos-arm64
path: devkits/macos-arm64
- name: Download iOS/arm64 devkit
uses: actions/download-artifact@v4
with:
name: core-devkit-ios-arm64
path: devkits/ios-arm64
- name: Download iOS/arm64-simulator devkit
uses: actions/download-artifact@v4
with:
name: core-devkit-ios-arm64-simulator
path: devkits/ios-arm64-simulator
- name: Create FridaCore.xcframework
shell: bash
run: |
set -euo pipefail
mkdir -p devkits/macos-universal
lipo -create \
devkits/macos-x86_64/libfrida-core.a \
devkits/macos-arm64/libfrida-core.a \
-output devkits/macos-universal/libfrida-core.a
platforms=(
"macos-universal"
"ios-arm64"
"ios-arm64-simulator"
)
for platform in "${platforms[@]}"; do
mkdir -p "xcframework_headers/${platform}/FridaCore"
done
cp devkits/macos-x86_64/frida-core.h \
xcframework_headers/macos-universal/frida-core-x86_64.h
cp devkits/macos-arm64/frida-core.h \
xcframework_headers/macos-universal/frida-core-arm64.h
cat > xcframework_headers/macos-universal/frida-core.h <<'EOF'
#if defined (__x86_64__)
# include "frida-core-x86_64.h"
#elif defined (__arm64__)
# include "frida-core-arm64.h"
#else
# error "Unsupported macOS architecture for FridaCore"
#endif
EOF
cp devkits/ios-arm64/frida-core.h \
xcframework_headers/ios-arm64/frida-core.h
cp devkits/ios-arm64-simulator/frida-core.h \
xcframework_headers/ios-arm64-simulator/frida-core.h
for platform in "${platforms[@]}"; do
cat > "xcframework_headers/${platform}/FridaCore/module.modulemap" <<'EOF'
module FridaCore [extern_c] {
header "../frida-core.h"
export *
}
EOF
done
xcodebuild -create-xcframework \
-library devkits/macos-universal/libfrida-core.a \
-headers xcframework_headers/macos-universal \
-library devkits/ios-arm64/libfrida-core.a \
-headers xcframework_headers/ios-arm64 \
-library devkits/ios-arm64-simulator/libfrida-core.a \
-headers xcframework_headers/ios-arm64-simulator \
-output FridaCore.xcframework
- name: Upload FridaCore.xcframework
uses: actions/upload-artifact@v4
with:
name: FridaCore.xcframework
path: FridaCore.xcframework
publish-xcframework:
if: ${{ !cancelled() && github.ref_type == 'tag' && needs.xcframework.result == 'success' }}
runs-on: macos-latest
needs:
- xcframework
steps:
- name: Download FridaCore.xcframework artifact
uses: actions/download-artifact@v4
with:
name: FridaCore.xcframework
path: dist
- name: Rewrap into FridaCore.xcframework directory
shell: bash
run: |
set -euo pipefail
cd dist
mkdir -p FridaCore.xcframework
shopt -s dotglob
for f in *; do
if [[ "$f" != "FridaCore.xcframework" ]]; then
mv "$f" FridaCore.xcframework/
fi
done
- name: Zip FridaCore.xcframework
run: |
cd dist
zip -r FridaCore.xcframework.zip FridaCore.xcframework
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
files: |
dist/FridaCore.xcframework.zip
prerelease: ${{ contains(github.ref_name, 'snapshot') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
windows-shared:
strategy:
matrix:
include:
- { arch: x86_64, runner: windows-latest, msvc-arch: amd64, vcpkg-triplet: x64-windows-release }
- { arch: arm64, runner: windows-11-arm, msvc-arch: arm64, vcpkg-triplet: arm64-windows-release }
fail-fast: false
runs-on: ${{ matrix.runner }}
timeout-minutes: 120
steps:
- name: Check out repo
uses: actions/checkout@v6
with:
submodules: recursive
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.msvc-arch }}
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install build tools
run: |
pip install meson ninja setuptools
choco install pkgconfiglite -y
- name: Restore vcpkg cache
id: vcpkg-cache
uses: actions/cache/restore@v5
with:
path: C:\vcpkg\installed
key: vcpkg-${{ matrix.vcpkg-triplet }}-v5
- name: Install dependencies via vcpkg
if: steps.vcpkg-cache.outputs.cache-hit != 'true'
run: >-
vcpkg install
--overlay-triplets=${{ github.workspace }}/.github/vcpkg-triplets
--triplet ${{ matrix.vcpkg-triplet }}
glib json-glib libsoup
- name: Save vcpkg cache
if: steps.vcpkg-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: C:\vcpkg\installed
key: vcpkg-${{ matrix.vcpkg-triplet }}-v5
- name: Set up vcpkg environment
shell: bash
run: |
TRIPLET="${{ matrix.vcpkg-triplet }}"
VCPKG_PREFIX="C:/vcpkg/installed/$TRIPLET"
echo "$VCPKG_PREFIX/tools/pkgconf" >> $GITHUB_PATH
echo "$VCPKG_PREFIX/bin" >> $GITHUB_PATH
echo "$VCPKG_PREFIX/tools" >> $GITHUB_PATH
echo "PKG_CONFIG_PATH=$VCPKG_PREFIX/lib/pkgconfig" >> $GITHUB_ENV
- name: Configure
run: |
python -c "import sys; sys.path.insert(0, '.'); from releng.meson_configure import main; main()" `
. `
--host=windows-${{ matrix.arch }} `
--enable-shared `
--without-prebuilds=sdk `
"--prefix=$env:RUNNER_TEMP\frida-prefix" `
-- --force-fallback-for=openssl,libnghttp2 -Dcompiler_backend=disabled -Dtests=disabled
- name: Compile
run: python releng/meson/meson.py compile -C build
- name: Install
run: python releng/meson/meson.py install -C build --no-rebuild --skip-subprojects
- name: List installed files
shell: bash
run: find "$RUNNER_TEMP/frida-prefix" -type f | sort
+3 -1
View File
@@ -1,5 +1,8 @@
/build/
/deps/
/src/android-helper/build/
/src/barebone/agent/target/
/src/barebone/agent/xpacks/
/src/barebone/helpers/memory-scanner/target/
/src/barebone/helpers/target/
/src/barebone/node_modules/
@@ -9,7 +12,6 @@
/src/darwin/agent/osanalytics/osanalytics.js
/src/darwin/agent/reportcrash/node_modules/
/src/darwin/agent/reportcrash/reportcrash.js
/src/droidy/helper/build/
/src/fruity/helpers/build/
/src/linux/agent/system-server/node_modules/
/src/linux/agent/system-server/system-server.js
+153
View File
@@ -0,0 +1,153 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code)
when working with code in this repository.
## What This Is
frida-core is the core library of the Frida dynamic
instrumentation toolkit. It packages GumJS into a shared
library, injects JavaScript instrumentation into target
processes, provides bidirectional RPC communication with
injected scripts, and enumerates apps/processes/devices.
Written primarily in Vala with OS-specific glue in
C/Objective-C/asm.
## Build Commands
```bash
# First-time setup (fetches git submodules, configures build):
./configure \
--enable-compiler-backend \
--with-devkits=core \
--enable-tests
# Build:
make
# Run tests:
make test
# Rebuild after code changes
make
```
The `configure` script and `Makefile` are thin wrappers
around `releng/meson_configure.py` and
`releng/meson_make.py`. The actual build system is Meson
(>=1.1.0).
Build artifacts go into `build/`. The triplet is
platform-dependent (e.g. `linux-x86_64`).
## Build Requirements
- **Vala compiler**: Must be the Frida-optimized fork from
https://github.com/frida/vala (checks for `-frida` suffix
in version)
- **C/C++ standards**: gnu99/c99 for C, c++17 for C++
- **Go >= 1.24**: Required for compiler backend
- **Python 3**: Build scripts
## Architecture
### Backend System
The core abstraction is a pluggable backend system. Each
backend implements `HostSessionBackend` and provides a
`HostSessionProvider` to create sessions with target
processes:
- **local** — Injects into processes on the local system
(Linux, macOS, Windows, FreeBSD, QNX)
- **fruity** — iOS/tvOS/xrOS devices via USB/network
(QUIC, lockdown protocols)
- **droidy** — Android devices via ADB/JDWP
- **socket** — Remote devices via TCP (connects to
frida-server, frida-gadget, frida-portal)
- **barebone** — Minimal backend using QuickJS
- **simmy** — macOS Simulator
- **compiler** — TypeScript/ESBuild compilation backend
(Go + TypeScript in `src/compiler/`)
Backends are selected at build time via meson options
(e.g. `-Dlocal_backend=enabled`).
### Key Source Layout
- **`src/frida.vala`** — Public API: `DeviceManager`,
`Device`, `Session`, `Script`
- **`src/host-session-service.vala`** — Backend
orchestration, provider registration
- **`src/control-service.vala`** — the guts of frida-server
- **`src/portal-service.vala`** — the guts of frida-portal,
which looks like a frida-server that surfaces any joined
processes (think aggregator/reverse proxy)
- **`lib/base/`** — Core primitives: Session, RPC, streams,
sockets, P2P, buffers
- **`lib/agent/`** — In-process JavaScript agent runtime
- **`lib/payload/`** — Payload compilation and embedding
- **`lib/gadget/`** — Gadget (preloaded library)
implementation
- **`src/<platform>/`** — Platform-specific injectors and
helpers (`linux/`, `darwin/`, `windows/`, `freebsd/`,
`qnx/`)
- **`src/fruity/`** — iOS device protocol stack (USB, QUIC,
plist, XPC, LLDB)
- **`src/droidy/`** — Android device protocol stack
- **`src/compiler/`** — Go/TypeScript compiler backend
### Injection Flow
Each platform has its own injector (e.g. `Linjector` on
Linux, `Fruitjector` on Darwin, `Winjector` on Windows). A
helper process (`frida-helper`) performs privileged injection
operations out-of-process. Helpers and agents can be embedded
into the library or installed as separate files (controlled
by the `assets` meson option).
### Deliverables
- **frida-server** (`server/`) — Standalone daemon exposing
the full API over the network
- **frida-portal** (`portal/`) — Cluster node for
distributed instrumentation
- **frida-inject** (`inject/`) — CLI tool for one-shot
script injection
- **frida-gadget** (`lib/gadget/`) — Shared library for
preload-based instrumentation
### Resource Embedding
Build artifacts (frida-helper, frida-agent) are compiled
into resource blobs via `tools/resource-compiler.vala` and
embedding scripts (`src/embed-helper.py`,
`src/embed-agent.py`). On non-MSVC toolchains these become
`.S` assembly files; on MSVC they become `.obj` files.
## Tests
Tests are in `tests/` as Vala files using a custom async
test harness (`tests/async-harness.vala`). Test binary is
`tests/frida-tests`. Platform-specific runner scripts exist
(e.g. `tests/run-linux-x86_64.sh`).
Test modules: `test-system`, `test-injector`, `test-agent`,
`test-host-session`, `test-gadget`, `test-compiler`. Test
helper programs ("labrats") are in `tests/labrats/`.
## Code Style
### Function Order
Use newspaper/stepdown order: high-level entry points
first, low-level helpers and constants last. In C,
`main()` is always first. When ordering siblings at the
same level, use the chronological order of first use
within their caller.
## Commit Style
- Subject line: max 50 characters
- Body lines: wrap at 72 characters (use the full width, or
slightly less if it avoids making the next line awkward)
+49 -11
View File
@@ -1,15 +1,18 @@
# frida-core
Frida core library intended for static linking into bindings.
Frida core library.
- Lets you inject your own JavaScript instrumentation code into other processes,
optionally with your own [C code][] for performance-sensitive bits.
- Acts as a logistics layer that packages up [GumJS][] into a shared library.
- Provides a two-way communication channel for talking to your scripts,
if needed, and later unload them.
- Also lets you enumerate installed apps, running processes, and connected
devices.
- Written in [Vala][], with OS-specific glue code in C/Objective-C/asm.
- Lets you inject your own JavaScript instrumentation code
into other processes, optionally with your own [C code][]
for performance-sensitive bits.
- Acts as a logistics layer that packages up [GumJS][] into
a shared library.
- Provides a two-way communication channel for talking to
your scripts, if needed, and later unload them.
- Also lets you enumerate installed apps, running processes,
and connected devices.
- Written in [Vala][], with OS-specific glue code in
C/Objective-C/asm.
## Binaries
@@ -29,8 +32,43 @@ $ pip install frida # Python bindings
$ npm install frida # Node.js bindings
```
Or, for static linking into your own project written in a C-compatible language,
download a devkit from the Frida [releases][] page.
Or, for static linking into your own project written in a
C-compatible language, download a devkit from the Frida
[releases][] page.
## Distro Packaging
For building a shared library suitable for distro packaging:
```console
$ ./configure --enable-shared --without-prebuilds=sdk && make
```
This builds `libfrida-core-1.0.so` against system dependencies,
while `frida-agent.so` is built using Frida's SDK (with its GLib
fork, needed for the agent's inject/unload lifecycle).
Prerequisites on Fedora:
```console
$ sudo dnf install libgee-devel json-glib-devel \
libsoup3-devel libunwind-devel libdwarf-devel \
libnice-devel ngtcp2-crypto-ossl-devel
```
Prerequisites on Ubuntu:
```console
$ sudo apt install libgee-0.8-dev libjson-glib-dev \
libsoup-3.0-dev libunwind-dev libdwarf-dev \
libnice-dev libngtcp2-crypto-ossl-dev
```
Prerequisites on macOS:
```console
$ brew install libgee json-glib libsoup libnice capstone
```
## Internals
+212 -62
View File
@@ -9,6 +9,7 @@ import os
from pathlib import Path
import pickle
import platform
import re
import shlex
import shutil
import subprocess
@@ -35,6 +36,7 @@ def main(argv):
command.add_argument("top_builddir", help="top build directory", type=Path)
command.add_argument("frida_version", help="the Frida version")
command.add_argument("host_os", help="operating system binaries are being built for")
command.add_argument("host_os_family", help="operating system family, e.g. darwin")
command.add_argument("host_arch", help="architecture binaries are being built for")
command.add_argument("host_config", help="configuration binaries are being built for")
command.add_argument("compat", help="support for targets with a different architecture",
@@ -42,17 +44,20 @@ def main(argv):
command.add_argument("assets", help="whether assets are embedded vs installed and loaded at runtime")
command.add_argument("components", help="which components will be built",
type=parse_array_option_value)
command.add_argument("glib_flavor", help="upstream or frida", choices=["upstream", "frida"])
command.add_argument("compilers", help="compiler command arrays", nargs="+")
command.set_defaults(func=lambda args: setup(args.role,
args.builddir,
args.top_builddir,
args.frida_version,
args.host_os,
args.host_os_family,
args.host_arch,
args.host_config if args.host_config else None,
args.compat,
args.assets,
args.components,
args.glib_flavor,
parse_compilers(args.compilers)))
command = subparsers.add_parser("compile", help="compile compatibility assets")
@@ -113,11 +118,13 @@ def setup(role: Role,
top_builddir: Path,
frida_version: str,
host_os: str,
host_os_family: str,
host_arch: str,
host_config: Optional[str],
compat: set[str],
assets: str,
components: set[str],
glib_flavor: str,
compilers: Compilers):
try:
outputs: Mapping[str, Sequence[Output]] = OrderedDict()
@@ -149,9 +156,20 @@ def setup(role: Role,
other_triplet: Optional[str] = None
extra_environ: dict[str, str] = {}
if host_os == "windows" and host_arch == "x86_64" and host_config == "mingw":
other_label = "x86"
have_toolchain, other_triplet = detect_mingw_toolchain_for("x86")
if host_os == "windows" and host_arch in {"x86_64", "x86"}:
if host_arch == "x86_64":
other_label = "x86"
other_kind = "legacy"
else:
other_label = "x86_64"
other_kind = "modern"
if host_config == "mingw":
have_toolchain, other_triplet = detect_mingw_toolchain_for(other_label)
else:
have_toolchain = True
other_triplet = None
elif host_os == "linux" and host_arch == "x86_64" and host_config is None:
other_label = "x86"
other_triplet = "i686-linux-gnu"
@@ -179,21 +197,26 @@ def setup(role: Role,
raise ToolchainNotFoundError(f"unable to locate toolchain for {other_triplet}")
missing.append(MissingFeature(other_label, other_triplet))
if host_os == "windows" and host_arch == "x86_64" and have_toolchain:
group = OutputGroup("x86", other_triplet, extra_environ)
outputs[group] = [
Output(identifier="helper_legacy",
name=HELPER_FILE_WINDOWS.name,
file=HELPER_FILE_WINDOWS,
target=HELPER_TARGET),
Output(identifier="agent_legacy",
name=AGENT_FILE_WINDOWS.name,
file=AGENT_FILE_WINDOWS,
target=AGENT_TARGET),
]
if host_os == "windows" and host_arch in {"x86_64", "x86"} and have_toolchain:
group = OutputGroup(other_label, other_triplet, extra_environ)
outputs[group] = []
if "helper" in components:
outputs[group] += [
Output(identifier=f"helper_{other_kind}",
name=HELPER_FILE_WINDOWS.name,
file=HELPER_FILE_WINDOWS,
target=HELPER_TARGET),
]
if "agent" in components:
outputs[group] += [
Output(identifier=f"agent_{other_kind}",
name=AGENT_FILE_WINDOWS.name,
file=AGENT_FILE_WINDOWS,
target=AGENT_TARGET),
]
if "gadget" in components:
outputs[group] += [
Output(identifier="gadget_legacy",
Output(identifier=f"gadget_{other_kind}",
name=GADGET_FILE_WINDOWS.name,
file=GADGET_FILE_WINDOWS,
target=GADGET_TARGET),
@@ -207,16 +230,21 @@ def setup(role: Role,
other_arch = "arm64e"
kind = "modern"
group = OutputGroup(other_arch)
outputs[group] = [
Output(identifier=f"helper_{kind}",
name=f"frida-helper-{other_arch}",
file=HELPER_FILE_UNIX,
target=HELPER_TARGET),
Output(identifier=f"agent_{kind}",
name=f"frida-agent-{other_arch}.dylib",
file=AGENT_FILE_DARWIN,
target=AGENT_TARGET),
]
outputs[group] = []
if "helper" in components:
outputs[group] += [
Output(identifier=f"helper_{kind}",
name=f"frida-helper-{other_arch}",
file=HELPER_FILE_UNIX,
target=HELPER_TARGET),
]
if "agent" in components:
outputs[group] += [
Output(identifier=f"agent_{kind}",
name=f"frida-agent-{other_arch}.dylib",
file=AGENT_FILE_DARWIN,
target=AGENT_TARGET),
]
if "gadget" in components:
outputs[group] += [
Output(identifier=f"gadget_{kind}",
@@ -234,16 +262,21 @@ def setup(role: Role,
if host_os == "linux" and host_arch == "x86_64" and have_toolchain:
group = OutputGroup("x86", other_triplet, extra_environ)
outputs[group] = [
Output(identifier="helper_legacy",
name=HELPER_FILE_UNIX.name,
file=HELPER_FILE_UNIX,
target=HELPER_TARGET),
Output(identifier="agent_legacy",
name=AGENT_FILE_ELF.name,
file=AGENT_FILE_ELF,
target=AGENT_TARGET),
]
outputs[group] = []
if "helper" in components:
outputs[group] += [
Output(identifier="helper_legacy",
name=HELPER_FILE_UNIX.name,
file=HELPER_FILE_UNIX,
target=HELPER_TARGET),
]
if "agent" in components:
outputs[group] += [
Output(identifier="agent_legacy",
name=AGENT_FILE_ELF.name,
file=AGENT_FILE_ELF,
target=AGENT_TARGET),
]
if "gadget" in components:
outputs[group] += [
Output(identifier="gadget_legacy",
@@ -254,16 +287,21 @@ def setup(role: Role,
if host_os == "android" and host_arch in {"arm64", "x86_64"}:
group = OutputGroup("arm" if host_arch == "arm64" else "x86")
outputs[group] = [
Output(identifier="helper_legacy",
name=HELPER_FILE_UNIX.name,
file=HELPER_FILE_UNIX,
target=HELPER_TARGET),
Output(identifier="agent_legacy",
name=AGENT_FILE_ELF.name,
file=AGENT_FILE_ELF,
target=AGENT_TARGET),
]
outputs[group] = []
if "helper" in components:
outputs[group] += [
Output(identifier="helper_legacy",
name=HELPER_FILE_UNIX.name,
file=HELPER_FILE_UNIX,
target=HELPER_TARGET),
]
if "agent" in components:
outputs[group] += [
Output(identifier="agent_legacy",
name=AGENT_FILE_ELF.name,
file=AGENT_FILE_ELF,
target=AGENT_TARGET),
]
if "gadget" in components:
outputs[group] += [
Output(identifier="gadget_legacy",
@@ -284,18 +322,24 @@ def setup(role: Role,
continue
else:
emulated_triplet = None
outputs[OutputGroup(emulated_arch, emulated_triplet, extra_environ)] = [
Output(identifier=f"helper_emulated_{kind}",
name=HELPER_FILE_WINDOWS.name.replace(".exe", f"-{emulated_arch}.exe"),
file=HELPER_FILE_WINDOWS,
target=HELPER_TARGET),
Output(identifier=f"agent_emulated_{kind}",
name=AGENT_FILE_WINDOWS.name.replace(".dll", f"-{emulated_arch}.dll"),
file=AGENT_FILE_WINDOWS,
target=AGENT_TARGET),
]
group = OutputGroup(emulated_arch, emulated_triplet, extra_environ)
outputs[group] = []
if "helper" in components:
outputs[group] += [
Output(identifier=f"helper_emulated_{kind}",
name=HELPER_FILE_WINDOWS.name.replace(".exe", f"-{emulated_arch}.exe"),
file=HELPER_FILE_WINDOWS,
target=HELPER_TARGET),
]
if "agent" in components:
outputs[group] += [
Output(identifier=f"agent_emulated_{kind}",
name=AGENT_FILE_WINDOWS.name.replace(".dll", f"-{emulated_arch}.dll"),
file=AGENT_FILE_WINDOWS,
target=AGENT_TARGET),
]
if host_os == "android" and host_arch in {"x86_64", "x86"}:
if host_os == "android" and host_arch in {"x86_64", "x86"} and "agent" in components:
outputs[OutputGroup("arm")] = [
Output(identifier="agent_emulated_legacy",
name="frida-agent-arm.so",
@@ -310,10 +354,35 @@ def setup(role: Role,
target=AGENT_TARGET),
]
raw_allowed_prebuilds = os.environ.get("FRIDA_ALLOWED_PREBUILDS")
allowed_prebuilds = set(raw_allowed_prebuilds.split(",")) if raw_allowed_prebuilds is not None else None
if glib_flavor == "upstream":
kind = "modern" if arch_is_modern(host_os, host_arch) else "legacy"
_, agent_file, gadget_file = native_file_paths(host_os)
group = OutputGroup(host_arch)
outputs[group] = []
if "agent" in components:
outputs[group] += [
Output(identifier=f"agent_{kind}",
name=arch_suffixed_name(agent_file.name, host_arch),
file=agent_file,
target=AGENT_TARGET),
]
if "gadget" in components:
outputs[group] += [
Output(identifier=f"gadget_{kind}",
name=arch_suffixed_name(gadget_file.name, host_arch),
file=gadget_file,
target=GADGET_TARGET),
]
state = State(role, builddir, top_builddir, frida_version, host_os, host_config, allowed_prebuilds, outputs)
outputs = OrderedDict((g, items) for g, items in outputs.items() if items)
raw_allowed_prebuilds = os.environ.get("FRIDA_ALLOWED_PREBUILDS")
if raw_allowed_prebuilds is not None:
allowed_prebuilds = set(filter(None, raw_allowed_prebuilds.split(",")))
else:
allowed_prebuilds = None
state = State(role, builddir, top_builddir, frida_version, host_os, host_os_family, host_config, glib_flavor, allowed_prebuilds, outputs)
serialized_state = base64.b64encode(pickle.dumps(state)).decode('ascii')
if missing:
@@ -349,7 +418,9 @@ class State:
top_builddir: Path
frida_version: str
host_os: str
host_os_family: str
host_config: Optional[str]
glib_flavor: str
allowed_prebuilds: Optional[set[str]]
outputs: Mapping[OutputGroup, Sequence[Output]]
@@ -429,20 +500,33 @@ def compile(privdir: Path, state: State):
host_machine = MachineSpec(state.host_os, group.arch, state.host_config, group.triplet)
if state.glib_flavor == "upstream":
allowed = None
else:
allowed = state.allowed_prebuilds
if state.glib_flavor == "upstream":
forwarded_options = [o for o in options if not is_stripped_compat_option(o)]
forwarded_options += ["-Ddefault_library=static"]
else:
forwarded_options = [o for o in options if not is_overridden_compat_option(o)]
configure(sourcedir=REPO_ROOT,
builddir=workdir,
host_machine=host_machine,
environ={**build_env, **group.extra_environ},
allowed_prebuilds=state.allowed_prebuilds,
allowed_prebuilds=allowed,
apple_min_os=detect_parent_apple_min_os(top_builddir, state.host_os, state.host_os_family),
extra_meson_options=[
"-Dcompiler_backend=disabled",
"-Dassets=installed",
"-Dhelper_modern=",
"-Dhelper_legacy=",
"-Dagent_modern=",
"-Dagent_legacy=",
"-Dagent_emulated_modern=",
"-Dagent_emulated_legacy=",
*options,
*forwarded_options,
],
call_meson=call_internal_meson,
on_progress=lambda progress: None)
@@ -473,6 +557,18 @@ def compile(privdir: Path, state: State):
(state.builddir / DEPFILE_FILENAME).write_text("\n".join(depfile_lines), encoding="utf-8")
def is_stripped_compat_option(o: str) -> bool:
if is_overridden_compat_option(o):
return True
name = o.split("=", 1)[0].removeprefix("-D")
return name in STRIPPED_COMPAT_OPTIONS or name.endswith(":default_library")
def is_overridden_compat_option(o: str) -> bool:
name = o.split("=", 1)[0].removeprefix("-D")
return name in OVERRIDDEN_COMPAT_OPTIONS
def load_meson_options(top_builddir: Path,
role: Role,
subprojects: set[str]) -> Sequence[str]:
@@ -582,6 +678,19 @@ def ensure_submodules_checked_out(releng_location: Path):
check=True)
def detect_parent_apple_min_os(top_builddir: Path,
host_os: str,
host_os_family: str) -> Optional[Mapping[str, str]]:
if host_os_family != "darwin":
return None
pattern = re.compile(r"-target['\"],\s*['\"][^-]+-apple-" + re.escape(host_os) + r"([0-9.]+)")
for native_file in top_builddir.glob(f"frida-{host_os}-*.txt"):
match = pattern.search(native_file.read_text(encoding="utf-8"))
if match is not None:
return {host_os: match.group(1)}
return None
def detect_relevant_subprojects(releng_location: Path) -> dict[str, Path]:
subprojects = detect_relevant_subprojects_in(REPO_ROOT, releng_location)
gum_location = subprojects.get("frida-gum")
@@ -632,9 +741,48 @@ def detect_mingw_toolchain_for(arch: str) -> Tuple[bool, Optional[str]]:
return (found, triplet)
def arch_is_modern(host_os: str, host_arch: str) -> bool:
if host_os in {"macos", "ios", "tvos"} and host_arch == "arm64":
return host_arch == "arm64e"
return host_arch in MODERN_ARCHS
def native_file_paths(host_os: str) -> Tuple[Path, Path, Path]:
if host_os == "windows":
return (HELPER_FILE_WINDOWS, AGENT_FILE_WINDOWS, GADGET_FILE_WINDOWS)
elif host_os in {"macos", "ios", "tvos"}:
return (HELPER_FILE_UNIX, AGENT_FILE_DARWIN, GADGET_FILE_DARWIN)
else:
return (HELPER_FILE_UNIX, AGENT_FILE_ELF, GADGET_FILE_ELF)
def arch_suffixed_name(name: str, arch: str) -> str:
stem, _, ext = name.partition(".")
if ext:
return f"{stem}-{arch}.{ext}"
return f"{stem}-{arch}"
STATE_FILENAME = "state.dat"
DEPFILE_FILENAME = "compat.deps"
STRIPPED_COMPAT_OPTIONS = {
"default_library",
"frida-gum:gumjs",
"frida-gum:inspector",
}
OVERRIDDEN_COMPAT_OPTIONS = {
"compiler_backend",
"assets",
"helper_modern",
"helper_legacy",
"agent_modern",
"agent_legacy",
"agent_emulated_modern",
"agent_emulated_legacy",
}
HELPER_TARGET = "frida-helper"
HELPER_FILE_WINDOWS = Path("src") / "frida-helper.exe"
HELPER_FILE_UNIX = Path("src") / "frida-helper"
@@ -659,6 +807,8 @@ MSVS_ENVVARS = {
"LIB",
}
MODERN_ARCHS = {"x86_64", "arm64", "arm64e", "mips64", "riscv64"}
MINGW_ARCHS = {
"x86": "i686",
"arm64": "aarch64",
+15
View File
@@ -0,0 +1,15 @@
import os
import shutil
import sys
src = sys.argv[1]
install_subdir = sys.argv[2]
install_name = sys.argv[3]
destdir_prefix = os.environ["MESON_INSTALL_DESTDIR_PREFIX"]
dst_dir = os.path.join(destdir_prefix, install_subdir)
dst = os.path.join(dst_dir, install_name)
os.makedirs(dst_dir, exist_ok=True)
shutil.copy2(src, dst)
print(f"Installing {os.path.basename(src)} to {dst_dir}/{install_name}")
+40 -2
View File
@@ -28,6 +28,9 @@ if no_overridden_compat_bits
build_py = [python, files('build.py')]
components = []
if have_local_backend
components += ['helper', 'agent']
endif
if build_gadget
components += 'gadget'
endif
@@ -42,11 +45,13 @@ if no_overridden_compat_bits
meson.global_build_root(),
frida_version,
host_os,
host_os_family,
host_abi,
host_config,
','.join(get_option('compat')),
get_option('assets'),
assets_mode,
','.join(components),
have_shared_glib ? 'upstream' : 'frida',
'--',
'>>>', cc.cmd_array(), '<<<',
'>>>', cpp.cmd_array(), '<<<',
@@ -64,18 +69,27 @@ if no_overridden_compat_bits
depfile = lines[4]
state = lines[5]
native_arch_suffix = '-' + host_abi
if host_os_family == 'darwin'
install = false
install_dir = asset_dir
else
install = true
install_dir = []
i = 0
foreach varname : varnames
if varname != 'arch_support_bundle' and (get_option('assets') == 'installed' or varname.startswith('gadget_'))
output_name = outputs[i]
needs_rename = output_name.contains(native_arch_suffix) or varname.contains('_emulated_')
should_install = varname != 'arch_support_bundle' \
and not needs_rename \
and (assets_mode == 'installed' or varname.startswith('gadget_'))
if should_install
install_dir += varname.endswith('_modern') ? asset_dir_modern : asset_dir_legacy
else
install_dir += false
endif
i += 1
endforeach
endif
@@ -96,6 +110,7 @@ if no_overridden_compat_bits
foreach output : arch_support.to_list()
outpath = output.full_path()
varname = varnames[i]
output_name = outputs[i]
set_variable(varname, outpath)
@@ -115,6 +130,29 @@ if no_overridden_compat_bits
assert(false, f'unexpected variable name: @varname@')
endif
if host_os_family != 'darwin'
rename_target_dir = ''
if output_name.contains(native_arch_suffix)
rename_target_dir = asset_dir
elif varname.contains('_emulated_')
emulated_arch = output_name.split('-')[-1].split('.')[0]
rename_target_dir = root_asset_dir / emulated_arch
endif
if rename_target_dir != ''
install_name = output_name.replace(native_arch_suffix, '')
foreach arch_suffix : ['-x86_64', '-x86', '-arm64', '-arm']
install_name = install_name.replace(arch_suffix, '')
endforeach
if assets_mode == 'installed' or varname.startswith('gadget_')
meson.add_install_script(python, files('install-renamed.py'),
outpath,
rename_target_dir,
install_name,
)
endif
endif
endif
i += 1
endforeach
else
+2 -15
View File
@@ -4,27 +4,14 @@ inject_sources = [
]
system_vala_args = []
if host_os_family != 'windows'
system_vala_args += ['--pkg=posix']
endif
extra_link_args = []
extra_link_depends = []
if host_os_family == 'darwin'
symlist = 'frida-inject.symbols'
extra_link_args += ['-Wl,-exported_symbols_list,' + meson.current_source_dir() / symlist]
extra_link_depends += [symlist]
elif host_os_family != 'windows'
symscript = 'frida-inject.version'
extra_link_args += ['-Wl,--version-script,' + meson.current_source_dir() / symscript]
extra_link_depends += [symscript]
endif
raw_inject = executable('frida-inject-raw', inject_sources,
vala_args: [core_vala_args, system_vala_args],
link_args: extra_link_args,
link_depends: extra_link_depends,
link_args: executable_no_exports_link_args,
link_depends: executable_no_exports_link_depends,
dependencies: [json_glib_dep, core_dep],
)
+13 -7
View File
@@ -9,7 +9,9 @@
# include <signal.h>
# endif
#endif
#ifdef HAVE_GIOOPENSSL
#if defined (HAVE_GIOAPPLE)
# include <gioapple.h>
#elif defined (HAVE_GIOOPENSSL)
# include <gioopenssl.h>
#endif
@@ -24,12 +26,16 @@ _frida_agent_environment_init (void)
been_here = TRUE;
#endif
gum_init_embedded ();
#ifdef _MSC_VER
frida_libc_shim_init ();
#endif
gio_init ();
g_thread_set_garbage_handler (_frida_agent_on_pending_thread_garbage, NULL);
#ifdef HAVE_GIOOPENSSL
#if defined (HAVE_GIOAPPLE)
g_io_module_apple_register ();
#elif defined (HAVE_GIOOPENSSL)
g_io_module_openssl_register ();
#endif
@@ -49,18 +55,18 @@ void
_frida_agent_environment_deinit (void)
{
#ifndef HAVE_MUSL
frida_libc_shim_prepare_to_deinit ();
gum_shutdown ();
gio_shutdown ();
glib_shutdown ();
gio_deinit ();
gum_deinit_embedded ();
frida_run_atexit_handlers ();
# ifdef HAVE_DARWIN
/* Do what frida_deinit_memory() does on the other platforms. */
gum_internal_heap_unref ();
# if defined (_MSC_VER) || defined (HAVE_DARWIN)
frida_libc_shim_deinit ();
# endif
#endif
}
+5 -5
View File
@@ -1400,12 +1400,12 @@ namespace Frida.Agent {
if (nb_api.unload_library == null)
parameters.append ("|eternal|sticky");
/*
* Disable ExitMonitor to work around a bug in Android's libndk_translation.so on Android 11.
* We need to avoid modifying libc.so ranges that the translator potentially depends on, to
* avoid blowing up when Interceptor's CPU cache flush results in the translated code being
* discarded, which seems like an edge-case the translator doesn't handle.
* Disable Exceptor and ExitMonitor to work around a bug in Android's libndk_translation.so
* on Android 11. We need to avoid modifying libc.so ranges that the translator potentially
* depends on, to avoid blowing up when Interceptor's CPU cache flush results in the translated
* code being discarded, which seems like an edge-case the translator doesn't handle.
*/
parameters.append ("|exit-monitor:off");
parameters.append ("|exceptor:off|exit-monitor:off");
emulated_bridge_state = new BridgeState (parameters.str);
+14
View File
@@ -0,0 +1,14 @@
FRIDA_1.0 {
global:
frida_agent_main;
local:
*;
};
GLIBC_2.2.5 {
local:
fopen*;
fseeko*;
ftello*;
} FRIDA_1.0;
+11 -5
View File
@@ -28,7 +28,13 @@ if host_os_family == 'windows'
elif host_os_family == 'darwin'
extra_link_args += '-Wl,-exported_symbol,_frida_agent_main'
else
symscript = (host_os == 'android') ? 'frida-agent-android.version' : 'frida-agent.version'
if libc == 'glibc'
symscript = 'frida-agent-glibc.version'
elif host_os == 'android'
symscript = 'frida-agent-android.version'
else
symscript = 'frida-agent.version'
endif
extra_link_args += '-Wl,--version-script,' + meson.current_source_dir() / symscript
extra_link_depends += symscript
endif
@@ -50,9 +56,9 @@ raw_agent = shared_library('frida-agent-raw', agent_sources,
dependencies: [gio_dep, gee_dep, gum_dep, gumjs_dep, base_dep, pipe_dep, tls_provider_dep, payload_dep],
)
operations = ['--move', 'constructor', 'frida_init_memory', 'first']
operations = ['--move', 'constructor', 'frida_libc_shim_init', 'first']
if host_os_family != 'darwin'
operations += ['--move', 'destructor', 'frida_deinit_memory', 'first']
operations += ['--move', 'destructor', 'frida_libc_shim_deinit', 'first']
endif
modulated_agent = custom_target('frida-agent-modulated',
input: raw_agent,
@@ -61,7 +67,7 @@ modulated_agent = custom_target('frida-agent-modulated',
)
need_universal_agent = host_os_family == 'darwin' \
and get_option('assets') == 'installed' \
and assets_mode == 'installed' \
and agent_compat != ''
if host_os_family == 'darwin'
@@ -74,7 +80,7 @@ agent = custom_target('frida-agent',
output: need_universal_agent ? f'@agent_name@-@host_abi@' : agent_name,
command: post_process + ['shared-library', identity],
build_by_default: true,
install: get_option('assets') == 'installed' and not need_universal_agent,
install: assets_mode == 'installed' and not need_universal_agent,
install_dir: asset_dir,
)
+50
View File
@@ -0,0 +1,50 @@
namespace Frida {
public class AssetLocation : Object {
public string libdir {
get;
construct;
}
public static AssetLocation detect () {
string? module_path = null;
Gum.Address our_address = Gum.Address.from_pointer (Gum.strip_code_pointer ((void *) detect));
Gum.Process.enumerate_modules ((details) => {
var range = details.range;
if (our_address >= range.base_address && our_address < range.base_address + range.size) {
module_path = details.path;
return false;
}
return true;
});
assert (module_path != null);
string libdir = Path.get_dirname (module_path);
string basename = Path.get_basename (libdir).down ();
if (basename == "bin" || basename == "sbin") {
string parent = Path.get_dirname (libdir);
string candidate = Path.build_filename (parent, Config.FRIDA_LIBDIR);
if (FileUtils.test (candidate, IS_DIR))
libdir = candidate;
}
return new AssetLocation (libdir);
}
private AssetLocation (string libdir) {
Object (libdir: libdir);
}
public string derive_asset_path (string arch, string filename) {
#if DARWIN
return Path.build_filename (libdir, Config.FRIDA_LIBDIR_NAME, filename);
#else
return Path.build_filename (libdir, Config.FRIDA_LIBDIR_NAME, arch, filename);
#endif
}
public string derive_plugin_path (string filename) {
return Path.build_filename (libdir, Config.FRIDA_LIBDIR_NAME, "plugins", filename);
}
}
}
+12
View File
@@ -0,0 +1,12 @@
#include "frida-base.h"
GBytes *
frida_make_bytes_with_owner (GType t_type,
GBoxedCopyFunc t_dup_func,
GDestroyNotify t_destroy_func,
void * data,
gsize size,
gpointer owner)
{
return g_bytes_new_with_free_func (data, size, t_destroy_func, owner);
}
+319 -122
View File
@@ -309,8 +309,17 @@ namespace Frida {
public sealed class Buffer : Object {
public Bytes bytes {
get;
construct;
get {
if (_bytes == null)
_bytes = new Bytes.static (_data);
return _bytes;
}
}
public size_t size {
get {
return _data.length;
}
}
public ByteOrder byte_order {
@@ -323,20 +332,39 @@ namespace Frida {
construct;
}
private unowned uint8 * data;
private size_t size;
private Bytes? _bytes;
private unowned uint8[] _data;
public Buffer (Bytes bytes, ByteOrder byte_order = HOST, uint pointer_size = (uint) sizeof (size_t)) {
Object (
bytes: bytes,
byte_order: byte_order,
pointer_size: pointer_size
);
reset_bytes (bytes);
}
construct {
data = bytes.get_data ();
size = bytes.get_size ();
public Buffer.from_data (uint8[] data, ByteOrder byte_order = HOST, uint pointer_size = (uint) sizeof (size_t)) {
Object (
byte_order: byte_order,
pointer_size: pointer_size
);
reset_data (data);
}
public void reset_bytes (Bytes bytes) {
_bytes = bytes;
_data = bytes.get_data ();
}
public void reset_data (uint8[] data) {
_bytes = null;
_data = data;
}
public unowned uint8[] peek_data () {
return _data;
}
public uint64 read_pointer (size_t offset) {
@@ -356,10 +384,20 @@ namespace Frida {
return *((int8 *) get_pointer (offset, sizeof (int8)));
}
public unowned Buffer write_int8 (size_t offset, int8 val) {
*((int8 *) get_pointer (offset, sizeof (int8))) = val;
return this;
}
public uint8 read_uint8 (size_t offset) {
return *get_pointer (offset, sizeof (uint8));
}
public unowned Buffer write_uint8 (size_t offset, uint8 val) {
*((uint8 *) get_pointer (offset, sizeof (uint8))) = val;
return this;
}
public int16 read_int16 (size_t offset) {
int16 val = *((int16 *) get_pointer (offset, sizeof (int16)));
return (byte_order == BIG_ENDIAN)
@@ -367,6 +405,14 @@ namespace Frida {
: int16.from_little_endian (val);
}
public unowned Buffer write_int16 (size_t offset, int16 val) {
int16 target_val = (byte_order == BIG_ENDIAN)
? val.to_big_endian ()
: val.to_little_endian ();
*((int16 *) get_pointer (offset, sizeof (int16))) = target_val;
return this;
}
public uint16 read_uint16 (size_t offset) {
uint16 val = *((uint16 *) get_pointer (offset, sizeof (uint16)));
return (byte_order == BIG_ENDIAN)
@@ -374,6 +420,14 @@ namespace Frida {
: uint16.from_little_endian (val);
}
public unowned Buffer write_uint16 (size_t offset, uint16 val) {
uint16 target_val = (byte_order == BIG_ENDIAN)
? val.to_big_endian ()
: val.to_little_endian ();
*((uint16 *) get_pointer (offset, sizeof (uint16))) = target_val;
return this;
}
public int32 read_int32 (size_t offset) {
int32 val = *((int32 *) get_pointer (offset, sizeof (int32)));
return (byte_order == BIG_ENDIAN)
@@ -381,6 +435,14 @@ namespace Frida {
: int32.from_little_endian (val);
}
public unowned Buffer write_int32 (size_t offset, int32 val) {
int32 target_val = (byte_order == BIG_ENDIAN)
? val.to_big_endian ()
: val.to_little_endian ();
*((int32 *) get_pointer (offset, sizeof (int32))) = target_val;
return this;
}
public uint32 read_uint32 (size_t offset) {
uint32 val = *((uint32 *) get_pointer (offset, sizeof (uint32)));
return (byte_order == BIG_ENDIAN)
@@ -403,6 +465,14 @@ namespace Frida {
: int64.from_little_endian (val);
}
public unowned Buffer write_int64 (size_t offset, int64 val) {
int64 target_val = (byte_order == BIG_ENDIAN)
? val.to_big_endian ()
: val.to_little_endian ();
*((int64 *) get_pointer (offset, sizeof (int64))) = target_val;
return this;
}
public uint64 read_uint64 (size_t offset) {
uint64 val = *((uint64 *) get_pointer (offset, sizeof (uint64)));
return (byte_order == BIG_ENDIAN)
@@ -428,17 +498,13 @@ namespace Frida {
return *((double *) &bits);
}
public string read_string (size_t offset) throws Error {
public unowned string read_string (size_t offset) throws Error {
string * start = (string *) get_pointer (offset, sizeof (char));
size_t max_length = size - offset;
size_t max_length = _data.length - offset;
string * end = memchr (start, 0, max_length);
if (end == null)
throw new Error.PROTOCOL ("Missing null character");
size_t size = end - start;
string val = start->substring (0, (long) size);
if (!val.validate ())
throw new Error.PROTOCOL ("Invalid UTF-8 string");
return val;
return start;
}
[CCode (cname = "memchr", cheader_filename = "string.h")]
@@ -446,17 +512,14 @@ namespace Frida {
public string read_fixed_string (size_t offset, size_t size) throws Error {
string * start = (string *) get_pointer (offset, size);
size_t max_length = size - offset;
size_t max_length = size_t.min (size, _data.length - offset);
string * end = memchr (start, 0, max_length);
size_t n;
if (end != null)
n = end - start;
else
n = size;
string val = start->substring (0, (long) n);
if (!val.validate ())
throw new Error.PROTOCOL ("Invalid UTF-8 string");
return val;
return start->substring (0, (long) n);
}
public unowned Buffer write_string (size_t offset, string val) {
@@ -465,136 +528,270 @@ namespace Frida {
return this;
}
public Bytes read_bytes (size_t offset, size_t size) {
if (_bytes == null)
return make_bytes_with_owner ((uint8 *) _data + offset, _data.length - size, this);
return _bytes[offset:offset + size];
}
public unowned uint8[] read_data (size_t offset, size_t size) {
unowned uint8 * ptr = get_pointer (offset, size);
return ((uint8[]) ptr)[:size];
}
public unowned Buffer write_bytes (size_t offset, Bytes bytes) {
size_t size = bytes.get_size ();
Memory.copy (get_pointer (offset, size), bytes.get_data (), size);
return this;
}
private uint8 * get_pointer (size_t offset, size_t n) {
size_t minimum_size = offset + n;
assert (size >= minimum_size);
return data + offset;
assert (_data.length >= minimum_size);
return (uint8 *) _data + offset;
}
}
public sealed class BufferReader {
public Buffer buffer {
get;
}
public size_t offset {
get;
}
public size_t available {
get {
return buffer.bytes.get_size () - offset;
return _size - _offset;
}
}
private Buffer buffer;
private size_t offset = 0;
private size_t _size;
public BufferReader (Buffer buf) {
buffer = buf;
public BufferReader (Buffer buffer) {
reset (buffer);
}
public uint64 read_pointer (size_t offset) throws Error {
var pointer_size = buffer.pointer_size;
check_available (pointer_size);
var ptr = buffer.read_pointer (offset);
offset += pointer_size;
return ptr;
public void reset (Buffer buffer) {
_buffer = buffer;
_size = buffer.size;
_offset = 0;
}
public int8 read_int8 () throws Error {
check_available (sizeof (int8));
var val = buffer.read_int8 (offset);
offset += sizeof (int8);
return val;
public void reset_at (Buffer buffer, size_t offset) throws Error {
_buffer = buffer;
_size = buffer.size;
seek (offset);
}
public uint8 read_uint8 () throws Error {
check_available (sizeof (uint8));
var val = buffer.read_uint8 (offset);
offset += sizeof (uint8);
return val;
}
public int16 read_int16 () throws Error {
check_available (sizeof (int16));
var val = buffer.read_int16 (offset);
offset += sizeof (int16);
return val;
}
public uint16 read_uint16 () throws Error {
check_available (sizeof (uint16));
var val = buffer.read_uint16 (offset);
offset += sizeof (uint16);
return val;
}
public int32 read_int32 () throws Error {
check_available (sizeof (int32));
var val = buffer.read_int32 (offset);
offset += sizeof (int32);
return val;
}
public uint32 read_uint32 () throws Error {
check_available (sizeof (uint32));
var val = buffer.read_uint32 (offset);
offset += sizeof (uint32);
return val;
}
public int64 read_int64 () throws Error {
check_available (sizeof (int64));
var val = buffer.read_int64 (offset);
offset += sizeof (int64);
return val;
}
public uint64 read_uint64 () throws Error {
check_available (sizeof (uint64));
var val = buffer.read_uint64 (offset);
offset += sizeof (uint64);
return val;
}
public float read_float () throws Error {
check_available (sizeof (float));
var val = buffer.read_float (offset);
offset += sizeof (float);
return val;
}
public double read_double () throws Error {
check_available (sizeof (double));
var val = buffer.read_double (offset);
offset += sizeof (double);
return val;
}
public string read_string () throws Error {
check_available (1);
var val = buffer.read_string (offset);
offset += val.length + 1;
return val;
}
public string read_fixed_string (size_t size) throws Error {
check_available (size);
var val = buffer.read_fixed_string (offset, size);
offset += size;
return val;
}
public Bytes read_bytes (size_t size) throws Error {
check_available (size);
var val = buffer.bytes[offset:offset + size];
offset += size;
return val;
public unowned BufferReader seek (size_t offset) throws Error {
if (offset > _size)
throw new Error.PROTOCOL ("Malformed buffer: truncated");
_offset = offset;
return this;
}
public unowned BufferReader skip (size_t n) throws Error {
check_available (n);
offset += n;
_offset += n;
return this;
}
public unowned BufferReader align (size_t alignment) throws Error {
size_t mask = alignment - 1;
size_t rem = _offset & mask;
if (rem != 0)
skip (alignment - rem);
return this;
}
public uint64 peek_pointer () throws Error {
var pointer_size = _buffer.pointer_size;
check_available (pointer_size);
return _buffer.read_pointer (_offset);
}
public uint64 read_pointer () throws Error {
var pointer_size = _buffer.pointer_size;
check_available (pointer_size);
var ptr = _buffer.read_pointer (_offset);
_offset += pointer_size;
return ptr;
}
public int8 peek_int8 () throws Error {
check_available (sizeof (int8));
return _buffer.read_int8 (_offset);
}
public int8 read_int8 () throws Error {
check_available (sizeof (int8));
var val = _buffer.read_int8 (_offset);
_offset += sizeof (int8);
return val;
}
public uint8 peek_uint8 () throws Error {
check_available (sizeof (uint8));
return _buffer.read_uint8 (_offset);
}
public uint8 read_uint8 () throws Error {
check_available (sizeof (uint8));
var val = _buffer.read_uint8 (_offset);
_offset += sizeof (uint8);
return val;
}
public int16 peek_int16 () throws Error {
check_available (sizeof (int16));
return _buffer.read_int16 (_offset);
}
public int16 read_int16 () throws Error {
check_available (sizeof (int16));
var val = _buffer.read_int16 (_offset);
_offset += sizeof (int16);
return val;
}
public uint16 peek_uint16 () throws Error {
check_available (sizeof (uint16));
return _buffer.read_uint16 (_offset);
}
public uint16 read_uint16 () throws Error {
check_available (sizeof (uint16));
var val = _buffer.read_uint16 (_offset);
_offset += sizeof (uint16);
return val;
}
public int32 peek_int32 () throws Error {
check_available (sizeof (int32));
return _buffer.read_int32 (_offset);
}
public int32 read_int32 () throws Error {
check_available (sizeof (int32));
var val = _buffer.read_int32 (_offset);
_offset += sizeof (int32);
return val;
}
public uint32 peek_uint32 () throws Error {
check_available (sizeof (uint32));
return _buffer.read_uint32 (_offset);
}
public uint32 read_uint32 () throws Error {
check_available (sizeof (uint32));
var val = _buffer.read_uint32 (_offset);
_offset += sizeof (uint32);
return val;
}
public int64 peek_int64 () throws Error {
check_available (sizeof (int64));
return _buffer.read_int64 (_offset);
}
public int64 read_int64 () throws Error {
check_available (sizeof (int64));
var val = _buffer.read_int64 (_offset);
_offset += sizeof (int64);
return val;
}
public uint64 peek_uint64 () throws Error {
check_available (sizeof (uint64));
return _buffer.read_uint64 (_offset);
}
public uint64 read_uint64 () throws Error {
check_available (sizeof (uint64));
var val = _buffer.read_uint64 (_offset);
_offset += sizeof (uint64);
return val;
}
public float peek_float () throws Error {
check_available (sizeof (float));
return _buffer.read_float (_offset);
}
public float read_float () throws Error {
check_available (sizeof (float));
var val = _buffer.read_float (_offset);
_offset += sizeof (float);
return val;
}
public double peek_double () throws Error {
check_available (sizeof (double));
return _buffer.read_double (_offset);
}
public double read_double () throws Error {
check_available (sizeof (double));
var val = _buffer.read_double (_offset);
_offset += sizeof (double);
return val;
}
public unowned string peek_string () throws Error {
check_available (1);
return _buffer.read_string (_offset);
}
public unowned string read_string () throws Error {
check_available (1);
unowned string val = _buffer.read_string (_offset);
_offset += val.length + 1;
return val;
}
public string peek_fixed_string (size_t size) throws Error {
check_available (size);
return _buffer.read_fixed_string (_offset, size);
}
public string read_fixed_string (size_t size) throws Error {
check_available (size);
var val = _buffer.read_fixed_string (_offset, size);
_offset += size;
return val;
}
public unowned uint8[] peek_data (size_t size) throws Error {
check_available (size);
return _buffer.read_data (_offset, size);
}
public unowned uint8[] read_data (size_t size) throws Error {
check_available (size);
unowned uint8[] slice = _buffer.read_data (_offset, size);
_offset += size;
return slice;
}
public Bytes read_bytes (size_t size) throws Error {
check_available (size);
var val = _buffer.read_bytes (_offset, size);
_offset += size;
return val;
}
public unowned uint8[] read_remaining_data () throws Error {
return read_data (available);
}
private void check_available (size_t n) throws Error {
if (available < n)
throw new Error.PROTOCOL ("Malformed buffer: truncated");
}
}
public extern Bytes make_bytes_with_owner<T> (void * data, size_t size, owned T? owner = null);
}
+37
View File
@@ -0,0 +1,37 @@
#ifndef __FRIDA_ATOMICS_H__
#define __FRIDA_ATOMICS_H__
#include <glib.h>
G_BEGIN_DECLS
#ifdef _MSC_VER
/* TODO: Add once needed. */
#else
typedef guint64 FridaAtomicU64 __attribute__ ((aligned (8)));
static inline guint64
frida_atomics_load_u64_acquire (volatile FridaAtomicU64 * p)
{
return __atomic_load_n (p, __ATOMIC_ACQUIRE);
}
static inline void
frida_atomics_store_u64_release (volatile FridaAtomicU64 * p, guint64 v)
{
__atomic_store_n (p, v, __ATOMIC_RELEASE);
}
static inline guint32 frida_atomics_load_u32_acquire (volatile guint32 * p)
{
return __atomic_load_n (p, __ATOMIC_ACQUIRE);
}
#endif
G_END_DECLS
#endif
+6
View File
@@ -0,0 +1,6 @@
[CCode (cheader_filename = "frida-atomics.h")]
namespace Frida.Atomics {
public static uint64 load_u64_acquire (uint64 * p);
public static void store_u64_release (uint64 * p, uint64 v);
public static uint32 load_u32_acquire (uint32 * p);
}
+4
View File
@@ -6,6 +6,8 @@
#include <glib.h>
#include <xpc/xpc.h>
G_BEGIN_DECLS
typedef void (* FridaXpcHandler) (xpc_object_t object, gpointer user_data);
typedef gboolean (* FridaXpcDictionaryApplier) (const gchar * key, xpc_object_t val, gpointer user_data);
@@ -17,6 +19,8 @@ void _frida_xpc_connection_send_message_with_reply (xpc_connection_t connection,
gchar * _frida_xpc_object_to_string (xpc_object_t object);
gboolean _frida_xpc_dictionary_apply (xpc_object_t dict, FridaXpcDictionaryApplier applier, gpointer user_data);
G_END_DECLS
#endif
#endif
+41
View File
@@ -0,0 +1,41 @@
#ifndef __FRIDA_JNI_H__
#define __FRIDA_JNI_H__
#include <jni.h>
G_BEGIN_DECLS
typedef jint (* JNIDestroyJavaVMFunc) (JavaVM *);
typedef jint (* JNIAttachCurrentThreadFunc) (JavaVM *, JNIEnv **, void *);
typedef jint (* JNIDetachCurrentThreadFunc) (JavaVM *);
typedef jint (* JNIGetEnvFunc) (JavaVM *, JNIEnv **, jint);
typedef jclass (* JNIFindClassFunc) (JNIEnv *, const char *);
typedef jthrowable (* JNIExceptionOccurredFunc) (JNIEnv *);
typedef void (* JNIExceptionDescribeFunc) (JNIEnv *);
typedef void (* JNIExceptionClearFunc) (JNIEnv *);
typedef jint (* JNIPushLocalFrameFunc) (JNIEnv *, jint);
typedef jobject (* JNIPopLocalFrameFunc) (JNIEnv *, jobject);
typedef jobject (* JNINewGlobalRefFunc) (JNIEnv *, jobject);
typedef void (* JNIDeleteGlobalRefFunc) (JNIEnv *, jobject);
typedef void (* JNIDeleteLocalRefFunc) (JNIEnv *, jobject);
typedef jobject (* JNINewObjectFunc) (JNIEnv *, jclass, jmethodID, ...);
typedef jclass (* JNIGetObjectClassFunc) (JNIEnv *, jobject);
typedef jmethodID (* JNIGetMethodIDFunc) (JNIEnv *, jclass, const char *, const char *);
typedef jobject (* JNICallObjectMethodFunc) (JNIEnv *, jobject, jmethodID, ...);
typedef jstring (* JNINewStringUTFFunc) (JNIEnv *, const char *);
typedef const char * (* JNIGetStringUTFCharsFunc) (JNIEnv *, jstring, jboolean *);
typedef void (* JNIReleaseStringUTFCharsFunc) (JNIEnv *, jstring, const char *);
typedef jboolean (* JNIExceptionCheckFunc) (JNIEnv *);
G_END_DECLS
#endif
+20
View File
@@ -0,0 +1,20 @@
#ifndef __FRIDA_LINUX_BPF_H__
#define __FRIDA_LINUX_BPF_H__
#include <glib.h>
G_BEGIN_DECLS
#define FRIDA_BPF_RINGBUF_HEADER_SIZE 8
typedef guint32 FridaBpfRingbufFlags;
enum _FridaBpfRingbufFlags
{
FRIDA_BPF_RINGBUF_BUSY = (1U << 31),
FRIDA_BPF_RINGBUF_DISCARD = (1U << 30),
};
G_END_DECLS
#endif
+54
View File
@@ -0,0 +1,54 @@
#ifndef __FRIDA_LINUX_PERF_EVENT_H__
#define __FRIDA_LINUX_PERF_EVENT_H__
#include <glib.h>
G_BEGIN_DECLS
#define FRIDA_PERF_EVENT_COUNT_SW_CPU_CLOCK 0
typedef struct _FridaPerfEventAttr FridaPerfEventAttr;
typedef guint32 FridaPerfEventType;
struct _FridaPerfEventAttr
{
FridaPerfEventType event_type;
guint32 size;
guint64 config;
union
{
guint64 sample_period;
guint64 sample_freq;
};
guint64 sample_type;
guint64 read_format;
guint64 flags;
guint32 wakeup_events;
guint32 bp_type;
union
{
guint64 bp_addr;
guint64 config1;
};
union
{
guint64 bp_len;
guint64 config2;
};
};
enum _FridaPerfEventType
{
FRIDA_PERF_EVENT_TYPE_HARDWARE,
FRIDA_PERF_EVENT_TYPE_SOFTWARE,
};
G_END_DECLS
#endif
+58
View File
@@ -0,0 +1,58 @@
namespace Frida {
[CCode (cheader_filename = "dlfcn.h", cname = "dlopen")]
public void * dlopen (string filename, int flags);
[CCode (cheader_filename = "dlfcn.h", cname = "dlclose")]
public int dlclose (void * handle);
[CCode (cheader_filename = "dlfcn.h", cname = "dlsym")]
public void * dlsym (void * handle, string symbol);
[CCode (cheader_filename = "dlfcn.h", cname = "dlerror")]
public unowned string dlerror ();
[CCode (cheader_filename = "sys/mman.h", cname = "MAP_ANONYMOUS")]
public const int MAP_ANONYMOUS;
[CCode (cheader_filename = "frida-linux-bpf.h", cprefix = "FRIDA_BPF_RINGBUF_", has_type_id = false)]
[Flags]
public enum BpfRingbufFlags {
BUSY,
DISCARD,
}
[CCode (cheader_filename = "frida-linux-bpf.h")]
public const uint32 BPF_RINGBUF_HEADER_SIZE;
[CCode (cheader_filename = "frida-linux-perf-event.h")]
public const int PERF_EVENT_TYPE_SOFTWARE;
[CCode (cheader_filename = "frida-linux-perf-event.h")]
public const int PERF_EVENT_COUNT_SW_CPU_CLOCK;
[CCode (cheader_filename = "frida-linux-perf-event.h", has_type_id = false)]
public struct PerfEventAttr {
public PerfEventType event_type;
public uint32 size;
public uint64 config;
public uint64 sample_period;
public uint64 sample_type;
public uint64 read_format;
public uint64 flags;
public uint32 wakeup_events;
public uint32 bp_type;
public uint64 config1;
public uint64 config2;
}
[CCode (cheader_filename = "frida-linux-perf-event.h", has_type_id = false)]
public enum PerfEventType {
HARDWARE,
SOFTWARE,
}
}
-63
View File
@@ -1,63 +0,0 @@
#ifndef __FRIDA_LINUX_SYSCALL_H__
#define __FRIDA_LINUX_SYSCALL_H__
#include <linux/unistd.h>
#include <sys/syscall.h>
#undef SYS_process_vm_readv
#undef SYS_process_vm_writev
#undef SYS_memfd_create
#undef SYS_pidfd_open
#undef SYS_pidfd_getfd
#if defined (HAVE_I386) && GLIB_SIZEOF_VOID_P == 4
# define SYS_process_vm_readv 347
# define SYS_process_vm_writev 348
# define SYS_memfd_create 356
# define SYS_pidfd_open 434
# define SYS_pidfd_getfd 438
#elif defined (HAVE_I386) && GLIB_SIZEOF_VOID_P == 8
# define SYS_process_vm_readv 310
# define SYS_process_vm_writev 311
# define SYS_memfd_create 319
# define SYS_pidfd_open 434
# define SYS_pidfd_getfd 438
#elif defined (HAVE_ARM)
# define SYS_process_vm_readv (__NR_SYSCALL_BASE + 376)
# define SYS_process_vm_writev (__NR_SYSCALL_BASE + 377)
# define SYS_memfd_create (__NR_SYSCALL_BASE + 385)
# define SYS_pidfd_open (__NR_SYSCALL_BASE + 434)
# define SYS_pidfd_getfd (__NR_SYSCALL_BASE + 438)
#elif defined (HAVE_ARM64)
# define SYS_process_vm_readv 270
# define SYS_process_vm_writev 271
# define SYS_memfd_create 279
# define SYS_pidfd_open 434
# define SYS_pidfd_getfd 438
#elif defined (HAVE_MIPS)
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define SYS_process_vm_readv (__NR_Linux + 345)
# define SYS_process_vm_writev (__NR_Linux + 346)
# define SYS_memfd_create (__NR_Linux + 354)
# define SYS_pidfd_open (__NR_Linux + 434)
# define SYS_pidfd_getfd (__NR_Linux + 438)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define SYS_process_vm_readv (__NR_Linux + 304)
# define SYS_process_vm_writev (__NR_Linux + 305)
# define SYS_memfd_create (__NR_Linux + 314)
# define SYS_pidfd_open (__NR_Linux + 434)
# define SYS_pidfd_getfd (__NR_Linux + 438)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define SYS_process_vm_readv (__NR_Linux + 309)
# define SYS_process_vm_writev (__NR_Linux + 310)
# define SYS_memfd_create (__NR_Linux + 318)
# define SYS_pidfd_open (__NR_Linux + 434)
# define SYS_pidfd_getfd (__NR_Linux + 438)
# else
# error Unexpected MIPS ABI
# endif
#else
# error FIXME
#endif
#endif
+25
View File
@@ -0,0 +1,25 @@
KERNEL_TREE ?= $(HOME)/src/linux
archs := \
x86 \
x86_64 \
arm \
arm64 \
mips \
mips64 \
s390x \
$(NULL)
all: $(foreach arch,$(archs),$(arch).vala)
clean:
$(RM) $(foreach arch,$(archs),$(arch).vala $(arch)-glue.c)
%.vala %-glue.c:
./generate-bindings.py \
--abi=$* \
--kernel-tree=$(KERNEL_TREE) \
--out-vala=$*.vala \
--out-c=$*-glue.c
.PHONY: all clean
+451
View File
@@ -0,0 +1,451 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 0, "restart_syscall", 0, {} },
{ 1, "exit", 1, { { "int", "error_code" } } },
{ 2, "fork", 0, {} },
{ 3, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 4, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 5, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 6, "close", 1, { { "unsigned int", "fd" } } },
{ 8, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 9, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 10, "unlink", 1, { { "const char *", "pathname" } } },
{ 11, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 12, "chdir", 1, { { "const char *", "filename" } } },
{ 13, "time", 1, { { "old_time32_t *", "tloc" } } },
{ 14, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 15, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 16, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 19, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 20, "getpid", 0, {} },
{ 21, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 22, "umount", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 23, "setuid", 1, { { "uid_t", "uid" } } },
{ 24, "getuid", 0, {} },
{ 25, "stime", 1, { { "old_time32_t *", "tptr" } } },
{ 26, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 27, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 29, "pause", 0, {} },
{ 30, "utime", 2, { { "const char *", "filename" }, { "struct old_utimbuf32 *", "t" } } },
{ 33, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 34, "nice", 1, { { "int", "increment" } } },
{ 36, "sync", 0, {} },
{ 37, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 38, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 39, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 40, "rmdir", 1, { { "const char *", "pathname" } } },
{ 41, "dup", 1, { { "unsigned int", "fildes" } } },
{ 42, "pipe", 1, { { "int *", "fildes" } } },
{ 43, "times", 1, { { "struct tms *", "tbuf" } } },
{ 45, "brk", 1, { { "unsigned long", "brk" } } },
{ 46, "setgid", 1, { { "gid_t", "gid" } } },
{ 47, "getgid", 0, {} },
{ 49, "geteuid", 0, {} },
{ 50, "getegid", 0, {} },
{ 51, "acct", 1, { { "const char *", "name" } } },
{ 52, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 54, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 55, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 57, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 60, "umask", 1, { { "int", "mask" } } },
{ 61, "chroot", 1, { { "const char *", "filename" } } },
{ 62, "ustat", 2, { { "unsigned", "dev" }, { "struct ustat *", "ubuf" } } },
{ 63, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 64, "getppid", 0, {} },
{ 65, "getpgrp", 0, {} },
{ 66, "setsid", 0, {} },
{ 67, "sigaction", 3, { { "int", "sig" }, { "const struct old_sigaction *", "act" }, { "struct old_sigaction *", "oact" } } },
{ 70, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 71, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 72, "sigsuspend", 3, { { "int", "unused1" }, { "int", "unused2" }, { "old_sigset_t", "mask" } } },
{ 73, "sigpending", 1, { { "old_sigset_t *", "uset" } } },
{ 74, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 75, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 76, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 77, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 78, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 79, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 80, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 81, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 82, "select", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 83, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 85, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 86, "uselib", 1, { { "const char *", "library" } } },
{ 87, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 88, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 89, "readdir", 3, { { "unsigned", "int" }, { "struct old_linux_dirent *", "arg1" }, { "unsigned", "int" } } },
{ 90, "mmap", 1, { { "struct mmap_arg_struct *", "arg" } } },
{ 91, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 92, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 93, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 94, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 95, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 96, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 97, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 99, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 100, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 102, "socketcall", 2, { { "int", "call" }, { "unsigned long *", "args" } } },
{ 103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 104, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 105, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 106, "stat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 107, "lstat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 108, "fstat", 2, { { "unsigned int", "fd" }, { "struct stat *", "statbuf" } } },
{ 111, "vhangup", 0, {} },
{ 114, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 115, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 116, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 117, "ipc", 6, { { "unsigned int", "call" }, { "int", "first" }, { "unsigned long", "second" }, { "unsigned long", "third" }, { "void *", "ptr" }, { "long", "fifth" } } },
{ 118, "fsync", 1, { { "unsigned int", "fd" } } },
{ 120, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 121, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 122, "uname", 1, { { "struct new_utsname *", "name" } } },
{ 124, "adjtimex", 1, { { "struct old_timex32 *", "txc_p" } } },
{ 125, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 126, "sigprocmask", 3, { { "int", "how" }, { "old_sigset_t *", "nset" }, { "old_sigset_t *", "oset" } } },
{ 128, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 129, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 131, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 132, "getpgid", 1, { { "pid_t", "pid" } } },
{ 133, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 134, "bdflush", 0, {} },
{ 135, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 136, "personality", 1, { { "unsigned int", "personality" } } },
{ 138, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 139, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 140, "_llseek", 5, { { "unsigned int", "fd" }, { "unsigned long", "offset_high" }, { "unsigned long", "offset_low" }, { "loff_t *", "result" }, { "unsigned int", "whence" } } },
{ 141, "getdents", 3, { { "unsigned int", "fd" }, { "struct linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 142, "_newselect", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 143, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 144, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 145, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 146, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 147, "getsid", 1, { { "pid_t", "pid" } } },
{ 148, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 149, "_sysctl", 0, {} },
{ 150, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 151, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 152, "mlockall", 1, { { "int", "flags" } } },
{ 153, "munlockall", 0, {} },
{ 154, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 155, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 156, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 157, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 158, "sched_yield", 0, {} },
{ 159, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 160, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 161, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 162, "nanosleep", 2, { { "struct old_timespec32 *", "rqtp" }, { "struct old_timespec32 *", "rmtp" } } },
{ 163, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 164, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 165, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 168, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 170, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 171, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 172, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 174, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 175, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 176, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 177, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 178, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 179, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 180, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 181, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 182, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 183, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 184, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 185, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 186, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 187, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 190, "vfork", 0, {} },
{ 191, "ugetrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 193, "truncate64", 2, { { "const char *", "path" }, { "loff_t", "length" } } },
{ 194, "ftruncate64", 2, { { "unsigned int", "fd" }, { "loff_t", "length" } } },
{ 195, "stat64", 2, { { "const char *", "filename" }, { "struct stat64 *", "statbuf" } } },
{ 196, "lstat64", 2, { { "const char *", "filename" }, { "struct stat64 *", "statbuf" } } },
{ 197, "fstat64", 2, { { "unsigned long", "fd" }, { "struct stat64 *", "statbuf" } } },
{ 198, "lchown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 199, "getuid32", 0, {} },
{ 200, "getgid32", 0, {} },
{ 201, "geteuid32", 0, {} },
{ 202, "getegid32", 0, {} },
{ 203, "setreuid32", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 204, "setregid32", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 205, "getgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 206, "setgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 207, "fchown32", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 208, "setresuid32", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 209, "getresuid32", 3, { { "uid_t *", "ruid" }, { "uid_t *", "euid" }, { "uid_t *", "suid" } } },
{ 210, "setresgid32", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 211, "getresgid32", 3, { { "gid_t *", "rgid" }, { "gid_t *", "egid" }, { "gid_t *", "sgid" } } },
{ 212, "chown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 213, "setuid32", 1, { { "uid_t", "uid" } } },
{ 214, "setgid32", 1, { { "gid_t", "gid" } } },
{ 215, "setfsuid32", 1, { { "uid_t", "uid" } } },
{ 216, "setfsgid32", 1, { { "gid_t", "gid" } } },
{ 217, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 218, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 219, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 220, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 221, "fcntl64", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 224, "gettid", 0, {} },
{ 225, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 226, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 227, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 228, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 229, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 230, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 231, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 232, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 233, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 234, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 235, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 236, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 237, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 238, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 239, "sendfile64", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "loff_t *", "offset" }, { "size_t", "count" } } },
{ 240, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 241, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 242, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 243, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 244, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 245, "io_getevents", 5, { { "__u32", "ctx_id" }, { "__s32", "min_nr" }, { "__s32", "nr" }, { "struct io_event *", "events" }, { "struct old_timespec32 *", "timeout" } } },
{ 246, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 247, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 248, "exit_group", 1, { { "int", "error_code" } } },
{ 249, "lookup_dcookie", 0, {} },
{ 250, "epoll_create", 1, { { "int", "size" } } },
{ 251, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 252, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 253, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 256, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 257, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 258, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 259, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 260, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 261, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 262, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 263, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 264, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 265, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 266, "statfs64", 3, { { "const char *", "pathname" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 267, "fstatfs64", 3, { { "unsigned int", "fd" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 268, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 269, "utimes", 2, { { "const char *", "filename" }, { "struct old_timeval32 *", "t" } } },
{ 271, "pciconfig_iobase", 3, { { "long", "which" }, { "unsigned long", "bus" }, { "unsigned long", "devfn" } } },
{ 272, "pciconfig_read", 5, { { "unsigned long", "bus" }, { "unsigned long", "dfn" }, { "unsigned long", "off" }, { "unsigned long", "len" }, { "void *", "buf" } } },
{ 273, "pciconfig_write", 5, { { "unsigned long", "bus" }, { "unsigned long", "dfn" }, { "unsigned long", "off" }, { "unsigned long", "len" }, { "void *", "buf" } } },
{ 274, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 275, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 276, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 277, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 278, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 279, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 280, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 281, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 282, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 283, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 284, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 285, "accept", 3, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" } } },
{ 286, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 287, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 288, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 289, "send", 4, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 290, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 291, "recv", 4, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" } } },
{ 292, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 293, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 294, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 295, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 296, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 297, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 298, "semop", 3, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned", "nsops" } } },
{ 299, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 300, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 301, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 302, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 303, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 304, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 305, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 306, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 307, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 308, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 309, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 310, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 311, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 312, "semtimedop", 4, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned int", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 314, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 315, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 316, "inotify_init", 0, {} },
{ 317, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 318, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 319, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 320, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 321, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 322, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 323, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 324, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 325, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 326, "futimesat", 3, { { "unsigned int", "dfd" }, { "const char *", "filename" }, { "struct old_timeval32 *", "t" } } },
{ 327, "fstatat64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat64 *", "statbuf" }, { "int", "flag" } } },
{ 328, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 329, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 330, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 331, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 332, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 333, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 334, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 335, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 336, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 337, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 338, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 339, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 340, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 341, "arm_sync_file_range", 4, { { "int", "fd" }, { "unsigned int", "flags" }, { "loff_t", "offset" }, { "loff_t", "nbytes" } } },
{ 342, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 343, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 344, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 345, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 346, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 347, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 348, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 349, "signalfd", 3, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" } } },
{ 350, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 351, "eventfd", 1, { { "unsigned int", "count" } } },
{ 352, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 353, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 354, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 355, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 356, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 357, "epoll_create1", 1, { { "int", "flags" } } },
{ 358, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 359, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 360, "inotify_init1", 1, { { "int", "flags" } } },
{ 361, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 362, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 363, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 364, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 365, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 366, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 367, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 368, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 369, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 370, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 371, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 372, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 373, "syncfs", 1, { { "int", "fd" } } },
{ 374, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 375, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 376, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 377, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 378, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 379, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 380, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 381, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 382, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 383, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 384, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 385, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 386, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 387, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 388, "userfaultfd", 1, { { "int", "flags" } } },
{ 389, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 390, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 391, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 392, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 393, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 394, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 395, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 396, "pkey_free", 1, { { "int", "pkey" } } },
{ 397, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 398, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 399, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 400, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 401, "kexec_file_load", 5, { { "int", "kernel_fd" }, { "int", "initrd_fd" }, { "unsigned long", "cmdline_len" }, { "const char *", "cmdline_ptr" }, { "unsigned long", "flags" } } },
{ 403, "clock_gettime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 404, "clock_settime64", 2, { { "clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 405, "clock_adjtime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timex *", "tx" } } },
{ 406, "clock_getres_time64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 407, "clock_nanosleep_time64", 4, { { "clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 408, "timer_gettime64", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 409, "timer_settime64", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 410, "timerfd_gettime64", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 411, "timerfd_settime64", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 412, "utimensat_time64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 413, "pselect6_time64", 6, { { "int", "arg0" }, { "fd_set *", "arg1" }, { "fd_set *", "arg2" }, { "fd_set *", "arg3" }, { "struct __kernel_timespec *", "arg4" }, { "void *", "arg5" } } },
{ 414, "ppoll_time64", 5, { { "struct pollfd *", "arg0" }, { "unsigned", "int" }, { "struct __kernel_timespec *", "arg2" }, { "const sigset_t *", "arg3" }, { "size_t", "arg4" } } },
{ 416, "io_pgetevents_time64", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "sig" } } },
{ 417, "recvmmsg_time64", 5, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 418, "mq_timedsend_time64", 5, { { "mqd_t", "mqdes" }, { "const char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 419, "mq_timedreceive_time64", 5, { { "mqd_t", "mqdes" }, { "char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 420, "semtimedop_time64", 4, { { "int", "semid" }, { "struct sembuf *", "sops" }, { "unsigned", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 421, "rt_sigtimedwait_time64", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 422, "futex_time64", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 423, "sched_rr_get_interval_time64", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = 0;
return NULL;
}
+434
View File
@@ -0,0 +1,434 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
RESTART_SYSCALL = 0,
EXIT = 1,
FORK = 2,
READ = 3,
WRITE = 4,
OPEN = 5,
CLOSE = 6,
CREAT = 8,
LINK = 9,
UNLINK = 10,
EXECVE = 11,
CHDIR = 12,
TIME = 13,
MKNOD = 14,
CHMOD = 15,
LCHOWN = 16,
LSEEK = 19,
GETPID = 20,
MOUNT = 21,
UMOUNT = 22,
SETUID = 23,
GETUID = 24,
STIME = 25,
PTRACE = 26,
ALARM = 27,
PAUSE = 29,
UTIME = 30,
ACCESS = 33,
NICE = 34,
SYNC = 36,
KILL = 37,
RENAME = 38,
MKDIR = 39,
RMDIR = 40,
DUP = 41,
PIPE = 42,
TIMES = 43,
BRK = 45,
SETGID = 46,
GETGID = 47,
GETEUID = 49,
GETEGID = 50,
ACCT = 51,
UMOUNT2 = 52,
IOCTL = 54,
FCNTL = 55,
SETPGID = 57,
UMASK = 60,
CHROOT = 61,
USTAT = 62,
DUP2 = 63,
GETPPID = 64,
GETPGRP = 65,
SETSID = 66,
SIGACTION = 67,
SETREUID = 70,
SETREGID = 71,
SIGSUSPEND = 72,
SIGPENDING = 73,
SETHOSTNAME = 74,
SETRLIMIT = 75,
GETRLIMIT = 76,
GETRUSAGE = 77,
GETTIMEOFDAY = 78,
SETTIMEOFDAY = 79,
GETGROUPS = 80,
SETGROUPS = 81,
SELECT = 82,
SYMLINK = 83,
READLINK = 85,
USELIB = 86,
SWAPON = 87,
REBOOT = 88,
READDIR = 89,
MMAP = 90,
MUNMAP = 91,
TRUNCATE = 92,
FTRUNCATE = 93,
FCHMOD = 94,
FCHOWN = 95,
GETPRIORITY = 96,
SETPRIORITY = 97,
STATFS = 99,
FSTATFS = 100,
SOCKETCALL = 102,
SYSLOG = 103,
SETITIMER = 104,
GETITIMER = 105,
STAT = 106,
LSTAT = 107,
FSTAT = 108,
VHANGUP = 111,
WAIT4 = 114,
SWAPOFF = 115,
SYSINFO = 116,
IPC = 117,
FSYNC = 118,
CLONE = 120,
SETDOMAINNAME = 121,
UNAME = 122,
ADJTIMEX = 124,
MPROTECT = 125,
SIGPROCMASK = 126,
INIT_MODULE = 128,
DELETE_MODULE = 129,
QUOTACTL = 131,
GETPGID = 132,
FCHDIR = 133,
BDFLUSH = 134,
SYSFS = 135,
PERSONALITY = 136,
SETFSUID = 138,
SETFSGID = 139,
_LLSEEK = 140,
GETDENTS = 141,
_NEWSELECT = 142,
FLOCK = 143,
MSYNC = 144,
READV = 145,
WRITEV = 146,
GETSID = 147,
FDATASYNC = 148,
_SYSCTL = 149,
MLOCK = 150,
MUNLOCK = 151,
MLOCKALL = 152,
MUNLOCKALL = 153,
SCHED_SETPARAM = 154,
SCHED_GETPARAM = 155,
SCHED_SETSCHEDULER = 156,
SCHED_GETSCHEDULER = 157,
SCHED_YIELD = 158,
SCHED_GET_PRIORITY_MAX = 159,
SCHED_GET_PRIORITY_MIN = 160,
SCHED_RR_GET_INTERVAL = 161,
NANOSLEEP = 162,
MREMAP = 163,
SETRESUID = 164,
GETRESUID = 165,
POLL = 168,
SETRESGID = 170,
GETRESGID = 171,
PRCTL = 172,
RT_SIGACTION = 174,
RT_SIGPROCMASK = 175,
RT_SIGPENDING = 176,
RT_SIGTIMEDWAIT = 177,
RT_SIGQUEUEINFO = 178,
RT_SIGSUSPEND = 179,
PREAD64 = 180,
PWRITE64 = 181,
CHOWN = 182,
GETCWD = 183,
CAPGET = 184,
CAPSET = 185,
SIGALTSTACK = 186,
SENDFILE = 187,
VFORK = 190,
UGETRLIMIT = 191,
TRUNCATE64 = 193,
FTRUNCATE64 = 194,
STAT64 = 195,
LSTAT64 = 196,
FSTAT64 = 197,
LCHOWN32 = 198,
GETUID32 = 199,
GETGID32 = 200,
GETEUID32 = 201,
GETEGID32 = 202,
SETREUID32 = 203,
SETREGID32 = 204,
GETGROUPS32 = 205,
SETGROUPS32 = 206,
FCHOWN32 = 207,
SETRESUID32 = 208,
GETRESUID32 = 209,
SETRESGID32 = 210,
GETRESGID32 = 211,
CHOWN32 = 212,
SETUID32 = 213,
SETGID32 = 214,
SETFSUID32 = 215,
SETFSGID32 = 216,
GETDENTS64 = 217,
PIVOT_ROOT = 218,
MINCORE = 219,
MADVISE = 220,
FCNTL64 = 221,
GETTID = 224,
READAHEAD = 225,
SETXATTR = 226,
LSETXATTR = 227,
FSETXATTR = 228,
GETXATTR = 229,
LGETXATTR = 230,
FGETXATTR = 231,
LISTXATTR = 232,
LLISTXATTR = 233,
FLISTXATTR = 234,
REMOVEXATTR = 235,
LREMOVEXATTR = 236,
FREMOVEXATTR = 237,
TKILL = 238,
SENDFILE64 = 239,
FUTEX = 240,
SCHED_SETAFFINITY = 241,
SCHED_GETAFFINITY = 242,
IO_SETUP = 243,
IO_DESTROY = 244,
IO_GETEVENTS = 245,
IO_SUBMIT = 246,
IO_CANCEL = 247,
EXIT_GROUP = 248,
LOOKUP_DCOOKIE = 249,
EPOLL_CREATE = 250,
EPOLL_CTL = 251,
EPOLL_WAIT = 252,
REMAP_FILE_PAGES = 253,
SET_TID_ADDRESS = 256,
TIMER_CREATE = 257,
TIMER_SETTIME = 258,
TIMER_GETTIME = 259,
TIMER_GETOVERRUN = 260,
TIMER_DELETE = 261,
CLOCK_SETTIME = 262,
CLOCK_GETTIME = 263,
CLOCK_GETRES = 264,
CLOCK_NANOSLEEP = 265,
STATFS64 = 266,
FSTATFS64 = 267,
TGKILL = 268,
UTIMES = 269,
PCICONFIG_IOBASE = 271,
PCICONFIG_READ = 272,
PCICONFIG_WRITE = 273,
MQ_OPEN = 274,
MQ_UNLINK = 275,
MQ_TIMEDSEND = 276,
MQ_TIMEDRECEIVE = 277,
MQ_NOTIFY = 278,
MQ_GETSETATTR = 279,
WAITID = 280,
SOCKET = 281,
BIND = 282,
CONNECT = 283,
LISTEN = 284,
ACCEPT = 285,
GETSOCKNAME = 286,
GETPEERNAME = 287,
SOCKETPAIR = 288,
SEND = 289,
SENDTO = 290,
RECV = 291,
RECVFROM = 292,
SHUTDOWN = 293,
SETSOCKOPT = 294,
GETSOCKOPT = 295,
SENDMSG = 296,
RECVMSG = 297,
SEMOP = 298,
SEMGET = 299,
SEMCTL = 300,
MSGSND = 301,
MSGRCV = 302,
MSGGET = 303,
MSGCTL = 304,
SHMAT = 305,
SHMDT = 306,
SHMGET = 307,
SHMCTL = 308,
ADD_KEY = 309,
REQUEST_KEY = 310,
KEYCTL = 311,
SEMTIMEDOP = 312,
IOPRIO_SET = 314,
IOPRIO_GET = 315,
INOTIFY_INIT = 316,
INOTIFY_ADD_WATCH = 317,
INOTIFY_RM_WATCH = 318,
MBIND = 319,
GET_MEMPOLICY = 320,
SET_MEMPOLICY = 321,
OPENAT = 322,
MKDIRAT = 323,
MKNODAT = 324,
FCHOWNAT = 325,
FUTIMESAT = 326,
FSTATAT64 = 327,
UNLINKAT = 328,
RENAMEAT = 329,
LINKAT = 330,
SYMLINKAT = 331,
READLINKAT = 332,
FCHMODAT = 333,
FACCESSAT = 334,
PSELECT6 = 335,
PPOLL = 336,
UNSHARE = 337,
SET_ROBUST_LIST = 338,
GET_ROBUST_LIST = 339,
SPLICE = 340,
ARM_SYNC_FILE_RANGE = 341,
TEE = 342,
VMSPLICE = 343,
MOVE_PAGES = 344,
GETCPU = 345,
EPOLL_PWAIT = 346,
KEXEC_LOAD = 347,
UTIMENSAT = 348,
SIGNALFD = 349,
TIMERFD_CREATE = 350,
EVENTFD = 351,
FALLOCATE = 352,
TIMERFD_SETTIME = 353,
TIMERFD_GETTIME = 354,
SIGNALFD4 = 355,
EVENTFD2 = 356,
EPOLL_CREATE1 = 357,
DUP3 = 358,
PIPE2 = 359,
INOTIFY_INIT1 = 360,
PREADV = 361,
PWRITEV = 362,
RT_TGSIGQUEUEINFO = 363,
PERF_EVENT_OPEN = 364,
RECVMMSG = 365,
ACCEPT4 = 366,
FANOTIFY_INIT = 367,
FANOTIFY_MARK = 368,
PRLIMIT64 = 369,
NAME_TO_HANDLE_AT = 370,
OPEN_BY_HANDLE_AT = 371,
CLOCK_ADJTIME = 372,
SYNCFS = 373,
SENDMMSG = 374,
SETNS = 375,
PROCESS_VM_READV = 376,
PROCESS_VM_WRITEV = 377,
KCMP = 378,
FINIT_MODULE = 379,
SCHED_SETATTR = 380,
SCHED_GETATTR = 381,
RENAMEAT2 = 382,
SECCOMP = 383,
GETRANDOM = 384,
MEMFD_CREATE = 385,
BPF = 386,
EXECVEAT = 387,
USERFAULTFD = 388,
MEMBARRIER = 389,
MLOCK2 = 390,
COPY_FILE_RANGE = 391,
PREADV2 = 392,
PWRITEV2 = 393,
PKEY_MPROTECT = 394,
PKEY_ALLOC = 395,
PKEY_FREE = 396,
STATX = 397,
RSEQ = 398,
IO_PGETEVENTS = 399,
MIGRATE_PAGES = 400,
KEXEC_FILE_LOAD = 401,
CLOCK_GETTIME64 = 403,
CLOCK_SETTIME64 = 404,
CLOCK_ADJTIME64 = 405,
CLOCK_GETRES_TIME64 = 406,
CLOCK_NANOSLEEP_TIME64 = 407,
TIMER_GETTIME64 = 408,
TIMER_SETTIME64 = 409,
TIMERFD_GETTIME64 = 410,
TIMERFD_SETTIME64 = 411,
UTIMENSAT_TIME64 = 412,
PSELECT6_TIME64 = 413,
PPOLL_TIME64 = 414,
IO_PGETEVENTS_TIME64 = 416,
RECVMMSG_TIME64 = 417,
MQ_TIMEDSEND_TIME64 = 418,
MQ_TIMEDRECEIVE_TIME64 = 419,
SEMTIMEDOP_TIME64 = 420,
RT_SIGTIMEDWAIT_TIME64 = 421,
FUTEX_TIME64 = 422,
SCHED_RR_GET_INTERVAL_TIME64 = 423,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
}
+790
View File
@@ -0,0 +1,790 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 0, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 1, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 2, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 3, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 4, "io_getevents", 5, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" } } },
{ 5, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 6, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 7, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 8, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 9, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 10, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 11, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 12, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 13, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 14, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 15, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 16, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 17, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 18, "lookup_dcookie", 0, {} },
{ 19, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 20, "epoll_create1", 1, { { "int", "flags" } } },
{ 21, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 22, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 23, "dup", 1, { { "unsigned int", "fildes" } } },
{ 24, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 25, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 26, "inotify_init1", 1, { { "int", "flags" } } },
{ 27, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 28, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 29, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 30, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 31, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 32, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 33, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 34, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 35, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 36, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 37, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 39, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 40, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 41, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 42, "nfsservctl", 0, {} },
{ 43, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 44, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 45, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 46, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 47, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 48, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 49, "chdir", 1, { { "const char *", "filename" } } },
{ 50, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 51, "chroot", 1, { { "const char *", "filename" } } },
{ 52, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 53, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 54, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 55, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 56, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 57, "close", 1, { { "unsigned int", "fd" } } },
{ 58, "vhangup", 0, {} },
{ 59, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 60, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 61, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 62, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 63, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 64, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 65, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 66, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 67, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 68, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 69, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 70, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 71, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 72, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 73, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 74, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 75, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 76, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 77, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 78, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 79, "newfstatat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat *", "statbuf" }, { "int", "flag" } } },
{ 80, "fstat", 2, { { "unsigned int", "fd" }, { "struct stat *", "statbuf" } } },
{ 81, "sync", 0, {} },
{ 82, "fsync", 1, { { "unsigned int", "fd" } } },
{ 83, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 84, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 85, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 86, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 87, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 88, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 89, "acct", 1, { { "const char *", "name" } } },
{ 90, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 91, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 92, "personality", 1, { { "unsigned int", "personality" } } },
{ 93, "exit", 1, { { "int", "error_code" } } },
{ 94, "exit_group", 1, { { "int", "error_code" } } },
{ 95, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 96, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 97, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 98, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 99, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 100, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 101, "nanosleep", 2, { { "struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 102, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 103, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 104, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 105, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 106, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 107, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 108, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 109, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 110, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 111, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 112, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 113, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 114, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 115, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 116, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 117, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 118, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 119, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 120, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 121, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 122, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 123, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 124, "sched_yield", 0, {} },
{ 125, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 126, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 127, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 128, "restart_syscall", 0, {} },
{ 129, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 130, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 131, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 132, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 133, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 134, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 135, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 136, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 137, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 138, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 139, "rt_sigreturn", 0, {} },
{ 140, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 141, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 142, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 143, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 144, "setgid", 1, { { "gid_t", "gid" } } },
{ 145, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 146, "setuid", 1, { { "uid_t", "uid" } } },
{ 147, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 148, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 149, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 150, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 151, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 152, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 153, "times", 1, { { "struct tms *", "tbuf" } } },
{ 154, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 155, "getpgid", 1, { { "pid_t", "pid" } } },
{ 156, "getsid", 1, { { "pid_t", "pid" } } },
{ 157, "setsid", 0, {} },
{ 158, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 159, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 160, "uname", 1, { { "struct new_utsname *", "name" } } },
{ 161, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 162, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 163, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 164, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 165, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 166, "umask", 1, { { "int", "mask" } } },
{ 167, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 168, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 169, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 170, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 171, "adjtimex", 1, { { "struct __kernel_timex *", "txc_p" } } },
{ 172, "getpid", 0, {} },
{ 173, "getppid", 0, {} },
{ 174, "getuid", 0, {} },
{ 175, "geteuid", 0, {} },
{ 176, "getgid", 0, {} },
{ 177, "getegid", 0, {} },
{ 178, "gettid", 0, {} },
{ 179, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 180, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 181, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 182, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 183, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 184, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 185, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 186, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 187, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 188, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 189, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 190, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 191, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 192, "semtimedop", 4, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned int", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 193, "semop", 3, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned", "nsops" } } },
{ 194, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 195, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 196, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 197, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 198, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 199, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 200, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 201, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 202, "accept", 3, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" } } },
{ 203, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 204, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 205, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 206, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 207, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 208, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 209, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 210, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 211, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 212, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 213, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 214, "brk", 1, { { "unsigned long", "brk" } } },
{ 215, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 216, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 217, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 218, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 219, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 220, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 221, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 222, "mmap", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "off" } } },
{ 223, "fadvise64", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "len" }, { "int", "advice" } } },
{ 224, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 225, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 226, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 227, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 228, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 229, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 230, "mlockall", 1, { { "int", "flags" } } },
{ 231, "munlockall", 0, {} },
{ 232, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 233, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 234, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 235, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 236, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 237, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 238, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 239, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 240, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 241, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 242, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 243, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 260, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 261, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 262, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 263, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 264, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 265, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 266, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 267, "syncfs", 1, { { "int", "fd" } } },
{ 268, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 269, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 270, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 271, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 272, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 273, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 274, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 275, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 276, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 277, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 278, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 279, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 280, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 281, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 282, "userfaultfd", 1, { { "int", "flags" } } },
{ 283, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 284, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 285, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 286, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 287, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 288, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 289, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 290, "pkey_free", 1, { { "int", "pkey" } } },
{ 291, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 292, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 293, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 294, "kexec_file_load", 5, { { "int", "kernel_fd" }, { "int", "initrd_fd" }, { "unsigned long", "cmdline_len" }, { "const char *", "cmdline_ptr" }, { "unsigned long", "flags" } } },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
static const FridaLinuxSyscallSignature frida_compat32_syscall_signatures[] =
{
{ 0, "restart_syscall", 0, {} },
{ 1, "exit", 1, { { "int", "error_code" } } },
{ 2, "fork", 0, {} },
{ 3, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 4, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 5, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 6, "close", 1, { { "unsigned int", "fd" } } },
{ 8, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 9, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 10, "unlink", 1, { { "const char *", "pathname" } } },
{ 11, "execve", 3, { { "const char *", "filename" }, { "const compat_uptr_t *", "argv" }, { "const compat_uptr_t *", "envp" } } },
{ 12, "chdir", 1, { { "const char *", "filename" } } },
{ 14, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 15, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 16, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 19, "lseek", 3, { { "unsigned int", "fd" }, { "compat_off_t", "offset" }, { "unsigned int", "whence" } } },
{ 20, "getpid", 0, {} },
{ 21, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 23, "setuid", 1, { { "uid_t", "uid" } } },
{ 24, "getuid", 0, {} },
{ 26, "ptrace", 4, { { "compat_long_t", "request" }, { "compat_long_t", "pid" }, { "compat_long_t", "addr" }, { "compat_long_t", "data" } } },
{ 29, "pause", 0, {} },
{ 33, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 34, "nice", 1, { { "int", "increment" } } },
{ 36, "sync", 0, {} },
{ 37, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 38, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 39, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 40, "rmdir", 1, { { "const char *", "pathname" } } },
{ 41, "dup", 1, { { "unsigned int", "fildes" } } },
{ 42, "pipe", 1, { { "int *", "fildes" } } },
{ 43, "times", 1, { { "struct compat_tms *", "tbuf" } } },
{ 45, "brk", 1, { { "unsigned long", "brk" } } },
{ 46, "setgid", 1, { { "gid_t", "gid" } } },
{ 47, "getgid", 0, {} },
{ 49, "geteuid", 0, {} },
{ 50, "getegid", 0, {} },
{ 51, "acct", 1, { { "const char *", "name" } } },
{ 52, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 54, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "compat_ulong_t", "arg" } } },
{ 55, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "compat_ulong_t", "arg" } } },
{ 57, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 60, "umask", 1, { { "int", "mask" } } },
{ 61, "chroot", 1, { { "const char *", "filename" } } },
{ 62, "ustat", 2, { { "unsigned", "dev" }, { "struct compat_ustat *", "u" } } },
{ 63, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 64, "getppid", 0, {} },
{ 65, "getpgrp", 0, {} },
{ 66, "setsid", 0, {} },
{ 67, "sigaction", 3, { { "int", "sig" }, { "const struct compat_old_sigaction *", "act" }, { "struct compat_old_sigaction *", "oact" } } },
{ 70, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 71, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 72, "sigsuspend", 3, { { "int", "unused1" }, { "int", "unused2" }, { "old_sigset_t", "mask" } } },
{ 73, "sigpending", 1, { { "compat_old_sigset_t *", "set32" } } },
{ 74, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 75, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct compat_rlimit *", "rlim" } } },
{ 77, "getrusage", 2, { { "int", "who" }, { "struct compat_rusage *", "ru" } } },
{ 78, "gettimeofday", 2, { { "struct old_timeval32 *", "tv" }, { "struct timezone *", "tz" } } },
{ 79, "settimeofday", 2, { { "struct old_timeval32 *", "tv" }, { "struct timezone *", "tz" } } },
{ 80, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 81, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 83, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 85, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 86, "uselib", 1, { { "const char *", "library" } } },
{ 87, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 88, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 91, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 92, "truncate", 2, { { "const char *", "path" }, { "compat_off_t", "length" } } },
{ 93, "ftruncate", 2, { { "unsigned int", "fd" }, { "compat_off_t", "length" } } },
{ 94, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 95, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 96, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 97, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 99, "statfs", 2, { { "const char *", "pathname" }, { "struct compat_statfs *", "buf" } } },
{ 100, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct compat_statfs *", "buf" } } },
{ 103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 104, "setitimer", 3, { { "int", "which" }, { "struct old_itimerval32 *", "value" }, { "struct old_itimerval32 *", "ovalue" } } },
{ 105, "getitimer", 2, { { "int", "which" }, { "struct old_itimerval32 *", "value" } } },
{ 106, "stat", 2, { { "const char *", "filename" }, { "struct compat_stat *", "statbuf" } } },
{ 107, "lstat", 2, { { "const char *", "filename" }, { "struct compat_stat *", "statbuf" } } },
{ 108, "fstat", 2, { { "unsigned int", "fd" }, { "struct compat_stat *", "statbuf" } } },
{ 111, "vhangup", 0, {} },
{ 114, "wait4", 4, { { "compat_pid_t", "pid" }, { "compat_uint_t *", "stat_addr" }, { "int", "options" }, { "struct compat_rusage *", "ru" } } },
{ 115, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 116, "sysinfo", 1, { { "struct compat_sysinfo *", "info" } } },
{ 118, "fsync", 1, { { "unsigned int", "fd" } } },
{ 119, "sigreturn", 0, {} },
{ 120, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 121, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 122, "uname", 1, { { "struct new_utsname *", "name" } } },
{ 124, "adjtimex", 1, { { "struct __kernel_timex *", "txc_p" } } },
{ 125, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 126, "sigprocmask", 3, { { "int", "how" }, { "compat_old_sigset_t *", "nset" }, { "compat_old_sigset_t *", "oset" } } },
{ 128, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 129, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 131, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 132, "getpgid", 1, { { "pid_t", "pid" } } },
{ 133, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 134, "bdflush", 0, {} },
{ 135, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 136, "personality", 1, { { "unsigned int", "personality" } } },
{ 138, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 139, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 140, "_llseek", 5, { { "unsigned int", "fd" }, { "unsigned long", "offset_high" }, { "unsigned long", "offset_low" }, { "loff_t *", "result" }, { "unsigned int", "whence" } } },
{ 141, "getdents", 3, { { "unsigned int", "fd" }, { "struct compat_linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 142, "_newselect", 5, { { "int", "n" }, { "compat_ulong_t *", "inp" }, { "compat_ulong_t *", "outp" }, { "compat_ulong_t *", "exp" }, { "struct old_timeval32 *", "tvp" } } },
{ 143, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 144, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 145, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 146, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 147, "getsid", 1, { { "pid_t", "pid" } } },
{ 148, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 149, "_sysctl", 0, {} },
{ 150, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 151, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 152, "mlockall", 1, { { "int", "flags" } } },
{ 153, "munlockall", 0, {} },
{ 154, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 155, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 156, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 157, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 158, "sched_yield", 0, {} },
{ 159, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 160, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 161, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 162, "nanosleep", 2, { { "struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 163, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 164, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 165, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 168, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 169, "nfsservctl", 0, {} },
{ 170, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 171, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 172, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 173, "rt_sigreturn", 0, {} },
{ 174, "rt_sigaction", 4, { { "int", "sig" }, { "const struct compat_sigaction *", "act" }, { "struct compat_sigaction *", "oact" }, { "compat_size_t", "sigsetsize" } } },
{ 175, "rt_sigprocmask", 4, { { "int", "how" }, { "compat_sigset_t *", "nset" }, { "compat_sigset_t *", "oset" }, { "compat_size_t", "sigsetsize" } } },
{ 176, "rt_sigpending", 2, { { "compat_sigset_t *", "uset" }, { "compat_size_t", "sigsetsize" } } },
{ 177, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 178, "rt_sigqueueinfo", 3, { { "compat_pid_t", "pid" }, { "int", "sig" }, { "struct compat_siginfo *", "uinfo" } } },
{ 179, "rt_sigsuspend", 2, { { "compat_sigset_t *", "unewset" }, { "compat_size_t", "sigsetsize" } } },
{ 180, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 181, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 182, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 183, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 184, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 185, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 186, "sigaltstack", 2, { { "const compat_stack_t *", "uss_ptr" }, { "compat_stack_t *", "uoss_ptr" } } },
{ 187, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "compat_off_t *", "offset" }, { "compat_size_t", "count" } } },
{ 190, "vfork", 0, {} },
{ 191, "ugetrlimit", 2, { { "unsigned int", "resource" }, { "struct compat_rlimit *", "rlim" } } },
{ 192, "mmap2", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "off_4k" } } },
#if G_BYTE_ORDER == G_BIG_ENDIAN
{ 193, "truncate64", 4, { { "const char *", "pathname" }, { "u32", "__pad" }, { "u32", "length_hi" }, { "u32", "length_lo" } } },
#else
{ 193, "truncate64", 4, { { "const char *", "pathname" }, { "u32", "__pad" }, { "u32", "length_lo" }, { "u32", "length_hi" } } },
#endif
#if G_BYTE_ORDER == G_BIG_ENDIAN
{ 194, "ftruncate64", 4, { { "unsigned int", "fd" }, { "u32", "__pad" }, { "u32", "length_hi" }, { "u32", "length_lo" } } },
#else
{ 194, "ftruncate64", 4, { { "unsigned int", "fd" }, { "u32", "__pad" }, { "u32", "length_lo" }, { "u32", "length_hi" } } },
#endif
{ 195, "stat64", 2, { { "const char *", "filename" }, { "struct stat64 *", "statbuf" } } },
{ 196, "lstat64", 2, { { "const char *", "filename" }, { "struct stat64 *", "statbuf" } } },
{ 197, "fstat64", 2, { { "unsigned long", "fd" }, { "struct stat64 *", "statbuf" } } },
{ 198, "lchown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 199, "getuid32", 0, {} },
{ 200, "getgid32", 0, {} },
{ 201, "geteuid32", 0, {} },
{ 202, "getegid32", 0, {} },
{ 203, "setreuid32", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 204, "setregid32", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 205, "getgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 206, "setgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 207, "fchown32", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 208, "setresuid32", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 209, "getresuid32", 3, { { "uid_t *", "ruid" }, { "uid_t *", "euid" }, { "uid_t *", "suid" } } },
{ 210, "setresgid32", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 211, "getresgid32", 3, { { "gid_t *", "rgid" }, { "gid_t *", "egid" }, { "gid_t *", "sgid" } } },
{ 212, "chown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 213, "setuid32", 1, { { "uid_t", "uid" } } },
{ 214, "setgid32", 1, { { "gid_t", "gid" } } },
{ 215, "setfsuid32", 1, { { "uid_t", "uid" } } },
{ 216, "setfsgid32", 1, { { "gid_t", "gid" } } },
{ 217, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 218, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 219, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 220, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 221, "fcntl64", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "compat_ulong_t", "arg" } } },
{ 224, "gettid", 0, {} },
{ 225, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 226, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 227, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 228, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 229, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 230, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 231, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 232, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 233, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 234, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 235, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 236, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 237, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 238, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 239, "sendfile64", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "compat_loff_t *", "offset" }, { "compat_size_t", "count" } } },
{ 240, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 241, "sched_setaffinity", 3, { { "compat_pid_t", "pid" }, { "unsigned int", "len" }, { "compat_ulong_t *", "user_mask_ptr" } } },
{ 242, "sched_getaffinity", 3, { { "compat_pid_t", "pid" }, { "unsigned int", "len" }, { "compat_ulong_t *", "user_mask_ptr" } } },
{ 243, "io_setup", 2, { { "unsigned", "nr_events" }, { "u32 *", "ctx32p" } } },
{ 244, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 245, "io_getevents", 5, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" } } },
{ 246, "io_submit", 3, { { "compat_aio_context_t", "ctx_id" }, { "int", "nr" }, { "compat_uptr_t *", "iocbpp" } } },
{ 247, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 248, "exit_group", 1, { { "int", "error_code" } } },
{ 249, "lookup_dcookie", 0, {} },
{ 250, "epoll_create", 1, { { "int", "size" } } },
{ 251, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 252, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 253, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 256, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 257, "timer_create", 3, { { "clockid_t", "which_clock" }, { "struct compat_sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 258, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 259, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 260, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 261, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 262, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 263, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 264, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 265, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 266, "statfs64", 3, { { "const char *", "pathname" }, { "compat_size_t", "sz" }, { "struct compat_statfs64 *", "buf" } } },
{ 267, "fstatfs64", 3, { { "unsigned int", "fd" }, { "compat_size_t", "sz" }, { "struct compat_statfs64 *", "buf" } } },
{ 268, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 269, "utimes", 2, { { "const char *", "filename" }, { "struct old_timeval32 *", "t" } } },
#if G_BYTE_ORDER == G_BIG_ENDIAN
{ 270, "arm_fadvise64_64", 6, { { "int", "fd" }, { "int", "advice" }, { "u32", "offset_hi" }, { "u32", "offset_lo" }, { "u32", "len_hi" }, { "u32", "len_lo" } } },
#else
{ 270, "arm_fadvise64_64", 6, { { "int", "fd" }, { "int", "advice" }, { "u32", "offset_lo" }, { "u32", "offset_hi" }, { "u32", "len_lo" }, { "u32", "len_hi" } } },
#endif
{ 271, "pciconfig_iobase", 3, { { "long", "which" }, { "unsigned long", "bus" }, { "unsigned long", "devfn" } } },
{ 272, "pciconfig_read", 5, { { "unsigned long", "bus" }, { "unsigned long", "dfn" }, { "unsigned long", "off" }, { "unsigned long", "len" }, { "void *", "buf" } } },
{ 273, "pciconfig_write", 5, { { "unsigned long", "bus" }, { "unsigned long", "dfn" }, { "unsigned long", "off" }, { "unsigned long", "len" }, { "void *", "buf" } } },
{ 274, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "compat_mode_t", "mode" }, { "struct compat_mq_attr *", "u_attr" } } },
{ 275, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 276, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 277, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 278, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct compat_sigevent *", "u_notification" } } },
{ 279, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct compat_mq_attr *", "u_mqstat" }, { "struct compat_mq_attr *", "u_omqstat" } } },
{ 280, "waitid", 5, { { "int", "which" }, { "compat_pid_t", "pid" }, { "struct compat_siginfo *", "infop" }, { "int", "options" }, { "struct compat_rusage *", "uru" } } },
{ 281, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 282, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 283, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 284, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 285, "accept", 3, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" } } },
{ 286, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 287, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 288, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 289, "send", 4, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 290, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 291, "recv", 4, { { "int", "fd" }, { "void *", "buf" }, { "compat_size_t", "len" }, { "unsigned int", "flags" } } },
{ 292, "recvfrom", 6, { { "int", "fd" }, { "void *", "buf" }, { "compat_size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addrlen" } } },
{ 293, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 294, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 295, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 296, "sendmsg", 3, { { "int", "fd" }, { "struct compat_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 297, "recvmsg", 3, { { "int", "fd" }, { "struct compat_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 298, "semop", 3, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned", "nsops" } } },
{ 299, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 300, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "int", "arg" } } },
{ 301, "msgsnd", 4, { { "int", "msqid" }, { "compat_uptr_t", "msgp" }, { "compat_ssize_t", "msgsz" }, { "int", "msgflg" } } },
{ 302, "msgrcv", 5, { { "int", "msqid" }, { "compat_uptr_t", "msgp" }, { "compat_ssize_t", "msgsz" }, { "compat_long_t", "msgtyp" }, { "int", "msgflg" } } },
{ 303, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 304, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "void *", "uptr" } } },
{ 305, "shmat", 3, { { "int", "shmid" }, { "compat_uptr_t", "shmaddr" }, { "int", "shmflg" } } },
{ 306, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 307, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 308, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "void *", "uptr" } } },
{ 309, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 310, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 311, "keyctl", 5, { { "u32", "option" }, { "u32", "arg2" }, { "u32", "arg3" }, { "u32", "arg4" }, { "u32", "arg5" } } },
{ 312, "semtimedop", 4, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned int", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 313, "vserver", 0, {} },
{ 314, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 315, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 316, "inotify_init", 0, {} },
{ 317, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 318, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 319, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 320, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 321, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 322, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 323, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 324, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 325, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 326, "futimesat", 3, { { "unsigned int", "dfd" }, { "const char *", "filename" }, { "struct old_timeval32 *", "t" } } },
{ 327, "fstatat64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat64 *", "statbuf" }, { "int", "flag" } } },
{ 328, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 329, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 330, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 331, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 332, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 333, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 334, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 335, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 336, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 337, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 338, "set_robust_list", 2, { { "struct compat_robust_list_head *", "head" }, { "compat_size_t", "len" } } },
{ 339, "get_robust_list", 3, { { "int", "pid" }, { "compat_uptr_t *", "head_ptr" }, { "compat_size_t *", "len_ptr" } } },
{ 340, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
#if G_BYTE_ORDER == G_BIG_ENDIAN
{ 341, "arm_sync_file_range", 6, { { "int", "fd" }, { "unsigned int", "flags" }, { "u32", "offset_hi" }, { "u32", "offset_lo" }, { "u32", "nbytes_hi" }, { "u32", "nbytes_lo" } } },
#else
{ 341, "arm_sync_file_range", 6, { { "int", "fd" }, { "unsigned int", "flags" }, { "u32", "offset_lo" }, { "u32", "offset_hi" }, { "u32", "nbytes_lo" }, { "u32", "nbytes_hi" } } },
#endif
{ 342, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 343, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 344, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 345, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 346, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const compat_sigset_t *", "sigmask" }, { "compat_size_t", "sigsetsize" } } },
{ 347, "kexec_load", 4, { { "compat_ulong_t", "entry" }, { "compat_ulong_t", "nr_segments" }, { "struct compat_kexec_segment *", "segments" }, { "compat_ulong_t", "flags" } } },
{ 348, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 349, "signalfd", 3, { { "int", "ufd" }, { "const compat_sigset_t *", "user_mask" }, { "compat_size_t", "sigsetsize" } } },
{ 350, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 351, "eventfd", 1, { { "unsigned int", "count" } } },
{ 352, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 353, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 354, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 355, "signalfd4", 4, { { "int", "ufd" }, { "const compat_sigset_t *", "user_mask" }, { "compat_size_t", "sigsetsize" }, { "int", "flags" } } },
{ 356, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 357, "epoll_create1", 1, { { "int", "flags" } } },
{ 358, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 359, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 360, "inotify_init1", 1, { { "int", "flags" } } },
{ 361, "preadv", 5, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" } } },
{ 362, "pwritev", 5, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" } } },
{ 363, "rt_tgsigqueueinfo", 4, { { "compat_pid_t", "tgid" }, { "compat_pid_t", "pid" }, { "int", "sig" }, { "struct compat_siginfo *", "uinfo" } } },
{ 364, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 365, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 366, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 367, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 368, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 369, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 370, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 371, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 372, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 373, "syncfs", 1, { { "int", "fd" } } },
{ 374, "sendmmsg", 4, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 375, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 376, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 377, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 378, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 379, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 380, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 381, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 382, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 383, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 384, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 385, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 386, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 387, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const compat_uptr_t *", "argv" }, { "const compat_uptr_t *", "envp" }, { "int", "flags" } } },
{ 388, "userfaultfd", 1, { { "int", "flags" } } },
{ 389, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 390, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 391, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 392, "preadv2", 6, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" }, { "rwf_t", "flags" } } },
{ 393, "pwritev2", 6, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" }, { "rwf_t", "flags" } } },
{ 394, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 395, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 396, "pkey_free", 1, { { "int", "pkey" } } },
{ 397, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 398, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 399, "io_pgetevents", 6, { { "compat_aio_context_t", "ctx_id" }, { "compat_long_t", "min_nr" }, { "compat_long_t", "nr" }, { "struct io_event *", "events" }, { "struct old_timespec32 *", "timeout" }, { "const struct __compat_aio_sigset *", "usig" } } },
{ 400, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 401, "kexec_file_load", 5, { { "int", "kernel_fd" }, { "int", "initrd_fd" }, { "unsigned long", "cmdline_len" }, { "const char *", "cmdline_ptr" }, { "unsigned long", "flags" } } },
{ 403, "clock_gettime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 404, "clock_settime64", 2, { { "clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 405, "clock_adjtime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timex *", "tx" } } },
{ 406, "clock_getres_time64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 407, "clock_nanosleep_time64", 4, { { "clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 408, "timer_gettime64", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 409, "timer_settime64", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 410, "timerfd_gettime64", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 411, "timerfd_settime64", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 412, "utimensat_time64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 413, "pselect6_time64", 6, { { "int", "n" }, { "compat_ulong_t *", "inp" }, { "compat_ulong_t *", "outp" }, { "compat_ulong_t *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 414, "ppoll_time64", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const compat_sigset_t *", "sigmask" }, { "compat_size_t", "sigsetsize" } } },
{ 416, "io_pgetevents_time64", 6, { { "compat_aio_context_t", "ctx_id" }, { "compat_long_t", "min_nr" }, { "compat_long_t", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __compat_aio_sigset *", "usig" } } },
{ 417, "recvmmsg_time64", 5, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 418, "mq_timedsend_time64", 5, { { "mqd_t", "mqdes" }, { "const char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 419, "mq_timedreceive_time64", 5, { { "mqd_t", "mqdes" }, { "char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 420, "semtimedop_time64", 4, { { "int", "semid" }, { "struct sembuf *", "sops" }, { "unsigned", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 421, "rt_sigtimedwait_time64", 4, { { "compat_sigset_t *", "uthese" }, { "struct compat_siginfo *", "uinfo" }, { "struct __kernel_timespec *", "uts" }, { "compat_size_t", "sigsetsize" } } },
{ 422, "futex_time64", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 423, "sched_rr_get_interval_time64", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const compat_sigset_t *", "sigmask" }, { "compat_size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_compat32_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_compat32_syscall_signatures;
}
+756
View File
@@ -0,0 +1,756 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
IO_SETUP = 0,
IO_DESTROY = 1,
IO_SUBMIT = 2,
IO_CANCEL = 3,
IO_GETEVENTS = 4,
SETXATTR = 5,
LSETXATTR = 6,
FSETXATTR = 7,
GETXATTR = 8,
LGETXATTR = 9,
FGETXATTR = 10,
LISTXATTR = 11,
LLISTXATTR = 12,
FLISTXATTR = 13,
REMOVEXATTR = 14,
LREMOVEXATTR = 15,
FREMOVEXATTR = 16,
GETCWD = 17,
LOOKUP_DCOOKIE = 18,
EVENTFD2 = 19,
EPOLL_CREATE1 = 20,
EPOLL_CTL = 21,
EPOLL_PWAIT = 22,
DUP = 23,
DUP3 = 24,
FCNTL = 25,
INOTIFY_INIT1 = 26,
INOTIFY_ADD_WATCH = 27,
INOTIFY_RM_WATCH = 28,
IOCTL = 29,
IOPRIO_SET = 30,
IOPRIO_GET = 31,
FLOCK = 32,
MKNODAT = 33,
MKDIRAT = 34,
UNLINKAT = 35,
SYMLINKAT = 36,
LINKAT = 37,
UMOUNT2 = 39,
MOUNT = 40,
PIVOT_ROOT = 41,
NFSSERVCTL = 42,
STATFS = 43,
FSTATFS = 44,
TRUNCATE = 45,
FTRUNCATE = 46,
FALLOCATE = 47,
FACCESSAT = 48,
CHDIR = 49,
FCHDIR = 50,
CHROOT = 51,
FCHMOD = 52,
FCHMODAT = 53,
FCHOWNAT = 54,
FCHOWN = 55,
OPENAT = 56,
CLOSE = 57,
VHANGUP = 58,
PIPE2 = 59,
QUOTACTL = 60,
GETDENTS64 = 61,
LSEEK = 62,
READ = 63,
WRITE = 64,
READV = 65,
WRITEV = 66,
PREAD64 = 67,
PWRITE64 = 68,
PREADV = 69,
PWRITEV = 70,
SENDFILE = 71,
PSELECT6 = 72,
PPOLL = 73,
SIGNALFD4 = 74,
VMSPLICE = 75,
SPLICE = 76,
TEE = 77,
READLINKAT = 78,
NEWFSTATAT = 79,
FSTAT = 80,
SYNC = 81,
FSYNC = 82,
FDATASYNC = 83,
SYNC_FILE_RANGE = 84,
TIMERFD_CREATE = 85,
TIMERFD_SETTIME = 86,
TIMERFD_GETTIME = 87,
UTIMENSAT = 88,
ACCT = 89,
CAPGET = 90,
CAPSET = 91,
PERSONALITY = 92,
EXIT = 93,
EXIT_GROUP = 94,
WAITID = 95,
SET_TID_ADDRESS = 96,
UNSHARE = 97,
FUTEX = 98,
SET_ROBUST_LIST = 99,
GET_ROBUST_LIST = 100,
NANOSLEEP = 101,
GETITIMER = 102,
SETITIMER = 103,
KEXEC_LOAD = 104,
INIT_MODULE = 105,
DELETE_MODULE = 106,
TIMER_CREATE = 107,
TIMER_GETTIME = 108,
TIMER_GETOVERRUN = 109,
TIMER_SETTIME = 110,
TIMER_DELETE = 111,
CLOCK_SETTIME = 112,
CLOCK_GETTIME = 113,
CLOCK_GETRES = 114,
CLOCK_NANOSLEEP = 115,
SYSLOG = 116,
PTRACE = 117,
SCHED_SETPARAM = 118,
SCHED_SETSCHEDULER = 119,
SCHED_GETSCHEDULER = 120,
SCHED_GETPARAM = 121,
SCHED_SETAFFINITY = 122,
SCHED_GETAFFINITY = 123,
SCHED_YIELD = 124,
SCHED_GET_PRIORITY_MAX = 125,
SCHED_GET_PRIORITY_MIN = 126,
SCHED_RR_GET_INTERVAL = 127,
RESTART_SYSCALL = 128,
KILL = 129,
TKILL = 130,
TGKILL = 131,
SIGALTSTACK = 132,
RT_SIGSUSPEND = 133,
RT_SIGACTION = 134,
RT_SIGPROCMASK = 135,
RT_SIGPENDING = 136,
RT_SIGTIMEDWAIT = 137,
RT_SIGQUEUEINFO = 138,
RT_SIGRETURN = 139,
SETPRIORITY = 140,
GETPRIORITY = 141,
REBOOT = 142,
SETREGID = 143,
SETGID = 144,
SETREUID = 145,
SETUID = 146,
SETRESUID = 147,
GETRESUID = 148,
SETRESGID = 149,
GETRESGID = 150,
SETFSUID = 151,
SETFSGID = 152,
TIMES = 153,
SETPGID = 154,
GETPGID = 155,
GETSID = 156,
SETSID = 157,
GETGROUPS = 158,
SETGROUPS = 159,
UNAME = 160,
SETHOSTNAME = 161,
SETDOMAINNAME = 162,
GETRLIMIT = 163,
SETRLIMIT = 164,
GETRUSAGE = 165,
UMASK = 166,
PRCTL = 167,
GETCPU = 168,
GETTIMEOFDAY = 169,
SETTIMEOFDAY = 170,
ADJTIMEX = 171,
GETPID = 172,
GETPPID = 173,
GETUID = 174,
GETEUID = 175,
GETGID = 176,
GETEGID = 177,
GETTID = 178,
SYSINFO = 179,
MQ_OPEN = 180,
MQ_UNLINK = 181,
MQ_TIMEDSEND = 182,
MQ_TIMEDRECEIVE = 183,
MQ_NOTIFY = 184,
MQ_GETSETATTR = 185,
MSGGET = 186,
MSGCTL = 187,
MSGRCV = 188,
MSGSND = 189,
SEMGET = 190,
SEMCTL = 191,
SEMTIMEDOP = 192,
SEMOP = 193,
SHMGET = 194,
SHMCTL = 195,
SHMAT = 196,
SHMDT = 197,
SOCKET = 198,
SOCKETPAIR = 199,
BIND = 200,
LISTEN = 201,
ACCEPT = 202,
CONNECT = 203,
GETSOCKNAME = 204,
GETPEERNAME = 205,
SENDTO = 206,
RECVFROM = 207,
SETSOCKOPT = 208,
GETSOCKOPT = 209,
SHUTDOWN = 210,
SENDMSG = 211,
RECVMSG = 212,
READAHEAD = 213,
BRK = 214,
MUNMAP = 215,
MREMAP = 216,
ADD_KEY = 217,
REQUEST_KEY = 218,
KEYCTL = 219,
CLONE = 220,
EXECVE = 221,
MMAP = 222,
FADVISE64 = 223,
SWAPON = 224,
SWAPOFF = 225,
MPROTECT = 226,
MSYNC = 227,
MLOCK = 228,
MUNLOCK = 229,
MLOCKALL = 230,
MUNLOCKALL = 231,
MINCORE = 232,
MADVISE = 233,
REMAP_FILE_PAGES = 234,
MBIND = 235,
GET_MEMPOLICY = 236,
SET_MEMPOLICY = 237,
MIGRATE_PAGES = 238,
MOVE_PAGES = 239,
RT_TGSIGQUEUEINFO = 240,
PERF_EVENT_OPEN = 241,
ACCEPT4 = 242,
RECVMMSG = 243,
WAIT4 = 260,
PRLIMIT64 = 261,
FANOTIFY_INIT = 262,
FANOTIFY_MARK = 263,
NAME_TO_HANDLE_AT = 264,
OPEN_BY_HANDLE_AT = 265,
CLOCK_ADJTIME = 266,
SYNCFS = 267,
SETNS = 268,
SENDMMSG = 269,
PROCESS_VM_READV = 270,
PROCESS_VM_WRITEV = 271,
KCMP = 272,
FINIT_MODULE = 273,
SCHED_SETATTR = 274,
SCHED_GETATTR = 275,
RENAMEAT2 = 276,
SECCOMP = 277,
GETRANDOM = 278,
MEMFD_CREATE = 279,
BPF = 280,
EXECVEAT = 281,
USERFAULTFD = 282,
MEMBARRIER = 283,
MLOCK2 = 284,
COPY_FILE_RANGE = 285,
PREADV2 = 286,
PWRITEV2 = 287,
PKEY_MPROTECT = 288,
PKEY_ALLOC = 289,
PKEY_FREE = 290,
STATX = 291,
IO_PGETEVENTS = 292,
RSEQ = 293,
KEXEC_FILE_LOAD = 294,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
public enum LinuxCompat32Syscall {
RESTART_SYSCALL = 0,
EXIT = 1,
FORK = 2,
READ = 3,
WRITE = 4,
OPEN = 5,
CLOSE = 6,
CREAT = 8,
LINK = 9,
UNLINK = 10,
EXECVE = 11,
CHDIR = 12,
MKNOD = 14,
CHMOD = 15,
LCHOWN = 16,
LSEEK = 19,
GETPID = 20,
MOUNT = 21,
SETUID = 23,
GETUID = 24,
PTRACE = 26,
PAUSE = 29,
ACCESS = 33,
NICE = 34,
SYNC = 36,
KILL = 37,
RENAME = 38,
MKDIR = 39,
RMDIR = 40,
DUP = 41,
PIPE = 42,
TIMES = 43,
BRK = 45,
SETGID = 46,
GETGID = 47,
GETEUID = 49,
GETEGID = 50,
ACCT = 51,
UMOUNT2 = 52,
IOCTL = 54,
FCNTL = 55,
SETPGID = 57,
UMASK = 60,
CHROOT = 61,
USTAT = 62,
DUP2 = 63,
GETPPID = 64,
GETPGRP = 65,
SETSID = 66,
SIGACTION = 67,
SETREUID = 70,
SETREGID = 71,
SIGSUSPEND = 72,
SIGPENDING = 73,
SETHOSTNAME = 74,
SETRLIMIT = 75,
GETRUSAGE = 77,
GETTIMEOFDAY = 78,
SETTIMEOFDAY = 79,
GETGROUPS = 80,
SETGROUPS = 81,
SYMLINK = 83,
READLINK = 85,
USELIB = 86,
SWAPON = 87,
REBOOT = 88,
MUNMAP = 91,
TRUNCATE = 92,
FTRUNCATE = 93,
FCHMOD = 94,
FCHOWN = 95,
GETPRIORITY = 96,
SETPRIORITY = 97,
STATFS = 99,
FSTATFS = 100,
SYSLOG = 103,
SETITIMER = 104,
GETITIMER = 105,
STAT = 106,
LSTAT = 107,
FSTAT = 108,
VHANGUP = 111,
WAIT4 = 114,
SWAPOFF = 115,
SYSINFO = 116,
FSYNC = 118,
SIGRETURN = 119,
CLONE = 120,
SETDOMAINNAME = 121,
UNAME = 122,
ADJTIMEX = 124,
MPROTECT = 125,
SIGPROCMASK = 126,
INIT_MODULE = 128,
DELETE_MODULE = 129,
QUOTACTL = 131,
GETPGID = 132,
FCHDIR = 133,
BDFLUSH = 134,
SYSFS = 135,
PERSONALITY = 136,
SETFSUID = 138,
SETFSGID = 139,
_LLSEEK = 140,
GETDENTS = 141,
_NEWSELECT = 142,
FLOCK = 143,
MSYNC = 144,
READV = 145,
WRITEV = 146,
GETSID = 147,
FDATASYNC = 148,
_SYSCTL = 149,
MLOCK = 150,
MUNLOCK = 151,
MLOCKALL = 152,
MUNLOCKALL = 153,
SCHED_SETPARAM = 154,
SCHED_GETPARAM = 155,
SCHED_SETSCHEDULER = 156,
SCHED_GETSCHEDULER = 157,
SCHED_YIELD = 158,
SCHED_GET_PRIORITY_MAX = 159,
SCHED_GET_PRIORITY_MIN = 160,
SCHED_RR_GET_INTERVAL = 161,
NANOSLEEP = 162,
MREMAP = 163,
SETRESUID = 164,
GETRESUID = 165,
POLL = 168,
NFSSERVCTL = 169,
SETRESGID = 170,
GETRESGID = 171,
PRCTL = 172,
RT_SIGRETURN = 173,
RT_SIGACTION = 174,
RT_SIGPROCMASK = 175,
RT_SIGPENDING = 176,
RT_SIGTIMEDWAIT = 177,
RT_SIGQUEUEINFO = 178,
RT_SIGSUSPEND = 179,
PREAD64 = 180,
PWRITE64 = 181,
CHOWN = 182,
GETCWD = 183,
CAPGET = 184,
CAPSET = 185,
SIGALTSTACK = 186,
SENDFILE = 187,
VFORK = 190,
UGETRLIMIT = 191,
MMAP2 = 192,
TRUNCATE64 = 193,
FTRUNCATE64 = 194,
STAT64 = 195,
LSTAT64 = 196,
FSTAT64 = 197,
LCHOWN32 = 198,
GETUID32 = 199,
GETGID32 = 200,
GETEUID32 = 201,
GETEGID32 = 202,
SETREUID32 = 203,
SETREGID32 = 204,
GETGROUPS32 = 205,
SETGROUPS32 = 206,
FCHOWN32 = 207,
SETRESUID32 = 208,
GETRESUID32 = 209,
SETRESGID32 = 210,
GETRESGID32 = 211,
CHOWN32 = 212,
SETUID32 = 213,
SETGID32 = 214,
SETFSUID32 = 215,
SETFSGID32 = 216,
GETDENTS64 = 217,
PIVOT_ROOT = 218,
MINCORE = 219,
MADVISE = 220,
FCNTL64 = 221,
GETTID = 224,
READAHEAD = 225,
SETXATTR = 226,
LSETXATTR = 227,
FSETXATTR = 228,
GETXATTR = 229,
LGETXATTR = 230,
FGETXATTR = 231,
LISTXATTR = 232,
LLISTXATTR = 233,
FLISTXATTR = 234,
REMOVEXATTR = 235,
LREMOVEXATTR = 236,
FREMOVEXATTR = 237,
TKILL = 238,
SENDFILE64 = 239,
FUTEX = 240,
SCHED_SETAFFINITY = 241,
SCHED_GETAFFINITY = 242,
IO_SETUP = 243,
IO_DESTROY = 244,
IO_GETEVENTS = 245,
IO_SUBMIT = 246,
IO_CANCEL = 247,
EXIT_GROUP = 248,
LOOKUP_DCOOKIE = 249,
EPOLL_CREATE = 250,
EPOLL_CTL = 251,
EPOLL_WAIT = 252,
REMAP_FILE_PAGES = 253,
SET_TID_ADDRESS = 256,
TIMER_CREATE = 257,
TIMER_SETTIME = 258,
TIMER_GETTIME = 259,
TIMER_GETOVERRUN = 260,
TIMER_DELETE = 261,
CLOCK_SETTIME = 262,
CLOCK_GETTIME = 263,
CLOCK_GETRES = 264,
CLOCK_NANOSLEEP = 265,
STATFS64 = 266,
FSTATFS64 = 267,
TGKILL = 268,
UTIMES = 269,
ARM_FADVISE64_64 = 270,
PCICONFIG_IOBASE = 271,
PCICONFIG_READ = 272,
PCICONFIG_WRITE = 273,
MQ_OPEN = 274,
MQ_UNLINK = 275,
MQ_TIMEDSEND = 276,
MQ_TIMEDRECEIVE = 277,
MQ_NOTIFY = 278,
MQ_GETSETATTR = 279,
WAITID = 280,
SOCKET = 281,
BIND = 282,
CONNECT = 283,
LISTEN = 284,
ACCEPT = 285,
GETSOCKNAME = 286,
GETPEERNAME = 287,
SOCKETPAIR = 288,
SEND = 289,
SENDTO = 290,
RECV = 291,
RECVFROM = 292,
SHUTDOWN = 293,
SETSOCKOPT = 294,
GETSOCKOPT = 295,
SENDMSG = 296,
RECVMSG = 297,
SEMOP = 298,
SEMGET = 299,
SEMCTL = 300,
MSGSND = 301,
MSGRCV = 302,
MSGGET = 303,
MSGCTL = 304,
SHMAT = 305,
SHMDT = 306,
SHMGET = 307,
SHMCTL = 308,
ADD_KEY = 309,
REQUEST_KEY = 310,
KEYCTL = 311,
SEMTIMEDOP = 312,
VSERVER = 313,
IOPRIO_SET = 314,
IOPRIO_GET = 315,
INOTIFY_INIT = 316,
INOTIFY_ADD_WATCH = 317,
INOTIFY_RM_WATCH = 318,
MBIND = 319,
GET_MEMPOLICY = 320,
SET_MEMPOLICY = 321,
OPENAT = 322,
MKDIRAT = 323,
MKNODAT = 324,
FCHOWNAT = 325,
FUTIMESAT = 326,
FSTATAT64 = 327,
UNLINKAT = 328,
RENAMEAT = 329,
LINKAT = 330,
SYMLINKAT = 331,
READLINKAT = 332,
FCHMODAT = 333,
FACCESSAT = 334,
PSELECT6 = 335,
PPOLL = 336,
UNSHARE = 337,
SET_ROBUST_LIST = 338,
GET_ROBUST_LIST = 339,
SPLICE = 340,
ARM_SYNC_FILE_RANGE = 341,
TEE = 342,
VMSPLICE = 343,
MOVE_PAGES = 344,
GETCPU = 345,
EPOLL_PWAIT = 346,
KEXEC_LOAD = 347,
UTIMENSAT = 348,
SIGNALFD = 349,
TIMERFD_CREATE = 350,
EVENTFD = 351,
FALLOCATE = 352,
TIMERFD_SETTIME = 353,
TIMERFD_GETTIME = 354,
SIGNALFD4 = 355,
EVENTFD2 = 356,
EPOLL_CREATE1 = 357,
DUP3 = 358,
PIPE2 = 359,
INOTIFY_INIT1 = 360,
PREADV = 361,
PWRITEV = 362,
RT_TGSIGQUEUEINFO = 363,
PERF_EVENT_OPEN = 364,
RECVMMSG = 365,
ACCEPT4 = 366,
FANOTIFY_INIT = 367,
FANOTIFY_MARK = 368,
PRLIMIT64 = 369,
NAME_TO_HANDLE_AT = 370,
OPEN_BY_HANDLE_AT = 371,
CLOCK_ADJTIME = 372,
SYNCFS = 373,
SENDMMSG = 374,
SETNS = 375,
PROCESS_VM_READV = 376,
PROCESS_VM_WRITEV = 377,
KCMP = 378,
FINIT_MODULE = 379,
SCHED_SETATTR = 380,
SCHED_GETATTR = 381,
RENAMEAT2 = 382,
SECCOMP = 383,
GETRANDOM = 384,
MEMFD_CREATE = 385,
BPF = 386,
EXECVEAT = 387,
USERFAULTFD = 388,
MEMBARRIER = 389,
MLOCK2 = 390,
COPY_FILE_RANGE = 391,
PREADV2 = 392,
PWRITEV2 = 393,
PKEY_MPROTECT = 394,
PKEY_ALLOC = 395,
PKEY_FREE = 396,
STATX = 397,
RSEQ = 398,
IO_PGETEVENTS = 399,
MIGRATE_PAGES = 400,
KEXEC_FILE_LOAD = 401,
CLOCK_GETTIME64 = 403,
CLOCK_SETTIME64 = 404,
CLOCK_ADJTIME64 = 405,
CLOCK_GETRES_TIME64 = 406,
CLOCK_NANOSLEEP_TIME64 = 407,
TIMER_GETTIME64 = 408,
TIMER_SETTIME64 = 409,
TIMERFD_GETTIME64 = 410,
TIMERFD_SETTIME64 = 411,
UTIMENSAT_TIME64 = 412,
PSELECT6_TIME64 = 413,
PPOLL_TIME64 = 414,
IO_PGETEVENTS_TIME64 = 416,
RECVMMSG_TIME64 = 417,
MQ_TIMEDSEND_TIME64 = 418,
MQ_TIMEDRECEIVE_TIME64 = 419,
SEMTIMEDOP_TIME64 = 420,
RT_SIGTIMEDWAIT_TIME64 = 421,
FUTEX_TIME64 = 422,
SCHED_RR_GET_INTERVAL_TIME64 = 423,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
}
File diff suppressed because it is too large. Load diff
+462
View File
@@ -0,0 +1,462 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 4001, "exit", 1, { { "int", "error_code" } } },
{ 4002, "fork", 0, {} },
{ 4003, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 4004, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 4005, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 4006, "close", 1, { { "unsigned int", "fd" } } },
{ 4007, "waitpid", 3, { { "pid_t", "pid" }, { "int *", "stat_addr" }, { "int", "options" } } },
{ 4008, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 4009, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 4010, "unlink", 1, { { "const char *", "pathname" } } },
{ 4011, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 4012, "chdir", 1, { { "const char *", "filename" } } },
{ 4013, "time", 1, { { "old_time32_t *", "tloc" } } },
{ 4014, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 4015, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 4016, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 4017, "break", 0, {} },
{ 4018, "unused18", 0, {} },
{ 4019, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 4020, "getpid", 0, {} },
{ 4021, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 4022, "umount", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 4023, "setuid", 1, { { "uid_t", "uid" } } },
{ 4024, "getuid", 0, {} },
{ 4025, "stime", 1, { { "old_time32_t *", "tptr" } } },
{ 4026, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 4027, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 4028, "unused28", 0, {} },
{ 4029, "pause", 0, {} },
{ 4030, "utime", 2, { { "char *", "filename" }, { "struct utimbuf *", "times" } } },
{ 4031, "stty", 0, {} },
{ 4032, "gtty", 0, {} },
{ 4033, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 4034, "nice", 1, { { "int", "increment" } } },
{ 4035, "ftime", 0, {} },
{ 4036, "sync", 0, {} },
{ 4037, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 4038, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 4039, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 4040, "rmdir", 1, { { "const char *", "pathname" } } },
{ 4041, "dup", 1, { { "unsigned int", "fildes" } } },
{ 4042, "pipe", 1, { { "int *", "fildes" } } },
{ 4043, "times", 1, { { "struct tms *", "tbuf" } } },
{ 4044, "prof", 0, {} },
{ 4045, "brk", 1, { { "unsigned long", "brk" } } },
{ 4046, "setgid", 1, { { "gid_t", "gid" } } },
{ 4047, "getgid", 0, {} },
{ 4048, "signal", 0, {} },
{ 4049, "geteuid", 0, {} },
{ 4050, "getegid", 0, {} },
{ 4051, "acct", 1, { { "const char *", "name" } } },
{ 4052, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 4053, "lock", 0, {} },
{ 4054, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 4055, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 4056, "mpx", 0, {} },
{ 4057, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 4058, "ulimit", 0, {} },
{ 4059, "unused59", 1, { { "struct oldold_utsname *", "arg0" } } },
{ 4060, "umask", 1, { { "int", "mask" } } },
{ 4061, "chroot", 1, { { "const char *", "filename" } } },
{ 4062, "ustat", 2, { { "unsigned", "dev" }, { "struct ustat *", "ubuf" } } },
{ 4063, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 4064, "getppid", 0, {} },
{ 4065, "getpgrp", 0, {} },
{ 4066, "setsid", 0, {} },
{ 4068, "sgetmask", 0, {} },
{ 4069, "ssetmask", 1, { { "int", "newmask" } } },
{ 4070, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 4071, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 4073, "sigpending", 1, { { "old_sigset_t *", "uset" } } },
{ 4074, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 4075, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 4076, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 4077, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 4078, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 4079, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 4080, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 4081, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 4082, "reserved82", 0, {} },
{ 4083, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 4084, "unused84", 0, {} },
{ 4085, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 4086, "uselib", 1, { { "const char *", "library" } } },
{ 4087, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 4088, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 4089, "readdir", 3, { { "unsigned", "int" }, { "struct old_linux_dirent *", "arg1" }, { "unsigned", "int" } } },
{ 4090, "mmap", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "off_t", "offset" } } },
{ 4091, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 4092, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 4093, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 4094, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 4095, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 4096, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 4097, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 4098, "profil", 0, {} },
{ 4099, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 4100, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 4101, "ioperm", 0, {} },
{ 4102, "socketcall", 2, { { "int", "call" }, { "unsigned long *", "args" } } },
{ 4103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 4104, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 4105, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 4106, "stat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 4107, "lstat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 4108, "fstat", 2, { { "unsigned int", "fd" }, { "struct stat *", "statbuf" } } },
{ 4109, "unused109", 1, { { "struct old_utsname *", "arg0" } } },
{ 4110, "iopl", 0, {} },
{ 4111, "vhangup", 0, {} },
{ 4112, "idle", 0, {} },
{ 4113, "vm86", 0, {} },
{ 4114, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 4115, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 4116, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 4117, "ipc", 6, { { "unsigned int", "call" }, { "int", "first" }, { "unsigned long", "second" }, { "unsigned long", "third" }, { "void *", "ptr" }, { "long", "fifth" } } },
{ 4118, "fsync", 1, { { "unsigned int", "fd" } } },
{ 4120, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 4121, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 4122, "uname", 1, { { "struct old_utsname *", "name" } } },
{ 4123, "modify_ldt", 0, {} },
{ 4124, "adjtimex", 1, { { "struct old_timex32 *", "txc_p" } } },
{ 4125, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 4126, "sigprocmask", 3, { { "int", "how" }, { "old_sigset_t *", "nset" }, { "old_sigset_t *", "oset" } } },
{ 4127, "create_module", 0, {} },
{ 4128, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 4129, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 4130, "get_kernel_syms", 0, {} },
{ 4131, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 4132, "getpgid", 1, { { "pid_t", "pid" } } },
{ 4133, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 4134, "bdflush", 0, {} },
{ 4135, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 4136, "personality", 1, { { "unsigned int", "personality" } } },
{ 4137, "afs_syscall", 0, {} },
{ 4138, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 4139, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 4140, "_llseek", 5, { { "unsigned int", "fd" }, { "unsigned long", "offset_high" }, { "unsigned long", "offset_low" }, { "loff_t *", "result" }, { "unsigned int", "whence" } } },
{ 4141, "getdents", 3, { { "unsigned int", "fd" }, { "struct linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 4142, "_newselect", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 4143, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 4144, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 4145, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 4146, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 4147, "cacheflush", 3, { { "unsigned long", "addr" }, { "unsigned long", "bytes" }, { "unsigned int", "cache" } } },
{ 4148, "cachectl", 3, { { "char *", "addr" }, { "int", "nbytes" }, { "int", "op" } } },
{ 4149, "sysmips", 3, { { "long", "cmd" }, { "long", "arg1" }, { "long", "arg2" } } },
{ 4150, "unused150", 0, {} },
{ 4151, "getsid", 1, { { "pid_t", "pid" } } },
{ 4152, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 4153, "_sysctl", 0, {} },
{ 4154, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 4155, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 4156, "mlockall", 1, { { "int", "flags" } } },
{ 4157, "munlockall", 0, {} },
{ 4158, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 4159, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 4160, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 4161, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 4162, "sched_yield", 0, {} },
{ 4163, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 4164, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 4165, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 4166, "nanosleep", 2, { { "struct old_timespec32 *", "rqtp" }, { "struct old_timespec32 *", "rmtp" } } },
{ 4167, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 4168, "accept", 3, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" } } },
{ 4169, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 4170, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 4171, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 4172, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 4173, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 4174, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 4175, "recv", 4, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" } } },
{ 4176, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 4177, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 4178, "send", 4, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 4179, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 4180, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 4181, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 4182, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 4183, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 4184, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 4185, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 4186, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 4187, "query_module", 0, {} },
{ 4188, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 4189, "nfsservctl", 0, {} },
{ 4190, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 4191, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 4192, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 4194, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 4195, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 4196, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 4197, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 4198, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 4199, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 4200, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 4201, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 4202, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 4203, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 4204, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 4205, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 4206, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 4207, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 4208, "getpmsg", 0, {} },
{ 4209, "putpmsg", 0, {} },
{ 4210, "mmap2", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "pgoff" } } },
{ 4211, "truncate64", 2, { { "const char *", "path" }, { "loff_t", "length" } } },
{ 4212, "ftruncate64", 2, { { "unsigned int", "fd" }, { "loff_t", "length" } } },
{ 4213, "stat64", 2, { { "const char *", "filename" }, { "struct stat64 *", "statbuf" } } },
{ 4214, "lstat64", 2, { { "const char *", "filename" }, { "struct stat64 *", "statbuf" } } },
{ 4215, "fstat64", 2, { { "unsigned long", "fd" }, { "struct stat64 *", "statbuf" } } },
{ 4216, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 4217, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 4218, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 4219, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 4220, "fcntl64", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 4221, "reserved221", 0, {} },
{ 4222, "gettid", 0, {} },
{ 4223, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 4224, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 4225, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 4226, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 4227, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 4228, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 4229, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 4230, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 4231, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 4232, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 4233, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 4234, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 4235, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 4236, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 4237, "sendfile64", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "loff_t *", "offset" }, { "size_t", "count" } } },
{ 4238, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 4239, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 4240, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 4241, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 4242, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 4243, "io_getevents", 5, { { "__u32", "ctx_id" }, { "__s32", "min_nr" }, { "__s32", "nr" }, { "struct io_event *", "events" }, { "struct old_timespec32 *", "timeout" } } },
{ 4244, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 4245, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 4246, "exit_group", 1, { { "int", "error_code" } } },
{ 4247, "lookup_dcookie", 0, {} },
{ 4248, "epoll_create", 1, { { "int", "size" } } },
{ 4249, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 4250, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 4251, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 4252, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 4253, "restart_syscall", 0, {} },
{ 4254, "fadvise64", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "len" }, { "int", "advice" } } },
{ 4255, "statfs64", 3, { { "const char *", "pathname" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 4256, "fstatfs64", 3, { { "unsigned int", "fd" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 4257, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 4258, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 4259, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 4260, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 4261, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 4262, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 4263, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 4264, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 4265, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 4266, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 4267, "utimes", 2, { { "char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 4268, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 4269, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 4270, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 4271, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 4272, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 4273, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 4274, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 4275, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 4276, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 4277, "vserver", 0, {} },
{ 4278, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 4280, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 4281, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 4282, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 4283, "set_thread_area", 1, { { "unsigned long", "addr" } } },
{ 4284, "inotify_init", 0, {} },
{ 4285, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 4286, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 4287, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 4288, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 4289, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 4290, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 4291, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 4292, "futimesat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 4293, "fstatat64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat64 *", "statbuf" }, { "int", "flag" } } },
{ 4294, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 4295, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 4296, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 4297, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 4298, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 4299, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 4300, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 4301, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 4302, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 4303, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 4304, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 4305, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 4306, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 4307, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 4308, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 4309, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 4310, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 4311, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 4312, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 4313, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 4314, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 4315, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 4316, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 4317, "signalfd", 3, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" } } },
{ 4318, "timerfd", 0, {} },
{ 4319, "eventfd", 1, { { "unsigned int", "count" } } },
{ 4320, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 4321, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 4322, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 4323, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 4324, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 4325, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 4326, "epoll_create1", 1, { { "int", "flags" } } },
{ 4327, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 4328, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 4329, "inotify_init1", 1, { { "int", "flags" } } },
{ 4330, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 4331, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 4332, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 4333, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 4334, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 4335, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 4336, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 4337, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 4338, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 4339, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 4340, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 4341, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 4342, "syncfs", 1, { { "int", "fd" } } },
{ 4343, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 4344, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 4345, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 4346, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 4347, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 4348, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 4349, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 4350, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 4351, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 4352, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 4353, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 4354, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 4355, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 4356, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 4357, "userfaultfd", 1, { { "int", "flags" } } },
{ 4358, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 4359, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 4360, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 4361, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 4362, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 4363, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 4364, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 4365, "pkey_free", 1, { { "int", "pkey" } } },
{ 4366, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 4367, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 4368, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 4393, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 4394, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 4395, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 4396, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 4397, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 4398, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 4399, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 4400, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 4401, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 4402, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 4403, "clock_gettime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 4404, "clock_settime64", 2, { { "clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 4405, "clock_adjtime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timex *", "tx" } } },
{ 4406, "clock_getres_time64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 4407, "clock_nanosleep_time64", 4, { { "clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 4408, "timer_gettime64", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 4409, "timer_settime64", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 4410, "timerfd_gettime64", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 4411, "timerfd_settime64", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 4412, "utimensat_time64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 4413, "pselect6_time64", 6, { { "int", "arg0" }, { "fd_set *", "arg1" }, { "fd_set *", "arg2" }, { "fd_set *", "arg3" }, { "struct __kernel_timespec *", "arg4" }, { "void *", "arg5" } } },
{ 4414, "ppoll_time64", 5, { { "struct pollfd *", "arg0" }, { "unsigned", "int" }, { "struct __kernel_timespec *", "arg2" }, { "const sigset_t *", "arg3" }, { "size_t", "arg4" } } },
{ 4416, "io_pgetevents_time64", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "sig" } } },
{ 4417, "recvmmsg_time64", 5, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 4418, "mq_timedsend_time64", 5, { { "mqd_t", "mqdes" }, { "const char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 4419, "mq_timedreceive_time64", 5, { { "mqd_t", "mqdes" }, { "char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 4420, "semtimedop_time64", 4, { { "int", "semid" }, { "struct sembuf *", "sops" }, { "unsigned", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 4421, "rt_sigtimedwait_time64", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 4422, "futex_time64", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 4423, "sched_rr_get_interval_time64", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 4424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 4425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 4426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 4427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 4428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 4429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 4430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 4431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 4432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 4433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 4434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 4435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 4436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 4437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 4438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 4439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 4440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 4441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 4442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 4443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 4444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 4445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 4446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 4448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 4449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 4450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 4451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 4452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 4453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 4454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 4455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 4456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 4457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 4458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 4459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 4460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 4461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 4462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 4463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 4464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 4465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 4466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 4467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 4468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 4469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 4470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = 0;
return NULL;
}
+445
View File
@@ -0,0 +1,445 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
EXIT = 4001,
FORK = 4002,
READ = 4003,
WRITE = 4004,
OPEN = 4005,
CLOSE = 4006,
WAITPID = 4007,
CREAT = 4008,
LINK = 4009,
UNLINK = 4010,
EXECVE = 4011,
CHDIR = 4012,
TIME = 4013,
MKNOD = 4014,
CHMOD = 4015,
LCHOWN = 4016,
BREAK = 4017,
UNUSED18 = 4018,
LSEEK = 4019,
GETPID = 4020,
MOUNT = 4021,
UMOUNT = 4022,
SETUID = 4023,
GETUID = 4024,
STIME = 4025,
PTRACE = 4026,
ALARM = 4027,
UNUSED28 = 4028,
PAUSE = 4029,
UTIME = 4030,
STTY = 4031,
GTTY = 4032,
ACCESS = 4033,
NICE = 4034,
FTIME = 4035,
SYNC = 4036,
KILL = 4037,
RENAME = 4038,
MKDIR = 4039,
RMDIR = 4040,
DUP = 4041,
PIPE = 4042,
TIMES = 4043,
PROF = 4044,
BRK = 4045,
SETGID = 4046,
GETGID = 4047,
SIGNAL = 4048,
GETEUID = 4049,
GETEGID = 4050,
ACCT = 4051,
UMOUNT2 = 4052,
LOCK = 4053,
IOCTL = 4054,
FCNTL = 4055,
MPX = 4056,
SETPGID = 4057,
ULIMIT = 4058,
UNUSED59 = 4059,
UMASK = 4060,
CHROOT = 4061,
USTAT = 4062,
DUP2 = 4063,
GETPPID = 4064,
GETPGRP = 4065,
SETSID = 4066,
SGETMASK = 4068,
SSETMASK = 4069,
SETREUID = 4070,
SETREGID = 4071,
SIGPENDING = 4073,
SETHOSTNAME = 4074,
SETRLIMIT = 4075,
GETRLIMIT = 4076,
GETRUSAGE = 4077,
GETTIMEOFDAY = 4078,
SETTIMEOFDAY = 4079,
GETGROUPS = 4080,
SETGROUPS = 4081,
RESERVED82 = 4082,
SYMLINK = 4083,
UNUSED84 = 4084,
READLINK = 4085,
USELIB = 4086,
SWAPON = 4087,
REBOOT = 4088,
READDIR = 4089,
MMAP = 4090,
MUNMAP = 4091,
TRUNCATE = 4092,
FTRUNCATE = 4093,
FCHMOD = 4094,
FCHOWN = 4095,
GETPRIORITY = 4096,
SETPRIORITY = 4097,
PROFIL = 4098,
STATFS = 4099,
FSTATFS = 4100,
IOPERM = 4101,
SOCKETCALL = 4102,
SYSLOG = 4103,
SETITIMER = 4104,
GETITIMER = 4105,
STAT = 4106,
LSTAT = 4107,
FSTAT = 4108,
UNUSED109 = 4109,
IOPL = 4110,
VHANGUP = 4111,
IDLE = 4112,
VM86 = 4113,
WAIT4 = 4114,
SWAPOFF = 4115,
SYSINFO = 4116,
IPC = 4117,
FSYNC = 4118,
CLONE = 4120,
SETDOMAINNAME = 4121,
UNAME = 4122,
MODIFY_LDT = 4123,
ADJTIMEX = 4124,
MPROTECT = 4125,
SIGPROCMASK = 4126,
CREATE_MODULE = 4127,
INIT_MODULE = 4128,
DELETE_MODULE = 4129,
GET_KERNEL_SYMS = 4130,
QUOTACTL = 4131,
GETPGID = 4132,
FCHDIR = 4133,
BDFLUSH = 4134,
SYSFS = 4135,
PERSONALITY = 4136,
AFS_SYSCALL = 4137,
SETFSUID = 4138,
SETFSGID = 4139,
_LLSEEK = 4140,
GETDENTS = 4141,
_NEWSELECT = 4142,
FLOCK = 4143,
MSYNC = 4144,
READV = 4145,
WRITEV = 4146,
CACHEFLUSH = 4147,
CACHECTL = 4148,
SYSMIPS = 4149,
UNUSED150 = 4150,
GETSID = 4151,
FDATASYNC = 4152,
_SYSCTL = 4153,
MLOCK = 4154,
MUNLOCK = 4155,
MLOCKALL = 4156,
MUNLOCKALL = 4157,
SCHED_SETPARAM = 4158,
SCHED_GETPARAM = 4159,
SCHED_SETSCHEDULER = 4160,
SCHED_GETSCHEDULER = 4161,
SCHED_YIELD = 4162,
SCHED_GET_PRIORITY_MAX = 4163,
SCHED_GET_PRIORITY_MIN = 4164,
SCHED_RR_GET_INTERVAL = 4165,
NANOSLEEP = 4166,
MREMAP = 4167,
ACCEPT = 4168,
BIND = 4169,
CONNECT = 4170,
GETPEERNAME = 4171,
GETSOCKNAME = 4172,
GETSOCKOPT = 4173,
LISTEN = 4174,
RECV = 4175,
RECVFROM = 4176,
RECVMSG = 4177,
SEND = 4178,
SENDMSG = 4179,
SENDTO = 4180,
SETSOCKOPT = 4181,
SHUTDOWN = 4182,
SOCKET = 4183,
SOCKETPAIR = 4184,
SETRESUID = 4185,
GETRESUID = 4186,
QUERY_MODULE = 4187,
POLL = 4188,
NFSSERVCTL = 4189,
SETRESGID = 4190,
GETRESGID = 4191,
PRCTL = 4192,
RT_SIGACTION = 4194,
RT_SIGPROCMASK = 4195,
RT_SIGPENDING = 4196,
RT_SIGTIMEDWAIT = 4197,
RT_SIGQUEUEINFO = 4198,
RT_SIGSUSPEND = 4199,
PREAD64 = 4200,
PWRITE64 = 4201,
CHOWN = 4202,
GETCWD = 4203,
CAPGET = 4204,
CAPSET = 4205,
SIGALTSTACK = 4206,
SENDFILE = 4207,
GETPMSG = 4208,
PUTPMSG = 4209,
MMAP2 = 4210,
TRUNCATE64 = 4211,
FTRUNCATE64 = 4212,
STAT64 = 4213,
LSTAT64 = 4214,
FSTAT64 = 4215,
PIVOT_ROOT = 4216,
MINCORE = 4217,
MADVISE = 4218,
GETDENTS64 = 4219,
FCNTL64 = 4220,
RESERVED221 = 4221,
GETTID = 4222,
READAHEAD = 4223,
SETXATTR = 4224,
LSETXATTR = 4225,
FSETXATTR = 4226,
GETXATTR = 4227,
LGETXATTR = 4228,
FGETXATTR = 4229,
LISTXATTR = 4230,
LLISTXATTR = 4231,
FLISTXATTR = 4232,
REMOVEXATTR = 4233,
LREMOVEXATTR = 4234,
FREMOVEXATTR = 4235,
TKILL = 4236,
SENDFILE64 = 4237,
FUTEX = 4238,
SCHED_SETAFFINITY = 4239,
SCHED_GETAFFINITY = 4240,
IO_SETUP = 4241,
IO_DESTROY = 4242,
IO_GETEVENTS = 4243,
IO_SUBMIT = 4244,
IO_CANCEL = 4245,
EXIT_GROUP = 4246,
LOOKUP_DCOOKIE = 4247,
EPOLL_CREATE = 4248,
EPOLL_CTL = 4249,
EPOLL_WAIT = 4250,
REMAP_FILE_PAGES = 4251,
SET_TID_ADDRESS = 4252,
RESTART_SYSCALL = 4253,
FADVISE64 = 4254,
STATFS64 = 4255,
FSTATFS64 = 4256,
TIMER_CREATE = 4257,
TIMER_SETTIME = 4258,
TIMER_GETTIME = 4259,
TIMER_GETOVERRUN = 4260,
TIMER_DELETE = 4261,
CLOCK_SETTIME = 4262,
CLOCK_GETTIME = 4263,
CLOCK_GETRES = 4264,
CLOCK_NANOSLEEP = 4265,
TGKILL = 4266,
UTIMES = 4267,
MBIND = 4268,
GET_MEMPOLICY = 4269,
SET_MEMPOLICY = 4270,
MQ_OPEN = 4271,
MQ_UNLINK = 4272,
MQ_TIMEDSEND = 4273,
MQ_TIMEDRECEIVE = 4274,
MQ_NOTIFY = 4275,
MQ_GETSETATTR = 4276,
VSERVER = 4277,
WAITID = 4278,
ADD_KEY = 4280,
REQUEST_KEY = 4281,
KEYCTL = 4282,
SET_THREAD_AREA = 4283,
INOTIFY_INIT = 4284,
INOTIFY_ADD_WATCH = 4285,
INOTIFY_RM_WATCH = 4286,
MIGRATE_PAGES = 4287,
OPENAT = 4288,
MKDIRAT = 4289,
MKNODAT = 4290,
FCHOWNAT = 4291,
FUTIMESAT = 4292,
FSTATAT64 = 4293,
UNLINKAT = 4294,
RENAMEAT = 4295,
LINKAT = 4296,
SYMLINKAT = 4297,
READLINKAT = 4298,
FCHMODAT = 4299,
FACCESSAT = 4300,
PSELECT6 = 4301,
PPOLL = 4302,
UNSHARE = 4303,
SPLICE = 4304,
SYNC_FILE_RANGE = 4305,
TEE = 4306,
VMSPLICE = 4307,
MOVE_PAGES = 4308,
SET_ROBUST_LIST = 4309,
GET_ROBUST_LIST = 4310,
KEXEC_LOAD = 4311,
GETCPU = 4312,
EPOLL_PWAIT = 4313,
IOPRIO_SET = 4314,
IOPRIO_GET = 4315,
UTIMENSAT = 4316,
SIGNALFD = 4317,
TIMERFD = 4318,
EVENTFD = 4319,
FALLOCATE = 4320,
TIMERFD_CREATE = 4321,
TIMERFD_GETTIME = 4322,
TIMERFD_SETTIME = 4323,
SIGNALFD4 = 4324,
EVENTFD2 = 4325,
EPOLL_CREATE1 = 4326,
DUP3 = 4327,
PIPE2 = 4328,
INOTIFY_INIT1 = 4329,
PREADV = 4330,
PWRITEV = 4331,
RT_TGSIGQUEUEINFO = 4332,
PERF_EVENT_OPEN = 4333,
ACCEPT4 = 4334,
RECVMMSG = 4335,
FANOTIFY_INIT = 4336,
FANOTIFY_MARK = 4337,
PRLIMIT64 = 4338,
NAME_TO_HANDLE_AT = 4339,
OPEN_BY_HANDLE_AT = 4340,
CLOCK_ADJTIME = 4341,
SYNCFS = 4342,
SENDMMSG = 4343,
SETNS = 4344,
PROCESS_VM_READV = 4345,
PROCESS_VM_WRITEV = 4346,
KCMP = 4347,
FINIT_MODULE = 4348,
SCHED_SETATTR = 4349,
SCHED_GETATTR = 4350,
RENAMEAT2 = 4351,
SECCOMP = 4352,
GETRANDOM = 4353,
MEMFD_CREATE = 4354,
BPF = 4355,
EXECVEAT = 4356,
USERFAULTFD = 4357,
MEMBARRIER = 4358,
MLOCK2 = 4359,
COPY_FILE_RANGE = 4360,
PREADV2 = 4361,
PWRITEV2 = 4362,
PKEY_MPROTECT = 4363,
PKEY_ALLOC = 4364,
PKEY_FREE = 4365,
STATX = 4366,
RSEQ = 4367,
IO_PGETEVENTS = 4368,
SEMGET = 4393,
SEMCTL = 4394,
SHMGET = 4395,
SHMCTL = 4396,
SHMAT = 4397,
SHMDT = 4398,
MSGGET = 4399,
MSGSND = 4400,
MSGRCV = 4401,
MSGCTL = 4402,
CLOCK_GETTIME64 = 4403,
CLOCK_SETTIME64 = 4404,
CLOCK_ADJTIME64 = 4405,
CLOCK_GETRES_TIME64 = 4406,
CLOCK_NANOSLEEP_TIME64 = 4407,
TIMER_GETTIME64 = 4408,
TIMER_SETTIME64 = 4409,
TIMERFD_GETTIME64 = 4410,
TIMERFD_SETTIME64 = 4411,
UTIMENSAT_TIME64 = 4412,
PSELECT6_TIME64 = 4413,
PPOLL_TIME64 = 4414,
IO_PGETEVENTS_TIME64 = 4416,
RECVMMSG_TIME64 = 4417,
MQ_TIMEDSEND_TIME64 = 4418,
MQ_TIMEDRECEIVE_TIME64 = 4419,
SEMTIMEDOP_TIME64 = 4420,
RT_SIGTIMEDWAIT_TIME64 = 4421,
FUTEX_TIME64 = 4422,
SCHED_RR_GET_INTERVAL_TIME64 = 4423,
PIDFD_SEND_SIGNAL = 4424,
IO_URING_SETUP = 4425,
IO_URING_ENTER = 4426,
IO_URING_REGISTER = 4427,
OPEN_TREE = 4428,
MOVE_MOUNT = 4429,
FSOPEN = 4430,
FSCONFIG = 4431,
FSMOUNT = 4432,
FSPICK = 4433,
PIDFD_OPEN = 4434,
CLONE3 = 4435,
CLOSE_RANGE = 4436,
OPENAT2 = 4437,
PIDFD_GETFD = 4438,
FACCESSAT2 = 4439,
PROCESS_MADVISE = 4440,
EPOLL_PWAIT2 = 4441,
MOUNT_SETATTR = 4442,
QUOTACTL_FD = 4443,
LANDLOCK_CREATE_RULESET = 4444,
LANDLOCK_ADD_RULE = 4445,
LANDLOCK_RESTRICT_SELF = 4446,
PROCESS_MRELEASE = 4448,
FUTEX_WAITV = 4449,
SET_MEMPOLICY_HOME_NODE = 4450,
CACHESTAT = 4451,
FCHMODAT2 = 4452,
MAP_SHADOW_STACK = 4453,
FUTEX_WAKE = 4454,
FUTEX_WAIT = 4455,
FUTEX_REQUEUE = 4456,
STATMOUNT = 4457,
LISTMOUNT = 4458,
LSM_GET_SELF_ATTR = 4459,
LSM_SET_SELF_ATTR = 4460,
LSM_LIST_MODULES = 4461,
MSEAL = 4462,
SETXATTRAT = 4463,
GETXATTRAT = 4464,
LISTXATTRAT = 4465,
REMOVEXATTRAT = 4466,
OPEN_TREE_ATTR = 4467,
FILE_GETATTR = 4468,
FILE_SETATTR = 4469,
LISTNS = 4470,
}
}
+396
View File
@@ -0,0 +1,396 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 5000, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 5001, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 5002, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 5003, "close", 1, { { "unsigned int", "fd" } } },
{ 5004, "stat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 5005, "fstat", 2, { { "unsigned int", "fd" }, { "struct stat *", "statbuf" } } },
{ 5006, "lstat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 5007, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 5008, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 5009, "mmap", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "off_t", "offset" } } },
{ 5010, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 5011, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 5012, "brk", 1, { { "unsigned long", "brk" } } },
{ 5013, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 5014, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 5015, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 5016, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 5017, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 5018, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 5019, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 5020, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 5021, "pipe", 1, { { "int *", "fildes" } } },
{ 5022, "_newselect", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 5023, "sched_yield", 0, {} },
{ 5024, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 5025, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 5026, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 5027, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 5028, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 5029, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 5030, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 5031, "dup", 1, { { "unsigned int", "fildes" } } },
{ 5032, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 5033, "pause", 0, {} },
{ 5034, "nanosleep", 2, { { "struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 5035, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 5036, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 5037, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 5038, "getpid", 0, {} },
{ 5039, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 5040, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 5041, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 5042, "accept", 3, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" } } },
{ 5043, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 5044, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 5045, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 5046, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 5047, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 5048, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 5049, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 5050, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 5051, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 5052, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 5053, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 5054, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 5055, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 5056, "fork", 0, {} },
{ 5057, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 5058, "exit", 1, { { "int", "error_code" } } },
{ 5059, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 5060, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 5061, "uname", 1, { { "struct old_utsname *", "name" } } },
{ 5062, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 5063, "semop", 3, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned", "nsops" } } },
{ 5064, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 5065, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 5066, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 5067, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 5068, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 5069, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 5070, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 5071, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 5072, "fsync", 1, { { "unsigned int", "fd" } } },
{ 5073, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 5074, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 5075, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 5076, "getdents", 3, { { "unsigned int", "fd" }, { "struct linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 5077, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 5078, "chdir", 1, { { "const char *", "filename" } } },
{ 5079, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 5080, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 5081, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 5082, "rmdir", 1, { { "const char *", "pathname" } } },
{ 5083, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 5084, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 5085, "unlink", 1, { { "const char *", "pathname" } } },
{ 5086, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 5087, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 5088, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 5089, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 5090, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 5091, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 5092, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 5093, "umask", 1, { { "int", "mask" } } },
{ 5094, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 5095, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 5096, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 5097, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 5098, "times", 1, { { "struct tms *", "tbuf" } } },
{ 5099, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 5100, "getuid", 0, {} },
{ 5101, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 5102, "getgid", 0, {} },
{ 5103, "setuid", 1, { { "uid_t", "uid" } } },
{ 5104, "setgid", 1, { { "gid_t", "gid" } } },
{ 5105, "geteuid", 0, {} },
{ 5106, "getegid", 0, {} },
{ 5107, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 5108, "getppid", 0, {} },
{ 5109, "getpgrp", 0, {} },
{ 5110, "setsid", 0, {} },
{ 5111, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 5112, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 5113, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 5114, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 5115, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 5116, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 5117, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 5118, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 5119, "getpgid", 1, { { "pid_t", "pid" } } },
{ 5120, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 5121, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 5122, "getsid", 1, { { "pid_t", "pid" } } },
{ 5123, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 5124, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 5125, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 5126, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 5127, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 5128, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 5129, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 5130, "utime", 2, { { "char *", "filename" }, { "struct utimbuf *", "times" } } },
{ 5131, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 5132, "personality", 1, { { "unsigned int", "personality" } } },
{ 5133, "ustat", 2, { { "unsigned", "dev" }, { "struct ustat *", "ubuf" } } },
{ 5134, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 5135, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 5136, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 5137, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 5138, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 5139, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 5140, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 5141, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 5142, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 5143, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 5144, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 5145, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 5146, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 5147, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 5148, "mlockall", 1, { { "int", "flags" } } },
{ 5149, "munlockall", 0, {} },
{ 5150, "vhangup", 0, {} },
{ 5151, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 5152, "_sysctl", 0, {} },
{ 5153, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 5154, "adjtimex", 1, { { "struct __kernel_timex *", "txc_p" } } },
{ 5155, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 5156, "chroot", 1, { { "const char *", "filename" } } },
{ 5157, "sync", 0, {} },
{ 5158, "acct", 1, { { "const char *", "name" } } },
{ 5159, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 5160, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 5161, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 5162, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 5163, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 5164, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 5165, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 5166, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 5167, "create_module", 0, {} },
{ 5168, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 5169, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 5170, "get_kernel_syms", 0, {} },
{ 5171, "query_module", 0, {} },
{ 5172, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 5173, "nfsservctl", 0, {} },
{ 5174, "getpmsg", 0, {} },
{ 5175, "putpmsg", 0, {} },
{ 5176, "afs_syscall", 0, {} },
{ 5177, "reserved177", 0, {} },
{ 5178, "gettid", 0, {} },
{ 5179, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 5180, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 5181, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 5182, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 5183, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 5184, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 5185, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 5186, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 5187, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 5188, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 5189, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 5190, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 5191, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 5192, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 5193, "reserved193", 0, {} },
{ 5194, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 5195, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 5196, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 5197, "cacheflush", 3, { { "unsigned long", "addr" }, { "unsigned long", "bytes" }, { "unsigned int", "cache" } } },
{ 5198, "cachectl", 3, { { "char *", "addr" }, { "int", "nbytes" }, { "int", "op" } } },
{ 5199, "sysmips", 3, { { "long", "cmd" }, { "long", "arg1" }, { "long", "arg2" } } },
{ 5200, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 5201, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 5202, "io_getevents", 5, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" } } },
{ 5203, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 5204, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 5205, "exit_group", 1, { { "int", "error_code" } } },
{ 5206, "lookup_dcookie", 0, {} },
{ 5207, "epoll_create", 1, { { "int", "size" } } },
{ 5208, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 5209, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 5210, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 5212, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 5213, "restart_syscall", 0, {} },
{ 5214, "semtimedop", 4, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned int", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 5215, "fadvise64", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "len" }, { "int", "advice" } } },
{ 5216, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 5217, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 5218, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 5219, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 5220, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 5221, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 5222, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 5223, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 5224, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 5225, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 5226, "utimes", 2, { { "char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 5227, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 5228, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 5229, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 5230, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 5231, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 5232, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 5233, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 5234, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 5235, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 5236, "vserver", 0, {} },
{ 5237, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 5239, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 5240, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 5241, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 5242, "set_thread_area", 1, { { "unsigned long", "addr" } } },
{ 5243, "inotify_init", 0, {} },
{ 5244, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 5245, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 5246, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 5247, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 5248, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 5249, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 5250, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 5251, "futimesat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 5252, "newfstatat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat *", "statbuf" }, { "int", "flag" } } },
{ 5253, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 5254, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 5255, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 5256, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 5257, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 5258, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 5259, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 5260, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 5261, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 5262, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 5263, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 5264, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 5265, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 5266, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 5267, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 5268, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 5269, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 5270, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 5271, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 5272, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 5273, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 5274, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 5275, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 5276, "signalfd", 3, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" } } },
{ 5277, "timerfd", 0, {} },
{ 5278, "eventfd", 1, { { "unsigned int", "count" } } },
{ 5279, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 5280, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 5281, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 5282, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 5283, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 5284, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 5285, "epoll_create1", 1, { { "int", "flags" } } },
{ 5286, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 5287, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 5288, "inotify_init1", 1, { { "int", "flags" } } },
{ 5289, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 5290, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 5291, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 5292, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 5293, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 5294, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 5295, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 5296, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 5297, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 5298, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 5299, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 5300, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 5301, "syncfs", 1, { { "int", "fd" } } },
{ 5302, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 5303, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 5304, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 5305, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 5306, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 5307, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 5308, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 5309, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 5310, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 5311, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 5312, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 5313, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 5314, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 5315, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 5316, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 5317, "userfaultfd", 1, { { "int", "flags" } } },
{ 5318, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 5319, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 5320, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 5321, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 5322, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 5323, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 5324, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 5325, "pkey_free", 1, { { "int", "pkey" } } },
{ 5326, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 5327, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 5328, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 5424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 5425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 5426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 5427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 5428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 5429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 5430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 5431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 5432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 5433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 5434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 5435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 5436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 5437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 5438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 5439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 5440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 5441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 5442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 5443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 5444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 5445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 5446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 5448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 5449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 5450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 5451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 5452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 5453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 5454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 5455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 5456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 5457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 5458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 5459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 5460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 5461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 5462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 5463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 5464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 5465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 5466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 5467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 5468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 5469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 5470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = 0;
return NULL;
}
+379
View File
@@ -0,0 +1,379 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
READ = 5000,
WRITE = 5001,
OPEN = 5002,
CLOSE = 5003,
STAT = 5004,
FSTAT = 5005,
LSTAT = 5006,
POLL = 5007,
LSEEK = 5008,
MMAP = 5009,
MPROTECT = 5010,
MUNMAP = 5011,
BRK = 5012,
RT_SIGACTION = 5013,
RT_SIGPROCMASK = 5014,
IOCTL = 5015,
PREAD64 = 5016,
PWRITE64 = 5017,
READV = 5018,
WRITEV = 5019,
ACCESS = 5020,
PIPE = 5021,
_NEWSELECT = 5022,
SCHED_YIELD = 5023,
MREMAP = 5024,
MSYNC = 5025,
MINCORE = 5026,
MADVISE = 5027,
SHMGET = 5028,
SHMAT = 5029,
SHMCTL = 5030,
DUP = 5031,
DUP2 = 5032,
PAUSE = 5033,
NANOSLEEP = 5034,
GETITIMER = 5035,
SETITIMER = 5036,
ALARM = 5037,
GETPID = 5038,
SENDFILE = 5039,
SOCKET = 5040,
CONNECT = 5041,
ACCEPT = 5042,
SENDTO = 5043,
RECVFROM = 5044,
SENDMSG = 5045,
RECVMSG = 5046,
SHUTDOWN = 5047,
BIND = 5048,
LISTEN = 5049,
GETSOCKNAME = 5050,
GETPEERNAME = 5051,
SOCKETPAIR = 5052,
SETSOCKOPT = 5053,
GETSOCKOPT = 5054,
CLONE = 5055,
FORK = 5056,
EXECVE = 5057,
EXIT = 5058,
WAIT4 = 5059,
KILL = 5060,
UNAME = 5061,
SEMGET = 5062,
SEMOP = 5063,
SEMCTL = 5064,
SHMDT = 5065,
MSGGET = 5066,
MSGSND = 5067,
MSGRCV = 5068,
MSGCTL = 5069,
FCNTL = 5070,
FLOCK = 5071,
FSYNC = 5072,
FDATASYNC = 5073,
TRUNCATE = 5074,
FTRUNCATE = 5075,
GETDENTS = 5076,
GETCWD = 5077,
CHDIR = 5078,
FCHDIR = 5079,
RENAME = 5080,
MKDIR = 5081,
RMDIR = 5082,
CREAT = 5083,
LINK = 5084,
UNLINK = 5085,
SYMLINK = 5086,
READLINK = 5087,
CHMOD = 5088,
FCHMOD = 5089,
CHOWN = 5090,
FCHOWN = 5091,
LCHOWN = 5092,
UMASK = 5093,
GETTIMEOFDAY = 5094,
GETRLIMIT = 5095,
GETRUSAGE = 5096,
SYSINFO = 5097,
TIMES = 5098,
PTRACE = 5099,
GETUID = 5100,
SYSLOG = 5101,
GETGID = 5102,
SETUID = 5103,
SETGID = 5104,
GETEUID = 5105,
GETEGID = 5106,
SETPGID = 5107,
GETPPID = 5108,
GETPGRP = 5109,
SETSID = 5110,
SETREUID = 5111,
SETREGID = 5112,
GETGROUPS = 5113,
SETGROUPS = 5114,
SETRESUID = 5115,
GETRESUID = 5116,
SETRESGID = 5117,
GETRESGID = 5118,
GETPGID = 5119,
SETFSUID = 5120,
SETFSGID = 5121,
GETSID = 5122,
CAPGET = 5123,
CAPSET = 5124,
RT_SIGPENDING = 5125,
RT_SIGTIMEDWAIT = 5126,
RT_SIGQUEUEINFO = 5127,
RT_SIGSUSPEND = 5128,
SIGALTSTACK = 5129,
UTIME = 5130,
MKNOD = 5131,
PERSONALITY = 5132,
USTAT = 5133,
STATFS = 5134,
FSTATFS = 5135,
SYSFS = 5136,
GETPRIORITY = 5137,
SETPRIORITY = 5138,
SCHED_SETPARAM = 5139,
SCHED_GETPARAM = 5140,
SCHED_SETSCHEDULER = 5141,
SCHED_GETSCHEDULER = 5142,
SCHED_GET_PRIORITY_MAX = 5143,
SCHED_GET_PRIORITY_MIN = 5144,
SCHED_RR_GET_INTERVAL = 5145,
MLOCK = 5146,
MUNLOCK = 5147,
MLOCKALL = 5148,
MUNLOCKALL = 5149,
VHANGUP = 5150,
PIVOT_ROOT = 5151,
_SYSCTL = 5152,
PRCTL = 5153,
ADJTIMEX = 5154,
SETRLIMIT = 5155,
CHROOT = 5156,
SYNC = 5157,
ACCT = 5158,
SETTIMEOFDAY = 5159,
MOUNT = 5160,
UMOUNT2 = 5161,
SWAPON = 5162,
SWAPOFF = 5163,
REBOOT = 5164,
SETHOSTNAME = 5165,
SETDOMAINNAME = 5166,
CREATE_MODULE = 5167,
INIT_MODULE = 5168,
DELETE_MODULE = 5169,
GET_KERNEL_SYMS = 5170,
QUERY_MODULE = 5171,
QUOTACTL = 5172,
NFSSERVCTL = 5173,
GETPMSG = 5174,
PUTPMSG = 5175,
AFS_SYSCALL = 5176,
RESERVED177 = 5177,
GETTID = 5178,
READAHEAD = 5179,
SETXATTR = 5180,
LSETXATTR = 5181,
FSETXATTR = 5182,
GETXATTR = 5183,
LGETXATTR = 5184,
FGETXATTR = 5185,
LISTXATTR = 5186,
LLISTXATTR = 5187,
FLISTXATTR = 5188,
REMOVEXATTR = 5189,
LREMOVEXATTR = 5190,
FREMOVEXATTR = 5191,
TKILL = 5192,
RESERVED193 = 5193,
FUTEX = 5194,
SCHED_SETAFFINITY = 5195,
SCHED_GETAFFINITY = 5196,
CACHEFLUSH = 5197,
CACHECTL = 5198,
SYSMIPS = 5199,
IO_SETUP = 5200,
IO_DESTROY = 5201,
IO_GETEVENTS = 5202,
IO_SUBMIT = 5203,
IO_CANCEL = 5204,
EXIT_GROUP = 5205,
LOOKUP_DCOOKIE = 5206,
EPOLL_CREATE = 5207,
EPOLL_CTL = 5208,
EPOLL_WAIT = 5209,
REMAP_FILE_PAGES = 5210,
SET_TID_ADDRESS = 5212,
RESTART_SYSCALL = 5213,
SEMTIMEDOP = 5214,
FADVISE64 = 5215,
TIMER_CREATE = 5216,
TIMER_SETTIME = 5217,
TIMER_GETTIME = 5218,
TIMER_GETOVERRUN = 5219,
TIMER_DELETE = 5220,
CLOCK_SETTIME = 5221,
CLOCK_GETTIME = 5222,
CLOCK_GETRES = 5223,
CLOCK_NANOSLEEP = 5224,
TGKILL = 5225,
UTIMES = 5226,
MBIND = 5227,
GET_MEMPOLICY = 5228,
SET_MEMPOLICY = 5229,
MQ_OPEN = 5230,
MQ_UNLINK = 5231,
MQ_TIMEDSEND = 5232,
MQ_TIMEDRECEIVE = 5233,
MQ_NOTIFY = 5234,
MQ_GETSETATTR = 5235,
VSERVER = 5236,
WAITID = 5237,
ADD_KEY = 5239,
REQUEST_KEY = 5240,
KEYCTL = 5241,
SET_THREAD_AREA = 5242,
INOTIFY_INIT = 5243,
INOTIFY_ADD_WATCH = 5244,
INOTIFY_RM_WATCH = 5245,
MIGRATE_PAGES = 5246,
OPENAT = 5247,
MKDIRAT = 5248,
MKNODAT = 5249,
FCHOWNAT = 5250,
FUTIMESAT = 5251,
NEWFSTATAT = 5252,
UNLINKAT = 5253,
RENAMEAT = 5254,
LINKAT = 5255,
SYMLINKAT = 5256,
READLINKAT = 5257,
FCHMODAT = 5258,
FACCESSAT = 5259,
PSELECT6 = 5260,
PPOLL = 5261,
UNSHARE = 5262,
SPLICE = 5263,
SYNC_FILE_RANGE = 5264,
TEE = 5265,
VMSPLICE = 5266,
MOVE_PAGES = 5267,
SET_ROBUST_LIST = 5268,
GET_ROBUST_LIST = 5269,
KEXEC_LOAD = 5270,
GETCPU = 5271,
EPOLL_PWAIT = 5272,
IOPRIO_SET = 5273,
IOPRIO_GET = 5274,
UTIMENSAT = 5275,
SIGNALFD = 5276,
TIMERFD = 5277,
EVENTFD = 5278,
FALLOCATE = 5279,
TIMERFD_CREATE = 5280,
TIMERFD_GETTIME = 5281,
TIMERFD_SETTIME = 5282,
SIGNALFD4 = 5283,
EVENTFD2 = 5284,
EPOLL_CREATE1 = 5285,
DUP3 = 5286,
PIPE2 = 5287,
INOTIFY_INIT1 = 5288,
PREADV = 5289,
PWRITEV = 5290,
RT_TGSIGQUEUEINFO = 5291,
PERF_EVENT_OPEN = 5292,
ACCEPT4 = 5293,
RECVMMSG = 5294,
FANOTIFY_INIT = 5295,
FANOTIFY_MARK = 5296,
PRLIMIT64 = 5297,
NAME_TO_HANDLE_AT = 5298,
OPEN_BY_HANDLE_AT = 5299,
CLOCK_ADJTIME = 5300,
SYNCFS = 5301,
SENDMMSG = 5302,
SETNS = 5303,
PROCESS_VM_READV = 5304,
PROCESS_VM_WRITEV = 5305,
KCMP = 5306,
FINIT_MODULE = 5307,
GETDENTS64 = 5308,
SCHED_SETATTR = 5309,
SCHED_GETATTR = 5310,
RENAMEAT2 = 5311,
SECCOMP = 5312,
GETRANDOM = 5313,
MEMFD_CREATE = 5314,
BPF = 5315,
EXECVEAT = 5316,
USERFAULTFD = 5317,
MEMBARRIER = 5318,
MLOCK2 = 5319,
COPY_FILE_RANGE = 5320,
PREADV2 = 5321,
PWRITEV2 = 5322,
PKEY_MPROTECT = 5323,
PKEY_ALLOC = 5324,
PKEY_FREE = 5325,
STATX = 5326,
RSEQ = 5327,
IO_PGETEVENTS = 5328,
PIDFD_SEND_SIGNAL = 5424,
IO_URING_SETUP = 5425,
IO_URING_ENTER = 5426,
IO_URING_REGISTER = 5427,
OPEN_TREE = 5428,
MOVE_MOUNT = 5429,
FSOPEN = 5430,
FSCONFIG = 5431,
FSMOUNT = 5432,
FSPICK = 5433,
PIDFD_OPEN = 5434,
CLONE3 = 5435,
CLOSE_RANGE = 5436,
OPENAT2 = 5437,
PIDFD_GETFD = 5438,
FACCESSAT2 = 5439,
PROCESS_MADVISE = 5440,
EPOLL_PWAIT2 = 5441,
MOUNT_SETATTR = 5442,
QUOTACTL_FD = 5443,
LANDLOCK_CREATE_RULESET = 5444,
LANDLOCK_ADD_RULE = 5445,
LANDLOCK_RESTRICT_SELF = 5446,
PROCESS_MRELEASE = 5448,
FUTEX_WAITV = 5449,
SET_MEMPOLICY_HOME_NODE = 5450,
CACHESTAT = 5451,
FCHMODAT2 = 5452,
MAP_SHADOW_STACK = 5453,
FUTEX_WAKE = 5454,
FUTEX_WAIT = 5455,
FUTEX_REQUEUE = 5456,
STATMOUNT = 5457,
LISTMOUNT = 5458,
LSM_GET_SELF_ATTR = 5459,
LSM_SET_SELF_ATTR = 5460,
LSM_LIST_MODULES = 5461,
MSEAL = 5462,
SETXATTRAT = 5463,
GETXATTRAT = 5464,
LISTXATTRAT = 5465,
REMOVEXATTRAT = 5466,
OPEN_TREE_ATTR = 5467,
FILE_GETATTR = 5468,
FILE_SETATTR = 5469,
LISTNS = 5470,
}
}
+410
View File
@@ -0,0 +1,410 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 1, "exit", 1, { { "int", "error_code" } } },
{ 2, "fork", 0, {} },
{ 3, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 4, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 5, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 6, "close", 1, { { "unsigned int", "fd" } } },
{ 7, "restart_syscall", 0, {} },
{ 8, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 9, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 10, "unlink", 1, { { "const char *", "pathname" } } },
{ 11, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 12, "chdir", 1, { { "const char *", "filename" } } },
{ 14, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 15, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 19, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 20, "getpid", 0, {} },
{ 21, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 22, "umount", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 26, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 27, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 29, "pause", 0, {} },
{ 30, "utime", 2, { { "char *", "filename" }, { "struct utimbuf *", "times" } } },
{ 33, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 34, "nice", 1, { { "int", "increment" } } },
{ 36, "sync", 0, {} },
{ 37, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 38, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 39, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 40, "rmdir", 1, { { "const char *", "pathname" } } },
{ 41, "dup", 1, { { "unsigned int", "fildes" } } },
{ 42, "pipe", 1, { { "int *", "fildes" } } },
{ 43, "times", 1, { { "struct tms *", "tbuf" } } },
{ 45, "brk", 1, { { "unsigned long", "brk" } } },
{ 48, "signal", 2, { { "int", "sig" }, { "__sighandler_t", "handler" } } },
{ 51, "acct", 1, { { "const char *", "name" } } },
{ 52, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 54, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 55, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 57, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 60, "umask", 1, { { "int", "mask" } } },
{ 61, "chroot", 1, { { "const char *", "filename" } } },
{ 62, "ustat", 2, { { "unsigned", "dev" }, { "struct ustat *", "ubuf" } } },
{ 63, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 64, "getppid", 0, {} },
{ 65, "getpgrp", 0, {} },
{ 66, "setsid", 0, {} },
{ 73, "sigpending", 1, { { "old_sigset_t *", "uset" } } },
{ 74, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 75, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 77, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 78, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 79, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 83, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 85, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 86, "uselib", 1, { { "const char *", "library" } } },
{ 87, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 88, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 89, "readdir", 0, {} },
{ 90, "mmap", 1, { { "struct mmap_arg_struct *", "arg" } } },
{ 91, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 92, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 93, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 94, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 96, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 97, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 99, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 100, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 102, "socketcall", 2, { { "int", "call" }, { "unsigned long *", "args" } } },
{ 103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 104, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 105, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 106, "stat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 107, "lstat", 2, { { "const char *", "filename" }, { "struct stat *", "statbuf" } } },
{ 108, "fstat", 2, { { "unsigned int", "fd" }, { "struct stat *", "statbuf" } } },
{ 110, "lookup_dcookie", 0, {} },
{ 111, "vhangup", 0, {} },
{ 112, "idle", 0, {} },
{ 114, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 115, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 116, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 117, "ipc", 6, { { "unsigned int", "call" }, { "int", "first" }, { "unsigned long", "second" }, { "unsigned long", "third" }, { "void *", "ptr" }, { "long", "fifth" } } },
{ 118, "fsync", 1, { { "unsigned int", "fd" } } },
{ 119, "sigreturn", 0, {} },
{ 120, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 121, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 122, "uname", 1, { { "struct new_utsname *", "name" } } },
{ 124, "adjtimex", 1, { { "struct __kernel_timex *", "txc_p" } } },
{ 125, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 126, "sigprocmask", 3, { { "int", "how" }, { "old_sigset_t *", "nset" }, { "old_sigset_t *", "oset" } } },
{ 127, "create_module", 0, {} },
{ 128, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 129, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 130, "get_kernel_syms", 0, {} },
{ 131, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 132, "getpgid", 1, { { "pid_t", "pid" } } },
{ 133, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 134, "bdflush", 0, {} },
{ 135, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 136, "personality", 1, { { "unsigned int", "personality" } } },
{ 137, "afs_syscall", 0, {} },
{ 141, "getdents", 3, { { "unsigned int", "fd" }, { "struct linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 142, "select", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 143, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 144, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 145, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 146, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 147, "getsid", 1, { { "pid_t", "pid" } } },
{ 148, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 149, "_sysctl", 0, {} },
{ 150, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 151, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 152, "mlockall", 1, { { "int", "flags" } } },
{ 153, "munlockall", 0, {} },
{ 154, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 155, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 156, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 157, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 158, "sched_yield", 0, {} },
{ 159, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 160, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 161, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 162, "nanosleep", 2, { { "struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 163, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 167, "query_module", 0, {} },
{ 168, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 169, "nfsservctl", 0, {} },
{ 172, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 173, "rt_sigreturn", 0, {} },
{ 174, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 175, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 176, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 177, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 178, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 179, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 180, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 181, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 183, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 184, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 185, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 186, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 187, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 188, "getpmsg", 0, {} },
{ 189, "putpmsg", 0, {} },
{ 190, "vfork", 0, {} },
{ 191, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 198, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 199, "getuid", 0, {} },
{ 200, "getgid", 0, {} },
{ 201, "geteuid", 0, {} },
{ 202, "getegid", 0, {} },
{ 203, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 204, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 205, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 206, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 207, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 208, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 209, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 210, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 211, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 212, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 213, "setuid", 1, { { "uid_t", "uid" } } },
{ 214, "setgid", 1, { { "gid_t", "gid" } } },
{ 215, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 216, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 217, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 218, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 219, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 220, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 222, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 224, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 225, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 226, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 227, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 228, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 229, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 230, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 231, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 232, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 233, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 234, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 235, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 236, "gettid", 0, {} },
{ 237, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 238, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 239, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 240, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 241, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 243, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 244, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 245, "io_getevents", 5, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" } } },
{ 246, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 247, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 248, "exit_group", 1, { { "int", "error_code" } } },
{ 249, "epoll_create", 1, { { "int", "size" } } },
{ 250, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 251, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 252, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 253, "fadvise64", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "len" }, { "int", "advice" } } },
{ 254, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 255, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 256, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 257, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 258, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 259, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 260, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 261, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 262, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 265, "statfs64", 3, { { "const char *", "pathname" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 266, "fstatfs64", 3, { { "unsigned int", "fd" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 267, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 268, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 269, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 270, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 271, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 272, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 273, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 274, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 275, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 276, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 277, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 278, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 279, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 280, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 281, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 282, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 283, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 284, "inotify_init", 0, {} },
{ 285, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 286, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 287, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 288, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 289, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 290, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 291, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 292, "futimesat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 293, "newfstatat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat *", "statbuf" }, { "int", "flag" } } },
{ 294, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 295, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 296, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 297, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 298, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 299, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 300, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 301, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 302, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 303, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 304, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 305, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 306, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 307, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 308, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 309, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 310, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 311, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 312, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 313, "utimes", 2, { { "char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 314, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 315, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 316, "signalfd", 3, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" } } },
{ 317, "timerfd", 0, {} },
{ 318, "eventfd", 1, { { "unsigned int", "count" } } },
{ 319, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 320, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 321, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 322, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 323, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 324, "inotify_init1", 1, { { "int", "flags" } } },
{ 325, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 326, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 327, "epoll_create1", 1, { { "int", "flags" } } },
{ 328, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 329, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 330, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 331, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 332, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 333, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 334, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 335, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 336, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 337, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 338, "syncfs", 1, { { "int", "fd" } } },
{ 339, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 340, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 341, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 342, "s390_runtime_instr", 2, { { "int", "command" }, { "int", "signum" } } },
{ 343, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 344, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 345, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 346, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 347, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 348, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 349, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 350, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 351, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 352, "s390_pci_mmio_write", 3, { { "unsigned long", "mmio_addr" }, { "const void *", "user_buffer" }, { "size_t", "length" } } },
{ 353, "s390_pci_mmio_read", 3, { { "unsigned long", "mmio_addr" }, { "void *", "user_buffer" }, { "size_t", "length" } } },
{ 354, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 355, "userfaultfd", 1, { { "int", "flags" } } },
{ 356, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 357, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 358, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 359, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 360, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 361, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 362, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 363, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 364, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 365, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 366, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 367, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 368, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 369, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 370, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 371, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 372, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 373, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 374, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 375, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 376, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 377, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 378, "s390_guarded_storage", 2, { { "int", "command" }, { "struct gs_cb *", "gs_cb" } } },
{ 379, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 380, "s390_sthyi", 4, { { "unsigned long", "function_code" }, { "void *", "buffer" }, { "u64 *", "return_code" }, { "unsigned long", "flags" } } },
{ 381, "kexec_file_load", 5, { { "int", "kernel_fd" }, { "int", "initrd_fd" }, { "unsigned long", "cmdline_len" }, { "const char *", "cmdline_ptr" }, { "unsigned long", "flags" } } },
{ 382, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 383, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 384, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 385, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 386, "pkey_free", 1, { { "int", "pkey" } } },
{ 392, "semtimedop", 4, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned int", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 393, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 394, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 395, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 396, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 397, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 398, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 399, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 400, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 401, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 402, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 447, "memfd_secret", 1, { { "unsigned int", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = 0;
return NULL;
}
+393
View File
@@ -0,0 +1,393 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
EXIT = 1,
FORK = 2,
READ = 3,
WRITE = 4,
OPEN = 5,
CLOSE = 6,
RESTART_SYSCALL = 7,
CREAT = 8,
LINK = 9,
UNLINK = 10,
EXECVE = 11,
CHDIR = 12,
MKNOD = 14,
CHMOD = 15,
LSEEK = 19,
GETPID = 20,
MOUNT = 21,
UMOUNT = 22,
PTRACE = 26,
ALARM = 27,
PAUSE = 29,
UTIME = 30,
ACCESS = 33,
NICE = 34,
SYNC = 36,
KILL = 37,
RENAME = 38,
MKDIR = 39,
RMDIR = 40,
DUP = 41,
PIPE = 42,
TIMES = 43,
BRK = 45,
SIGNAL = 48,
ACCT = 51,
UMOUNT2 = 52,
IOCTL = 54,
FCNTL = 55,
SETPGID = 57,
UMASK = 60,
CHROOT = 61,
USTAT = 62,
DUP2 = 63,
GETPPID = 64,
GETPGRP = 65,
SETSID = 66,
SIGPENDING = 73,
SETHOSTNAME = 74,
SETRLIMIT = 75,
GETRUSAGE = 77,
GETTIMEOFDAY = 78,
SETTIMEOFDAY = 79,
SYMLINK = 83,
READLINK = 85,
USELIB = 86,
SWAPON = 87,
REBOOT = 88,
READDIR = 89,
MMAP = 90,
MUNMAP = 91,
TRUNCATE = 92,
FTRUNCATE = 93,
FCHMOD = 94,
GETPRIORITY = 96,
SETPRIORITY = 97,
STATFS = 99,
FSTATFS = 100,
SOCKETCALL = 102,
SYSLOG = 103,
SETITIMER = 104,
GETITIMER = 105,
STAT = 106,
LSTAT = 107,
FSTAT = 108,
LOOKUP_DCOOKIE = 110,
VHANGUP = 111,
IDLE = 112,
WAIT4 = 114,
SWAPOFF = 115,
SYSINFO = 116,
IPC = 117,
FSYNC = 118,
SIGRETURN = 119,
CLONE = 120,
SETDOMAINNAME = 121,
UNAME = 122,
ADJTIMEX = 124,
MPROTECT = 125,
SIGPROCMASK = 126,
CREATE_MODULE = 127,
INIT_MODULE = 128,
DELETE_MODULE = 129,
GET_KERNEL_SYMS = 130,
QUOTACTL = 131,
GETPGID = 132,
FCHDIR = 133,
BDFLUSH = 134,
SYSFS = 135,
PERSONALITY = 136,
AFS_SYSCALL = 137,
GETDENTS = 141,
SELECT = 142,
FLOCK = 143,
MSYNC = 144,
READV = 145,
WRITEV = 146,
GETSID = 147,
FDATASYNC = 148,
_SYSCTL = 149,
MLOCK = 150,
MUNLOCK = 151,
MLOCKALL = 152,
MUNLOCKALL = 153,
SCHED_SETPARAM = 154,
SCHED_GETPARAM = 155,
SCHED_SETSCHEDULER = 156,
SCHED_GETSCHEDULER = 157,
SCHED_YIELD = 158,
SCHED_GET_PRIORITY_MAX = 159,
SCHED_GET_PRIORITY_MIN = 160,
SCHED_RR_GET_INTERVAL = 161,
NANOSLEEP = 162,
MREMAP = 163,
QUERY_MODULE = 167,
POLL = 168,
NFSSERVCTL = 169,
PRCTL = 172,
RT_SIGRETURN = 173,
RT_SIGACTION = 174,
RT_SIGPROCMASK = 175,
RT_SIGPENDING = 176,
RT_SIGTIMEDWAIT = 177,
RT_SIGQUEUEINFO = 178,
RT_SIGSUSPEND = 179,
PREAD64 = 180,
PWRITE64 = 181,
GETCWD = 183,
CAPGET = 184,
CAPSET = 185,
SIGALTSTACK = 186,
SENDFILE = 187,
GETPMSG = 188,
PUTPMSG = 189,
VFORK = 190,
GETRLIMIT = 191,
LCHOWN = 198,
GETUID = 199,
GETGID = 200,
GETEUID = 201,
GETEGID = 202,
SETREUID = 203,
SETREGID = 204,
GETGROUPS = 205,
SETGROUPS = 206,
FCHOWN = 207,
SETRESUID = 208,
GETRESUID = 209,
SETRESGID = 210,
GETRESGID = 211,
CHOWN = 212,
SETUID = 213,
SETGID = 214,
SETFSUID = 215,
SETFSGID = 216,
PIVOT_ROOT = 217,
MINCORE = 218,
MADVISE = 219,
GETDENTS64 = 220,
READAHEAD = 222,
SETXATTR = 224,
LSETXATTR = 225,
FSETXATTR = 226,
GETXATTR = 227,
LGETXATTR = 228,
FGETXATTR = 229,
LISTXATTR = 230,
LLISTXATTR = 231,
FLISTXATTR = 232,
REMOVEXATTR = 233,
LREMOVEXATTR = 234,
FREMOVEXATTR = 235,
GETTID = 236,
TKILL = 237,
FUTEX = 238,
SCHED_SETAFFINITY = 239,
SCHED_GETAFFINITY = 240,
TGKILL = 241,
IO_SETUP = 243,
IO_DESTROY = 244,
IO_GETEVENTS = 245,
IO_SUBMIT = 246,
IO_CANCEL = 247,
EXIT_GROUP = 248,
EPOLL_CREATE = 249,
EPOLL_CTL = 250,
EPOLL_WAIT = 251,
SET_TID_ADDRESS = 252,
FADVISE64 = 253,
TIMER_CREATE = 254,
TIMER_SETTIME = 255,
TIMER_GETTIME = 256,
TIMER_GETOVERRUN = 257,
TIMER_DELETE = 258,
CLOCK_SETTIME = 259,
CLOCK_GETTIME = 260,
CLOCK_GETRES = 261,
CLOCK_NANOSLEEP = 262,
STATFS64 = 265,
FSTATFS64 = 266,
REMAP_FILE_PAGES = 267,
MBIND = 268,
GET_MEMPOLICY = 269,
SET_MEMPOLICY = 270,
MQ_OPEN = 271,
MQ_UNLINK = 272,
MQ_TIMEDSEND = 273,
MQ_TIMEDRECEIVE = 274,
MQ_NOTIFY = 275,
MQ_GETSETATTR = 276,
KEXEC_LOAD = 277,
ADD_KEY = 278,
REQUEST_KEY = 279,
KEYCTL = 280,
WAITID = 281,
IOPRIO_SET = 282,
IOPRIO_GET = 283,
INOTIFY_INIT = 284,
INOTIFY_ADD_WATCH = 285,
INOTIFY_RM_WATCH = 286,
MIGRATE_PAGES = 287,
OPENAT = 288,
MKDIRAT = 289,
MKNODAT = 290,
FCHOWNAT = 291,
FUTIMESAT = 292,
NEWFSTATAT = 293,
UNLINKAT = 294,
RENAMEAT = 295,
LINKAT = 296,
SYMLINKAT = 297,
READLINKAT = 298,
FCHMODAT = 299,
FACCESSAT = 300,
PSELECT6 = 301,
PPOLL = 302,
UNSHARE = 303,
SET_ROBUST_LIST = 304,
GET_ROBUST_LIST = 305,
SPLICE = 306,
SYNC_FILE_RANGE = 307,
TEE = 308,
VMSPLICE = 309,
MOVE_PAGES = 310,
GETCPU = 311,
EPOLL_PWAIT = 312,
UTIMES = 313,
FALLOCATE = 314,
UTIMENSAT = 315,
SIGNALFD = 316,
TIMERFD = 317,
EVENTFD = 318,
TIMERFD_CREATE = 319,
TIMERFD_SETTIME = 320,
TIMERFD_GETTIME = 321,
SIGNALFD4 = 322,
EVENTFD2 = 323,
INOTIFY_INIT1 = 324,
PIPE2 = 325,
DUP3 = 326,
EPOLL_CREATE1 = 327,
PREADV = 328,
PWRITEV = 329,
RT_TGSIGQUEUEINFO = 330,
PERF_EVENT_OPEN = 331,
FANOTIFY_INIT = 332,
FANOTIFY_MARK = 333,
PRLIMIT64 = 334,
NAME_TO_HANDLE_AT = 335,
OPEN_BY_HANDLE_AT = 336,
CLOCK_ADJTIME = 337,
SYNCFS = 338,
SETNS = 339,
PROCESS_VM_READV = 340,
PROCESS_VM_WRITEV = 341,
S390_RUNTIME_INSTR = 342,
KCMP = 343,
FINIT_MODULE = 344,
SCHED_SETATTR = 345,
SCHED_GETATTR = 346,
RENAMEAT2 = 347,
SECCOMP = 348,
GETRANDOM = 349,
MEMFD_CREATE = 350,
BPF = 351,
S390_PCI_MMIO_WRITE = 352,
S390_PCI_MMIO_READ = 353,
EXECVEAT = 354,
USERFAULTFD = 355,
MEMBARRIER = 356,
RECVMMSG = 357,
SENDMMSG = 358,
SOCKET = 359,
SOCKETPAIR = 360,
BIND = 361,
CONNECT = 362,
LISTEN = 363,
ACCEPT4 = 364,
GETSOCKOPT = 365,
SETSOCKOPT = 366,
GETSOCKNAME = 367,
GETPEERNAME = 368,
SENDTO = 369,
SENDMSG = 370,
RECVFROM = 371,
RECVMSG = 372,
SHUTDOWN = 373,
MLOCK2 = 374,
COPY_FILE_RANGE = 375,
PREADV2 = 376,
PWRITEV2 = 377,
S390_GUARDED_STORAGE = 378,
STATX = 379,
S390_STHYI = 380,
KEXEC_FILE_LOAD = 381,
IO_PGETEVENTS = 382,
RSEQ = 383,
PKEY_MPROTECT = 384,
PKEY_ALLOC = 385,
PKEY_FREE = 386,
SEMTIMEDOP = 392,
SEMGET = 393,
SEMCTL = 394,
SHMGET = 395,
SHMCTL = 396,
SHMAT = 397,
SHMDT = 398,
MSGGET = 399,
MSGSND = 400,
MSGRCV = 401,
MSGCTL = 402,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
MEMFD_SECRET = 447,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
}
+459
View File
@@ -0,0 +1,459 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 0, "restart_syscall", 0, {} },
{ 1, "exit", 1, { { "int", "error_code" } } },
{ 2, "fork", 0, {} },
{ 3, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 4, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 5, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 6, "close", 1, { { "unsigned int", "fd" } } },
{ 7, "waitpid", 3, { { "pid_t", "pid" }, { "int *", "stat_addr" }, { "int", "options" } } },
{ 8, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 9, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 10, "unlink", 1, { { "const char *", "pathname" } } },
{ 11, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 12, "chdir", 1, { { "const char *", "filename" } } },
{ 13, "time", 1, { { "__kernel_old_time_t *", "tloc" } } },
{ 14, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 15, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 16, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 18, "oldstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 19, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 20, "getpid", 0, {} },
{ 21, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 22, "umount", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 23, "setuid", 1, { { "uid_t", "uid" } } },
{ 24, "getuid", 0, {} },
{ 25, "stime", 1, { { "__kernel_old_time_t *", "tptr" } } },
{ 26, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 27, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 28, "oldfstat", 2, { { "unsigned int", "fd" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 29, "pause", 0, {} },
{ 30, "utime", 2, { { "char *", "filename" }, { "struct utimbuf *", "times" } } },
{ 33, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 34, "nice", 1, { { "int", "increment" } } },
{ 36, "sync", 0, {} },
{ 37, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 38, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 39, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 40, "rmdir", 1, { { "const char *", "pathname" } } },
{ 41, "dup", 1, { { "unsigned int", "fildes" } } },
{ 42, "pipe", 1, { { "int *", "fildes" } } },
{ 43, "times", 1, { { "struct tms *", "tbuf" } } },
{ 45, "brk", 1, { { "unsigned long", "brk" } } },
{ 46, "setgid", 1, { { "gid_t", "gid" } } },
{ 47, "getgid", 0, {} },
{ 48, "signal", 2, { { "int", "sig" }, { "__sighandler_t", "handler" } } },
{ 49, "geteuid", 0, {} },
{ 50, "getegid", 0, {} },
{ 51, "acct", 1, { { "const char *", "name" } } },
{ 52, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 54, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 55, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 57, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 59, "oldolduname", 1, { { "struct oldold_utsname *", "arg0" } } },
{ 60, "umask", 1, { { "int", "mask" } } },
{ 61, "chroot", 1, { { "const char *", "filename" } } },
{ 62, "ustat", 2, { { "unsigned", "dev" }, { "struct ustat *", "ubuf" } } },
{ 63, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 64, "getppid", 0, {} },
{ 65, "getpgrp", 0, {} },
{ 66, "setsid", 0, {} },
{ 67, "sigaction", 3, { { "int", "sig" }, { "const struct old_sigaction *", "act" }, { "struct old_sigaction *", "oact" } } },
{ 68, "sgetmask", 0, {} },
{ 69, "ssetmask", 1, { { "int", "newmask" } } },
{ 70, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 71, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 72, "sigsuspend", 3, { { "int", "unused1" }, { "int", "unused2" }, { "old_sigset_t", "mask" } } },
{ 73, "sigpending", 1, { { "old_sigset_t *", "uset" } } },
{ 74, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 75, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 76, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 77, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 78, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 79, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 80, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 81, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 82, "select", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 83, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 84, "oldlstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 85, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 86, "uselib", 1, { { "const char *", "library" } } },
{ 87, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 88, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 89, "readdir", 3, { { "unsigned", "int" }, { "struct old_linux_dirent *", "arg1" }, { "unsigned", "int" } } },
{ 90, "mmap", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "off" } } },
{ 91, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 92, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 93, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 94, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 95, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 96, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 97, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 99, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 100, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 101, "ioperm", 3, { { "unsigned long", "from" }, { "unsigned long", "num" }, { "int", "turn_on" } } },
{ 102, "socketcall", 2, { { "int", "call" }, { "unsigned long *", "args" } } },
{ 103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 104, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 105, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 106, "stat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 107, "lstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 108, "fstat", 2, { { "unsigned int", "fd" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 109, "olduname", 1, { { "struct oldold_utsname *", "name" } } },
{ 110, "iopl", 1, { { "unsigned int", "level" } } },
{ 111, "vhangup", 0, {} },
{ 113, "vm86old", 1, { { "struct vm86_struct *", "user_vm86" } } },
{ 114, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 115, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 116, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 117, "ipc", 6, { { "unsigned int", "call" }, { "int", "first" }, { "unsigned long", "second" }, { "unsigned long", "third" }, { "void *", "ptr" }, { "long", "fifth" } } },
{ 118, "fsync", 1, { { "unsigned int", "fd" } } },
{ 120, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 121, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 122, "uname", 1, { { "struct old_utsname *", "name" } } },
{ 123, "modify_ldt", 3, { { "int", "func" }, { "void *", "ptr" }, { "unsigned long", "bytecount" } } },
{ 124, "adjtimex", 1, { { "struct old_timex32 *", "txc_p" } } },
{ 125, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 126, "sigprocmask", 3, { { "int", "how" }, { "old_sigset_t *", "nset" }, { "old_sigset_t *", "oset" } } },
{ 128, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 129, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 131, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 132, "getpgid", 1, { { "pid_t", "pid" } } },
{ 133, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 134, "bdflush", 0, {} },
{ 135, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 136, "personality", 1, { { "unsigned int", "personality" } } },
{ 138, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 139, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 140, "_llseek", 5, { { "unsigned int", "fd" }, { "unsigned long", "offset_high" }, { "unsigned long", "offset_low" }, { "loff_t *", "result" }, { "unsigned int", "whence" } } },
{ 141, "getdents", 3, { { "unsigned int", "fd" }, { "struct linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 142, "_newselect", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 143, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 144, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 145, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 146, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 147, "getsid", 1, { { "pid_t", "pid" } } },
{ 148, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 149, "_sysctl", 0, {} },
{ 150, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 151, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 152, "mlockall", 1, { { "int", "flags" } } },
{ 153, "munlockall", 0, {} },
{ 154, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 155, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 156, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 157, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 158, "sched_yield", 0, {} },
{ 159, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 160, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 161, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 162, "nanosleep", 2, { { "struct old_timespec32 *", "rqtp" }, { "struct old_timespec32 *", "rmtp" } } },
{ 163, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 164, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 165, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 166, "vm86", 2, { { "unsigned long", "cmd" }, { "unsigned long", "arg" } } },
{ 168, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 170, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 171, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 172, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 173, "rt_sigreturn", 0, {} },
{ 174, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 175, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 176, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 177, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 178, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 179, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 180, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 181, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 182, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 183, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 184, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 185, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 186, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 187, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 190, "vfork", 0, {} },
{ 191, "ugetrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 192, "mmap2", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "pgoff" } } },
{ 193, "truncate64", 2, { { "const char *", "path" }, { "loff_t", "length" } } },
{ 194, "ftruncate64", 2, { { "unsigned int", "fd" }, { "loff_t", "length" } } },
{ 198, "lchown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 199, "getuid32", 0, {} },
{ 200, "getgid32", 0, {} },
{ 201, "geteuid32", 0, {} },
{ 202, "getegid32", 0, {} },
{ 203, "setreuid32", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 204, "setregid32", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 205, "getgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 206, "setgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 207, "fchown32", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 208, "setresuid32", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 209, "getresuid32", 3, { { "uid_t *", "ruid" }, { "uid_t *", "euid" }, { "uid_t *", "suid" } } },
{ 210, "setresgid32", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 211, "getresgid32", 3, { { "gid_t *", "rgid" }, { "gid_t *", "egid" }, { "gid_t *", "sgid" } } },
{ 212, "chown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 213, "setuid32", 1, { { "uid_t", "uid" } } },
{ 214, "setgid32", 1, { { "gid_t", "gid" } } },
{ 215, "setfsuid32", 1, { { "uid_t", "uid" } } },
{ 216, "setfsgid32", 1, { { "gid_t", "gid" } } },
{ 217, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 218, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 219, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 220, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 221, "fcntl64", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 224, "gettid", 0, {} },
{ 225, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 226, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 227, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 228, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 229, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 230, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 231, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 232, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 233, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 234, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 235, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 236, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 237, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 238, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 239, "sendfile64", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "loff_t *", "offset" }, { "size_t", "count" } } },
{ 240, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 241, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 242, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 243, "set_thread_area", 1, { { "struct user_desc *", "user_desc" } } },
{ 244, "get_thread_area", 1, { { "struct user_desc *", "user_desc" } } },
{ 245, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 246, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 247, "io_getevents", 5, { { "__u32", "ctx_id" }, { "__s32", "min_nr" }, { "__s32", "nr" }, { "struct io_event *", "events" }, { "struct old_timespec32 *", "timeout" } } },
{ 248, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 249, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 250, "fadvise64", 5, { { "int", "fd" }, { "unsigned int", "offset_lo" }, { "unsigned int", "offset_hi" }, { "size_t", "len" }, { "int", "advice" } } },
{ 252, "exit_group", 1, { { "int", "error_code" } } },
{ 254, "epoll_create", 1, { { "int", "size" } } },
{ 255, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 256, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 257, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 258, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 259, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 260, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 261, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 262, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 263, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 264, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 265, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 266, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 267, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 268, "statfs64", 3, { { "const char *", "pathname" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 269, "fstatfs64", 3, { { "unsigned int", "fd" }, { "size_t", "sz" }, { "struct statfs64 *", "buf" } } },
{ 270, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 271, "utimes", 2, { { "char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 272, "fadvise64_64", 6, { { "int", "fd" }, { "__u32", "offset_low" }, { "__u32", "offset_high" }, { "__u32", "len_low" }, { "__u32", "len_high" }, { "int", "advice" } } },
{ 274, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 275, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 276, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 277, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 278, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 279, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 280, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 281, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 282, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 283, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 284, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 286, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 287, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 288, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 289, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 290, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 291, "inotify_init", 0, {} },
{ 292, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 293, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 294, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 295, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 296, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 297, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 298, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 299, "futimesat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 301, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 302, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 303, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 304, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 305, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 306, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 307, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 308, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 309, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 310, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 311, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 312, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 313, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 314, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 315, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 316, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 317, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 318, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 319, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 320, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 321, "signalfd", 3, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" } } },
{ 322, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 323, "eventfd", 1, { { "unsigned int", "count" } } },
{ 324, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 325, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 326, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 327, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 328, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 329, "epoll_create1", 1, { { "int", "flags" } } },
{ 330, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 331, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 332, "inotify_init1", 1, { { "int", "flags" } } },
{ 333, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 334, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 335, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 336, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 337, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 338, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 339, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 340, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 341, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 342, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 343, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 344, "syncfs", 1, { { "int", "fd" } } },
{ 345, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 346, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 347, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 348, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 349, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 350, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 351, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 352, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 353, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 354, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 355, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 356, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 357, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 358, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 359, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 360, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 361, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 362, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 363, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 364, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 365, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 366, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 367, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 368, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 369, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 370, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 371, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 372, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 373, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 374, "userfaultfd", 1, { { "int", "flags" } } },
{ 375, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 376, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 377, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 378, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 379, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 380, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 381, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 382, "pkey_free", 1, { { "int", "pkey" } } },
{ 383, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 384, "arch_prctl", 2, { { "int", "option" }, { "unsigned long", "arg2" } } },
{ 385, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 386, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 393, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 394, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 395, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 396, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 397, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 398, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 399, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 400, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 401, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 402, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 403, "clock_gettime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 404, "clock_settime64", 2, { { "clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 405, "clock_adjtime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timex *", "tx" } } },
{ 406, "clock_getres_time64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 407, "clock_nanosleep_time64", 4, { { "clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 408, "timer_gettime64", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 409, "timer_settime64", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 410, "timerfd_gettime64", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 411, "timerfd_settime64", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 412, "utimensat_time64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 413, "pselect6_time64", 6, { { "int", "arg0" }, { "fd_set *", "arg1" }, { "fd_set *", "arg2" }, { "fd_set *", "arg3" }, { "struct __kernel_timespec *", "arg4" }, { "void *", "arg5" } } },
{ 414, "ppoll_time64", 5, { { "struct pollfd *", "arg0" }, { "unsigned", "int" }, { "struct __kernel_timespec *", "arg2" }, { "const sigset_t *", "arg3" }, { "size_t", "arg4" } } },
{ 416, "io_pgetevents_time64", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "sig" } } },
{ 417, "recvmmsg_time64", 5, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 418, "mq_timedsend_time64", 5, { { "mqd_t", "mqdes" }, { "const char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 419, "mq_timedreceive_time64", 5, { { "mqd_t", "mqdes" }, { "char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 420, "semtimedop_time64", 4, { { "int", "semid" }, { "struct sembuf *", "sops" }, { "unsigned", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 421, "rt_sigtimedwait_time64", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 422, "futex_time64", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 423, "sched_rr_get_interval_time64", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 447, "memfd_secret", 1, { { "unsigned int", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = 0;
return NULL;
}
+442
View File
@@ -0,0 +1,442 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
RESTART_SYSCALL = 0,
EXIT = 1,
FORK = 2,
READ = 3,
WRITE = 4,
OPEN = 5,
CLOSE = 6,
WAITPID = 7,
CREAT = 8,
LINK = 9,
UNLINK = 10,
EXECVE = 11,
CHDIR = 12,
TIME = 13,
MKNOD = 14,
CHMOD = 15,
LCHOWN = 16,
OLDSTAT = 18,
LSEEK = 19,
GETPID = 20,
MOUNT = 21,
UMOUNT = 22,
SETUID = 23,
GETUID = 24,
STIME = 25,
PTRACE = 26,
ALARM = 27,
OLDFSTAT = 28,
PAUSE = 29,
UTIME = 30,
ACCESS = 33,
NICE = 34,
SYNC = 36,
KILL = 37,
RENAME = 38,
MKDIR = 39,
RMDIR = 40,
DUP = 41,
PIPE = 42,
TIMES = 43,
BRK = 45,
SETGID = 46,
GETGID = 47,
SIGNAL = 48,
GETEUID = 49,
GETEGID = 50,
ACCT = 51,
UMOUNT2 = 52,
IOCTL = 54,
FCNTL = 55,
SETPGID = 57,
OLDOLDUNAME = 59,
UMASK = 60,
CHROOT = 61,
USTAT = 62,
DUP2 = 63,
GETPPID = 64,
GETPGRP = 65,
SETSID = 66,
SIGACTION = 67,
SGETMASK = 68,
SSETMASK = 69,
SETREUID = 70,
SETREGID = 71,
SIGSUSPEND = 72,
SIGPENDING = 73,
SETHOSTNAME = 74,
SETRLIMIT = 75,
GETRLIMIT = 76,
GETRUSAGE = 77,
GETTIMEOFDAY = 78,
SETTIMEOFDAY = 79,
GETGROUPS = 80,
SETGROUPS = 81,
SELECT = 82,
SYMLINK = 83,
OLDLSTAT = 84,
READLINK = 85,
USELIB = 86,
SWAPON = 87,
REBOOT = 88,
READDIR = 89,
MMAP = 90,
MUNMAP = 91,
TRUNCATE = 92,
FTRUNCATE = 93,
FCHMOD = 94,
FCHOWN = 95,
GETPRIORITY = 96,
SETPRIORITY = 97,
STATFS = 99,
FSTATFS = 100,
IOPERM = 101,
SOCKETCALL = 102,
SYSLOG = 103,
SETITIMER = 104,
GETITIMER = 105,
STAT = 106,
LSTAT = 107,
FSTAT = 108,
OLDUNAME = 109,
IOPL = 110,
VHANGUP = 111,
VM86OLD = 113,
WAIT4 = 114,
SWAPOFF = 115,
SYSINFO = 116,
IPC = 117,
FSYNC = 118,
CLONE = 120,
SETDOMAINNAME = 121,
UNAME = 122,
MODIFY_LDT = 123,
ADJTIMEX = 124,
MPROTECT = 125,
SIGPROCMASK = 126,
INIT_MODULE = 128,
DELETE_MODULE = 129,
QUOTACTL = 131,
GETPGID = 132,
FCHDIR = 133,
BDFLUSH = 134,
SYSFS = 135,
PERSONALITY = 136,
SETFSUID = 138,
SETFSGID = 139,
_LLSEEK = 140,
GETDENTS = 141,
_NEWSELECT = 142,
FLOCK = 143,
MSYNC = 144,
READV = 145,
WRITEV = 146,
GETSID = 147,
FDATASYNC = 148,
_SYSCTL = 149,
MLOCK = 150,
MUNLOCK = 151,
MLOCKALL = 152,
MUNLOCKALL = 153,
SCHED_SETPARAM = 154,
SCHED_GETPARAM = 155,
SCHED_SETSCHEDULER = 156,
SCHED_GETSCHEDULER = 157,
SCHED_YIELD = 158,
SCHED_GET_PRIORITY_MAX = 159,
SCHED_GET_PRIORITY_MIN = 160,
SCHED_RR_GET_INTERVAL = 161,
NANOSLEEP = 162,
MREMAP = 163,
SETRESUID = 164,
GETRESUID = 165,
VM86 = 166,
POLL = 168,
SETRESGID = 170,
GETRESGID = 171,
PRCTL = 172,
RT_SIGRETURN = 173,
RT_SIGACTION = 174,
RT_SIGPROCMASK = 175,
RT_SIGPENDING = 176,
RT_SIGTIMEDWAIT = 177,
RT_SIGQUEUEINFO = 178,
RT_SIGSUSPEND = 179,
PREAD64 = 180,
PWRITE64 = 181,
CHOWN = 182,
GETCWD = 183,
CAPGET = 184,
CAPSET = 185,
SIGALTSTACK = 186,
SENDFILE = 187,
VFORK = 190,
UGETRLIMIT = 191,
MMAP2 = 192,
TRUNCATE64 = 193,
FTRUNCATE64 = 194,
LCHOWN32 = 198,
GETUID32 = 199,
GETGID32 = 200,
GETEUID32 = 201,
GETEGID32 = 202,
SETREUID32 = 203,
SETREGID32 = 204,
GETGROUPS32 = 205,
SETGROUPS32 = 206,
FCHOWN32 = 207,
SETRESUID32 = 208,
GETRESUID32 = 209,
SETRESGID32 = 210,
GETRESGID32 = 211,
CHOWN32 = 212,
SETUID32 = 213,
SETGID32 = 214,
SETFSUID32 = 215,
SETFSGID32 = 216,
PIVOT_ROOT = 217,
MINCORE = 218,
MADVISE = 219,
GETDENTS64 = 220,
FCNTL64 = 221,
GETTID = 224,
READAHEAD = 225,
SETXATTR = 226,
LSETXATTR = 227,
FSETXATTR = 228,
GETXATTR = 229,
LGETXATTR = 230,
FGETXATTR = 231,
LISTXATTR = 232,
LLISTXATTR = 233,
FLISTXATTR = 234,
REMOVEXATTR = 235,
LREMOVEXATTR = 236,
FREMOVEXATTR = 237,
TKILL = 238,
SENDFILE64 = 239,
FUTEX = 240,
SCHED_SETAFFINITY = 241,
SCHED_GETAFFINITY = 242,
SET_THREAD_AREA = 243,
GET_THREAD_AREA = 244,
IO_SETUP = 245,
IO_DESTROY = 246,
IO_GETEVENTS = 247,
IO_SUBMIT = 248,
IO_CANCEL = 249,
FADVISE64 = 250,
EXIT_GROUP = 252,
EPOLL_CREATE = 254,
EPOLL_CTL = 255,
EPOLL_WAIT = 256,
REMAP_FILE_PAGES = 257,
SET_TID_ADDRESS = 258,
TIMER_CREATE = 259,
TIMER_SETTIME = 260,
TIMER_GETTIME = 261,
TIMER_GETOVERRUN = 262,
TIMER_DELETE = 263,
CLOCK_SETTIME = 264,
CLOCK_GETTIME = 265,
CLOCK_GETRES = 266,
CLOCK_NANOSLEEP = 267,
STATFS64 = 268,
FSTATFS64 = 269,
TGKILL = 270,
UTIMES = 271,
FADVISE64_64 = 272,
MBIND = 274,
GET_MEMPOLICY = 275,
SET_MEMPOLICY = 276,
MQ_OPEN = 277,
MQ_UNLINK = 278,
MQ_TIMEDSEND = 279,
MQ_TIMEDRECEIVE = 280,
MQ_NOTIFY = 281,
MQ_GETSETATTR = 282,
KEXEC_LOAD = 283,
WAITID = 284,
ADD_KEY = 286,
REQUEST_KEY = 287,
KEYCTL = 288,
IOPRIO_SET = 289,
IOPRIO_GET = 290,
INOTIFY_INIT = 291,
INOTIFY_ADD_WATCH = 292,
INOTIFY_RM_WATCH = 293,
MIGRATE_PAGES = 294,
OPENAT = 295,
MKDIRAT = 296,
MKNODAT = 297,
FCHOWNAT = 298,
FUTIMESAT = 299,
UNLINKAT = 301,
RENAMEAT = 302,
LINKAT = 303,
SYMLINKAT = 304,
READLINKAT = 305,
FCHMODAT = 306,
FACCESSAT = 307,
PSELECT6 = 308,
PPOLL = 309,
UNSHARE = 310,
SET_ROBUST_LIST = 311,
GET_ROBUST_LIST = 312,
SPLICE = 313,
SYNC_FILE_RANGE = 314,
TEE = 315,
VMSPLICE = 316,
MOVE_PAGES = 317,
GETCPU = 318,
EPOLL_PWAIT = 319,
UTIMENSAT = 320,
SIGNALFD = 321,
TIMERFD_CREATE = 322,
EVENTFD = 323,
FALLOCATE = 324,
TIMERFD_SETTIME = 325,
TIMERFD_GETTIME = 326,
SIGNALFD4 = 327,
EVENTFD2 = 328,
EPOLL_CREATE1 = 329,
DUP3 = 330,
PIPE2 = 331,
INOTIFY_INIT1 = 332,
PREADV = 333,
PWRITEV = 334,
RT_TGSIGQUEUEINFO = 335,
PERF_EVENT_OPEN = 336,
RECVMMSG = 337,
FANOTIFY_INIT = 338,
FANOTIFY_MARK = 339,
PRLIMIT64 = 340,
NAME_TO_HANDLE_AT = 341,
OPEN_BY_HANDLE_AT = 342,
CLOCK_ADJTIME = 343,
SYNCFS = 344,
SENDMMSG = 345,
SETNS = 346,
PROCESS_VM_READV = 347,
PROCESS_VM_WRITEV = 348,
KCMP = 349,
FINIT_MODULE = 350,
SCHED_SETATTR = 351,
SCHED_GETATTR = 352,
RENAMEAT2 = 353,
SECCOMP = 354,
GETRANDOM = 355,
MEMFD_CREATE = 356,
BPF = 357,
EXECVEAT = 358,
SOCKET = 359,
SOCKETPAIR = 360,
BIND = 361,
CONNECT = 362,
LISTEN = 363,
ACCEPT4 = 364,
GETSOCKOPT = 365,
SETSOCKOPT = 366,
GETSOCKNAME = 367,
GETPEERNAME = 368,
SENDTO = 369,
SENDMSG = 370,
RECVFROM = 371,
RECVMSG = 372,
SHUTDOWN = 373,
USERFAULTFD = 374,
MEMBARRIER = 375,
MLOCK2 = 376,
COPY_FILE_RANGE = 377,
PREADV2 = 378,
PWRITEV2 = 379,
PKEY_MPROTECT = 380,
PKEY_ALLOC = 381,
PKEY_FREE = 382,
STATX = 383,
ARCH_PRCTL = 384,
IO_PGETEVENTS = 385,
RSEQ = 386,
SEMGET = 393,
SEMCTL = 394,
SHMGET = 395,
SHMCTL = 396,
SHMAT = 397,
SHMDT = 398,
MSGGET = 399,
MSGSND = 400,
MSGRCV = 401,
MSGCTL = 402,
CLOCK_GETTIME64 = 403,
CLOCK_SETTIME64 = 404,
CLOCK_ADJTIME64 = 405,
CLOCK_GETRES_TIME64 = 406,
CLOCK_NANOSLEEP_TIME64 = 407,
TIMER_GETTIME64 = 408,
TIMER_SETTIME64 = 409,
TIMERFD_GETTIME64 = 410,
TIMERFD_SETTIME64 = 411,
UTIMENSAT_TIME64 = 412,
PSELECT6_TIME64 = 413,
PPOLL_TIME64 = 414,
IO_PGETEVENTS_TIME64 = 416,
RECVMMSG_TIME64 = 417,
MQ_TIMEDSEND_TIME64 = 418,
MQ_TIMEDRECEIVE_TIME64 = 419,
SEMTIMEDOP_TIME64 = 420,
RT_SIGTIMEDWAIT_TIME64 = 421,
FUTEX_TIME64 = 422,
SCHED_RR_GET_INTERVAL_TIME64 = 423,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
MEMFD_SECRET = 447,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
}
+833
View File
@@ -0,0 +1,833 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaLinuxSyscallSignature frida_syscall_signatures[] =
{
{ 0, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 1, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 2, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 3, "close", 1, { { "unsigned int", "fd" } } },
{ 4, "stat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 5, "fstat", 2, { { "unsigned int", "fd" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 6, "lstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 7, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 8, "lseek", 3, { { "unsigned int", "fd" }, { "off_t", "offset" }, { "unsigned int", "whence" } } },
{ 9, "mmap", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "off" } } },
{ 10, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 11, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 12, "brk", 1, { { "unsigned long", "brk" } } },
{ 13, "rt_sigaction", 4, { { "int", "sig" }, { "const struct sigaction *", "act" }, { "struct sigaction *", "oact" }, { "size_t", "sigsetsize" } } },
{ 14, "rt_sigprocmask", 4, { { "int", "how" }, { "sigset_t *", "nset" }, { "sigset_t *", "oset" }, { "size_t", "sigsetsize" } } },
{ 15, "rt_sigreturn", 0, {} },
{ 16, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 17, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 18, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 19, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 20, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 21, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 22, "pipe", 1, { { "int *", "fildes" } } },
{ 23, "select", 5, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_old_timeval *", "tvp" } } },
{ 24, "sched_yield", 0, {} },
{ 25, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 26, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 27, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 28, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 29, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 30, "shmat", 3, { { "int", "shmid" }, { "char *", "shmaddr" }, { "int", "shmflg" } } },
{ 31, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 32, "dup", 1, { { "unsigned int", "fildes" } } },
{ 33, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 34, "pause", 0, {} },
{ 35, "nanosleep", 2, { { "struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 36, "getitimer", 2, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" } } },
{ 37, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 38, "setitimer", 3, { { "int", "which" }, { "struct __kernel_old_itimerval *", "value" }, { "struct __kernel_old_itimerval *", "ovalue" } } },
{ 39, "getpid", 0, {} },
{ 40, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "off_t *", "offset" }, { "size_t", "count" } } },
{ 41, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 42, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 43, "accept", 3, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" } } },
{ 44, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 45, "recvfrom", 6, { { "int", "fd" }, { "void *", "ubuf" }, { "size_t", "size" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addr_len" } } },
{ 46, "sendmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 47, "recvmsg", 3, { { "int", "fd" }, { "struct user_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 48, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 49, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 50, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 51, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 52, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 53, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 54, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 55, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 56, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 57, "fork", 0, {} },
{ 58, "vfork", 0, {} },
{ 59, "execve", 3, { { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" } } },
{ 60, "exit", 1, { { "int", "error_code" } } },
{ 61, "wait4", 4, { { "pid_t", "upid" }, { "int *", "stat_addr" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 62, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 63, "uname", 1, { { "struct old_utsname *", "name" } } },
{ 64, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 65, "semop", 3, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned", "nsops" } } },
{ 66, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "unsigned long", "arg" } } },
{ 67, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 68, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 69, "msgsnd", 4, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 70, "msgrcv", 5, { { "int", "msqid" }, { "struct msgbuf *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 71, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 72, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "unsigned long", "arg" } } },
{ 73, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 74, "fsync", 1, { { "unsigned int", "fd" } } },
{ 75, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 76, "truncate", 2, { { "const char *", "path" }, { "long", "length" } } },
{ 77, "ftruncate", 2, { { "unsigned int", "fd" }, { "off_t", "length" } } },
{ 78, "getdents", 3, { { "unsigned int", "fd" }, { "struct linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 79, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 80, "chdir", 1, { { "const char *", "filename" } } },
{ 81, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 82, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 83, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 84, "rmdir", 1, { { "const char *", "pathname" } } },
{ 85, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 86, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 87, "unlink", 1, { { "const char *", "pathname" } } },
{ 88, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 89, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 90, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 91, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 92, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 93, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 94, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 95, "umask", 1, { { "int", "mask" } } },
{ 96, "gettimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 97, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 98, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "ru" } } },
{ 99, "sysinfo", 1, { { "struct sysinfo *", "info" } } },
{ 100, "times", 1, { { "struct tms *", "tbuf" } } },
{ 101, "ptrace", 4, { { "long", "request" }, { "long", "pid" }, { "unsigned long", "addr" }, { "unsigned long", "data" } } },
{ 102, "getuid", 0, {} },
{ 103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 104, "getgid", 0, {} },
{ 105, "setuid", 1, { { "uid_t", "uid" } } },
{ 106, "setgid", 1, { { "gid_t", "gid" } } },
{ 107, "geteuid", 0, {} },
{ 108, "getegid", 0, {} },
{ 109, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 110, "getppid", 0, {} },
{ 111, "getpgrp", 0, {} },
{ 112, "setsid", 0, {} },
{ 113, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 114, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 115, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 116, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 117, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 118, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 119, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 120, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 121, "getpgid", 1, { { "pid_t", "pid" } } },
{ 122, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 123, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 124, "getsid", 1, { { "pid_t", "pid" } } },
{ 125, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 126, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 127, "rt_sigpending", 2, { { "sigset_t *", "uset" }, { "size_t", "sigsetsize" } } },
{ 128, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 129, "rt_sigqueueinfo", 3, { { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 130, "rt_sigsuspend", 2, { { "sigset_t *", "unewset" }, { "size_t", "sigsetsize" } } },
{ 131, "sigaltstack", 2, { { "const stack_t *", "uss" }, { "stack_t *", "uoss" } } },
{ 132, "utime", 2, { { "char *", "filename" }, { "struct utimbuf *", "times" } } },
{ 133, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 135, "personality", 1, { { "unsigned int", "personality" } } },
{ 136, "ustat", 2, { { "unsigned", "dev" }, { "struct ustat *", "ubuf" } } },
{ 137, "statfs", 2, { { "const char *", "pathname" }, { "struct statfs *", "buf" } } },
{ 138, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct statfs *", "buf" } } },
{ 139, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 140, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 141, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 142, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 143, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 144, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 145, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 146, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 147, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 148, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 149, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 150, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 151, "mlockall", 1, { { "int", "flags" } } },
{ 152, "munlockall", 0, {} },
{ 153, "vhangup", 0, {} },
{ 154, "modify_ldt", 3, { { "int", "func" }, { "void *", "ptr" }, { "unsigned long", "bytecount" } } },
{ 155, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 156, "_sysctl", 0, {} },
{ 157, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 158, "arch_prctl", 2, { { "int", "option" }, { "unsigned long", "arg2" } } },
{ 159, "adjtimex", 1, { { "struct __kernel_timex *", "txc_p" } } },
{ 160, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct rlimit *", "rlim" } } },
{ 161, "chroot", 1, { { "const char *", "filename" } } },
{ 162, "sync", 0, {} },
{ 163, "acct", 1, { { "const char *", "name" } } },
{ 164, "settimeofday", 2, { { "struct __kernel_old_timeval *", "tv" }, { "struct timezone *", "tz" } } },
{ 165, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 166, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 167, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 168, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 169, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 170, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 171, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 172, "iopl", 1, { { "unsigned int", "level" } } },
{ 173, "ioperm", 3, { { "unsigned long", "from" }, { "unsigned long", "num" }, { "int", "turn_on" } } },
{ 175, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 176, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 179, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 186, "gettid", 0, {} },
{ 187, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 188, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 189, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 190, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 191, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 192, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 193, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 194, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 195, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 196, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 197, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 198, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 199, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 200, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 201, "time", 1, { { "__kernel_old_time_t *", "tloc" } } },
{ 202, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 203, "sched_setaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 204, "sched_getaffinity", 3, { { "pid_t", "pid" }, { "unsigned int", "len" }, { "unsigned long *", "user_mask_ptr" } } },
{ 205, "set_thread_area", 1, { { "struct user_desc *", "user_desc" } } },
{ 206, "io_setup", 2, { { "unsigned", "nr_events" }, { "aio_context_t *", "ctxp" } } },
{ 207, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 208, "io_getevents", 5, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" } } },
{ 209, "io_submit", 3, { { "aio_context_t", "ctx_id" }, { "long", "nr" }, { "struct iocb * *", "iocbpp" } } },
{ 210, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 211, "get_thread_area", 1, { { "struct user_desc *", "user_desc" } } },
{ 213, "epoll_create", 1, { { "int", "size" } } },
{ 216, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 217, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 218, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 219, "restart_syscall", 0, {} },
{ 220, "semtimedop", 4, { { "int", "semid" }, { "struct sembuf *", "tsops" }, { "unsigned int", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 221, "fadvise64", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "len" }, { "int", "advice" } } },
{ 222, "timer_create", 3, { { "const clockid_t", "which_clock" }, { "struct sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 223, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 224, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 225, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 226, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 227, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 228, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 229, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 230, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 231, "exit_group", 1, { { "int", "error_code" } } },
{ 232, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 233, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 234, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 235, "utimes", 2, { { "char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 237, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 238, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 239, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 240, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "umode_t", "mode" }, { "struct mq_attr *", "u_attr" } } },
{ 241, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 242, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 243, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 244, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct sigevent *", "u_notification" } } },
{ 245, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct mq_attr *", "u_mqstat" }, { "struct mq_attr *", "u_omqstat" } } },
{ 246, "kexec_load", 4, { { "unsigned long", "entry" }, { "unsigned long", "nr_segments" }, { "struct kexec_segment *", "segments" }, { "unsigned long", "flags" } } },
{ 247, "waitid", 5, { { "int", "which" }, { "pid_t", "upid" }, { "struct siginfo *", "infop" }, { "int", "options" }, { "struct rusage *", "ru" } } },
{ 248, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 249, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 250, "keyctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 251, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 252, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 253, "inotify_init", 0, {} },
{ 254, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 255, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 256, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 257, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 258, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 259, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 260, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 261, "futimesat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 262, "newfstatat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct stat *", "statbuf" }, { "int", "flag" } } },
{ 263, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 264, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 265, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 266, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 267, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 268, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 269, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 270, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 271, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 272, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 273, "set_robust_list", 2, { { "struct robust_list_head *", "head" }, { "size_t", "len" } } },
{ 274, "get_robust_list", 3, { { "int", "pid" }, { "struct robust_list_head * *", "head_ptr" }, { "size_t *", "len_ptr" } } },
{ 275, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 276, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 277, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 278, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 279, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 280, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 281, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 282, "signalfd", 3, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" } } },
{ 283, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 284, "eventfd", 1, { { "unsigned int", "count" } } },
{ 285, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 286, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 287, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 288, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 289, "signalfd4", 4, { { "int", "ufd" }, { "sigset_t *", "user_mask" }, { "size_t", "sizemask" }, { "int", "flags" } } },
{ 290, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 291, "epoll_create1", 1, { { "int", "flags" } } },
{ 292, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 293, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 294, "inotify_init1", 1, { { "int", "flags" } } },
{ 295, "preadv", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 296, "pwritev", 5, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" } } },
{ 297, "rt_tgsigqueueinfo", 4, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" }, { "siginfo_t *", "uinfo" } } },
{ 298, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 299, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 300, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 301, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 302, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 303, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 304, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 305, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 306, "syncfs", 1, { { "int", "fd" } } },
{ 307, "sendmmsg", 4, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 308, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 309, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 310, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 311, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 312, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 313, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 314, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 315, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 316, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 317, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 318, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 319, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 320, "kexec_file_load", 5, { { "int", "kernel_fd" }, { "int", "initrd_fd" }, { "unsigned long", "cmdline_len" }, { "const char *", "cmdline_ptr" }, { "unsigned long", "flags" } } },
{ 321, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 322, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const char *const *", "argv" }, { "const char *const *", "envp" }, { "int", "flags" } } },
{ 323, "userfaultfd", 1, { { "int", "flags" } } },
{ 324, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 325, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 326, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 327, "preadv2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 328, "pwritev2", 6, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" }, { "unsigned long", "pos_l" }, { "unsigned long", "pos_h" }, { "rwf_t", "flags" } } },
{ 329, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 330, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 331, "pkey_free", 1, { { "int", "pkey" } } },
{ 332, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 333, "io_pgetevents", 6, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __aio_sigset *", "usig" } } },
{ 334, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 335, "uretprobe", 0, {} },
{ 336, "uprobe", 0, {} },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 447, "memfd_secret", 1, { { "unsigned int", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
static const FridaLinuxSyscallSignature frida_compat32_syscall_signatures[] =
{
{ 0, "restart_syscall", 0, {} },
{ 1, "exit", 1, { { "int", "error_code" } } },
{ 2, "fork", 0, {} },
{ 3, "read", 3, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" } } },
{ 4, "write", 3, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" } } },
{ 5, "open", 3, { { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 6, "close", 1, { { "unsigned int", "fd" } } },
{ 7, "waitpid", 3, { { "pid_t", "pid" }, { "int *", "stat_addr" }, { "int", "options" } } },
{ 8, "creat", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 9, "link", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 10, "unlink", 1, { { "const char *", "pathname" } } },
{ 11, "execve", 3, { { "const char *", "filename" }, { "const compat_uptr_t *", "argv" }, { "const compat_uptr_t *", "envp" } } },
{ 12, "chdir", 1, { { "const char *", "filename" } } },
{ 13, "time", 1, { { "__kernel_old_time_t *", "tloc" } } },
{ 14, "mknod", 3, { { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned", "dev" } } },
{ 15, "chmod", 2, { { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 16, "lchown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 18, "oldstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 19, "lseek", 3, { { "unsigned int", "fd" }, { "compat_off_t", "offset" }, { "unsigned int", "whence" } } },
{ 20, "getpid", 0, {} },
{ 21, "mount", 5, { { "char *", "dev_name" }, { "char *", "dir_name" }, { "char *", "type" }, { "unsigned long", "flags" }, { "void *", "data" } } },
{ 22, "umount", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 23, "setuid", 1, { { "uid_t", "uid" } } },
{ 24, "getuid", 0, {} },
{ 25, "stime", 1, { { "__kernel_old_time_t *", "tptr" } } },
{ 26, "ptrace", 4, { { "compat_long_t", "request" }, { "compat_long_t", "pid" }, { "compat_long_t", "addr" }, { "compat_long_t", "data" } } },
{ 27, "alarm", 1, { { "unsigned int", "seconds" } } },
{ 28, "oldfstat", 2, { { "unsigned int", "fd" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 29, "pause", 0, {} },
{ 30, "utime", 2, { { "char *", "filename" }, { "struct utimbuf *", "times" } } },
{ 33, "access", 2, { { "const char *", "filename" }, { "int", "mode" } } },
{ 34, "nice", 1, { { "int", "increment" } } },
{ 36, "sync", 0, {} },
{ 37, "kill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 38, "rename", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 39, "mkdir", 2, { { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 40, "rmdir", 1, { { "const char *", "pathname" } } },
{ 41, "dup", 1, { { "unsigned int", "fildes" } } },
{ 42, "pipe", 1, { { "int *", "fildes" } } },
{ 43, "times", 1, { { "struct compat_tms *", "tbuf" } } },
{ 45, "brk", 1, { { "unsigned long", "brk" } } },
{ 46, "setgid", 1, { { "gid_t", "gid" } } },
{ 47, "getgid", 0, {} },
{ 48, "signal", 2, { { "int", "sig" }, { "__sighandler_t", "handler" } } },
{ 49, "geteuid", 0, {} },
{ 50, "getegid", 0, {} },
{ 51, "acct", 1, { { "const char *", "name" } } },
{ 52, "umount2", 2, { { "char *", "name" }, { "int", "flags" } } },
{ 54, "ioctl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "compat_ulong_t", "arg" } } },
{ 55, "fcntl", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "compat_ulong_t", "arg" } } },
{ 57, "setpgid", 2, { { "pid_t", "pid" }, { "pid_t", "pgid" } } },
{ 59, "oldolduname", 1, { { "struct oldold_utsname *", "arg0" } } },
{ 60, "umask", 1, { { "int", "mask" } } },
{ 61, "chroot", 1, { { "const char *", "filename" } } },
{ 62, "ustat", 2, { { "unsigned", "dev" }, { "struct compat_ustat *", "u" } } },
{ 63, "dup2", 2, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" } } },
{ 64, "getppid", 0, {} },
{ 65, "getpgrp", 0, {} },
{ 66, "setsid", 0, {} },
{ 67, "sigaction", 3, { { "int", "sig" }, { "const struct compat_old_sigaction *", "act" }, { "struct compat_old_sigaction *", "oact" } } },
{ 68, "sgetmask", 0, {} },
{ 69, "ssetmask", 1, { { "int", "newmask" } } },
{ 70, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 71, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 72, "sigsuspend", 3, { { "int", "unused1" }, { "int", "unused2" }, { "old_sigset_t", "mask" } } },
{ 73, "sigpending", 1, { { "compat_old_sigset_t *", "set32" } } },
{ 74, "sethostname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 75, "setrlimit", 2, { { "unsigned int", "resource" }, { "struct compat_rlimit *", "rlim" } } },
{ 76, "getrlimit", 2, { { "unsigned int", "resource" }, { "struct compat_rlimit *", "rlim" } } },
{ 77, "getrusage", 2, { { "int", "who" }, { "struct compat_rusage *", "ru" } } },
{ 78, "gettimeofday", 2, { { "struct old_timeval32 *", "tv" }, { "struct timezone *", "tz" } } },
{ 79, "settimeofday", 2, { { "struct old_timeval32 *", "tv" }, { "struct timezone *", "tz" } } },
{ 80, "getgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 81, "setgroups", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 82, "select", 5, { { "int", "n" }, { "compat_ulong_t *", "inp" }, { "compat_ulong_t *", "outp" }, { "compat_ulong_t *", "exp" }, { "struct old_timeval32 *", "tvp" } } },
{ 83, "symlink", 2, { { "const char *", "oldname" }, { "const char *", "newname" } } },
{ 84, "oldlstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 85, "readlink", 3, { { "const char *", "path" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 86, "uselib", 1, { { "const char *", "library" } } },
{ 87, "swapon", 2, { { "const char *", "specialfile" }, { "int", "swap_flags" } } },
{ 88, "reboot", 4, { { "int", "magic1" }, { "int", "magic2" }, { "unsigned int", "cmd" }, { "void *", "arg" } } },
{ 89, "readdir", 3, { { "unsigned int", "fd" }, { "struct compat_old_linux_dirent *", "arg1" }, { "unsigned int", "count" } } },
{ 90, "mmap", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "off" } } },
{ 91, "munmap", 2, { { "unsigned long", "addr" }, { "size_t", "len" } } },
{ 92, "truncate", 2, { { "const char *", "path" }, { "compat_off_t", "length" } } },
{ 93, "ftruncate", 2, { { "unsigned int", "fd" }, { "compat_off_t", "length" } } },
{ 94, "fchmod", 2, { { "unsigned int", "fd" }, { "umode_t", "mode" } } },
{ 95, "fchown", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 96, "getpriority", 2, { { "int", "which" }, { "int", "who" } } },
{ 97, "setpriority", 3, { { "int", "which" }, { "int", "who" }, { "int", "niceval" } } },
{ 99, "statfs", 2, { { "const char *", "pathname" }, { "struct compat_statfs *", "buf" } } },
{ 100, "fstatfs", 2, { { "unsigned int", "fd" }, { "struct compat_statfs *", "buf" } } },
{ 101, "ioperm", 3, { { "unsigned long", "from" }, { "unsigned long", "num" }, { "int", "turn_on" } } },
{ 102, "socketcall", 2, { { "int", "call" }, { "u32 *", "args" } } },
{ 103, "syslog", 3, { { "int", "type" }, { "char *", "buf" }, { "int", "len" } } },
{ 104, "setitimer", 3, { { "int", "which" }, { "struct old_itimerval32 *", "value" }, { "struct old_itimerval32 *", "ovalue" } } },
{ 105, "getitimer", 2, { { "int", "which" }, { "struct old_itimerval32 *", "value" } } },
{ 106, "stat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 107, "lstat", 2, { { "const char *", "filename" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 108, "fstat", 2, { { "unsigned int", "fd" }, { "struct __old_kernel_stat *", "statbuf" } } },
{ 109, "olduname", 1, { { "struct oldold_utsname *", "name" } } },
{ 110, "iopl", 1, { { "unsigned int", "level" } } },
{ 111, "vhangup", 0, {} },
{ 113, "vm86old", 1, { { "struct vm86_struct *", "user_vm86" } } },
{ 114, "wait4", 4, { { "compat_pid_t", "pid" }, { "compat_uint_t *", "stat_addr" }, { "int", "options" }, { "struct compat_rusage *", "ru" } } },
{ 115, "swapoff", 1, { { "const char *", "specialfile" } } },
{ 116, "sysinfo", 1, { { "struct compat_sysinfo *", "info" } } },
{ 117, "ipc", 6, { { "u32", "arg0" }, { "int", "arg1" }, { "int", "arg2" }, { "u32", "arg3" }, { "compat_uptr_t", "arg4" }, { "u32", "arg5" } } },
{ 118, "fsync", 1, { { "unsigned int", "fd" } } },
{ 120, "clone", 5, { { "unsigned long", "clone_flags" }, { "unsigned long", "newsp" }, { "int *", "parent_tidptr" }, { "int *", "child_tidptr" }, { "unsigned long", "tls" } } },
{ 121, "setdomainname", 2, { { "char *", "name" }, { "int", "len" } } },
{ 122, "uname", 1, { { "struct old_utsname *", "name" } } },
{ 123, "modify_ldt", 3, { { "int", "func" }, { "void *", "ptr" }, { "unsigned long", "bytecount" } } },
{ 124, "adjtimex", 1, { { "struct __kernel_timex *", "txc_p" } } },
{ 125, "mprotect", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" } } },
{ 126, "sigprocmask", 3, { { "int", "how" }, { "compat_old_sigset_t *", "nset" }, { "compat_old_sigset_t *", "oset" } } },
{ 128, "init_module", 3, { { "void *", "umod" }, { "unsigned long", "len" }, { "const char *", "uargs" } } },
{ 129, "delete_module", 2, { { "const char *", "name_user" }, { "unsigned int", "flags" } } },
{ 131, "quotactl", 4, { { "unsigned int", "cmd" }, { "const char *", "special" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 132, "getpgid", 1, { { "pid_t", "pid" } } },
{ 133, "fchdir", 1, { { "unsigned int", "fd" } } },
{ 134, "bdflush", 0, {} },
{ 135, "sysfs", 3, { { "int", "option" }, { "unsigned long", "arg1" }, { "unsigned long", "arg2" } } },
{ 136, "personality", 1, { { "unsigned int", "personality" } } },
{ 138, "setfsuid", 1, { { "uid_t", "uid" } } },
{ 139, "setfsgid", 1, { { "gid_t", "gid" } } },
{ 140, "_llseek", 5, { { "unsigned int", "fd" }, { "unsigned long", "offset_high" }, { "unsigned long", "offset_low" }, { "loff_t *", "result" }, { "unsigned int", "whence" } } },
{ 141, "getdents", 3, { { "unsigned int", "fd" }, { "struct compat_linux_dirent *", "dirent" }, { "unsigned int", "count" } } },
{ 142, "_newselect", 5, { { "int", "n" }, { "compat_ulong_t *", "inp" }, { "compat_ulong_t *", "outp" }, { "compat_ulong_t *", "exp" }, { "struct old_timeval32 *", "tvp" } } },
{ 143, "flock", 2, { { "unsigned int", "fd" }, { "unsigned int", "cmd" } } },
{ 144, "msync", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 145, "readv", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 146, "writev", 3, { { "unsigned long", "fd" }, { "const struct iovec *", "vec" }, { "unsigned long", "vlen" } } },
{ 147, "getsid", 1, { { "pid_t", "pid" } } },
{ 148, "fdatasync", 1, { { "unsigned int", "fd" } } },
{ 149, "_sysctl", 0, {} },
{ 150, "mlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 151, "munlock", 2, { { "unsigned long", "start" }, { "size_t", "len" } } },
{ 152, "mlockall", 1, { { "int", "flags" } } },
{ 153, "munlockall", 0, {} },
{ 154, "sched_setparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 155, "sched_getparam", 2, { { "pid_t", "pid" }, { "struct sched_param *", "param" } } },
{ 156, "sched_setscheduler", 3, { { "pid_t", "pid" }, { "int", "policy" }, { "struct sched_param *", "param" } } },
{ 157, "sched_getscheduler", 1, { { "pid_t", "pid" } } },
{ 158, "sched_yield", 0, {} },
{ 159, "sched_get_priority_max", 1, { { "int", "policy" } } },
{ 160, "sched_get_priority_min", 1, { { "int", "policy" } } },
{ 161, "sched_rr_get_interval", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 162, "nanosleep", 2, { { "struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 163, "mremap", 5, { { "unsigned long", "addr" }, { "unsigned long", "old_len" }, { "unsigned long", "new_len" }, { "unsigned long", "flags" }, { "unsigned long", "new_addr" } } },
{ 164, "setresuid", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 165, "getresuid", 3, { { "uid_t *", "ruidp" }, { "uid_t *", "euidp" }, { "uid_t *", "suidp" } } },
{ 166, "vm86", 2, { { "unsigned long", "cmd" }, { "unsigned long", "arg" } } },
{ 168, "poll", 3, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "int", "timeout_msecs" } } },
{ 170, "setresgid", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 171, "getresgid", 3, { { "gid_t *", "rgidp" }, { "gid_t *", "egidp" }, { "gid_t *", "sgidp" } } },
{ 172, "prctl", 5, { { "int", "option" }, { "unsigned long", "arg2" }, { "unsigned long", "arg3" }, { "unsigned long", "arg4" }, { "unsigned long", "arg5" } } },
{ 173, "rt_sigreturn", 0, {} },
{ 174, "rt_sigaction", 4, { { "int", "sig" }, { "const struct compat_sigaction *", "act" }, { "struct compat_sigaction *", "oact" }, { "compat_size_t", "sigsetsize" } } },
{ 175, "rt_sigprocmask", 4, { { "int", "how" }, { "compat_sigset_t *", "nset" }, { "compat_sigset_t *", "oset" }, { "compat_size_t", "sigsetsize" } } },
{ 176, "rt_sigpending", 2, { { "compat_sigset_t *", "uset" }, { "compat_size_t", "sigsetsize" } } },
{ 177, "rt_sigtimedwait", 4, { { "const sigset_t *", "uthese" }, { "siginfo_t *", "uinfo" }, { "const struct __kernel_timespec *", "uts" }, { "size_t", "sigsetsize" } } },
{ 178, "rt_sigqueueinfo", 3, { { "compat_pid_t", "pid" }, { "int", "sig" }, { "struct compat_siginfo *", "uinfo" } } },
{ 179, "rt_sigsuspend", 2, { { "compat_sigset_t *", "unewset" }, { "compat_size_t", "sigsetsize" } } },
{ 180, "pread64", 4, { { "unsigned int", "fd" }, { "char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 181, "pwrite64", 4, { { "unsigned int", "fd" }, { "const char *", "buf" }, { "size_t", "count" }, { "loff_t", "pos" } } },
{ 182, "chown", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 183, "getcwd", 2, { { "char *", "buf" }, { "unsigned long", "size" } } },
{ 184, "capget", 2, { { "cap_user_header_t", "header" }, { "cap_user_data_t", "dataptr" } } },
{ 185, "capset", 2, { { "cap_user_header_t", "header" }, { "const cap_user_data_t", "data" } } },
{ 186, "sigaltstack", 2, { { "const compat_stack_t *", "uss_ptr" }, { "compat_stack_t *", "uoss_ptr" } } },
{ 187, "sendfile", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "compat_off_t *", "offset" }, { "compat_size_t", "count" } } },
{ 190, "vfork", 0, {} },
{ 191, "ugetrlimit", 2, { { "unsigned int", "resource" }, { "struct compat_rlimit *", "rlim" } } },
{ 192, "mmap2", 6, { { "unsigned long", "addr" }, { "unsigned long", "len" }, { "unsigned long", "prot" }, { "unsigned long", "flags" }, { "unsigned long", "fd" }, { "unsigned long", "pgoff" } } },
{ 193, "truncate64", 3, { { "const char *", "filename" }, { "unsigned long", "offset_low" }, { "unsigned long", "offset_high" } } },
{ 194, "ftruncate64", 3, { { "unsigned int", "fd" }, { "unsigned long", "offset_low" }, { "unsigned long", "offset_high" } } },
{ 198, "lchown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 199, "getuid32", 0, {} },
{ 200, "getgid32", 0, {} },
{ 201, "geteuid32", 0, {} },
{ 202, "getegid32", 0, {} },
{ 203, "setreuid32", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 204, "setregid32", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 205, "getgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 206, "setgroups32", 2, { { "int", "gidsetsize" }, { "gid_t *", "grouplist" } } },
{ 207, "fchown32", 3, { { "unsigned int", "fd" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 208, "setresuid32", 3, { { "uid_t", "ruid" }, { "uid_t", "euid" }, { "uid_t", "suid" } } },
{ 209, "getresuid32", 3, { { "uid_t *", "ruid" }, { "uid_t *", "euid" }, { "uid_t *", "suid" } } },
{ 210, "setresgid32", 3, { { "gid_t", "rgid" }, { "gid_t", "egid" }, { "gid_t", "sgid" } } },
{ 211, "getresgid32", 3, { { "gid_t *", "rgid" }, { "gid_t *", "egid" }, { "gid_t *", "sgid" } } },
{ 212, "chown32", 3, { { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" } } },
{ 213, "setuid32", 1, { { "uid_t", "uid" } } },
{ 214, "setgid32", 1, { { "gid_t", "gid" } } },
{ 215, "setfsuid32", 1, { { "uid_t", "uid" } } },
{ 216, "setfsgid32", 1, { { "gid_t", "gid" } } },
{ 217, "pivot_root", 2, { { "const char *", "new_root" }, { "const char *", "put_old" } } },
{ 218, "mincore", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned char *", "vec" } } },
{ 219, "madvise", 3, { { "unsigned long", "start" }, { "size_t", "len_in" }, { "int", "behavior" } } },
{ 220, "getdents64", 3, { { "unsigned int", "fd" }, { "struct linux_dirent64 *", "dirent" }, { "unsigned int", "count" } } },
{ 221, "fcntl64", 3, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "compat_ulong_t", "arg" } } },
{ 224, "gettid", 0, {} },
{ 225, "readahead", 3, { { "int", "fd" }, { "loff_t", "offset" }, { "size_t", "count" } } },
{ 226, "setxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 227, "lsetxattr", 5, { { "const char *", "pathname" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 228, "fsetxattr", 5, { { "int", "fd" }, { "const char *", "name" }, { "const void *", "value" }, { "size_t", "size" }, { "int", "flags" } } },
{ 229, "getxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 230, "lgetxattr", 4, { { "const char *", "pathname" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 231, "fgetxattr", 4, { { "int", "fd" }, { "const char *", "name" }, { "void *", "value" }, { "size_t", "size" } } },
{ 232, "listxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 233, "llistxattr", 3, { { "const char *", "pathname" }, { "char *", "list" }, { "size_t", "size" } } },
{ 234, "flistxattr", 3, { { "int", "fd" }, { "char *", "list" }, { "size_t", "size" } } },
{ 235, "removexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 236, "lremovexattr", 2, { { "const char *", "pathname" }, { "const char *", "name" } } },
{ 237, "fremovexattr", 2, { { "int", "fd" }, { "const char *", "name" } } },
{ 238, "tkill", 2, { { "pid_t", "pid" }, { "int", "sig" } } },
{ 239, "sendfile64", 4, { { "int", "out_fd" }, { "int", "in_fd" }, { "compat_loff_t *", "offset" }, { "compat_size_t", "count" } } },
{ 240, "futex", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 241, "sched_setaffinity", 3, { { "compat_pid_t", "pid" }, { "unsigned int", "len" }, { "compat_ulong_t *", "user_mask_ptr" } } },
{ 242, "sched_getaffinity", 3, { { "compat_pid_t", "pid" }, { "unsigned int", "len" }, { "compat_ulong_t *", "user_mask_ptr" } } },
{ 243, "set_thread_area", 1, { { "struct user_desc *", "user_desc" } } },
{ 244, "get_thread_area", 1, { { "struct user_desc *", "user_desc" } } },
{ 245, "io_setup", 2, { { "unsigned", "nr_events" }, { "u32 *", "ctx32p" } } },
{ 246, "io_destroy", 1, { { "aio_context_t", "ctx" } } },
{ 247, "io_getevents", 5, { { "aio_context_t", "ctx_id" }, { "long", "min_nr" }, { "long", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" } } },
{ 248, "io_submit", 3, { { "compat_aio_context_t", "ctx_id" }, { "int", "nr" }, { "compat_uptr_t *", "iocbpp" } } },
{ 249, "io_cancel", 3, { { "aio_context_t", "ctx_id" }, { "struct iocb *", "iocb" }, { "struct io_event *", "result" } } },
{ 250, "fadvise64", 5, { { "int", "fd" }, { "unsigned int", "offset_lo" }, { "unsigned int", "offset_hi" }, { "size_t", "len" }, { "int", "advice" } } },
{ 252, "exit_group", 1, { { "int", "error_code" } } },
{ 254, "epoll_create", 1, { { "int", "size" } } },
{ 255, "epoll_ctl", 4, { { "int", "epfd" }, { "int", "op" }, { "int", "fd" }, { "struct epoll_event *", "event" } } },
{ 256, "epoll_wait", 4, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" } } },
{ 257, "remap_file_pages", 5, { { "unsigned long", "start" }, { "unsigned long", "size" }, { "unsigned long", "prot" }, { "unsigned long", "pgoff" }, { "unsigned long", "flags" } } },
{ 258, "set_tid_address", 1, { { "int *", "tidptr" } } },
{ 259, "timer_create", 3, { { "clockid_t", "which_clock" }, { "struct compat_sigevent *", "timer_event_spec" }, { "timer_t *", "created_timer_id" } } },
{ 260, "timer_settime", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 261, "timer_gettime", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 262, "timer_getoverrun", 1, { { "timer_t", "timer_id" } } },
{ 263, "timer_delete", 1, { { "timer_t", "timer_id" } } },
{ 264, "clock_settime", 2, { { "const clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 265, "clock_gettime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 266, "clock_getres", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 267, "clock_nanosleep", 4, { { "const clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 268, "statfs64", 3, { { "const char *", "pathname" }, { "compat_size_t", "sz" }, { "struct compat_statfs64 *", "buf" } } },
{ 269, "fstatfs64", 3, { { "unsigned int", "fd" }, { "compat_size_t", "sz" }, { "struct compat_statfs64 *", "buf" } } },
{ 270, "tgkill", 3, { { "pid_t", "tgid" }, { "pid_t", "pid" }, { "int", "sig" } } },
{ 271, "utimes", 2, { { "char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 272, "fadvise64_64", 6, { { "int", "fd" }, { "__u32", "offset_low" }, { "__u32", "offset_high" }, { "__u32", "len_low" }, { "__u32", "len_high" }, { "int", "advice" } } },
{ 274, "mbind", 6, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned int", "flags" } } },
{ 275, "get_mempolicy", 5, { { "int *", "policy" }, { "unsigned long *", "nmask" }, { "unsigned long", "maxnode" }, { "unsigned long", "addr" }, { "unsigned long", "flags" } } },
{ 276, "set_mempolicy", 3, { { "int", "mode" }, { "const unsigned long *", "nmask" }, { "unsigned long", "maxnode" } } },
{ 277, "mq_open", 4, { { "const char *", "u_name" }, { "int", "oflag" }, { "compat_mode_t", "mode" }, { "struct compat_mq_attr *", "u_attr" } } },
{ 278, "mq_unlink", 1, { { "const char *", "u_name" } } },
{ 279, "mq_timedsend", 5, { { "mqd_t", "mqdes" }, { "const char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 280, "mq_timedreceive", 5, { { "mqd_t", "mqdes" }, { "char *", "u_msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "u_msg_prio" }, { "const struct __kernel_timespec *", "u_abs_timeout" } } },
{ 281, "mq_notify", 2, { { "mqd_t", "mqdes" }, { "const struct compat_sigevent *", "u_notification" } } },
{ 282, "mq_getsetattr", 3, { { "mqd_t", "mqdes" }, { "const struct compat_mq_attr *", "u_mqstat" }, { "struct compat_mq_attr *", "u_omqstat" } } },
{ 283, "kexec_load", 4, { { "compat_ulong_t", "entry" }, { "compat_ulong_t", "nr_segments" }, { "struct compat_kexec_segment *", "segments" }, { "compat_ulong_t", "flags" } } },
{ 284, "waitid", 5, { { "int", "which" }, { "compat_pid_t", "pid" }, { "struct compat_siginfo *", "infop" }, { "int", "options" }, { "struct compat_rusage *", "uru" } } },
{ 286, "add_key", 5, { { "const char *", "_type" }, { "const char *", "_description" }, { "const void *", "_payload" }, { "size_t", "plen" }, { "key_serial_t", "ringid" } } },
{ 287, "request_key", 4, { { "const char *", "_type" }, { "const char *", "_description" }, { "const char *", "_callout_info" }, { "key_serial_t", "destringid" } } },
{ 288, "keyctl", 5, { { "u32", "option" }, { "u32", "arg2" }, { "u32", "arg3" }, { "u32", "arg4" }, { "u32", "arg5" } } },
{ 289, "ioprio_set", 3, { { "int", "which" }, { "int", "who" }, { "int", "ioprio" } } },
{ 290, "ioprio_get", 2, { { "int", "which" }, { "int", "who" } } },
{ 291, "inotify_init", 0, {} },
{ 292, "inotify_add_watch", 3, { { "int", "fd" }, { "const char *", "pathname" }, { "u32", "mask" } } },
{ 293, "inotify_rm_watch", 2, { { "int", "fd" }, { "__s32", "wd" } } },
{ 294, "migrate_pages", 4, { { "pid_t", "pid" }, { "unsigned long", "maxnode" }, { "const unsigned long *", "old_nodes" }, { "const unsigned long *", "new_nodes" } } },
{ 295, "openat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "flags" }, { "umode_t", "mode" } } },
{ 296, "mkdirat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "umode_t", "mode" } } },
{ 297, "mknodat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "dev" } } },
{ 298, "fchownat", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "uid_t", "user" }, { "gid_t", "group" }, { "int", "flag" } } },
{ 299, "futimesat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_old_timeval *", "utimes" } } },
{ 301, "unlinkat", 3, { { "int", "dfd" }, { "const char *", "pathname" }, { "int", "flag" } } },
{ 302, "renameat", 4, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 303, "linkat", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "int", "flags" } } },
{ 304, "symlinkat", 3, { { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" } } },
{ 305, "readlinkat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "char *", "buf" }, { "int", "bufsiz" } } },
{ 306, "fchmodat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" } } },
{ 307, "faccessat", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" } } },
{ 308, "pselect6", 6, { { "int", "n" }, { "fd_set *", "inp" }, { "fd_set *", "outp" }, { "fd_set *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 309, "ppoll", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const sigset_t *", "sigmask" }, { "size_t", "sigsetsize" } } },
{ 310, "unshare", 1, { { "unsigned long", "unshare_flags" } } },
{ 311, "set_robust_list", 2, { { "struct compat_robust_list_head *", "head" }, { "compat_size_t", "len" } } },
{ 312, "get_robust_list", 3, { { "int", "pid" }, { "compat_uptr_t *", "head_ptr" }, { "compat_size_t *", "len_ptr" } } },
{ 313, "splice", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 314, "sync_file_range", 4, { { "int", "fd" }, { "loff_t", "offset" }, { "loff_t", "nbytes" }, { "unsigned int", "flags" } } },
{ 315, "tee", 4, { { "int", "fdin" }, { "int", "fdout" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 316, "vmsplice", 4, { { "int", "fd" }, { "const struct iovec *", "uiov" }, { "unsigned long", "nr_segs" }, { "unsigned int", "flags" } } },
{ 317, "move_pages", 6, { { "pid_t", "pid" }, { "unsigned long", "nr_pages" }, { "const void * *", "pages" }, { "const int *", "nodes" }, { "int *", "status" }, { "int", "flags" } } },
{ 318, "getcpu", 3, { { "unsigned *", "cpup" }, { "unsigned *", "nodep" }, { "struct getcpu_cache *", "unused" } } },
{ 319, "epoll_pwait", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "int", "timeout" }, { "const compat_sigset_t *", "sigmask" }, { "compat_size_t", "sigsetsize" } } },
{ 320, "utimensat", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 321, "signalfd", 3, { { "int", "ufd" }, { "const compat_sigset_t *", "user_mask" }, { "compat_size_t", "sigsetsize" } } },
{ 322, "timerfd_create", 2, { { "int", "clockid" }, { "int", "flags" } } },
{ 323, "eventfd", 1, { { "unsigned int", "count" } } },
{ 324, "fallocate", 4, { { "int", "fd" }, { "int", "mode" }, { "loff_t", "offset" }, { "loff_t", "len" } } },
{ 325, "timerfd_settime", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 326, "timerfd_gettime", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 327, "signalfd4", 4, { { "int", "ufd" }, { "const compat_sigset_t *", "user_mask" }, { "compat_size_t", "sigsetsize" }, { "int", "flags" } } },
{ 328, "eventfd2", 2, { { "unsigned int", "count" }, { "int", "flags" } } },
{ 329, "epoll_create1", 1, { { "int", "flags" } } },
{ 330, "dup3", 3, { { "unsigned int", "oldfd" }, { "unsigned int", "newfd" }, { "int", "flags" } } },
{ 331, "pipe2", 2, { { "int *", "fildes" }, { "int", "flags" } } },
{ 332, "inotify_init1", 1, { { "int", "flags" } } },
{ 333, "preadv", 5, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" } } },
{ 334, "pwritev", 5, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" } } },
{ 335, "rt_tgsigqueueinfo", 4, { { "compat_pid_t", "tgid" }, { "compat_pid_t", "pid" }, { "int", "sig" }, { "struct compat_siginfo *", "uinfo" } } },
{ 336, "perf_event_open", 5, { { "struct perf_event_attr *", "attr_uptr" }, { "pid_t", "pid" }, { "int", "cpu" }, { "int", "group_fd" }, { "unsigned long", "flags" } } },
{ 337, "recvmmsg", 5, { { "int", "fd" }, { "struct mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 338, "fanotify_init", 2, { { "unsigned int", "flags" }, { "unsigned int", "event_f_flags" } } },
{ 339, "fanotify_mark", 5, { { "int", "fanotify_fd" }, { "unsigned int", "flags" }, { "__u64", "mask" }, { "int", "dfd" }, { "const char *", "pathname" } } },
{ 340, "prlimit64", 4, { { "pid_t", "pid" }, { "unsigned int", "resource" }, { "const struct rlimit64 *", "new_rlim" }, { "struct rlimit64 *", "old_rlim" } } },
{ 341, "name_to_handle_at", 5, { { "int", "dfd" }, { "const char *", "name" }, { "struct file_handle *", "handle" }, { "void *", "mnt_id" }, { "int", "flag" } } },
{ 342, "open_by_handle_at", 3, { { "int", "mountdirfd" }, { "struct file_handle *", "handle" }, { "int", "flags" } } },
{ 343, "clock_adjtime", 2, { { "const clockid_t", "which_clock" }, { "struct __kernel_timex *", "utx" } } },
{ 344, "syncfs", 1, { { "int", "fd" } } },
{ 345, "sendmmsg", 4, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" } } },
{ 346, "setns", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 347, "process_vm_readv", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 348, "process_vm_writev", 6, { { "pid_t", "pid" }, { "const struct iovec *", "lvec" }, { "unsigned long", "liovcnt" }, { "const struct iovec *", "rvec" }, { "unsigned long", "riovcnt" }, { "unsigned long", "flags" } } },
{ 349, "kcmp", 5, { { "pid_t", "pid1" }, { "pid_t", "pid2" }, { "int", "type" }, { "unsigned long", "idx1" }, { "unsigned long", "idx2" } } },
{ 350, "finit_module", 3, { { "int", "fd" }, { "const char *", "uargs" }, { "int", "flags" } } },
{ 351, "sched_setattr", 3, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "flags" } } },
{ 352, "sched_getattr", 4, { { "pid_t", "pid" }, { "struct sched_attr *", "uattr" }, { "unsigned int", "usize" }, { "unsigned int", "flags" } } },
{ 353, "renameat2", 5, { { "int", "olddfd" }, { "const char *", "oldname" }, { "int", "newdfd" }, { "const char *", "newname" }, { "unsigned int", "flags" } } },
{ 354, "seccomp", 3, { { "unsigned int", "op" }, { "unsigned int", "flags" }, { "void *", "uargs" } } },
{ 355, "getrandom", 3, { { "char *", "ubuf" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 356, "memfd_create", 2, { { "const char *", "uname" }, { "unsigned int", "flags" } } },
{ 357, "bpf", 3, { { "int", "cmd" }, { "union bpf_attr *", "uattr" }, { "unsigned int", "size" } } },
{ 358, "execveat", 5, { { "int", "fd" }, { "const char *", "filename" }, { "const compat_uptr_t *", "argv" }, { "const compat_uptr_t *", "envp" }, { "int", "flags" } } },
{ 359, "socket", 3, { { "int", "family" }, { "int", "type" }, { "int", "protocol" } } },
{ 360, "socketpair", 4, { { "int", "family" }, { "int", "type" }, { "int", "protocol" }, { "int *", "usockvec" } } },
{ 361, "bind", 3, { { "int", "fd" }, { "struct sockaddr *", "umyaddr" }, { "int", "addrlen" } } },
{ 362, "connect", 3, { { "int", "fd" }, { "struct sockaddr *", "uservaddr" }, { "int", "addrlen" } } },
{ 363, "listen", 2, { { "int", "fd" }, { "int", "backlog" } } },
{ 364, "accept4", 4, { { "int", "fd" }, { "struct sockaddr *", "upeer_sockaddr" }, { "int *", "upeer_addrlen" }, { "int", "flags" } } },
{ 365, "getsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int *", "optlen" } } },
{ 366, "setsockopt", 5, { { "int", "fd" }, { "int", "level" }, { "int", "optname" }, { "char *", "optval" }, { "int", "optlen" } } },
{ 367, "getsockname", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 368, "getpeername", 3, { { "int", "fd" }, { "struct sockaddr *", "usockaddr" }, { "int *", "usockaddr_len" } } },
{ 369, "sendto", 6, { { "int", "fd" }, { "void *", "buff" }, { "size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int", "addr_len" } } },
{ 370, "sendmsg", 3, { { "int", "fd" }, { "struct compat_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 371, "recvfrom", 6, { { "int", "fd" }, { "void *", "buf" }, { "compat_size_t", "len" }, { "unsigned int", "flags" }, { "struct sockaddr *", "addr" }, { "int *", "addrlen" } } },
{ 372, "recvmsg", 3, { { "int", "fd" }, { "struct compat_msghdr *", "msg" }, { "unsigned int", "flags" } } },
{ 373, "shutdown", 2, { { "int", "fd" }, { "int", "how" } } },
{ 374, "userfaultfd", 1, { { "int", "flags" } } },
{ 375, "membarrier", 3, { { "int", "cmd" }, { "unsigned int", "flags" }, { "int", "cpu_id" } } },
{ 376, "mlock2", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "int", "flags" } } },
{ 377, "copy_file_range", 6, { { "int", "fd_in" }, { "loff_t *", "off_in" }, { "int", "fd_out" }, { "loff_t *", "off_out" }, { "size_t", "len" }, { "unsigned int", "flags" } } },
{ 378, "preadv2", 6, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" }, { "rwf_t", "flags" } } },
{ 379, "pwritev2", 6, { { "compat_ulong_t", "fd" }, { "const struct iovec *", "vec" }, { "compat_ulong_t", "vlen" }, { "u32", "pos_low" }, { "u32", "pos_high" }, { "rwf_t", "flags" } } },
{ 380, "pkey_mprotect", 4, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "prot" }, { "int", "pkey" } } },
{ 381, "pkey_alloc", 2, { { "unsigned long", "flags" }, { "unsigned long", "init_val" } } },
{ 382, "pkey_free", 1, { { "int", "pkey" } } },
{ 383, "statx", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "unsigned int", "mask" }, { "struct statx *", "buffer" } } },
{ 384, "arch_prctl", 2, { { "int", "option" }, { "unsigned long", "arg2" } } },
{ 385, "io_pgetevents", 6, { { "compat_aio_context_t", "ctx_id" }, { "compat_long_t", "min_nr" }, { "compat_long_t", "nr" }, { "struct io_event *", "events" }, { "struct old_timespec32 *", "timeout" }, { "const struct __compat_aio_sigset *", "usig" } } },
{ 386, "rseq", 4, { { "struct rseq *", "rseq" }, { "u32", "rseq_len" }, { "int", "flags" }, { "u32", "sig" } } },
{ 393, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 394, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "int", "arg" } } },
{ 395, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 396, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "void *", "uptr" } } },
{ 397, "shmat", 3, { { "int", "shmid" }, { "compat_uptr_t", "shmaddr" }, { "int", "shmflg" } } },
{ 398, "shmdt", 1, { { "char *", "shmaddr" } } },
{ 399, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 400, "msgsnd", 4, { { "int", "msqid" }, { "compat_uptr_t", "msgp" }, { "compat_ssize_t", "msgsz" }, { "int", "msgflg" } } },
{ 401, "msgrcv", 5, { { "int", "msqid" }, { "compat_uptr_t", "msgp" }, { "compat_ssize_t", "msgsz" }, { "compat_long_t", "msgtyp" }, { "int", "msgflg" } } },
{ 402, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "void *", "uptr" } } },
{ 403, "clock_gettime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 404, "clock_settime64", 2, { { "clockid_t", "which_clock" }, { "const struct __kernel_timespec *", "tp" } } },
{ 405, "clock_adjtime64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timex *", "tx" } } },
{ 406, "clock_getres_time64", 2, { { "clockid_t", "which_clock" }, { "struct __kernel_timespec *", "tp" } } },
{ 407, "clock_nanosleep_time64", 4, { { "clockid_t", "which_clock" }, { "int", "flags" }, { "const struct __kernel_timespec *", "rqtp" }, { "struct __kernel_timespec *", "rmtp" } } },
{ 408, "timer_gettime64", 2, { { "timer_t", "timer_id" }, { "struct __kernel_itimerspec *", "setting" } } },
{ 409, "timer_settime64", 4, { { "timer_t", "timer_id" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "new_setting" }, { "struct __kernel_itimerspec *", "old_setting" } } },
{ 410, "timerfd_gettime64", 2, { { "int", "ufd" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 411, "timerfd_settime64", 4, { { "int", "ufd" }, { "int", "flags" }, { "const struct __kernel_itimerspec *", "utmr" }, { "struct __kernel_itimerspec *", "otmr" } } },
{ 412, "utimensat_time64", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct __kernel_timespec *", "utimes" }, { "int", "flags" } } },
{ 413, "pselect6_time64", 6, { { "int", "n" }, { "compat_ulong_t *", "inp" }, { "compat_ulong_t *", "outp" }, { "compat_ulong_t *", "exp" }, { "struct __kernel_timespec *", "tsp" }, { "void *", "sig" } } },
{ 414, "ppoll_time64", 5, { { "struct pollfd *", "ufds" }, { "unsigned int", "nfds" }, { "struct __kernel_timespec *", "tsp" }, { "const compat_sigset_t *", "sigmask" }, { "compat_size_t", "sigsetsize" } } },
{ 416, "io_pgetevents_time64", 6, { { "compat_aio_context_t", "ctx_id" }, { "compat_long_t", "min_nr" }, { "compat_long_t", "nr" }, { "struct io_event *", "events" }, { "struct __kernel_timespec *", "timeout" }, { "const struct __compat_aio_sigset *", "usig" } } },
{ 417, "recvmmsg_time64", 5, { { "int", "fd" }, { "struct compat_mmsghdr *", "mmsg" }, { "unsigned int", "vlen" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" } } },
{ 418, "mq_timedsend_time64", 5, { { "mqd_t", "mqdes" }, { "const char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 419, "mq_timedreceive_time64", 5, { { "mqd_t", "mqdes" }, { "char *", "msg_ptr" }, { "size_t", "msg_len" }, { "unsigned int *", "msg_prio" }, { "const struct __kernel_timespec *", "abs_timeout" } } },
{ 420, "semtimedop_time64", 4, { { "int", "semid" }, { "struct sembuf *", "sops" }, { "unsigned", "nsops" }, { "const struct __kernel_timespec *", "timeout" } } },
{ 421, "rt_sigtimedwait_time64", 4, { { "compat_sigset_t *", "uthese" }, { "struct compat_siginfo *", "uinfo" }, { "struct __kernel_timespec *", "uts" }, { "compat_size_t", "sigsetsize" } } },
{ 422, "futex_time64", 6, { { "u32 *", "uaddr" }, { "int", "op" }, { "u32", "val" }, { "const struct __kernel_timespec *", "utime" }, { "u32 *", "uaddr2" }, { "u32", "val3" } } },
{ 423, "sched_rr_get_interval_time64", 2, { { "pid_t", "pid" }, { "struct __kernel_timespec *", "interval" } } },
{ 424, "pidfd_send_signal", 4, { { "int", "pidfd" }, { "int", "sig" }, { "siginfo_t *", "info" }, { "unsigned int", "flags" } } },
{ 425, "io_uring_setup", 2, { { "u32", "entries" }, { "struct io_uring_params *", "params" } } },
{ 426, "io_uring_enter", 6, { { "unsigned int", "fd" }, { "u32", "to_submit" }, { "u32", "min_complete" }, { "u32", "flags" }, { "const void *", "argp" }, { "size_t", "argsz" } } },
{ 427, "io_uring_register", 4, { { "unsigned int", "fd" }, { "unsigned int", "opcode" }, { "void *", "arg" }, { "unsigned int", "nr_args" } } },
{ 428, "open_tree", 3, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" } } },
{ 429, "move_mount", 5, { { "int", "from_dfd" }, { "const char *", "from_pathname" }, { "int", "to_dfd" }, { "const char *", "to_pathname" }, { "unsigned int", "flags" } } },
{ 430, "fsopen", 2, { { "const char *", "_fs_name" }, { "unsigned int", "flags" } } },
{ 431, "fsconfig", 5, { { "int", "fd" }, { "unsigned int", "cmd" }, { "const char *", "_key" }, { "const void *", "_value" }, { "int", "aux" } } },
{ 432, "fsmount", 3, { { "int", "fs_fd" }, { "unsigned int", "flags" }, { "unsigned int", "attr_flags" } } },
{ 433, "fspick", 3, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" } } },
{ 434, "pidfd_open", 2, { { "pid_t", "pid" }, { "unsigned int", "flags" } } },
{ 435, "clone3", 2, { { "struct clone_args *", "uargs" }, { "size_t", "size" } } },
{ 436, "close_range", 3, { { "unsigned int", "fd" }, { "unsigned int", "max_fd" }, { "unsigned int", "flags" } } },
{ 437, "openat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "struct open_how *", "how" }, { "size_t", "usize" } } },
{ 438, "pidfd_getfd", 3, { { "int", "pidfd" }, { "int", "fd" }, { "unsigned int", "flags" } } },
{ 439, "faccessat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "int", "mode" }, { "int", "flags" } } },
{ 440, "process_madvise", 5, { { "int", "pidfd" }, { "const struct iovec *", "vec" }, { "size_t", "vlen" }, { "int", "behavior" }, { "unsigned int", "flags" } } },
{ 441, "epoll_pwait2", 6, { { "int", "epfd" }, { "struct epoll_event *", "events" }, { "int", "maxevents" }, { "const struct __kernel_timespec *", "timeout" }, { "const compat_sigset_t *", "sigmask" }, { "compat_size_t", "sigsetsize" } } },
{ 442, "mount_setattr", 5, { { "int", "dfd" }, { "const char *", "path" }, { "unsigned int", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 443, "quotactl_fd", 4, { { "unsigned int", "fd" }, { "unsigned int", "cmd" }, { "qid_t", "id" }, { "void *", "addr" } } },
{ 444, "landlock_create_ruleset", 3, { { "const struct landlock_ruleset_attr *const", "attr" }, { "const size_t", "size" }, { "const __u32", "flags" } } },
{ 445, "landlock_add_rule", 4, { { "const int", "ruleset_fd" }, { "const enum landlock_rule_type", "rule_type" }, { "const void *const", "rule_attr" }, { "const __u32", "flags" } } },
{ 446, "landlock_restrict_self", 2, { { "const int", "ruleset_fd" }, { "const __u32", "flags" } } },
{ 447, "memfd_secret", 1, { { "unsigned int", "flags" } } },
{ 448, "process_mrelease", 2, { { "int", "pidfd" }, { "unsigned int", "flags" } } },
{ 449, "futex_waitv", 5, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "nr_futexes" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 450, "set_mempolicy_home_node", 4, { { "unsigned long", "start" }, { "unsigned long", "len" }, { "unsigned long", "home_node" }, { "unsigned long", "flags" } } },
{ 451, "cachestat", 4, { { "unsigned int", "fd" }, { "struct cachestat_range *", "cstat_range" }, { "struct cachestat *", "cstat" }, { "unsigned int", "flags" } } },
{ 452, "fchmodat2", 4, { { "int", "dfd" }, { "const char *", "filename" }, { "umode_t", "mode" }, { "unsigned int", "flags" } } },
{ 453, "map_shadow_stack", 3, { { "unsigned long", "addr" }, { "unsigned long", "size" }, { "unsigned int", "flags" } } },
{ 454, "futex_wake", 4, { { "void *", "uaddr" }, { "unsigned long", "mask" }, { "int", "nr" }, { "unsigned int", "flags" } } },
{ 455, "futex_wait", 6, { { "void *", "uaddr" }, { "unsigned long", "val" }, { "unsigned long", "mask" }, { "unsigned int", "flags" }, { "struct __kernel_timespec *", "timeout" }, { "clockid_t", "clockid" } } },
{ 456, "futex_requeue", 4, { { "struct futex_waitv *", "waiters" }, { "unsigned int", "flags" }, { "int", "nr_wake" }, { "int", "nr_requeue" } } },
{ 457, "statmount", 4, { { "const struct mnt_id_req *", "req" }, { "struct statmount *", "buf" }, { "size_t", "bufsize" }, { "unsigned int", "flags" } } },
{ 458, "listmount", 4, { { "const struct mnt_id_req *", "req" }, { "u64 *", "mnt_ids" }, { "size_t", "nr_mnt_ids" }, { "unsigned int", "flags" } } },
{ 459, "lsm_get_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 460, "lsm_set_self_attr", 4, { { "unsigned int", "attr" }, { "struct lsm_ctx *", "ctx" }, { "u32", "size" }, { "u32", "flags" } } },
{ 461, "lsm_list_modules", 3, { { "u64 *", "ids" }, { "u32 *", "size" }, { "u32", "flags" } } },
{ 462, "mseal", 3, { { "unsigned long", "start" }, { "size_t", "len" }, { "unsigned long", "flags" } } },
{ 463, "setxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "const struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 464, "getxattrat", 6, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" }, { "struct xattr_args *", "uargs" }, { "size_t", "usize" } } },
{ 465, "listxattrat", 5, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "char *", "list" }, { "size_t", "size" } } },
{ 466, "removexattrat", 4, { { "int", "dfd" }, { "const char *", "pathname" }, { "unsigned int", "at_flags" }, { "const char *", "name" } } },
{ 467, "open_tree_attr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "unsigned", "flags" }, { "struct mount_attr *", "uattr" }, { "size_t", "usize" } } },
{ 468, "file_getattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 469, "file_setattr", 5, { { "int", "dfd" }, { "const char *", "filename" }, { "struct file_attr *", "ufattr" }, { "size_t", "usize" }, { "unsigned int", "at_flags" } } },
{ 470, "listns", 4, { { "const struct ns_id_req *", "req" }, { "u64 *", "ns_ids" }, { "size_t", "nr_ns_ids" }, { "unsigned int", "flags" } } },
};
FridaLinuxSyscallSignature *
frida_get_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_syscall_signatures;
}
FridaLinuxSyscallSignature *
frida_get_compat32_syscall_signatures (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_compat32_syscall_signatures);
return (FridaLinuxSyscallSignature *) frida_compat32_syscall_signatures;
}
+815
View File
@@ -0,0 +1,815 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public enum LinuxSyscall {
READ = 0,
WRITE = 1,
OPEN = 2,
CLOSE = 3,
STAT = 4,
FSTAT = 5,
LSTAT = 6,
POLL = 7,
LSEEK = 8,
MMAP = 9,
MPROTECT = 10,
MUNMAP = 11,
BRK = 12,
RT_SIGACTION = 13,
RT_SIGPROCMASK = 14,
RT_SIGRETURN = 15,
IOCTL = 16,
PREAD64 = 17,
PWRITE64 = 18,
READV = 19,
WRITEV = 20,
ACCESS = 21,
PIPE = 22,
SELECT = 23,
SCHED_YIELD = 24,
MREMAP = 25,
MSYNC = 26,
MINCORE = 27,
MADVISE = 28,
SHMGET = 29,
SHMAT = 30,
SHMCTL = 31,
DUP = 32,
DUP2 = 33,
PAUSE = 34,
NANOSLEEP = 35,
GETITIMER = 36,
ALARM = 37,
SETITIMER = 38,
GETPID = 39,
SENDFILE = 40,
SOCKET = 41,
CONNECT = 42,
ACCEPT = 43,
SENDTO = 44,
RECVFROM = 45,
SENDMSG = 46,
RECVMSG = 47,
SHUTDOWN = 48,
BIND = 49,
LISTEN = 50,
GETSOCKNAME = 51,
GETPEERNAME = 52,
SOCKETPAIR = 53,
SETSOCKOPT = 54,
GETSOCKOPT = 55,
CLONE = 56,
FORK = 57,
VFORK = 58,
EXECVE = 59,
EXIT = 60,
WAIT4 = 61,
KILL = 62,
UNAME = 63,
SEMGET = 64,
SEMOP = 65,
SEMCTL = 66,
SHMDT = 67,
MSGGET = 68,
MSGSND = 69,
MSGRCV = 70,
MSGCTL = 71,
FCNTL = 72,
FLOCK = 73,
FSYNC = 74,
FDATASYNC = 75,
TRUNCATE = 76,
FTRUNCATE = 77,
GETDENTS = 78,
GETCWD = 79,
CHDIR = 80,
FCHDIR = 81,
RENAME = 82,
MKDIR = 83,
RMDIR = 84,
CREAT = 85,
LINK = 86,
UNLINK = 87,
SYMLINK = 88,
READLINK = 89,
CHMOD = 90,
FCHMOD = 91,
CHOWN = 92,
FCHOWN = 93,
LCHOWN = 94,
UMASK = 95,
GETTIMEOFDAY = 96,
GETRLIMIT = 97,
GETRUSAGE = 98,
SYSINFO = 99,
TIMES = 100,
PTRACE = 101,
GETUID = 102,
SYSLOG = 103,
GETGID = 104,
SETUID = 105,
SETGID = 106,
GETEUID = 107,
GETEGID = 108,
SETPGID = 109,
GETPPID = 110,
GETPGRP = 111,
SETSID = 112,
SETREUID = 113,
SETREGID = 114,
GETGROUPS = 115,
SETGROUPS = 116,
SETRESUID = 117,
GETRESUID = 118,
SETRESGID = 119,
GETRESGID = 120,
GETPGID = 121,
SETFSUID = 122,
SETFSGID = 123,
GETSID = 124,
CAPGET = 125,
CAPSET = 126,
RT_SIGPENDING = 127,
RT_SIGTIMEDWAIT = 128,
RT_SIGQUEUEINFO = 129,
RT_SIGSUSPEND = 130,
SIGALTSTACK = 131,
UTIME = 132,
MKNOD = 133,
PERSONALITY = 135,
USTAT = 136,
STATFS = 137,
FSTATFS = 138,
SYSFS = 139,
GETPRIORITY = 140,
SETPRIORITY = 141,
SCHED_SETPARAM = 142,
SCHED_GETPARAM = 143,
SCHED_SETSCHEDULER = 144,
SCHED_GETSCHEDULER = 145,
SCHED_GET_PRIORITY_MAX = 146,
SCHED_GET_PRIORITY_MIN = 147,
SCHED_RR_GET_INTERVAL = 148,
MLOCK = 149,
MUNLOCK = 150,
MLOCKALL = 151,
MUNLOCKALL = 152,
VHANGUP = 153,
MODIFY_LDT = 154,
PIVOT_ROOT = 155,
_SYSCTL = 156,
PRCTL = 157,
ARCH_PRCTL = 158,
ADJTIMEX = 159,
SETRLIMIT = 160,
CHROOT = 161,
SYNC = 162,
ACCT = 163,
SETTIMEOFDAY = 164,
MOUNT = 165,
UMOUNT2 = 166,
SWAPON = 167,
SWAPOFF = 168,
REBOOT = 169,
SETHOSTNAME = 170,
SETDOMAINNAME = 171,
IOPL = 172,
IOPERM = 173,
INIT_MODULE = 175,
DELETE_MODULE = 176,
QUOTACTL = 179,
GETTID = 186,
READAHEAD = 187,
SETXATTR = 188,
LSETXATTR = 189,
FSETXATTR = 190,
GETXATTR = 191,
LGETXATTR = 192,
FGETXATTR = 193,
LISTXATTR = 194,
LLISTXATTR = 195,
FLISTXATTR = 196,
REMOVEXATTR = 197,
LREMOVEXATTR = 198,
FREMOVEXATTR = 199,
TKILL = 200,
TIME = 201,
FUTEX = 202,
SCHED_SETAFFINITY = 203,
SCHED_GETAFFINITY = 204,
SET_THREAD_AREA = 205,
IO_SETUP = 206,
IO_DESTROY = 207,
IO_GETEVENTS = 208,
IO_SUBMIT = 209,
IO_CANCEL = 210,
GET_THREAD_AREA = 211,
EPOLL_CREATE = 213,
REMAP_FILE_PAGES = 216,
GETDENTS64 = 217,
SET_TID_ADDRESS = 218,
RESTART_SYSCALL = 219,
SEMTIMEDOP = 220,
FADVISE64 = 221,
TIMER_CREATE = 222,
TIMER_SETTIME = 223,
TIMER_GETTIME = 224,
TIMER_GETOVERRUN = 225,
TIMER_DELETE = 226,
CLOCK_SETTIME = 227,
CLOCK_GETTIME = 228,
CLOCK_GETRES = 229,
CLOCK_NANOSLEEP = 230,
EXIT_GROUP = 231,
EPOLL_WAIT = 232,
EPOLL_CTL = 233,
TGKILL = 234,
UTIMES = 235,
MBIND = 237,
SET_MEMPOLICY = 238,
GET_MEMPOLICY = 239,
MQ_OPEN = 240,
MQ_UNLINK = 241,
MQ_TIMEDSEND = 242,
MQ_TIMEDRECEIVE = 243,
MQ_NOTIFY = 244,
MQ_GETSETATTR = 245,
KEXEC_LOAD = 246,
WAITID = 247,
ADD_KEY = 248,
REQUEST_KEY = 249,
KEYCTL = 250,
IOPRIO_SET = 251,
IOPRIO_GET = 252,
INOTIFY_INIT = 253,
INOTIFY_ADD_WATCH = 254,
INOTIFY_RM_WATCH = 255,
MIGRATE_PAGES = 256,
OPENAT = 257,
MKDIRAT = 258,
MKNODAT = 259,
FCHOWNAT = 260,
FUTIMESAT = 261,
NEWFSTATAT = 262,
UNLINKAT = 263,
RENAMEAT = 264,
LINKAT = 265,
SYMLINKAT = 266,
READLINKAT = 267,
FCHMODAT = 268,
FACCESSAT = 269,
PSELECT6 = 270,
PPOLL = 271,
UNSHARE = 272,
SET_ROBUST_LIST = 273,
GET_ROBUST_LIST = 274,
SPLICE = 275,
TEE = 276,
SYNC_FILE_RANGE = 277,
VMSPLICE = 278,
MOVE_PAGES = 279,
UTIMENSAT = 280,
EPOLL_PWAIT = 281,
SIGNALFD = 282,
TIMERFD_CREATE = 283,
EVENTFD = 284,
FALLOCATE = 285,
TIMERFD_SETTIME = 286,
TIMERFD_GETTIME = 287,
ACCEPT4 = 288,
SIGNALFD4 = 289,
EVENTFD2 = 290,
EPOLL_CREATE1 = 291,
DUP3 = 292,
PIPE2 = 293,
INOTIFY_INIT1 = 294,
PREADV = 295,
PWRITEV = 296,
RT_TGSIGQUEUEINFO = 297,
PERF_EVENT_OPEN = 298,
RECVMMSG = 299,
FANOTIFY_INIT = 300,
FANOTIFY_MARK = 301,
PRLIMIT64 = 302,
NAME_TO_HANDLE_AT = 303,
OPEN_BY_HANDLE_AT = 304,
CLOCK_ADJTIME = 305,
SYNCFS = 306,
SENDMMSG = 307,
SETNS = 308,
GETCPU = 309,
PROCESS_VM_READV = 310,
PROCESS_VM_WRITEV = 311,
KCMP = 312,
FINIT_MODULE = 313,
SCHED_SETATTR = 314,
SCHED_GETATTR = 315,
RENAMEAT2 = 316,
SECCOMP = 317,
GETRANDOM = 318,
MEMFD_CREATE = 319,
KEXEC_FILE_LOAD = 320,
BPF = 321,
EXECVEAT = 322,
USERFAULTFD = 323,
MEMBARRIER = 324,
MLOCK2 = 325,
COPY_FILE_RANGE = 326,
PREADV2 = 327,
PWRITEV2 = 328,
PKEY_MPROTECT = 329,
PKEY_ALLOC = 330,
PKEY_FREE = 331,
STATX = 332,
IO_PGETEVENTS = 333,
RSEQ = 334,
URETPROBE = 335,
UPROBE = 336,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
MEMFD_SECRET = 447,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
public enum LinuxCompat32Syscall {
RESTART_SYSCALL = 0,
EXIT = 1,
FORK = 2,
READ = 3,
WRITE = 4,
OPEN = 5,
CLOSE = 6,
WAITPID = 7,
CREAT = 8,
LINK = 9,
UNLINK = 10,
EXECVE = 11,
CHDIR = 12,
TIME = 13,
MKNOD = 14,
CHMOD = 15,
LCHOWN = 16,
OLDSTAT = 18,
LSEEK = 19,
GETPID = 20,
MOUNT = 21,
UMOUNT = 22,
SETUID = 23,
GETUID = 24,
STIME = 25,
PTRACE = 26,
ALARM = 27,
OLDFSTAT = 28,
PAUSE = 29,
UTIME = 30,
ACCESS = 33,
NICE = 34,
SYNC = 36,
KILL = 37,
RENAME = 38,
MKDIR = 39,
RMDIR = 40,
DUP = 41,
PIPE = 42,
TIMES = 43,
BRK = 45,
SETGID = 46,
GETGID = 47,
SIGNAL = 48,
GETEUID = 49,
GETEGID = 50,
ACCT = 51,
UMOUNT2 = 52,
IOCTL = 54,
FCNTL = 55,
SETPGID = 57,
OLDOLDUNAME = 59,
UMASK = 60,
CHROOT = 61,
USTAT = 62,
DUP2 = 63,
GETPPID = 64,
GETPGRP = 65,
SETSID = 66,
SIGACTION = 67,
SGETMASK = 68,
SSETMASK = 69,
SETREUID = 70,
SETREGID = 71,
SIGSUSPEND = 72,
SIGPENDING = 73,
SETHOSTNAME = 74,
SETRLIMIT = 75,
GETRLIMIT = 76,
GETRUSAGE = 77,
GETTIMEOFDAY = 78,
SETTIMEOFDAY = 79,
GETGROUPS = 80,
SETGROUPS = 81,
SELECT = 82,
SYMLINK = 83,
OLDLSTAT = 84,
READLINK = 85,
USELIB = 86,
SWAPON = 87,
REBOOT = 88,
READDIR = 89,
MMAP = 90,
MUNMAP = 91,
TRUNCATE = 92,
FTRUNCATE = 93,
FCHMOD = 94,
FCHOWN = 95,
GETPRIORITY = 96,
SETPRIORITY = 97,
STATFS = 99,
FSTATFS = 100,
IOPERM = 101,
SOCKETCALL = 102,
SYSLOG = 103,
SETITIMER = 104,
GETITIMER = 105,
STAT = 106,
LSTAT = 107,
FSTAT = 108,
OLDUNAME = 109,
IOPL = 110,
VHANGUP = 111,
VM86OLD = 113,
WAIT4 = 114,
SWAPOFF = 115,
SYSINFO = 116,
IPC = 117,
FSYNC = 118,
CLONE = 120,
SETDOMAINNAME = 121,
UNAME = 122,
MODIFY_LDT = 123,
ADJTIMEX = 124,
MPROTECT = 125,
SIGPROCMASK = 126,
INIT_MODULE = 128,
DELETE_MODULE = 129,
QUOTACTL = 131,
GETPGID = 132,
FCHDIR = 133,
BDFLUSH = 134,
SYSFS = 135,
PERSONALITY = 136,
SETFSUID = 138,
SETFSGID = 139,
_LLSEEK = 140,
GETDENTS = 141,
_NEWSELECT = 142,
FLOCK = 143,
MSYNC = 144,
READV = 145,
WRITEV = 146,
GETSID = 147,
FDATASYNC = 148,
_SYSCTL = 149,
MLOCK = 150,
MUNLOCK = 151,
MLOCKALL = 152,
MUNLOCKALL = 153,
SCHED_SETPARAM = 154,
SCHED_GETPARAM = 155,
SCHED_SETSCHEDULER = 156,
SCHED_GETSCHEDULER = 157,
SCHED_YIELD = 158,
SCHED_GET_PRIORITY_MAX = 159,
SCHED_GET_PRIORITY_MIN = 160,
SCHED_RR_GET_INTERVAL = 161,
NANOSLEEP = 162,
MREMAP = 163,
SETRESUID = 164,
GETRESUID = 165,
VM86 = 166,
POLL = 168,
SETRESGID = 170,
GETRESGID = 171,
PRCTL = 172,
RT_SIGRETURN = 173,
RT_SIGACTION = 174,
RT_SIGPROCMASK = 175,
RT_SIGPENDING = 176,
RT_SIGTIMEDWAIT = 177,
RT_SIGQUEUEINFO = 178,
RT_SIGSUSPEND = 179,
PREAD64 = 180,
PWRITE64 = 181,
CHOWN = 182,
GETCWD = 183,
CAPGET = 184,
CAPSET = 185,
SIGALTSTACK = 186,
SENDFILE = 187,
VFORK = 190,
UGETRLIMIT = 191,
MMAP2 = 192,
TRUNCATE64 = 193,
FTRUNCATE64 = 194,
LCHOWN32 = 198,
GETUID32 = 199,
GETGID32 = 200,
GETEUID32 = 201,
GETEGID32 = 202,
SETREUID32 = 203,
SETREGID32 = 204,
GETGROUPS32 = 205,
SETGROUPS32 = 206,
FCHOWN32 = 207,
SETRESUID32 = 208,
GETRESUID32 = 209,
SETRESGID32 = 210,
GETRESGID32 = 211,
CHOWN32 = 212,
SETUID32 = 213,
SETGID32 = 214,
SETFSUID32 = 215,
SETFSGID32 = 216,
PIVOT_ROOT = 217,
MINCORE = 218,
MADVISE = 219,
GETDENTS64 = 220,
FCNTL64 = 221,
GETTID = 224,
READAHEAD = 225,
SETXATTR = 226,
LSETXATTR = 227,
FSETXATTR = 228,
GETXATTR = 229,
LGETXATTR = 230,
FGETXATTR = 231,
LISTXATTR = 232,
LLISTXATTR = 233,
FLISTXATTR = 234,
REMOVEXATTR = 235,
LREMOVEXATTR = 236,
FREMOVEXATTR = 237,
TKILL = 238,
SENDFILE64 = 239,
FUTEX = 240,
SCHED_SETAFFINITY = 241,
SCHED_GETAFFINITY = 242,
SET_THREAD_AREA = 243,
GET_THREAD_AREA = 244,
IO_SETUP = 245,
IO_DESTROY = 246,
IO_GETEVENTS = 247,
IO_SUBMIT = 248,
IO_CANCEL = 249,
FADVISE64 = 250,
EXIT_GROUP = 252,
EPOLL_CREATE = 254,
EPOLL_CTL = 255,
EPOLL_WAIT = 256,
REMAP_FILE_PAGES = 257,
SET_TID_ADDRESS = 258,
TIMER_CREATE = 259,
TIMER_SETTIME = 260,
TIMER_GETTIME = 261,
TIMER_GETOVERRUN = 262,
TIMER_DELETE = 263,
CLOCK_SETTIME = 264,
CLOCK_GETTIME = 265,
CLOCK_GETRES = 266,
CLOCK_NANOSLEEP = 267,
STATFS64 = 268,
FSTATFS64 = 269,
TGKILL = 270,
UTIMES = 271,
FADVISE64_64 = 272,
MBIND = 274,
GET_MEMPOLICY = 275,
SET_MEMPOLICY = 276,
MQ_OPEN = 277,
MQ_UNLINK = 278,
MQ_TIMEDSEND = 279,
MQ_TIMEDRECEIVE = 280,
MQ_NOTIFY = 281,
MQ_GETSETATTR = 282,
KEXEC_LOAD = 283,
WAITID = 284,
ADD_KEY = 286,
REQUEST_KEY = 287,
KEYCTL = 288,
IOPRIO_SET = 289,
IOPRIO_GET = 290,
INOTIFY_INIT = 291,
INOTIFY_ADD_WATCH = 292,
INOTIFY_RM_WATCH = 293,
MIGRATE_PAGES = 294,
OPENAT = 295,
MKDIRAT = 296,
MKNODAT = 297,
FCHOWNAT = 298,
FUTIMESAT = 299,
UNLINKAT = 301,
RENAMEAT = 302,
LINKAT = 303,
SYMLINKAT = 304,
READLINKAT = 305,
FCHMODAT = 306,
FACCESSAT = 307,
PSELECT6 = 308,
PPOLL = 309,
UNSHARE = 310,
SET_ROBUST_LIST = 311,
GET_ROBUST_LIST = 312,
SPLICE = 313,
SYNC_FILE_RANGE = 314,
TEE = 315,
VMSPLICE = 316,
MOVE_PAGES = 317,
GETCPU = 318,
EPOLL_PWAIT = 319,
UTIMENSAT = 320,
SIGNALFD = 321,
TIMERFD_CREATE = 322,
EVENTFD = 323,
FALLOCATE = 324,
TIMERFD_SETTIME = 325,
TIMERFD_GETTIME = 326,
SIGNALFD4 = 327,
EVENTFD2 = 328,
EPOLL_CREATE1 = 329,
DUP3 = 330,
PIPE2 = 331,
INOTIFY_INIT1 = 332,
PREADV = 333,
PWRITEV = 334,
RT_TGSIGQUEUEINFO = 335,
PERF_EVENT_OPEN = 336,
RECVMMSG = 337,
FANOTIFY_INIT = 338,
FANOTIFY_MARK = 339,
PRLIMIT64 = 340,
NAME_TO_HANDLE_AT = 341,
OPEN_BY_HANDLE_AT = 342,
CLOCK_ADJTIME = 343,
SYNCFS = 344,
SENDMMSG = 345,
SETNS = 346,
PROCESS_VM_READV = 347,
PROCESS_VM_WRITEV = 348,
KCMP = 349,
FINIT_MODULE = 350,
SCHED_SETATTR = 351,
SCHED_GETATTR = 352,
RENAMEAT2 = 353,
SECCOMP = 354,
GETRANDOM = 355,
MEMFD_CREATE = 356,
BPF = 357,
EXECVEAT = 358,
SOCKET = 359,
SOCKETPAIR = 360,
BIND = 361,
CONNECT = 362,
LISTEN = 363,
ACCEPT4 = 364,
GETSOCKOPT = 365,
SETSOCKOPT = 366,
GETSOCKNAME = 367,
GETPEERNAME = 368,
SENDTO = 369,
SENDMSG = 370,
RECVFROM = 371,
RECVMSG = 372,
SHUTDOWN = 373,
USERFAULTFD = 374,
MEMBARRIER = 375,
MLOCK2 = 376,
COPY_FILE_RANGE = 377,
PREADV2 = 378,
PWRITEV2 = 379,
PKEY_MPROTECT = 380,
PKEY_ALLOC = 381,
PKEY_FREE = 382,
STATX = 383,
ARCH_PRCTL = 384,
IO_PGETEVENTS = 385,
RSEQ = 386,
SEMGET = 393,
SEMCTL = 394,
SHMGET = 395,
SHMCTL = 396,
SHMAT = 397,
SHMDT = 398,
MSGGET = 399,
MSGSND = 400,
MSGRCV = 401,
MSGCTL = 402,
CLOCK_GETTIME64 = 403,
CLOCK_SETTIME64 = 404,
CLOCK_ADJTIME64 = 405,
CLOCK_GETRES_TIME64 = 406,
CLOCK_NANOSLEEP_TIME64 = 407,
TIMER_GETTIME64 = 408,
TIMER_SETTIME64 = 409,
TIMERFD_GETTIME64 = 410,
TIMERFD_SETTIME64 = 411,
UTIMENSAT_TIME64 = 412,
PSELECT6_TIME64 = 413,
PPOLL_TIME64 = 414,
IO_PGETEVENTS_TIME64 = 416,
RECVMMSG_TIME64 = 417,
MQ_TIMEDSEND_TIME64 = 418,
MQ_TIMEDRECEIVE_TIME64 = 419,
SEMTIMEDOP_TIME64 = 420,
RT_SIGTIMEDWAIT_TIME64 = 421,
FUTEX_TIME64 = 422,
SCHED_RR_GET_INTERVAL_TIME64 = 423,
PIDFD_SEND_SIGNAL = 424,
IO_URING_SETUP = 425,
IO_URING_ENTER = 426,
IO_URING_REGISTER = 427,
OPEN_TREE = 428,
MOVE_MOUNT = 429,
FSOPEN = 430,
FSCONFIG = 431,
FSMOUNT = 432,
FSPICK = 433,
PIDFD_OPEN = 434,
CLONE3 = 435,
CLOSE_RANGE = 436,
OPENAT2 = 437,
PIDFD_GETFD = 438,
FACCESSAT2 = 439,
PROCESS_MADVISE = 440,
EPOLL_PWAIT2 = 441,
MOUNT_SETATTR = 442,
QUOTACTL_FD = 443,
LANDLOCK_CREATE_RULESET = 444,
LANDLOCK_ADD_RULE = 445,
LANDLOCK_RESTRICT_SELF = 446,
MEMFD_SECRET = 447,
PROCESS_MRELEASE = 448,
FUTEX_WAITV = 449,
SET_MEMPOLICY_HOME_NODE = 450,
CACHESTAT = 451,
FCHMODAT2 = 452,
MAP_SHADOW_STACK = 453,
FUTEX_WAKE = 454,
FUTEX_WAIT = 455,
FUTEX_REQUEUE = 456,
STATMOUNT = 457,
LISTMOUNT = 458,
LSM_GET_SELF_ATTR = 459,
LSM_SET_SELF_ATTR = 460,
LSM_LIST_MODULES = 461,
MSEAL = 462,
SETXATTRAT = 463,
GETXATTRAT = 464,
LISTXATTRAT = 465,
REMOVEXATTRAT = 466,
OPEN_TREE_ATTR = 467,
FILE_GETATTR = 468,
FILE_SETATTR = 469,
LISTNS = 470,
}
}
-26
View File
@@ -1,26 +0,0 @@
namespace Frida {
[CCode (cheader_filename = "dlfcn.h", cname = "dlopen")]
public void * dlopen (string filename, int flags);
[CCode (cheader_filename = "dlfcn.h", cname = "dlclose")]
public int dlclose (void * handle);
[CCode (cheader_filename = "dlfcn.h", cname = "dlsym")]
public void * dlsym (void * handle, string symbol);
[CCode (cheader_filename = "dlfcn.h", cname = "dlerror")]
public unowned string dlerror ();
[CCode (cheader_filename = "sys/mman.h", cname = "MAP_ANONYMOUS")]
public const int MAP_ANONYMOUS;
[CCode (cheader_filename = "linux-syscall.h", cprefix = "SYS_", has_type_id = false)]
public enum SysCall {
memfd_create,
pidfd_getfd,
pidfd_open,
process_vm_readv,
process_vm_writev,
tgkill,
}
}
+455 -16
View File
@@ -11,27 +11,50 @@ namespace Frida {
return (linux_major == major && linux_minor >= minor) || linux_major > major;
}
public class FileDescriptor : Object, FileDescriptorBased {
public int handle;
public struct DevId {
public uint32 major;
public uint32 minor;
public FileDescriptor (int handle) {
this.handle = handle;
public DevId (uint32 major, uint32 minor) {
this.major = major;
this.minor = minor;
}
~FileDescriptor () {
if (handle != -1)
Posix.close (handle);
public uint64 pack () {
return ((uint64) major << 32) | minor;
}
public int steal () {
int result = handle;
handle = -1;
return result;
public static DevId unpack (uint64 dev) {
return DevId ((uint32) (dev >> 32), (uint32) dev);
}
public int get_fd () {
return handle;
public bool equals (DevId other) {
return major == other.major && minor == other.minor;
}
public uint hash () {
return (uint) (major ^ (minor * 0x9e3779b9));
}
public string to_string () {
return "%x:%x".printf (major, minor);
}
}
public extern unowned LinuxSyscallSignature[] get_syscall_signatures ();
public extern unowned LinuxSyscallSignature[]? get_compat32_syscall_signatures ();
public struct LinuxSyscallSignature {
public int nr;
public string name;
public uint8 nargs;
public LinuxSyscallArg args[6];
}
public struct LinuxSyscallArg {
public string? type;
public string? name;
}
public sealed class PidFileDescriptor : FileDescriptor {
@@ -65,11 +88,11 @@ namespace Frida {
}
private static int pidfd_open (uint pid, uint flags) {
return Linux.syscall (SysCall.pidfd_open, pid, flags);
return Linux.syscall (LinuxSyscall.PIDFD_OPEN, pid, flags);
}
private static int pidfd_getfd (int pidfd, int targetfd, uint flags) {
return Linux.syscall (SysCall.pidfd_getfd, pidfd, targetfd, flags);
return Linux.syscall (LinuxSyscall.PIDFD_GETFD, pidfd, targetfd, flags);
}
[NoReturn]
@@ -101,7 +124,423 @@ namespace Frida {
}
private int memfd_create (string name, uint flags) {
return Linux.syscall (SysCall.memfd_create, name, flags);
return Linux.syscall (LinuxSyscall.MEMFD_CREATE, name, flags);
}
}
#if HAVE_LOCAL_BACKEND
public sealed class BpfObject {
public Programs programs {
get;
}
public Maps maps {
get;
}
internal Libbpf.Object handle;
private char[] kernel_log_buf;
public static BpfObject open (string name, uint8[] blob) throws Error {
var log_buf = new char[128 * 1024];
var opts = Libbpf.Object.OpenOpts ();
opts.sz = sizeof (Libbpf.Object.OpenOpts);
opts.object_name = name;
opts.kernel_log_buf = log_buf;
var handle = Libbpf.Object.open_mem (blob, opts);
if (handle == null)
throw_libbpf_error (errno);
return new BpfObject ((owned) handle, (owned) log_buf);
}
private BpfObject (owned Libbpf.Object handle, owned char[] kernel_log_buf) {
this.handle = (owned) handle;
this.kernel_log_buf = (owned) kernel_log_buf;
_programs = new Programs (this);
_maps = new Maps (this);
}
public void prepare () throws Error {
check_libbpf_result (handle.prepare ());
}
public void load () throws Error {
check_libbpf_result (handle.load (), (string) kernel_log_buf);
}
public sealed class Programs {
private unowned BpfObject parent;
internal Programs (BpfObject parent) {
this.parent = parent;
}
public BpfProgram get_by_name (string name) throws Error {
var p = find_by_name (name);
if (p == null)
throw new Error.INVALID_ARGUMENT ("No program named '%s'", name);
return p;
}
public BpfProgram? find_by_name (string name) {
unowned Libbpf.Program? p = parent.handle.find_program_by_name (name);
if (p == null)
return null;
return new BpfProgram (p, parent);
}
public Iterator iterator () {
return new Iterator (parent);
}
public class Iterator {
private BpfObject parent;
private BpfProgram? current;
internal Iterator (BpfObject parent) {
this.parent = parent;
}
public BpfProgram? next_value () {
unowned Libbpf.Program? p = parent.handle.next_program (current?.handle);
if (p == null)
return null;
current = new BpfProgram (p, parent);
return current;
}
}
}
public sealed class Maps {
private unowned BpfObject parent;
internal Maps (BpfObject parent) {
this.parent = parent;
}
public BpfMap get_by_name (string name) throws Error {
var p = find_by_name (name);
if (p == null)
throw new Error.INVALID_ARGUMENT ("No map named '%s'", name);
return p;
}
public BpfMap? find_by_name (string name) {
unowned Libbpf.Map? p = parent.handle.find_map_by_name (name);
if (p == null)
return null;
return new BpfMap (p, parent);
}
public Iterator iterator () {
return new Iterator (parent);
}
public class Iterator {
private BpfObject parent;
private BpfMap? current;
internal Iterator (BpfObject parent) {
this.parent = parent;
}
public BpfMap? next_value () {
unowned Libbpf.Map? p = parent.handle.next_map (current?.handle);
if (p == null)
return null;
current = new BpfMap (p, parent);
return current;
}
}
}
}
public sealed class BpfProgram {
internal unowned Libbpf.Program handle;
private BpfObject parent;
public string name {
get {
return handle.name;
}
}
internal BpfProgram (Libbpf.Program handle, BpfObject parent) {
this.handle = handle;
this.parent = parent;
}
public BpfLink attach () throws Error {
return parse_attach_result (handle.attach ());
}
public BpfLink attach_perf_event (FileDescriptor pfd) throws Error {
return parse_attach_result (handle.attach_perf_event (pfd.handle));
}
private BpfLink parse_attach_result (owned Libbpf.Link? l) throws Error {
if (l == null)
throw_libbpf_error (errno);
return new BpfLink ((owned) l);
}
}
public sealed class BpfMap {
internal unowned Libbpf.Map handle;
private BpfObject parent;
public string name {
get {
return handle.name;
}
}
public int fd {
get {
return handle.fd;
}
}
public uint32 max_entries {
get {
return handle.max_entries;
}
set {
handle.max_entries = value;
}
}
public uint32 key_size {
get {
return handle.key_size;
}
set {
handle.key_size = value;
}
}
public uint32 value_size {
get {
return handle.value_size;
}
set {
handle.value_size = value;
}
}
internal BpfMap (Libbpf.Map handle, BpfObject parent) {
this.handle = handle;
this.parent = parent;
}
public void update_u32_u8 (uint32 key, uint8 val) throws Error {
update_raw ((uint8[]) &key, (uint8[]) &val);
}
public void update_u32_u32 (uint32 key, uint32 val) throws Error {
update_raw ((uint8[]) &key, (uint8[]) &val);
}
public void remove_u32 (uint32 key) throws Error {
remove_raw ((uint8[]) &key);
}
public void update_u64_u8 (uint64 key, uint8 val) throws Error {
update_raw ((uint8[]) &key, (uint8[]) &val);
}
public void update_u64_u32 (uint64 key, uint32 val) throws Error {
update_raw ((uint8[]) &key, (uint8[]) &val);
}
public void remove_u64 (uint64 key) throws Error {
remove_raw ((uint8[]) &key);
}
public void foreach_percpu_value<T> (uint8[] key, PercpuValueFunc<T> func) throws Error {
var ncpus = check_libbpf_result (Libbpf.num_possible_cpus ());
var percpu_stride = round_up_8 (value_size);
uint8[] buf = new uint8[ncpus * percpu_stride];
lookup_raw (key, buf);
for (int cpu = 0; cpu != ncpus; cpu++) {
unowned T val = (T) ((uint8 *) buf + (cpu * percpu_stride));
func (cpu, val);
}
}
public delegate void PercpuValueFunc<T> (uint32 cpu, T val);
public void lookup_raw (uint8[] key, uint8[] val) throws Error {
check_libbpf_result (handle.lookup_elem (key, val));
}
public void update_raw (uint8[] key, uint8[] val) throws Error {
check_libbpf_result (handle.update_elem (key, val));
}
public void remove_raw (uint8[] key) throws Error {
check_libbpf_result (handle.delete_elem (key));
}
}
public sealed class BpfLink {
private Libbpf.Link handle;
internal BpfLink (owned Libbpf.Link handle) {
this.handle = (owned) handle;
}
}
private int check_libbpf_result (int result, string details = "") throws Error {
if (result < 0)
throw_libbpf_error (result, details);
return result;
}
[NoReturn]
private void throw_libbpf_error (int err, string details = "") throws Error {
var message = new StringBuilder (error_message_for_libbpf_error (err));
if (details.length != 0) {
message
.append (":\n")
.append (details.chomp ());
}
if (err.abs () == Posix.EPERM)
throw new Error.PERMISSION_DENIED ("%s", message.str);
else
throw new Error.INVALID_ARGUMENT ("%s", message.str);
}
private string error_message_for_libbpf_error (int err) {
char message[256];
int result = Libbpf.strerror (err, message);
assert (result == 0);
return (string) message;
}
public sealed class BpfRingbufReader : Object {
private BpfMap map;
private uint8 * consumer_map;
private uint8 * producer_map;
private uint8 * producer_page;
private uint8 * data_base;
private uint64 * consumer_pos;
private uint64 * producer_pos;
public BpfRingbufReader (BpfMap map) throws Error {
this.map = map;
var page_size = (size_t) Posix.getpagesize ();
int fd = map.fd;
void * mem = Posix.mmap (null, page_size, Posix.PROT_READ | Posix.PROT_WRITE, Posix.MAP_SHARED, fd, 0);
if (mem == Posix.MAP_FAILED)
throw_errno ("mmap(consumer) failed");
consumer_map = mem;
size_t prod_len = page_size + (2 * map.max_entries);
mem = Posix.mmap (null, prod_len, Posix.PROT_READ, Posix.MAP_SHARED, fd, (Posix.off_t) page_size);
if (mem == Posix.MAP_FAILED)
throw_errno ("mmap(producer+data) failed");
producer_map = mem;
producer_page = producer_map;
data_base = producer_map + page_size;
consumer_pos = consumer_map;
producer_pos = producer_page;
}
~BpfRingbufReader () {
var page_size = (size_t) Posix.getpagesize ();
if (consumer_map != null)
Posix.munmap (consumer_map, page_size);
if (producer_map != null)
Posix.munmap (producer_map, page_size + (2 * map.max_entries));
}
public DrainStatus drain (RecordHandler on_record) {
while (true) {
uint64 prod = Atomics.load_u64_acquire (producer_pos);
uint64 cons = Atomics.load_u64_acquire (consumer_pos);
if (cons >= prod)
return DRAINED;
size_t data_size = map.max_entries;
uint64 mask = data_size - 1;
uint64 off = cons & mask;
uint8 * hdrp = data_base + off;
uint32 hdr_len = Atomics.load_u32_acquire ((uint32 *) hdrp);
uint32 flags_mask = BpfRingbufFlags.BUSY | BpfRingbufFlags.DISCARD;
uint32 flags = hdr_len & flags_mask;
uint32 sample_len = hdr_len & ~flags_mask;
if ((flags & BpfRingbufFlags.BUSY) != 0)
return DRAINED;
assert (sample_len <= data_size - BPF_RINGBUF_HEADER_SIZE);
var total_len = (uint32) round_up_8 (sample_len + BPF_RINGBUF_HEADER_SIZE);
if ((flags & BpfRingbufFlags.DISCARD) != 0) {
Atomics.store_u64_release (consumer_pos, cons + total_len);
continue;
}
unowned uint8[] payload = (uint8[]) (hdrp + BPF_RINGBUF_HEADER_SIZE);
var action = on_record (payload[:sample_len]);
Atomics.store_u64_release (consumer_pos, cons + total_len);
if (action == STOP)
return STOPPED;
}
}
public enum DrainStatus {
DRAINED,
STOPPED,
}
public delegate RecordAction RecordHandler (uint8[] payload);
public enum RecordAction {
CONTINUE,
STOP,
}
}
#endif
namespace PerfEvent {
public FileDescriptor open (PerfEventAttr * attr, int pid, int cpu, int group_fd, uint flags) throws Error {
int r = Linux.syscall (LinuxSyscall.PERF_EVENT_OPEN, attr, pid, cpu, group_fd, flags);
if (r == -1)
throw_errno ("perf_event_open() failed");
return new FileDescriptor (r);
}
}
private void throw_errno (string message) throws Error {
throw new Error.NOT_SUPPORTED ("%s (errno=%d: %s)".printf (message, Posix.errno, Posix.strerror (Posix.errno)));
}
#if HAVE_LOCAL_BACKEND
private size_t round_up_8 (size_t x) {
return (x + 7) & ~((size_t) 7);
}
#endif
}
+58 -12
View File
@@ -1,4 +1,5 @@
base_sources = [
'asset-location.vala',
'session.vala',
'session-glue.c',
'channel.vala',
@@ -13,11 +14,21 @@ base_sources = [
'socket.vala',
'socket-glue.c',
'buffer.vala',
'buffer-glue.c',
'value.vala',
'xnu-syscalls' / 'xnu-syscalls.vala',
'xnu-syscalls' / 'xnu-syscalls-glue.c',
]
extra_vala_args = []
if host_os == 'windows'
base_sources += 'windows.vala'
else
base_sources += 'posix.vala'
extra_vala_args += '--pkg=posix'
endif
if host_os == 'macos'
base_sources += [
'xpc.vala',
@@ -27,27 +38,59 @@ endif
if host_os_family == 'darwin'
base_sources += 'corefoundation.vala'
extra_vala_args += '--pkg=darwin-xnu'
endif
if host_os_family == 'linux'
base_sources += 'linux.vala'
base_sources += [
'linux.vala',
]
extra_vala_args += [
'--pkg=linux',
'--pkg=linux-system',
'--pkg=posix',
'--pkg=frida-atomics',
]
if have_local_backend
extra_vala_args += '--pkg=libbpf'
endif
syscall_arch_from_abi = {
'armbe': 'arm',
'armbe8': 'arm',
'armhf': 'arm',
'armv6kz': 'arm',
'arm64be': 'arm64',
'arm64beilp32': 'arm64',
'mipsel': 'mips',
'mips64el': 'mips64',
}
syscall_arch = syscall_arch_from_abi.get(host_abi, host_abi)
base_sources += [
'linux-syscalls' / (syscall_arch + '.vala'),
'linux-syscalls' / (syscall_arch + '-glue.c'),
]
endif
if host_os_family == 'freebsd'
extra_vala_args += '--pkg=freebsd'
endif
extra_deps = []
if host_os_family != 'windows'
extra_vala_args += '--pkg=gio-unix-2.0'
extra_deps += gio_unix_dep
endif
if host_os_family == 'linux' and have_local_backend
extra_deps += libbpf_dep
endif
base_vala_args = [gum_vala_args, '--pkg=gio-2.0', '--pkg=json-glib-1.0']
if nice_dep.found()
base_vala_args += '--pkg=nice'
endif
if host_os_family != 'windows'
base_vala_args += [
'--pkg=gio-unix-2.0',
]
endif
if host_os_family == 'darwin'
base_vala_args += [
'--pkg=corefoundation',
@@ -58,6 +101,7 @@ endif
if host_os_family == 'linux'
base_vala_args += [
'--vapidir=' + meson.current_source_dir(),
'--pkg=frida-linux',
'--pkg=gio-unix-2.0',
]
endif
@@ -71,7 +115,7 @@ base = static_library('frida-base-' + api_version, base_sources,
vala_gir: base_gir_name,
vala_vapi: f'frida-base-@[email protected]',
dependencies: [glib_dep, gobject_dep, gio_dep, libsoup_dep, nice_dep, usrsctp_dep, gee_dep, json_glib_dep, gum_dep, openssl_dep] + extra_deps,
install: true,
install: have_in_tree_payloads,
install_dir: [true, header_install_dir, true, false],
)
@@ -83,10 +127,12 @@ base_dep = declare_dependency(
base_build_dir = meson.current_build_dir()
pkg = import('pkgconfig')
pkg.generate(base,
filebase: f'frida-base-@api_version@',
name: 'Frida Base Library',
version: frida_version,
description: 'Basic building blocks',
)
if have_in_tree_payloads
pkg = import('pkgconfig')
pkg.generate(base,
filebase: f'frida-base-@api_version@',
name: 'Frida Base Library',
version: frida_version,
description: 'Basic building blocks',
)
endif
+417 -9
View File
@@ -1,26 +1,432 @@
#ifdef HAVE_NICE
#define OPENSSL_SUPPRESS_DEPRECATED
#include "frida-base.h"
#include <errno.h>
#include <openssl/asn1.h>
#include <openssl/bio.h>
#include <openssl/bn.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/x509.h>
#include <usrsctp.h>
#ifdef HAVE_GIOAPPLE
# include <CoreFoundation/CoreFoundation.h>
# include <Security/Security.h>
#else
# define OPENSSL_SUPPRESS_DEPRECATED
# include <openssl/asn1.h>
# include <openssl/bio.h>
# include <openssl/bn.h>
# include <openssl/evp.h>
# include <openssl/pem.h>
# include <openssl/rsa.h>
# include <openssl/x509.h>
#endif
#ifdef HAVE_GIOAPPLE
static SecKeyRef frida_rsa_keypair_generate (void);
static void frida_rsa_export_public_key (SecKeyRef private_key, GByteArray * out);
static void frida_rsa_export_private_key (SecKeyRef private_key, GByteArray * out);
static void frida_rsa_sign_sha256 (SecKeyRef private_key, const guint8 * message, gsize message_length, GByteArray * out);
static void frida_build_tbs_certificate (GByteArray * out, const GByteArray * subject_public_key);
static void frida_build_name (GByteArray * out);
static void frida_build_rdn (GByteArray * out, const guint8 * oid, gsize oid_length, guint8 value_tag, const gchar * value);
static void frida_build_validity (GByteArray * out);
static void frida_build_subject_public_key_info (GByteArray * out, const GByteArray * rsa_public_key);
static void frida_build_signed_certificate (GByteArray * out, const GByteArray * tbs, const GByteArray * signature);
static void frida_build_algorithm_identifier (GByteArray * out, const guint8 * oid, gsize oid_length);
static void frida_build_pkcs8_private_key_info (GByteArray * out, const GByteArray * rsa_private_key);
static gchar * frida_pem_encode (const gchar * type, const guint8 * der, gsize der_length);
static void frida_der_append_tlv (GByteArray * out, guint8 tag, const guint8 * value, gsize length);
static void frida_der_append_length (GByteArray * out, gsize length);
static void frida_der_append_integer_uint (GByteArray * out, guint64 value);
static void frida_der_append_null (GByteArray * out);
static void frida_der_append_oid (GByteArray * out, const guint8 * oid, gsize length);
static void frida_der_append_utctime (GByteArray * out, time_t t);
static void frida_der_append_bit_string (GByteArray * out, const guint8 * bytes, gsize length);
static const guint8 frida_oid_country[] = { 0x55, 0x04, 0x06 };
static const guint8 frida_oid_organization[] = { 0x55, 0x04, 0x0a };
static const guint8 frida_oid_common_name[] = { 0x55, 0x04, 0x03 };
static const guint8 frida_oid_rsa_encryption[] = { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01 };
static const guint8 frida_oid_sha256_with_rsa[] = { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b };
#else
static gchar * frida_steal_bio_to_string (BIO ** bio);
#endif
static int frida_on_connection_output (void * addr, void * buffer, size_t length, uint8_t tos, uint8_t set_df);
static void frida_on_debug_printf (const char * format, ...);
static void frida_on_upcall (struct socket * sock, void * user_data, int flags);
#ifdef HAVE_GIOAPPLE
void
_frida_generate_certificate (guint8 ** cert_der, gint * cert_der_length, gchar ** cert_pem, gchar ** key_pem)
{
SecKeyRef private_key;
GByteArray * rsa_public_key, * rsa_private_key, * subject_public_key, * tbs, * signature, * certificate, * pkcs8;
*cert_der = NULL;
*cert_der_length = 0;
*cert_pem = NULL;
*key_pem = NULL;
private_key = frida_rsa_keypair_generate ();
rsa_public_key = g_byte_array_new ();
frida_rsa_export_public_key (private_key, rsa_public_key);
rsa_private_key = g_byte_array_new ();
frida_rsa_export_private_key (private_key, rsa_private_key);
subject_public_key = g_byte_array_new ();
frida_build_subject_public_key_info (subject_public_key, rsa_public_key);
tbs = g_byte_array_new ();
frida_build_tbs_certificate (tbs, subject_public_key);
signature = g_byte_array_new ();
frida_rsa_sign_sha256 (private_key, tbs->data, tbs->len, signature);
certificate = g_byte_array_new ();
frida_build_signed_certificate (certificate, tbs, signature);
pkcs8 = g_byte_array_new ();
frida_build_pkcs8_private_key_info (pkcs8, rsa_private_key);
*cert_der = g_memdup2 (certificate->data, certificate->len);
*cert_der_length = certificate->len;
*cert_pem = frida_pem_encode ("CERTIFICATE", certificate->data, certificate->len);
*key_pem = frida_pem_encode ("PRIVATE KEY", pkcs8->data, pkcs8->len);
g_byte_array_unref (pkcs8);
g_byte_array_unref (certificate);
g_byte_array_unref (signature);
g_byte_array_unref (tbs);
g_byte_array_unref (subject_public_key);
g_byte_array_unref (rsa_private_key);
g_byte_array_unref (rsa_public_key);
CFRelease (private_key);
}
static SecKeyRef
frida_rsa_keypair_generate (void)
{
SecKeyRef private_key;
CFMutableDictionaryRef attrs;
const int key_size_bits = 2048;
CFNumberRef key_size;
attrs = CFDictionaryCreateMutable (kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
key_size = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &key_size_bits);
CFDictionarySetValue (attrs, kSecAttrKeyType, kSecAttrKeyTypeRSA);
CFDictionarySetValue (attrs, kSecAttrKeySizeInBits, key_size);
CFRelease (key_size);
private_key = SecKeyCreateRandomKey (attrs, NULL);
g_assert (private_key != NULL);
CFRelease (attrs);
return private_key;
}
static void
frida_rsa_export_public_key (SecKeyRef private_key, GByteArray * out)
{
SecKeyRef public_key;
CFDataRef data;
public_key = SecKeyCopyPublicKey (private_key);
g_assert (public_key != NULL);
data = SecKeyCopyExternalRepresentation (public_key, NULL);
g_assert (data != NULL);
g_byte_array_append (out, CFDataGetBytePtr (data), CFDataGetLength (data));
CFRelease (data);
CFRelease (public_key);
}
static void
frida_rsa_export_private_key (SecKeyRef private_key, GByteArray * out)
{
CFDataRef data;
data = SecKeyCopyExternalRepresentation (private_key, NULL);
g_assert (data != NULL);
g_byte_array_append (out, CFDataGetBytePtr (data), (guint) CFDataGetLength (data));
CFRelease (data);
}
static void
frida_rsa_sign_sha256 (SecKeyRef private_key, const guint8 * message, gsize message_length, GByteArray * out)
{
CFDataRef to_sign, signature;
to_sign = CFDataCreate (kCFAllocatorDefault, message, (CFIndex) message_length);
signature = SecKeyCreateSignature (private_key, kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA256, to_sign, NULL);
g_assert (signature != NULL);
g_byte_array_append (out, CFDataGetBytePtr (signature), (guint) CFDataGetLength (signature));
CFRelease (signature);
CFRelease (to_sign);
}
static void
frida_build_tbs_certificate (GByteArray * out, const GByteArray * subject_public_key)
{
GByteArray * inner = g_byte_array_new ();
frida_der_append_integer_uint (inner, 1);
frida_build_algorithm_identifier (inner, frida_oid_sha256_with_rsa, sizeof (frida_oid_sha256_with_rsa));
frida_build_name (inner);
frida_build_validity (inner);
frida_build_name (inner);
g_byte_array_append (inner, subject_public_key->data, subject_public_key->len);
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static void
frida_build_name (GByteArray * out)
{
GByteArray * inner = g_byte_array_new ();
frida_build_rdn (inner, frida_oid_country, sizeof (frida_oid_country), 0x13, "CA");
frida_build_rdn (inner, frida_oid_organization, sizeof (frida_oid_organization), 0x0c, "Frida");
frida_build_rdn (inner, frida_oid_common_name, sizeof (frida_oid_common_name), 0x0c, "lolcathost");
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static void
frida_build_rdn (GByteArray * out, const guint8 * oid, gsize oid_length, guint8 value_tag, const gchar * value)
{
GByteArray * atv, * rdn;
atv = g_byte_array_new ();
rdn = g_byte_array_new ();
frida_der_append_oid (atv, oid, oid_length);
frida_der_append_tlv (atv, value_tag, (const guint8 *) value, strlen (value));
frida_der_append_tlv (rdn, 0x30, atv->data, atv->len);
frida_der_append_tlv (out, 0x31, rdn->data, rdn->len);
g_byte_array_unref (rdn);
g_byte_array_unref (atv);
}
static void
frida_build_validity (GByteArray * out)
{
const time_t lifetime_seconds = 15780000;
GByteArray * inner;
time_t not_before, not_after;
inner = g_byte_array_new ();
not_before = time (NULL);
not_after = not_before + lifetime_seconds;
frida_der_append_utctime (inner, not_before);
frida_der_append_utctime (inner, not_after);
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static void
frida_build_subject_public_key_info (GByteArray * out, const GByteArray * rsa_public_key)
{
GByteArray * inner = g_byte_array_new ();
frida_build_algorithm_identifier (inner, frida_oid_rsa_encryption, sizeof (frida_oid_rsa_encryption));
frida_der_append_bit_string (inner, rsa_public_key->data, rsa_public_key->len);
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static void
frida_build_signed_certificate (GByteArray * out, const GByteArray * tbs, const GByteArray * signature)
{
GByteArray * inner = g_byte_array_new ();
g_byte_array_append (inner, tbs->data, tbs->len);
frida_build_algorithm_identifier (inner, frida_oid_sha256_with_rsa, sizeof (frida_oid_sha256_with_rsa));
frida_der_append_bit_string (inner, signature->data, signature->len);
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static void
frida_build_algorithm_identifier (GByteArray * out, const guint8 * oid, gsize oid_length)
{
GByteArray * inner = g_byte_array_new ();
frida_der_append_oid (inner, oid, oid_length);
frida_der_append_null (inner);
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static void
frida_build_pkcs8_private_key_info (GByteArray * out, const GByteArray * rsa_private_key)
{
GByteArray * inner = g_byte_array_new ();
frida_der_append_integer_uint (inner, 0);
frida_build_algorithm_identifier (inner, frida_oid_rsa_encryption, sizeof (frida_oid_rsa_encryption));
frida_der_append_tlv (inner, 0x04, rsa_private_key->data, rsa_private_key->len);
frida_der_append_tlv (out, 0x30, inner->data, inner->len);
g_byte_array_unref (inner);
}
static gchar *
frida_pem_encode (const gchar * type, const guint8 * der, gsize der_length)
{
GString * pem;
gchar * base64;
gsize length, i;
base64 = g_base64_encode (der, der_length);
length = strlen (base64);
pem = g_string_sized_new (length + 128);
g_string_append_printf (pem, "-----BEGIN %s-----\n", type);
for (i = 0; i < length; i += 64)
{
gsize chunk = MIN (64, length - i);
g_string_append_len (pem, base64 + i, chunk);
g_string_append_c (pem, '\n');
}
g_string_append_printf (pem, "-----END %s-----\n", type);
g_free (base64);
return g_string_free (pem, FALSE);
}
static void
frida_der_append_tlv (GByteArray * out, guint8 tag, const guint8 * value, gsize length)
{
g_byte_array_append (out, &tag, 1);
frida_der_append_length (out, length);
if (length > 0)
g_byte_array_append (out, value, length);
}
static void
frida_der_append_length (GByteArray * out, gsize length)
{
gint i;
guint8 buf[9], header;
if (length < 0x80)
{
guint8 b = (guint8) length;
g_byte_array_append (out, &b, 1);
return;
}
i = 0;
while (length > 0)
{
buf[++i] = (guint8) (length & 0xff);
length >>= 8;
}
header = (guint8) (0x80 | i);
g_byte_array_append (out, &header, 1);
while (i > 0)
{
g_byte_array_append (out, &buf[i], 1);
i--;
}
}
static void
frida_der_append_integer_uint (GByteArray * out, guint64 value)
{
gint i;
guint8 buf[9];
gint start;
for (i = 7; i >= 0; i--)
{
buf[i + 1] = (guint8) (value & 0xff);
value >>= 8;
}
buf[0] = 0;
start = 0;
while (start < 8 && buf[start] == 0 && (buf[start + 1] & 0x80) == 0)
start++;
frida_der_append_tlv (out, 0x02, buf + start, (gsize) (9 - start));
}
static void
frida_der_append_null (GByteArray * out)
{
frida_der_append_tlv (out, 0x05, NULL, 0);
}
static void
frida_der_append_oid (GByteArray * out, const guint8 * oid, gsize length)
{
frida_der_append_tlv (out, 0x06, oid, length);
}
static void
frida_der_append_utctime (GByteArray * out, time_t t)
{
struct tm tm;
gchar buf[16];
gmtime_r (&t, &tm);
g_snprintf (buf, sizeof (buf), "%02d%02d%02d%02d%02d%02dZ",
tm.tm_year % 100, tm.tm_mon + 1, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec);
frida_der_append_tlv (out, 0x17, (const guint8 *) buf, strlen (buf));
}
static void
frida_der_append_bit_string (GByteArray * out, const guint8 * bytes, gsize length)
{
guint8 tag = 0x03;
guint8 unused_bits = 0;
g_byte_array_append (out, &tag, 1);
frida_der_append_length (out, length + 1);
g_byte_array_append (out, &unused_bits, 1);
if (length > 0)
g_byte_array_append (out, bytes, length);
}
#else
void
_frida_generate_certificate (guint8 ** cert_der, gint * cert_der_length, gchar ** cert_pem, gchar ** key_pem)
{
@@ -90,6 +496,8 @@ frida_steal_bio_to_string (BIO ** bio)
return result;
}
#endif
void
_frida_sctp_connection_initialize_sctp_backend (void)
{
+223
View File
@@ -0,0 +1,223 @@
namespace Frida {
public sealed class StdioPipes : Object {
public OutputStream? input {
get;
construct;
}
public InputStream output {
get;
construct;
}
public InputStream error {
get;
construct;
}
public StdioPipes (FileDescriptor? input, FileDescriptor output, FileDescriptor error) {
Object (
input: (input != null) ? new UnixOutputStream (ensure_nonblocking (input.steal ()), true) : null,
output: new UnixInputStream (ensure_nonblocking (output.steal ()), true),
error: new UnixInputStream (ensure_nonblocking (error.steal ()), true)
);
}
private static int ensure_nonblocking (int fd) {
try {
Unix.set_fd_nonblocking (fd, true);
return fd;
} catch (GLib.Error e) {
assert_not_reached ();
}
}
}
public class FileDescriptor : Object, FileDescriptorBased {
public int handle;
public FileDescriptor (int handle) {
this.handle = handle;
}
~FileDescriptor () {
if (handle != -1)
Posix.close (handle);
}
public int steal () {
int result = handle;
handle = -1;
return result;
}
public int get_fd () {
return handle;
}
public size_t pread (uint8[] buf, uint64 offset) throws Error {
while (true) {
ssize_t res = Posix.pread (handle, buf, buf.length, (Posix.off_t) offset);
if (res == -1) {
if (errno == Posix.EINTR)
continue;
throw new Error.TRANSPORT ("%s", strerror (errno));
}
return res;
}
}
public void pread_all (uint8[] buf, uint64 offset) throws Error {
size_t total = 0;
while (total != buf.length) {
void * dst = (uint8 *) buf + total;
size_t remaining = buf.length - total;
while (true) {
ssize_t res = Posix.pread (handle, dst, remaining, (Posix.off_t) (offset + total));
if (res == -1) {
if (errno == Posix.EINTR)
continue;
throw new Error.TRANSPORT ("%s", strerror (errno));
}
if (res == 0)
throw new Error.TRANSPORT ("Unexpected EOF: read %zu of %zu bytes", total, buf.length);
total += (size_t) res;
break;
}
}
}
public size_t pwrite (uint8[] buf, uint64 offset) throws Error {
while (true) {
ssize_t res = Posix.pwrite (handle, buf, buf.length, (Posix.off_t) offset);
if (res == -1) {
if (errno == Posix.EINTR)
continue;
throw new Error.TRANSPORT ("%s", strerror (errno));
}
return res;
}
}
public void pwrite_all (uint8[] buf, uint64 offset) throws Error {
size_t total = 0;
while (total != buf.length) {
uint8[] chunk = buf[total : buf.length];
while (true) {
ssize_t res = Posix.pwrite (handle, chunk, chunk.length, (Posix.off_t) (offset + total));
if (res == -1) {
if (errno == Posix.EINTR)
continue;
throw new Error.TRANSPORT ("%s", strerror (errno));
}
total += (size_t) res;
break;
}
}
}
}
public StdioPipes? make_stdio_pipes (Stdio stdio, bool in_supported, out FileDescriptor? in_fd, out string? in_name,
out FileDescriptor? out_fd, out string? out_name, out FileDescriptor? err_fd, out string? err_name) throws Error {
if (stdio == PIPE) {
FileDescriptor? in_write = null;
FileDescriptor? out_read, err_read;
if (in_supported) {
make_stdio_pipe (out in_fd, out in_write, out in_name);
} else {
in_fd = null;
in_name = null;
}
make_stdio_pipe (out out_read, out out_fd, out out_name);
make_stdio_pipe (out err_read, out err_fd, out err_name);
return new StdioPipes (in_write, out_read, err_read);
} else {
in_fd = null;
in_name = null;
out_fd = null;
out_name = null;
err_fd = null;
err_name = null;
return null;
}
}
public void make_stdio_pipe (out FileDescriptor read, out FileDescriptor write, out string? name = null) throws Error {
#if HAVE_OPENPTY
int rfd = -1, wfd = -1;
char buf[Posix.Limits.PATH_MAX];
var res =
#if DARWIN
Darwin.XNU.openpty (out rfd, out wfd, buf, null, null)
#elif LINUX
Linux.openpty (out rfd, out wfd, buf, null, null)
#elif FREEBSD
FreeBSD.openpty (out rfd, out wfd, buf, null, null)
#endif
;
if (res == -1)
throw new Error.NOT_SUPPORTED ("Unable to open PTY: %s", strerror (errno));
name = (string) buf;
enable_close_on_exec (rfd);
enable_close_on_exec (wfd);
disable_sigpipe (rfd);
disable_sigpipe (wfd);
configure_terminal_attributes (rfd);
read = new FileDescriptor (rfd);
write = new FileDescriptor (wfd);
#else
name = null;
try {
int fds[2];
Unix.open_pipe (fds, Posix.FD_CLOEXEC);
read = new FileDescriptor (fds[0]);
write = new FileDescriptor (fds[1]);
} catch (GLib.Error e) {
throw new Error.NOT_SUPPORTED ("Unable to open pipe: %s", e.message);
}
#endif
}
#if HAVE_OPENPTY
private void enable_close_on_exec (int fd) {
Posix.fcntl (fd, Posix.F_SETFD, Posix.fcntl (fd, Posix.F_GETFD) | Posix.FD_CLOEXEC);
}
private void disable_sigpipe (int fd) {
#if DARWIN
Posix.fcntl (fd, Darwin.XNU.F_SETNOSIGPIPE, true);
#endif
}
private void configure_terminal_attributes (int fd) {
var tios = Posix.termios ();
Posix.tcgetattr (fd, out tios);
tios.c_oflag &= ~Posix.ONLCR;
tios.c_cflag = (tios.c_cflag & Posix.CLOCAL) | Posix.CS8 | Posix.CREAD | Posix.HUPCL;
tios.c_lflag &= ~Posix.ECHO;
Posix.tcsetattr (fd, 0, tios);
}
#endif
}
+52 -12
View File
@@ -46,7 +46,8 @@ namespace Frida {
}
private GLib.Error? _error;
private Gee.ArrayQueue<CompletionFuncEntry> on_complete;
private Gee.ArrayQueue<CompletionFuncEntry>? on_complete;
private Gee.ArrayQueue<ThenHandlerEntry<T>>? on_then;
public async T wait_async (Cancellable? cancellable) throws Frida.Error, IOError {
if (_ready)
@@ -74,7 +75,21 @@ namespace Frida {
return get_result ();
}
private T get_result () throws Frida.Error, IOError {
public void then (owned FutureCompletionHandler<T> handler) {
if (_ready) {
schedule (() => {
handler (this);
return Source.REMOVE;
});
return;
}
if (on_then == null)
on_then = new Gee.ArrayQueue<ThenHandlerEntry<T>> ();
on_then.offer (new ThenHandlerEntry<T> ((owned) handler));
}
public T get_result () throws Frida.Error, IOError {
if (error != null) {
if (error is Frida.Error)
throw (Frida.Error) error;
@@ -111,19 +126,32 @@ namespace Frida {
internal void transition_to_ready () {
_ready = true;
if (on_complete != null && !on_complete.is_empty) {
var source = new IdleSource ();
source.set_priority (Priority.HIGH);
source.set_callback (() => {
CompletionFuncEntry? entry;
while ((entry = on_complete.poll ()) != null)
entry.func ();
on_complete = null;
return false;
if (on_complete != null || on_then != null) {
schedule (() => {
if (on_complete != null) {
CompletionFuncEntry? entry;
while ((entry = on_complete.poll ()) != null)
entry.func ();
on_complete = null;
}
if (on_then != null) {
ThenHandlerEntry? entry;
while ((entry = on_then.poll ()) != null)
entry.handler (this);
on_then = null;
}
return Source.REMOVE;
});
source.attach (MainContext.get_thread_default ());
}
}
private static void schedule (owned SourceFunc function) {
var source = new IdleSource ();
source.set_callback ((owned) function);
source.attach (MainContext.get_thread_default ());
}
}
private class CompletionFuncEntry {
@@ -133,6 +161,14 @@ namespace Frida {
this.func = (owned) func;
}
}
private class ThenHandlerEntry<T> {
public FutureCompletionHandler<T> handler;
public ThenHandlerEntry (owned FutureCompletionHandler<T> handler) {
this.handler = (owned) handler;
}
}
}
public interface Future<T> : Object {
@@ -140,5 +176,9 @@ namespace Frida {
public abstract T? value { get; }
public abstract GLib.Error? error { get; }
public abstract async T wait_async (Cancellable? cancellable) throws Frida.Error, IOError;
public abstract void then (owned FutureCompletionHandler<T> handler);
public abstract T get_result () throws Frida.Error, IOError;
}
public delegate void FutureCompletionHandler<T> (Future<T> future);
}
+1 -1
View File
@@ -30,7 +30,7 @@ _frida_query_windows_computer_name (void)
return g_utf16_to_utf8 (buffer, -1, NULL, NULL, NULL);
}
#elif defined (HAVE_IOS) || defined (HAVE_TVOS)
#elif defined (HAVE_IOS) || defined (HAVE_TVOS) || defined (HAVE_XROS)
#include <CoreFoundation/CoreFoundation.h>
#include <dlfcn.h>
+28 -1
View File
@@ -749,6 +749,19 @@ namespace Frida {
}
}
[DBus (name = "re.frida.GadgetSession17")]
public interface GadgetSession : Object {
public abstract async void break_and_resume (Cancellable? cancellable) throws GLib.Error;
public abstract async void break_and_detach (Cancellable? cancellable) throws GLib.Error;
}
public enum GadgetBreakpointAction {
INVOKE_RETURN,
RESUME,
DETACH,
PAGE_PLAN,
}
[DBus (name = "re.frida.Channel17")]
public interface Channel : Object {
public abstract async void close (Cancellable? cancellable) throws GLib.Error;
@@ -1952,6 +1965,8 @@ namespace Frida {
id = "watchos";
#elif TVOS
id = "tvos";
#elif XROS
id = "xros";
#elif ANDROID
id = "android";
#elif FREEBSD
@@ -2119,6 +2134,7 @@ namespace Frida {
public const string AGENT_SESSION = "/re/frida/AgentSession";
public const string AGENT_CONTROLLER = "/re/frida/AgentController";
public const string AGENT_MESSAGE_SINK = "/re/frida/AgentMessageSink";
public const string GADGET_SESSION = "/re/frida/GadgetSession";
public const string CHANNEL = "/re/frida/Channel";
public const string SERVICE = "/re/frida/Service";
public const string TRANSPORT_BROKER = "/re/frida/TransportBroker";
@@ -2154,7 +2170,10 @@ namespace Frida {
public static string enum_to_nick<T> (int val) {
var klass = (EnumClass) typeof (T).class_ref ();
return klass.get_value (val).value_nick;
unowned EnumValue? v = klass.get_value (val);
if (v == null)
return "unknown-0x%x".printf (val);
return v.value_nick;
}
}
@@ -2180,5 +2199,13 @@ namespace Frida {
uint64 b = val_b;
return a == b;
}
public uint bytes_hash (Bytes b) {
return b.hash ();
}
public static bool bytes_equal (Bytes a, Bytes b) {
return a.compare (b) == 0;
}
}
}
+150 -10
View File
@@ -128,6 +128,11 @@ namespace Frida {
set;
}
public WebRequestHandler? request_handler {
get;
set;
}
public EndpointParameters (string? address = null, uint16 port = 0, TlsCertificate? certificate = null,
string? origin = null, AuthenticationService? auth_service = null, File? asset_root = null) {
Object (
@@ -141,6 +146,75 @@ namespace Frida {
}
}
public interface WebRequestHandler : Object {
public abstract async WebResponse? handle_request (WebRequest request, Cancellable? cancellable) throws Error, IOError;
}
public sealed class WebRequest : Object {
public string method {
get;
construct;
}
public string path {
get;
construct;
}
public string? query_string {
get;
construct;
}
public Bytes? body {
get;
construct;
}
private Soup.MessageHeaders raw_headers;
internal WebRequest (string method, string path, string? query_string, Soup.MessageHeaders headers, Bytes? body) {
Object (method: method, path: path, query_string: query_string, body: body);
raw_headers = headers;
}
public void foreach_header (WebRequestHeaderFunc func) {
raw_headers.foreach ((name, val) => {
func (name, val);
});
}
}
public delegate void WebRequestHeaderFunc (string name, string val);
public sealed class WebResponse : Object {
public uint status {
get;
construct;
}
public Bytes body {
get;
construct;
}
private Soup.MessageHeaders raw_headers = new Soup.MessageHeaders (RESPONSE);
public WebResponse (uint status, Bytes body) {
Object (status: status, body: body);
}
public void add_header (string name, string val) {
raw_headers.append (name, val);
}
internal void write_headers_to (Soup.MessageHeaders target) {
raw_headers.foreach ((name, val) => {
target.replace (name, val);
});
}
}
public async IOStream negotiate_connection (IOStream stream, WebServiceTransport transport, string host, string? origin,
Cancellable? cancellable) throws Error, IOError {
var input = (DataInputStream) Object.new (typeof (DataInputStream),
@@ -468,14 +542,14 @@ namespace Frida {
server.add_websocket_handler ("/ws", endpoint_params.origin, null, on_websocket_opened);
if (endpoint_params.asset_root != null)
server.add_handler (null, on_asset_request);
if (endpoint_params.request_handler != null || endpoint_params.asset_root != null)
server.add_handler (null, on_http_request);
}
public void close () {
io_cancellable.cancel ();
if (endpoint_params.asset_root != null)
if (endpoint_params.request_handler != null || endpoint_params.asset_root != null)
server.remove_handler ("/");
server.remove_handler ("/ws");
@@ -575,20 +649,77 @@ namespace Frida {
connections.remove (connection);
}
private void on_asset_request (Soup.Server server, Soup.ServerMessage msg, string path,
private void on_http_request (Soup.Server server, Soup.ServerMessage msg, string path,
HashTable<string, string>? query) {
msg.get_response_headers ().replace ("Server", "Frida/" + _version_string ());
unowned string method = msg.get_method ();
if (method != "GET" && method != "HEAD") {
msg.set_status (Soup.Status.METHOD_NOT_ALLOWED, null);
msg.pause ();
handle_http_request.begin (msg, path);
}
private async void handle_http_request (Soup.ServerMessage msg, string path) {
WebRequestHandler? handler = endpoint_params.request_handler;
if (handler != null) {
if (yield try_request_handler (handler, msg, path, io_cancellable))
return;
}
File? asset_root = endpoint_params.asset_root;
if (asset_root != null) {
unowned string method = msg.get_method ();
if (method != "GET" && method != "HEAD") {
msg.set_status (Soup.Status.METHOD_NOT_ALLOWED, null);
msg.unpause ();
return;
}
File location = asset_root.resolve_relative_path (path.next_char ());
yield handle_asset_request (path, location, msg);
return;
}
File location = endpoint_params.asset_root.resolve_relative_path (path.next_char ());
msg.set_status (Soup.Status.NOT_FOUND, null);
msg.unpause ();
}
msg.pause ();
handle_asset_request.begin (path, location, msg);
private static async bool try_request_handler (WebRequestHandler handler, Soup.ServerMessage msg, string path,
Cancellable? cancellable) {
var body = msg.get_request_body ();
Bytes? request_body = (body.length != 0) ? body.flatten () : null;
unowned Uri? uri = msg.get_uri ();
string? query_string = (uri != null) ? uri.get_query () : null;
var request = new WebRequest (msg.get_method (), path, query_string, msg.get_request_headers (),
request_body);
WebResponse? response;
try {
response = yield handler.handle_request (request, cancellable);
} catch (Error e) {
msg.set_status (Soup.Status.INTERNAL_SERVER_ERROR, null);
msg.set_response ("text/plain; charset=utf-8", Soup.MemoryUse.COPY, e.message.data);
msg.unpause ();
return true;
} catch (IOError e) {
msg.unpause ();
return true;
}
if (response == null)
return false;
apply_response (msg, response);
msg.unpause ();
return true;
}
private static void apply_response (Soup.ServerMessage msg, WebResponse response) {
msg.set_status (response.status, null);
response.write_headers_to (msg.get_response_headers ());
Bytes body = response.body;
if (body.length > 0)
msg.get_response_body ().append_bytes (body);
}
private async void handle_asset_request (string path, File file, Soup.ServerMessage msg) {
@@ -940,6 +1071,12 @@ namespace Frida {
Memory.copy (buffer, recv_queue.data, n);
recv_queue.remove_range (0, (uint) n);
if (recv_queue.len == 0) {
#if HAVE_SOUP_WEBSOCKET_BACKPRESSURE
websocket.resume_input ();
#endif
}
update_pending_io ();
} else {
if (state == OPEN)
@@ -1006,6 +1143,9 @@ namespace Frida {
private void on_message (int type, Bytes message) {
with_state_lock (() => {
recv_queue.append (message.get_data ());
#if HAVE_SOUP_WEBSOCKET_BACKPRESSURE
websocket.pause_input ();
#endif
update_pending_io ();
});
}
+42 -1
View File
@@ -57,6 +57,22 @@ namespace Frida {
push_scope (v);
}
public string[] list_members () throws Error {
var scope = peek_scope ();
if (scope.dict == null)
throw new Error.PROTOCOL ("Dictionary expected, but at %s", scope.val.print (true));
var members = new Gee.ArrayList<string> ();
foreach (var item in scope.val) {
string k;
Variant v;
item.get ("{sv}", out k, out v);
members.add (k);
}
return members.to_array ();
}
public bool has_member (string name) throws Error {
var scope = peek_scope ();
if (scope.dict == null)
@@ -272,7 +288,7 @@ namespace Frida {
public JsonObjectReader (string json) throws Error {
try {
reader = new Json.Reader (Json.from_string (json));
reader = make_json_reader (json);
} catch (GLib.Error e) {
throw new Error.INVALID_ARGUMENT ("%s", e.message);
}
@@ -388,4 +404,29 @@ namespace Frida {
throw new Error.PROTOCOL ("%s", e.message);
}
}
/*
* Constructs a Json.Reader for the given JSON string, working around the
* json_node_copy() bug in unpatched json-glib (GNOME bugzilla #774684).
*
* Json.Reader's set_root() copies the supplied node via json_node_copy().
* For object/array nodes that copy is a thin shell that shares the original
* JsonObject/JsonArray via refcount, but the members inside the shared
* container have their parent pointers set to the *original* root, not the
* shell. If the original is then dropped, json_reader_end_member()'s walk
* via json_node_get_parent() touches a freed node — which on builds with
* glib checks enabled (e.g. Fedora) trips JSON_NODE_IS_VALID and aborts.
*
* We keep the original root alive by attaching it to the reader as object
* data; the destroy notify drops our reference when the reader is finalized.
*/
public Json.Reader make_json_reader (string json) throws GLib.Error {
return make_json_reader_from_node (Json.from_string (json));
}
public Json.Reader make_json_reader_from_node (Json.Node root) {
var reader = new Json.Reader (root);
reader.set_data<Json.Node> ("frida-json-root", root);
return reader;
}
}
+22
View File
@@ -0,0 +1,22 @@
namespace Frida {
public sealed class StdioPipes : Object {
public OutputStream input {
get;
construct;
}
public InputStream output {
get;
construct;
}
public InputStream error {
get;
construct;
}
public StdioPipes (OutputStream input, InputStream output, InputStream error) {
Object (input: input, output: output, error: error);
}
}
}
+860
View File
@@ -0,0 +1,860 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import annotations
import argparse
import re
from dataclasses import dataclass
from pathlib import Path
from typing import Dict, List, Optional, Tuple
MAX_ARGS = 9
@dataclass(frozen=True)
class SyscallArg:
type: str
name: str
@dataclass(frozen=True)
class SyscallSignature:
name: str
args: Tuple[SyscallArg, ...]
MACH_TRAP_INDEXED_CALL_RE = re.compile(r"/\*\s*(?P<idx>\d+)\s*\*/\s*MACH_TRAP\s*\(")
MACH_TRAPS_IFNDEF_KERNEL_RE = re.compile(r"^\s*#ifndef\s+KERNEL\b", re.MULTILINE)
MACH_TRAPS_ELSE_KERNEL_RE = re.compile(r"^\s*#else\b.*\bKERNEL\b", re.MULTILINE)
USER_EXTERN_PROTO_RE = re.compile(
r"^\s*extern\s+(?P<ret>.+?)\s+(?P<fn>[A-Za-z_]\w*)\s*\((?P<args>.*?)\)\s*;",
re.MULTILINE | re.DOTALL,
)
KERNEL_STRUCT_RE = re.compile(
r"\bstruct\s+(?P<name>[A-Za-z_]\w*)\s*\{\s*(?P<body>.*?)\s*\}\s*;",
re.DOTALL,
)
KERNEL_TRAP_EXTERN_RE = re.compile(
r"^\s*(?:extern\s+)?(?P<ret>.+?)\s+(?P<fn>[A-Za-z_]\w*)\s*\(\s*struct\s+(?P<args_struct>[A-Za-z_]\w*)\s*\*\s*args\s*\)\s*;",
re.MULTILINE | re.DOTALL,
)
PAD_ARG_RE = re.compile(
r"\bPAD_ARG_\s*\(\s*(?P<ty>[^,]+?)\s*,\s*(?P<name>[^)]+?)\s*\)\s*;",
)
PLAIN_FIELD_RE = re.compile(r"^\s*(?P<ty>.+?)\s+(?P<name>[A-Za-z_]\w*)\s*;\s*$")
BSD_MASTER_ENTRY_RE = re.compile(
r"^\s*(?P<nr>\d+)\s+(?P<audit>\S+)\s+(?P<files>\S+)\s+\{\s*(?P<proto>[^}]+?)\s*\}\s*(?:\{.*\})?\s*$"
)
BSD_MASTER_PROTO_RE = re.compile(
r"^\s*(?P<ret>.+?)\s+(?P<fn>[A-Za-z_]\w*)\s*\((?P<args>.*)\)\s*(?P<attrs>.*)$",
re.DOTALL,
)
LINE_COMMENT_RE = re.compile(r"//.*$")
BLOCK_COMMENT_RE = re.compile(r"/\*[^*]*\*+(?:[^/*][^*]*\*+)*/")
TRAILING_ARRAY_SUFFIX_RE = re.compile(r"\[[^\]]*\]\s*$")
POINTER_SPACING_RE = re.compile(r"\s*\*\s*")
PARAM_NAME_RE = re.compile(r"[A-Za-z_]\w*$")
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--kernel-tree", required=True)
ap.add_argument("--out-vala", required=True)
ap.add_argument("--out-c", required=True)
args = ap.parse_args()
kernel_tree = Path(args.kernel_tree).resolve()
if not kernel_tree.exists():
raise SystemExit(f"--kernel-tree does not exist: {kernel_tree}")
mach_numbers, mach_sigs = load_mach_traps(kernel_tree)
bsd_numbers, bsd_sigs = load_bsd_syscalls_master(kernel_tree)
vala = render_vala(
mach_numbers=mach_numbers,
bsd_numbers=bsd_numbers,
)
c_src = render_c_source(
mach_numbers=mach_numbers,
bsd_numbers=bsd_numbers,
mach_sigs=mach_sigs,
bsd_sigs=bsd_sigs,
)
out_vala = Path(args.out_vala)
out_c = Path(args.out_c)
out_vala.parent.mkdir(parents=True, exist_ok=True)
out_c.parent.mkdir(parents=True, exist_ok=True)
out_vala.write_text(vala, encoding="utf-8")
out_c.write_text(c_src, encoding="utf-8")
return 0
def load_mach_traps(
kernel_tree: Path,
) -> Tuple[Dict[int, str], Dict[str, SyscallSignature]]:
table_path = kernel_tree / "osfmk" / "kern" / "syscall_sw.c"
if not table_path.exists():
raise RuntimeError(f"Missing Mach trap table source: {table_path}")
header_path = kernel_tree / "osfmk" / "mach" / "mach_traps.h"
if not header_path.exists():
raise RuntimeError(f"Missing Mach traps header: {header_path}")
table_text = table_path.read_text(encoding="utf-8", errors="ignore")
trap_routines = parse_mach_trap_table(table_text, table_path)
header_text = header_path.read_text(encoding="utf-8", errors="ignore")
userspace_text, kernel_text = split_mach_traps_header(header_text, header_path)
userspace_protos = parse_userspace_mach_traps_prototypes(
userspace_text, header_path
)
kernel_argmap = parse_kernel_mach_traps_args(kernel_text, header_path)
numbers: Dict[int, str] = {}
sigs: Dict[str, SyscallSignature] = {}
for index, routine in trap_routines:
if routine == "kern_invalid":
continue
nr = -index
public_name = normalize_mach_name(routine)
if public_name == "":
raise RuntimeError(f"{table_path}: empty normalized name from {routine!r}")
if nr in numbers:
raise RuntimeError(f"{table_path}: duplicate mach trap number {nr}")
if public_name in sigs:
raise RuntimeError(
f"{table_path}: normalized Mach name collision for {public_name!r}"
)
args = resolve_mach_trap_signature(
routine=routine,
userspace_protos=userspace_protos,
kernel_argmap=kernel_argmap,
table_path=table_path,
)
if len(args) > MAX_ARGS:
raise RuntimeError(
f"{table_path}: trap {routine!r} has {len(args)} args; max supported is {MAX_ARGS}"
)
numbers[nr] = public_name
sigs[public_name] = SyscallSignature(name=public_name, args=tuple(args))
return numbers, sigs
def parse_mach_trap_table(text: str, path: Path) -> List[Tuple[int, str]]:
anchor = text.find("mach_trap_table")
if anchor == -1:
raise RuntimeError(f"{path}: mach_trap_table not found")
brace = text.find("{", anchor)
if brace == -1:
raise RuntimeError(f"{path}: mach_trap_table '{{' not found")
payload, _ = extract_brace_payload(text, brace, path)
by_index: Dict[int, str] = {}
off = 0
while True:
m = MACH_TRAP_INDEXED_CALL_RE.search(payload, off)
if m is None:
break
idx = int(m.group("idx"), 10)
open_paren = m.end(0) - 1
args_blob, end_off = extract_parentheses_payload(payload, open_paren, path)
parts = [
a.strip() for a in split_top_level_commas(args_blob) if a.strip() != ""
]
if len(parts) < 1:
raise RuntimeError(f"{path}: bad MACH_TRAP() entry: {args_blob!r}")
routine = parts[0]
prev = by_index.get(idx)
if prev is None:
by_index[idx] = routine
else:
if prev == routine:
pass
elif prev == "kern_invalid" and routine != "kern_invalid":
by_index[idx] = routine
elif routine == "kern_invalid" and prev != "kern_invalid":
pass
else:
raise RuntimeError(
f"{path}: conflicting MACH_TRAP entries for index {idx}: {prev!r} vs {routine!r}"
)
off = end_off
return sorted(by_index.items(), key=lambda kv: kv[0])
def split_mach_traps_header(text: str, path: Path) -> Tuple[str, str]:
m_start = MACH_TRAPS_IFNDEF_KERNEL_RE.search(text)
if m_start is None:
raise RuntimeError(f"{path}: missing '#ifndef KERNEL'")
m_else = MACH_TRAPS_ELSE_KERNEL_RE.search(text, m_start.end())
if m_else is None:
raise RuntimeError(f"{path}: missing '#else ... KERNEL ...'")
userspace = text[m_start.end():m_else.start()]
kernel = text[m_else.end():]
return userspace, kernel
def parse_userspace_mach_traps_prototypes(
userspace_text: str, path: Path
) -> Dict[str, Tuple[SyscallArg, ...]]:
protos: Dict[str, Tuple[SyscallArg, ...]] = {}
for m in USER_EXTERN_PROTO_RE.finditer(userspace_text):
fn = m.group("fn").strip()
args_blob = m.group("args").strip()
ret_blob = strip_c_comments(m.group("ret")).strip()
if ret_blob == "":
raise RuntimeError(f"{path}: empty return type for {fn!r}")
line_no = line_number_at_offset(userspace_text, m.start())
args = parse_c_param_list(args_blob, path, line_no)
cur = tuple(args)
prev = protos.get(fn)
if prev is not None and prev != cur:
raise RuntimeError(f"{path}:{line_no}: conflicting prototype for {fn!r}")
protos[fn] = cur
return protos
def parse_kernel_mach_traps_args(
kernel_text: str, path: Path
) -> Dict[str, Tuple[SyscallArg, ...]]:
text = strip_c_comments(kernel_text)
structs: Dict[str, str] = {}
for m in KERNEL_STRUCT_RE.finditer(text):
name = m.group("name").strip()
body = m.group("body")
structs[name] = body
fn_to_struct: Dict[str, str] = {}
for m in KERNEL_TRAP_EXTERN_RE.finditer(text):
fn = m.group("fn").strip()
args_struct = m.group("args_struct").strip()
fn_to_struct[fn] = args_struct
out: Dict[str, Tuple[SyscallArg, ...]] = {}
for fn, args_struct in fn_to_struct.items():
body = structs.get(args_struct)
if body is None:
continue
args = parse_mach_args_struct_body(body, path)
out[fn] = tuple(args)
return out
def parse_mach_args_struct_body(body: str, path: Path) -> List[SyscallArg]:
args: List[SyscallArg] = []
body = strip_c_comments(body)
for raw_ln in body.splitlines():
ln = raw_ln.strip()
if ln == "" or ln.startswith("#"):
continue
if "PAD_ARG_8" in ln:
continue
m = PAD_ARG_RE.search(ln)
if m is not None:
ty = normalize_whitespace(m.group("ty").strip())
name = normalize_whitespace(m.group("name").strip())
if ty == "" or name == "":
raise RuntimeError(f"{path}: bad PAD_ARG_ in args struct: {raw_ln!r}")
args.append(SyscallArg(type=ty, name=name))
continue
m = PLAIN_FIELD_RE.match(ln)
if m is not None:
ty = normalize_whitespace(m.group("ty").strip())
name = m.group("name").strip()
if ty == "" or name == "":
raise RuntimeError(f"{path}: bad field in args struct: {raw_ln!r}")
args.append(SyscallArg(type=ty, name=name))
continue
if len(args) == 1 and args[0].name == "dummy":
return []
return args
def resolve_mach_trap_signature(
*,
routine: str,
userspace_protos: Dict[str, Tuple[SyscallArg, ...]],
kernel_argmap: Dict[str, Tuple[SyscallArg, ...]],
table_path: Path,
) -> List[SyscallArg]:
def get_userspace(name: str) -> Optional[Tuple[SyscallArg, ...]]:
return userspace_protos.get(name)
def get_kernel(name: str) -> Optional[Tuple[SyscallArg, ...]]:
return kernel_argmap.get(name)
proto_args = get_userspace(routine)
if proto_args is None and routine.endswith("_trap"):
proto_args = get_userspace(routine[: -len("_trap")])
if proto_args is not None:
return list(proto_args)
proto_args = get_kernel(routine)
if proto_args is None and routine.endswith("_trap"):
proto_args = get_kernel(routine[: -len("_trap")])
if proto_args is None:
raise RuntimeError(
f"{table_path}: missing userspace prototype for {routine!r}, and no kernel extern(struct *_args *args) mapping found"
)
return list(proto_args)
def normalize_mach_name(routine: str) -> str:
if routine.startswith("_"):
routine = routine[1:]
if routine.startswith("kernelrpc_"):
routine = routine[len("kernelrpc_"):]
if routine.endswith("_trap"):
routine = routine[: -len("_trap")]
return routine
def load_bsd_syscalls_master(
kernel_tree: Path,
) -> Tuple[Dict[int, str], Dict[str, SyscallSignature]]:
path = kernel_tree / "bsd" / "kern" / "syscalls.master"
if not path.exists():
raise RuntimeError(f"Missing BSD master file: {path}")
numbers: Dict[int, str] = {}
sigs: Dict[str, SyscallSignature] = {}
lines = path.read_text(encoding="utf-8", errors="ignore").splitlines()
stack: List[bool] = []
active = True
for line_no, raw in enumerate(lines, start=1):
line = raw.rstrip("\n")
stripped = line.lstrip()
if (
stripped.startswith("#if ")
or stripped.startswith("#ifdef ")
or stripped.startswith("#ifndef ")
):
stack.append(active)
continue
if stripped.startswith("#else"):
if not stack:
raise RuntimeError(f"{path}:{line_no}: #else without #if")
active = False
continue
if stripped.startswith("#endif"):
if not stack:
raise RuntimeError(f"{path}:{line_no}: #endif without #if")
active = stack.pop()
continue
if not active:
continue
m = BSD_MASTER_ENTRY_RE.match(line)
if m is None:
continue
nr = int(m.group("nr"), 10)
proto_blob = strip_c_comments(m.group("proto")).strip()
mp = BSD_MASTER_PROTO_RE.match(proto_blob)
if mp is None:
raise RuntimeError(
f"{path}:{line_no}: cannot parse prototype: {proto_blob!r}"
)
fn = mp.group("fn").strip()
args_blob = mp.group("args").strip()
if fn in {"nosys", "enosys"}:
continue
public_name = normalize_bsd_name(fn)
if public_name == "":
raise RuntimeError(f"{path}:{line_no}: empty normalized name from {fn!r}")
if nr in numbers:
raise RuntimeError(f"{path}:{line_no}: duplicate syscall number {nr}")
if public_name in sigs:
raise RuntimeError(
f"{path}:{line_no}: duplicate syscall name {public_name!r}"
)
args = parse_c_param_list(args_blob, path, line_no)
if len(args) > MAX_ARGS:
raise RuntimeError(
f"{path}:{line_no}: syscall {public_name!r} has {len(args)} args; max supported is {MAX_ARGS}"
)
numbers[nr] = public_name
sigs[public_name] = SyscallSignature(name=public_name, args=tuple(args))
return numbers, sigs
def normalize_bsd_name(fn: str) -> str:
if fn.startswith("sys_"):
return fn[len("sys_"):]
if fn.startswith("__"):
return fn[2:]
return fn
def strip_c_comments(s: str) -> str:
s = LINE_COMMENT_RE.sub("", s)
while True:
new_s = BLOCK_COMMENT_RE.sub("", s)
if new_s == s:
break
s = new_s
return s
def split_top_level_commas(text: str) -> List[str]:
parts: List[str] = []
buf: List[str] = []
depth = 0
in_string = False
string_quote = ""
cursor = 0
while cursor < len(text):
ch = text[cursor]
if in_string:
buf.append(ch)
if ch == "\\" and cursor + 1 < len(text):
buf.append(text[cursor + 1])
cursor += 2
continue
if ch == string_quote:
in_string = False
cursor += 1
continue
if ch in ("'", '"'):
in_string = True
string_quote = ch
buf.append(ch)
cursor += 1
continue
if ch == "(":
depth += 1
elif ch == ")":
depth = max(0, depth - 1)
if ch == "," and depth == 0:
parts.append("".join(buf).strip())
buf = []
cursor += 1
continue
buf.append(ch)
cursor += 1
parts.append("".join(buf).strip())
return parts
def parse_c_param_list(args_blob: str, path: Path, line_no: int) -> List[SyscallArg]:
raw = strip_c_comments(args_blob).strip()
if raw == "" or raw == "void":
return []
raw_params = [p.strip() for p in split_top_level_commas(raw) if p.strip() != ""]
if len(raw_params) == 1 and raw_params[0] == "void":
return []
args: List[SyscallArg] = []
for idx, p in enumerate(raw_params):
ty, name = split_param_decl(p, path, line_no)
if name is None:
name = f"arg{idx}"
if ty == "user_addr_t" and name in {"attrname", "link", "path"}:
ty = "char *"
args.append(SyscallArg(type=ty, name=name))
return args
def split_param_decl(decl: str, path: Path, line_no: int) -> Tuple[str, Optional[str]]:
d = strip_c_comments(decl).strip()
if d == "" or d == "void":
raise RuntimeError(f"{path}:{line_no}: bad parameter decl: {decl!r}")
tokens = _tokenize_decl(d)
ty_tokens, name = _split_type_and_name(tokens)
ty = _format_type(ty_tokens)
if not ty:
raise RuntimeError(
f"{path}:{line_no}: cannot parse parameter type from {decl!r}"
)
return ty, _camel_to_snake(name) if name else None
def _tokenize_decl(s: str) -> list[str]:
out = []
for c in s:
out.append(" * " if c == "*" else c)
return "".join(out).split()
def _split_type_and_name(tokens: list[str]) -> Tuple[list[str], Optional[str]]:
if not tokens:
return [], None
last = tokens[-1]
if last == "*":
return tokens, None
stars, remainder = _split_leading_stars(last)
if stars:
if _is_identifier(remainder):
return tokens[:-1] + ["*"] * stars, remainder
return tokens, None
if _is_identifier(last):
return tokens[:-1], last
return tokens, None
def _format_type(tokens: list[str]) -> str:
formatted: list[str] = []
i = 0
while i < len(tokens):
if tokens[i] != "*":
formatted.append(tokens[i])
i += 1
continue
j = i
while j < len(tokens) and tokens[j] == "*":
j += 1
formatted.append("*" * (j - i))
i = j
return " ".join(formatted).strip()
def _split_leading_stars(token: str) -> Tuple[int, str]:
i = 0
while i < len(token) and token[i] == "*":
i += 1
return i, token[i:]
def _is_identifier(s: str) -> bool:
if not s:
return False
if not (s[0].isalpha() or s[0] == "_"):
return False
return all(c.isalnum() or c == "_" for c in s)
def _camel_to_snake(name: str) -> str:
out = []
for i, c in enumerate(name):
if (
c.isupper()
and i > 0
and (name[i - 1].islower() or (i + 1 < len(name) and name[i + 1].islower()))
):
out.append("_")
out.append(c.lower())
return "".join(out)
def normalize_whitespace(s: str) -> str:
return " ".join(s.split())
def line_number_at_offset(text: str, offset: int) -> int:
return text.count("\n", 0, offset) + 1
def extract_parentheses_payload(
text: str, open_paren_offset: int, path: Path
) -> Tuple[str, int]:
if (
open_paren_offset < 0
or open_paren_offset >= len(text)
or text[open_paren_offset] != "("
):
raise RuntimeError(f"{path}: expected '(' at offset {open_paren_offset}")
depth = 0
cursor = open_paren_offset
start = open_paren_offset + 1
in_string = False
string_quote = ""
while cursor < len(text):
ch = text[cursor]
if in_string:
if ch == "\\":
cursor += 2
continue
if ch == string_quote:
in_string = False
cursor += 1
continue
if ch in ("'", '"'):
in_string = True
string_quote = ch
cursor += 1
continue
if ch == "(":
depth += 1
elif ch == ")":
depth -= 1
if depth == 0:
return text[start:cursor], cursor + 1
cursor += 1
raise RuntimeError(f"{path}: unterminated parentheses payload")
def extract_brace_payload(
text: str, open_brace_offset: int, path: Path
) -> Tuple[str, int]:
if (
open_brace_offset < 0
or open_brace_offset >= len(text)
or text[open_brace_offset] != "{"
):
raise RuntimeError(f"{path}: expected '{{' at offset {open_brace_offset}")
depth = 0
cursor = open_brace_offset
start = open_brace_offset + 1
in_string = False
string_quote = ""
while cursor < len(text):
ch = text[cursor]
if in_string:
if ch == "\\":
cursor += 2
continue
if ch == string_quote:
in_string = False
cursor += 1
continue
if ch in ("'", '"'):
in_string = True
string_quote = ch
cursor += 1
continue
if ch == "{":
depth += 1
elif ch == "}":
depth -= 1
if depth == 0:
return text[start:cursor], cursor + 1
cursor += 1
raise RuntimeError(f"{path}: unterminated brace payload")
def render_vala(*, mach_numbers: Dict[int, str], bsd_numbers: Dict[int, str]) -> str:
out: List[str] = []
out += [
"// AUTO-GENERATED FILE. DO NOT EDIT.\n",
"\n",
"namespace Frida {\n",
"\tpublic extern unowned XnuSyscallSignature[] get_xnu_mach_traps ();\n",
"\tpublic extern unowned XnuSyscallSignature[] get_xnu_bsd_syscalls ();\n",
"\n",
"\tpublic struct XnuSyscallSignature {\n",
"\t\tpublic int nr;\n",
"\t\tpublic string name;\n",
"\t\tpublic uint8 nargs;\n",
f"\t\tpublic XnuSyscallArg args[{MAX_ARGS}];\n",
"\t}\n",
"\n",
"\tpublic struct XnuSyscallArg {\n",
"\t\tpublic string? type;\n",
"\t\tpublic string? name;\n",
"\t}\n",
"\n",
"\tpublic enum XnuMachTrap {\n",
]
for nr, name in sorted(mach_numbers.items(), key=lambda kv: kv[0], reverse=True):
out += [f"\t\t{name.upper()} = {nr},\n"]
out += [
"\t}\n",
"\n",
"\tpublic enum XnuBsdSyscall {\n",
]
for nr, name in sorted(bsd_numbers.items(), key=lambda kv: kv[0]):
out += [f"\t\t{name.upper()} = {nr},\n"]
out += [
"\t}\n",
"}\n",
]
return "".join(out)
def render_c_source(
*,
mach_numbers: Dict[int, str],
bsd_numbers: Dict[int, str],
mach_sigs: Dict[str, SyscallSignature],
bsd_sigs: Dict[str, SyscallSignature],
) -> str:
out: List[str] = []
out += [
"/* AUTO-GENERATED FILE. DO NOT EDIT. */\n",
"\n",
'#include "frida-base.h"\n',
"\n",
]
emit_c_signature_table(
out,
c_var="frida_xnu_mach_traps",
numbers=mach_numbers,
sigs=mach_sigs,
reverse=True,
)
emit_c_signature_table(
out,
c_var="frida_xnu_bsd_syscalls",
numbers=bsd_numbers,
sigs=bsd_sigs,
)
emit_c_table_getter(
out, c_func="frida_get_xnu_mach_traps", c_var="frida_xnu_mach_traps"
)
out += ["\n"]
emit_c_table_getter(
out, c_func="frida_get_xnu_bsd_syscalls", c_var="frida_xnu_bsd_syscalls"
)
return "".join(out)
def emit_c_signature_table(
out: List[str],
*,
c_var: str,
numbers: Dict[int, str],
sigs: Dict[str, SyscallSignature],
reverse: bool = False,
) -> None:
out += [
f"static const FridaXnuSyscallSignature {c_var}[] =\n",
"{\n",
]
for nr, name in sorted(numbers.items(), key=lambda kv: kv[0], reverse=reverse):
sig = sigs[name]
args_parts: List[str] = []
for a in sig.args:
args_parts += [f"{{ {c_escape(a.type)}, {c_escape(a.name)} }}"]
args_blob = ", ".join(args_parts)
if args_blob != "":
out += [
f" {{ {nr}, {c_escape(name)}, {len(sig.args)}, {{ {args_blob} }} }},\n"
]
else:
out += [f" {{ {nr}, {c_escape(name)}, 0, {{}} }},\n"]
out += [
"};\n",
"\n",
]
def emit_c_table_getter(out: List[str], *, c_func: str, c_var: str) -> None:
out += [
"FridaXnuSyscallSignature *\n",
f"{c_func} (int * len)\n",
"{\n",
" if (len != NULL)\n",
f" *len = G_N_ELEMENTS ({c_var});\n",
f" return (FridaXnuSyscallSignature *) {c_var};\n",
"}\n",
]
def c_escape(s: str) -> str:
return '"' + s.replace("\\", "\\\\").replace('"', '\\"') + '"'
if __name__ == "__main__":
raise SystemExit(main())
+542
View File
@@ -0,0 +1,542 @@
/* AUTO-GENERATED FILE. DO NOT EDIT. */
#include "frida-base.h"
static const FridaXnuSyscallSignature frida_xnu_mach_traps[] =
{
{ -10, "mach_vm_allocate", 4, { { "mach_port_name_t", "target" }, { "mach_vm_offset_t *", "addr" }, { "mach_vm_size_t", "size" }, { "int", "flags" } } },
{ -11, "mach_vm_purgable_control", 4, { { "mach_port_name_t", "target" }, { "mach_vm_offset_t", "address" }, { "vm_purgable_t", "control" }, { "int *", "state" } } },
{ -12, "mach_vm_deallocate", 3, { { "mach_port_name_t", "target" }, { "mach_vm_address_t", "address" }, { "mach_vm_size_t", "size" } } },
{ -13, "task_dyld_process_info_notify_get", 2, { { "mach_port_name_array_t", "names_addr" }, { "natural_t *", "names_count_addr" } } },
{ -14, "mach_vm_protect", 5, { { "mach_port_name_t", "target" }, { "mach_vm_address_t", "address" }, { "mach_vm_size_t", "size" }, { "boolean_t", "set_maximum" }, { "vm_prot_t", "new_protection" } } },
{ -15, "mach_vm_map", 6, { { "mach_port_name_t", "target" }, { "mach_vm_offset_t *", "address" }, { "mach_vm_size_t", "size" }, { "mach_vm_offset_t", "mask" }, { "int", "flags" }, { "vm_prot_t", "cur_protection" } } },
{ -16, "mach_port_allocate", 3, { { "mach_port_name_t", "target" }, { "mach_port_right_t", "right" }, { "mach_port_name_t *", "name" } } },
{ -18, "mach_port_deallocate", 2, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" } } },
{ -19, "mach_port_mod_refs", 4, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "mach_port_right_t", "right" }, { "mach_port_delta_t", "delta" } } },
{ -20, "mach_port_move_member", 3, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "member" }, { "mach_port_name_t", "after" } } },
{ -21, "mach_port_insert_right", 4, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "mach_port_name_t", "poly" }, { "mach_msg_type_name_t", "poly_poly" } } },
{ -22, "mach_port_insert_member", 3, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "mach_port_name_t", "pset" } } },
{ -23, "mach_port_extract_member", 3, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "mach_port_name_t", "pset" } } },
{ -24, "mach_port_construct", 4, { { "mach_port_name_t", "target" }, { "mach_port_options_t *", "options" }, { "uint64_t", "context" }, { "mach_port_name_t *", "name" } } },
{ -25, "mach_port_destruct", 4, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "mach_port_delta_t", "srdelta" }, { "uint64_t", "guard" } } },
{ -26, "mach_reply_port", 0, {} },
{ -27, "thread_self", 0, {} },
{ -28, "task_self", 0, {} },
{ -29, "host_self", 0, {} },
{ -31, "mach_msg", 7, { { "mach_msg_header_t *", "msg" }, { "mach_msg_option_t", "option" }, { "mach_msg_size_t", "send_size" }, { "mach_msg_size_t", "rcv_size" }, { "mach_port_name_t", "rcv_name" }, { "mach_msg_timeout_t", "timeout" }, { "mach_port_name_t", "notify" } } },
{ -32, "mach_msg_overwrite", 9, { { "mach_msg_header_t *", "msg" }, { "mach_msg_option_t", "option" }, { "mach_msg_size_t", "send_size" }, { "mach_msg_size_t", "rcv_size" }, { "mach_port_name_t", "rcv_name" }, { "mach_msg_timeout_t", "timeout" }, { "mach_msg_priority_t", "priority" }, { "mach_msg_header_t *", "rcv_msg" }, { "mach_msg_size_t", "rcv_limit" } } },
{ -33, "semaphore_signal", 1, { { "mach_port_name_t", "signal_name" } } },
{ -34, "semaphore_signal_all", 1, { { "mach_port_name_t", "signal_name" } } },
{ -35, "semaphore_signal_thread", 2, { { "mach_port_name_t", "signal_name" }, { "mach_port_name_t", "thread_name" } } },
{ -36, "semaphore_wait", 1, { { "mach_port_name_t", "wait_name" } } },
{ -37, "semaphore_wait_signal", 2, { { "mach_port_name_t", "wait_name" }, { "mach_port_name_t", "signal_name" } } },
{ -38, "semaphore_timedwait", 3, { { "mach_port_name_t", "wait_name" }, { "unsigned int", "sec" }, { "clock_res_t", "nsec" } } },
{ -39, "semaphore_timedwait_signal", 4, { { "mach_port_name_t", "wait_name" }, { "mach_port_name_t", "signal_name" }, { "unsigned int", "sec" }, { "clock_res_t", "nsec" } } },
{ -40, "mach_port_get_attributes", 5, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "mach_port_flavor_t", "flavor" }, { "mach_port_info_t", "port_info_out" }, { "mach_msg_type_number_t *", "port_info_out_cnt" } } },
{ -41, "mach_port_guard", 4, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "uint64_t", "guard" }, { "boolean_t", "strict" } } },
{ -42, "mach_port_unguard", 3, { { "mach_port_name_t", "target" }, { "mach_port_name_t", "name" }, { "uint64_t", "guard" } } },
{ -43, "mach_generate_activity_id", 3, { { "mach_port_name_t", "target" }, { "int", "count" }, { "uint64_t *", "activity_id" } } },
{ -44, "task_name_for_pid", 3, { { "mach_port_name_t", "target_tport" }, { "int", "pid" }, { "mach_port_name_t *", "tn" } } },
{ -45, "task_for_pid", 3, { { "mach_port_name_t", "target_tport" }, { "int", "pid" }, { "mach_port_name_t *", "t" } } },
{ -46, "pid_for_task", 2, { { "mach_port_name_t", "t" }, { "int *", "x" } } },
{ -47, "mach_msg2", 8, { { "void *", "data" }, { "mach_msg_option64_t", "options" }, { "uint64_t", "msgh_bits_and_send_size" }, { "uint64_t", "msgh_remote_and_local_port" }, { "uint64_t", "msgh_voucher_and_id" }, { "uint64_t", "desc_count_and_rcv_name" }, { "uint64_t", "rcv_size_and_priority" }, { "uint64_t", "timeout" } } },
{ -48, "macx_swapon", 4, { { "uint64_t", "filename" }, { "int", "flags" }, { "int", "size" }, { "int", "priority" } } },
{ -49, "macx_swapoff", 2, { { "uint64_t", "filename" }, { "int", "flags" } } },
{ -50, "thread_get_special_reply_port", 0, {} },
{ -51, "macx_triggers", 4, { { "int", "hi_water" }, { "int", "low_water" }, { "int", "flags" }, { "mach_port_t", "alert_port" } } },
{ -52, "macx_backing_store_suspend", 1, { { "boolean_t", "suspend" } } },
{ -53, "macx_backing_store_recovery", 1, { { "int", "pid" } } },
{ -58, "pfz_exit", 0, {} },
{ -59, "swtch_pri", 1, { { "int", "pri" } } },
{ -60, "swtch", 0, {} },
{ -61, "thread_switch", 3, { { "mach_port_name_t", "thread_name" }, { "int", "option" }, { "mach_msg_timeout_t", "option_time" } } },
{ -62, "clock_sleep", 5, { { "mach_port_name_t", "clock_name" }, { "sleep_type_t", "sleep_type" }, { "int", "sleep_sec" }, { "int", "sleep_nsec" }, { "mach_timespec_t *", "wakeup_time" } } },
{ -63, "mach_vm_reclaim_update_kernel_accounting", 2, { { "mach_port_name_t", "target_tport" }, { "uint64_t *", "bytes_reclaimed" } } },
{ -70, "host_create_mach_voucher", 4, { { "mach_port_name_t", "host" }, { "mach_voucher_attr_raw_recipe_array_t", "recipes" }, { "int", "recipes_size" }, { "mach_port_name_t *", "voucher" } } },
{ -72, "mach_voucher_extract_attr_recipe", 4, { { "mach_port_name_t", "voucher_name" }, { "mach_voucher_attr_key_t", "key" }, { "mach_voucher_attr_raw_recipe_t", "recipe" }, { "mach_msg_type_number_t *", "recipe_size" } } },
{ -76, "mach_port_type", 3, { { "ipc_space_t", "task" }, { "mach_port_name_t", "name" }, { "mach_port_type_t *", "ptype" } } },
{ -77, "mach_port_request_notification", 7, { { "ipc_space_t", "task" }, { "mach_port_name_t", "name" }, { "mach_msg_id_t", "msgid" }, { "mach_port_mscount_t", "sync" }, { "mach_port_name_t", "notify" }, { "mach_msg_type_name_t", "notify_poly" }, { "mach_port_name_t *", "previous" } } },
{ -88, "exclaves_ctl", 8, { { "mach_port_name_t", "name" }, { "uint32_t", "operation_and_flags" }, { "uint64_t", "identifier" }, { "mach_vm_address_t", "buffer" }, { "mach_vm_size_t", "size" }, { "mach_vm_size_t", "size2" }, { "mach_vm_size_t", "offset" }, { "mach_vm_address_t", "status" } } },
{ -89, "mach_timebase_info", 1, { { "user_addr_t", "info" } } },
{ -90, "mach_wait_until", 1, { { "uint64_t", "deadline" } } },
{ -91, "mk_timer_create", 0, {} },
{ -92, "mk_timer_destroy", 1, { { "mach_port_name_t", "name" } } },
{ -93, "mk_timer_arm", 2, { { "mach_port_name_t", "name" }, { "uint64_t", "expire_time" } } },
{ -94, "mk_timer_cancel", 2, { { "mach_port_name_t", "name" }, { "user_addr_t", "result_time" } } },
{ -95, "mk_timer_arm_leeway", 4, { { "mach_port_name_t", "name" }, { "uint64_t", "mk_timer_flags" }, { "uint64_t", "expire_time" }, { "uint64_t", "mk_leeway" } } },
{ -96, "debug_control_port_for_pid", 3, { { "mach_port_name_t", "target_tport" }, { "int", "pid" }, { "mach_port_name_t *", "t" } } },
{ -100, "iokit_user_client", 8, { { "void *", "userClientRef" }, { "uint32_t", "index" }, { "void *", "p1" }, { "void *", "p2" }, { "void *", "p3" }, { "void *", "p4" }, { "void *", "p5" }, { "void *", "p6" } } },
};
static const FridaXnuSyscallSignature frida_xnu_bsd_syscalls[] =
{
{ 1, "exit", 1, { { "int", "rval" } } },
{ 2, "fork", 0, {} },
{ 3, "read", 3, { { "int", "fd" }, { "user_addr_t", "cbuf" }, { "user_size_t", "nbyte" } } },
{ 4, "write", 3, { { "int", "fd" }, { "user_addr_t", "cbuf" }, { "user_size_t", "nbyte" } } },
{ 5, "open", 3, { { "char *", "path" }, { "int", "flags" }, { "int", "mode" } } },
{ 6, "close", 1, { { "int", "fd" } } },
{ 7, "wait4", 4, { { "int", "pid" }, { "user_addr_t", "status" }, { "int", "options" }, { "user_addr_t", "rusage" } } },
{ 9, "link", 2, { { "char *", "path" }, { "char *", "link" } } },
{ 10, "unlink", 1, { { "char *", "path" } } },
{ 12, "chdir", 1, { { "char *", "path" } } },
{ 13, "fchdir", 1, { { "int", "fd" } } },
{ 14, "mknod", 3, { { "char *", "path" }, { "int", "mode" }, { "int", "dev" } } },
{ 15, "chmod", 2, { { "char *", "path" }, { "int", "mode" } } },
{ 16, "chown", 3, { { "char *", "path" }, { "int", "uid" }, { "int", "gid" } } },
{ 18, "getfsstat", 3, { { "user_addr_t", "buf" }, { "int", "bufsize" }, { "int", "flags" } } },
{ 20, "getpid", 0, {} },
{ 23, "setuid", 1, { { "uid_t", "uid" } } },
{ 24, "getuid", 0, {} },
{ 25, "geteuid", 0, {} },
{ 26, "ptrace", 4, { { "int", "req" }, { "pid_t", "pid" }, { "caddr_t", "addr" }, { "int", "data" } } },
{ 27, "recvmsg", 3, { { "int", "s" }, { "struct msghdr *", "msg" }, { "int", "flags" } } },
{ 28, "sendmsg", 3, { { "int", "s" }, { "caddr_t", "msg" }, { "int", "flags" } } },
{ 29, "recvfrom", 6, { { "int", "s" }, { "void *", "buf" }, { "size_t", "len" }, { "int", "flags" }, { "struct sockaddr *", "from" }, { "int *", "fromlenaddr" } } },
{ 30, "accept", 3, { { "int", "s" }, { "caddr_t", "name" }, { "socklen_t *", "anamelen" } } },
{ 31, "getpeername", 3, { { "int", "fdes" }, { "caddr_t", "asa" }, { "socklen_t *", "alen" } } },
{ 32, "getsockname", 3, { { "int", "fdes" }, { "caddr_t", "asa" }, { "socklen_t *", "alen" } } },
{ 33, "access", 2, { { "char *", "path" }, { "int", "flags" } } },
{ 34, "chflags", 2, { { "char *", "path" }, { "int", "flags" } } },
{ 35, "fchflags", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 36, "sync", 0, {} },
{ 37, "kill", 3, { { "int", "pid" }, { "int", "signum" }, { "int", "posix" } } },
{ 38, "crossarch_trap", 1, { { "uint32_t", "name" } } },
{ 39, "getppid", 0, {} },
{ 41, "dup", 1, { { "u_int", "fd" } } },
{ 42, "pipe", 0, {} },
{ 43, "getegid", 0, {} },
{ 46, "sigaction", 3, { { "int", "signum" }, { "struct __sigaction *", "nsa" }, { "struct sigaction *", "osa" } } },
{ 47, "getgid", 0, {} },
{ 48, "sigprocmask", 3, { { "int", "how" }, { "user_addr_t", "mask" }, { "user_addr_t", "omask" } } },
{ 49, "getlogin", 2, { { "char *", "namebuf" }, { "u_int", "namelen" } } },
{ 50, "setlogin", 1, { { "char *", "namebuf" } } },
{ 51, "acct", 1, { { "char *", "path" } } },
{ 52, "sigpending", 1, { { "struct sigvec *", "osv" } } },
{ 53, "sigaltstack", 2, { { "struct sigaltstack *", "nss" }, { "struct sigaltstack *", "oss" } } },
{ 54, "ioctl", 3, { { "int", "fd" }, { "u_long", "com" }, { "caddr_t", "data" } } },
{ 55, "reboot", 2, { { "int", "opt" }, { "char *", "msg" } } },
{ 56, "revoke", 1, { { "char *", "path" } } },
{ 57, "symlink", 2, { { "char *", "path" }, { "char *", "link" } } },
{ 58, "readlink", 3, { { "char *", "path" }, { "char *", "buf" }, { "int", "count" } } },
{ 59, "execve", 3, { { "char *", "fname" }, { "char **", "argp" }, { "char **", "envp" } } },
{ 60, "umask", 1, { { "int", "newmask" } } },
{ 61, "chroot", 1, { { "char *", "path" } } },
{ 65, "msync", 3, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "int", "flags" } } },
{ 66, "vfork", 0, {} },
{ 67, "oslog_coproc_reg", 3, { { "const char *", "uuid" }, { "const char *", "file_path" }, { "size_t", "file_path_len" } } },
{ 68, "oslog_coproc", 7, { { "void *", "buff" }, { "uint64_t", "buff_len" }, { "uint32_t", "type" }, { "const char *", "uuid" }, { "uint64_t", "timestamp" }, { "uint32_t", "offset" }, { "uint32_t", "stream_log" } } },
{ 73, "munmap", 2, { { "caddr_ut", "addr" }, { "size_ut", "len" } } },
{ 74, "mprotect", 3, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "int", "prot" } } },
{ 75, "madvise", 3, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "int", "behav" } } },
{ 78, "mincore", 3, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "user_addr_t", "vec" } } },
{ 79, "getgroups", 2, { { "u_int", "gidsetsize" }, { "gid_t *", "gidset" } } },
{ 80, "setgroups", 2, { { "u_int", "gidsetsize" }, { "gid_t *", "gidset" } } },
{ 81, "getpgrp", 0, {} },
{ 82, "setpgid", 2, { { "int", "pid" }, { "int", "pgid" } } },
{ 83, "setitimer", 3, { { "u_int", "which" }, { "struct itimerval *", "itv" }, { "struct itimerval *", "oitv" } } },
{ 85, "swapon", 0, {} },
{ 86, "getitimer", 2, { { "u_int", "which" }, { "struct itimerval *", "itv" } } },
{ 89, "getdtablesize", 0, {} },
{ 90, "dup2", 2, { { "u_int", "from" }, { "u_int", "to" } } },
{ 92, "fcntl", 3, { { "int", "fd" }, { "int", "cmd" }, { "long", "arg" } } },
{ 93, "select", 5, { { "int", "nd" }, { "u_int32_t *", "in" }, { "u_int32_t *", "ou" }, { "u_int32_t *", "ex" }, { "struct timeval *", "tv" } } },
{ 95, "fsync", 1, { { "int", "fd" } } },
{ 96, "setpriority", 3, { { "int", "which" }, { "id_t", "who" }, { "int", "prio" } } },
{ 97, "socket", 3, { { "int", "domain" }, { "int", "type" }, { "int", "protocol" } } },
{ 98, "connect", 3, { { "int", "s" }, { "caddr_t", "name" }, { "socklen_t", "namelen" } } },
{ 100, "getpriority", 2, { { "int", "which" }, { "id_t", "who" } } },
{ 104, "bind", 3, { { "int", "s" }, { "caddr_t", "name" }, { "socklen_t", "namelen" } } },
{ 105, "setsockopt", 5, { { "int", "s" }, { "int", "level" }, { "int", "name" }, { "caddr_t", "val" }, { "socklen_t", "valsize" } } },
{ 106, "listen", 2, { { "int", "s" }, { "int", "backlog" } } },
{ 111, "sigsuspend", 1, { { "sigset_t", "mask" } } },
{ 116, "gettimeofday", 3, { { "struct timeval *", "tp" }, { "struct timezone *", "tzp" }, { "uint64_t *", "mach_absolute_time" } } },
{ 117, "getrusage", 2, { { "int", "who" }, { "struct rusage *", "rusage" } } },
{ 118, "getsockopt", 5, { { "int", "s" }, { "int", "level" }, { "int", "name" }, { "caddr_t", "val" }, { "socklen_t *", "avalsize" } } },
{ 120, "readv", 3, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "u_int", "iovcnt" } } },
{ 121, "writev", 3, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "u_int", "iovcnt" } } },
{ 122, "settimeofday", 2, { { "struct timeval *", "tv" }, { "struct timezone *", "tzp" } } },
{ 123, "fchown", 3, { { "int", "fd" }, { "int", "uid" }, { "int", "gid" } } },
{ 124, "fchmod", 2, { { "int", "fd" }, { "int", "mode" } } },
{ 126, "setreuid", 2, { { "uid_t", "ruid" }, { "uid_t", "euid" } } },
{ 127, "setregid", 2, { { "gid_t", "rgid" }, { "gid_t", "egid" } } },
{ 128, "rename", 2, { { "char *", "from" }, { "char *", "to" } } },
{ 131, "flock", 2, { { "int", "fd" }, { "int", "how" } } },
{ 132, "mkfifo", 2, { { "char *", "path" }, { "int", "mode" } } },
{ 133, "sendto", 6, { { "int", "s" }, { "caddr_t", "buf" }, { "size_t", "len" }, { "int", "flags" }, { "caddr_t", "to" }, { "socklen_t", "tolen" } } },
{ 134, "shutdown", 2, { { "int", "s" }, { "int", "how" } } },
{ 135, "socketpair", 4, { { "int", "domain" }, { "int", "type" }, { "int", "protocol" }, { "int *", "rsv" } } },
{ 136, "mkdir", 2, { { "char *", "path" }, { "int", "mode" } } },
{ 137, "rmdir", 1, { { "char *", "path" } } },
{ 138, "utimes", 2, { { "char *", "path" }, { "struct timeval *", "tptr" } } },
{ 139, "futimes", 2, { { "int", "fd" }, { "struct timeval *", "tptr" } } },
{ 140, "adjtime", 2, { { "struct timeval *", "delta" }, { "struct timeval *", "olddelta" } } },
{ 142, "gethostuuid", 2, { { "unsigned char *", "uuid_buf" }, { "const struct timespec *", "timeoutp" } } },
{ 147, "setsid", 0, {} },
{ 151, "getpgid", 1, { { "pid_t", "pid" } } },
{ 152, "setprivexec", 1, { { "int", "flag" } } },
{ 153, "pread", 4, { { "int", "fd" }, { "user_addr_t", "buf" }, { "user_size_t", "nbyte" }, { "off_t", "offset" } } },
{ 154, "pwrite", 4, { { "int", "fd" }, { "user_addr_t", "buf" }, { "user_size_t", "nbyte" }, { "off_t", "offset" } } },
{ 155, "nfssvc", 2, { { "int", "flag" }, { "caddr_t", "argp" } } },
{ 157, "statfs", 2, { { "char *", "path" }, { "struct statfs *", "buf" } } },
{ 158, "fstatfs", 2, { { "int", "fd" }, { "struct statfs *", "buf" } } },
{ 159, "unmount", 2, { { "char *", "path" }, { "int", "flags" } } },
{ 161, "getfh", 2, { { "char *", "fname" }, { "fhandle_t *", "fhp" } } },
{ 164, "funmount", 2, { { "int", "fd" }, { "int", "flags" } } },
{ 165, "quotactl", 4, { { "const char *", "path" }, { "int", "cmd" }, { "int", "uid" }, { "caddr_t", "arg" } } },
{ 167, "mount", 4, { { "char *", "type" }, { "char *", "path" }, { "int", "flags" }, { "caddr_t", "data" } } },
{ 169, "csops", 4, { { "pid_t", "pid" }, { "uint32_t", "ops" }, { "user_addr_t", "useraddr" }, { "user_size_t", "usersize" } } },
{ 170, "csops_audittoken", 5, { { "pid_t", "pid" }, { "uint32_t", "ops" }, { "user_addr_t", "useraddr" }, { "user_size_t", "usersize" }, { "user_addr_t", "uaudittoken" } } },
{ 173, "waitid", 4, { { "idtype_t", "idtype" }, { "id_t", "id" }, { "siginfo_t *", "infop" }, { "int", "options" } } },
{ 177, "kdebug_typefilter", 2, { { "void **", "addr" }, { "size_t *", "size" } } },
{ 178, "kdebug_trace_string", 3, { { "uint32_t", "debugid" }, { "uint64_t", "str_id" }, { "const char *", "str" } } },
{ 179, "kdebug_trace64", 5, { { "uint32_t", "code" }, { "uint64_t", "arg1" }, { "uint64_t", "arg2" }, { "uint64_t", "arg3" }, { "uint64_t", "arg4" } } },
{ 180, "kdebug_trace", 5, { { "uint32_t", "code" }, { "u_long", "arg1" }, { "u_long", "arg2" }, { "u_long", "arg3" }, { "u_long", "arg4" } } },
{ 181, "setgid", 1, { { "gid_t", "gid" } } },
{ 182, "setegid", 1, { { "gid_t", "egid" } } },
{ 183, "seteuid", 1, { { "uid_t", "euid" } } },
{ 184, "sigreturn", 3, { { "struct ucontext *", "uctx" }, { "int", "infostyle" }, { "user_addr_t", "token" } } },
{ 185, "panic_with_data", 5, { { "uuid_t", "uuid" }, { "void *", "addr" }, { "uint32_t", "len" }, { "uint32_t", "flags" }, { "const char *", "msg" } } },
{ 186, "thread_selfcounts", 3, { { "uint32_t", "kind" }, { "user_addr_t", "buf" }, { "user_size_t", "size" } } },
{ 187, "fdatasync", 1, { { "int", "fd" } } },
{ 188, "stat", 2, { { "char *", "path" }, { "user_addr_t", "ub" } } },
{ 189, "fstat", 2, { { "int", "fd" }, { "user_addr_t", "ub" } } },
{ 190, "lstat", 2, { { "char *", "path" }, { "user_addr_t", "ub" } } },
{ 191, "pathconf", 2, { { "char *", "path" }, { "int", "name" } } },
{ 192, "fpathconf", 2, { { "int", "fd" }, { "int", "name" } } },
{ 194, "getrlimit", 2, { { "u_int", "which" }, { "struct rlimit *", "rlp" } } },
{ 195, "setrlimit", 2, { { "u_int", "which" }, { "struct rlimit *", "rlp" } } },
{ 196, "getdirentries", 4, { { "int", "fd" }, { "char *", "buf" }, { "u_int", "count" }, { "long *", "basep" } } },
{ 197, "mmap", 6, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "int", "prot" }, { "int", "flags" }, { "int", "fd" }, { "off_t", "pos" } } },
{ 199, "lseek", 3, { { "int", "fd" }, { "off_t", "offset" }, { "int", "whence" } } },
{ 200, "truncate", 2, { { "char *", "path" }, { "off_t", "length" } } },
{ 201, "ftruncate", 2, { { "int", "fd" }, { "off_t", "length" } } },
{ 202, "sysctl", 6, { { "int *", "name" }, { "u_int", "namelen" }, { "void *", "old" }, { "size_t *", "oldlenp" }, { "void *", "new" }, { "size_t", "newlen" } } },
{ 203, "mlock", 2, { { "caddr_ut", "addr" }, { "size_ut", "len" } } },
{ 204, "munlock", 2, { { "caddr_ut", "addr" }, { "size_ut", "len" } } },
{ 205, "undelete", 1, { { "char *", "path" } } },
{ 216, "open_dprotected_np", 5, { { "char *", "path" }, { "int", "flags" }, { "int", "class" }, { "int", "dpflags" }, { "int", "mode" } } },
{ 217, "fsgetpath_ext", 5, { { "user_addr_t", "buf" }, { "size_t", "bufsize" }, { "user_addr_t", "fsid" }, { "uint64_t", "objid" }, { "uint32_t", "options" } } },
{ 218, "openat_dprotected_np", 7, { { "int", "fd" }, { "char *", "path" }, { "int", "flags" }, { "int", "class" }, { "int", "dpflags" }, { "int", "mode" }, { "int", "authfd" } } },
{ 220, "getattrlist", 5, { { "const char *", "path" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "u_long", "options" } } },
{ 221, "setattrlist", 5, { { "const char *", "path" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "u_long", "options" } } },
{ 222, "getdirentriesattr", 8, { { "int", "fd" }, { "struct attrlist *", "alist" }, { "void *", "buffer" }, { "size_t", "buffersize" }, { "u_long *", "count" }, { "u_long *", "basep" }, { "u_long *", "newstate" }, { "u_long", "options" } } },
{ 223, "exchangedata", 3, { { "const char *", "path1" }, { "const char *", "path2" }, { "u_long", "options" } } },
{ 225, "searchfs", 6, { { "const char *", "path" }, { "struct fssearchblock *", "searchblock" }, { "uint32_t *", "nummatches" }, { "uint32_t", "scriptcode" }, { "uint32_t", "options" }, { "struct searchstate *", "state" } } },
{ 226, "delete", 1, { { "char *", "path" } } },
{ 227, "copyfile", 4, { { "char *", "from" }, { "char *", "to" }, { "int", "mode" }, { "int", "flags" } } },
{ 228, "fgetattrlist", 5, { { "int", "fd" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "u_long", "options" } } },
{ 229, "fsetattrlist", 5, { { "int", "fd" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "u_long", "options" } } },
{ 230, "poll", 3, { { "struct pollfd *", "fds" }, { "u_int", "nfds" }, { "int", "timeout" } } },
{ 234, "getxattr", 6, { { "char *", "path" }, { "char *", "attrname" }, { "user_addr_t", "value" }, { "size_t", "size" }, { "uint32_t", "position" }, { "int", "options" } } },
{ 235, "fgetxattr", 6, { { "int", "fd" }, { "char *", "attrname" }, { "user_addr_t", "value" }, { "size_t", "size" }, { "uint32_t", "position" }, { "int", "options" } } },
{ 236, "setxattr", 6, { { "char *", "path" }, { "char *", "attrname" }, { "user_addr_t", "value" }, { "size_t", "size" }, { "uint32_t", "position" }, { "int", "options" } } },
{ 237, "fsetxattr", 6, { { "int", "fd" }, { "char *", "attrname" }, { "user_addr_t", "value" }, { "size_t", "size" }, { "uint32_t", "position" }, { "int", "options" } } },
{ 238, "removexattr", 3, { { "char *", "path" }, { "char *", "attrname" }, { "int", "options" } } },
{ 239, "fremovexattr", 3, { { "int", "fd" }, { "char *", "attrname" }, { "int", "options" } } },
{ 240, "listxattr", 4, { { "char *", "path" }, { "user_addr_t", "namebuf" }, { "size_t", "bufsize" }, { "int", "options" } } },
{ 241, "flistxattr", 4, { { "int", "fd" }, { "user_addr_t", "namebuf" }, { "size_t", "bufsize" }, { "int", "options" } } },
{ 242, "fsctl", 4, { { "const char *", "path" }, { "u_long", "cmd" }, { "caddr_t", "data" }, { "u_int", "options" } } },
{ 243, "initgroups", 3, { { "u_int", "gidsetsize" }, { "gid_t *", "gidset" }, { "int", "gmuid" } } },
{ 244, "posix_spawn", 5, { { "pid_t *", "pid" }, { "const char *", "path" }, { "const struct _posix_spawn_args_desc *", "adesc" }, { "char **", "argv" }, { "char **", "envp" } } },
{ 245, "ffsctl", 4, { { "int", "fd" }, { "u_long", "cmd" }, { "caddr_t", "data" }, { "u_int", "options" } } },
{ 248, "fhopen", 2, { { "const struct fhandle *", "u_fhp" }, { "int", "flags" } } },
{ 250, "minherit", 3, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "int", "inherit" } } },
{ 251, "semsys", 5, { { "u_int", "which" }, { "int", "a2" }, { "int", "a3" }, { "int", "a4" }, { "int", "a5" } } },
{ 252, "msgsys", 5, { { "u_int", "which" }, { "int", "a2" }, { "int", "a3" }, { "int", "a4" }, { "int", "a5" } } },
{ 253, "shmsys", 4, { { "u_int", "which" }, { "int", "a2" }, { "int", "a3" }, { "int", "a4" } } },
{ 254, "semctl", 4, { { "int", "semid" }, { "int", "semnum" }, { "int", "cmd" }, { "semun_t", "arg" } } },
{ 255, "semget", 3, { { "key_t", "key" }, { "int", "nsems" }, { "int", "semflg" } } },
{ 256, "semop", 3, { { "int", "semid" }, { "struct sembuf *", "sops" }, { "int", "nsops" } } },
{ 258, "msgctl", 3, { { "int", "msqid" }, { "int", "cmd" }, { "struct msqid_ds *", "buf" } } },
{ 259, "msgget", 2, { { "key_t", "key" }, { "int", "msgflg" } } },
{ 260, "msgsnd", 4, { { "int", "msqid" }, { "void *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 261, "msgrcv", 5, { { "int", "msqid" }, { "void *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 262, "shmat", 3, { { "int", "shmid" }, { "void *", "shmaddr" }, { "int", "shmflg" } } },
{ 263, "shmctl", 3, { { "int", "shmid" }, { "int", "cmd" }, { "struct shmid_ds *", "buf" } } },
{ 264, "shmdt", 1, { { "void *", "shmaddr" } } },
{ 265, "shmget", 3, { { "key_t", "key" }, { "size_t", "size" }, { "int", "shmflg" } } },
{ 266, "shm_open", 3, { { "const char *", "name" }, { "int", "oflag" }, { "int", "mode" } } },
{ 267, "shm_unlink", 1, { { "const char *", "name" } } },
{ 268, "sem_open", 4, { { "const char *", "name" }, { "int", "oflag" }, { "int", "mode" }, { "int", "value" } } },
{ 269, "sem_close", 1, { { "sem_t *", "sem" } } },
{ 270, "sem_unlink", 1, { { "const char *", "name" } } },
{ 271, "sem_wait", 1, { { "sem_t *", "sem" } } },
{ 272, "sem_trywait", 1, { { "sem_t *", "sem" } } },
{ 273, "sem_post", 1, { { "sem_t *", "sem" } } },
{ 274, "sysctlbyname", 6, { { "const char *", "name" }, { "size_t", "namelen" }, { "void *", "old" }, { "size_t *", "oldlenp" }, { "void *", "new" }, { "size_t", "newlen" } } },
{ 277, "open_extended", 6, { { "char *", "path" }, { "int", "flags" }, { "uid_t", "uid" }, { "gid_t", "gid" }, { "int", "mode" }, { "user_addr_t", "xsecurity" } } },
{ 278, "umask_extended", 2, { { "int", "newmask" }, { "user_addr_t", "xsecurity" } } },
{ 279, "stat_extended", 4, { { "char *", "path" }, { "user_addr_t", "ub" }, { "user_addr_t", "xsecurity" }, { "user_addr_t", "xsecurity_size" } } },
{ 280, "lstat_extended", 4, { { "char *", "path" }, { "user_addr_t", "ub" }, { "user_addr_t", "xsecurity" }, { "user_addr_t", "xsecurity_size" } } },
{ 281, "fstat_extended", 4, { { "int", "fd" }, { "user_addr_t", "ub" }, { "user_addr_t", "xsecurity" }, { "user_addr_t", "xsecurity_size" } } },
{ 282, "chmod_extended", 5, { { "char *", "path" }, { "uid_t", "uid" }, { "gid_t", "gid" }, { "int", "mode" }, { "user_addr_t", "xsecurity" } } },
{ 283, "fchmod_extended", 5, { { "int", "fd" }, { "uid_t", "uid" }, { "gid_t", "gid" }, { "int", "mode" }, { "user_addr_t", "xsecurity" } } },
{ 284, "access_extended", 4, { { "user_addr_t", "entries" }, { "size_t", "size" }, { "user_addr_t", "results" }, { "uid_t", "uid" } } },
{ 285, "settid", 2, { { "uid_t", "uid" }, { "gid_t", "gid" } } },
{ 286, "gettid", 2, { { "uid_t *", "uidp" }, { "gid_t *", "gidp" } } },
{ 287, "setsgroups", 2, { { "int", "setlen" }, { "user_addr_t", "guidset" } } },
{ 288, "getsgroups", 2, { { "user_addr_t", "setlen" }, { "user_addr_t", "guidset" } } },
{ 289, "setwgroups", 2, { { "int", "setlen" }, { "user_addr_t", "guidset" } } },
{ 290, "getwgroups", 2, { { "user_addr_t", "setlen" }, { "user_addr_t", "guidset" } } },
{ 291, "mkfifo_extended", 5, { { "char *", "path" }, { "uid_t", "uid" }, { "gid_t", "gid" }, { "int", "mode" }, { "user_addr_t", "xsecurity" } } },
{ 292, "mkdir_extended", 5, { { "char *", "path" }, { "uid_t", "uid" }, { "gid_t", "gid" }, { "int", "mode" }, { "user_addr_t", "xsecurity" } } },
{ 293, "identitysvc", 2, { { "int", "opcode" }, { "user_addr_t", "message" } } },
{ 294, "shared_region_check_np", 1, { { "uint64_t *", "start_address" } } },
{ 296, "vm_pressure_monitor", 3, { { "int", "wait_for_pressure" }, { "int", "nsecs_monitored" }, { "uint32_t *", "pages_reclaimed" } } },
{ 297, "psynch_rw_longrdlock", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 298, "psynch_rw_yieldwrlock", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 299, "psynch_rw_downgrade", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 300, "psynch_rw_upgrade", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 301, "psynch_mutexwait", 5, { { "user_addr_t", "mutex" }, { "uint32_t", "mgen" }, { "uint32_t", "ugen" }, { "uint64_t", "tid" }, { "uint32_t", "flags" } } },
{ 302, "psynch_mutexdrop", 5, { { "user_addr_t", "mutex" }, { "uint32_t", "mgen" }, { "uint32_t", "ugen" }, { "uint64_t", "tid" }, { "uint32_t", "flags" } } },
{ 303, "psynch_cvbroad", 7, { { "user_addr_t", "cv" }, { "uint64_t", "cvlsgen" }, { "uint64_t", "cvudgen" }, { "uint32_t", "flags" }, { "user_addr_t", "mutex" }, { "uint64_t", "mugen" }, { "uint64_t", "tid" } } },
{ 304, "psynch_cvsignal", 8, { { "user_addr_t", "cv" }, { "uint64_t", "cvlsgen" }, { "uint32_t", "cvugen" }, { "int", "thread_port" }, { "user_addr_t", "mutex" }, { "uint64_t", "mugen" }, { "uint64_t", "tid" }, { "uint32_t", "flags" } } },
{ 305, "psynch_cvwait", 8, { { "user_addr_t", "cv" }, { "uint64_t", "cvlsgen" }, { "uint32_t", "cvugen" }, { "user_addr_t", "mutex" }, { "uint64_t", "mugen" }, { "uint32_t", "flags" }, { "int64_t", "sec" }, { "uint32_t", "nsec" } } },
{ 306, "psynch_rw_rdlock", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 307, "psynch_rw_wrlock", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 308, "psynch_rw_unlock", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 309, "psynch_rw_unlock2", 5, { { "user_addr_t", "rwlock" }, { "uint32_t", "lgenval" }, { "uint32_t", "ugenval" }, { "uint32_t", "rw_wc" }, { "int", "flags" } } },
{ 310, "getsid", 1, { { "pid_t", "pid" } } },
{ 311, "settid_with_pid", 2, { { "pid_t", "pid" }, { "int", "assume" } } },
{ 312, "psynch_cvclrprepost", 7, { { "user_addr_t", "cv" }, { "uint32_t", "cvgen" }, { "uint32_t", "cvugen" }, { "uint32_t", "cvsgen" }, { "uint32_t", "prepocnt" }, { "uint32_t", "preposeq" }, { "uint32_t", "flags" } } },
{ 313, "aio_fsync", 2, { { "int", "op" }, { "user_addr_t", "aiocbp" } } },
{ 314, "aio_return", 1, { { "user_addr_t", "aiocbp" } } },
{ 315, "aio_suspend", 3, { { "user_addr_t", "aiocblist" }, { "int", "nent" }, { "user_addr_t", "timeoutp" } } },
{ 316, "aio_cancel", 2, { { "int", "fd" }, { "user_addr_t", "aiocbp" } } },
{ 317, "aio_error", 1, { { "user_addr_t", "aiocbp" } } },
{ 318, "aio_read", 1, { { "user_addr_t", "aiocbp" } } },
{ 319, "aio_write", 1, { { "user_addr_t", "aiocbp" } } },
{ 320, "lio_listio", 4, { { "int", "mode" }, { "user_addr_t", "aiocblist" }, { "int", "nent" }, { "user_addr_t", "sigp" } } },
{ 322, "iopolicysys", 2, { { "int", "cmd" }, { "void *", "arg" } } },
{ 323, "process_policy", 7, { { "int", "scope" }, { "int", "action" }, { "int", "policy" }, { "int", "policy_subtype" }, { "user_addr_t", "attrp" }, { "pid_t", "target_pid" }, { "uint64_t", "target_threadid" } } },
{ 324, "mlockall", 1, { { "int", "how" } } },
{ 325, "munlockall", 1, { { "int", "how" } } },
{ 327, "issetugid", 0, {} },
{ 328, "pthread_kill", 2, { { "int", "thread_port" }, { "int", "sig" } } },
{ 329, "pthread_sigmask", 3, { { "int", "how" }, { "user_addr_t", "set" }, { "user_addr_t", "oset" } } },
{ 330, "sigwait", 2, { { "user_addr_t", "set" }, { "user_addr_t", "sig" } } },
{ 331, "disable_threadsignal", 1, { { "int", "value" } } },
{ 332, "pthread_markcancel", 1, { { "int", "thread_port" } } },
{ 333, "pthread_canceled", 1, { { "int", "action" } } },
{ 334, "semwait_signal", 6, { { "int", "cond_sem" }, { "int", "mutex_sem" }, { "int", "timeout" }, { "int", "relative" }, { "int64_t", "tv_sec" }, { "int32_t", "tv_nsec" } } },
{ 336, "proc_info", 6, { { "int32_t", "callnum" }, { "int32_t", "pid" }, { "uint32_t", "flavor" }, { "uint64_t", "arg" }, { "user_addr_t", "buffer" }, { "int32_t", "buffersize" } } },
{ 337, "sendfile", 6, { { "int", "fd" }, { "int", "s" }, { "off_t", "offset" }, { "off_t *", "nbytes" }, { "struct sf_hdtr *", "hdtr" }, { "int", "flags" } } },
{ 338, "stat64", 2, { { "char *", "path" }, { "user_addr_t", "ub" } } },
{ 339, "fstat64", 2, { { "int", "fd" }, { "user_addr_t", "ub" } } },
{ 340, "lstat64", 2, { { "char *", "path" }, { "user_addr_t", "ub" } } },
{ 341, "stat64_extended", 4, { { "char *", "path" }, { "user_addr_t", "ub" }, { "user_addr_t", "xsecurity" }, { "user_addr_t", "xsecurity_size" } } },
{ 342, "lstat64_extended", 4, { { "char *", "path" }, { "user_addr_t", "ub" }, { "user_addr_t", "xsecurity" }, { "user_addr_t", "xsecurity_size" } } },
{ 343, "fstat64_extended", 4, { { "int", "fd" }, { "user_addr_t", "ub" }, { "user_addr_t", "xsecurity" }, { "user_addr_t", "xsecurity_size" } } },
{ 344, "getdirentries64", 4, { { "int", "fd" }, { "void *", "buf" }, { "user_size_t", "bufsize" }, { "off_t *", "position" } } },
{ 345, "statfs64", 2, { { "char *", "path" }, { "struct statfs64 *", "buf" } } },
{ 346, "fstatfs64", 2, { { "int", "fd" }, { "struct statfs64 *", "buf" } } },
{ 347, "getfsstat64", 3, { { "user_addr_t", "buf" }, { "int", "bufsize" }, { "int", "flags" } } },
{ 348, "pthread_chdir", 1, { { "char *", "path" } } },
{ 349, "pthread_fchdir", 1, { { "int", "fd" } } },
{ 350, "audit", 2, { { "void *", "record" }, { "int", "length" } } },
{ 351, "auditon", 3, { { "int", "cmd" }, { "void *", "data" }, { "int", "length" } } },
{ 353, "getauid", 1, { { "au_id_t *", "auid" } } },
{ 354, "setauid", 1, { { "au_id_t *", "auid" } } },
{ 357, "getaudit_addr", 2, { { "struct auditinfo_addr *", "auditinfo_addr" }, { "int", "length" } } },
{ 358, "setaudit_addr", 2, { { "struct auditinfo_addr *", "auditinfo_addr" }, { "int", "length" } } },
{ 359, "auditctl", 1, { { "char *", "path" } } },
{ 360, "bsdthread_create", 5, { { "user_addr_t", "func" }, { "user_addr_t", "func_arg" }, { "user_addr_t", "stack" }, { "user_addr_t", "pthread" }, { "uint32_t", "flags" } } },
{ 361, "bsdthread_terminate", 4, { { "user_addr_t", "stackaddr" }, { "size_t", "freesize" }, { "uint32_t", "port" }, { "user_addr_t", "sema_or_ulock" } } },
{ 362, "kqueue", 0, {} },
{ 363, "kevent", 6, { { "int", "fd" }, { "const struct kevent *", "changelist" }, { "int", "nchanges" }, { "struct kevent *", "eventlist" }, { "int", "nevents" }, { "const struct timespec *", "timeout" } } },
{ 364, "lchown", 3, { { "char *", "path" }, { "uid_t", "owner" }, { "gid_t", "group" } } },
{ 366, "bsdthread_register", 7, { { "user_addr_t", "threadstart" }, { "user_addr_t", "wqthread" }, { "uint32_t", "flags" }, { "user_addr_t", "stack_addr_hint" }, { "user_addr_t", "targetconc_ptr" }, { "uint32_t", "dispatchqueue_offset" }, { "uint32_t", "tsd_offset" } } },
{ 367, "workq_open", 0, {} },
{ 368, "workq_kernreturn", 4, { { "int", "options" }, { "user_addr_t", "item" }, { "int", "affinity" }, { "int", "prio" } } },
{ 369, "kevent64", 7, { { "int", "fd" }, { "const struct kevent64_s *", "changelist" }, { "int", "nchanges" }, { "struct kevent64_s *", "eventlist" }, { "int", "nevents" }, { "unsigned int", "flags" }, { "const struct timespec *", "timeout" } } },
{ 372, "thread_selfid", 0, {} },
{ 373, "ledger", 4, { { "int", "cmd" }, { "caddr_t", "arg1" }, { "caddr_t", "arg2" }, { "caddr_t", "arg3" } } },
{ 374, "kevent_qos", 8, { { "int", "fd" }, { "const struct kevent_qos_s *", "changelist" }, { "int", "nchanges" }, { "struct kevent_qos_s *", "eventlist" }, { "int", "nevents" }, { "void *", "data_out" }, { "size_t *", "data_available" }, { "unsigned int", "flags" } } },
{ 375, "kevent_id", 8, { { "uint64_t", "id" }, { "const struct kevent_qos_s *", "changelist" }, { "int", "nchanges" }, { "struct kevent_qos_s *", "eventlist" }, { "int", "nevents" }, { "void *", "data_out" }, { "size_t *", "data_available" }, { "unsigned int", "flags" } } },
{ 380, "mac_execve", 4, { { "char *", "fname" }, { "char **", "argp" }, { "char **", "envp" }, { "struct mac *", "mac_p" } } },
{ 381, "mac_syscall", 3, { { "char *", "policy" }, { "int", "call" }, { "user_addr_t", "arg" } } },
{ 382, "mac_get_file", 2, { { "char *", "path_p" }, { "struct mac *", "mac_p" } } },
{ 383, "mac_set_file", 2, { { "char *", "path_p" }, { "struct mac *", "mac_p" } } },
{ 384, "mac_get_link", 2, { { "char *", "path_p" }, { "struct mac *", "mac_p" } } },
{ 385, "mac_set_link", 2, { { "char *", "path_p" }, { "struct mac *", "mac_p" } } },
{ 386, "mac_get_proc", 1, { { "struct mac *", "mac_p" } } },
{ 387, "mac_set_proc", 1, { { "struct mac *", "mac_p" } } },
{ 388, "mac_get_fd", 2, { { "int", "fd" }, { "struct mac *", "mac_p" } } },
{ 389, "mac_set_fd", 2, { { "int", "fd" }, { "struct mac *", "mac_p" } } },
{ 390, "mac_get_pid", 2, { { "pid_t", "pid" }, { "struct mac *", "mac_p" } } },
{ 394, "pselect", 6, { { "int", "nd" }, { "u_int32_t *", "in" }, { "u_int32_t *", "ou" }, { "u_int32_t *", "ex" }, { "const struct timespec *", "ts" }, { "const struct sigset_t *", "mask" } } },
{ 395, "pselect_nocancel", 6, { { "int", "nd" }, { "u_int32_t *", "in" }, { "u_int32_t *", "ou" }, { "u_int32_t *", "ex" }, { "const struct timespec *", "ts" }, { "const struct sigset_t *", "mask" } } },
{ 396, "read_nocancel", 3, { { "int", "fd" }, { "user_addr_t", "cbuf" }, { "user_size_t", "nbyte" } } },
{ 397, "write_nocancel", 3, { { "int", "fd" }, { "user_addr_t", "cbuf" }, { "user_size_t", "nbyte" } } },
{ 398, "open_nocancel", 3, { { "char *", "path" }, { "int", "flags" }, { "int", "mode" } } },
{ 399, "close_nocancel", 1, { { "int", "fd" } } },
{ 400, "wait4_nocancel", 4, { { "int", "pid" }, { "user_addr_t", "status" }, { "int", "options" }, { "user_addr_t", "rusage" } } },
{ 401, "recvmsg_nocancel", 3, { { "int", "s" }, { "struct msghdr *", "msg" }, { "int", "flags" } } },
{ 402, "sendmsg_nocancel", 3, { { "int", "s" }, { "caddr_t", "msg" }, { "int", "flags" } } },
{ 403, "recvfrom_nocancel", 6, { { "int", "s" }, { "void *", "buf" }, { "size_t", "len" }, { "int", "flags" }, { "struct sockaddr *", "from" }, { "int *", "fromlenaddr" } } },
{ 404, "accept_nocancel", 3, { { "int", "s" }, { "caddr_t", "name" }, { "socklen_t *", "anamelen" } } },
{ 405, "msync_nocancel", 3, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "int", "flags" } } },
{ 406, "fcntl_nocancel", 3, { { "int", "fd" }, { "int", "cmd" }, { "long", "arg" } } },
{ 407, "select_nocancel", 5, { { "int", "nd" }, { "u_int32_t *", "in" }, { "u_int32_t *", "ou" }, { "u_int32_t *", "ex" }, { "struct timeval *", "tv" } } },
{ 408, "fsync_nocancel", 1, { { "int", "fd" } } },
{ 409, "connect_nocancel", 3, { { "int", "s" }, { "caddr_t", "name" }, { "socklen_t", "namelen" } } },
{ 410, "sigsuspend_nocancel", 1, { { "sigset_t", "mask" } } },
{ 411, "readv_nocancel", 3, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "u_int", "iovcnt" } } },
{ 412, "writev_nocancel", 3, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "u_int", "iovcnt" } } },
{ 413, "sendto_nocancel", 6, { { "int", "s" }, { "caddr_t", "buf" }, { "size_t", "len" }, { "int", "flags" }, { "caddr_t", "to" }, { "socklen_t", "tolen" } } },
{ 414, "pread_nocancel", 4, { { "int", "fd" }, { "user_addr_t", "buf" }, { "user_size_t", "nbyte" }, { "off_t", "offset" } } },
{ 415, "pwrite_nocancel", 4, { { "int", "fd" }, { "user_addr_t", "buf" }, { "user_size_t", "nbyte" }, { "off_t", "offset" } } },
{ 416, "waitid_nocancel", 4, { { "idtype_t", "idtype" }, { "id_t", "id" }, { "siginfo_t *", "infop" }, { "int", "options" } } },
{ 417, "poll_nocancel", 3, { { "struct pollfd *", "fds" }, { "u_int", "nfds" }, { "int", "timeout" } } },
{ 418, "msgsnd_nocancel", 4, { { "int", "msqid" }, { "void *", "msgp" }, { "size_t", "msgsz" }, { "int", "msgflg" } } },
{ 419, "msgrcv_nocancel", 5, { { "int", "msqid" }, { "void *", "msgp" }, { "size_t", "msgsz" }, { "long", "msgtyp" }, { "int", "msgflg" } } },
{ 420, "sem_wait_nocancel", 1, { { "sem_t *", "sem" } } },
{ 421, "aio_suspend_nocancel", 3, { { "user_addr_t", "aiocblist" }, { "int", "nent" }, { "user_addr_t", "timeoutp" } } },
{ 422, "sigwait_nocancel", 2, { { "user_addr_t", "set" }, { "user_addr_t", "sig" } } },
{ 423, "semwait_signal_nocancel", 6, { { "int", "cond_sem" }, { "int", "mutex_sem" }, { "int", "timeout" }, { "int", "relative" }, { "int64_t", "tv_sec" }, { "int32_t", "tv_nsec" } } },
{ 424, "mac_mount", 5, { { "char *", "type" }, { "char *", "path" }, { "int", "flags" }, { "caddr_t", "data" }, { "struct mac *", "mac_p" } } },
{ 425, "mac_get_mount", 2, { { "char *", "path" }, { "struct mac *", "mac_p" } } },
{ 426, "mac_getfsstat", 5, { { "user_addr_t", "buf" }, { "int", "bufsize" }, { "user_addr_t", "mac" }, { "int", "macsize" }, { "int", "flags" } } },
{ 427, "fsgetpath", 4, { { "user_addr_t", "buf" }, { "size_t", "bufsize" }, { "user_addr_t", "fsid" }, { "uint64_t", "objid" } } },
{ 428, "audit_session_self", 0, {} },
{ 429, "audit_session_join", 1, { { "mach_port_name_t", "port" } } },
{ 430, "fileport_makeport", 2, { { "int", "fd" }, { "user_addr_t", "portnamep" } } },
{ 431, "fileport_makefd", 1, { { "mach_port_name_t", "port" } } },
{ 432, "audit_session_port", 2, { { "au_asid_t", "asid" }, { "user_addr_t", "portnamep" } } },
{ 433, "pid_suspend", 1, { { "int", "pid" } } },
{ 434, "pid_resume", 1, { { "int", "pid" } } },
{ 435, "pid_hibernate", 1, { { "int", "pid" } } },
{ 436, "pid_shutdown_sockets", 2, { { "int", "pid" }, { "int", "level" } } },
{ 439, "kas_info", 3, { { "int", "selector" }, { "void *", "value" }, { "size_t *", "size" } } },
{ 440, "memorystatus_control", 5, { { "uint32_t", "command" }, { "int32_t", "pid" }, { "uint32_t", "flags" }, { "user_addr_t", "buffer" }, { "size_t", "buffersize" } } },
{ 441, "guarded_open_np", 5, { { "char *", "path" }, { "const guardid_t *", "guard" }, { "u_int", "guardflags" }, { "int", "flags" }, { "int", "mode" } } },
{ 442, "guarded_close_np", 2, { { "int", "fd" }, { "const guardid_t *", "guard" } } },
{ 443, "guarded_kqueue_np", 2, { { "const guardid_t *", "guard" }, { "u_int", "guardflags" } } },
{ 444, "change_fdguard_np", 6, { { "int", "fd" }, { "const guardid_t *", "guard" }, { "u_int", "guardflags" }, { "const guardid_t *", "nguard" }, { "u_int", "nguardflags" }, { "int *", "fdflagsp" } } },
{ 445, "usrctl", 1, { { "uint32_t", "flags" } } },
{ 446, "proc_rlimit_control", 3, { { "pid_t", "pid" }, { "int", "flavor" }, { "void *", "arg" } } },
{ 447, "connectx", 8, { { "int", "socket" }, { "const sa_endpoints_t *", "endpoints" }, { "sae_associd_t", "associd" }, { "unsigned int", "flags" }, { "const struct iovec *", "iov" }, { "unsigned int", "iovcnt" }, { "size_t *", "len" }, { "sae_connid_t *", "connid" } } },
{ 448, "disconnectx", 3, { { "int", "s" }, { "sae_associd_t", "aid" }, { "sae_connid_t", "cid" } } },
{ 449, "peeloff", 2, { { "int", "s" }, { "sae_associd_t", "aid" } } },
{ 450, "socket_delegate", 4, { { "int", "domain" }, { "int", "type" }, { "int", "protocol" }, { "pid_t", "epid" } } },
{ 451, "telemetry", 6, { { "uint64_t", "cmd" }, { "uint64_t", "deadline" }, { "uint64_t", "interval" }, { "uint64_t", "leeway" }, { "uint64_t", "arg4" }, { "uint64_t", "arg5" } } },
{ 452, "proc_uuid_policy", 4, { { "uint32_t", "operation" }, { "uuid_t", "uuid" }, { "size_t", "uuidlen" }, { "uint32_t", "flags" } } },
{ 453, "memorystatus_get_level", 1, { { "user_addr_t", "level" } } },
{ 454, "system_override", 2, { { "uint64_t", "timeout" }, { "uint64_t", "flags" } } },
{ 455, "vfs_purge", 0, {} },
{ 456, "sfi_ctl", 4, { { "uint32_t", "operation" }, { "uint32_t", "sfi_class" }, { "uint64_t", "time" }, { "uint64_t *", "out_time" } } },
{ 457, "sfi_pidctl", 4, { { "uint32_t", "operation" }, { "pid_t", "pid" }, { "uint32_t", "sfi_flags" }, { "uint32_t *", "out_sfi_flags" } } },
{ 458, "coalition", 3, { { "uint32_t", "operation" }, { "uint64_t *", "cid" }, { "uint32_t", "flags" } } },
{ 459, "coalition_info", 4, { { "uint32_t", "flavor" }, { "uint64_t *", "cid" }, { "void *", "buffer" }, { "size_t *", "bufsize" } } },
{ 460, "necp_match_policy", 3, { { "uint8_t *", "parameters" }, { "size_t", "parameters_size" }, { "struct necp_aggregate_result *", "returned_result" } } },
{ 461, "getattrlistbulk", 5, { { "int", "dirfd" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "uint64_t", "options" } } },
{ 462, "clonefileat", 5, { { "int", "src_dirfd" }, { "user_addr_t", "src" }, { "int", "dst_dirfd" }, { "user_addr_t", "dst" }, { "uint32_t", "flags" } } },
{ 463, "openat", 4, { { "int", "fd" }, { "char *", "path" }, { "int", "flags" }, { "int", "mode" } } },
{ 464, "openat_nocancel", 4, { { "int", "fd" }, { "char *", "path" }, { "int", "flags" }, { "int", "mode" } } },
{ 465, "renameat", 4, { { "int", "fromfd" }, { "char *", "from" }, { "int", "tofd" }, { "char *", "to" } } },
{ 466, "faccessat", 4, { { "int", "fd" }, { "char *", "path" }, { "int", "amode" }, { "int", "flag" } } },
{ 467, "fchmodat", 4, { { "int", "fd" }, { "char *", "path" }, { "int", "mode" }, { "int", "flag" } } },
{ 468, "fchownat", 5, { { "int", "fd" }, { "char *", "path" }, { "uid_t", "uid" }, { "gid_t", "gid" }, { "int", "flag" } } },
{ 469, "fstatat", 4, { { "int", "fd" }, { "char *", "path" }, { "user_addr_t", "ub" }, { "int", "flag" } } },
{ 470, "fstatat64", 4, { { "int", "fd" }, { "char *", "path" }, { "user_addr_t", "ub" }, { "int", "flag" } } },
{ 471, "linkat", 5, { { "int", "fd1" }, { "char *", "path" }, { "int", "fd2" }, { "char *", "link" }, { "int", "flag" } } },
{ 472, "unlinkat", 3, { { "int", "fd" }, { "char *", "path" }, { "int", "flag" } } },
{ 473, "readlinkat", 4, { { "int", "fd" }, { "char *", "path" }, { "user_addr_t", "buf" }, { "size_t", "bufsize" } } },
{ 474, "symlinkat", 3, { { "user_addr_t *", "path1" }, { "int", "fd" }, { "user_addr_t", "path2" } } },
{ 475, "mkdirat", 3, { { "int", "fd" }, { "char *", "path" }, { "int", "mode" } } },
{ 476, "getattrlistat", 6, { { "int", "fd" }, { "const char *", "path" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "u_long", "options" } } },
{ 477, "proc_trace_log", 2, { { "pid_t", "pid" }, { "uint64_t", "uniqueid" } } },
{ 478, "bsdthread_ctl", 4, { { "user_addr_t", "cmd" }, { "user_addr_t", "arg1" }, { "user_addr_t", "arg2" }, { "user_addr_t", "arg3" } } },
{ 479, "openbyid_np", 3, { { "user_addr_t", "fsid" }, { "user_addr_t", "objid" }, { "int", "oflags" } } },
{ 480, "recvmsg_x", 4, { { "int", "s" }, { "struct msghdr_x *", "msgp" }, { "u_int", "cnt" }, { "int", "flags" } } },
{ 481, "sendmsg_x", 4, { { "int", "s" }, { "struct msghdr_x *", "msgp" }, { "u_int", "cnt" }, { "int", "flags" } } },
{ 482, "thread_selfusage", 0, {} },
{ 483, "csrctl", 3, { { "uint32_t", "op" }, { "user_addr_t", "useraddr" }, { "user_addr_t", "usersize" } } },
{ 484, "guarded_open_dprotected_np", 7, { { "char *", "path" }, { "const guardid_t *", "guard" }, { "u_int", "guardflags" }, { "int", "flags" }, { "int", "dpclass" }, { "int", "dpflags" }, { "int", "mode" } } },
{ 485, "guarded_write_np", 4, { { "int", "fd" }, { "const guardid_t *", "guard" }, { "user_addr_t", "cbuf" }, { "user_size_t", "nbyte" } } },
{ 486, "guarded_pwrite_np", 5, { { "int", "fd" }, { "const guardid_t *", "guard" }, { "user_addr_t", "buf" }, { "user_size_t", "nbyte" }, { "off_t", "offset" } } },
{ 487, "guarded_writev_np", 4, { { "int", "fd" }, { "const guardid_t *", "guard" }, { "struct iovec *", "iovp" }, { "int", "iovcnt" } } },
{ 488, "renameatx_np", 5, { { "int", "fromfd" }, { "char *", "from" }, { "int", "tofd" }, { "char *", "to" }, { "u_int", "flags" } } },
{ 489, "mremap_encrypted", 5, { { "caddr_ut", "addr" }, { "size_ut", "len" }, { "uint32_t", "cryptid" }, { "uint32_t", "cputype" }, { "uint32_t", "cpusubtype" } } },
{ 490, "netagent_trigger", 2, { { "uuid_t", "agent_uuid" }, { "size_t", "agent_uuidlen" } } },
{ 491, "stack_snapshot_with_config", 3, { { "int", "stackshot_config_version" }, { "user_addr_t", "stackshot_config" }, { "size_t", "stackshot_config_size" } } },
{ 492, "microstackshot", 3, { { "user_addr_t", "tracebuf" }, { "uint32_t", "tracebuf_size" }, { "uint32_t", "flags" } } },
{ 493, "grab_pgo_data", 4, { { "user_addr_t", "uuid" }, { "int", "flags" }, { "user_addr_t", "buffer" }, { "user_ssize_t", "size" } } },
{ 494, "persona", 6, { { "uint32_t", "operation" }, { "uint32_t", "flags" }, { "struct kpersona_info *", "info" }, { "uid_t *", "id" }, { "size_t *", "idlen" }, { "char *", "path" } } },
{ 496, "mach_eventlink_signal", 2, { { "mach_port_name_t", "eventlink_port" }, { "uint64_t", "signal_count" } } },
{ 497, "mach_eventlink_wait_until", 5, { { "mach_port_name_t", "eventlink_port" }, { "uint64_t", "wait_count" }, { "uint64_t", "deadline" }, { "uint32_t", "clock_id" }, { "uint32_t", "option" } } },
{ 498, "mach_eventlink_signal_wait_until", 6, { { "mach_port_name_t", "eventlink_port" }, { "uint64_t", "wait_count" }, { "uint64_t", "signal_count" }, { "uint64_t", "deadline" }, { "uint32_t", "clock_id" }, { "uint32_t", "option" } } },
{ 499, "work_interval_ctl", 4, { { "uint32_t", "operation" }, { "uint64_t", "work_interval_id" }, { "void *", "arg" }, { "size_t", "len" } } },
{ 500, "getentropy", 2, { { "void *", "buffer" }, { "size_t", "size" } } },
{ 502, "necp_client_action", 6, { { "int", "necp_fd" }, { "uint32_t", "action" }, { "uuid_t", "client_id" }, { "size_t", "client_id_len" }, { "uint8_t *", "buffer" }, { "size_t", "buffer_size" } } },
{ 503, "nexus_open", 2, { { "struct nxctl_init *", "init" }, { "uint32_t", "init_len" } } },
{ 504, "nexus_register", 5, { { "int", "ctl" }, { "struct nxprov_reg *", "reg" }, { "uint32_t", "reg_len" }, { "uuid_t *", "prov_uuid" }, { "uint32_t", "prov_uuid_len" } } },
{ 505, "nexus_deregister", 3, { { "int", "ctl" }, { "uuid_t", "prov_uuid" }, { "uint32_t", "prov_uuid_len" } } },
{ 506, "nexus_create", 5, { { "int", "ctl" }, { "uuid_t", "prov_uuid" }, { "uint32_t", "prov_uuid_len" }, { "uuid_t *", "nx_uuid" }, { "uint32_t", "nx_uuid_len" } } },
{ 507, "nexus_destroy", 3, { { "int", "ctl" }, { "uuid_t", "nx_uuid" }, { "uint32_t", "nx_uuid_len" } } },
{ 508, "nexus_get_opt", 4, { { "int", "ctl" }, { "uint32_t", "opt" }, { "void *", "aoptval" }, { "uint32_t *", "aoptlen" } } },
{ 509, "nexus_set_opt", 4, { { "int", "ctl" }, { "uint32_t", "opt" }, { "const void *", "aoptval" }, { "uint32_t", "optlen" } } },
{ 510, "channel_open", 2, { { "struct ch_init *", "init" }, { "uint32_t", "init_len" } } },
{ 511, "channel_get_info", 3, { { "int", "c" }, { "struct ch_info *", "cinfo" }, { "uint32_t", "cinfolen" } } },
{ 512, "channel_sync", 3, { { "int", "c" }, { "int", "mode" }, { "int", "flags" } } },
{ 513, "channel_get_opt", 4, { { "int", "c" }, { "uint32_t", "opt" }, { "void *", "aoptval" }, { "uint32_t *", "aoptlen" } } },
{ 514, "channel_set_opt", 4, { { "int", "c" }, { "uint32_t", "opt" }, { "const void *", "aoptval" }, { "uint32_t", "optlen" } } },
{ 515, "ulock_wait", 4, { { "uint32_t", "operation" }, { "void *", "addr" }, { "uint64_t", "value" }, { "uint32_t", "timeout" } } },
{ 516, "ulock_wake", 3, { { "uint32_t", "operation" }, { "void *", "addr" }, { "uint64_t", "wake_value" } } },
{ 517, "fclonefileat", 4, { { "int", "src_fd" }, { "int", "dst_dirfd" }, { "user_addr_t", "dst" }, { "uint32_t", "flags" } } },
{ 518, "fs_snapshot", 6, { { "uint32_t", "op" }, { "int", "dirfd" }, { "user_addr_t", "name1" }, { "user_addr_t", "name2" }, { "user_addr_t", "data" }, { "uint32_t", "flags" } } },
{ 520, "terminate_with_payload", 7, { { "int", "pid" }, { "uint32_t", "reason_namespace" }, { "uint64_t", "reason_code" }, { "void *", "payload" }, { "uint32_t", "payload_size" }, { "const char *", "reason_string" }, { "uint64_t", "reason_flags" } } },
{ 521, "abort_with_payload", 6, { { "uint32_t", "reason_namespace" }, { "uint64_t", "reason_code" }, { "void *", "payload" }, { "uint32_t", "payload_size" }, { "const char *", "reason_string" }, { "uint64_t", "reason_flags" } } },
{ 523, "necp_session_action", 6, { { "int", "necp_fd" }, { "uint32_t", "action" }, { "uint8_t *", "in_buffer" }, { "size_t", "in_buffer_length" }, { "uint8_t *", "out_buffer" }, { "size_t", "out_buffer_length" } } },
{ 524, "setattrlistat", 6, { { "int", "fd" }, { "const char *", "path" }, { "struct attrlist *", "alist" }, { "void *", "attribute_buffer" }, { "size_t", "buffer_size" }, { "uint32_t", "options" } } },
{ 525, "net_qos_guideline", 2, { { "struct net_qos_param *", "param" }, { "uint32_t", "param_len" } } },
{ 526, "fmount", 4, { { "const char *", "type" }, { "int", "fd" }, { "int", "flags" }, { "void *", "data" } } },
{ 527, "ntp_adjtime", 1, { { "struct timex *", "tp" } } },
{ 528, "ntp_gettime", 1, { { "struct ntptimeval *", "ntvp" } } },
{ 529, "os_fault_with_payload", 6, { { "uint32_t", "reason_namespace" }, { "uint64_t", "reason_code" }, { "void *", "payload" }, { "uint32_t", "payload_size" }, { "const char *", "reason_string" }, { "uint64_t", "reason_flags" } } },
{ 530, "kqueue_workloop_ctl", 4, { { "user_addr_t", "cmd" }, { "uint64_t", "options" }, { "user_addr_t", "addr" }, { "size_t", "sz" } } },
{ 531, "mach_bridge_remote_time", 1, { { "uint64_t", "local_timestamp" } } },
{ 532, "coalition_ledger", 4, { { "uint32_t", "operation" }, { "uint64_t *", "cid" }, { "void *", "buffer" }, { "size_t *", "bufsize" } } },
{ 533, "log_data", 4, { { "unsigned int", "tag" }, { "unsigned int", "flags" }, { "void *", "buffer" }, { "unsigned int", "size" } } },
{ 534, "memorystatus_available_memory", 0, {} },
{ 535, "objc_bp_assist_cfg_np", 2, { { "uint64_t", "adr" }, { "uint64_t", "ctl" } } },
{ 536, "shared_region_map_and_slide_2_np", 4, { { "uint32_t", "files_count" }, { "const struct shared_file_np *", "files" }, { "uint32_t", "mappings_count" }, { "const shared_file_mapping_slide_np_ut *", "mappings_u" } } },
{ 537, "pivot_root", 2, { { "const char *", "new_rootfs_path_before" }, { "const char *", "old_rootfs_path_after" } } },
{ 538, "task_inspect_for_pid", 3, { { "mach_port_name_t", "target_tport" }, { "int", "pid" }, { "mach_port_name_t *", "t" } } },
{ 539, "task_read_for_pid", 3, { { "mach_port_name_t", "target_tport" }, { "int", "pid" }, { "mach_port_name_t *", "t" } } },
{ 540, "preadv", 4, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "int", "iovcnt" }, { "off_t", "offset" } } },
{ 541, "pwritev", 4, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "int", "iovcnt" }, { "off_t", "offset" } } },
{ 542, "preadv_nocancel", 4, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "int", "iovcnt" }, { "off_t", "offset" } } },
{ 543, "pwritev_nocancel", 4, { { "int", "fd" }, { "struct iovec *", "iovp" }, { "int", "iovcnt" }, { "off_t", "offset" } } },
{ 544, "ulock_wait2", 5, { { "uint32_t", "operation" }, { "void *", "addr" }, { "uint64_t", "value" }, { "uint64_t", "timeout" }, { "uint64_t", "value2" } } },
{ 545, "proc_info_extended_id", 8, { { "int32_t", "callnum" }, { "int32_t", "pid" }, { "uint32_t", "flavor" }, { "uint32_t", "flags" }, { "uint64_t", "ext_id" }, { "uint64_t", "arg" }, { "user_addr_t", "buffer" }, { "int32_t", "buffersize" } } },
{ 546, "tracker_action", 3, { { "int", "action" }, { "char *", "buffer" }, { "size_t", "buffer_size" } } },
{ 547, "debug_syscall_reject", 1, { { "uint64_t", "packed_selectors" } } },
{ 548, "debug_syscall_reject_config", 3, { { "uint64_t", "packed_selectors1" }, { "uint64_t", "packed_selectors2" }, { "uint64_t", "flags" } } },
{ 549, "graftdmg", 4, { { "int", "dmg_fd" }, { "const char *", "mountdir" }, { "uint32_t", "graft_type" }, { "graftdmg_args_un *", "gda" } } },
{ 550, "map_with_linking_np", 4, { { "void *", "regions" }, { "uint32_t", "region_count" }, { "void *", "link_info" }, { "uint32_t", "link_info_size" } } },
{ 551, "freadlink", 3, { { "int", "fd" }, { "user_addr_t", "buf" }, { "user_size_t", "bufsize" } } },
{ 552, "record_system_event", 4, { { "uint32_t", "type" }, { "uint32_t", "subsystem" }, { "const char *", "event" }, { "const char *", "payload" } } },
{ 553, "mkfifoat", 3, { { "int", "fd" }, { "char *", "path" }, { "int", "mode" } } },
{ 554, "mknodat", 4, { { "int", "fd" }, { "char *", "path" }, { "int", "mode" }, { "int", "dev" } } },
{ 555, "ungraftdmg", 2, { { "const char *", "mountdir" }, { "uint64_t", "flags" } } },
{ 556, "coalition_policy_set", 3, { { "uint64_t", "cid" }, { "uint32_t", "flavor" }, { "uint32_t", "value" } } },
{ 557, "coalition_policy_get", 2, { { "uint64_t", "cid" }, { "uint32_t", "flavor" } } },
};
FridaXnuSyscallSignature *
frida_get_xnu_mach_traps (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_xnu_mach_traps);
return (FridaXnuSyscallSignature *) frida_xnu_mach_traps;
}
FridaXnuSyscallSignature *
frida_get_xnu_bsd_syscalls (int * len)
{
if (len != NULL)
*len = G_N_ELEMENTS (frida_xnu_bsd_syscalls);
return (FridaXnuSyscallSignature *) frida_xnu_bsd_syscalls;
}
+539
View File
@@ -0,0 +1,539 @@
// AUTO-GENERATED FILE. DO NOT EDIT.
namespace Frida {
public extern unowned XnuSyscallSignature[] get_xnu_mach_traps ();
public extern unowned XnuSyscallSignature[] get_xnu_bsd_syscalls ();
public struct XnuSyscallSignature {
public int nr;
public string name;
public uint8 nargs;
public XnuSyscallArg args[9];
}
public struct XnuSyscallArg {
public string? type;
public string? name;
}
public enum XnuMachTrap {
MACH_VM_ALLOCATE = -10,
MACH_VM_PURGABLE_CONTROL = -11,
MACH_VM_DEALLOCATE = -12,
TASK_DYLD_PROCESS_INFO_NOTIFY_GET = -13,
MACH_VM_PROTECT = -14,
MACH_VM_MAP = -15,
MACH_PORT_ALLOCATE = -16,
MACH_PORT_DEALLOCATE = -18,
MACH_PORT_MOD_REFS = -19,
MACH_PORT_MOVE_MEMBER = -20,
MACH_PORT_INSERT_RIGHT = -21,
MACH_PORT_INSERT_MEMBER = -22,
MACH_PORT_EXTRACT_MEMBER = -23,
MACH_PORT_CONSTRUCT = -24,
MACH_PORT_DESTRUCT = -25,
MACH_REPLY_PORT = -26,
THREAD_SELF = -27,
TASK_SELF = -28,
HOST_SELF = -29,
MACH_MSG = -31,
MACH_MSG_OVERWRITE = -32,
SEMAPHORE_SIGNAL = -33,
SEMAPHORE_SIGNAL_ALL = -34,
SEMAPHORE_SIGNAL_THREAD = -35,
SEMAPHORE_WAIT = -36,
SEMAPHORE_WAIT_SIGNAL = -37,
SEMAPHORE_TIMEDWAIT = -38,
SEMAPHORE_TIMEDWAIT_SIGNAL = -39,
MACH_PORT_GET_ATTRIBUTES = -40,
MACH_PORT_GUARD = -41,
MACH_PORT_UNGUARD = -42,
MACH_GENERATE_ACTIVITY_ID = -43,
TASK_NAME_FOR_PID = -44,
TASK_FOR_PID = -45,
PID_FOR_TASK = -46,
MACH_MSG2 = -47,
MACX_SWAPON = -48,
MACX_SWAPOFF = -49,
THREAD_GET_SPECIAL_REPLY_PORT = -50,
MACX_TRIGGERS = -51,
MACX_BACKING_STORE_SUSPEND = -52,
MACX_BACKING_STORE_RECOVERY = -53,
PFZ_EXIT = -58,
SWTCH_PRI = -59,
SWTCH = -60,
THREAD_SWITCH = -61,
CLOCK_SLEEP = -62,
MACH_VM_RECLAIM_UPDATE_KERNEL_ACCOUNTING = -63,
HOST_CREATE_MACH_VOUCHER = -70,
MACH_VOUCHER_EXTRACT_ATTR_RECIPE = -72,
MACH_PORT_TYPE = -76,
MACH_PORT_REQUEST_NOTIFICATION = -77,
EXCLAVES_CTL = -88,
MACH_TIMEBASE_INFO = -89,
MACH_WAIT_UNTIL = -90,
MK_TIMER_CREATE = -91,
MK_TIMER_DESTROY = -92,
MK_TIMER_ARM = -93,
MK_TIMER_CANCEL = -94,
MK_TIMER_ARM_LEEWAY = -95,
DEBUG_CONTROL_PORT_FOR_PID = -96,
IOKIT_USER_CLIENT = -100,
}
public enum XnuBsdSyscall {
EXIT = 1,
FORK = 2,
READ = 3,
WRITE = 4,
OPEN = 5,
CLOSE = 6,
WAIT4 = 7,
LINK = 9,
UNLINK = 10,
CHDIR = 12,
FCHDIR = 13,
MKNOD = 14,
CHMOD = 15,
CHOWN = 16,
GETFSSTAT = 18,
GETPID = 20,
SETUID = 23,
GETUID = 24,
GETEUID = 25,
PTRACE = 26,
RECVMSG = 27,
SENDMSG = 28,
RECVFROM = 29,
ACCEPT = 30,
GETPEERNAME = 31,
GETSOCKNAME = 32,
ACCESS = 33,
CHFLAGS = 34,
FCHFLAGS = 35,
SYNC = 36,
KILL = 37,
CROSSARCH_TRAP = 38,
GETPPID = 39,
DUP = 41,
PIPE = 42,
GETEGID = 43,
SIGACTION = 46,
GETGID = 47,
SIGPROCMASK = 48,
GETLOGIN = 49,
SETLOGIN = 50,
ACCT = 51,
SIGPENDING = 52,
SIGALTSTACK = 53,
IOCTL = 54,
REBOOT = 55,
REVOKE = 56,
SYMLINK = 57,
READLINK = 58,
EXECVE = 59,
UMASK = 60,
CHROOT = 61,
MSYNC = 65,
VFORK = 66,
OSLOG_COPROC_REG = 67,
OSLOG_COPROC = 68,
MUNMAP = 73,
MPROTECT = 74,
MADVISE = 75,
MINCORE = 78,
GETGROUPS = 79,
SETGROUPS = 80,
GETPGRP = 81,
SETPGID = 82,
SETITIMER = 83,
SWAPON = 85,
GETITIMER = 86,
GETDTABLESIZE = 89,
DUP2 = 90,
FCNTL = 92,
SELECT = 93,
FSYNC = 95,
SETPRIORITY = 96,
SOCKET = 97,
CONNECT = 98,
GETPRIORITY = 100,
BIND = 104,
SETSOCKOPT = 105,
LISTEN = 106,
SIGSUSPEND = 111,
GETTIMEOFDAY = 116,
GETRUSAGE = 117,
GETSOCKOPT = 118,
READV = 120,
WRITEV = 121,
SETTIMEOFDAY = 122,
FCHOWN = 123,
FCHMOD = 124,
SETREUID = 126,
SETREGID = 127,
RENAME = 128,
FLOCK = 131,
MKFIFO = 132,
SENDTO = 133,
SHUTDOWN = 134,
SOCKETPAIR = 135,
MKDIR = 136,
RMDIR = 137,
UTIMES = 138,
FUTIMES = 139,
ADJTIME = 140,
GETHOSTUUID = 142,
SETSID = 147,
GETPGID = 151,
SETPRIVEXEC = 152,
PREAD = 153,
PWRITE = 154,
NFSSVC = 155,
STATFS = 157,
FSTATFS = 158,
UNMOUNT = 159,
GETFH = 161,
FUNMOUNT = 164,
QUOTACTL = 165,
MOUNT = 167,
CSOPS = 169,
CSOPS_AUDITTOKEN = 170,
WAITID = 173,
KDEBUG_TYPEFILTER = 177,
KDEBUG_TRACE_STRING = 178,
KDEBUG_TRACE64 = 179,
KDEBUG_TRACE = 180,
SETGID = 181,
SETEGID = 182,
SETEUID = 183,
SIGRETURN = 184,
PANIC_WITH_DATA = 185,
THREAD_SELFCOUNTS = 186,
FDATASYNC = 187,
STAT = 188,
FSTAT = 189,
LSTAT = 190,
PATHCONF = 191,
FPATHCONF = 192,
GETRLIMIT = 194,
SETRLIMIT = 195,
GETDIRENTRIES = 196,
MMAP = 197,
LSEEK = 199,
TRUNCATE = 200,
FTRUNCATE = 201,
SYSCTL = 202,
MLOCK = 203,
MUNLOCK = 204,
UNDELETE = 205,
OPEN_DPROTECTED_NP = 216,
FSGETPATH_EXT = 217,
OPENAT_DPROTECTED_NP = 218,
GETATTRLIST = 220,
SETATTRLIST = 221,
GETDIRENTRIESATTR = 222,
EXCHANGEDATA = 223,
SEARCHFS = 225,
DELETE = 226,
COPYFILE = 227,
FGETATTRLIST = 228,
FSETATTRLIST = 229,
POLL = 230,
GETXATTR = 234,
FGETXATTR = 235,
SETXATTR = 236,
FSETXATTR = 237,
REMOVEXATTR = 238,
FREMOVEXATTR = 239,
LISTXATTR = 240,
FLISTXATTR = 241,
FSCTL = 242,
INITGROUPS = 243,
POSIX_SPAWN = 244,
FFSCTL = 245,
FHOPEN = 248,
MINHERIT = 250,
SEMSYS = 251,
MSGSYS = 252,
SHMSYS = 253,
SEMCTL = 254,
SEMGET = 255,
SEMOP = 256,
MSGCTL = 258,
MSGGET = 259,
MSGSND = 260,
MSGRCV = 261,
SHMAT = 262,
SHMCTL = 263,
SHMDT = 264,
SHMGET = 265,
SHM_OPEN = 266,
SHM_UNLINK = 267,
SEM_OPEN = 268,
SEM_CLOSE = 269,
SEM_UNLINK = 270,
SEM_WAIT = 271,
SEM_TRYWAIT = 272,
SEM_POST = 273,
SYSCTLBYNAME = 274,
OPEN_EXTENDED = 277,
UMASK_EXTENDED = 278,
STAT_EXTENDED = 279,
LSTAT_EXTENDED = 280,
FSTAT_EXTENDED = 281,
CHMOD_EXTENDED = 282,
FCHMOD_EXTENDED = 283,
ACCESS_EXTENDED = 284,
SETTID = 285,
GETTID = 286,
SETSGROUPS = 287,
GETSGROUPS = 288,
SETWGROUPS = 289,
GETWGROUPS = 290,
MKFIFO_EXTENDED = 291,
MKDIR_EXTENDED = 292,
IDENTITYSVC = 293,
SHARED_REGION_CHECK_NP = 294,
VM_PRESSURE_MONITOR = 296,
PSYNCH_RW_LONGRDLOCK = 297,
PSYNCH_RW_YIELDWRLOCK = 298,
PSYNCH_RW_DOWNGRADE = 299,
PSYNCH_RW_UPGRADE = 300,
PSYNCH_MUTEXWAIT = 301,
PSYNCH_MUTEXDROP = 302,
PSYNCH_CVBROAD = 303,
PSYNCH_CVSIGNAL = 304,
PSYNCH_CVWAIT = 305,
PSYNCH_RW_RDLOCK = 306,
PSYNCH_RW_WRLOCK = 307,
PSYNCH_RW_UNLOCK = 308,
PSYNCH_RW_UNLOCK2 = 309,
GETSID = 310,
SETTID_WITH_PID = 311,
PSYNCH_CVCLRPREPOST = 312,
AIO_FSYNC = 313,
AIO_RETURN = 314,
AIO_SUSPEND = 315,
AIO_CANCEL = 316,
AIO_ERROR = 317,
AIO_READ = 318,
AIO_WRITE = 319,
LIO_LISTIO = 320,
IOPOLICYSYS = 322,
PROCESS_POLICY = 323,
MLOCKALL = 324,
MUNLOCKALL = 325,
ISSETUGID = 327,
PTHREAD_KILL = 328,
PTHREAD_SIGMASK = 329,
SIGWAIT = 330,
DISABLE_THREADSIGNAL = 331,
PTHREAD_MARKCANCEL = 332,
PTHREAD_CANCELED = 333,
SEMWAIT_SIGNAL = 334,
PROC_INFO = 336,
SENDFILE = 337,
STAT64 = 338,
FSTAT64 = 339,
LSTAT64 = 340,
STAT64_EXTENDED = 341,
LSTAT64_EXTENDED = 342,
FSTAT64_EXTENDED = 343,
GETDIRENTRIES64 = 344,
STATFS64 = 345,
FSTATFS64 = 346,
GETFSSTAT64 = 347,
PTHREAD_CHDIR = 348,
PTHREAD_FCHDIR = 349,
AUDIT = 350,
AUDITON = 351,
GETAUID = 353,
SETAUID = 354,
GETAUDIT_ADDR = 357,
SETAUDIT_ADDR = 358,
AUDITCTL = 359,
BSDTHREAD_CREATE = 360,
BSDTHREAD_TERMINATE = 361,
KQUEUE = 362,
KEVENT = 363,
LCHOWN = 364,
BSDTHREAD_REGISTER = 366,
WORKQ_OPEN = 367,
WORKQ_KERNRETURN = 368,
KEVENT64 = 369,
THREAD_SELFID = 372,
LEDGER = 373,
KEVENT_QOS = 374,
KEVENT_ID = 375,
MAC_EXECVE = 380,
MAC_SYSCALL = 381,
MAC_GET_FILE = 382,
MAC_SET_FILE = 383,
MAC_GET_LINK = 384,
MAC_SET_LINK = 385,
MAC_GET_PROC = 386,
MAC_SET_PROC = 387,
MAC_GET_FD = 388,
MAC_SET_FD = 389,
MAC_GET_PID = 390,
PSELECT = 394,
PSELECT_NOCANCEL = 395,
READ_NOCANCEL = 396,
WRITE_NOCANCEL = 397,
OPEN_NOCANCEL = 398,
CLOSE_NOCANCEL = 399,
WAIT4_NOCANCEL = 400,
RECVMSG_NOCANCEL = 401,
SENDMSG_NOCANCEL = 402,
RECVFROM_NOCANCEL = 403,
ACCEPT_NOCANCEL = 404,
MSYNC_NOCANCEL = 405,
FCNTL_NOCANCEL = 406,
SELECT_NOCANCEL = 407,
FSYNC_NOCANCEL = 408,
CONNECT_NOCANCEL = 409,
SIGSUSPEND_NOCANCEL = 410,
READV_NOCANCEL = 411,
WRITEV_NOCANCEL = 412,
SENDTO_NOCANCEL = 413,
PREAD_NOCANCEL = 414,
PWRITE_NOCANCEL = 415,
WAITID_NOCANCEL = 416,
POLL_NOCANCEL = 417,
MSGSND_NOCANCEL = 418,
MSGRCV_NOCANCEL = 419,
SEM_WAIT_NOCANCEL = 420,
AIO_SUSPEND_NOCANCEL = 421,
SIGWAIT_NOCANCEL = 422,
SEMWAIT_SIGNAL_NOCANCEL = 423,
MAC_MOUNT = 424,
MAC_GET_MOUNT = 425,
MAC_GETFSSTAT = 426,
FSGETPATH = 427,
AUDIT_SESSION_SELF = 428,
AUDIT_SESSION_JOIN = 429,
FILEPORT_MAKEPORT = 430,
FILEPORT_MAKEFD = 431,
AUDIT_SESSION_PORT = 432,
PID_SUSPEND = 433,
PID_RESUME = 434,
PID_HIBERNATE = 435,
PID_SHUTDOWN_SOCKETS = 436,
KAS_INFO = 439,
MEMORYSTATUS_CONTROL = 440,
GUARDED_OPEN_NP = 441,
GUARDED_CLOSE_NP = 442,
GUARDED_KQUEUE_NP = 443,
CHANGE_FDGUARD_NP = 444,
USRCTL = 445,
PROC_RLIMIT_CONTROL = 446,
CONNECTX = 447,
DISCONNECTX = 448,
PEELOFF = 449,
SOCKET_DELEGATE = 450,
TELEMETRY = 451,
PROC_UUID_POLICY = 452,
MEMORYSTATUS_GET_LEVEL = 453,
SYSTEM_OVERRIDE = 454,
VFS_PURGE = 455,
SFI_CTL = 456,
SFI_PIDCTL = 457,
COALITION = 458,
COALITION_INFO = 459,
NECP_MATCH_POLICY = 460,
GETATTRLISTBULK = 461,
CLONEFILEAT = 462,
OPENAT = 463,
OPENAT_NOCANCEL = 464,
RENAMEAT = 465,
FACCESSAT = 466,
FCHMODAT = 467,
FCHOWNAT = 468,
FSTATAT = 469,
FSTATAT64 = 470,
LINKAT = 471,
UNLINKAT = 472,
READLINKAT = 473,
SYMLINKAT = 474,
MKDIRAT = 475,
GETATTRLISTAT = 476,
PROC_TRACE_LOG = 477,
BSDTHREAD_CTL = 478,
OPENBYID_NP = 479,
RECVMSG_X = 480,
SENDMSG_X = 481,
THREAD_SELFUSAGE = 482,
CSRCTL = 483,
GUARDED_OPEN_DPROTECTED_NP = 484,
GUARDED_WRITE_NP = 485,
GUARDED_PWRITE_NP = 486,
GUARDED_WRITEV_NP = 487,
RENAMEATX_NP = 488,
MREMAP_ENCRYPTED = 489,
NETAGENT_TRIGGER = 490,
STACK_SNAPSHOT_WITH_CONFIG = 491,
MICROSTACKSHOT = 492,
GRAB_PGO_DATA = 493,
PERSONA = 494,
MACH_EVENTLINK_SIGNAL = 496,
MACH_EVENTLINK_WAIT_UNTIL = 497,
MACH_EVENTLINK_SIGNAL_WAIT_UNTIL = 498,
WORK_INTERVAL_CTL = 499,
GETENTROPY = 500,
NECP_CLIENT_ACTION = 502,
NEXUS_OPEN = 503,
NEXUS_REGISTER = 504,
NEXUS_DEREGISTER = 505,
NEXUS_CREATE = 506,
NEXUS_DESTROY = 507,
NEXUS_GET_OPT = 508,
NEXUS_SET_OPT = 509,
CHANNEL_OPEN = 510,
CHANNEL_GET_INFO = 511,
CHANNEL_SYNC = 512,
CHANNEL_GET_OPT = 513,
CHANNEL_SET_OPT = 514,
ULOCK_WAIT = 515,
ULOCK_WAKE = 516,
FCLONEFILEAT = 517,
FS_SNAPSHOT = 518,
TERMINATE_WITH_PAYLOAD = 520,
ABORT_WITH_PAYLOAD = 521,
NECP_SESSION_ACTION = 523,
SETATTRLISTAT = 524,
NET_QOS_GUIDELINE = 525,
FMOUNT = 526,
NTP_ADJTIME = 527,
NTP_GETTIME = 528,
OS_FAULT_WITH_PAYLOAD = 529,
KQUEUE_WORKLOOP_CTL = 530,
MACH_BRIDGE_REMOTE_TIME = 531,
COALITION_LEDGER = 532,
LOG_DATA = 533,
MEMORYSTATUS_AVAILABLE_MEMORY = 534,
OBJC_BP_ASSIST_CFG_NP = 535,
SHARED_REGION_MAP_AND_SLIDE_2_NP = 536,
PIVOT_ROOT = 537,
TASK_INSPECT_FOR_PID = 538,
TASK_READ_FOR_PID = 539,
PREADV = 540,
PWRITEV = 541,
PREADV_NOCANCEL = 542,
PWRITEV_NOCANCEL = 543,
ULOCK_WAIT2 = 544,
PROC_INFO_EXTENDED_ID = 545,
TRACKER_ACTION = 546,
DEBUG_SYSCALL_REJECT = 547,
DEBUG_SYSCALL_REJECT_CONFIG = 548,
GRAFTDMG = 549,
MAP_WITH_LINKING_NP = 550,
FREADLINK = 551,
RECORD_SYSTEM_EVENT = 552,
MKFIFOAT = 553,
MKNODAT = 554,
UNGRAFTDMG = 555,
COALITION_POLICY_SET = 556,
COALITION_POLICY_GET = 557,
}
}
+11
View File
@@ -0,0 +1,11 @@
FRIDA_1.0 {
local:
*;
};
GLIBC_2.2.5 {
local:
fopen*;
fseeko*;
ftello*;
} FRIDA_1.0;
+166 -1
View File
@@ -1,9 +1,25 @@
#if defined (HAVE_TVOS) || defined (HAVE_WATCHOS)
# include <Availability.h>
# undef __TVOS_PROHIBITED
# define __TVOS_PROHIBITED
# undef __WATCHOS_PROHIBITED
# define __WATCHOS_PROHIBITED
#endif
#include "frida-gadget.h"
#include "frida-base.h"
#import <Foundation/Foundation.h>
#include <gum/gumdarwin.h>
#include <mach-o/loader.h>
#include <objc/runtime.h>
#include <pthread.h>
static void frida_on_breakpoints_steal_attempt (GumInvocationContext * ic, gpointer user_data);
static GumInvocationListener * frida_dont_steal_my_breakpoints;
gchar *
frida_gadget_environment_detect_bundle_id (void)
{
@@ -27,7 +43,7 @@ frida_gadget_environment_detect_bundle_name (void)
gchar *
frida_gadget_environment_detect_documents_dir (void)
{
#if defined (HAVE_IOS) || defined (HAVE_TVOS)
#if defined (HAVE_IOS) || defined (HAVE_TVOS) || defined (HAVE_XROS)
@autoreleasepool
{
NSArray<NSString *> * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
@@ -51,3 +67,152 @@ frida_gadget_environment_set_thread_name (const gchar * name)
/* For now only implemented on i/macOS as Fruity.Injector relies on it there. */
pthread_setname_np (name);
}
void
frida_gadget_environment_detect_darwin_location_fields (GumAddress our_address, gchar ** executable_name, gchar ** our_path,
GumMemoryRange ** our_range)
{
mach_port_t task;
GumDarwinModuleResolver * resolver;
GPtrArray * modules;
guint i;
task = mach_task_self ();
resolver = gum_darwin_module_resolver_new (task, NULL);
if (resolver == NULL)
return;
gum_darwin_module_resolver_fetch_modules (resolver, &modules, NULL);
for (i = 0; i != modules->len; i++)
{
GumModule * module;
const GumMemoryRange * range;
module = g_ptr_array_index (modules, i);
range = gum_module_get_range (module);
if (*executable_name == NULL)
{
gum_mach_header_t * header = GSIZE_TO_POINTER (range->base_address);
if (header->filetype == MH_EXECUTE)
*executable_name = g_strdup (gum_module_get_name (module));
}
if (our_address >= range->base_address && our_address < range->base_address + range->size)
{
if (*our_path == NULL)
*our_path = g_strdup (gum_module_get_path (module));
if (*our_range == NULL)
*our_range = gum_memory_range_copy (range);
}
if (*executable_name != NULL && *our_path != NULL && *our_range != NULL)
break;
}
g_ptr_array_unref (modules);
g_object_unref (resolver);
}
void
frida_gadget_environment_ensure_debugger_breakpoints_only (void)
{
task_set_exception_ports (
mach_task_self (),
EXC_MASK_ALL & ~EXC_MASK_BREAKPOINT,
MACH_PORT_NULL,
EXCEPTION_DEFAULT,
THREAD_STATE_NONE
);
if (gum_process_get_code_signing_policy () == GUM_CODE_SIGNING_OPTIONAL &&
frida_dont_steal_my_breakpoints == NULL &&
gum_darwin_is_debugger_mapping_enforced ())
{
gpointer exceptions_set, exceptions_swap;
GumInterceptor * interceptor;
exceptions_set = &task_set_exception_ports;
exceptions_swap = &task_swap_exception_ports;
frida_dont_steal_my_breakpoints = gum_make_call_listener (frida_on_breakpoints_steal_attempt,
NULL, NULL, NULL);
interceptor = gum_interceptor_obtain ();
gum_interceptor_attach (interceptor, exceptions_set, frida_dont_steal_my_breakpoints,
NULL, GUM_ATTACH_FLAGS_NONE);
gum_interceptor_attach (interceptor, exceptions_swap, frida_dont_steal_my_breakpoints,
NULL, GUM_ATTACH_FLAGS_NONE);
g_object_unref (interceptor);
}
}
void
frida_gadget_environment_allow_stolen_breakpoints (void)
{
GumInterceptor * interceptor;
if (frida_dont_steal_my_breakpoints == NULL)
return;
interceptor = gum_interceptor_obtain ();
gum_interceptor_detach (interceptor, frida_dont_steal_my_breakpoints);
g_object_unref (frida_dont_steal_my_breakpoints);
frida_dont_steal_my_breakpoints = NULL;
g_object_unref (interceptor);
}
static void
frida_on_breakpoints_steal_attempt (GumInvocationContext * ic, gpointer user_data)
{
exception_mask_t exception_mask;
exception_mask = GPOINTER_TO_SIZE (gum_invocation_context_get_nth_argument (ic, 1));
exception_mask &= ~EXC_MASK_BREAKPOINT;
gum_invocation_context_replace_nth_argument (ic, 1, GSIZE_TO_POINTER (exception_mask));
}
void
frida_gadget_environment_break_and_resume (void)
{
#ifdef HAVE_ARM64
asm volatile (
"mov x1, #1337\n\t"
"mov x2, #1337\n\t"
"mov x3, %0\n\t"
"brk #1337\n\t"
:
: "r" ((gsize) FRIDA_GADGET_BREAKPOINT_ACTION_RESUME)
: "x1", "x2", "x3"
);
#else
g_assert_not_reached ();
#endif
}
void
frida_gadget_environment_break_and_detach (void)
{
#ifdef HAVE_ARM64
asm volatile (
"mov x1, #1337\n\t"
"mov x2, #1337\n\t"
"mov x3, %0\n\t"
"brk #1337\n\t"
:
: "r" ((gsize) FRIDA_GADGET_BREAKPOINT_ACTION_DETACH)
: "x1", "x2", "x3"
);
#else
g_assert_not_reached ();
#endif
}
+13 -7
View File
@@ -9,7 +9,9 @@
# include <signal.h>
#endif
#include <gumjs/gumscriptbackend.h>
#ifdef HAVE_GIOOPENSSL
#if defined (HAVE_GIOAPPLE)
# include <gioapple.h>
#elif defined (HAVE_GIOOPENSSL)
# include <gioopenssl.h>
#endif
@@ -84,12 +86,16 @@ frida_on_unload (void)
void
frida_gadget_environment_init (void)
{
gum_init_embedded ();
#ifdef _MSC_VER
frida_libc_shim_init ();
#endif
gio_init ();
g_thread_set_garbage_handler (_frida_gadget_on_pending_thread_garbage, NULL);
#ifdef HAVE_GIOOPENSSL
#if defined (HAVE_GIOAPPLE)
g_io_module_apple_register ();
#elif defined (HAVE_GIOOPENSSL)
g_io_module_openssl_register ();
#endif
@@ -116,6 +122,8 @@ frida_gadget_environment_deinit (void)
g_assert (worker_loop != NULL);
frida_libc_shim_prepare_to_deinit ();
source = g_idle_source_new ();
g_source_set_priority (source, G_PRIORITY_LOW);
g_source_set_callback (source, stop_worker_loop, NULL, NULL);
@@ -136,13 +144,11 @@ frida_gadget_environment_deinit (void)
glib_shutdown ();
gio_deinit ();
gum_deinit_embedded ();
frida_run_atexit_handlers ();
#ifdef HAVE_DARWIN
/* Do what frida_deinit_memory() does on the other platforms. */
gum_internal_heap_unref ();
#if defined (_MSC_VER) || defined (HAVE_DARWIN)
frida_libc_shim_deinit ();
#endif
}
+46 -84
View File
@@ -24,12 +24,6 @@ namespace Frida.Gadget {
default = Gum.CodeSigningPolicy.OPTIONAL;
}
private ObjectClass klass = (ObjectClass) typeof (Config).class_ref ();
public Json.Node serialize_property (string property_name, GLib.Value value, GLib.ParamSpec pspec) {
return default_serialize_property (property_name, value, pspec);
}
public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) {
if (property_name == "interaction" && property_node.get_node_type () == Json.NodeType.OBJECT) {
var interaction_node = property_node.get_object ();
@@ -77,20 +71,6 @@ namespace Frida.Gadget {
value = Value (pspec.value_type);
return false;
}
public unowned ParamSpec? find_property (string name) {
return klass.find_property (name);
}
public new Value get_property (ParamSpec pspec) {
var val = Value (pspec.value_type);
base.get_property (pspec.name, ref val);
return val;
}
public new void set_property (ParamSpec pspec, Value value) {
base.set_property (pspec.name, value);
}
}
private sealed class ScriptInteraction : Object, Json.Serializable {
@@ -112,12 +92,6 @@ namespace Frida.Gadget {
default = Script.ChangeBehavior.IGNORE;
}
private ObjectClass klass = (ObjectClass) typeof (ScriptInteraction).class_ref ();
public Json.Node serialize_property (string property_name, GLib.Value value, GLib.ParamSpec pspec) {
return default_serialize_property (property_name, value, pspec);
}
public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) {
if (property_name == "parameters" && property_node.get_node_type () == Json.NodeType.OBJECT) {
var v = Value (typeof (Json.Node));
@@ -129,20 +103,6 @@ namespace Frida.Gadget {
value = Value (pspec.value_type);
return false;
}
public unowned ParamSpec? find_property (string name) {
return klass.find_property (name);
}
public new Value get_property (ParamSpec pspec) {
var val = Value (pspec.value_type);
base.get_property (pspec.name, ref val);
return val;
}
public new void set_property (ParamSpec pspec, Value value) {
base.set_property (pspec.name, value);
}
}
private sealed class ScriptDirectoryInteraction : Object {
@@ -183,12 +143,6 @@ namespace Frida.Gadget {
default = Script.ChangeBehavior.IGNORE;
}
private ObjectClass klass = (ObjectClass) typeof (ScriptConfig).class_ref ();
public Json.Node serialize_property (string property_name, GLib.Value value, GLib.ParamSpec pspec) {
return default_serialize_property (property_name, value, pspec);
}
public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) {
if (property_name == "parameters" && property_node.get_node_type () == Json.NodeType.OBJECT) {
var v = Value (typeof (Json.Node));
@@ -200,20 +154,6 @@ namespace Frida.Gadget {
value = Value (pspec.value_type);
return false;
}
public unowned ParamSpec? find_property (string name) {
return klass.find_property (name);
}
public new Value get_property (ParamSpec pspec) {
var val = Value (pspec.value_type);
base.get_property (pspec.name, ref val);
return val;
}
public new void set_property (ParamSpec pspec, Value value) {
base.set_property (pspec.name, value);
}
}
private sealed class ProcessFilter : Object {
@@ -299,8 +239,6 @@ namespace Frida.Gadget {
default = make_empty_json_object ();
}
private ObjectClass klass = (ObjectClass) typeof (ConnectInteraction).class_ref ();
public bool deserialize_property (string property_name, out Value value, ParamSpec pspec, Json.Node property_node) {
if (property_name == "parameters" && property_node.get_node_type () == Json.NodeType.OBJECT) {
var v = Value (typeof (Json.Node));
@@ -312,20 +250,6 @@ namespace Frida.Gadget {
value = Value (pspec.value_type);
return false;
}
public unowned ParamSpec? find_property (string name) {
return klass.find_property (name);
}
public new Value get_property (ParamSpec pspec) {
var val = Value (pspec.value_type);
base.get_property (pspec.name, ref val);
return val;
}
public new void set_property (ParamSpec pspec, Value value) {
base.set_property (pspec.name, value);
}
}
private sealed class Location : Object {
@@ -481,6 +405,12 @@ namespace Frida.Gadget {
interceptor = Gum.Interceptor.obtain ();
interceptor.begin_transaction ();
#if DARWIN
if (mapped_range != null)
Environment.ensure_debugger_breakpoints_only ();
#endif
exceptor = Gum.Exceptor.obtain ();
try {
@@ -700,6 +630,11 @@ namespace Frida.Gadget {
controller = null;
exceptor = null;
#if DARWIN
Environment.allow_stolen_breakpoints ();
#endif
interceptor = null;
}
}
@@ -759,7 +694,7 @@ namespace Frida.Gadget {
}
try {
return Json.gobject_from_data (typeof (Config), config_data) as Config;
return (Config) Json.gobject_from_data (typeof (Config), config_data);
} catch (GLib.Error e) {
throw new Error.INVALID_ARGUMENT ("Invalid config: %s", e.message);
}
@@ -767,7 +702,7 @@ namespace Frida.Gadget {
private Config parse_config (string config_data) throws Error {
try {
return Json.gobject_from_data (typeof (Config), config_data) as Config;
return (Config) Json.gobject_from_data (typeof (Config), config_data);
} catch (GLib.Error e) {
throw new Error.INVALID_ARGUMENT ("Invalid config: %s", e.message);
}
@@ -775,21 +710,20 @@ namespace Frida.Gadget {
private Location detect_location (Gum.MemoryRange? mapped_range) {
string? executable_name = null;
string? executable_path = null;
Gum.MemoryRange? executable_range = null;
string? our_path = null;
Gum.MemoryRange? our_range = mapped_range;
Gum.Address our_address = Gum.Address.from_pointer (Gum.strip_code_pointer ((void *) detect_location));
#if DARWIN
Environment.detect_darwin_location_fields (our_address, ref executable_name, ref our_path, ref our_range);
#else
var index = 0;
Gum.Process.enumerate_modules ((details) => {
var range = details.range;
if (index == 0) {
executable_name = details.name;
executable_path = details.path;
executable_range = details.range;
}
if (mapped_range != null)
@@ -805,6 +739,7 @@ namespace Frida.Gadget {
return true;
});
#endif
assert (our_range != null);
@@ -1234,7 +1169,7 @@ namespace Frida.Gadget {
}
try {
return Json.gobject_from_data (typeof (ScriptConfig), data) as ScriptConfig;
return (ScriptConfig) Json.gobject_from_data (typeof (ScriptConfig), data);
} catch (GLib.Error e) {
throw new Error.INVALID_ARGUMENT ("Invalid config: %s", e.message);
}
@@ -1748,7 +1683,7 @@ namespace Frida.Gadget {
}
}
private class ControlChannel : Object, Peer, HostSession {
private class ControlChannel : Object, Peer, HostSession, GadgetSession {
public weak ControlServer parent {
get;
construct;
@@ -1779,6 +1714,9 @@ namespace Frida.Gadget {
HostSession host_session = this;
registrations.add (connection.register_object (Frida.ObjectPath.HOST_SESSION, host_session));
GadgetSession gadget_session = this;
registrations.add (connection.register_object (Frida.ObjectPath.GADGET_SESSION, gadget_session));
AuthenticationService null_auth = new NullAuthenticationService ();
registrations.add (connection.register_object (Frida.ObjectPath.AUTHENTICATION_SERVICE, null_auth));
} catch (IOError e) {
@@ -1941,6 +1879,22 @@ namespace Frida.Gadget {
throw new Error.NOT_SUPPORTED ("Unable to open services when embedded");
}
public async void break_and_resume (Cancellable? cancellable) throws Error, IOError {
#if DARWIN
Environment.break_and_resume ();
#else
throw new Error.NOT_SUPPORTED ("This API is only applicable on Darwin");
#endif
}
public async void break_and_detach (Cancellable? cancellable) throws Error, IOError {
#if DARWIN
Environment.break_and_detach ();
#else
throw new Error.NOT_SUPPORTED ("This API is only applicable on Darwin");
#endif
}
private void validate_pid (uint pid) throws Error {
if (pid != this_process.pid)
throw new Error.NOT_SUPPORTED ("Unable to act on other processes when embedded");
@@ -2176,6 +2130,14 @@ namespace Frida.Gadget {
private extern bool has_objc_class (string name);
private extern void set_thread_name (string name);
#if DARWIN
private extern void detect_darwin_location_fields (Gum.Address our_address, ref string? executable_name,
ref string? our_path, ref Gum.MemoryRange? our_range);
private extern void ensure_debugger_breakpoints_only ();
private extern void allow_stolen_breakpoints ();
private extern void break_and_resume ();
private extern void break_and_detach ();
#endif
}
private extern void log_info (string message);
+3 -3
View File
@@ -45,7 +45,7 @@ elif host_os_family == 'darwin'
extra_link_args += '-Wl,-exported_symbols_list,' + meson.current_source_dir() / symlist
extra_link_depends += symlist
else
symscript = 'frida-gadget.version'
symscript = (libc == 'glibc') ? 'frida-gadget-glibc.version' : 'frida-gadget.version'
extra_link_args += '-Wl,--version-script,' + meson.current_source_dir() / symscript
extra_link_depends += symscript
endif
@@ -69,12 +69,12 @@ raw_gadget = shared_library('frida-gadget-raw', gadget_sources,
)
operations = [
'--move', 'constructor', 'frida_init_memory', 'first',
'--move', 'constructor', 'frida_libc_shim_init', 'first',
'--move', 'constructor', 'frida_on_load', 'last',
]
if host_os_family != 'darwin'
operations += [
'--move', 'destructor', 'frida_deinit_memory', 'first',
'--move', 'destructor', 'frida_libc_shim_deinit', 'first',
'--move', 'destructor', 'frida_on_unload', 'last',
]
endif
+8 -6
View File
@@ -4,10 +4,12 @@ endif
subdir('base')
subdir('netif')
subdir('pipe')
subdir('payload')
if have_local_backend
subdir('agent')
endif
if build_gadget
subdir('gadget')
if have_in_tree_payloads
subdir('payload')
if have_local_backend
subdir('agent')
endif
if build_gadget
subdir('gadget')
endif
endif
+68 -33
View File
@@ -44,11 +44,17 @@ namespace Frida {
#if ANDROID
public sealed class ThreadCountCloaker : Object {
private GetOsThreadStat * get_os_thread_stat_slot;
private static GetOsThreadStat old_get_os_thread_stat_impl;
private ReadFunc * read_slot;
private static ReadFunc old_read_impl;
private static string expected_magic = "%u (".printf (Posix.getpid ());
[CCode (has_target = false)]
private delegate ssize_t GetOsThreadStat (Posix.pid_t tid, void * buf, size_t count);
[CCode (has_target = false)]
private delegate ssize_t ReadFunc (int fd, void * buf, size_t count);
@@ -56,39 +62,64 @@ namespace Frida {
var art = Gum.Process.find_module_by_name ("libart.so");
if (art != null) {
art.enumerate_imports (imp => {
if (imp.name == "read") {
if (imp.name == "_ZN3art15GetOsThreadStatEiPcm" || imp.name == "_ZN3art15GetOsThreadStatEiPcj") {
get_os_thread_stat_slot = (GetOsThreadStat *) imp.slot;
} else if (imp.name == "read") {
read_slot = (ReadFunc *) imp.slot;
return false;
}
return true;
});
if (read_slot != null)
old_read_impl = update_read_slot (on_read);
if (get_os_thread_stat_slot != null) {
old_get_os_thread_stat_impl = (GetOsThreadStat) update_slot ((void **) get_os_thread_stat_slot,
(void *) on_get_os_thread_stat);
}
if (read_slot != null) {
old_read_impl = (ReadFunc) update_slot ((void **) read_slot, (void *) on_read);
}
}
}
~ThreadCountCloaker () {
if (read_slot != null)
update_read_slot (old_read_impl);
public override void dispose () {
if (get_os_thread_stat_slot != null) {
update_slot ((void **) get_os_thread_stat_slot, (void *) old_get_os_thread_stat_impl);
}
if (read_slot != null) {
update_slot ((void **) read_slot, (void *) old_read_impl);
}
base.dispose ();
}
private ReadFunc update_read_slot (ReadFunc new_impl) {
private static void * update_slot (void ** orig, void * new_impl) {
Gum.PageProtection old_prot = READ;
Gum.Memory.query_protection (read_slot, out old_prot);
Gum.Memory.query_protection (orig, out old_prot);
bool is_writable = (old_prot & Gum.PageProtection.WRITE) != 0;
if (!is_writable)
Gum.mprotect (read_slot, sizeof (void *), old_prot | WRITE);
Gum.mprotect (orig, sizeof (void *), old_prot | WRITE);
ReadFunc old_impl = *read_slot;
*read_slot = new_impl;
void * old_impl = *orig;
*orig = new_impl;
if (!is_writable)
Gum.mprotect (read_slot, sizeof (void *), old_prot);
Gum.mprotect (orig, sizeof (void *), old_prot);
return old_impl;
}
private static ssize_t on_get_os_thread_stat (Posix.pid_t tid, void * buf, size_t count) {
ssize_t n = old_get_os_thread_stat_impl (tid, buf, count);
if (tid == Posix.getpid ()) {
try {
n = adjust_thread_count (buf, n, count);
} catch (FileError e) {
}
}
return n;
}
private static ssize_t on_read (int fd, void * buf, size_t count) {
var n = old_read_impl (fd, buf, count);
if (n <= 0)
@@ -101,32 +132,36 @@ namespace Frida {
if (!file_descriptor_is_proc_self_stat (fd))
return n;
unowned string raw_str = (string) buf;
string str = raw_str.substring (0, n);
MatchInfo info;
if (!/^(\d+ \(.+\)(?: [^ ]+){17}) \d+ (.+)/s.match (str, 0, out info))
return n;
string fields_before = info.fetch (1);
string fields_after = info.fetch (2);
// We cannot simply use the value we got from the kernel and subtract the number of cloaked threads,
// as there's a chance the total may have changed in the last moment.
uint num_uncloaked_threads = query_num_uncloaked_threads ();
string adjusted_str = "%s %u %s".printf (fields_before, num_uncloaked_threads, fields_after);
var adjusted_length = adjusted_str.length;
if (adjusted_length > count)
return n;
Memory.copy (buf, adjusted_str, adjusted_length);
n = adjusted_length;
n = adjust_thread_count (buf, n, count);
} catch (FileError e) {
}
return n;
}
private static ssize_t adjust_thread_count (void * buf, ssize_t n, size_t count) throws FileError {
unowned string raw_str = (string) buf;
string str = raw_str.substring (0, n);
MatchInfo info;
if (!/^(\d+ \(.+\)(?: [^ ]+){17}) \d+ (.+)/s.match (str, 0, out info))
return n;
string fields_before = info.fetch (1);
string fields_after = info.fetch (2);
// We cannot simply use the value we got from the kernel and subtract the number of cloaked threads,
// as there's a chance the total may have changed in the last moment.
uint num_uncloaked_threads = query_num_uncloaked_threads ();
string adjusted_str = "%s %u %s".printf (fields_before, num_uncloaked_threads, fields_after);
var adjusted_length = adjusted_str.length;
if (adjusted_length > count)
return n;
Memory.copy (buf, adjusted_str, adjusted_length);
return adjusted_length;
}
private static bool file_content_might_be_from_proc_self_stat (void * content, ssize_t size) {
if (size < expected_magic.length)
return false;
+2066 -68
View File
File diff suppressed because it is too large. Load diff
+4
View File
@@ -1,4 +1,8 @@
namespace Frida {
public extern void libc_shim_prepare_to_deinit ();
#if DARWIN
public extern void libc_shim_deinit ();
#endif
public extern void run_atexit_handlers ();
public extern uint get_process_id ();
+352 -90
View File
@@ -12,9 +12,11 @@ if not meson.get_compiler('vala').version().endswith('-frida')
error('''Incompatible Vala compiler detected.
Frida currently relies on features not yet upstream. Grab the Frida-optimized
Vala compiler from:
Vala sources from:
https://github.com/frida/vala''')
https://github.com/frida/vala
and compile them with Meson.''')
endif
c_languages = ['c', 'cpp']
@@ -30,18 +32,34 @@ frida_version = get_option('frida_version')
if frida_version == ''
frida_version = run_command(releng / 'frida_version.py', meson.project_source_root(), check: true).stdout().strip()
endif
tokens = frida_version.split('.')
frida_major_version = tokens[0].to_int()
frida_minor_version = tokens[1].to_int()
if tokens.length() == 4
frida_micro_version = tokens[2].split('-')[0].to_int() - 1
frida_nano_version = tokens[3].to_int() + 1
is_dev = frida_version.contains('-dev.')
if is_dev
dev_parts = frida_version.split('-dev.')
assert(dev_parts.length() == 2)
prefix = dev_parts[0]
frida_nano_version = dev_parts[1].to_int() + 1
else
assert(tokens.length() == 3)
frida_micro_version = tokens[2].to_int()
prefix = frida_version
frida_nano_version = 0
endif
frida_profile = (frida_version != '0.0.0' and frida_nano_version == 0) ? 'prod' : 'dev'
parts = prefix.split('-')
core = parts[0]
has_suffix = parts.length() > 1
core_tokens = core.split('.')
assert(core_tokens.length() == 3)
frida_major_version = core_tokens[0].to_int()
frida_minor_version = core_tokens[1].to_int()
micro_encoded = core_tokens[2].to_int()
if is_dev and not has_suffix
frida_micro_version = micro_encoded - 1
else
frida_micro_version = micro_encoded
endif
api_version = '1.0'
@@ -90,6 +108,12 @@ elif host_machine.cpu_family() == 'mips64'
else
host_abi = 'mips64'
endif
elif host_machine.cpu_family() == 'riscv32'
host_arch = 'riscv'
host_abi = 'riscv32'
elif host_machine.cpu_family() == 'riscv64'
host_arch = 'riscv'
host_abi = 'riscv64'
else
host_arch = host_machine.cpu_family()
host_abi = host_arch
@@ -200,15 +224,21 @@ helper_name = 'frida-helper' + exe_suffix
agent_name = 'frida-agent' + shlib_suffix
gadget_name = 'frida-gadget' + shlib_suffix
root_asset_dir = get_option('libdir') / 'frida'
frida_libdir_name = f'frida-@api_version@'
root_asset_dir = get_option('libdir') / frida_libdir_name
if host_os_family == 'darwin'
asset_dir = root_asset_dir
default_asset_path_template = get_option('prefix') / get_option('libdir') / 'frida'
default_asset_path_template = get_option('prefix') / get_option('libdir') / frida_libdir_name
elif host_os_family == 'windows'
asset_dir = root_asset_dir / host_abi
asset_dir_modern = root_asset_dir / 'x86_64'
asset_dir_legacy = root_asset_dir / 'x86'
default_asset_path_template = get_option('prefix') / get_option('libdir') / frida_libdir_name / '<arch>'
else
asset_dir = root_asset_dir / host_cpu_mode
asset_dir_modern = root_asset_dir / '64'
asset_dir_legacy = root_asset_dir / '32'
default_asset_path_template = get_option('prefix') / get_option('libdir') / 'frida' / '<arch>'
default_asset_path_template = get_option('prefix') / get_option('libdir') / frida_libdir_name / '<arch>'
endif
asset_path_template = get_option('asset_path_template')
@@ -216,11 +246,22 @@ if asset_path_template == ''
asset_path_template = default_asset_path_template
endif
if get_option('assets') == 'embedded'
is_shared = get_option('default_library') == 'shared'
assets_mode = get_option('assets')
if assets_mode == 'auto'
assets_mode = is_shared ? 'installed' : 'embedded'
endif
cdata.set_quoted('FRIDA_LIBDIR', get_option('libdir'))
cdata.set_quoted('FRIDA_LIBDIR_NAME', frida_libdir_name)
if assets_mode == 'embedded'
cdata.set('HAVE_EMBEDDED_ASSETS', 1)
vala_flags += '--define=HAVE_EMBEDDED_ASSETS'
else
cdata.set_quoted('FRIDA_HELPER_PATH', asset_path_template / helper_name)
cdata.set_quoted('FRIDA_AGENT_PATH', asset_path_template / agent_name)
cdata.set_quoted('FRIDA_HELPER_NAME', helper_name)
cdata.set_quoted('FRIDA_AGENT_NAME', agent_name)
endif
cdata.set('HAVE_' + host_os_family.to_upper(), 1)
@@ -234,6 +275,7 @@ cpu_defines = [
['arm', 'HAVE_ARM'],
['arm64', 'HAVE_ARM64'],
['mips', 'HAVE_MIPS'],
['riscv', 'HAVE_RISCV'],
]
foreach d : cpu_defines
if d.get(0) == host_arch
@@ -269,26 +311,39 @@ if host_os == 'linux'
#endif
'''
if cc.compiles(glibc_src, name: 'compiling for glibc')
cdata.set('HAVE_GLIBC', 1)
libc = 'glibc'
elif cc.compiles(uclibc_src, name: 'compiling for uClibc')
cdata.set('HAVE_UCLIBC', 1)
libc = 'uclibc'
else
cdata.set('HAVE_MUSL', 1)
libc = 'musl'
endif
cdata.set('HAVE_' + libc.to_upper(), 1)
vala_flags += '--define=' + libc.to_upper()
elif host_os == 'android'
libc = 'bionic'
else
libc = 'other'
endif
if get_option('b_sanitize') == 'address'
cdata.set('HAVE_ASAN', 1)
endif
have_in_tree_payloads = get_option('default_library') != 'shared'
gum_dep = dependency('frida-gum-1.0', default_options: [
'default_library=static',
f'frida_version=@frida_version@',
'gumjs=enabled',
'gumjs=' + (have_in_tree_payloads ? 'enabled' : 'disabled'),
'inspector=enabled',
])
gumjs_dep = dependency('frida-gumjs-1.0')
gumjs_inspector_dep = dependency('frida-gumjs-inspector-1.0')
if have_in_tree_payloads
gumjs_dep = dependency('frida-gumjs-1.0', default_options: ['default_library=static'])
endif
gumjs_inspector_dep = dependency('frida-gumjs-inspector-1.0', default_options: ['default_library=static'])
glib_version_req = '>=2.74'
glib_options = [
'default_library=static',
'cocoa=disabled',
'selinux=disabled',
'xattr=false',
@@ -305,23 +360,44 @@ if optimize_for_prod
endif
gee_options = [
'default_library=static',
'disable-introspection=true',
]
if optimize_for_prod
gee_options += 'disable-internal-asserts=true'
endif
glib_dep = dependency('glib-2.0', version: '>=2.72', default_options: glib_options)
glib_dep = dependency('glib-2.0', version: glib_version_req, default_options: glib_options)
if glib_dep.type_name() == 'internal'
have_shared_glib = get_option('default_library') != 'static'
else
glib_flavor_src = '''
#include <glib.h>
#ifdef GLIB_STATIC_COMPILATION
# error GLib is static
#endif
'''
have_shared_glib = cc.compiles(glib_flavor_src, name: 'compiling with shared GLib', dependencies: [glib_dep])
endif
have_frida_glib = glib_dep.type_name() == 'internal' or cc.has_function('g_thread_set_callbacks', dependencies: [glib_dep])
if have_frida_glib
cdata.set('HAVE_FRIDA_GLIB', 1)
vala_flags += '--define=HAVE_FRIDA_GLIB'
endif
gobject_dep = dependency('gobject-2.0')
gmodule_dep = dependency('gmodule-2.0')
gio_dep = dependency('gio-2.0')
gee_dep = dependency('gee-0.8', default_options: gee_options)
json_glib_dep = dependency('json-glib-1.0', default_options: [
json_glib_dep = dependency('json-glib-1.0', version: '>=1.8', default_options: [
'default_library=static',
'introspection=disabled',
'gtk_doc=disabled',
'tests=false',
])
libsoup_dep = dependency('libsoup-3.0', default_options: [
'default_library=static',
'sqlite:default_library=static',
'gssapi=disabled',
'ntlm=disabled',
'brotli=disabled',
@@ -333,18 +409,48 @@ libsoup_dep = dependency('libsoup-3.0', default_options: [
'tests=false',
'sysprof=disabled',
])
brotlidec_dep = dependency('libbrotlidec')
if libsoup_dep.type_name() == 'internal' \
or cc.has_function('soup_websocket_connection_pause_input', dependencies: [libsoup_dep])
vala_flags += '--define=HAVE_SOUP_WEBSOCKET_BACKPRESSURE'
endif
brotlidec_dep = dependency('libbrotlidec', default_options: ['default_library=static'])
capstone_dep = dependency('capstone', default_options: ['default_library=static'])
if capstone_dep.type_name() != 'internal' \
and not cc.has_function('cs_arch_register_x86', dependencies: [capstone_dep])
add_project_arguments(
'-Dcs_arch_register_x86()=',
'-Dcs_arch_register_arm()=',
'-Dcs_arch_register_arm64()=',
'-Dcs_arch_register_mips()=',
language: ['c', 'objc'],
)
endif
quickjs_dep = dependency('quickjs', required: get_option('barebone_backend'), default_options: [
'default_library=static',
'libc=false',
'bignum=true',
'atomics=disabled',
'stack_check=disabled',
])
lzfse_dep = dependency('lzfse', required: false, default_options: ['default_library=static'])
lzfse_from_system = false
if not lzfse_dep.found() and not meson.is_cross_build()
if cc.has_header_symbol('lzfse.h', 'lzfse_decode_buffer')
lzfse_lib = cc.find_library('lzfse', required: false)
if lzfse_lib.found()
lzfse_dep = declare_dependency(dependencies: lzfse_lib)
lzfse_from_system = true
endif
endif
endif
if not lzfse_dep.found()
lzfse_dep = dependency('lzfse', required: get_option('barebone_backend'), default_options: ['default_library=static'])
endif
native_glib_dep = dependency('glib-2.0', version: '>=2.74', native: true, default_options: glib_options)
native_glib_dep = dependency('glib-2.0', version: glib_version_req, native: true, default_options: glib_options)
native_gio_dep = dependency('gio-2.0', native: true)
native_gee_dep = dependency('gee-0.8', native: true, default_options: gee_options)
native_brotlienc_dep = dependency('libbrotlienc', native: true)
native_brotlienc_dep = dependency('libbrotlienc', native: true, default_options: ['default_library=static'])
if host_os_family == 'windows'
gio_windows_dep = dependency('gio-windows-2.0')
@@ -352,6 +458,12 @@ else
gio_unix_dep = dependency('gio-unix-2.0')
endif
have_local_backend = get_option('local_backend').allowed()
if host_os_family == 'linux' and have_local_backend
libbpf_dep = dependency('libbpf', default_options: ['default_library=static'])
endif
if host_os == 'android'
minizip_dep = dependency('minizip', required: false, default_options: [
'zlib=enabled',
@@ -397,7 +509,10 @@ else
codesign = ''
endif
have_local_backend = get_option('local_backend').allowed()
have_simmy_backend = get_option('simmy_backend') \
.disable_auto_if(host_os != 'macos') \
.require(host_os == 'macos', error_message: 'Simmy backend is only available on macOS') \
.allowed()
have_fruity_backend = get_option('fruity_backend') \
.disable_auto_if(not host_docks_mobile_devices) \
.allowed()
@@ -406,12 +521,13 @@ have_droidy_backend = get_option('droidy_backend') \
.allowed()
have_socket_backend = get_option('socket_backend').allowed()
have_barebone_backend = get_option('barebone_backend') \
.disable_if(not quickjs_dep.found()) \
.disable_if(not (quickjs_dep.found() and lzfse_dep.found())) \
.disable_auto_if(not host_docks_mobile_devices) \
.allowed()
compiler_backend_opt = get_option('compiler_backend') \
.disable_auto_if(host_os == 'watchos')
have_compiler_backend = false
compiler_backend_mode = ''
if compiler_backend_opt.allowed()
go = find_program('go', native: true, required: false)
if go.found()
@@ -422,9 +538,13 @@ if compiler_backend_opt.allowed()
files('tools' / 'cgo' / 'detect.py'),
go,
host_os,
host_os_family,
host_abi,
libc,
exe_suffix,
shlib_suffix,
cc.get_id(),
assets_mode,
'>>>', cc.cmd_array(), '<<<',
'>>>', ar, '<<<',
'>>>', nm, '<<<',
@@ -437,12 +557,29 @@ if compiler_backend_opt.allowed()
status = lines[0]
if status == 'ok'
have_compiler_backend = true
tokens = lines[1].split(' ')
go_mode = tokens[0]
go_config = tokens[1]
compiler_backend_static_compilation = go_mode == 'c-archive'
if compiler_backend_static_compilation
vala_flags += '--define=COMPILER_BACKEND_STATIC_COMPILATION'
cdata.set('HAVE_COMPILER_BACKEND', 1)
compiler_backend_mode = lines[1]
go_config = lines[2]
if compiler_backend_mode == 'c-archive'
vala_flags += '--define=COMPILER_BACKEND_LINKED'
cdata.set('HAVE_COMPILER_BACKEND_LINKED', 1)
elif compiler_backend_mode == 'c-shared'
if assets_mode == 'installed'
vala_flags += '--define=COMPILER_BACKEND_INSTALLED_LIBRARY'
cdata.set_quoted('FRIDA_COMPILER_BACKEND_NAME', 'frida-compiler-backend' + shlib_suffix)
else
vala_flags += '--define=COMPILER_BACKEND_EMBEDDED_LIBRARY'
endif
elif compiler_backend_mode == 'pie'
if assets_mode == 'installed'
vala_flags += '--define=COMPILER_BACKEND_INSTALLED_EXECUTABLE'
cdata.set_quoted('FRIDA_COMPILER_BACKEND_NAME', 'frida-compiler-backend' + exe_suffix)
else
vala_flags += '--define=COMPILER_BACKEND_EMBEDDED_EXECUTABLE'
endif
else
error('Unsupported compiler backend mode: ' + compiler_backend_mode)
endif
else
error_message = lines[1]
@@ -486,6 +623,7 @@ build_tests = get_option('tests') \
.allowed()
foreach b : [['local', have_local_backend],
['simmy', have_simmy_backend],
['fruity', have_fruity_backend],
['droidy', have_droidy_backend],
['socket', have_socket_backend],
@@ -510,8 +648,10 @@ endif
gi_dep = dependency('gobject-introspection-1.0', required: false)
if gi_dep.found()
girdir = gi_dep.get_variable('girdir')
typelibdir = gi_dep.get_variable('typelibdir')
else
girdir = get_option('prefix') / get_option('datadir') / 'gir-1.0'
typelibdir = get_option('prefix') / get_option('libdir') / 'girepository-1.0'
endif
vapidir = get_option('prefix') / get_option('datadir') / 'vala' / 'vapi'
@@ -520,12 +660,15 @@ gum_vala_args = [
'--pkg=frida-gum-1.0',
'--vapidir=' + gum_dep.get_variable('frida_vapidir'),
]
gumjs_vala_args = ['--pkg=frida-gumjs-1.0', '--pkg=gio-2.0', gum_vala_args]
gumjs_inspector_vala_args = ['--pkg=frida-gumjs-inspector-1.0', gum_vala_args]
have_v8 = gumjs_dep.get_variable('gumjs_v8') == 'enabled'
if have_v8
vala_flags += ['--define=HAVE_V8']
if have_in_tree_payloads
gumjs_vala_args = ['--pkg=frida-gumjs-1.0', '--pkg=gio-2.0', gum_vala_args]
have_v8 = gumjs_dep.get_variable('gumjs_v8') == 'enabled'
if have_v8
vala_flags += ['--define=HAVE_V8']
endif
endif
backend_deps_private = []
@@ -533,6 +676,7 @@ backend_reqs_private = []
backend_libs_private = []
openssl_options = [
'default_library=static',
'cli=disabled',
]
if host_os_family == 'windows' and cc.get_argument_syntax() != 'msvc'
@@ -545,28 +689,48 @@ openssl_dep = dependency('openssl',
)
if have_fruity_backend
foreach dep : ['libnghttp2', 'libngtcp2', 'libngtcp2_crypto_quictls', 'libusb-1.0']
backend_deps_private += dependency(dep)
backend_reqs_private += dep
endforeach
backend_deps_private += dependency('libnghttp2', default_options: ['default_library=static'])
backend_reqs_private += 'libnghttp2'
lwip_options = [
'ipv4=disabled',
'ipv6=enabled',
'dns=disabled',
'arp=disabled',
'ethernet=enabled',
'tcp_mss=4036',
'tcp_snd_buf=65535',
'tcp_wnd=65535',
]
if optimize_for_prod
lwip_options += 'lwip_debug=disabled'
else
lwip_options += 'lwip_debug=enabled'
if host_os != 'macos'
backend_deps_private += dependency('libngtcp2', default_options: ['default_library=static'])
backend_reqs_private += 'libngtcp2'
ngtcp2_crypto_quictls_dep = dependency('libngtcp2_crypto_quictls', required: false, default_options: ['default_library=static'])
if ngtcp2_crypto_quictls_dep.found()
backend_deps_private += ngtcp2_crypto_quictls_dep
backend_reqs_private += 'libngtcp2_crypto_quictls'
else
backend_deps_private += dependency('libngtcp2_crypto_ossl', default_options: ['default_library=static'])
backend_reqs_private += 'libngtcp2_crypto_ossl'
vala_flags += '--define=HAVE_NGTCP2_CRYPTO_OSSL'
endif
if have_frida_glib
libusb_dep = dependency('libusb-1.0', default_options: ['default_library=static'])
else
subproject('libusb', default_options: ['default_library=static'])
libusb_dep = dependency('libusb-1.0', default_options: ['default_library=static'])
endif
backend_deps_private += libusb_dep
backend_reqs_private += 'libusb-1.0'
lwip_options = [
'default_library=static',
'ipv4=disabled',
'ipv6=enabled',
'dns=disabled',
'arp=disabled',
'ethernet=enabled',
]
if optimize_for_prod
lwip_options += 'lwip_debug=disabled'
else
lwip_options += 'lwip_debug=enabled'
endif
backend_deps_private += dependency('lwip', default_options: lwip_options)
backend_reqs_private += 'lwip'
endif
backend_deps_private += dependency('lwip', default_options: lwip_options)
backend_reqs_private += 'lwip'
endif
if quickjs_dep.found()
@@ -574,49 +738,107 @@ if quickjs_dep.found()
backend_reqs_private += 'quickjs'
endif
if host_os_family == 'linux' and cc.has_function('openpty', prefix: '#include <pty.h>')
if lzfse_dep.found()
backend_deps_private += lzfse_dep
if lzfse_from_system
backend_libs_private += '-llzfse'
else
backend_reqs_private += 'lzfse'
endif
endif
if host_os_family == 'linux' and have_local_backend
backend_deps_private += libbpf_dep
backend_reqs_private += 'libbpf'
endif
if host_os_family in ['darwin', 'freebsd'] or (host_os_family == 'linux' and cc.has_function('openpty', prefix: '#include <pty.h>'))
vala_flags += '--define=HAVE_OPENPTY'
endif
if host_os == 'android'
termux_elf_cleaner = find_program('termux-elf-cleaner', native: true)
libselinux_dep = dependency('libselinux', version: '>=3.0')
libsepol_dep = dependency('libsepol', version: '>=3.0')
libselinux_dep = dependency('libselinux', version: '>=3.0', default_options: ['default_library=static'])
libsepol_dep = dependency('libsepol', version: '>=3.0', default_options: ['default_library=static'])
backend_deps_private += [libselinux_dep, libsepol_dep]
backend_reqs_private += ['libselinux', 'libsepol']
else
termux_elf_cleaner = []
endif
tls_provider_dep = dependency('gioopenssl', required: get_option('connectivity'), default_options: [
'gnutls=disabled',
'openssl=enabled',
'libproxy=disabled',
'gnome_proxy=disabled',
'tests=false',
])
tls_provider_vala_args = []
if tls_provider_dep.found()
tls_provider_vala_args += [
'--pkg=gioopenssl',
'--vapidir=' + tls_provider_dep.get_variable('vapidir'),
]
cdata.set('HAVE_GIOOPENSSL', 1)
vala_flags += ['--define=HAVE_GIOOPENSSL']
backend_deps_private += tls_provider_dep
backend_reqs_private += 'gioopenssl'
if have_shared_glib
tls_provider_dep = gio_dep
else
use_apple_tls = false
if host_os_family == 'darwin'
apple_tls_deployment_check = '''
#include <Availability.h>
#if defined (__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 150000
# error macOS deployment target below 15.0
#endif
#if defined (__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 180000
# error iOS deployment target below 18.0
#endif
#if defined (__TV_OS_VERSION_MIN_REQUIRED) && __TV_OS_VERSION_MIN_REQUIRED < 180000
# error tvOS deployment target below 18.0
#endif
#if defined (__WATCH_OS_VERSION_MIN_REQUIRED) && __WATCH_OS_VERSION_MIN_REQUIRED < 110000
# error watchOS deployment target below 11.0
#endif
'''
use_apple_tls = cc.compiles(apple_tls_deployment_check, name: 'Apple TLS backend deployment target')
endif
if use_apple_tls
tls_provider_name = 'gioapple'
tls_provider_define_name = 'HAVE_GIOAPPLE'
tls_provider_backend_options = [
'gnutls=disabled',
'openssl=disabled',
'apple=enabled',
]
else
tls_provider_name = 'gioopenssl'
tls_provider_define_name = 'HAVE_GIOOPENSSL'
tls_provider_backend_options = [
'gnutls=disabled',
'openssl=enabled',
'apple=disabled',
]
endif
tls_provider_dep = dependency(tls_provider_name,
required: get_option('connectivity'),
default_options: tls_provider_backend_options + [
'libproxy=disabled',
'gnome_proxy=disabled',
'tests=false',
],
)
if tls_provider_dep.found()
tls_provider_vala_args += [
'--pkg=' + tls_provider_name,
'--vapidir=' + tls_provider_dep.get_variable('vapidir'),
]
cdata.set(tls_provider_define_name, 1)
vala_flags += ['--define=' + tls_provider_define_name]
backend_deps_private += tls_provider_dep
backend_reqs_private += tls_provider_name
endif
endif
nice_dep = dependency('nice', required: get_option('connectivity'), default_options: [
'default_library=static',
'gupnp=disabled',
'gstreamer=disabled',
'crypto-library=openssl',
'crypto-library=auto',
'examples=disabled',
'tests=disabled',
'introspection=disabled',
])
if nice_dep.found()
usrsctp_dep = dependency('usrsctp', default_options: [
'default_library=static',
'sctp_inet=false',
'sctp_inet6=false',
'sctp_build_programs=false',
@@ -624,8 +846,12 @@ if nice_dep.found()
cdata.set('HAVE_NICE', 1)
vala_flags += ['--define=HAVE_NICE']
backend_deps_private += [nice_dep, openssl_dep, usrsctp_dep]
backend_reqs_private += ['nice', 'openssl', 'usrsctp']
backend_deps_private += [nice_dep, usrsctp_dep]
backend_reqs_private += ['nice', 'usrsctp']
if host_os != 'macos'
backend_deps_private += openssl_dep
backend_reqs_private += 'openssl'
endif
if host_os_family in ['darwin', 'freebsd', 'qnx']
cdata.set('HAVE_SCONN_LEN', 1)
@@ -635,10 +861,10 @@ else
endif
if host_os_family == 'windows'
backend_libs_private += ['-lsetupapi']
backend_libs_private += ['-lsetupapi', '-lshlwapi']
endif
if host_os_family == 'darwin'
backend_libs_private += ['-Wl,-framework,Foundation', '-lbsm']
backend_libs_private += ['-Wl,-framework,Foundation', '-Wl,-framework,CoreFoundation', '-lbsm']
endif
if host_os == 'macos'
backend_libs_private += ['-Wl,-framework,AppKit']
@@ -646,6 +872,9 @@ endif
if host_os in ['ios', 'tvos']
backend_libs_private += ['-Wl,-framework,CoreGraphics', '-Wl,-framework,UIKit']
endif
if host_os_family == 'freebsd'
backend_libs_private += ['-lutil']
endif
if get_option('devkits').length() != 0
if get_option('default_library') != 'static'
@@ -654,6 +883,7 @@ if get_option('devkits').length() != 0
mkdevkit = [python, releng / 'mkdevkit.py']
uninstalled_dir = meson.global_build_root() / 'meson-uninstalled'
devkit_options = [
'--dep-symbol-scope', get_option('devkit_symbol_scope'),
'--cc', '>>>', cc.cmd_array(), '<<<',
'--c-args', '>>>', get_option('c_args'), '<<<',
'--pkg-config', '>>>', find_program('pkg-config'), '<<<',
@@ -704,6 +934,19 @@ post_process = [
'@INPUT0@',
]
executable_no_exports_link_args = []
executable_no_exports_link_depends = []
if host_os_family == 'darwin'
script = meson.project_source_root() / 'tools' / 'executable-no-exports.symbols'
executable_no_exports_link_args = ['-Wl,-exported_symbols_list,' + script]
executable_no_exports_link_depends = [script]
elif host_os_family != 'windows'
script_name = (host_os == 'freebsd') ? 'executable-no-exports-freebsd.version' : 'executable-no-exports.version'
script = meson.project_source_root() / 'tools' / script_name
executable_no_exports_link_args = ['-Wl,--version-script,' + script]
executable_no_exports_link_depends = [script]
endif
compile_js_agent = files('tools' / 'compile-js-agent.py')
mapper_opt = get_option('mapper')
@@ -734,11 +977,20 @@ if cc.get_id() == 'gcc' and cc.compiles('#if __GNUC__ >= 5\n#error NOTNEEDED\n#e
add_project_arguments('-w', language: 'c')
endif
vapidir = meson.current_source_dir() / 'vapi'
local_vapidir = meson.current_source_dir() / 'vapi'
vala_flags += [
'--vapidir=' + vapidir,
'--vapidir=' + local_vapidir,
'--pkg', 'config',
]
if gee_dep.type_name() not in ['internal', 'cmake']
gee_prefix = gee_dep.get_variable('prefix', default_value: '')
if gee_prefix != ''
gee_vapidir = gee_prefix / 'share' / 'vala' / 'vapi'
if fs.is_dir(gee_vapidir)
vala_flags += '--vapidir=' + gee_vapidir
endif
endif
endif
vala_flags += '--define=' + host_os_family.to_upper()
if host_os != host_os_family
@@ -750,13 +1002,22 @@ if host_abi != host_arch
endif
vala_flags += '--define=' + host_machine.endian().to_upper() + '_ENDIAN'
add_project_arguments(vala_flags, language: 'vala')
add_project_arguments('-I' + vapidir, language: 'c')
add_project_arguments('-I' + local_vapidir, language: 'c')
native_vala_flags = [
'--vapidir=' + meson.current_source_dir() / 'vapi',
'--vapidir=' + local_vapidir,
]
if native_gee_dep.type_name() not in ['internal', 'cmake']
native_gee_prefix = native_gee_dep.get_variable('prefix', default_value: '')
if native_gee_prefix != ''
native_gee_vapidir = native_gee_prefix / 'share' / 'vala' / 'vapi'
if fs.is_dir(native_gee_vapidir)
native_vala_flags += '--vapidir=' + native_gee_vapidir
endif
endif
endif
add_project_arguments(native_vala_flags, language: 'vala', native: true)
add_project_arguments('-I' + vapidir, language: 'c', native: true)
add_project_arguments('-I' + local_vapidir, language: 'c', native: true)
subdir('compat')
subdir('tools')
@@ -778,6 +1039,7 @@ endif
summary(
{
'local': have_local_backend,
'simmy': have_simmy_backend,
'fruity': have_fruity_backend,
'droidy': have_droidy_backend,
'socket': have_socket_backend,
@@ -790,7 +1052,7 @@ summary(
summary(
{
'compat': compat_summary,
'assets': get_option('assets'),
'assets': assets_mode,
'mapper': have_mapper,
'connectivity': tls_provider_dep.found(),
'gadget': build_gadget,
+17 -2
View File
@@ -10,6 +10,12 @@ option('local_backend',
description: 'Include backend for the local system',
)
option('simmy_backend',
type: 'feature',
value: 'auto',
description: 'Include the iDevice Simulator backend',
)
option('fruity_backend',
type: 'feature',
value: 'auto',
@@ -42,8 +48,8 @@ option('compiler_backend',
option('assets',
type: 'combo',
choices: ['embedded', 'installed'],
value: 'embedded',
choices: ['auto', 'embedded', 'installed'],
value: 'auto',
description: 'Whether assets such as frida-agent should be embedded vs installed and loaded at runtime'
)
@@ -150,6 +156,15 @@ option('devkits',
description: 'Devkits to build'
)
option('devkit_symbol_scope',
type: 'combo',
choices: ['prefixed', 'original'],
value: 'prefixed',
description : 'How devkit generation treats third-party symbols:\n'
+ ' - prefixed: add the \'_frida_\' prefix\n'
+ ' - original: keep symbols exactly as upstream\n'
)
option('tests',
type: 'feature',
value: 'auto',
-1
View File
@@ -1 +0,0 @@
# No exported symbols.
-9
View File
@@ -1,9 +0,0 @@
{
global:
# FreeBSD needs these two:
__progname;
environ;
local:
*;
};
+2 -14
View File
@@ -2,18 +2,6 @@ portal_sources = [
'portal.vala',
]
extra_link_args = []
extra_link_depends = []
if host_os_family == 'darwin'
symlist = 'frida-portal.symbols'
extra_link_args += ['-Wl,-exported_symbols_list,' + meson.current_source_dir() / symlist]
extra_link_depends += [symlist]
elif host_os_family != 'windows'
symscript = 'frida-portal.version'
extra_link_args += ['-Wl,--version-script,' + meson.current_source_dir() / symscript]
extra_link_depends += [symscript]
endif
extra_deps = []
if tls_provider_dep.found()
extra_deps += tls_provider_dep
@@ -21,8 +9,8 @@ endif
raw_portal = executable('frida-portal-raw', portal_sources,
vala_args: [core_vala_args, tls_provider_vala_args, '--pkg=posix'],
link_args: extra_link_args,
link_depends: extra_link_depends,
link_args: executable_no_exports_link_args,
link_depends: executable_no_exports_link_depends,
dependencies: [core_dep] + extra_deps,
)
+3 -1
View File
@@ -39,7 +39,9 @@ namespace Frida.Portal {
};
private static int main (string[] args) {
#if HAVE_GIOOPENSSL
#if HAVE_GIOAPPLE
GIOApple.register ();
#elif HAVE_GIOOPENSSL
GIOOpenSSL.register ();
#endif
+1 -1
Submodule releng updated: e10baa39a2...c1c778ea2d.
+11
View File
@@ -0,0 +1,11 @@
{
global:
# FreeBSD needs these two:
__progname;
environ;
# Allow users to load the server as a shared library with dlopen() and call main() directly
main;
local:
*;
};
+2 -1
View File
@@ -1 +1,2 @@
# No exported symbols.
# Allow users to load the server as a shared library with dlopen() and call main() directly
_main
-3
View File
@@ -1,8 +1,5 @@
{
global:
# FreeBSD needs these two:
__progname;
environ;
# Allow users to load the server as a shared library with dlopen() and call main() directly
main;
+9 -4
View File
@@ -6,7 +6,7 @@ server_sources = [
if host_os_family == 'darwin'
server_sources += ['server-darwin.m']
endif
if host_os in ['ios', 'tvos']
if host_os in ['ios', 'tvos', 'xros']
server_sources += [
'server-ios-tvos.c',
]
@@ -19,7 +19,7 @@ if host_os_family == 'darwin'
extra_link_args += ['-Wl,-exported_symbols_list,' + meson.current_source_dir() / symlist]
extra_link_depends += [symlist]
elif host_os_family != 'windows'
symscript = 'frida-server.version'
symscript = (host_os == 'freebsd') ? 'frida-server-freebsd.version' : 'frida-server.version'
extra_link_args += ['-Wl,--version-script,' + meson.current_source_dir() / symscript]
extra_link_depends += [symscript]
endif
@@ -29,15 +29,20 @@ if host_os == 'macos'
extra_link_depends += [server_plist]
endif
server_deps = [core_dep]
if host_os_family == 'darwin'
server_deps += dependency('appleframeworks', modules: ['CoreFoundation'])
endif
raw_server = executable('frida-server-raw', server_sources,
vala_args: [core_vala_args, '--pkg=posix'],
link_args: extra_link_args,
link_depends: extra_link_depends,
dependencies: [core_dep],
dependencies: server_deps,
)
server_name = 'frida-server' + exe_suffix
need_universal_server = get_option('assets') == 'installed' and server_compat != ''
need_universal_server = assets_mode == 'installed' and server_compat != ''
server = custom_target('frida-server',
input: [raw_server, 'frida-server.xcent'],
+2 -2
View File
@@ -1,7 +1,7 @@
#include "server-glue.h"
#include "frida-core.h"
#if defined (HAVE_IOS) || defined (HAVE_TVOS)
#if defined (HAVE_IOS) || defined (HAVE_TVOS) || defined (HAVE_XROS)
# include "server-ios-tvos.h"
#endif
#ifdef HAVE_ANDROID
@@ -54,7 +54,7 @@ frida_server_environment_set_verbose_logging_enabled (gboolean enabled)
void
frida_server_environment_configure (void)
{
#if defined (HAVE_IOS) || defined (HAVE_TVOS)
#if defined (HAVE_IOS) || defined (HAVE_TVOS) || defined (HAVE_XROS)
_frida_server_ios_tvos_configure ();
#endif
@@ -1,13 +1,17 @@
ANDROID_API_LEVEL ?= 21
ANDROID_SDK_ROOT ?= $(shell echo ~/Library/Android/sdk)
ANDROID_API_LEVEL ?= 19
ANDROID_SDK_ROOT ?= $(shell echo ~/Android/Sdk)
android_platform := android-$(ANDROID_API_LEVEL)
android_jar := $(ANDROID_SDK_ROOT)/platforms/$(android_platform)/android.jar
build/frida-helper.dex: build/frida-helper.jar
dx --dex --output=$@ $<
helper.dex: build/frida-helper.jar
d8 \
--classpath $(android_jar) \
--output build/ \
$<
mv build/classes.dex $@
build/frida-helper.jar: re/frida/Helper.java
build/frida-helper.jar: re/frida/Helper.java re/frida/HelperBackend.java
javac \
-cp .:$(android_jar) \
-bootclasspath $(android_jar) \
+754
View File
@@ -0,0 +1,754 @@
namespace Frida {
public sealed class AndroidHelperClient : Object {
public AndroidHelperTransport transport {
get;
construct;
}
public AndroidHelperClient (AndroidHelperTransport transport) {
Object (transport: transport);
}
public async HostApplicationInfo get_frontmost_application (FrontmostQueryOptions options,
Cancellable? cancellable) throws Error, IOError {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("get-frontmost-application")
.add_string_value (options.scope.to_nick ())
.end_array ();
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
if (response.is_null ())
return HostApplicationInfo.empty ();
Json.Reader reader = make_json_reader_from_node (response);
string? identifier = null;
string? name = null;
uint pid = 0;
HashTable<string, Variant> parameters = make_parameters_dict ();
if (reader.read_element (0)) {
identifier = reader.get_string_value ();
reader.end_element ();
}
if (reader.read_element (1)) {
name = reader.get_string_value ();
reader.end_element ();
}
if (reader.read_element (2)) {
pid = (uint) reader.get_int_value ();
reader.end_element ();
}
if (reader.read_element (3)) {
if (reader.is_object ())
add_parameters_from_json (parameters, reader);
reader.end_element ();
}
GLib.Error? error = reader.get_error ();
if (error != null)
throw new Error.PROTOCOL ("%s", error.message);
return HostApplicationInfo (identifier, name, pid, (owned) parameters);
}
public async HostApplicationInfo[] enumerate_applications (ApplicationQueryOptions options, Cancellable? cancellable)
throws Error, IOError {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("enumerate-applications");
stanza.begin_array ();
options.enumerate_selected_identifiers (identifier => stanza.add_string_value (identifier));
stanza.end_array ();
stanza
.add_string_value (options.scope.to_nick ())
.end_array ();
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
Json.Reader reader = make_json_reader_from_node (response);
int num_apps = reader.count_elements ();
if (num_apps == -1)
throw new Error.PROTOCOL ("Invalid response from helper service");
var result = new HostApplicationInfo[0];
for (int i = 0; i != num_apps; i++) {
reader.read_element (i);
string? identifier = null;
string? name = null;
uint pid = 0;
HashTable<string, Variant> parameters = make_parameters_dict ();
if (reader.read_element (0)) {
identifier = reader.get_string_value ();
reader.end_element ();
}
if (reader.read_element (1)) {
name = reader.get_string_value ();
reader.end_element ();
}
if (reader.read_element (2)) {
pid = (uint) reader.get_int_value ();
reader.end_element ();
}
if (reader.read_element (3)) {
if (reader.is_object ())
add_parameters_from_json (parameters, reader);
reader.end_element ();
}
GLib.Error? error = reader.get_error ();
if (error != null)
throw new Error.PROTOCOL ("%s", error.message);
result += HostApplicationInfo (identifier, name, pid, (owned) parameters);
reader.end_element ();
}
return result;
}
public async HostProcessInfo[] enumerate_processes (ProcessQueryOptions options, Cancellable? cancellable)
throws Error, IOError {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("enumerate-processes");
stanza.begin_array ();
options.enumerate_selected_pids (pid => stanza.add_int_value (pid));
stanza.end_array ();
stanza
.add_string_value (options.scope.to_nick ())
.end_array ();
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
Json.Reader reader = make_json_reader_from_node (response);
int num_processes = reader.count_elements ();
if (num_processes == -1)
throw new Error.PROTOCOL ("Invalid response from helper service");
var result = new HostProcessInfo[0];
for (int i = 0; i != num_processes; i++) {
reader.read_element (i);
uint pid = 0;
string? name = null;
HashTable<string, Variant> parameters = make_parameters_dict ();
if (reader.read_element (0)) {
pid = (uint) reader.get_int_value ();
reader.end_element ();
}
if (reader.read_element (1)) {
name = reader.get_string_value ();
reader.end_element ();
}
if (reader.read_element (2)) {
if (reader.is_object ())
add_parameters_from_json (parameters, reader);
reader.end_element ();
}
GLib.Error? error = reader.get_error ();
if (error != null)
throw new Error.PROTOCOL ("%s", error.message);
result += HostProcessInfo (pid, name, (owned) parameters);
reader.end_element ();
}
return result;
}
public async string get_process_name (string package, int uid, Cancellable? cancellable) throws Error, IOError {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("get-process-name")
.add_string_value (package)
.add_int_value (uid)
.end_array ();
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
var r = make_json_reader_from_node (response);
parse_envelope_or_throw (r);
r.read_element (1);
string? process_name = r.get_string_value ();
if (process_name == null)
throw new Error.PROTOCOL ("Malformed response");
return process_name;
}
public async void start_package (string package, PackageEntrypoint entrypoint, Cancellable? cancellable)
throws Error, IOError {
if (entrypoint is DefaultActivityEntrypoint) {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("start-activity")
.add_string_value (package)
.add_null_value ()
.add_int_value (entrypoint.uid)
.end_array ();
yield request_ok (stanza, cancellable);
return;
}
if (entrypoint is ActivityEntrypoint) {
var e = (ActivityEntrypoint) entrypoint;
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("start-activity")
.add_string_value (package)
.add_string_value (e.activity)
.add_int_value (entrypoint.uid)
.end_array ();
yield request_ok (stanza, cancellable);
return;
}
if (entrypoint is BroadcastReceiverEntrypoint) {
var e = (BroadcastReceiverEntrypoint) entrypoint;
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("send-broadcast")
.add_string_value (package)
.add_string_value (e.receiver)
.add_string_value (e.action)
.add_int_value (entrypoint.uid)
.end_array ();
yield request_ok (stanza, cancellable);
return;
}
assert_not_reached ();
}
public async void stop_package (string package, int uid, Cancellable? cancellable) throws Error, IOError {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("stop-package")
.add_string_value (package)
.add_int_value (uid)
.end_array ();
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
var r = make_json_reader_from_node (response);
parse_envelope_or_throw (r);
}
public async bool try_stop_package_by_pid (uint pid, Cancellable? cancellable) throws Error, IOError {
var stanza = new Json.Builder ();
stanza
.begin_array ()
.add_string_value ("try-stop-package-by-pid")
.add_int_value ((int) pid)
.end_array ();
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
var r = make_json_reader_from_node (response);
parse_envelope_or_throw (r);
r.read_element (1);
var val = r.get_value ();
if (val == null || val.get_value_type () != typeof (bool))
throw new Error.PROTOCOL ("Malformed response");
return r.get_boolean_value ();
}
private async void request_ok (Json.Builder stanza, Cancellable? cancellable) throws Error, IOError {
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
var r = make_json_reader_from_node (response);
parse_envelope_or_throw (r);
}
private void parse_envelope_or_throw (Json.Reader r) throws Error {
r.read_element (0);
string? kind = r.get_string_value ();
if (kind == null)
throw new Error.PROTOCOL ("Malformed response");
r.end_element ();
if (kind == "ok")
return;
if (kind == "error") {
r.read_element (1);
string? code = r.get_string_value ();
if (code == null)
throw new Error.PROTOCOL ("Malformed response");
r.end_element ();
r.read_element (2);
string? message = r.get_string_value ();
if (message == null)
throw new Error.PROTOCOL ("Malformed response");
r.end_element ();
if (code == "INVALID_ARGUMENT")
throw new Error.INVALID_ARGUMENT ("%s", message);
throw new Error.NOT_SUPPORTED ("%s", message);
}
throw new Error.PROTOCOL ("Malformed response");
}
private static void add_parameters_from_json (HashTable<string, Variant> parameters, Json.Reader reader) throws Error {
foreach (string name in reader.list_members ()) {
reader.read_member (name);
if (reader.is_value ()) {
Json.Node val = reader.get_value ();
parameters[name] = variant_from_json_value (val);
} else if (reader.is_array ()) {
int length = reader.count_elements ();
if (length == 0)
throw new Error.PROTOCOL ("Unexpected JSON array element shape");
if (name == "$icons") {
var icons = new VariantBuilder (new VariantType.array (VariantType.VARDICT));
for (int i = 0; i != length; i++) {
reader.read_element (i);
string? png_str = reader.get_string_value ();
if (png_str == null)
throw new Error.PROTOCOL ("Unexpected JSON icon type");
var png = new Bytes.take (Base64.decode (png_str));
icons.open (VariantType.VARDICT);
icons.add ("{sv}", "format", new Variant.string ("png"));
icons.add ("{sv}", "image", Variant.new_from_data (new VariantType ("ay"),
png.get_data (), true, png));
icons.close ();
reader.end_element ();
}
parameters["icons"] = icons.end ();
} else {
reader.read_element (0);
if (!reader.is_value ())
throw new Error.PROTOCOL ("Unexpected JSON array element type");
Variant first_element = variant_from_json_value (reader.get_value ());
reader.end_element ();
var builder = new VariantBuilder (new VariantType.array (first_element.get_type ()));
builder.add_value (first_element);
for (int i = 1; i != length; i++) {
reader.read_element (i);
if (!reader.is_value ())
throw new Error.PROTOCOL ("Unexpected JSON array element type");
builder.add_value (variant_from_json_value (reader.get_value ()));
reader.end_element ();
}
parameters[name] = builder.end ();
}
} else {
throw new Error.PROTOCOL ("Unexpected JSON type");
}
reader.end_member ();
}
}
private static Variant variant_from_json_value (Json.Node node) throws Error {
Type type = node.get_value_type ();
if (type == typeof (string))
return new Variant.string (node.get_string ());
if (type == typeof (int64))
return new Variant.int64 (node.get_int ());
if (type == typeof (bool))
return new Variant.boolean (node.get_boolean ());
throw new Error.PROTOCOL ("Unexpected JSON type: %s", type.name ());
}
}
public interface AndroidHelperTransport : Object {
public abstract async void close (Cancellable? cancellable) throws IOError;
public abstract async Json.Node request (Json.Node stanza, Cancellable? cancellable) throws Error, IOError;
}
public sealed class AndroidHelperStreamTransport : Object, AndroidHelperTransport {
public signal void closed ();
public IOStream stream {
get;
construct;
}
private BufferedInputStream input;
private OutputStream output;
private Cancellable io_cancellable = new Cancellable ();
private State state = CLOSED;
private Gee.Queue<Request> pending_requests = new Gee.ArrayQueue<Request> ();
private ByteArray pending_output = new ByteArray ();
private bool writing = false;
private enum State {
CLOSED,
OPEN
}
private const uint32 MAX_RESPONSE_SIZE = 100 * 1024 * 1024;
public AndroidHelperStreamTransport (IOStream stream) {
Object (stream: stream);
}
construct {
input = (BufferedInputStream) Object.new (typeof (BufferedInputStream),
"base-stream", stream.get_input_stream (),
"close-base-stream", false,
"buffer-size", 128 * 1024);
output = stream.get_output_stream ();
state = OPEN;
process_incoming_responses.begin ();
}
public async void close (Cancellable? cancellable) throws IOError {
io_cancellable.cancel ();
var source = new IdleSource ();
source.set_callback (close.callback);
source.attach (MainContext.get_thread_default ());
yield;
try {
yield stream.close_async (Priority.DEFAULT, cancellable);
} catch (IOError e) {
}
ensure_closed ();
}
private void ensure_closed () {
if (state == CLOSED)
return;
state = CLOSED;
closed ();
}
public async Json.Node request (Json.Node stanza, Cancellable? cancellable) throws Error, IOError {
if (state == CLOSED)
throw new Error.INVALID_OPERATION ("Helper client is closed");
var r = new Request (request.callback);
pending_requests.offer (r);
var cancel_source = new CancellableSource (cancellable);
cancel_source.set_callback (() => {
r.complete_with_error (new IOError.CANCELLED ("Operation was cancelled"));
return false;
});
cancel_source.attach (MainContext.get_thread_default ());
write_request (stanza);
yield;
cancel_source.destroy ();
cancellable.set_error_if_cancelled ();
GLib.Error? e = r.error;
if (e != null) {
if (e is Error)
throw (Error) e;
if (e is IOError.CANCELLED)
throw (IOError) e;
throw new Error.TRANSPORT ("%s", e.message);
}
return r.response;
}
private void write_request (Json.Node request) {
string request_str = Json.to_string (request, false);
uint8[] request_data = request_str.data;
uint offset = pending_output.len;
pending_output.set_size ((uint) (offset + sizeof (uint32) + request_data.length));
uint8 * blob = (uint8 *) pending_output.data + offset;
uint32 * size = blob;
*size = request_data.length.to_big_endian ();
Memory.copy (blob + 4, request_data, request_data.length);
if (!writing) {
writing = true;
var source = new IdleSource ();
source.set_callback (() => {
process_pending_output.begin ();
return false;
});
source.attach (MainContext.get_thread_default ());
}
}
private async void process_pending_output () {
while (pending_output.len > 0) {
uint8[] batch = pending_output.steal ();
size_t bytes_written;
try {
yield output.write_all_async (batch, Priority.DEFAULT, io_cancellable, out bytes_written);
} catch (GLib.Error e) {
break;
}
}
writing = false;
}
private async void process_incoming_responses () {
while (true) {
try {
Json.Node response = yield read_response ();
Request? request = pending_requests.poll ();
if (request == null)
throw new Error.PROTOCOL ("Unexpected response");
request.complete_with_response (response);
} catch (GLib.Error e) {
foreach (Request r in pending_requests)
r.complete_with_error (e);
pending_requests.clear ();
ensure_closed ();
return;
}
}
}
private async Json.Node read_response () throws GLib.Error {
size_t header_size = sizeof (uint32);
if (input.get_available () < header_size)
yield fill_until_n_bytes_available (header_size, io_cancellable);
uint32 response_size = 0;
unowned uint8[] response_size_buf = ((uint8[]) &response_size)[0:4];
input.peek (response_size_buf);
response_size = uint32.from_big_endian (response_size);
if (response_size < 1 || response_size > MAX_RESPONSE_SIZE)
throw new Error.PROTOCOL ("Invalid response size");
size_t frame_size = header_size + response_size;
if (input.get_available () < frame_size)
yield fill_until_n_bytes_available (frame_size, io_cancellable);
var response_data = new uint8[response_size + 1];
response_data.length = (int) response_size;
input.peek (response_data, header_size);
input.skip (frame_size, io_cancellable);
return Json.from_string ((string) response_data);
}
private async void fill_until_n_bytes_available (size_t minimum, Cancellable? cancellable) throws GLib.Error {
size_t available = input.get_available ();
while (available < minimum) {
if (input.get_buffer_size () < minimum)
input.set_buffer_size (minimum);
ssize_t n = yield input.fill_async ((ssize_t) (input.get_buffer_size () - available),
Priority.DEFAULT, cancellable);
if (n == 0)
throw new IOError.CONNECTION_CLOSED ("Connection closed");
available += n;
}
}
private class Request {
private SourceFunc? handler;
public Json.Node? response;
public GLib.Error? error;
public Request (owned SourceFunc handler) {
this.handler = (owned) handler;
}
public void complete_with_response (Json.Node r) {
if (handler == null)
return;
response = r;
handler ();
handler = null;
}
public void complete_with_error (GLib.Error e) {
if (handler == null)
return;
error = e;
handler ();
handler = null;
}
}
}
public abstract class PackageEntrypoint : Object {
public int uid {
get;
set;
}
public static PackageEntrypoint parse (string package, HostSpawnOptions options) throws Error {
PackageEntrypoint? entrypoint = null;
HashTable<string, Variant> aux = options.aux;
Variant? activity_value = aux["activity"];
if (activity_value != null) {
if (!activity_value.is_of_type (VariantType.STRING))
throw new Error.INVALID_ARGUMENT ("The 'activity' option must be a string");
string activity = canonicalize_class_name (activity_value.get_string (), package);
if (aux.contains ("action")) {
throw new Error.INVALID_ARGUMENT (
"The 'action' option should only be specified when a 'receiver' is specified");
}
entrypoint = new ActivityEntrypoint (activity);
}
Variant? receiver_value = aux["receiver"];
if (receiver_value != null) {
if (!receiver_value.is_of_type (VariantType.STRING))
throw new Error.INVALID_ARGUMENT ("The 'receiver' option must be a string");
string receiver = canonicalize_class_name (receiver_value.get_string (), package);
if (entrypoint != null) {
throw new Error.INVALID_ARGUMENT (
"Only one of 'activity' or 'receiver' (with 'action') may be specified");
}
Variant? action_value = aux["action"];
if (action_value == null)
throw new Error.INVALID_ARGUMENT ("The 'action' option is required when 'receiver' is specified");
if (!action_value.is_of_type (VariantType.STRING))
throw new Error.INVALID_ARGUMENT ("The 'action' option must be a string");
string action = action_value.get_string ();
entrypoint = new BroadcastReceiverEntrypoint (receiver, action);
}
if (entrypoint == null)
entrypoint = new DefaultActivityEntrypoint ();
Variant? uid_value = aux["uid"];
if (uid_value != null) {
if (!uid_value.is_of_type (VariantType.INT64))
throw new Error.INVALID_ARGUMENT ("The 'uid' option must be an integer");
entrypoint.uid = (int) uid_value.get_int64 ();
}
return entrypoint;
}
}
public sealed class DefaultActivityEntrypoint : PackageEntrypoint {
public DefaultActivityEntrypoint () {
Object ();
}
}
public sealed class ActivityEntrypoint : PackageEntrypoint {
public string activity {
get;
construct;
}
public ActivityEntrypoint (string activity) {
Object (activity: activity);
}
}
public sealed class BroadcastReceiverEntrypoint : PackageEntrypoint {
public string receiver {
get;
construct;
}
public string action {
get;
construct;
}
public BroadcastReceiverEntrypoint (string receiver, string action) {
Object (receiver: receiver, action: action);
}
}
private static string canonicalize_class_name (string klass, string package) {
var result = new StringBuilder (klass);
if (klass.has_prefix (".")) {
result.prepend (package);
} else if (klass.index_of (".") == -1) {
result.prepend_c ('.');
result.prepend (package);
}
return result.str;
}
}
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
backend_sources += files('client.vala')
android_helper_dex = files('helper.dex')
+125
View File
@@ -0,0 +1,125 @@
package re.frida;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.os.Looper;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.IOException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Helper {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: frida-helper <instance-id>");
System.exit(1);
return;
}
String instanceId = args[0];
new File("/data/local/tmp/frida-helper-" + instanceId + ".dex").delete();
LocalServerSocket socket;
try {
socket = new LocalServerSocket("/frida-helper-" + instanceId);
} catch (IOException e) {
System.err.println(e);
System.exit(2);
return;
}
new Helper(socket).run();
}
private final HelperBackend mBackend;
private final LocalServerSocket mSocket;
private final Thread mWorker;
private final int MAX_REQUEST_SIZE = 128 * 1024;
public Helper(LocalServerSocket socket) {
mBackend = new HelperBackend();
mSocket = socket;
mWorker = new Thread("Connection Listener") {
public void run() {
handleIncomingConnections();
}
};
}
private void run() {
mWorker.start();
Looper.loop();
}
private void handleIncomingConnections() {
System.out.println("READY.");
while (true) {
try {
LocalSocket client = mSocket.accept();
Thread handler = new Thread("Connection Handler") {
public void run() {
handleConnection(client);
}
};
handler.start();
} catch (IOException e) {
break;
}
}
}
protected void handleConnection(LocalSocket client) {
DataInputStream input;
DataOutputStream output;
try {
input = new DataInputStream(new BufferedInputStream(client.getInputStream()));
output = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));
} catch (IOException e) {
return;
}
while (true) {
try {
int requestSize = input.readInt();
if (requestSize < 1 || requestSize > MAX_REQUEST_SIZE)
break;
byte[] rawRequest = new byte[requestSize];
input.readFully(rawRequest);
JSONArray request = new JSONArray(new String(rawRequest));
JSONArray response = mBackend.handleRequest(request);
byte[] rawResponse = (response != null)
? response.toString().getBytes()
: JSONObject.NULL.toString().getBytes();
output.writeInt(rawResponse.length);
output.write(rawResponse);
output.flush();
} catch (JSONException e) {
break;
} catch (EOFException e) {
break;
} catch (IOException e) {
break;
}
}
try {
client.close();
} catch (IOException e) {
}
}
}
File diff suppressed because it is too large. Load diff
File renamed without changes.
File diff suppressed because it is too large. Load diff
+82 -40
View File
@@ -23,57 +23,49 @@ CORE_TAG_METHOD = f"{{{CORE_NAMESPACE}}}method"
OBJECT_TYPE_PATTERN = re.compile(r"\bpublic\s+(sealed )?(class|interface)\s+(\w+)\b")
TOPLEVEL_NAMES = [
"frida.vala",
"package-manager.vala",
"control-service.vala",
"portal-service.vala",
"file-monitor.vala",
Path("compiler") / "compiler.vala",
]
def main():
parser = argparse.ArgumentParser(description="Generate refined Frida API definitions")
parser.add_argument('--output', dest='output_type', choices=['bundle', 'header', 'gir', 'vapi', 'vapi-stamp'], default='bundle')
parser.add_argument('frida_version', metavar='frida-version', type=str)
parser.add_argument('frida_major_version', metavar='frida-major-version', type=str)
parser.add_argument('frida_minor_version', metavar='frida-minor-version', type=str)
parser.add_argument('frida_micro_version', metavar='frida-micro-version', type=str)
parser.add_argument('frida_nano_version', metavar='frida-nano-version', type=str)
parser.add_argument('api_version', metavar='api-version', type=str)
parser.add_argument('core_header', metavar='/path/to/frida-core.h', type=argparse.FileType('r', encoding='utf-8'))
parser.add_argument('core_gir', metavar='/path/to/Frida-x.y.gir', type=argparse.FileType('r', encoding='utf-8'))
parser.add_argument('core_vapi', metavar='/path/to/frida-core.vapi', type=argparse.FileType('r', encoding='utf-8'))
parser.add_argument('base_header', metavar='/path/to/frida-base.h', type=argparse.FileType('r', encoding='utf-8'))
parser.add_argument('base_gir', metavar='/path/to/FridaBase-x.y.gir', type=argparse.FileType('r', encoding='utf-8'))
parser.add_argument('base_vapi', metavar='/path/to/frida-base.vapi', type=argparse.FileType('r', encoding='utf-8'))
parser.add_argument('--output', dest='output_type', choices=['bundle', 'header', 'gir', 'vapi', 'vapi-stamp', 'symbol-maps'], default='bundle')
parser.add_argument('output_dir', metavar='/output/dir')
parser.add_argument('extra_args', nargs='*')
args = parser.parse_args()
output_type = args.output_type
frida_version = args.frida_version
frida_version_components = (
args.frida_major_version,
args.frida_minor_version,
args.frida_micro_version,
args.frida_nano_version,
)
api_version = args.api_version
core_header = args.core_header.read()
core_gir = args.core_gir.read()
core_vapi = args.core_vapi.read()
base_header = args.base_header.read()
base_gir = args.base_gir.read()
base_vapi = args.base_vapi.read()
output_dir = Path(args.output_dir)
if output_type == 'symbol-maps':
emit_symbol_maps_from_source(output_dir)
return
extra = args.extra_args
frida_version = extra[0]
frida_version_components = tuple(extra[1:5])
api_version = extra[5]
if output_type == 'vapi-stamp':
(output_dir / f"frida-core-{api_version}.vapi.stamp").write_bytes(b"")
return
toplevel_names = [
"frida.vala",
"package-manager.vala",
"control-service.vala",
"portal-service.vala",
"file-monitor.vala",
Path("compiler") / "compiler.vala",
]
core_header = Path(extra[6]).read_text(encoding='utf-8')
core_gir = Path(extra[7]).read_text(encoding='utf-8')
core_vapi = Path(extra[8]).read_text(encoding='utf-8')
base_header = Path(extra[9]).read_text(encoding='utf-8')
base_gir = Path(extra[10]).read_text(encoding='utf-8')
base_vapi = Path(extra[11]).read_text(encoding='utf-8')
toplevel_sources = []
src_dir = Path(__file__).parent.parent.resolve()
for name in toplevel_names:
for name in TOPLEVEL_NAMES:
toplevel_sources.append((src_dir / name).read_text(encoding='utf-8'))
toplevel_code = "\n".join(toplevel_sources)
@@ -238,7 +230,8 @@ def emit_gir(api: ApiSpec, core_gir: str, base_gir: str, output_dir: Path) -> st
for elem in core_elements + base_elements:
if tag_name == "class":
for child in list(elem):
if (child.tag == CORE_TAG_IMPLEMENTS and child.get("name") == "FridaBase.AgentMessageSink") \
if (child.tag == CORE_TAG_IMPLEMENTS and child.get("name") in {"Frida.HostSessionHub", "Frida.AgentMessageSink",
"FridaBase.AgentMessageSink"}) \
or child.tag == CORE_TAG_FIELD \
or child.get("name").startswith("_"):
elem.remove(child)
@@ -248,6 +241,29 @@ def emit_gir(api: ApiSpec, core_gir: str, base_gir: str, output_dir: Path) -> st
merge_and_transform_elements("interface", object_type_names)
merge_and_transform_elements("enumeration", enum_type_names | error_type_names)
for source_root in [core_root, base_root]:
for record in source_root.findall(".//record", GIR_NAMESPACES):
owner = record.get(f"{{{GLIB_NAMESPACE}}}is-gtype-struct-for")
if owner is not None and owner in object_type_names:
merged_namespace.append(record)
known_names = object_type_names | enum_type_names | error_type_names
referenced_names = set()
for elem in merged_namespace.iter():
type_name = elem.get("name")
if type_name is None:
continue
for prefix in ("Frida.", "FridaBase."):
if type_name.startswith(prefix):
referenced_names.add(type_name[len(prefix):])
break
needed_names = referenced_names - known_names
for source_root in [core_root, base_root]:
source_namespace = source_root.find("namespace", GIR_NAMESPACES)
for callback in source_namespace.findall("callback", GIR_NAMESPACES):
if callback.get("name") in needed_names:
merged_namespace.append(callback)
ET.indent(merged_root, space=" ")
result = ET.tostring(merged_root,
encoding="unicode",
@@ -303,6 +319,17 @@ def emit_vapi(api, output_dir):
output_deps_file.write("gobject-2.0\n")
output_deps_file.write("gio-2.0\n")
def emit_symbol_maps_from_source(output_dir: Path):
with OutputFile(output_dir / 'frida-core.version') as f:
f.write("{\n")
f.write(" global:\n")
f.write(" frida_*;\n")
f.write(" _frida_*;\n")
f.write("\n")
f.write(" local:\n")
f.write(" *;\n")
f.write("};\n")
def parse_api(frida_version, frida_version_components, api_version, toplevel_code, core_header, core_vapi, base_header, base_vapi):
all_headers = core_header + "\n" + base_header
@@ -324,14 +351,21 @@ def parse_api(frida_version, frida_version_components, api_version, toplevel_cod
"EndpointParameters": "PortalService",
"AuthenticationService": "EndpointParameters",
"StaticAuthenticationService": "AuthenticationService",
"WebRequestHandler": "StaticAuthenticationService",
"WebRequest": "WebRequestHandler",
"WebResponse": "WebRequest",
}
internal_type_prefixes = [
"AgentMessageKind",
"DrainStatus",
"Fruity",
"HostSession",
"LinuxCompat32Syscall",
"LinuxSyscall",
"MessageType",
"PeerSetup",
"PortConflictBehavior",
"RecordAction",
"ResultCode",
"SpawnStartState",
"State",
@@ -414,7 +448,7 @@ def parse_api(frida_version, frida_version_components, api_version, toplevel_cod
object_type.c_method_prototypes.append(method_cprototype)
elif method_name == 'get_type':
object_type.c_get_type = method_cprototype.replace("G_GNUC_CONST ;", "G_GNUC_CONST;")
for d in re.finditer(r"^typedef.+?\(\*(" + object_type.c_name + r".+?)\) \(.+\);$", core_header, re.MULTILINE):
for d in re.finditer(r"^typedef.+?\(\*(" + object_type.c_name + r".+?)\) \(.+\);$", all_headers, re.MULTILINE):
delegate_cname = d.group(1)
if delegate_cname not in seen_cdelegates:
seen_cdelegates.add(delegate_cname)
@@ -501,10 +535,12 @@ def parse_api(frida_version, frida_version_components, api_version, toplevel_cod
def function_is_public(name):
return not name.startswith("_") and \
not name.startswith("throw_") and \
name not in [
name not in {
"generate_certificate",
"get_dbus_context",
"invalidate_dbus_context",
"make_json_reader",
"make_json_reader_from_node",
"make_parameters_dict",
"compute_system_parameters",
"parse_control_address",
@@ -512,7 +548,13 @@ def function_is_public(name):
"parse_socket_address",
"negotiate_connection",
"check_kernel_version",
]
"get_syscall_signatures",
"get_compat32_syscall_signatures",
"get_xnu_mach_traps",
"get_xnu_bsd_syscalls",
"make_stdio_pipes",
"make_stdio_pipe",
}
def parse_vala_object_types(source) -> List[ApiObjectType]:
return [ApiObjectType(m.group(3), m.group(2)) for m in OBJECT_TYPE_PATTERN.finditer(source, re.MULTILINE)]
+75 -39
View File
@@ -3,6 +3,7 @@ fs = import('fs')
generate_api = [python, files('generate.py')]
generate_api_args = [
meson.current_build_dir(),
frida_version,
frida_major_version.to_string(),
frida_minor_version.to_string(),
@@ -15,7 +16,6 @@ generate_api_args = [
base_build_dir / 'frida-base.h',
base_build_dir / base_gir_name,
base_build_dir / f'frida-base-@[email protected]',
meson.current_build_dir(),
]
core_api = custom_target('frida-core-api',
@@ -44,6 +44,24 @@ glib_gir = fs.copyfile('GLib-2.0.gir', install: install_glib_girs, install_dir:
gobject_gir = fs.copyfile('GObject-2.0.gir', install: install_glib_girs, install_dir: girdir)
gio_gir = fs.copyfile('Gio-2.0.gir', install: install_glib_girs, install_dir: girdir)
g_ir_compiler = find_program('g-ir-compiler', required: false)
if g_ir_compiler.found()
custom_target('frida-core-typelib',
command: [
g_ir_compiler,
'--output', '@OUTPUT@',
'--includedir=' + girdir,
'--includedir=' + meson.current_source_dir(),
'@INPUT@',
],
input: core_public_gir,
output: f'Frida-@[email protected]',
depends: core,
install: true,
install_dir: typelibdir,
)
endif
core_public_vapi_stamp = custom_target('frida-core-vapi-stamp',
input: core_public_vapi,
output: f'frida-core-@[email protected]',
@@ -54,22 +72,26 @@ core_public_vapi_stamp = custom_target('frida-core-vapi-stamp',
],
)
core_public_lib = custom_target('frida-core-library',
input: [core] + internal_libs,
output: f'libfrida-core-@[email protected]',
command: [
python,
files('merge.py'),
lib,
libtool,
ar,
meson.current_build_dir(),
'@OUTPUT@',
'@INPUT@'
],
install: true,
install_dir: get_option('libdir'),
)
if is_shared
core_public_lib = core
else
core_public_lib = custom_target('frida-core-library',
input: [core] + internal_libs,
output: f'libfrida-core-@[email protected]',
command: [
python,
files('merge.py'),
lib,
libtool,
ar,
meson.current_build_dir(),
'@OUTPUT@',
'@INPUT@'
],
install: true,
install_dir: get_option('libdir'),
)
endif
core_public_extra_headers = []
if host_os == 'android'
@@ -96,29 +118,43 @@ installed_variables = {
'frida_vapidir': vapidir,
}
core_public_dep = declare_dependency(
sources: [core_public_h, core_public_gir, glib_gir, gobject_gir, gio_gir, core_public_vapi_stamp, core_public_extra_headers],
include_directories: include_directories('.'),
link_args: backend_libs_private,
link_with: core_public_lib,
dependencies: core_deps,
variables: uninstalled_variables,
)
core_public_dep_kwargs = {
'sources': [core_public_h, core_public_gir, glib_gir, gobject_gir, gio_gir, core_public_vapi_stamp] + core_public_extra_headers,
'include_directories': include_directories('.'),
'link_with': core_public_lib,
'dependencies': core_deps,
'variables': uninstalled_variables,
}
if not is_shared
core_public_dep_kwargs += {
'link_args': backend_libs_private,
}
endif
core_public_dep = declare_dependency(kwargs: core_public_dep_kwargs)
pkg = import('pkgconfig')
pkg.generate(
filebase: f'frida-core-@api_version@',
name: 'Frida Core Library',
version: frida_version,
description: 'Instrumentation toolkit for developers, reverse-engineers, and security researchers',
requires: ['glib-2.0', 'gobject-2.0', 'gio-2.0', 'json-glib-1.0'],
requires_private: ['gmodule-2.0', 'gee-0.8', 'libsoup-3.0', 'frida-gum-1.0', 'frida-gumjs-inspector-1.0', 'libbrotlidec'] + backend_reqs_private,
subdirs: f'frida-@api_version@',
libraries: core_public_lib,
libraries_private: backend_libs_private,
extra_cflags: ['-I${frida_includedir}'],
variables: installed_variables,
uninstalled_variables: uninstalled_variables,
)
pkg_kwargs = {
'filebase': f'frida-core-@api_version@',
'name': 'Frida Core Library',
'version': frida_version,
'description': 'Instrumentation toolkit for developers, reverse-engineers, and security researchers',
'requires': ['glib-2.0', 'gobject-2.0', 'gio-2.0', 'json-glib-1.0'],
'subdirs': f'frida-@api_version@',
'extra_cflags': ['-I${frida_includedir}'],
'variables': installed_variables,
'uninstalled_variables': uninstalled_variables,
}
if is_shared
pkg_kwargs += {
'libraries': ['-L${libdir}', f'-lfrida-core-@api_version@'],
}
else
pkg_kwargs += {
'libraries': core_public_lib,
'requires_private': ['gmodule-2.0', 'gee-0.8', 'libsoup-3.0', 'frida-gum-1.0', 'frida-gumjs-inspector-1.0', 'libbrotlidec'] + backend_reqs_private,
'libraries_private': backend_libs_private,
}
endif
pkg.generate(kwargs: pkg_kwargs)
meson.override_dependency(f'frida-core-@api_version@', core_public_dep)
+503
View File
@@ -0,0 +1,503 @@
[CCode (gir_namespace = "FridaBarebone", gir_version = "1.0")]
namespace Frida.Barebone {
public sealed class AgentConnection : Object, AsyncInitable {
public signal void script_message (AgentScriptId id, string json, Bytes? data);
private Cancellable io_cancellable = new Cancellable ();
private SocketConnection hostlink;
private BufferedInputStream input;
private OutputStream output;
private AgentConfig agent_config;
private ImageConfig? image_config;
private Machine machine;
private Allocator allocator;
private Allocation elf_allocation;
private Allocation config_allocation;
private Callback mprotect_callback;
private Callback remap_writable_pages_callback;
private Gee.Map<uint16, Promise<Variant>> pending_requests = new Gee.HashMap<uint16, Promise<Variant>> ();
private uint16 next_request_id = 1;
private const int COMMAND_TIMEOUT_MS = 25000;
public static async AgentConnection open (AgentConfig agent_config, ImageConfig? image_config, Machine machine,
Allocator allocator, Cancellable? cancellable) throws Error, IOError {
var connection = new AgentConnection () {
agent_config = agent_config,
image_config = image_config,
machine = machine,
allocator = allocator,
};
try {
yield connection.init_async (Priority.DEFAULT, cancellable);
} catch (GLib.Error e) {
throw_api_error (e);
}
return connection;
}
private async bool init_async (int io_priority, Cancellable? cancellable) throws Error, IOError {
HostlinkTransportConfig? transport_config = agent_config.transport as HostlinkTransportConfig;
if (transport_config == null)
throw new Error.NOT_SUPPORTED ("Unsupported transport config: only hostlink is supported for now");
var qmp = yield QmpClient.open (transport_config.qmp, 0, cancellable);
var link = yield qmp.open_hostlink (cancellable);
hostlink = link.connection;
input = (BufferedInputStream) Object.new (typeof (BufferedInputStream),
"base-stream", hostlink.get_input_stream (),
"close-base-stream", false,
"buffer-size", 128 * 1024);
output = hostlink.get_output_stream ();
var gdb = machine.gdb;
ByteOrder byte_order = gdb.byte_order;
uint pointer_size = gdb.pointer_size;
uint64 kernel_base;
Layout layout;
if (image_config != null) {
kernel_base = image_config.base.address;
layout = yield Layout.load_from_symbol_source (File.new_for_path (image_config.file), kernel_base,
byte_order, pointer_size, cancellable);
} else {
kernel_base = 0;
layout = new Layout.empty ();
}
if (kernel_base == 0)
throw new Error.NOT_SUPPORTED ("Missing kernel_base");
var symbols = new Gee.HashMap<string, SymbolInfo> ();
var hash_builder = new SymbolHashBuilder ();
foreach (var s in layout.symbols) {
symbols[s.name] = s;
hash_builder.add_symbol (s);
}
if (image_config != null) {
foreach (var e in image_config.symbols.entries) {
unowned string name = e.key;
if (!symbols.has_key (name)) {
var s = new SymbolInfo () {
name = name,
offset = (uint32) e.value,
symbol_type = 0xf,
section = 0x10, // FIXME
};
symbols[name] = s;
hash_builder.add_symbol (s);
}
}
}
SymbolInfo? thread_block = symbols["thread_block"];
if (thread_block == null)
throw new Error.NOT_SUPPORTED ("Missing symbol for thread_block");
var config_builder = new VariantBuilder (new VariantType ("(tuta(ssuuuu)ay)"));
config_builder.add ("t", link.mmio);
config_builder.add ("u", link.irq);
config_builder.add ("t", kernel_base);
config_builder.open (new VariantType ("a(ssuuuu)"));
foreach (var m in layout.modules) {
config_builder.add ("(ssuuuu)",
m.name,
m.version,
m.offset,
m.size,
m.start_func_offset,
m.stop_func_offset
);
}
config_builder.close ();
Bytes symbol_data = hash_builder.build (byte_order);
config_builder.add_value (Variant.new_from_data (new VariantType ("ay"), symbol_data.get_data (), true,
symbol_data));
Gum.ElfModule elf;
try {
elf = new Gum.ElfModule.from_file (agent_config.path);
} catch (Gum.Error e) {
throw new Error.INVALID_ARGUMENT ("%s", e.message);
}
var raw_elf = gdb.make_buffer (new Bytes (elf.get_file_data ()));
var missing_symbols = new Gee.ArrayList<string> ();
elf.enumerate_symbols (s => {
unowned Gum.ElfSectionDetails? sect = s.section;
if (sect != null && sect.name == ".kernel_addrs") {
string name = s.name[1:];
SymbolInfo? info = symbols[name];
if (info != null) {
size_t file_offset = (size_t) (sect.offset + (s.address - sect.address));
raw_elf.write_pointer (file_offset, kernel_base + info.offset);
} else {
missing_symbols.add (name);
}
}
return true;
});
if (!missing_symbols.is_empty) {
throw new Error.INVALID_ARGUMENT ("Missing symbols for: %s",
string.joinv (", ", missing_symbols.to_array ()));
}
yield machine.enter_exception_level (1, 1000, cancellable);
var bp = yield gdb.add_breakpoint (SOFT, kernel_base + thread_block.offset, 4, cancellable);
GDB.Breakpoint? hit_breakpoint = null;
do {
var exception = yield gdb.continue_until_exception (cancellable);
hit_breakpoint = exception.breakpoint;
} while (hit_breakpoint != bp);
yield bp.remove (cancellable);
size_t page_size = yield machine.query_page_size (cancellable);
elf_allocation = yield inject_elf (elf, raw_elf.bytes, page_size, machine, allocator, cancellable);
uint64 start_address = 0;
uint64 remap_writable_pages_address = 0;
uint64 mprotect_address = 0;
uint64 base_va = elf_allocation.virtual_address;
elf.enumerate_symbols (e => {
if (e.name == "_start")
start_address = base_va + e.address;
else if (e.name == "gum_barebone_try_remap_writable_pages")
remap_writable_pages_address = base_va + e.address;
else if (e.name == "gum_try_mprotect")
mprotect_address = base_va + e.address;
else
return true;
return start_address == 0 || mprotect_address == 0 || remap_writable_pages_address == 0;
});
if (start_address == 0)
throw new Error.INVALID_ARGUMENT ("Invalid agent: no _start symbol found");
if (remap_writable_pages_address == 0)
throw new Error.INVALID_ARGUMENT ("Invalid agent: no gum_barebone_try_remap_writable_pages symbol found");
if (mprotect_address == 0)
throw new Error.INVALID_ARGUMENT ("Invalid agent: no gum_try_mprotect symbol found");
remap_writable_pages_callback = yield new Callback (remap_writable_pages_address,
new RemapWritablePagesHandler (machine), machine, cancellable);
mprotect_callback = yield new Callback (mprotect_address, new MemoryProtectHandler (machine), machine, cancellable);
var config_blob = config_builder.end ().get_data_as_bytes ();
config_allocation = yield allocator.allocate (config_blob.get_size (), 8, cancellable);
yield gdb.write_byte_array (config_allocation.virtual_address, config_blob, cancellable);
yield machine.invoke (start_address, {
config_allocation.virtual_address,
config_allocation.size
},
cancellable);
yield gdb.continue (cancellable);
process_incoming_messages.begin ();
return true;
}
public async void close (Cancellable? cancellable) throws IOError {
io_cancellable.cancel ();
}
public async AgentScriptId create_script (string source, Cancellable? cancellable) throws Error, IOError {
var payload = new Variant ("s", source);
var response = yield execute_command (Command.CREATE_SCRIPT, payload, cancellable);
if (!response.check_format_string ("u", false))
throw new Error.PROTOCOL ("Invalid create_script response format");
uint32 script_handle;
response.get ("u", out script_handle);
return AgentScriptId (script_handle);
}
public async void load_script (AgentScriptId script_id, Cancellable? cancellable) throws Error, IOError {
var payload = new Variant ("u", script_id.handle);
yield execute_command (Command.LOAD_SCRIPT, payload, cancellable);
}
public async void destroy_script (AgentScriptId script_id, Cancellable? cancellable) throws Error, IOError {
var payload = new Variant ("u", script_id.handle);
yield execute_command (Command.DESTROY_SCRIPT, payload, cancellable);
}
public async void post_script_message (AgentScriptId script_id, string message, Bytes? data, Cancellable? cancellable)
throws Error, IOError {
var payload = new Variant ("(us)", script_id.handle, message);
// TODO: Include data.
yield execute_command (Command.POST_SCRIPT_MESSAGE, payload, cancellable);
}
private async Variant execute_command (Command command, Variant payload, Cancellable? cancellable) throws Error, IOError {
uint16 request_id = next_request_id++;
var command_message = new Variant ("(yqv)", (uint8) command, request_id, payload);
if (machine.gdb.byte_order != ByteOrder.HOST)
command_message = command_message.byteswap ();
var command_bytes = command_message.get_data_as_bytes ();
var builder = machine.gdb.make_buffer_builder ();
Bytes frame = builder
.append_uint32 ((uint32) command_bytes.get_size ())
.append_bytes (command_bytes)
.build ();
var promise = new Promise<Variant> ();
pending_requests[request_id] = promise;
try {
yield output.write_all_async (frame.get_data (), Priority.DEFAULT, cancellable, null);
} catch (GLib.Error e) {
pending_requests.unset (request_id);
throw new Error.TRANSPORT ("%s", e.message);
}
var timeout_source = new TimeoutSource (COMMAND_TIMEOUT_MS);
timeout_source.set_callback (() => {
Promise<Variant>? p;
if (pending_requests.unset (request_id, out p))
p.reject (new Error.TIMED_OUT ("Command timed out"));
return Source.REMOVE;
});
timeout_source.attach (MainContext.get_thread_default ());
try {
return yield promise.future.wait_async (cancellable);
} finally {
timeout_source.destroy ();
}
}
private async void process_incoming_messages () {
var byte_order = machine.gdb.byte_order;
try {
while (true) {
size_t header_size = 4;
if (input.get_available () < header_size)
yield fill_until_n_bytes_available (header_size);
uint32 body_size = 0;
unowned uint8[] size_buf = ((uint8[]) &body_size)[:4];
input.peek (size_buf);
body_size = uint32.from_little_endian (body_size);
size_t full_size = header_size + body_size;
if (input.get_available () < full_size)
yield fill_until_n_bytes_available (full_size);
var body = new uint8[body_size];
input.peek (body, header_size);
input.skip (full_size, io_cancellable);
var raw_message = new Bytes.take ((owned) body);
var message = Variant.new_from_data (new VariantType ("(yqv)"), raw_message.get_data (), false,
raw_message);
if (byte_order != ByteOrder.HOST)
message = message.byteswap ();
if (!message.check_format_string ("(yqv)", false))
throw new Error.PROTOCOL ("Invalid message format");
uint8 command_code;
uint16 request_id;
Variant payload;
message.get ("(yqv)", out command_code, out request_id, out payload);
if (command_code == Command.SCRIPT_MESSAGE) {
if (!payload.check_format_string ("(us)", false))
throw new Error.PROTOCOL ("Invalid script message payload format");
uint32 script_handle;
unowned string json;
payload.get ("(u&s)", out script_handle, out json);
script_message (AgentScriptId (script_handle), json, null);
} else if (command_code == Command.REPLY) {
Promise<Variant>? promise;
if (pending_requests.unset (request_id, out promise))
promise.resolve (payload);
}
}
} catch (GLib.Error e) {
}
}
private async void fill_until_n_bytes_available (size_t minimum) throws Error, IOError {
size_t available = input.get_available ();
while (available < minimum) {
if (input.get_buffer_size () < minimum)
input.set_buffer_size (minimum);
ssize_t n;
try {
n = yield input.fill_async ((ssize_t) (input.get_buffer_size () - available), Priority.DEFAULT,
io_cancellable);
} catch (GLib.Error e) {
throw new Error.TRANSPORT ("Connection closed");
}
if (n == 0)
throw new Error.TRANSPORT ("Connection closed");
available += n;
}
}
private class RemapWritablePagesHandler : Object, CallbackHandler {
public signal void output (string message);
public uint arity {
get { return 2; }
}
private Machine machine;
public RemapWritablePagesHandler (Machine machine) {
this.machine = machine;
}
public async uint64 handle_invocation (uint64[] args, CallFrame frame, Cancellable? cancellable)
throws Error, IOError {
var pages = args[0];
var num_pages = (uint) args[1];
var physical_addresses = new Gee.ArrayList<uint64?> ();
var gdb = machine.gdb;
var reader = new BufferReader (yield gdb.read_buffer (pages, num_pages * gdb.pointer_size, cancellable));
for (uint i = 0; i != num_pages; i++)
physical_addresses.add (reader.read_pointer ());
Allocation allocation = yield machine.allocate_pages (physical_addresses, cancellable);
// TODO: Handle cleanup.
return allocation.virtual_address;
}
}
private class MemoryProtectHandler : Object, CallbackHandler {
public signal void output (string message);
public uint arity {
get { return 3; }
}
private Machine machine;
public MemoryProtectHandler (Machine machine) {
this.machine = machine;
}
public async uint64 handle_invocation (uint64[] args, CallFrame frame, Cancellable? cancellable)
throws Error, IOError {
var address = args[0];
var size = (size_t) args[1];
var prot = (Gum.PageProtection) args[2];
try {
yield machine.protect_pages (address, size, prot, cancellable);
return 1;
} catch (GLib.Error e) {
return 0;
}
}
}
private enum Command {
CREATE_SCRIPT = 1,
LOAD_SCRIPT = 2,
DESTROY_SCRIPT = 3,
POST_SCRIPT_MESSAGE = 4,
REPLY = 128,
SCRIPT_MESSAGE = 129
}
private enum Status {
IDLE,
BUSY,
DATA_READY,
ERROR
}
}
private class SymbolHashBuilder : Object {
private Gee.Map<string, Gee.List<SymbolInfo>> symbol_table = new Gee.TreeMap<string, Gee.List<SymbolInfo>> ();
public void add_symbol (SymbolInfo symbol) {
var symbol_list = symbol_table[symbol.name];
if (symbol_list == null) {
symbol_list = new Gee.ArrayList<SymbolInfo> ();
symbol_table[symbol.name] = symbol_list;
}
symbol_list.add (symbol);
}
public Bytes build (ByteOrder byte_order) {
var builder = new BufferBuilder (byte_order);
var all_symbols = new Gee.ArrayList<SymbolInfo> ();
foreach (var entry in symbol_table.entries) {
foreach (var symbol in entry.value)
all_symbols.add (symbol);
}
uint total_symbols = all_symbols.size;
builder.append_uint32 (total_symbols);
var name_index_offset = builder.offset;
builder.skip (total_symbols * 4);
var addr_index_offset = builder.offset;
builder.skip (total_symbols * 4);
var symbol_offsets = new uint32[total_symbols];
for (uint i = 0; i != total_symbols; i++) {
var symbol = all_symbols[(int) i];
builder.align (4);
symbol_offsets[i] = (uint32) builder.offset;
builder.append_uint32 (symbol.offset);
// TODO: Only include details we need.
builder.append_uint8 (symbol.symbol_type);
builder.append_uint8 (symbol.section);
builder.append_uint16 (symbol.description);
builder.append_string (symbol.name, StringTerminator.NUL);
}
for (uint i = 0; i != total_symbols; i++)
builder.write_uint32 (name_index_offset + (i * 4), symbol_offsets[i]);
var addr_sorted_symbols = new Gee.ArrayList<int> ();
for (uint i = 0; i != total_symbols; i++)
addr_sorted_symbols.add ((int) i);
addr_sorted_symbols.sort ((a, b) => {
var symbol_a = all_symbols[a];
var symbol_b = all_symbols[b];
if (symbol_a.offset < symbol_b.offset)
return -1;
if (symbol_a.offset > symbol_b.offset)
return 1;
return 0;
});
for (uint i = 0; i != total_symbols; i++) {
int original_index = addr_sorted_symbols[(int) i];
uint symbol_data_offset = symbol_offsets[original_index];
builder.write_uint32 (addr_index_offset + (i * 4), symbol_data_offset);
}
return builder.build ();
}
}
}
+2
View File
@@ -0,0 +1,2 @@
[build]
target = "aarch64-unknown-none"
+296
View File
@@ -0,0 +1,296 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "aho-corasick"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "bindgen"
version = "0.72.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f"
dependencies = [
"bitflags",
"cexpr",
"clang-sys",
"itertools",
"log",
"prettyplease",
"proc-macro2",
"quote",
"regex",
"rustc-hash",
"shlex",
"syn",
]
[[package]]
name = "bitflags"
version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
[[package]]
name = "cc"
version = "1.2.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc"
dependencies = [
"shlex",
]
[[package]]
name = "cexpr"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
dependencies = [
"nom",
]
[[package]]
name = "cfg-if"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
[[package]]
name = "clang-sys"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
dependencies = [
"glob",
"libc",
"libloading",
]
[[package]]
name = "either"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "frida-barebone-agent"
version = "1.0.0"
dependencies = [
"bindgen",
"cc",
]
[[package]]
name = "glob"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
[[package]]
name = "itertools"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
dependencies = [
"either",
]
[[package]]
name = "libc"
version = "0.2.174"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
[[package]]
name = "libloading"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
dependencies = [
"cfg-if",
"windows-targets",
]
[[package]]
name = "log"
version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
[[package]]
name = "memchr"
version = "2.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
]
[[package]]
name = "prettyplease"
version = "0.2.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a"
dependencies = [
"proc-macro2",
"syn",
]
[[package]]
name = "proc-macro2"
version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
[[package]]
name = "regex"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "rustc-hash"
version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "syn"
version = "2.0.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "windows-targets"
version = "0.53.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
[[package]]
name = "windows_aarch64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
[[package]]
name = "windows_i686_gnu"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
[[package]]
name = "windows_i686_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
[[package]]
name = "windows_i686_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
[[package]]
name = "windows_x86_64_gnu"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
[[package]]
name = "windows_x86_64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+19
View File
@@ -0,0 +1,19 @@
[package]
name = "frida-barebone-agent"
version = "1.0.0"
edition = "2024"
build = "build.rs"
[profile.release]
panic = "abort"
opt-level = "z"
overflow-checks = false
lto = true
codegen-units = 1
[profile.dev]
panic = "abort"
[build-dependencies]
cc = "1.2"
bindgen = "0.72.0"
+43
View File
@@ -0,0 +1,43 @@
## Getting the C toolchain
npm install -g xpm
xpm install
export PATH=$PWD/xpacks/.bin:$PATH
## How to build Gum
./configure \
--host=aarch64-none-elf \
--enable-gumjs \
--with-devkits=gum,gumjs \
--with-devkit-symbol-scope=original
make
export GUMJS_DEVKIT_DIR=$PWD/build/bindings/gumjs/devkit
## Building
export PATH=$PWD/xpacks/.bin:$PATH
export CC_aarch64_unknown_none=aarch64-none-elf-gcc
export AR_aarch64_unknown_none=aarch64-none-elf-ar
export RANLIB_aarch64_unknown_none=aarch64-none-elf-ranlib
## Development loop
export FRIDA_BAREBONE_CONFIG=$PWD/etc/xnu.json
cargo build --release && make -C ~/src/frida-python && killall -9 qemu-system-aarch64 && sleep 2 && frida -D barebone -p 0
## Speeding up loop
./configure \
-- \
-Dfrida-core:compat=disabled \
-Dfrida-core:local_backend=disabled \
-Dfrida-core:fruity_backend=disabled \
-Dfrida-core:droidy_backend=disabled \
-Dfrida-core:socket_backend=disabled \
-Dfrida-core:compiler_backend=disabled \
-Dfrida-core:gadget=disabled \
-Dfrida-core:server=disabled \
-Dfrida-core:portal=disabled \
-Dfrida-core:inject=disabled \
-Dfrida-core:tests=enabled
+51
View File
@@ -0,0 +1,51 @@
SECTIONS {
.text : {
*(.text.entrypoint)
*(.text*)
}
.rodata : {
*(.rodata*)
}
.kernel_addrs : ALIGN(8) {
. = ALIGN(8);
_panic = .; . += 8;
_IOLog = .; . += 8;
_kalloc = .; . += 8;
_kfree = .; . += 8;
_kernel_thread_start = .; . += 8;
_assert_wait = .; . += 8;
_assert_wait_timeout = .; . += 8;
_thread_block = .; . += 8;
_thread_wakeup = .; . += 8;
_mach_absolute_time = .; . += 8;
_absolutetime_to_nanoseconds = .; . += 8;
_clock_get_calendar_microtime = .; . += 8;
_ml_io_map = .; . += 8;
_ml_vtophys = .; . += 8;
__ZN9IOService11getPlatformEv = .; . += 8;
__ZN9IOServiceC2Ev = .; . += 8;
__ZN8OSSymbol17withCStringNoCopyEPKc = .; . += 8;
__ZN6OSData9withBytesEPKvj = .; . += 8;
}
.data.rel.ro : {
*(.data.rel.ro*)
}
.got : {
*(.got*)
}
.bss : {
*(.bss*)
}
. = ALIGN(8);
_heap_start = .;
}
VERSION {
{
global:
_start;
local:
*;
};
}
+126
View File
@@ -0,0 +1,126 @@
use std::{
env, fs,
path::{Path, PathBuf},
process::{Command, Stdio},
};
fn main() {
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
let devkit_dir = PathBuf::from(env::var("GUMJS_DEVKIT_DIR").unwrap());
let cc_str = env::var("CC_aarch64_unknown_none")
.or_else(|_| env::var("CC"))
.unwrap_or_else(|_| "cc".to_string());
let cc = Path::new(&cc_str);
let cc_include_paths = detect_gcc_include_paths(cc);
let cc_library_paths = detect_gcc_library_paths(cc);
let cc_clang_args: Vec<String> = cc_include_paths
.iter()
.flat_map(|path| vec!["-isystem".to_string(), path.to_string_lossy().into_owned()])
.collect();
let bindings = bindgen::Builder::default()
.use_core()
.header(devkit_dir.join("frida-gumjs.h").to_str().unwrap())
.clang_arg("-nostdinc")
.clang_arg("-target")
.clang_arg("aarch64-none-elf")
.clang_args(cc_clang_args)
.clang_arg(format!("-I{}", devkit_dir.to_str().unwrap()))
.merge_extern_blocks(true)
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file(out_dir.join("bindings.rs"))
.expect("Couldn't write bindings");
println!(
"cargo:rustc-link-search=native={}",
devkit_dir.to_str().unwrap()
);
println!("cargo:rustc-link-lib=static=frida-gumjs");
for path in cc_library_paths {
println!("cargo:rustc-link-search=native={}", path.to_string_lossy());
}
println!("cargo:rustc-link-lib=static=c");
println!("cargo:rustc-link-lib=static=m");
println!("cargo:rustc-link-arg=--export-dynamic");
println!("cargo:rustc-link-arg=--emit-relocs");
println!("cargo:rustc-link-arg=--script=agent.lds");
println!("cargo:rustc-link-arg=--gc-sections");
println!("cargo:rerun-if-changed=build.rs");
}
pub fn detect_gcc_include_paths(gcc: &Path) -> Vec<PathBuf> {
let out = Command::new(gcc)
.args(["-xc", "-E", "-v", "-"])
.stdin(Stdio::null())
.output()
.expect("Failed to execute GCC to detect include paths");
let stderr = String::from_utf8_lossy(&out.stderr);
let mut grab = false;
let mut paths = Vec::<PathBuf>::new();
for line in stderr.lines() {
if line.starts_with("#include <...> search starts here:") {
grab = true;
continue;
}
if line.starts_with("End of search list.") {
break;
}
if !grab {
continue;
}
let raw = line.trim();
if raw.is_empty() {
continue;
}
let p = Path::new(raw);
if p.exists() {
let canonical = fs::canonicalize(p).expect("Failed to canonicalize include path");
if !paths.contains(&canonical) {
paths.push(canonical);
}
}
}
paths
}
pub fn detect_gcc_library_paths(gcc: &Path) -> Vec<PathBuf> {
let out = Command::new(gcc).arg("-print-search-dirs").output()
.expect("Failed to execute GCC to detect library paths");
let stdout = String::from_utf8_lossy(&out.stdout);
let line = stdout.lines().find(|l| l.starts_with("libraries:"))
.expect("Failed to find libraries line in GCC output");
let raw_dirs = line.trim_start_matches("libraries: =");
let sep = if cfg!(windows) { ';' } else { ':' };
let mut paths = Vec::new();
for raw in raw_dirs.split(sep) {
if raw.is_empty() {
continue;
}
let p = Path::new(raw);
if !p.exists() {
continue;
}
let canonical = fs::canonicalize(p).expect("Failed to canonicalize library path");
if !paths.contains(&canonical) {
paths.push(canonical);
}
}
paths
}
+8
View File
@@ -0,0 +1,8 @@
export FRIDA_BAREBONE_CONFIG=$PWD/etc/xnu.json
export PYTHONPATH=$HOME/src/frida-python
export PATH=$PWD/xpacks/.bin:$PATH
export CC_aarch64_unknown_none=aarch64-none-elf-gcc
export AR_aarch64_unknown_none=aarch64-none-elf-ar
export RANLIB_aarch64_unknown_none=aarch64-none-elf-ranlib
export GUMJS_DEVKIT_DIR=/home/oleavr/src/frida-gum/build/bindings/gumjs/devkit
+6
View File
@@ -0,0 +1,6 @@
{
"connection": {
"host": "127.0.0.1",
"port": 9000
}
}
+18
View File
@@ -0,0 +1,18 @@
{
"connection": {
"host": "127.0.0.1",
"port": 9000
},
"allocator": {
"mode": "physical",
"physical_base": "0x8ec9b4000"
},
"agent": {
"path": "/Users/oleavr/src/frida-core/src/barebone/agent/target/aarch64-unknown-none/debug/frida-barebone-agent",
"transport": {
"type": "ram",
"path": "/Volumes/RAM Disk/ios-dram",
"base_address": "0x800000000"
}
}
}
+42
View File
@@ -0,0 +1,42 @@
{
"connection": {
"host": "127.0.0.1",
"port": 9000
},
"allocator": {
"mode": "target-functions",
"alloc_function": "0xfffffff007a3c278",
"free_function": "0xfffffff007a3c338"
},
"agent": {
"path": "/Users/oleavr/src/frida-core/src/barebone/agent/target/aarch64-unknown-none/release/frida-barebone-agent",
"transport": {
"type": "hostlink",
"qmp": "unix:/Users/oleavr/src/frida-barebone-ios/qmp.sock"
}
},
"image": {
"file": "/Users/oleavr/src/frida-barebone-ios/iPhone11_8_iPhone12_1_14.0_18A5351d_Restore/kernelcache.research.iphone12b",
"base": "0xfffffff007004000",
"symbols": {
"IOLog": "0xfedb68",
"_ZN6OSData9withBytesEPKvj": "0xf88588",
"_ZN8OSSymbol17withCStringNoCopyEPKc": "0xfc05dc",
"_ZN9IOService11getPlatformEv": "0x101ad48",
"_ZN9IOServiceC2Ev": "0x1018318",
"absolutetime_to_nanoseconds": "0xb5d1e4",
"assert_wait": "0xa4d294",
"assert_wait_timeout": "0xa4d430",
"clock_get_calendar_microtime": "0xa1f32c",
"kalloc": "0xa38278",
"kernel_thread_start": "0xa70674",
"kfree": "0xa38338",
"mach_absolute_time": "0xb5ccc0",
"ml_io_map": "0xb57a04",
"ml_vtophys": "0xb584a0",
"panic": "0x27d7944",
"thread_block": "0xa51728",
"thread_wakeup": "0xa54ea0"
}
}
}
@@ -0,0 +1,34 @@
const _copyinstr = new NativeFunction(
DebugSymbol.getFunctionByName('copyinstr'),
'int',
['pointer', 'pointer', 'size_t', 'pointer']);
const { pointerSize } = Process;
Interceptor.attach(DebugSymbol.getFunctionByName('__mac_execve'), {
onEnter(args) {
const fname = copyinstr(args[1].readPointer());
console.log(`>>> __mac_execve() fname=${fname}`);
},
onLeave(retval) {
console.log(`<<< __mac_execve() => ${retval.toInt32()}`);
}
});
Interceptor.attach(DebugSymbol.getFunctionByName('posix_spawn'), {
onEnter(args) {
const path = copyinstr(args[1].add(pointerSize).readPointer());
console.log(`>>> posix_spawn() path=${path}`);
},
onLeave(retval) {
console.log(`<<< posix_spawn() => ${retval.toInt32()}`);
}
});
function copyinstr(userAddr) {
const bufSize = 4096;
const buf = Memory.alloc(bufSize);
const actual = Memory.alloc(pointerSize);
if (_copyinstr(userAddr, buf, bufSize, actual) !== 0)
throw new Error('copyinstr failed');
return buf.readUtf8String();
}
+10
View File
@@ -0,0 +1,10 @@
console.log("Agent loading");
const cm = new CModule(File.readAllBytes("./target/aarch64-unknown-none/release/frida-barebone-agent"));
//const cm = new CModule(File.readAllBytes("./target/aarch64-unknown-none/debug/frida-barebone-agent"));
const start = new NativeFunction(cm._start, "pointer", []);
const bufferPhysicalAddress = start();
console.log("Ready! Buffer is at physical address:", bufferPhysicalAddress);
$gdb.continue();
Object.assign(globalThis, { cm, start });
+19
View File
@@ -0,0 +1,19 @@
{
"name": "frida-barebone-agent",
"version": "1.0.0",
"description": "xPack configuration for frida-barebone-agent",
"xpack": {
"minimumXpmRequired": "0.20.8",
"dependencies": {},
"devDependencies": {
"@xpack-dev-tools/aarch64-none-elf-gcc": {
"specifier": "14.2.1-1.1.1",
"local": "link",
"platforms": "all"
}
},
"properties": {},
"actions": {},
"buildConfigurations": {}
}
}
Loaded 100 of 334 files, more files were not shown because too many files have changed in this diff. Show more