mirror of
https://github.com/frida/frida-core.git
synced 2026-11-13 04:31:07 -10:00
Compare commits
No files matched your search
@@ -331,7 +331,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
|
||||
@@ -428,6 +428,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]
|
||||
@@ -445,7 +446,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"
|
||||
@@ -461,6 +462,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]
|
||||
@@ -478,7 +480,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"
|
||||
|
||||
+19
-8
@@ -149,9 +149,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 +190,21 @@ 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)
|
||||
if host_os == "windows" and host_arch in {"x86_64", "x86"} and have_toolchain:
|
||||
group = OutputGroup(other_label, other_triplet, extra_environ)
|
||||
outputs[group] = [
|
||||
Output(identifier="helper_legacy",
|
||||
Output(identifier=f"helper_{other_kind}",
|
||||
name=HELPER_FILE_WINDOWS.name,
|
||||
file=HELPER_FILE_WINDOWS,
|
||||
target=HELPER_TARGET),
|
||||
Output(identifier="agent_legacy",
|
||||
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),
|
||||
|
||||
+2
-15
@@ -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],
|
||||
)
|
||||
|
||||
|
||||
@@ -51,6 +51,8 @@ void
|
||||
_frida_agent_environment_deinit (void)
|
||||
{
|
||||
#ifndef HAVE_MUSL
|
||||
frida_libc_shim_prepare_to_deinit ();
|
||||
|
||||
gum_shutdown ();
|
||||
gio_shutdown ();
|
||||
glib_shutdown ();
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
FRIDA_1.0 {
|
||||
global:
|
||||
frida_agent_main;
|
||||
|
||||
local:
|
||||
*;
|
||||
};
|
||||
|
||||
GLIBC_2.2.5 {
|
||||
local:
|
||||
fopen*;
|
||||
fseeko*;
|
||||
ftello*;
|
||||
} FRIDA_1.0;
|
||||
@@ -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
|
||||
|
||||
+262
-127
@@ -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) {
|
||||
@@ -470,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")]
|
||||
@@ -488,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_t.min (size, this.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) {
|
||||
@@ -508,9 +529,14 @@ namespace Frida {
|
||||
}
|
||||
|
||||
public Bytes read_bytes (size_t offset, size_t size) {
|
||||
var data = new uint8[size + 1];
|
||||
Memory.copy (data, get_pointer (offset, size), size);
|
||||
return new Bytes.take ((owned) data);
|
||||
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) {
|
||||
@@ -521,129 +547,49 @@ namespace Frida {
|
||||
|
||||
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 {
|
||||
return _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 () 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 {
|
||||
@@ -652,6 +598,195 @@ namespace Frida {
|
||||
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");
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -1,73 +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
|
||||
#elif defined (HAVE_RISCV)
|
||||
# if GLIB_SIZEOF_VOID_P == 8
|
||||
# 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
|
||||
# else
|
||||
# error RISC-V 32-bit not yet supported
|
||||
# endif
|
||||
#else
|
||||
# error FIXME
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
Executable
+1854
File diff suppressed because it is too large.
Load diff
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
+461
-3
@@ -11,6 +11,52 @@ namespace Frida {
|
||||
return (linux_major == major && linux_minor >= minor) || linux_major > major;
|
||||
}
|
||||
|
||||
public struct DevId {
|
||||
public uint32 major;
|
||||
public uint32 minor;
|
||||
|
||||
public DevId (uint32 major, uint32 minor) {
|
||||
this.major = major;
|
||||
this.minor = minor;
|
||||
}
|
||||
|
||||
public uint64 pack () {
|
||||
return ((uint64) major << 32) | minor;
|
||||
}
|
||||
|
||||
public static DevId unpack (uint64 dev) {
|
||||
return DevId ((uint32) (dev >> 32), (uint32) dev);
|
||||
}
|
||||
|
||||
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 {
|
||||
private uint pid;
|
||||
|
||||
@@ -42,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]
|
||||
@@ -78,7 +124,419 @@ 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);
|
||||
}
|
||||
}
|
||||
|
||||
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,
|
||||
}
|
||||
}
|
||||
|
||||
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)));
|
||||
}
|
||||
|
||||
private size_t round_up_8 (size_t x) {
|
||||
return (x + 7) & ~((size_t) 7);
|
||||
}
|
||||
}
|
||||
+27
-2
@@ -15,6 +15,8 @@ base_sources = [
|
||||
'buffer.vala',
|
||||
'buffer-glue.c',
|
||||
'value.vala',
|
||||
'xnu-syscalls' / 'xnu-syscalls.vala',
|
||||
'xnu-syscalls' / 'xnu-syscalls-glue.c',
|
||||
]
|
||||
|
||||
extra_vala_args = []
|
||||
@@ -39,10 +41,29 @@ if host_os_family == 'darwin'
|
||||
endif
|
||||
|
||||
if host_os_family == 'linux'
|
||||
base_sources += 'linux.vala'
|
||||
base_sources += [
|
||||
'linux.vala',
|
||||
]
|
||||
extra_vala_args += [
|
||||
'--pkg=linux',
|
||||
'--pkg=linux-system',
|
||||
'--pkg=frida-atomics',
|
||||
'--pkg=libbpf',
|
||||
]
|
||||
|
||||
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
|
||||
|
||||
@@ -54,6 +75,9 @@ extra_deps = []
|
||||
if host_os_family != 'windows'
|
||||
extra_deps += gio_unix_dep
|
||||
endif
|
||||
if host_os_family == 'linux'
|
||||
extra_deps += libbpf_dep
|
||||
endif
|
||||
|
||||
base_vala_args = [gum_vala_args, '--pkg=gio-2.0', '--pkg=json-glib-1.0']
|
||||
if nice_dep.found()
|
||||
@@ -74,6 +98,7 @@ endif
|
||||
if host_os_family == 'linux'
|
||||
base_vala_args += [
|
||||
'--vapidir=' + meson.current_source_dir(),
|
||||
'--pkg=frida-linux',
|
||||
'--pkg=gio-unix-2.0',
|
||||
]
|
||||
endif
|
||||
|
||||
+12
-1
@@ -2170,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2196,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -940,6 +940,9 @@ namespace Frida {
|
||||
Memory.copy (buffer, recv_queue.data, n);
|
||||
recv_queue.remove_range (0, (uint) n);
|
||||
|
||||
if (recv_queue.len == 0)
|
||||
websocket.resume_input ();
|
||||
|
||||
update_pending_io ();
|
||||
} else {
|
||||
if (state == OPEN)
|
||||
@@ -1006,6 +1009,7 @@ namespace Frida {
|
||||
private void on_message (int type, Bytes message) {
|
||||
with_state_lock (() => {
|
||||
recv_queue.append (message.get_data ());
|
||||
websocket.pause_input ();
|
||||
update_pending_io ();
|
||||
});
|
||||
}
|
||||
|
||||
Executable
+860
@@ -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())
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
FRIDA_1.0 {
|
||||
local:
|
||||
*;
|
||||
};
|
||||
|
||||
GLIBC_2.2.5 {
|
||||
local:
|
||||
fopen*;
|
||||
fseeko*;
|
||||
ftello*;
|
||||
} FRIDA_1.0;
|
||||
@@ -118,6 +118,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);
|
||||
|
||||
@@ -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
|
||||
|
||||
+404
-30
@@ -10,6 +10,7 @@
|
||||
# include <assert.h>
|
||||
# include <fcntl.h>
|
||||
# include <unistd.h>
|
||||
# include <wchar.h>
|
||||
#endif
|
||||
#if defined (HAVE_DARWIN)
|
||||
# include <sys/attr.h>
|
||||
@@ -23,23 +24,50 @@
|
||||
# include <xlocale.h>
|
||||
#endif
|
||||
|
||||
#undef __srget
|
||||
#undef feof
|
||||
#undef ferror
|
||||
#undef fgetwc
|
||||
#undef fopen
|
||||
#undef fopen64
|
||||
#undef fputwc
|
||||
#undef fseek
|
||||
#undef fseeko
|
||||
#undef fseeko64
|
||||
#undef ftell
|
||||
#undef ftello
|
||||
#undef ftello64
|
||||
#undef getc
|
||||
#undef getc_unlocked
|
||||
#undef getwc
|
||||
#undef memcpy
|
||||
#undef putc
|
||||
#undef putchar
|
||||
#undef putwc
|
||||
#undef setbuf
|
||||
#undef setbuffer
|
||||
#undef setlinebuf
|
||||
#undef snprintf
|
||||
#undef sprintf
|
||||
#undef stderr
|
||||
#undef stdin
|
||||
#undef stdout
|
||||
#undef ungetc
|
||||
#undef ungetwc
|
||||
#undef vsnprintf
|
||||
|
||||
#ifdef HAVE_MUSL
|
||||
# define FRIDA_STDIO_OPAQUE_FILE 1
|
||||
#endif
|
||||
|
||||
static gboolean frida_deinit_expected = FALSE;
|
||||
|
||||
void
|
||||
frida_libc_shim_prepare_to_deinit (void)
|
||||
{
|
||||
frida_deinit_expected = TRUE;
|
||||
}
|
||||
|
||||
#if defined (HAVE_WINDOWS) || defined (HAVE_ASAN)
|
||||
|
||||
void
|
||||
@@ -70,6 +98,9 @@ __attribute__ ((destructor)) static
|
||||
void
|
||||
frida_libc_shim_deinit (void)
|
||||
{
|
||||
if (!frida_deinit_expected)
|
||||
return;
|
||||
|
||||
# ifdef HAVE_ASAN
|
||||
gum_deinit ();
|
||||
# else
|
||||
@@ -134,16 +165,18 @@ struct _FridaFile
|
||||
int err;
|
||||
|
||||
guint8 * rbuf;
|
||||
gboolean owns_rbuf;
|
||||
size_t rcap;
|
||||
size_t rpos;
|
||||
size_t rlen;
|
||||
|
||||
guint8 * wbuf;
|
||||
gboolean owns_wbuf;
|
||||
size_t wcap;
|
||||
size_t wlen;
|
||||
|
||||
int ungot;
|
||||
gboolean has_ungot;
|
||||
guint8 ungot_buf[8];
|
||||
guint ungot_len;
|
||||
};
|
||||
|
||||
struct _FridaFileHandle
|
||||
@@ -171,6 +204,10 @@ struct _FridaDir
|
||||
|
||||
#endif
|
||||
|
||||
static FILE * frida_fopen_impl (const char * pathname, const char * mode);
|
||||
static int frida_fseek_impl (FILE * stream, off_t offset, int whence);
|
||||
static off_t frida_ftell_impl (FILE * stream);
|
||||
|
||||
static void frida_stdio_register_stream (FILE * stream);
|
||||
static void frida_stdio_unregister_stream (FILE * stream);
|
||||
#ifdef HAVE_FRIDA_DIR
|
||||
@@ -193,6 +230,8 @@ static void frida_parse_fopen_mode (const char * mode, int * oflags);
|
||||
|
||||
static int frida_write_formatted_to_fd (int fd, const char * format, va_list args);
|
||||
|
||||
static gboolean frida_utf8_expected_len (guint8 first, guint * out_len);
|
||||
|
||||
#ifdef HAVE_FRIDA_DIR
|
||||
static FridaDir * frida_dir_get_impl (DIR * dirp);
|
||||
static DIR * frida_dir_wrap (FridaDir * impl);
|
||||
@@ -317,6 +356,9 @@ frida_libc_shim_deinit (void)
|
||||
|
||||
fflush (NULL);
|
||||
|
||||
if (!frida_deinit_expected)
|
||||
return;
|
||||
|
||||
G_LOCK (frida_stdio);
|
||||
|
||||
g_hash_table_iter_init (&iter, frida_streams);
|
||||
@@ -639,8 +681,34 @@ asprintf_l (char ** ret, locale_t loc, const char * format, ...)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_GLIBC
|
||||
|
||||
G_GNUC_INTERNAL FILE *
|
||||
frida_fopen_glibc_225 (const char * pathname, const char * mode)
|
||||
{
|
||||
return frida_fopen_impl (pathname, mode);
|
||||
}
|
||||
__asm__ (".symver frida_fopen_glibc_225,fopen@@GLIBC_2.2.5");
|
||||
|
||||
G_GNUC_INTERNAL FILE *
|
||||
frida_fopen64_glibc_225 (const char * pathname, const char * mode)
|
||||
{
|
||||
return frida_fopen_impl (pathname, mode);
|
||||
}
|
||||
__asm__ (".symver frida_fopen64_glibc_225,fopen64@@GLIBC_2.2.5");
|
||||
|
||||
#else
|
||||
|
||||
G_GNUC_INTERNAL FILE *
|
||||
fopen (const char * pathname, const char * mode)
|
||||
{
|
||||
return frida_fopen_impl (pathname, mode);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static FILE *
|
||||
frida_fopen_impl (const char * pathname, const char * mode)
|
||||
{
|
||||
FILE * result;
|
||||
int oflags, fd;
|
||||
@@ -714,8 +782,17 @@ setvbuf (FILE * stream, char * buf, int mode, size_t size)
|
||||
|
||||
if (mode == _IONBF)
|
||||
{
|
||||
g_clear_pointer (&f->rbuf, g_free);
|
||||
g_clear_pointer (&f->wbuf, g_free);
|
||||
if (f->owns_rbuf)
|
||||
g_clear_pointer (&f->rbuf, g_free);
|
||||
else
|
||||
f->rbuf = NULL;
|
||||
f->owns_rbuf = FALSE;
|
||||
|
||||
if (f->owns_wbuf)
|
||||
g_clear_pointer (&f->wbuf, g_free);
|
||||
else
|
||||
f->wbuf = NULL;
|
||||
f->owns_wbuf = FALSE;
|
||||
|
||||
f->rcap = 0;
|
||||
f->wcap = 0;
|
||||
@@ -727,13 +804,40 @@ setvbuf (FILE * stream, char * buf, int mode, size_t size)
|
||||
}
|
||||
|
||||
if (size == 0)
|
||||
size = FRIDA_STDIO_BUFSIZE;
|
||||
size = BUFSIZ;
|
||||
|
||||
if (!f->owns_rbuf)
|
||||
{
|
||||
f->rbuf = NULL;
|
||||
f->rcap = 0;
|
||||
}
|
||||
|
||||
f->rbuf = g_realloc (f->rbuf, size);
|
||||
f->wbuf = g_realloc (f->wbuf, size);
|
||||
|
||||
f->owns_rbuf = TRUE;
|
||||
f->rcap = size;
|
||||
f->wcap = size;
|
||||
|
||||
if (buf != NULL)
|
||||
{
|
||||
if (f->owns_wbuf)
|
||||
g_clear_pointer (&f->wbuf, g_free);
|
||||
|
||||
f->wbuf = (guint8 *) buf;
|
||||
f->owns_wbuf = FALSE;
|
||||
f->wcap = size;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!f->owns_wbuf)
|
||||
{
|
||||
f->wbuf = NULL;
|
||||
f->wcap = 0;
|
||||
}
|
||||
|
||||
f->wbuf = g_realloc (f->wbuf, size);
|
||||
f->owns_wbuf = TRUE;
|
||||
f->wcap = size;
|
||||
}
|
||||
|
||||
f->rpos = 0;
|
||||
f->rlen = 0;
|
||||
f->wlen = 0;
|
||||
@@ -741,6 +845,39 @@ setvbuf (FILE * stream, char * buf, int mode, size_t size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL void
|
||||
setbuf (FILE * stream, char * buf)
|
||||
{
|
||||
if (buf == NULL)
|
||||
(void) setvbuf (stream, NULL, _IONBF, 0);
|
||||
else
|
||||
(void) setvbuf (stream, buf, _IOFBF, BUFSIZ);
|
||||
}
|
||||
|
||||
#if defined (HAVE_DARWIN) || defined (HAVE_ANDROID) || defined (HAVE_FREEBSD)
|
||||
G_GNUC_INTERNAL int
|
||||
setlinebuf (FILE * stream)
|
||||
{
|
||||
return setvbuf (stream, NULL, _IOLBF, 0);
|
||||
}
|
||||
#else
|
||||
G_GNUC_INTERNAL void
|
||||
setlinebuf (FILE * stream)
|
||||
{
|
||||
setvbuf (stream, NULL, _IOLBF, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
G_GNUC_INTERNAL void
|
||||
#if defined (HAVE_DARWIN) || defined (HAVE_ANDROID) || defined (HAVE_FREEBSD)
|
||||
setbuffer (FILE * stream, char * buf, int size)
|
||||
#else
|
||||
setbuffer (FILE * stream, char * buf, size_t size)
|
||||
#endif
|
||||
{
|
||||
(void) setvbuf (stream, buf, (buf != NULL) ? _IOFBF : _IONBF, size);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
fflush (FILE * stream)
|
||||
{
|
||||
@@ -801,11 +938,8 @@ getc_unlocked (FILE * stream)
|
||||
|
||||
f = frida_file_get_impl (stream);
|
||||
|
||||
if (f->has_ungot)
|
||||
{
|
||||
f->has_ungot = FALSE;
|
||||
return f->ungot;
|
||||
}
|
||||
if (f->ungot_len != 0)
|
||||
return f->ungot_buf[--f->ungot_len];
|
||||
|
||||
if (f->buf_mode == _IONBF)
|
||||
{
|
||||
@@ -846,6 +980,64 @@ getc (FILE * stream)
|
||||
return getc_unlocked (stream);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
__srget (FILE * stream)
|
||||
{
|
||||
return getc_unlocked (stream);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL wint_t
|
||||
getwc (FILE * stream)
|
||||
{
|
||||
return fgetwc (stream);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL wint_t
|
||||
fgetwc (FILE * stream)
|
||||
{
|
||||
char bytes[4];
|
||||
guint need, have;
|
||||
int c;
|
||||
gunichar ch;
|
||||
|
||||
c = getc_unlocked (stream);
|
||||
if (c == EOF)
|
||||
return WEOF;
|
||||
|
||||
bytes[0] = c;
|
||||
|
||||
if (!frida_utf8_expected_len (bytes[0], &need))
|
||||
{
|
||||
errno = EILSEQ;
|
||||
frida_file_get_impl (stream)->err = errno;
|
||||
return WEOF;
|
||||
}
|
||||
|
||||
have = 1;
|
||||
while (have != need)
|
||||
{
|
||||
c = getc_unlocked (stream);
|
||||
if (c == EOF)
|
||||
{
|
||||
errno = EILSEQ;
|
||||
frida_file_get_impl (stream)->err = errno;
|
||||
return WEOF;
|
||||
}
|
||||
|
||||
bytes[have++] = c;
|
||||
}
|
||||
|
||||
ch = g_utf8_get_char_validated (bytes, (gssize) need);
|
||||
if (ch == (gunichar) -1 || ch == (gunichar) -2)
|
||||
{
|
||||
errno = EILSEQ;
|
||||
frida_file_get_impl (stream)->err = errno;
|
||||
return WEOF;
|
||||
}
|
||||
|
||||
return (wint_t) ch;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
ungetc (int c, FILE * stream)
|
||||
{
|
||||
@@ -856,16 +1048,46 @@ ungetc (int c, FILE * stream)
|
||||
if (c == EOF)
|
||||
return EOF;
|
||||
|
||||
if (f->has_ungot)
|
||||
if (f->ungot_len == G_N_ELEMENTS (f->ungot_buf))
|
||||
return EOF;
|
||||
|
||||
f->ungot = c;
|
||||
f->has_ungot = TRUE;
|
||||
f->ungot_buf[f->ungot_len++] = c;
|
||||
f->eof = FALSE;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL wint_t
|
||||
ungetwc (wint_t wc, FILE * stream)
|
||||
{
|
||||
FridaFile * f;
|
||||
char tmp[4];
|
||||
int len;
|
||||
int i;
|
||||
|
||||
if (wc == WEOF)
|
||||
return WEOF;
|
||||
|
||||
f = frida_file_get_impl (stream);
|
||||
|
||||
len = g_unichar_to_utf8 ((gunichar) wc, tmp);
|
||||
if (len <= 0 || len > 4)
|
||||
{
|
||||
errno = EILSEQ;
|
||||
f->err = errno;
|
||||
return WEOF;
|
||||
}
|
||||
|
||||
if (f->ungot_len + len > G_N_ELEMENTS (f->ungot_buf))
|
||||
return WEOF;
|
||||
|
||||
for (i = 0; i != len; i++)
|
||||
f->ungot_buf[f->ungot_len++] = tmp[i];
|
||||
|
||||
f->eof = FALSE;
|
||||
return wc;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL size_t
|
||||
fread (void * ptr, size_t size, size_t nmemb, FILE * stream)
|
||||
{
|
||||
@@ -884,10 +1106,9 @@ fread (void * ptr, size_t size, size_t nmemb, FILE * stream)
|
||||
|
||||
while (got != want)
|
||||
{
|
||||
if (f->has_ungot)
|
||||
if (f->ungot_len != 0)
|
||||
{
|
||||
out[got++] = (guint8) f->ungot;
|
||||
f->has_ungot = FALSE;
|
||||
out[got++] = f->ungot_buf[--f->ungot_len];
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1006,6 +1227,12 @@ fwrite (const void * ptr, size_t size, size_t nmemb, FILE * stream)
|
||||
return off / size;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
putc (int c, FILE * stream)
|
||||
{
|
||||
return fputc (c, stream);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
fputc (int c, FILE * stream)
|
||||
{
|
||||
@@ -1019,6 +1246,37 @@ fputc (int c, FILE * stream)
|
||||
return ch;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL wint_t
|
||||
putwc (wchar_t wc, FILE * stream)
|
||||
{
|
||||
return fputwc (wc, stream);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL wint_t
|
||||
fputwc (wchar_t wc, FILE * stream)
|
||||
{
|
||||
char tmp[4];
|
||||
int len;
|
||||
size_t n;
|
||||
|
||||
if (wc == WEOF)
|
||||
return WEOF;
|
||||
|
||||
len = g_unichar_to_utf8 ((gunichar) wc, tmp);
|
||||
if (len <= 0 || len > 4)
|
||||
{
|
||||
errno = EILSEQ;
|
||||
frida_file_get_impl (stream)->err = errno;
|
||||
return WEOF;
|
||||
}
|
||||
|
||||
n = fwrite (tmp, 1, len, stream);
|
||||
if (n != len)
|
||||
return WEOF;
|
||||
|
||||
return (wint_t) wc;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
fputs (const char * s, FILE * stream)
|
||||
{
|
||||
@@ -1062,6 +1320,84 @@ fgets (char * s, int size, FILE * stream)
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
fseek (FILE * stream, long offset, int whence)
|
||||
{
|
||||
return frida_fseek_impl (stream, (off_t) offset, whence);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL long
|
||||
ftell (FILE * stream)
|
||||
{
|
||||
off_t pos = frida_ftell_impl (stream);
|
||||
if (pos == (off_t) -1)
|
||||
return -1;
|
||||
|
||||
return (long) pos;
|
||||
}
|
||||
|
||||
#ifdef HAVE_GLIBC
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
frida_fseeko_glibc_225 (FILE * stream, off_t offset, int whence)
|
||||
{
|
||||
return frida_fseek_impl (stream, offset, whence);
|
||||
}
|
||||
__asm__ (".symver frida_fseeko_glibc_225,fseeko@@GLIBC_2.2.5");
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
frida_fseeko64_glibc_225 (FILE * stream, off_t offset, int whence)
|
||||
{
|
||||
return frida_fseek_impl (stream, offset, whence);
|
||||
}
|
||||
__asm__ (".symver frida_fseeko64_glibc_225,fseeko64@@GLIBC_2.2.5");
|
||||
|
||||
G_GNUC_INTERNAL off_t
|
||||
frida_ftello_glibc_225 (FILE * stream)
|
||||
{
|
||||
return frida_ftell_impl (stream);
|
||||
}
|
||||
__asm__ (".symver frida_ftello_glibc_225,ftello@@GLIBC_2.2.5");
|
||||
|
||||
G_GNUC_INTERNAL off_t
|
||||
frida_ftello64_glibc_225 (FILE * stream)
|
||||
{
|
||||
return frida_ftell_impl (stream);
|
||||
}
|
||||
__asm__ (".symver frida_ftello64_glibc_225,ftello64@@GLIBC_2.2.5");
|
||||
|
||||
#else
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
fseeko (FILE * stream, off_t offset, int whence)
|
||||
{
|
||||
return frida_fseek_impl (stream, offset, whence);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL off_t
|
||||
ftello (FILE * stream)
|
||||
{
|
||||
return frida_ftell_impl (stream);
|
||||
}
|
||||
|
||||
# ifndef HAVE_QNX
|
||||
|
||||
G_GNUC_INTERNAL int
|
||||
fseeko64 (FILE * stream, off_t offset, int whence)
|
||||
{
|
||||
return frida_fseek_impl (stream, offset, whence);
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL off_t
|
||||
ftello64 (FILE * stream)
|
||||
{
|
||||
return frida_ftell_impl (stream);
|
||||
}
|
||||
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
static int
|
||||
frida_fseek_impl (FILE * stream, off_t offset, int whence)
|
||||
{
|
||||
FridaFile * f;
|
||||
off_t r;
|
||||
@@ -1073,10 +1409,10 @@ fseek (FILE * stream, long offset, int whence)
|
||||
|
||||
f->rpos = 0;
|
||||
f->rlen = 0;
|
||||
f->has_ungot = FALSE;
|
||||
f->ungot_len = 0;
|
||||
f->eof = FALSE;
|
||||
|
||||
r = frida_lseek_nointr (f->fd, (off_t) offset, whence);
|
||||
r = frida_lseek_nointr (f->fd, offset, whence);
|
||||
if (r == (off_t) -1)
|
||||
{
|
||||
f->err = errno;
|
||||
@@ -1086,8 +1422,8 @@ fseek (FILE * stream, long offset, int whence)
|
||||
return 0;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL long
|
||||
ftell (FILE * stream)
|
||||
static off_t
|
||||
frida_ftell_impl (FILE * stream)
|
||||
{
|
||||
FridaFile * f;
|
||||
off_t pos;
|
||||
@@ -1104,10 +1440,9 @@ ftell (FILE * stream)
|
||||
if (f->buf_mode != _IONBF)
|
||||
pos -= (off_t) (f->rlen - f->rpos);
|
||||
|
||||
if (f->has_ungot)
|
||||
pos -= 1;
|
||||
pos -= f->ungot_len;
|
||||
|
||||
return (long) pos;
|
||||
return pos;
|
||||
}
|
||||
|
||||
G_GNUC_INTERNAL void
|
||||
@@ -1718,10 +2053,12 @@ frida_file_new (int fd, gboolean close_fd, int buf_mode)
|
||||
if (buf_mode != _IONBF)
|
||||
{
|
||||
f->rcap = FRIDA_STDIO_BUFSIZE;
|
||||
f->wcap = FRIDA_STDIO_BUFSIZE;
|
||||
|
||||
f->rbuf = g_malloc (f->rcap);
|
||||
f->owns_rbuf = TRUE;
|
||||
|
||||
f->wcap = FRIDA_STDIO_BUFSIZE;
|
||||
f->wbuf = g_malloc (f->wcap);
|
||||
f->owns_wbuf = TRUE;
|
||||
}
|
||||
|
||||
return f;
|
||||
@@ -1733,8 +2070,15 @@ frida_file_free (FridaFile * f)
|
||||
if (f == NULL)
|
||||
return;
|
||||
|
||||
g_clear_pointer (&f->rbuf, g_free);
|
||||
g_clear_pointer (&f->wbuf, g_free);
|
||||
if (f->owns_rbuf)
|
||||
g_clear_pointer (&f->rbuf, g_free);
|
||||
else
|
||||
f->rbuf = NULL;
|
||||
|
||||
if (f->owns_wbuf)
|
||||
g_clear_pointer (&f->wbuf, g_free);
|
||||
else
|
||||
f->wbuf = NULL;
|
||||
|
||||
g_free (f);
|
||||
}
|
||||
@@ -1866,6 +2210,36 @@ beach:
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
frida_utf8_expected_len (guint8 first, guint * out_len)
|
||||
{
|
||||
if (first < 0x80)
|
||||
{
|
||||
*out_len = 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ((first & 0xe0) == 0xc0)
|
||||
{
|
||||
*out_len = 2;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ((first & 0xf0) == 0xe0)
|
||||
{
|
||||
*out_len = 3;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ((first & 0xf8) == 0xf0)
|
||||
{
|
||||
*out_len = 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_FRIDA_DIR
|
||||
|
||||
static FridaDir *
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
namespace Frida {
|
||||
public extern void libc_shim_prepare_to_deinit ();
|
||||
#if DARWIN
|
||||
public extern void libc_shim_deinit ();
|
||||
#endif
|
||||
|
||||
+39
-4
@@ -302,6 +302,10 @@ if host_os == 'linux'
|
||||
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'
|
||||
@@ -381,6 +385,10 @@ else
|
||||
gio_unix_dep = dependency('gio-unix-2.0')
|
||||
endif
|
||||
|
||||
if host_os_family == 'linux'
|
||||
libbpf_dep = dependency('libbpf')
|
||||
endif
|
||||
|
||||
if host_os == 'android'
|
||||
minizip_dep = dependency('minizip', required: false, default_options: [
|
||||
'zlib=enabled',
|
||||
@@ -445,6 +453,7 @@ have_barebone_backend = get_option('barebone_backend') \
|
||||
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()
|
||||
@@ -456,6 +465,8 @@ if compiler_backend_opt.allowed()
|
||||
go,
|
||||
host_os,
|
||||
host_abi,
|
||||
libc,
|
||||
exe_suffix,
|
||||
shlib_suffix,
|
||||
cc.get_id(),
|
||||
'>>>', cc.cmd_array(), '<<<',
|
||||
@@ -471,11 +482,17 @@ if compiler_backend_opt.allowed()
|
||||
if status == 'ok'
|
||||
have_compiler_backend = true
|
||||
tokens = lines[1].split(' ')
|
||||
go_mode = tokens[0]
|
||||
compiler_backend_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'
|
||||
|
||||
if compiler_backend_mode == 'c-archive'
|
||||
vala_flags += '--define=COMPILER_BACKEND_EMBEDDED'
|
||||
elif compiler_backend_mode == 'c-shared'
|
||||
vala_flags += '--define=COMPILER_BACKEND_SHARED'
|
||||
elif compiler_backend_mode == 'pie'
|
||||
vala_flags += '--define=COMPILER_BACKEND_EXECUTABLE'
|
||||
else
|
||||
error('Unsupported compiler backend mode: ' + compiler_backend_mode)
|
||||
endif
|
||||
else
|
||||
error_message = lines[1]
|
||||
@@ -610,6 +627,11 @@ if lzfse_dep.found()
|
||||
backend_reqs_private += 'lzfse'
|
||||
endif
|
||||
|
||||
if host_os_family == 'linux'
|
||||
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
|
||||
@@ -744,6 +766,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')
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
# No exported symbols.
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
global:
|
||||
# FreeBSD needs these two:
|
||||
__progname;
|
||||
environ;
|
||||
|
||||
local:
|
||||
*;
|
||||
};
|
||||
+2
-14
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
+1
-1
Submodule releng updated: 60585cf5cf...5595d31705.
@@ -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:
|
||||
*;
|
||||
};
|
||||
@@ -1 +1,2 @@
|
||||
# No exported symbols.
|
||||
# Allow users to load the server as a shared library with dlopen() and call main() directly
|
||||
_main
|
||||
@@ -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;
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -11,7 +11,7 @@ helper.dex: build/frida-helper.jar
|
||||
$<
|
||||
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) \
|
||||
|
||||
@@ -1,66 +1,12 @@
|
||||
namespace Frida {
|
||||
public sealed class AndroidHelperClient : Object, AsyncInitable {
|
||||
public signal void closed ();
|
||||
|
||||
public IOStream stream {
|
||||
public sealed class AndroidHelperClient : Object {
|
||||
public AndroidHelperTransport transport {
|
||||
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 AndroidHelperClient (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 AndroidHelperClient (AndroidHelperTransport transport) {
|
||||
Object (transport: transport);
|
||||
}
|
||||
|
||||
public async HostApplicationInfo get_frontmost_application (FrontmostQueryOptions options,
|
||||
@@ -72,7 +18,7 @@ namespace Frida {
|
||||
.add_string_value (options.scope.to_nick ())
|
||||
.end_array ();
|
||||
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
|
||||
|
||||
if (response.is_null ())
|
||||
return HostApplicationInfo.empty ();
|
||||
@@ -127,7 +73,7 @@ namespace Frida {
|
||||
.add_string_value (options.scope.to_nick ())
|
||||
.end_array ();
|
||||
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
|
||||
|
||||
Json.Reader reader = new Json.Reader (response);
|
||||
|
||||
@@ -193,7 +139,7 @@ namespace Frida {
|
||||
.add_string_value (options.scope.to_nick ())
|
||||
.end_array ();
|
||||
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
|
||||
|
||||
Json.Reader reader = new Json.Reader (response);
|
||||
|
||||
@@ -247,7 +193,7 @@ namespace Frida {
|
||||
.add_int_value (uid)
|
||||
.end_array ();
|
||||
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
|
||||
|
||||
var r = new Json.Reader (response);
|
||||
parse_envelope_or_throw (r);
|
||||
@@ -317,7 +263,7 @@ namespace Frida {
|
||||
.add_int_value (uid)
|
||||
.end_array ();
|
||||
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
|
||||
|
||||
var r = new Json.Reader (response);
|
||||
parse_envelope_or_throw (r);
|
||||
@@ -331,7 +277,7 @@ namespace Frida {
|
||||
.add_int_value ((int) pid)
|
||||
.end_array ();
|
||||
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
Json.Node response = yield transport.request (stanza.get_root (), cancellable);
|
||||
|
||||
var r = new Json.Reader (response);
|
||||
parse_envelope_or_throw (r);
|
||||
@@ -343,6 +289,13 @@ namespace Frida {
|
||||
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 = new Json.Reader (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 ();
|
||||
@@ -452,6 +405,76 @@ namespace Frida {
|
||||
|
||||
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)
|
||||
@@ -487,13 +510,6 @@ namespace Frida {
|
||||
return r.response;
|
||||
}
|
||||
|
||||
private async void request_ok (Json.Builder stanza, Cancellable? cancellable) throws Error, IOError {
|
||||
Json.Node response = yield request (stanza.get_root (), cancellable);
|
||||
|
||||
var r = new Json.Reader (response);
|
||||
parse_envelope_or_throw (r);
|
||||
}
|
||||
|
||||
private void write_request (Json.Node request) {
|
||||
string request_str = Json.to_string (request, false);
|
||||
uint8[] request_data = request_str.data;
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+12
-3
@@ -238,7 +238,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") in {"Frida.HostSessionHub", "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)
|
||||
@@ -327,11 +328,15 @@ def parse_api(frida_version, frida_version_components, api_version, toplevel_cod
|
||||
}
|
||||
internal_type_prefixes = [
|
||||
"AgentMessageKind",
|
||||
"DrainStatus",
|
||||
"Fruity",
|
||||
"HostSession",
|
||||
"LinuxCompat32Syscall",
|
||||
"LinuxSyscall",
|
||||
"MessageType",
|
||||
"PeerSetup",
|
||||
"PortConflictBehavior",
|
||||
"RecordAction",
|
||||
"ResultCode",
|
||||
"SpawnStartState",
|
||||
"State",
|
||||
@@ -501,7 +506,7 @@ 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",
|
||||
@@ -512,9 +517,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)]
|
||||
|
||||
@@ -1,98 +1,11 @@
|
||||
package main
|
||||
|
||||
/*
|
||||
#include <stdint.h>
|
||||
|
||||
typedef enum {
|
||||
FRIDA_OUTPUT_UNESCAPED,
|
||||
FRIDA_OUTPUT_HEX_BYTES,
|
||||
FRIDA_OUTPUT_C_STRING,
|
||||
} FridaOutputFormat;
|
||||
|
||||
typedef enum {
|
||||
FRIDA_BUNDLE_ESM,
|
||||
FRIDA_BUNDLE_IIFE,
|
||||
} FridaBundleFormat;
|
||||
|
||||
typedef void (* FridaBuildCompleteFunc) (char * bundle, char * error_message, void * user_data);
|
||||
typedef void (* FridaWatchReadyFunc) (uintptr_t session_handle, char * error_message, void * user_data);
|
||||
typedef void (* FridaStartingFunc) (void * user_data);
|
||||
typedef void (* FridaFinishedFunc) (void * user_data);
|
||||
typedef void (* FridaOutputFunc) (char * bundle, void * user_data);
|
||||
typedef void (* FridaDiagnosticFunc) (char * category, int code, char * path, int line, int character, char * text,
|
||||
void * user_data);
|
||||
typedef void (* FridaDestroyFunc) (void * user_data);
|
||||
|
||||
static inline void
|
||||
invoke_build_complete_func (FridaBuildCompleteFunc fn,
|
||||
char * bundle,
|
||||
char * error_message,
|
||||
void * user_data)
|
||||
{
|
||||
fn (bundle, error_message, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_watch_ready_func (FridaWatchReadyFunc fn,
|
||||
uintptr_t session_handle,
|
||||
char * error_message,
|
||||
void * user_data)
|
||||
{
|
||||
fn (session_handle, error_message, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_starting_func (FridaStartingFunc fn,
|
||||
void * user_data)
|
||||
{
|
||||
fn (user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_finished_func (FridaFinishedFunc fn,
|
||||
void * user_data)
|
||||
{
|
||||
fn (user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_output_func (FridaOutputFunc fn,
|
||||
char * bundle,
|
||||
void * user_data)
|
||||
{
|
||||
fn (bundle, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_diagnostic_func (FridaDiagnosticFunc fn,
|
||||
char * category,
|
||||
int code,
|
||||
char * path,
|
||||
int line,
|
||||
int character,
|
||||
char * text,
|
||||
void * user_data)
|
||||
{
|
||||
fn (category, code, path, line, character, text, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_destroy_func (FridaDestroyFunc fn,
|
||||
void * user_data)
|
||||
{
|
||||
fn (user_data);
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"runtime/cgo"
|
||||
"strings"
|
||||
"sync"
|
||||
"unsafe"
|
||||
|
||||
esbuild "github.com/evanw/esbuild/pkg/api"
|
||||
tsscanner "github.com/frida/typescript-go/pkg/scanner"
|
||||
@@ -110,21 +23,6 @@ type BuildOptions struct {
|
||||
Externals []string
|
||||
}
|
||||
|
||||
type OutputFormat C.FridaOutputFormat
|
||||
|
||||
const (
|
||||
OutputFormatUnescaped OutputFormat = OutputFormat(C.FRIDA_OUTPUT_UNESCAPED)
|
||||
OutputFormatHexBytes OutputFormat = OutputFormat(C.FRIDA_OUTPUT_HEX_BYTES)
|
||||
OutputFormatCString OutputFormat = OutputFormat(C.FRIDA_OUTPUT_C_STRING)
|
||||
)
|
||||
|
||||
type BundleFormat C.FridaBundleFormat
|
||||
|
||||
const (
|
||||
BundleFormatESM BundleFormat = BundleFormat(C.FRIDA_BUNDLE_ESM)
|
||||
BundleFormatIIFE BundleFormat = BundleFormat(C.FRIDA_BUNDLE_IIFE)
|
||||
)
|
||||
|
||||
type Diagnostic struct {
|
||||
category string
|
||||
code int
|
||||
@@ -146,153 +44,6 @@ type BuildEndCallback func()
|
||||
type BuildOutputCallback func(bundle string)
|
||||
type BuildDiagnosticCallback func(d Diagnostic)
|
||||
|
||||
//export _frida_compiler_backend_build
|
||||
func _frida_compiler_backend_build(cProjectRoot, cEntrypoint *C.char, outputFormat C.FridaOutputFormat, bundleFormat C.FridaBundleFormat,
|
||||
disableTypeCheck, sourceMap, compress uintptr, cPlatform *C.char, cExternals **C.char, numExternals C.int,
|
||||
onCompleteFn C.FridaBuildCompleteFunc, onCompleteData unsafe.Pointer, onCompleteDataDestroy C.FridaDestroyFunc,
|
||||
onDiagnosticFn C.FridaDiagnosticFunc, onDiagnosticData unsafe.Pointer) {
|
||||
options := BuildOptions{
|
||||
ProjectRoot: C.GoString(cProjectRoot),
|
||||
Entrypoint: C.GoString(cEntrypoint),
|
||||
OutputFormat: OutputFormat(outputFormat),
|
||||
BundleFormat: BundleFormat(bundleFormat),
|
||||
DisableTypeCheck: disableTypeCheck != 0,
|
||||
SourceMap: sourceMap != 0,
|
||||
Compress: compress != 0,
|
||||
Platform: platformFromFrida(C.GoString(cPlatform)),
|
||||
Externals: parseCExternals(cExternals, numExternals),
|
||||
}
|
||||
onComplete := NewCDelegate(onCompleteFn, onCompleteData, onCompleteDataDestroy)
|
||||
onDiagnostic := NewCDelegate(onDiagnosticFn, onDiagnosticData, nil)
|
||||
|
||||
go func() {
|
||||
defer onComplete.Dispose()
|
||||
defer onDiagnostic.Dispose()
|
||||
|
||||
onDiagnostic := makeCBuildDiagnosticCallback(onDiagnostic)
|
||||
|
||||
bundle, err := build(options, onDiagnostic)
|
||||
|
||||
var cBundle, cErrorMessage *C.char
|
||||
if err == nil {
|
||||
cBundle = C.CString(bundle)
|
||||
} else {
|
||||
cErrorMessage = C.CString(err.Error())
|
||||
}
|
||||
C.invoke_build_complete_func(onComplete.Func, cBundle, cErrorMessage, onComplete.Data)
|
||||
}()
|
||||
}
|
||||
|
||||
//export _frida_compiler_backend_watch
|
||||
func _frida_compiler_backend_watch(cProjectRoot, cEntrypoint *C.char, outputFormat C.FridaOutputFormat, bundleFormat C.FridaBundleFormat,
|
||||
disableTypeCheck, sourceMap, compress uintptr, cPlatform *C.char, cExternals **C.char, numExternals C.int,
|
||||
onReadyFn C.FridaWatchReadyFunc, onReadyData unsafe.Pointer, onReadyDataDestroy C.FridaDestroyFunc,
|
||||
onStartingFn C.FridaStartingFunc, onStartingData unsafe.Pointer,
|
||||
onFinishedFn C.FridaFinishedFunc, onFinishedData unsafe.Pointer,
|
||||
onOutputFn C.FridaOutputFunc, onOutputData unsafe.Pointer,
|
||||
onDiagnosticFn C.FridaDiagnosticFunc, onDiagnosticData unsafe.Pointer) {
|
||||
options := BuildOptions{
|
||||
ProjectRoot: C.GoString(cProjectRoot),
|
||||
Entrypoint: C.GoString(cEntrypoint),
|
||||
OutputFormat: OutputFormat(outputFormat),
|
||||
BundleFormat: BundleFormat(bundleFormat),
|
||||
DisableTypeCheck: disableTypeCheck != 0,
|
||||
SourceMap: sourceMap != 0,
|
||||
Compress: compress != 0,
|
||||
Platform: platformFromFrida(C.GoString(cPlatform)),
|
||||
Externals: parseCExternals(cExternals, numExternals),
|
||||
}
|
||||
onReady := NewCDelegate(onReadyFn, onReadyData, onReadyDataDestroy)
|
||||
onStarting := NewCDelegate(onStartingFn, onStartingData, nil)
|
||||
onFinished := NewCDelegate(onFinishedFn, onFinishedData, nil)
|
||||
onOutput := NewCDelegate(onOutputFn, onOutputData, nil)
|
||||
onDiagnostic := NewCDelegate(onDiagnosticFn, onDiagnosticData, nil)
|
||||
|
||||
go func() {
|
||||
defer onReady.Dispose()
|
||||
|
||||
onDispose := func() {
|
||||
onStarting.Dispose()
|
||||
onFinished.Dispose()
|
||||
onOutput.Dispose()
|
||||
onDiagnostic.Dispose()
|
||||
}
|
||||
|
||||
callbacks := BuildEventCallbacks{
|
||||
OnStart: func() {
|
||||
C.invoke_starting_func(onStarting.Func, onStarting.Data)
|
||||
},
|
||||
OnEnd: func() {
|
||||
C.invoke_starting_func(onFinished.Func, onFinished.Data)
|
||||
},
|
||||
OnOutput: func(bundle string) {
|
||||
C.invoke_output_func(onOutput.Func, C.CString(bundle), onOutput.Data)
|
||||
},
|
||||
OnDiagnostic: makeCBuildDiagnosticCallback(onDiagnostic),
|
||||
}
|
||||
|
||||
session, err := NewWatchSession(options, onDispose, callbacks)
|
||||
|
||||
var cSession C.uintptr_t
|
||||
var cErrorMessage *C.char
|
||||
if err == nil {
|
||||
cSession = C.uintptr_t(cgo.NewHandle(session))
|
||||
} else {
|
||||
cErrorMessage = C.CString(err.Error())
|
||||
}
|
||||
C.invoke_watch_ready_func(onReady.Func, cSession, cErrorMessage, onReady.Data)
|
||||
}()
|
||||
}
|
||||
|
||||
//export _frida_compiler_backend_watch_session_dispose
|
||||
func _frida_compiler_backend_watch_session_dispose(h uintptr) {
|
||||
handle := cgo.Handle(h)
|
||||
session := handle.Value().(*WatchSession)
|
||||
session.Dispose()
|
||||
handle.Delete()
|
||||
}
|
||||
|
||||
func platformFromFrida(s string) esbuild.Platform {
|
||||
switch s {
|
||||
case "gum":
|
||||
return esbuild.PlatformNode
|
||||
case "browser":
|
||||
return esbuild.PlatformBrowser
|
||||
case "neutral":
|
||||
return esbuild.PlatformNeutral
|
||||
default:
|
||||
panic(fmt.Sprintf("Unknown platform: %q", s))
|
||||
}
|
||||
}
|
||||
|
||||
func parseCExternals(cExternals **C.char, numExternals C.int) []string {
|
||||
if numExternals == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
n := int(numExternals)
|
||||
cArray := (*[1 << 20]*C.char)(unsafe.Pointer(cExternals))[:n:n]
|
||||
|
||||
externals := make([]string, n)
|
||||
for i := 0; i < n; i++ {
|
||||
externals[i] = C.GoString(cArray[i])
|
||||
}
|
||||
|
||||
return externals
|
||||
}
|
||||
|
||||
func makeCBuildDiagnosticCallback(onDiagnostic *CDelegate[C.FridaDiagnosticFunc]) BuildDiagnosticCallback {
|
||||
return func(d Diagnostic) {
|
||||
var cPath *C.char
|
||||
if d.path != "" {
|
||||
cPath = C.CString(d.path)
|
||||
}
|
||||
|
||||
C.invoke_diagnostic_func(onDiagnostic.Func, C.CString(d.category), C.int(d.code), cPath, C.int(d.line),
|
||||
C.int(d.character), C.CString(d.text), onDiagnostic.Data)
|
||||
}
|
||||
}
|
||||
|
||||
func build(options BuildOptions, onDiagnostic BuildDiagnosticCallback) (bundle string, err error) {
|
||||
callbacks := BuildEventCallbacks{
|
||||
OnOutput: func(b string) {
|
||||
@@ -828,25 +579,3 @@ func makeTypeScriptPlugin(compiler *TSCompiler) esbuild.Plugin {
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type CDelegate[F any] struct {
|
||||
Func F
|
||||
null F
|
||||
Data unsafe.Pointer
|
||||
dataDestroy C.FridaDestroyFunc
|
||||
}
|
||||
|
||||
func NewCDelegate[F any](function F, data unsafe.Pointer, dataDestroy C.FridaDestroyFunc) *CDelegate[F] {
|
||||
return &CDelegate[F]{Func: function, Data: data, dataDestroy: dataDestroy}
|
||||
}
|
||||
|
||||
func (d *CDelegate[F]) Dispose() {
|
||||
if d.dataDestroy != nil {
|
||||
C.invoke_destroy_func(d.dataDestroy, d.Data)
|
||||
}
|
||||
d.Func = d.null
|
||||
d.Data = nil
|
||||
d.dataDestroy = nil
|
||||
}
|
||||
|
||||
func main() {}
|
||||
@@ -60,11 +60,15 @@ def build_backend(
|
||||
mode = config["mode"]
|
||||
|
||||
backend_stem = "frida-compiler-backend"
|
||||
if mode == "c-shared":
|
||||
if mode != "c-archive":
|
||||
backend_stem += "-raw"
|
||||
|
||||
backend_a = priv_dir / f"{backend_stem}.a"
|
||||
backend_shlib = priv_dir / (f"{backend_stem}" + config["shlib_suffix"])
|
||||
if mode == "c-archive":
|
||||
backend_binary = priv_dir / f"{backend_stem}.a"
|
||||
elif mode == "c-shared":
|
||||
backend_binary = priv_dir / (f"{backend_stem}" + config["shlib_suffix"])
|
||||
else:
|
||||
backend_binary = priv_dir / (f"{backend_stem}" + config["exe_suffix"])
|
||||
backend_h = priv_dir / f"{backend_stem}.h"
|
||||
|
||||
extra_go_args = config["extra_go_args"].copy()
|
||||
@@ -78,10 +82,10 @@ def build_backend(
|
||||
"build",
|
||||
f"-buildmode={mode}",
|
||||
"-o",
|
||||
backend_a.name if mode == "c-archive" else backend_shlib.name,
|
||||
backend_binary.name,
|
||||
"-buildvcs=false",
|
||||
*extra_go_args,
|
||||
*go_sources,
|
||||
".",
|
||||
)
|
||||
|
||||
if mode == "c-archive":
|
||||
@@ -109,7 +113,7 @@ def build_backend(
|
||||
)
|
||||
|
||||
run(priv_dir / "symbol-replacer" / symbol_replacer_name,
|
||||
backend_a.name, *config["nm"], *config["ranlib"], config["env"]["CC"])
|
||||
backend_binary.name, *config["nm"], *config["ranlib"], config["env"]["CC"])
|
||||
|
||||
if (mingw := config.get("mingw")) is not None and (abi := config["abi"]) in {
|
||||
"x86",
|
||||
@@ -143,17 +147,16 @@ def build_backend(
|
||||
|
||||
extra_objects = []
|
||||
if abi == "x86_64":
|
||||
run(*ar, "x", backend_a.name, "go.o")
|
||||
run(*ar, "x", backend_binary.name, "go.o")
|
||||
sort_pdata_in_object(Path(priv_dir) / "go.o")
|
||||
extra_objects.append("go.o")
|
||||
|
||||
run(*ar, "rs", backend_a.name, *libgcc_objects, *gwex_objects, *extra_objects)
|
||||
run(*ar, "rs", backend_binary.name, *libgcc_objects, *gwex_objects, *extra_objects)
|
||||
|
||||
shutil.copy(priv_dir / backend_a.name, output_dir / backend_a.name)
|
||||
else:
|
||||
shutil.copy(priv_dir / backend_shlib.name, output_dir / backend_shlib.name)
|
||||
shutil.copy(priv_dir / backend_binary.name, output_dir / backend_binary.name)
|
||||
|
||||
shutil.copy(priv_dir / backend_h.name, output_dir / backend_h.name)
|
||||
if mode in {"c-archive", "c-shared"}:
|
||||
shutil.copy(priv_dir / backend_h.name, output_dir / backend_h.name)
|
||||
|
||||
|
||||
# Work around the Go toolchain's almost-MSVC-compatible object files
|
||||
|
||||
+618
-13
@@ -47,7 +47,7 @@ namespace Frida {
|
||||
CompilerBackend.build (project_root, entrypoint, opts.output_format, opts.bundle_format,
|
||||
(size_t) (opts.type_check == NONE), (size_t) (opts.source_maps == INCLUDED),
|
||||
(size_t) (opts.compression == TERSER), opts.platform.to_nick (),
|
||||
opts.externals.to_array (), (owned) on_complete, on_diagnostic);
|
||||
opts.externals.to_array (), on_diagnostic, (owned) on_complete);
|
||||
yield;
|
||||
|
||||
if (error_message != null)
|
||||
@@ -98,8 +98,8 @@ namespace Frida {
|
||||
CompilerBackend.watch (project_root, entrypoint, opts.output_format, opts.bundle_format,
|
||||
(size_t) (opts.type_check == NONE), (size_t) (opts.source_maps == INCLUDED),
|
||||
(size_t) (opts.compression == TERSER), opts.platform.to_nick (),
|
||||
opts.externals.to_array (), (owned) on_ready, on_starting, on_finished,
|
||||
on_output, on_diagnostic);
|
||||
opts.externals.to_array (), on_starting, on_finished, on_output, on_diagnostic,
|
||||
(owned) on_ready);
|
||||
yield;
|
||||
|
||||
if (error_message != null)
|
||||
@@ -235,12 +235,12 @@ namespace Frida {
|
||||
namespace CompilerBackend {
|
||||
private void init () {
|
||||
#if HAVE_COMPILER_BACKEND
|
||||
#if COMPILER_BACKEND_STATIC_COMPILATION
|
||||
#if COMPILER_BACKEND_EMBEDDED
|
||||
_init_go_runtime ();
|
||||
build = (BuildFunc) _build;
|
||||
watch = (WatchFunc) _watch;
|
||||
WatchSession.dispose = (WatchSession.DisposeFunc) WatchSession._dispose;
|
||||
#else
|
||||
#elif COMPILER_BACKEND_SHARED
|
||||
unowned uint8[] backend_so = Frida.Data.Compiler.get_frida_compiler_backend_so_blob ().data;
|
||||
|
||||
Module? backend = null;
|
||||
@@ -276,6 +276,12 @@ namespace Frida {
|
||||
build = resolve_symbol (backend, "_frida_compiler_backend_build");
|
||||
watch = resolve_symbol (backend, "_frida_compiler_backend_watch");
|
||||
WatchSession.dispose = resolve_symbol (backend, "_frida_compiler_backend_watch_session_dispose");
|
||||
#elif COMPILER_BACKEND_EXECUTABLE
|
||||
backend_process = new BackendProcess ();
|
||||
|
||||
build = executable_build;
|
||||
watch = executable_watch;
|
||||
WatchSession.dispose = executable_watch_session_dispose;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
@@ -291,16 +297,15 @@ namespace Frida {
|
||||
[CCode (has_target = false)]
|
||||
private delegate void BuildFunc (string project_root, string entrypoint, OutputFormat output_format,
|
||||
BundleFormat bundle_format, size_t disable_type_check, size_t source_map, size_t compress,
|
||||
string platform, string[] externals, owned BuildCompleteFunc on_complete,
|
||||
DiagnosticFunc on_diagnostic);
|
||||
string platform, string[] externals, DiagnosticFunc on_diagnostic, owned BuildCompleteFunc on_complete);
|
||||
|
||||
[CCode (has_target = false)]
|
||||
private delegate void WatchFunc (string project_root, string entrypoint, OutputFormat output_format,
|
||||
BundleFormat bundle_format, size_t disable_type_check, size_t source_map, size_t compress,
|
||||
string platform, string[] externals, owned WatchReadyFunc on_ready, StartingFunc on_starting,
|
||||
FinishedFunc on_finished, OutputFunc on_output, DiagnosticFunc on_diagnostic);
|
||||
string platform, string[] externals, StartingFunc on_starting, FinishedFunc on_finished,
|
||||
OutputFunc on_output, DiagnosticFunc on_diagnostic, owned WatchReadyFunc on_ready);
|
||||
|
||||
#if COMPILER_BACKEND_STATIC_COMPILATION
|
||||
#if COMPILER_BACKEND_EMBEDDED
|
||||
private extern void _init_go_runtime ();
|
||||
private extern void _build ();
|
||||
private extern void _watch ();
|
||||
@@ -312,7 +317,7 @@ namespace Frida {
|
||||
|
||||
private DisposeFunc? dispose;
|
||||
|
||||
#if COMPILER_BACKEND_STATIC_COMPILATION
|
||||
#if COMPILER_BACKEND_EMBEDDED
|
||||
private extern void _dispose ();
|
||||
#endif
|
||||
}
|
||||
@@ -325,14 +330,614 @@ namespace Frida {
|
||||
private delegate void DiagnosticFunc (owned string category, int code, owned string? path, int line, int character,
|
||||
owned string text);
|
||||
|
||||
#if HAVE_COMPILER_BACKEND && !COMPILER_BACKEND_STATIC_COMPILATION
|
||||
private static T resolve_symbol<T> (Module m, string name) {
|
||||
#if HAVE_COMPILER_BACKEND && COMPILER_BACKEND_SHARED
|
||||
private T resolve_symbol<T> (Module m, string name) {
|
||||
void * address;
|
||||
if (!m.symbol (name, out address))
|
||||
assert_not_reached ();
|
||||
return (T) address;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if COMPILER_BACKEND_EXECUTABLE
|
||||
private BackendProcess? backend_process;
|
||||
|
||||
private static void executable_build (string project_root, string entrypoint, OutputFormat output_format,
|
||||
BundleFormat bundle_format, size_t disable_type_check, size_t source_map, size_t compress,
|
||||
string platform, string[] externals, DiagnosticFunc on_diagnostic, owned BuildCompleteFunc on_complete) {
|
||||
backend_process.build (project_root, entrypoint, output_format, bundle_format, disable_type_check, source_map,
|
||||
compress, platform, externals, on_diagnostic, (owned) on_complete);
|
||||
}
|
||||
|
||||
private static void executable_watch (string project_root, string entrypoint, OutputFormat output_format,
|
||||
BundleFormat bundle_format, size_t disable_type_check, size_t source_map, size_t compress,
|
||||
string platform, string[] externals, StartingFunc on_starting, FinishedFunc on_finished,
|
||||
OutputFunc on_output, DiagnosticFunc on_diagnostic, owned WatchReadyFunc on_ready) {
|
||||
backend_process.watch (project_root, entrypoint, output_format, bundle_format, disable_type_check, source_map,
|
||||
compress, platform, externals, on_starting, on_finished, on_output, on_diagnostic, (owned) on_ready);
|
||||
}
|
||||
|
||||
private static void executable_watch_session_dispose (size_t handle) {
|
||||
backend_process.dispose_watch_session (handle);
|
||||
}
|
||||
|
||||
private class BackendProcess : Object {
|
||||
private Subprocess? process;
|
||||
private BufferedInputStream? input;
|
||||
private OutputStream? output;
|
||||
private DataInputStream? errput;
|
||||
|
||||
private ByteArray pending_output = new ByteArray ();
|
||||
private bool writing = false;
|
||||
|
||||
private uint next_request_id = 1;
|
||||
private uint next_session_id = 1;
|
||||
|
||||
private Gee.Map<uint, PendingBuild> pending_builds = new Gee.HashMap<uint, PendingBuild> ();
|
||||
private Gee.Map<uint, WatchEntry> watches = new Gee.HashMap<uint, WatchEntry> ();
|
||||
|
||||
private Cancellable io_cancellable = new Cancellable ();
|
||||
|
||||
construct {
|
||||
try_start ();
|
||||
}
|
||||
|
||||
private void try_start () {
|
||||
try {
|
||||
ensure_started ();
|
||||
} catch (GLib.Error e) {
|
||||
}
|
||||
}
|
||||
|
||||
private void ensure_started () throws GLib.Error {
|
||||
if (process != null)
|
||||
return;
|
||||
|
||||
string path = extract_backend_executable ();
|
||||
try {
|
||||
var p = new Subprocess (STDIN_PIPE | STDOUT_PIPE | STDERR_PIPE, path);
|
||||
process = p;
|
||||
|
||||
input = (BufferedInputStream) Object.new (typeof (BufferedInputStream),
|
||||
"base-stream", p.get_stdout_pipe (),
|
||||
"close-base-stream", false,
|
||||
"buffer-size", 128 * 1024);
|
||||
output = p.get_stdin_pipe ();
|
||||
errput = new DataInputStream (p.get_stderr_pipe ());
|
||||
|
||||
process_incoming_messages.begin ();
|
||||
process_stderr_stream.begin (errput);
|
||||
} finally {
|
||||
FileUtils.unlink (path);
|
||||
}
|
||||
}
|
||||
|
||||
private static string extract_backend_executable () throws GLib.Error {
|
||||
unowned uint8[] blob = Frida.Data.Compiler.get_frida_compiler_backend_blob ().data;
|
||||
|
||||
string path;
|
||||
{
|
||||
var fd = new FileDescriptor (FileUtils.open_tmp ("frida-compiler-backend-XXXXXX", out path));
|
||||
fd.pwrite_all (blob, 0);
|
||||
}
|
||||
|
||||
FileUtils.chmod (path, 0700);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
private void handle_process_failure (string message) {
|
||||
io_cancellable.cancel ();
|
||||
io_cancellable = new Cancellable ();
|
||||
|
||||
if (process != null) {
|
||||
if (!process.get_if_exited ())
|
||||
process.force_exit ();
|
||||
}
|
||||
|
||||
process = null;
|
||||
input = null;
|
||||
output = null;
|
||||
errput = null;
|
||||
|
||||
foreach (var e in pending_builds.entries)
|
||||
e.value.on_complete (null, message);
|
||||
pending_builds.clear ();
|
||||
|
||||
foreach (var e in watches.entries) {
|
||||
var entry = e.value;
|
||||
if (entry.on_ready != null)
|
||||
entry.on_ready (0, message);
|
||||
}
|
||||
watches.clear ();
|
||||
|
||||
pending_output = new ByteArray ();
|
||||
writing = false;
|
||||
}
|
||||
|
||||
public void build (string project_root, string entrypoint, OutputFormat output_format, BundleFormat bundle_format,
|
||||
size_t disable_type_check, size_t source_map, size_t compress, string platform, string[] externals,
|
||||
DiagnosticFunc on_diagnostic, owned BuildCompleteFunc on_complete) {
|
||||
try {
|
||||
ensure_started ();
|
||||
} catch (GLib.Error e) {
|
||||
on_complete (null, e.message);
|
||||
return;
|
||||
}
|
||||
|
||||
uint request_id = allocate_request_id ();
|
||||
|
||||
pending_builds[request_id] = new PendingBuild ((owned) on_complete, on_diagnostic);
|
||||
|
||||
post_message (make_build_request (
|
||||
request_id,
|
||||
project_root,
|
||||
entrypoint,
|
||||
output_format,
|
||||
bundle_format,
|
||||
disable_type_check != 0,
|
||||
source_map != 0,
|
||||
compress != 0,
|
||||
platform,
|
||||
externals
|
||||
));
|
||||
}
|
||||
|
||||
private class PendingBuild {
|
||||
public BuildCompleteFunc on_complete;
|
||||
public unowned DiagnosticFunc on_diagnostic;
|
||||
|
||||
public PendingBuild (owned BuildCompleteFunc on_complete, DiagnosticFunc on_diagnostic) {
|
||||
this.on_complete = (owned) on_complete;
|
||||
this.on_diagnostic = on_diagnostic;
|
||||
}
|
||||
}
|
||||
|
||||
public void watch (string project_root, string entrypoint, OutputFormat output_format, BundleFormat bundle_format,
|
||||
size_t disable_type_check, size_t source_map, size_t compress, string platform, string[] externals,
|
||||
StartingFunc on_starting, FinishedFunc on_finished, OutputFunc on_output,
|
||||
DiagnosticFunc on_diagnostic, owned WatchReadyFunc on_ready) {
|
||||
try {
|
||||
ensure_started ();
|
||||
} catch (GLib.Error e) {
|
||||
on_ready (0, e.message);
|
||||
return;
|
||||
}
|
||||
|
||||
uint session_id = allocate_session_id ();
|
||||
|
||||
watches[session_id] = new WatchEntry ((owned) on_ready, on_starting, on_finished, on_output, on_diagnostic);
|
||||
|
||||
post_message (make_watch_request (
|
||||
session_id,
|
||||
project_root,
|
||||
entrypoint,
|
||||
output_format,
|
||||
bundle_format,
|
||||
disable_type_check != 0,
|
||||
source_map != 0,
|
||||
compress != 0,
|
||||
platform,
|
||||
externals
|
||||
));
|
||||
}
|
||||
|
||||
private class WatchEntry {
|
||||
public WatchReadyFunc? on_ready;
|
||||
public unowned StartingFunc on_starting;
|
||||
public unowned FinishedFunc on_finished;
|
||||
public unowned OutputFunc on_output;
|
||||
public unowned DiagnosticFunc on_diagnostic;
|
||||
|
||||
public WatchEntry (owned WatchReadyFunc on_ready, StartingFunc on_starting, FinishedFunc on_finished,
|
||||
OutputFunc on_output, DiagnosticFunc on_diagnostic) {
|
||||
this.on_ready = (owned) on_ready;
|
||||
this.on_starting = on_starting;
|
||||
this.on_finished = on_finished;
|
||||
this.on_output = on_output;
|
||||
this.on_diagnostic = on_diagnostic;
|
||||
}
|
||||
}
|
||||
|
||||
public void dispose_watch_session (size_t handle) {
|
||||
uint session_id = (uint) handle;
|
||||
|
||||
WatchEntry entry;
|
||||
if (!watches.unset (session_id, out entry))
|
||||
return;
|
||||
|
||||
if (process != null)
|
||||
post_message (make_dispose_request (session_id));
|
||||
}
|
||||
|
||||
private static string make_build_request (uint id, string project_root, string entrypoint,
|
||||
OutputFormat output_format, BundleFormat bundle_format, bool disable_type_check,
|
||||
bool source_map, bool compress, string platform, string[] externals) {
|
||||
return make_request ("build", "id", id, project_root, entrypoint, output_format, bundle_format,
|
||||
disable_type_check, source_map, compress, platform, externals);
|
||||
}
|
||||
|
||||
private static string make_watch_request (uint session_id, string project_root, string entrypoint,
|
||||
OutputFormat output_format, BundleFormat bundle_format, bool disable_type_check,
|
||||
bool source_map, bool compress, string platform, string[] externals) {
|
||||
return make_request ("watch", "session_id", session_id, project_root, entrypoint, output_format,
|
||||
bundle_format, disable_type_check, source_map, compress, platform, externals);
|
||||
}
|
||||
|
||||
private static string make_request (string type, string id_name, uint id, string project_root, string entrypoint,
|
||||
OutputFormat output_format, BundleFormat bundle_format, bool disable_type_check,
|
||||
bool source_map, bool compress, string platform, string[] externals) {
|
||||
var builder = new Json.Builder ();
|
||||
|
||||
builder
|
||||
.begin_object ()
|
||||
.set_member_name ("type")
|
||||
.add_string_value (type)
|
||||
.set_member_name (id_name)
|
||||
.add_int_value (id)
|
||||
.set_member_name ("project_root")
|
||||
.add_string_value (project_root)
|
||||
.set_member_name ("entrypoint")
|
||||
.add_string_value (entrypoint)
|
||||
.set_member_name ("output_format")
|
||||
.add_string_value (output_format.to_nick ())
|
||||
.set_member_name ("bundle_format")
|
||||
.add_string_value (bundle_format.to_nick ())
|
||||
.set_member_name ("disable_type_check")
|
||||
.add_boolean_value (disable_type_check)
|
||||
.set_member_name ("source_map")
|
||||
.add_boolean_value (source_map)
|
||||
.set_member_name ("compress")
|
||||
.add_boolean_value (compress)
|
||||
.set_member_name ("platform")
|
||||
.add_string_value (platform)
|
||||
.set_member_name ("externals")
|
||||
.begin_array ();
|
||||
|
||||
foreach (unowned string e in externals)
|
||||
builder.add_string_value (e);
|
||||
|
||||
builder
|
||||
.end_array ()
|
||||
.end_object ();
|
||||
|
||||
return Json.to_string (builder.get_root (), false);
|
||||
}
|
||||
|
||||
private static string make_dispose_request (uint session_id) {
|
||||
var builder = new Json.Builder ();
|
||||
|
||||
builder
|
||||
.begin_object ()
|
||||
.set_member_name ("type")
|
||||
.add_string_value ("dispose")
|
||||
.set_member_name ("session_id")
|
||||
.add_int_value (session_id)
|
||||
.end_object ();
|
||||
|
||||
return Json.to_string (builder.get_root (), false);
|
||||
}
|
||||
|
||||
private uint allocate_request_id () {
|
||||
uint start = next_request_id;
|
||||
|
||||
do {
|
||||
uint id = next_request_id++;
|
||||
if (next_request_id == 0)
|
||||
next_request_id = 1;
|
||||
|
||||
if (!pending_builds.has_key (id))
|
||||
return id;
|
||||
} while (next_request_id != start);
|
||||
|
||||
assert_not_reached ();
|
||||
}
|
||||
|
||||
private uint allocate_session_id () {
|
||||
uint start = next_session_id;
|
||||
|
||||
do {
|
||||
uint id = next_session_id++;
|
||||
if (next_session_id == 0)
|
||||
next_session_id = 1;
|
||||
|
||||
if (!watches.has_key (id))
|
||||
return id;
|
||||
} while (next_session_id != start);
|
||||
|
||||
assert_not_reached ();
|
||||
}
|
||||
|
||||
private void post_message (string json) {
|
||||
unowned uint8[] raw_json = json.data;
|
||||
|
||||
uint32 size = ((uint32) raw_json.length).to_big_endian ();
|
||||
pending_output.append ((uint8[]) &size);
|
||||
pending_output.append (raw_json);
|
||||
|
||||
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) {
|
||||
handle_process_failure ("Compiler backend process terminated unexpectedly");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
writing = false;
|
||||
}
|
||||
|
||||
private async void process_incoming_messages () {
|
||||
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_big_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 raw_json = new uint8[body_size + 1];
|
||||
input.peek (raw_json[:body_size], header_size);
|
||||
|
||||
unowned string json = (string) raw_json;
|
||||
|
||||
handle_message (json);
|
||||
|
||||
input.skip (full_size, io_cancellable);
|
||||
}
|
||||
} catch (GLib.Error e) {
|
||||
handle_process_failure (e.message);
|
||||
}
|
||||
}
|
||||
|
||||
private void handle_message (string json) throws Error {
|
||||
Json.Node root;
|
||||
try {
|
||||
root = Json.from_string (json);
|
||||
} catch (GLib.Error e) {
|
||||
throw new Error.PROTOCOL ("%s", e.message);
|
||||
}
|
||||
|
||||
var reader = new Json.Reader (root);
|
||||
|
||||
reader.read_member ("type");
|
||||
unowned string? type = reader.get_string_value ();
|
||||
if (type == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'type' value");
|
||||
reader.end_member ();
|
||||
|
||||
var tokens = type.split (":", 2);
|
||||
if (tokens.length != 2)
|
||||
throw new Error.PROTOCOL ("Invalid 'type' value");
|
||||
|
||||
unowned string scope = tokens[0];
|
||||
unowned string subtype = tokens[1];
|
||||
|
||||
if (scope == "build")
|
||||
handle_build_message (subtype, reader);
|
||||
else if (scope == "watch")
|
||||
handle_watch_message (subtype, reader);
|
||||
else
|
||||
throw new Error.PROTOCOL ("Unknown 'type' scope");
|
||||
}
|
||||
|
||||
private void handle_build_message (string type, Json.Reader reader) throws Error {
|
||||
if (type == "complete")
|
||||
handle_build_complete_message (reader);
|
||||
else if (type == "diagnostic")
|
||||
handle_build_diagnostic_message (reader);
|
||||
else
|
||||
throw new Error.PROTOCOL ("Unknown build message type: %s", type);
|
||||
}
|
||||
|
||||
private void handle_watch_message (string type, Json.Reader reader) throws Error {
|
||||
if (type == "ready")
|
||||
handle_watch_ready_message (reader);
|
||||
else if (type == "starting" || type == "finished" || type == "output" || type == "diagnostic")
|
||||
handle_watch_event_message (reader, type);
|
||||
else
|
||||
throw new Error.PROTOCOL ("Unknown watch message type: %s", type);
|
||||
}
|
||||
|
||||
private void handle_build_complete_message (Json.Reader reader) throws Error {
|
||||
reader.read_member ("id");
|
||||
uint id = (uint) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
|
||||
PendingBuild pending;
|
||||
if (!pending_builds.unset (id, out pending))
|
||||
throw new Error.PROTOCOL ("Invalid pending build ID: %u", id);
|
||||
|
||||
if (reader.read_member ("error")) {
|
||||
unowned string? error = reader.get_string_value ();
|
||||
if (error == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'error' value");
|
||||
reader.end_member ();
|
||||
|
||||
pending.on_complete (null, error);
|
||||
return;
|
||||
}
|
||||
reader.end_member ();
|
||||
|
||||
reader.read_member ("bundle");
|
||||
unowned string? bundle = reader.get_string_value ();
|
||||
if (bundle == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'bundle' value");
|
||||
reader.end_member ();
|
||||
|
||||
pending.on_complete (bundle, null);
|
||||
}
|
||||
|
||||
private void handle_build_diagnostic_message (Json.Reader reader) throws Error {
|
||||
reader.read_member ("id");
|
||||
uint id = (uint) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
|
||||
var pending = pending_builds[id];
|
||||
if (pending == null)
|
||||
throw new Error.PROTOCOL ("Invalid pending build ID: %u", id);
|
||||
|
||||
emit_diagnostic_from_json (reader, pending.on_diagnostic);
|
||||
}
|
||||
|
||||
private void handle_watch_ready_message (Json.Reader reader) throws Error {
|
||||
reader.read_member ("session_id");
|
||||
uint session_id = (uint) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
|
||||
var watch = watches[session_id];
|
||||
if (watch == null)
|
||||
throw new Error.PROTOCOL ("Invalid watch session ID: %u", session_id);
|
||||
|
||||
if (reader.read_member ("error")) {
|
||||
unowned string? error = reader.get_string_value ();
|
||||
if (error == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'error' value");
|
||||
reader.end_member ();
|
||||
|
||||
watches.unset (session_id);
|
||||
watch.on_ready (0, error);
|
||||
return;
|
||||
}
|
||||
reader.end_member ();
|
||||
|
||||
var on_ready = (owned) watch.on_ready;
|
||||
if (on_ready == null)
|
||||
throw new Error.PROTOCOL ("Duplicate watch:ready for session ID: %u", session_id);
|
||||
|
||||
watch.on_ready = null;
|
||||
on_ready (session_id, null);
|
||||
}
|
||||
|
||||
private void handle_watch_event_message (Json.Reader reader, string type) throws Error {
|
||||
reader.read_member ("session_id");
|
||||
var session_id = (uint) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
|
||||
var watch = watches[session_id];
|
||||
if (watch == null)
|
||||
throw new Error.PROTOCOL ("Invalid watch session ID: %u", session_id);
|
||||
|
||||
if (type == "starting") {
|
||||
watch.on_starting ();
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "finished") {
|
||||
watch.on_finished ();
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "output") {
|
||||
reader.read_member ("bundle");
|
||||
unowned string? bundle = reader.get_string_value ();
|
||||
if (bundle == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'bundle' value");
|
||||
reader.end_member ();
|
||||
|
||||
watch.on_output (bundle);
|
||||
return;
|
||||
}
|
||||
|
||||
emit_diagnostic_from_json (reader, watch.on_diagnostic);
|
||||
}
|
||||
|
||||
private static void emit_diagnostic_from_json (Json.Reader reader, DiagnosticFunc on_diagnostic) throws Error {
|
||||
reader.read_member ("category");
|
||||
unowned string? category = reader.get_string_value ();
|
||||
if (category == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'category' value");
|
||||
reader.end_member ();
|
||||
|
||||
reader.read_member ("code");
|
||||
int code = (int) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
|
||||
string? path = null;
|
||||
int line = 0;
|
||||
int character = 0;
|
||||
|
||||
if (reader.read_member ("path")) {
|
||||
path = reader.get_string_value ();
|
||||
reader.end_member ();
|
||||
|
||||
reader.read_member ("line");
|
||||
line = (int) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
|
||||
reader.read_member ("character");
|
||||
character = (int) reader.get_int_value ();
|
||||
reader.end_member ();
|
||||
} else {
|
||||
reader.end_member ();
|
||||
}
|
||||
|
||||
reader.read_member ("text");
|
||||
unowned string? text = reader.get_string_value ();
|
||||
if (text == null)
|
||||
throw new Error.PROTOCOL ("Missing or invalid 'text' value");
|
||||
reader.end_member ();
|
||||
|
||||
on_diagnostic (category, code, path, line, character, text);
|
||||
}
|
||||
|
||||
private async void process_stderr_stream (DataInputStream stream) {
|
||||
try {
|
||||
while (true) {
|
||||
string? line = yield stream.read_line_utf8_async (Priority.DEFAULT, io_cancellable);
|
||||
if (line == null)
|
||||
break;
|
||||
printerr ("[frida-compiler-backend stderr] %s\n", line);
|
||||
}
|
||||
} 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 ("Compiler backend process terminated unexpectedly");
|
||||
}
|
||||
|
||||
if (n == 0)
|
||||
throw new Error.TRANSPORT ("Compiler backend process terminated unexpectedly");
|
||||
|
||||
available += n;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
private string compute_project_root (string entrypoint, CompilerOptions options) {
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
//go:build !frida_compiler_backend_executable
|
||||
|
||||
package main
|
||||
|
||||
/*
|
||||
#include <stdint.h>
|
||||
|
||||
typedef enum {
|
||||
FRIDA_OUTPUT_UNESCAPED,
|
||||
FRIDA_OUTPUT_HEX_BYTES,
|
||||
FRIDA_OUTPUT_C_STRING,
|
||||
} FridaOutputFormat;
|
||||
|
||||
typedef enum {
|
||||
FRIDA_BUNDLE_ESM,
|
||||
FRIDA_BUNDLE_IIFE,
|
||||
} FridaBundleFormat;
|
||||
|
||||
typedef void (* FridaBuildCompleteFunc) (char * bundle, char * error_message, void * user_data);
|
||||
typedef void (* FridaWatchReadyFunc) (uintptr_t session_handle, char * error_message, void * user_data);
|
||||
typedef void (* FridaStartingFunc) (void * user_data);
|
||||
typedef void (* FridaFinishedFunc) (void * user_data);
|
||||
typedef void (* FridaOutputFunc) (char * bundle, void * user_data);
|
||||
typedef void (* FridaDiagnosticFunc) (char * category, int code, char * path, int line, int character, char * text,
|
||||
void * user_data);
|
||||
typedef void (* FridaDestroyFunc) (void * user_data);
|
||||
|
||||
static inline void
|
||||
invoke_build_complete_func (FridaBuildCompleteFunc fn,
|
||||
char * bundle,
|
||||
char * error_message,
|
||||
void * user_data)
|
||||
{
|
||||
fn (bundle, error_message, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_watch_ready_func (FridaWatchReadyFunc fn,
|
||||
uintptr_t session_handle,
|
||||
char * error_message,
|
||||
void * user_data)
|
||||
{
|
||||
fn (session_handle, error_message, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_starting_func (FridaStartingFunc fn,
|
||||
void * user_data)
|
||||
{
|
||||
fn (user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_finished_func (FridaFinishedFunc fn,
|
||||
void * user_data)
|
||||
{
|
||||
fn (user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_output_func (FridaOutputFunc fn,
|
||||
char * bundle,
|
||||
void * user_data)
|
||||
{
|
||||
fn (bundle, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_diagnostic_func (FridaDiagnosticFunc fn,
|
||||
char * category,
|
||||
int code,
|
||||
char * path,
|
||||
int line,
|
||||
int character,
|
||||
char * text,
|
||||
void * user_data)
|
||||
{
|
||||
fn (category, code, path, line, character, text, user_data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
invoke_destroy_func (FridaDestroyFunc fn,
|
||||
void * user_data)
|
||||
{
|
||||
fn (user_data);
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"runtime/cgo"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//export _frida_compiler_backend_build
|
||||
func _frida_compiler_backend_build(cProjectRoot, cEntrypoint *C.char, outputFormat C.FridaOutputFormat, bundleFormat C.FridaBundleFormat,
|
||||
disableTypeCheck, sourceMap, compress uintptr, cPlatform *C.char, cExternals **C.char, numExternals C.int,
|
||||
onDiagnosticFn C.FridaDiagnosticFunc, onDiagnosticData unsafe.Pointer, onCompleteFn C.FridaBuildCompleteFunc,
|
||||
onCompleteData unsafe.Pointer, onCompleteDataDestroy C.FridaDestroyFunc) {
|
||||
options := BuildOptions{
|
||||
ProjectRoot: C.GoString(cProjectRoot),
|
||||
Entrypoint: C.GoString(cEntrypoint),
|
||||
OutputFormat: OutputFormat(outputFormat),
|
||||
BundleFormat: BundleFormat(bundleFormat),
|
||||
DisableTypeCheck: disableTypeCheck != 0,
|
||||
SourceMap: sourceMap != 0,
|
||||
Compress: compress != 0,
|
||||
Platform: platformFromFrida(C.GoString(cPlatform)),
|
||||
Externals: parseCExternals(cExternals, numExternals),
|
||||
}
|
||||
onDiagnostic := NewCDelegate(onDiagnosticFn, onDiagnosticData, nil)
|
||||
onComplete := NewCDelegate(onCompleteFn, onCompleteData, onCompleteDataDestroy)
|
||||
|
||||
go func() {
|
||||
defer onComplete.Dispose()
|
||||
defer onDiagnostic.Dispose()
|
||||
|
||||
onDiagnostic := makeCBuildDiagnosticCallback(onDiagnostic)
|
||||
|
||||
bundle, err := build(options, onDiagnostic)
|
||||
|
||||
var cBundle, cErrorMessage *C.char
|
||||
if err == nil {
|
||||
cBundle = C.CString(bundle)
|
||||
} else {
|
||||
cErrorMessage = C.CString(err.Error())
|
||||
}
|
||||
C.invoke_build_complete_func(onComplete.Func, cBundle, cErrorMessage, onComplete.Data)
|
||||
}()
|
||||
}
|
||||
|
||||
//export _frida_compiler_backend_watch
|
||||
func _frida_compiler_backend_watch(cProjectRoot, cEntrypoint *C.char, outputFormat C.FridaOutputFormat, bundleFormat C.FridaBundleFormat,
|
||||
disableTypeCheck, sourceMap, compress uintptr, cPlatform *C.char, cExternals **C.char, numExternals C.int,
|
||||
onStartingFn C.FridaStartingFunc, onStartingData unsafe.Pointer,
|
||||
onFinishedFn C.FridaFinishedFunc, onFinishedData unsafe.Pointer,
|
||||
onOutputFn C.FridaOutputFunc, onOutputData unsafe.Pointer,
|
||||
onDiagnosticFn C.FridaDiagnosticFunc, onDiagnosticData unsafe.Pointer,
|
||||
onReadyFn C.FridaWatchReadyFunc, onReadyData unsafe.Pointer, onReadyDataDestroy C.FridaDestroyFunc) {
|
||||
options := BuildOptions{
|
||||
ProjectRoot: C.GoString(cProjectRoot),
|
||||
Entrypoint: C.GoString(cEntrypoint),
|
||||
OutputFormat: OutputFormat(outputFormat),
|
||||
BundleFormat: BundleFormat(bundleFormat),
|
||||
DisableTypeCheck: disableTypeCheck != 0,
|
||||
SourceMap: sourceMap != 0,
|
||||
Compress: compress != 0,
|
||||
Platform: platformFromFrida(C.GoString(cPlatform)),
|
||||
Externals: parseCExternals(cExternals, numExternals),
|
||||
}
|
||||
onStarting := NewCDelegate(onStartingFn, onStartingData, nil)
|
||||
onFinished := NewCDelegate(onFinishedFn, onFinishedData, nil)
|
||||
onOutput := NewCDelegate(onOutputFn, onOutputData, nil)
|
||||
onDiagnostic := NewCDelegate(onDiagnosticFn, onDiagnosticData, nil)
|
||||
onReady := NewCDelegate(onReadyFn, onReadyData, onReadyDataDestroy)
|
||||
|
||||
go func() {
|
||||
defer onReady.Dispose()
|
||||
|
||||
onDispose := func() {
|
||||
onStarting.Dispose()
|
||||
onFinished.Dispose()
|
||||
onOutput.Dispose()
|
||||
onDiagnostic.Dispose()
|
||||
}
|
||||
|
||||
callbacks := BuildEventCallbacks{
|
||||
OnStart: func() {
|
||||
C.invoke_starting_func(onStarting.Func, onStarting.Data)
|
||||
},
|
||||
OnEnd: func() {
|
||||
C.invoke_finished_func(onFinished.Func, onFinished.Data)
|
||||
},
|
||||
OnOutput: func(bundle string) {
|
||||
C.invoke_output_func(onOutput.Func, C.CString(bundle), onOutput.Data)
|
||||
},
|
||||
OnDiagnostic: makeCBuildDiagnosticCallback(onDiagnostic),
|
||||
}
|
||||
|
||||
session, err := NewWatchSession(options, onDispose, callbacks)
|
||||
|
||||
var cSession C.uintptr_t
|
||||
var cErrorMessage *C.char
|
||||
if err == nil {
|
||||
cSession = C.uintptr_t(cgo.NewHandle(session))
|
||||
} else {
|
||||
cErrorMessage = C.CString(err.Error())
|
||||
}
|
||||
C.invoke_watch_ready_func(onReady.Func, cSession, cErrorMessage, onReady.Data)
|
||||
}()
|
||||
}
|
||||
|
||||
//export _frida_compiler_backend_watch_session_dispose
|
||||
func _frida_compiler_backend_watch_session_dispose(h uintptr) {
|
||||
handle := cgo.Handle(h)
|
||||
session := handle.Value().(*WatchSession)
|
||||
session.Dispose()
|
||||
handle.Delete()
|
||||
}
|
||||
|
||||
func parseCExternals(cExternals **C.char, numExternals C.int) []string {
|
||||
if numExternals == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
n := int(numExternals)
|
||||
cArray := (*[1 << 20]*C.char)(unsafe.Pointer(cExternals))[:n:n]
|
||||
|
||||
externals := make([]string, n)
|
||||
for i := 0; i < n; i++ {
|
||||
externals[i] = C.GoString(cArray[i])
|
||||
}
|
||||
|
||||
return externals
|
||||
}
|
||||
|
||||
func makeCBuildDiagnosticCallback(onDiagnostic *CDelegate[C.FridaDiagnosticFunc]) BuildDiagnosticCallback {
|
||||
return func(d Diagnostic) {
|
||||
var cPath *C.char
|
||||
if d.path != "" {
|
||||
cPath = C.CString(d.path)
|
||||
}
|
||||
|
||||
C.invoke_diagnostic_func(onDiagnostic.Func, C.CString(d.category), C.int(d.code), cPath, C.int(d.line),
|
||||
C.int(d.character), C.CString(d.text), onDiagnostic.Data)
|
||||
}
|
||||
}
|
||||
|
||||
type CDelegate[F any] struct {
|
||||
Func F
|
||||
null F
|
||||
Data unsafe.Pointer
|
||||
dataDestroy C.FridaDestroyFunc
|
||||
}
|
||||
|
||||
func NewCDelegate[F any](function F, data unsafe.Pointer, dataDestroy C.FridaDestroyFunc) *CDelegate[F] {
|
||||
return &CDelegate[F]{Func: function, Data: data, dataDestroy: dataDestroy}
|
||||
}
|
||||
|
||||
func (d *CDelegate[F]) Dispose() {
|
||||
if d.dataDestroy != nil {
|
||||
C.invoke_destroy_func(d.dataDestroy, d.Data)
|
||||
}
|
||||
d.Func = d.null
|
||||
d.Data = nil
|
||||
d.dataDestroy = nil
|
||||
}
|
||||
|
||||
func main() {}
|
||||
@@ -0,0 +1,263 @@
|
||||
//go:build frida_compiler_backend_executable
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type BackendRequest struct {
|
||||
Type string `json:"type"`
|
||||
ID uint `json:"id,omitempty"`
|
||||
SessionID uint `json:"session_id,omitempty"`
|
||||
ProjectRoot string `json:"project_root,omitempty"`
|
||||
Entrypoint string `json:"entrypoint,omitempty"`
|
||||
OutputFormat string `json:"output_format,omitempty"`
|
||||
BundleFormat string `json:"bundle_format,omitempty"`
|
||||
DisableTypeCheck bool `json:"disable_type_check,omitempty"`
|
||||
SourceMap bool `json:"source_map,omitempty"`
|
||||
Compress bool `json:"compress,omitempty"`
|
||||
Platform string `json:"platform,omitempty"`
|
||||
Externals []string `json:"externals,omitempty"`
|
||||
}
|
||||
|
||||
type BackendEvent struct {
|
||||
Type string `json:"type"`
|
||||
ID uint `json:"id,omitempty"`
|
||||
SessionID uint `json:"session_id,omitempty"`
|
||||
|
||||
Bundle string `json:"bundle,omitempty"`
|
||||
Error string `json:"error,omitempty"`
|
||||
|
||||
Category string `json:"category,omitempty"`
|
||||
Code int `json:"code,omitempty"`
|
||||
Path string `json:"path,omitempty"`
|
||||
Line int `json:"line,omitempty"`
|
||||
Character int `json:"character,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
if err := run(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func run() error {
|
||||
reader := bufio.NewReaderSize(os.Stdin, 128*1024)
|
||||
writer := bufio.NewWriterSize(os.Stdout, 128*1024)
|
||||
|
||||
var outputMu sync.Mutex
|
||||
var sessionsMu sync.Mutex
|
||||
sessions := make(map[uint]*WatchSession)
|
||||
|
||||
emit := func(ev BackendEvent) {
|
||||
outputMu.Lock()
|
||||
defer outputMu.Unlock()
|
||||
|
||||
if err := writeMessage(writer, ev); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
for {
|
||||
var req BackendRequest
|
||||
if err := readMessage(reader, &req); err != nil {
|
||||
if errors.Is(err, io.EOF) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
switch req.Type {
|
||||
case "build":
|
||||
go func(req BackendRequest) {
|
||||
options, err := buildOptionsFromRequest(req)
|
||||
if err != nil {
|
||||
emit(BackendEvent{
|
||||
Type: "build:complete",
|
||||
ID: req.ID,
|
||||
Error: err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
onDiagnostic := func(d Diagnostic) {
|
||||
ev := BackendEvent{
|
||||
Type: "build:diagnostic",
|
||||
ID: req.ID,
|
||||
Category: d.category,
|
||||
Code: d.code,
|
||||
Path: d.path,
|
||||
Line: d.line,
|
||||
Character: d.character,
|
||||
Text: d.text,
|
||||
}
|
||||
emit(ev)
|
||||
}
|
||||
|
||||
bundle, err := build(options, onDiagnostic)
|
||||
|
||||
ev := BackendEvent{
|
||||
Type: "build:complete",
|
||||
ID: req.ID,
|
||||
}
|
||||
if err != nil {
|
||||
ev.Error = err.Error()
|
||||
} else {
|
||||
ev.Bundle = bundle
|
||||
}
|
||||
emit(ev)
|
||||
}(req)
|
||||
|
||||
case "watch":
|
||||
go func(req BackendRequest) {
|
||||
options, err := buildOptionsFromRequest(req)
|
||||
if err != nil {
|
||||
emit(BackendEvent{
|
||||
Type: "watch:ready",
|
||||
SessionID: req.SessionID,
|
||||
Error: err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
callbacks := BuildEventCallbacks{
|
||||
OnStart: func() {
|
||||
emit(BackendEvent{
|
||||
Type: "watch:starting",
|
||||
SessionID: req.SessionID,
|
||||
})
|
||||
},
|
||||
OnEnd: func() {
|
||||
emit(BackendEvent{
|
||||
Type: "watch:finished",
|
||||
SessionID: req.SessionID,
|
||||
})
|
||||
},
|
||||
OnOutput: func(bundle string) {
|
||||
emit(BackendEvent{
|
||||
Type: "watch:output",
|
||||
SessionID: req.SessionID,
|
||||
Bundle: bundle,
|
||||
})
|
||||
},
|
||||
OnDiagnostic: func(d Diagnostic) {
|
||||
emit(BackendEvent{
|
||||
Type: "watch:diagnostic",
|
||||
SessionID: req.SessionID,
|
||||
Category: d.category,
|
||||
Code: d.code,
|
||||
Path: d.path,
|
||||
Line: d.line,
|
||||
Character: d.character,
|
||||
Text: d.text,
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
var session *WatchSession
|
||||
onDispose := func() {
|
||||
sessionsMu.Lock()
|
||||
delete(sessions, req.SessionID)
|
||||
sessionsMu.Unlock()
|
||||
}
|
||||
|
||||
session, err = NewWatchSession(options, onDispose, callbacks)
|
||||
if err != nil {
|
||||
emit(BackendEvent{
|
||||
Type: "watch:ready",
|
||||
SessionID: req.SessionID,
|
||||
Error: err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
sessionsMu.Lock()
|
||||
sessions[req.SessionID] = session
|
||||
sessionsMu.Unlock()
|
||||
|
||||
emit(BackendEvent{
|
||||
Type: "watch:ready",
|
||||
SessionID: req.SessionID,
|
||||
})
|
||||
}(req)
|
||||
|
||||
case "dispose":
|
||||
sessionsMu.Lock()
|
||||
session := sessions[req.SessionID]
|
||||
delete(sessions, req.SessionID)
|
||||
sessionsMu.Unlock()
|
||||
|
||||
if session != nil {
|
||||
session.Dispose()
|
||||
}
|
||||
|
||||
default:
|
||||
return fmt.Errorf("unsupported request type: %q", req.Type)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func buildOptionsFromRequest(req BackendRequest) (BuildOptions, error) {
|
||||
outputFormat, err := outputFormatFromNick(req.OutputFormat)
|
||||
if err != nil {
|
||||
return BuildOptions{}, err
|
||||
}
|
||||
|
||||
bundleFormat, err := bundleFormatFromNick(req.BundleFormat)
|
||||
if err != nil {
|
||||
return BuildOptions{}, err
|
||||
}
|
||||
|
||||
return BuildOptions{
|
||||
ProjectRoot: req.ProjectRoot,
|
||||
Entrypoint: req.Entrypoint,
|
||||
OutputFormat: outputFormat,
|
||||
BundleFormat: bundleFormat,
|
||||
DisableTypeCheck: req.DisableTypeCheck,
|
||||
SourceMap: req.SourceMap,
|
||||
Compress: req.Compress,
|
||||
Platform: platformFromFrida(req.Platform),
|
||||
Externals: req.Externals,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func readMessage(r io.Reader, out any) error {
|
||||
var size uint32
|
||||
if err := binary.Read(r, binary.BigEndian, &size); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
buf := make([]byte, size)
|
||||
if _, err := io.ReadFull(r, buf); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return json.Unmarshal(buf, out)
|
||||
}
|
||||
|
||||
func writeMessage(w *bufio.Writer, msg any) error {
|
||||
buf, err := json.Marshal(msg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := binary.Write(w, binary.BigEndian, uint32(len(buf))); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := w.Write(buf); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return w.Flush()
|
||||
}
|
||||
+39
-14
@@ -4,12 +4,30 @@ compiler_sources = files(
|
||||
)
|
||||
|
||||
if have_compiler_backend
|
||||
output_suffix = compiler_backend_static_compilation ? '' : '-raw'
|
||||
if compiler_backend_mode == 'c-archive'
|
||||
output_files = [
|
||||
'frida-compiler-backend.a',
|
||||
'frida-compiler-backend.h',
|
||||
]
|
||||
elif compiler_backend_mode == 'c-shared'
|
||||
output_files = [
|
||||
'frida-compiler-backend-raw' + shlib_suffix,
|
||||
'frida-compiler-backend-raw.h',
|
||||
]
|
||||
elif compiler_backend_mode == 'pie'
|
||||
output_files = [
|
||||
'frida-compiler-backend-raw' + exe_suffix,
|
||||
]
|
||||
endif
|
||||
|
||||
compiler_backend = custom_target('frida-compiler-backend',
|
||||
input: [
|
||||
'go.mod',
|
||||
'go.sum',
|
||||
'frontend_capi.go',
|
||||
'frontend_stdio.go',
|
||||
'backend.go',
|
||||
'protocol_types.go',
|
||||
'backend.version',
|
||||
'tscompiler.go',
|
||||
'tsconfig.go',
|
||||
@@ -17,10 +35,7 @@ if have_compiler_backend
|
||||
'package.json',
|
||||
'package-lock.json',
|
||||
],
|
||||
output: [
|
||||
'frida-compiler-backend' + output_suffix + (compiler_backend_static_compilation ? '.a' : shlib_suffix),
|
||||
'frida-compiler-backend' + output_suffix + '.h',
|
||||
],
|
||||
output: output_files,
|
||||
command: [
|
||||
python,
|
||||
files('build-backend.py'),
|
||||
@@ -32,21 +47,31 @@ if have_compiler_backend
|
||||
'@INPUT@',
|
||||
],
|
||||
)
|
||||
if compiler_backend_static_compilation
|
||||
|
||||
if compiler_backend_mode == 'c-archive'
|
||||
backend_libs += compiler_backend[0]
|
||||
else
|
||||
filename = 'frida-compiler-backend' + shlib_suffix
|
||||
identity = (host_os_family == 'darwin') ? 'FridaCompilerBackend' : filename
|
||||
compiler_backend_shlib = custom_target('frida-compiler-backend-shlib',
|
||||
input: compiler_backend[0],
|
||||
output: filename,
|
||||
command: post_process + ['shared-library', identity, 'elf-cleaner:off'],
|
||||
)
|
||||
if compiler_backend_mode == 'c-shared'
|
||||
processed_filename = 'frida-compiler-backend' + shlib_suffix
|
||||
identity = (host_os_family == 'darwin') ? 'FridaCompilerBackend' : processed_filename
|
||||
compiler_backend_binary = custom_target('frida-compiler-backend-binary',
|
||||
input: compiler_backend[0],
|
||||
output: processed_filename,
|
||||
command: post_process + ['shared-library', identity, 'elf-cleaner:off'],
|
||||
)
|
||||
elif compiler_backend_mode == 'pie'
|
||||
processed_filename = 'frida-compiler-backend' + exe_suffix
|
||||
compiler_backend_binary = custom_target('frida-compiler-backend-binary',
|
||||
input: compiler_backend[0],
|
||||
output: processed_filename,
|
||||
command: post_process + ['executable', processed_filename],
|
||||
)
|
||||
endif
|
||||
|
||||
compiler_data = custom_target('frida-data-compiler',
|
||||
input: [
|
||||
'compiler.resources',
|
||||
compiler_backend_shlib,
|
||||
compiler_backend_binary,
|
||||
],
|
||||
output: [
|
||||
'frida-data-compiler.vapi',
|
||||
|
||||
Generated
+4
-4
@@ -33,7 +33,7 @@
|
||||
"@frida/url": "^1.0.2",
|
||||
"@frida/util": "^1.0.3",
|
||||
"@frida/vm": "^2.0.0",
|
||||
"@types/frida-gum": "19.0.1",
|
||||
"@types/frida-gum": "19.0.2",
|
||||
"@types/node": "18.19.103",
|
||||
"frida-fs": "7.0.0"
|
||||
}
|
||||
@@ -248,9 +248,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/frida-gum": {
|
||||
"version": "19.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/frida-gum/-/frida-gum-19.0.1.tgz",
|
||||
"integrity": "sha512-mp8BpWWkQFJH86ZN5uXZuDiA7KY/+jDknrw0a06x0/+F5ucPwctHrCuV6iT+LLCp/GyICc36ssedF33B1WoLsw==",
|
||||
"version": "19.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/frida-gum/-/frida-gum-19.0.2.tgz",
|
||||
"integrity": "sha512-oh/f1r8dIMDWBoziXP3geIJ8ga/siU32MuifBztGsDglOKbHrhS0E3z0Dab0MIe3UFzC4Bvz/GRHfin2LDE8BQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"@frida/url": "^1.0.2",
|
||||
"@frida/util": "^1.0.3",
|
||||
"@frida/vm": "^2.0.0",
|
||||
"@types/frida-gum": "19.0.1",
|
||||
"@types/frida-gum": "19.0.2",
|
||||
"@types/node": "18.19.103",
|
||||
"frida-fs": "7.0.0"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
esbuild "github.com/evanw/esbuild/pkg/api"
|
||||
)
|
||||
|
||||
type OutputFormat int
|
||||
|
||||
const (
|
||||
OutputFormatUnescaped OutputFormat = iota
|
||||
OutputFormatHexBytes
|
||||
OutputFormatCString
|
||||
)
|
||||
|
||||
func outputFormatFromNick(s string) (OutputFormat, error) {
|
||||
switch s {
|
||||
case "unescaped":
|
||||
return OutputFormatUnescaped, nil
|
||||
case "hex-bytes":
|
||||
return OutputFormatHexBytes, nil
|
||||
case "c-string":
|
||||
return OutputFormatCString, nil
|
||||
default:
|
||||
return 0, fmt.Errorf("unknown output format: %q", s)
|
||||
}
|
||||
}
|
||||
|
||||
type BundleFormat int
|
||||
|
||||
const (
|
||||
BundleFormatESM BundleFormat = iota
|
||||
BundleFormatIIFE
|
||||
)
|
||||
|
||||
func bundleFormatFromNick(s string) (BundleFormat, error) {
|
||||
switch s {
|
||||
case "esm":
|
||||
return BundleFormatESM, nil
|
||||
case "iife":
|
||||
return BundleFormatIIFE, nil
|
||||
default:
|
||||
return 0, fmt.Errorf("unknown bundle format: %q", s)
|
||||
}
|
||||
}
|
||||
|
||||
func platformFromFrida(s string) esbuild.Platform {
|
||||
switch s {
|
||||
case "gum":
|
||||
return esbuild.PlatformNode
|
||||
case "browser":
|
||||
return esbuild.PlatformBrowser
|
||||
case "neutral":
|
||||
return esbuild.PlatformNeutral
|
||||
default:
|
||||
panic(fmt.Sprintf("Unknown platform: %q", s))
|
||||
}
|
||||
}
|
||||
@@ -444,6 +444,7 @@ static void frida_set_nth_hardware_breakpoint (gpointer state, guint n, GumAddre
|
||||
static void frida_set_hardware_single_step (gpointer debug_state, GumDarwinUnifiedThreadState * thread_state, gboolean enabled, GumCpuType cpu_type);
|
||||
static gboolean frida_is_hardware_breakpoint_support_working (void);
|
||||
|
||||
static gboolean frida_find_restart_with_dyld_in_cache (const GumDarwinSymbolDetails * details, gpointer user_data);
|
||||
static GumAddress frida_find_run_initializers_call (mach_port_t task, GumCpuType cpu_type, GumAddress start);
|
||||
static GHashTable * frida_find_modinit_strcmp_checks (mach_port_t task, GumDarwinModule * dyld);
|
||||
static GumAddress frida_find_function_end (mach_port_t task, GumCpuType cpu_type, GumAddress start, gsize max_size);
|
||||
@@ -2107,18 +2108,8 @@ _frida_darwin_helper_backend_prepare_spawn_instance_for_injection (FridaDarwinHe
|
||||
frida_spawn_instance_set_nth_breakpoint (instance, i++, sim_notify_address, FRIDA_BREAKPOINT_REPEAT_ALWAYS);
|
||||
if (instance->dyld_flavor == FRIDA_DYLD_V4_PLUS)
|
||||
{
|
||||
GumAddress restart_with_dyld_in_cache = gum_darwin_module_resolve_symbol_address (dyld,
|
||||
"__ZN5dyld422restartWithDyldInCacheEPKNS_10KernelArgsEPKN6mach_o6HeaderEPK15DyldSharedCachePv");
|
||||
if (restart_with_dyld_in_cache == 0)
|
||||
{
|
||||
restart_with_dyld_in_cache = gum_darwin_module_resolve_symbol_address (dyld,
|
||||
"__ZN5dyld422restartWithDyldInCacheEPKNS_10KernelArgsEPKN5dyld39MachOFileEPK15DyldSharedCachePv");
|
||||
}
|
||||
if (restart_with_dyld_in_cache == 0)
|
||||
{
|
||||
restart_with_dyld_in_cache = gum_darwin_module_resolve_symbol_address (dyld,
|
||||
"__ZN5dyld422restartWithDyldInCacheEPKNS_10KernelArgsEPKN5dyld39MachOFileEPv");
|
||||
}
|
||||
GumAddress restart_with_dyld_in_cache = 0;
|
||||
gum_darwin_module_enumerate_symbols (dyld, frida_find_restart_with_dyld_in_cache, &restart_with_dyld_in_cache);
|
||||
if (restart_with_dyld_in_cache != 0)
|
||||
frida_spawn_instance_set_nth_breakpoint (instance, i++, restart_with_dyld_in_cache, FRIDA_BREAKPOINT_REPEAT_NEVER);
|
||||
}
|
||||
@@ -5442,6 +5433,19 @@ frida_is_hardware_breakpoint_support_working (void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static gboolean
|
||||
frida_find_restart_with_dyld_in_cache (const GumDarwinSymbolDetails * details, gpointer user_data)
|
||||
{
|
||||
if (strstr (details->name, "restartWithDyldInCache") != NULL)
|
||||
{
|
||||
GumAddress * restart_with_dyld_in_cache = user_data;
|
||||
*restart_with_dyld_in_cache = details->address;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GumAddress
|
||||
frida_find_run_initializers_call (mach_port_t task, GumCpuType cpu_type, GumAddress start)
|
||||
{
|
||||
|
||||
@@ -73,8 +73,8 @@ _frida_icon_from_native_image_scaled_to (FridaNativeImage native_image, guint ta
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
|
||||
g_variant_builder_add (&builder, "{sv}", "format", g_variant_new_string ("rgba"));
|
||||
g_variant_builder_add (&builder, "{sv}", "width", g_variant_new_int64 (target_width));
|
||||
g_variant_builder_add (&builder, "{sv}", "height", g_variant_new_int64 (target_height));
|
||||
g_variant_builder_add (&builder, "{sv}", "width", g_variant_new_uint16 (target_width));
|
||||
g_variant_builder_add (&builder, "{sv}", "height", g_variant_new_uint16 (target_height));
|
||||
g_variant_builder_add (&builder, "{sv}", "image",
|
||||
g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, rep.bitmapData, rowstride * target_height, sizeof (guint8)));
|
||||
result = g_variant_ref_sink (g_variant_builder_end (&builder));
|
||||
@@ -136,8 +136,8 @@ _frida_icon_from_native_image_scaled_to (FridaNativeImage native_image, guint ta
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
|
||||
g_variant_builder_add (&builder, "{sv}", "format", g_variant_new_string ("rgba"));
|
||||
g_variant_builder_add (&builder, "{sv}", "width", g_variant_new_int64 (target_width));
|
||||
g_variant_builder_add (&builder, "{sv}", "height", g_variant_new_int64 (target_height));
|
||||
g_variant_builder_add (&builder, "{sv}", "width", g_variant_new_uint16 (target_width));
|
||||
g_variant_builder_add (&builder, "{sv}", "height", g_variant_new_uint16 (target_height));
|
||||
g_variant_builder_add (&builder, "{sv}", "image",
|
||||
g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, CGBitmapContextGetData (cgctx), pixel_buf_size, sizeof (guint8)));
|
||||
result = g_variant_ref_sink (g_variant_builder_end (&builder));
|
||||
|
||||
@@ -529,8 +529,6 @@ frida_add_app_icons (GHashTable * parameters, NSImage * image)
|
||||
|
||||
g_variant_builder_open (&builder, G_VARIANT_TYPE_VARDICT);
|
||||
g_variant_builder_add (&builder, "{sv}", "format", g_variant_new_string ("png"));
|
||||
g_variant_builder_add (&builder, "{sv}", "width", g_variant_new_int64 (size));
|
||||
g_variant_builder_add (&builder, "{sv}", "height", g_variant_new_int64 (size));
|
||||
g_variant_builder_add (&builder, "{sv}", "image",
|
||||
g_variant_new_from_data (G_VARIANT_TYPE ("ay"), png.bytes, png.length, TRUE, (GDestroyNotify) CFRelease, [png retain]));
|
||||
g_variant_builder_close (&builder);
|
||||
|
||||
@@ -120,8 +120,8 @@ namespace Frida {
|
||||
construct {
|
||||
var builder = new VariantBuilder (VariantType.VARDICT);
|
||||
builder.add ("{sv}", "format", new Variant.string ("rgba"));
|
||||
builder.add ("{sv}", "width", new Variant.int64 (16));
|
||||
builder.add ("{sv}", "height", new Variant.int64 (16));
|
||||
builder.add ("{sv}", "width", new Variant.uint16 (16));
|
||||
builder.add ("{sv}", "height", new Variant.uint16 (16));
|
||||
var image = new Bytes (Base64.decode ("AAAAAAAAAAAAAAAAAAAAAP///0DS4pz/////MP///0D///9A////MNflqP////9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8QzN6Q/7vTa/+vy1L/r8tS/7vTa//O4JXv////EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1eSkz6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/9XkpM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8vfjcKrIRf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+qyEX/8PXeYAAAAAAAAAAAAAAAAAAAAAAAAAAA////QNLinL+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/97qt6////9AAAAAAAAAAAAAAAAA2eatv7vTa//G2oP/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf/M3pD/u9Nr/9nmrb8AAAAAAAAAANLinP+kxDn/u9Nr/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/u9Nr/6TEOf/S4pz/AAAAAAAAAADS4pz/pMQ5/7vTa/+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/7vTa/+kxDn/0uKc/wAAAAAAAAAA0uKc/6TEOf+702v/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+702v/pMQ5/9LinP8AAAAAAAAAANLinP+kxDn/u9Nr/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/u9Nr/6TEOf/S4pz/AAAAAAAAAADO4JXvpMQ5/8DWd/+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/8DWd/+kxDn/zuCV7wAAAAAAAAAA7fPXUNLinIDl7sbfpMQ5/6TEOf+kxDn/pMQ5/6TEOf+kxDn/pMQ5/6TEOf/l7sbf0uKcgO3z11AAAAAAAAAAAAAAAAAAAAAA8PXeYMDWd/+qyEX/pMQ5/6/LUv+vy1L/pMQ5/6rIRf/A1nf/7fPXUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu9Nr/6TEOf/C2Hu/wth7v6TEOf+702v/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALvTa/+kxDn/wth7v8LYe7+kxDn/u9Nr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc6LPPu9Nr/+HrvY/h672Pu9Nr/9nmrb8AAAAAAAAAAAAAAAAAAAAAAAAAAA=="));
|
||||
builder.add ("{sv}", "image", Variant.new_from_data (new VariantType ("ay"), image.get_data (), true, image));
|
||||
_icon = builder.end ();
|
||||
@@ -183,10 +183,17 @@ namespace Frida {
|
||||
|
||||
public async ServiceSession link_service_session (HostSession host_session, ServiceSessionId id, Cancellable? cancellable)
|
||||
throws Error, IOError {
|
||||
throw new Error.NOT_SUPPORTED ("Services are not supported by this backend");
|
||||
if (host_session != this.host_session)
|
||||
throw new Error.INVALID_ARGUMENT ("Invalid host session");
|
||||
|
||||
return yield this.host_session.link_service_session (id, cancellable);
|
||||
}
|
||||
|
||||
public void unlink_service_session (HostSession host_session, ServiceSessionId id) {
|
||||
if (host_session != this.host_session)
|
||||
return;
|
||||
|
||||
this.host_session.unlink_service_session (id);
|
||||
}
|
||||
|
||||
private void on_agent_session_detached (AgentSessionId id, SessionDetachReason reason, CrashInfo crash) {
|
||||
@@ -244,6 +251,8 @@ namespace Frida {
|
||||
|
||||
private ChannelRegistry channel_registry = new ChannelRegistry ();
|
||||
|
||||
private ServiceSessionRegistry service_session_registry = new ServiceSessionRegistry ();
|
||||
|
||||
private Cancellable io_cancellable = new Cancellable ();
|
||||
|
||||
private const double MIN_SERVER_CHECK_INTERVAL = 5.0;
|
||||
@@ -281,8 +290,9 @@ namespace Frida {
|
||||
if (helper_client_request != null) {
|
||||
AndroidHelperClient? helper = yield try_get_helper_client (cancellable);
|
||||
if (helper != null) {
|
||||
on_helper_client_closed (helper);
|
||||
yield helper.close (cancellable);
|
||||
var transport = (AndroidHelperStreamTransport) helper.transport;
|
||||
on_helper_stream_transport_closed (transport);
|
||||
yield transport.close (cancellable);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -764,7 +774,24 @@ namespace Frida {
|
||||
}
|
||||
|
||||
public async ServiceSessionId open_service (string address, Cancellable? cancellable) throws Error, IOError {
|
||||
throw new Error.NOT_SUPPORTED ("Services are not supported by this backend");
|
||||
var server = yield get_remote_server (cancellable);
|
||||
try {
|
||||
return yield server.session.open_service (address, cancellable);
|
||||
} catch (GLib.Error e) {
|
||||
throw_dbus_error (e);
|
||||
}
|
||||
}
|
||||
|
||||
public async ServiceSession link_service_session (ServiceSessionId id, Cancellable? cancellable) throws Error, IOError {
|
||||
var server = yield get_remote_server (cancellable);
|
||||
ServiceSession session = yield server.connection.get_proxy (null, ObjectPath.for_service_session (id),
|
||||
DO_NOT_LOAD_PROPERTIES, cancellable);
|
||||
service_session_registry.register (id, session);
|
||||
return session;
|
||||
}
|
||||
|
||||
public void unlink_service_session (ServiceSessionId id) {
|
||||
service_session_registry.unlink (id);
|
||||
}
|
||||
|
||||
private void on_gadget_entry_detached (GadgetEntry entry, SessionDetachReason reason) {
|
||||
@@ -1034,8 +1061,10 @@ namespace Frida {
|
||||
throw e;
|
||||
}
|
||||
|
||||
var helper = new AndroidHelperClient (client.stream);
|
||||
helper.closed.connect (on_helper_client_closed);
|
||||
var transport = new AndroidHelperStreamTransport (client.stream);
|
||||
transport.closed.connect (on_helper_stream_transport_closed);
|
||||
|
||||
var helper = new AndroidHelperClient (transport);
|
||||
|
||||
helper_shell = shell;
|
||||
|
||||
@@ -1054,8 +1083,8 @@ namespace Frida {
|
||||
}
|
||||
}
|
||||
|
||||
private void on_helper_client_closed (AndroidHelperClient helper) {
|
||||
helper.closed.disconnect (on_helper_client_closed);
|
||||
private void on_helper_stream_transport_closed (AndroidHelperStreamTransport transport) {
|
||||
transport.closed.disconnect (on_helper_stream_transport_closed);
|
||||
helper_client_request = null;
|
||||
|
||||
if (helper_shell != null) {
|
||||
|
||||
@@ -0,0 +1,401 @@
|
||||
[CCode (gir_namespace = "FridaFruity", gir_version = "1.0")]
|
||||
namespace Frida.Fruity {
|
||||
public class CsSignature : Object {
|
||||
public uint32 version;
|
||||
public uint32 pid;
|
||||
public uint32 stuff;
|
||||
public uint32 flags;
|
||||
|
||||
public Gee.List<CsSigOwner> owners = new Gee.ArrayList<CsSigOwner> ();
|
||||
|
||||
private CsSegIndexEntry[]? seg_index = null;
|
||||
private uint32 seg_index_gen = 0;
|
||||
|
||||
private struct CsSegIndexEntry {
|
||||
public uint64 start;
|
||||
public uint64 end;
|
||||
public unowned CsSigOwner owner;
|
||||
}
|
||||
|
||||
public void apply_refresh (CsSignature fresh, uint32 gen) {
|
||||
foreach (var cur in owners) {
|
||||
if (cur.mapped_gen_end != 0)
|
||||
continue;
|
||||
|
||||
bool still_present = false;
|
||||
foreach (var f in fresh.owners) {
|
||||
if (cur.uuid.compare (f.uuid) == 0) {
|
||||
still_present = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!still_present)
|
||||
cur.mapped_gen_end = gen;
|
||||
}
|
||||
|
||||
foreach (var f in fresh.owners) {
|
||||
CsSigOwner? cur = null;
|
||||
|
||||
foreach (var existing in owners) {
|
||||
if (existing.uuid.compare (f.uuid) == 0) {
|
||||
cur = existing;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (cur == null) {
|
||||
f.mapped_gen_start = gen;
|
||||
f.mapped_gen_end = 0;
|
||||
owners.add (f);
|
||||
} else {
|
||||
uint32 start = cur.mapped_gen_start;
|
||||
uint32 end = cur.mapped_gen_end;
|
||||
|
||||
cur.path = f.path;
|
||||
cur.image_base = f.image_base;
|
||||
cur.image_end = f.image_end;
|
||||
cur.segments = f.segments;
|
||||
cur.version = f.version;
|
||||
|
||||
cur.mapped_gen_start = start;
|
||||
cur.mapped_gen_end = end;
|
||||
}
|
||||
}
|
||||
|
||||
invalidate_index ();
|
||||
}
|
||||
|
||||
public void note_unmapped_uuid (Bytes uuid, uint32 gen) {
|
||||
foreach (var o in owners) {
|
||||
if (o.mapped_gen_end != 0)
|
||||
continue;
|
||||
if (o.uuid.compare (uuid) == 0) {
|
||||
o.mapped_gen_end = gen;
|
||||
invalidate_index ();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void resolve_addresses (uint32 gen, uint64[] addrs, AddressResolved on_symbol, ModulesReady on_modules) {
|
||||
ensure_index (gen);
|
||||
|
||||
var used_owner_to_mod = new Gee.HashMap<CsSigOwner, uint32> ();
|
||||
var module_list = new Gee.ArrayList<CsSigOwner> ();
|
||||
|
||||
foreach (var addr in addrs) {
|
||||
CsSigOwner? owner;
|
||||
uint32 rel;
|
||||
|
||||
if (!try_resolve (addr, out owner, out rel)) {
|
||||
on_symbol (addr, uint32.MAX, 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
uint32 mod_idx;
|
||||
if (!used_owner_to_mod.has_key (owner)) {
|
||||
mod_idx = (uint32) module_list.size;
|
||||
used_owner_to_mod[owner] = mod_idx;
|
||||
module_list.add (owner);
|
||||
} else {
|
||||
mod_idx = used_owner_to_mod[owner];
|
||||
}
|
||||
|
||||
on_symbol (addr, mod_idx, rel);
|
||||
}
|
||||
|
||||
on_modules (module_list);
|
||||
}
|
||||
|
||||
public delegate void AddressResolved (uint64 addr, uint32 module_index, uint32 rel);
|
||||
public delegate void ModulesReady (Gee.List<CsSigOwner> modules);
|
||||
|
||||
private void ensure_index (uint32 gen) {
|
||||
if (seg_index != null && seg_index_gen == gen)
|
||||
return;
|
||||
|
||||
var tmp = new Array<CsSegIndexEntry> (false, false);
|
||||
|
||||
foreach (var owner in owners) {
|
||||
if (!owner_is_mapped_at (owner, gen))
|
||||
continue;
|
||||
|
||||
foreach (var seg in owner.segments) {
|
||||
if (seg.name == "__PAGEZERO")
|
||||
continue;
|
||||
tmp.append_val (CsSegIndexEntry () {
|
||||
start = seg.vmaddr,
|
||||
end = seg.vmaddr + seg.vmsize,
|
||||
owner = owner,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
tmp.sort ((a, b) => {
|
||||
if (a.start < b.start)
|
||||
return -1;
|
||||
if (a.start > b.start)
|
||||
return 1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
seg_index = tmp.steal ();
|
||||
seg_index_gen = gen;
|
||||
}
|
||||
|
||||
private void invalidate_index () {
|
||||
seg_index = null;
|
||||
seg_index_gen = 0;
|
||||
}
|
||||
|
||||
private bool try_resolve (uint64 addr, out CsSigOwner? owner, out uint32 rel) {
|
||||
owner = null;
|
||||
rel = 0;
|
||||
|
||||
int n = seg_index.length;
|
||||
if (n == 0)
|
||||
return false;
|
||||
|
||||
int lo = 0;
|
||||
int hi = n - 1;
|
||||
int best = -1;
|
||||
|
||||
while (lo <= hi) {
|
||||
int mid = lo + ((hi - lo) / 2);
|
||||
if (seg_index[mid].start <= addr) {
|
||||
best = mid;
|
||||
lo = mid + 1;
|
||||
} else {
|
||||
hi = mid - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (best == -1)
|
||||
return false;
|
||||
|
||||
for (int i = best; i >= 0; i--) {
|
||||
var e = seg_index[i];
|
||||
if (e.start > addr)
|
||||
continue;
|
||||
|
||||
if (addr < e.end) {
|
||||
owner = e.owner;
|
||||
rel = (uint32) (addr - owner.image_base);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool owner_is_mapped_at (CsSigOwner owner, uint32 gen) {
|
||||
if (gen < owner.mapped_gen_start)
|
||||
return false;
|
||||
|
||||
uint32 end = owner.mapped_gen_end;
|
||||
if (end == 0)
|
||||
return true;
|
||||
|
||||
return gen < end;
|
||||
}
|
||||
}
|
||||
|
||||
public class CsSigOwner : Object {
|
||||
public Bytes uuid;
|
||||
|
||||
public uint32 a;
|
||||
public uint32 flags;
|
||||
|
||||
public uint64 load_timestamp;
|
||||
public uint64 unload_timestamp;
|
||||
|
||||
public uint32 cpu_type;
|
||||
public uint32 cpu_subtype;
|
||||
|
||||
public string path;
|
||||
public uint64 image_base;
|
||||
public uint64 image_end;
|
||||
public Gee.List<CsSigSegment> segments = new Gee.ArrayList<CsSigSegment> ();
|
||||
|
||||
public string? version;
|
||||
|
||||
public uint32 mapped_gen_start = 1;
|
||||
public uint32 mapped_gen_end = 0;
|
||||
}
|
||||
|
||||
public class CsSigSegment {
|
||||
public string name;
|
||||
public uint64 vmaddr;
|
||||
public uint64 vmsize;
|
||||
}
|
||||
|
||||
public sealed class CsSignatureParser : Object {
|
||||
private Buffer buf;
|
||||
private BufferReader r;
|
||||
|
||||
public CsSignatureParser (Bytes blob) {
|
||||
buf = new Buffer (blob, LITTLE_ENDIAN, 8);
|
||||
r = new BufferReader (buf);
|
||||
}
|
||||
|
||||
public CsSignature parse () throws Error {
|
||||
uint32 magic = r.read_uint32 ();
|
||||
uint32 version = r.read_uint32 ();
|
||||
uint32 pid = r.read_uint32 ();
|
||||
uint32 stuff = r.read_uint32 ();
|
||||
uint32 flags = r.read_uint32 ();
|
||||
uint32 owner_count = r.read_uint32 ();
|
||||
|
||||
if (magic != 0xff01ff02u)
|
||||
throw new Error.PROTOCOL ("Bad signature magic 0x%08x", magic);
|
||||
|
||||
var sig = new CsSignature ();
|
||||
sig.version = version;
|
||||
sig.pid = pid;
|
||||
sig.stuff = stuff;
|
||||
sig.flags = flags;
|
||||
|
||||
for (uint32 i = 0; i != owner_count; i++)
|
||||
sig.owners.add (parse_owner ());
|
||||
|
||||
decode_optional_data (sig);
|
||||
|
||||
return sig;
|
||||
}
|
||||
|
||||
private CsSigOwner parse_owner () throws Error {
|
||||
var o = new CsSigOwner ();
|
||||
|
||||
o.uuid = r.read_bytes (16);
|
||||
|
||||
o.a = r.read_uint32 ();
|
||||
o.flags = r.read_uint32 () & 0x7fffffff;
|
||||
|
||||
o.load_timestamp = r.read_uint64 ();
|
||||
o.unload_timestamp = r.read_uint64 ();
|
||||
|
||||
o.cpu_type = r.read_uint32 ();
|
||||
o.cpu_subtype = r.read_uint32 ();
|
||||
|
||||
uint32 nsegs = r.read_uint32 ();
|
||||
uint32 str_len = r.read_uint32 ();
|
||||
|
||||
o.path = r.read_fixed_string (str_len);
|
||||
|
||||
for (uint32 i = 0; i != nsegs; i++) {
|
||||
var s = new CsSigSegment ();
|
||||
s.name = r.read_fixed_string (16);
|
||||
s.vmaddr = r.read_uint64 ();
|
||||
s.vmsize = r.read_uint64 ();
|
||||
o.segments.add (s);
|
||||
}
|
||||
|
||||
o.segments.sort ((a, b) => {
|
||||
if (a.vmaddr < b.vmaddr)
|
||||
return -1;
|
||||
if (a.vmaddr > b.vmaddr)
|
||||
return 1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
uint64 image_base = uint64.MAX;
|
||||
uint64 image_end = 0;
|
||||
|
||||
foreach (var seg in o.segments) {
|
||||
if (seg.name != "__PAGEZERO" && seg.vmaddr < image_base)
|
||||
image_base = seg.vmaddr;
|
||||
|
||||
uint64 seg_end = seg.vmaddr + seg.vmsize;
|
||||
if (seg_end > image_end)
|
||||
image_end = seg_end;
|
||||
}
|
||||
|
||||
o.image_base = image_base;
|
||||
o.image_end = image_end;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
private void decode_optional_data (CsSignature sig) throws Error {
|
||||
if (r.available < 8)
|
||||
return;
|
||||
|
||||
size_t start = r.offset;
|
||||
|
||||
uint64 hdr = r.read_uint64 ();
|
||||
uint32 magic = (uint32) (hdr & 0xffffffffu);
|
||||
uint32 sel = (uint32) (hdr >> 32);
|
||||
|
||||
if (magic != 0x00c0ffeeu) {
|
||||
r.seek (start);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sel == 2) {
|
||||
if (r.available < 0x18)
|
||||
throw new Error.PROTOCOL ("Optional v2 truncated");
|
||||
r.skip (0x18);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sel == 3) {
|
||||
skip_optional_v3 ();
|
||||
return;
|
||||
}
|
||||
|
||||
if (sel != 4)
|
||||
return;
|
||||
|
||||
size_t v3_start = r.offset;
|
||||
|
||||
uint32 count = skip_optional_v3 ();
|
||||
|
||||
size_t table_end = v3_start + 0x38 + (size_t) count * 0x60;
|
||||
if (table_end + 4 > buf.size)
|
||||
throw new Error.PROTOCOL ("Optional v4 truncated");
|
||||
|
||||
r.seek (table_end);
|
||||
|
||||
uint32 strings_size = r.read_uint32 ();
|
||||
size_t strings_start = r.offset;
|
||||
size_t strings_end = strings_start + (size_t) strings_size;
|
||||
|
||||
if (strings_end > buf.size)
|
||||
throw new Error.PROTOCOL ("Optional v4 strings overrun");
|
||||
|
||||
r.seek (strings_start);
|
||||
|
||||
for (int i = 0; i < sig.owners.size; i++) {
|
||||
if (r.offset >= strings_end)
|
||||
throw new Error.PROTOCOL ("Optional v4 strings truncated");
|
||||
|
||||
sig.owners[i].version = r.read_string ();
|
||||
}
|
||||
|
||||
r.seek (v3_start + 0x3c + (size_t) count * 0x60 + (size_t) strings_size);
|
||||
}
|
||||
|
||||
private uint32 skip_optional_v3 () throws Error {
|
||||
if (r.available < 0x38)
|
||||
throw new Error.PROTOCOL ("Optional v3 truncated");
|
||||
|
||||
size_t base_offset = r.offset;
|
||||
|
||||
r.skip (0x30);
|
||||
r.read_uint8 ();
|
||||
r.skip (3);
|
||||
|
||||
uint32 count = r.read_uint32 ();
|
||||
|
||||
size_t total = 0x38 + (size_t) count * 0x60;
|
||||
|
||||
if (base_offset + total > buf.size)
|
||||
throw new Error.PROTOCOL ("Optional v3 overrun");
|
||||
|
||||
r.seek (base_offset + total);
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -50,8 +50,8 @@ namespace Frida.Fruity {
|
||||
if (rr.key.klass != IN)
|
||||
throw new Error.PROTOCOL ("Expected an AAAA record of class IN");
|
||||
var subreader = new DnsPacketReader (rr.data);
|
||||
var raw_address = subreader.reader.read_bytes (16);
|
||||
var address = new InetAddress.from_bytes (raw_address.get_data (), IPV6);
|
||||
unowned uint8[] raw_address = subreader.reader.read_data (16);
|
||||
var address = new InetAddress.from_bytes (raw_address, IPV6);
|
||||
return new DnsAaaaRecord () {
|
||||
key = rr.key,
|
||||
ttl = rr.ttl,
|
||||
|
||||
+787
-30
@@ -69,6 +69,20 @@ namespace Frida.Fruity {
|
||||
return result;
|
||||
}
|
||||
|
||||
public async CsSignature query_symbolicator_signature (uint pid, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSNumber.from_integer (pid))
|
||||
.append_object (new NSString (""));
|
||||
var response = yield channel.invoke ("symbolicatorSignatureForPid:trackingSelector:", args, cancellable);
|
||||
|
||||
NSData? data = response as NSData;
|
||||
if (data == null)
|
||||
throw new Error.PROTOCOL ("Malformed response");
|
||||
|
||||
var parser = new CsSignatureParser (data.bytes);
|
||||
return parser.parse ();
|
||||
}
|
||||
|
||||
private static string resolve_real_app_name (string name) {
|
||||
if (name.has_prefix ("/var/"))
|
||||
return "/private" + name;
|
||||
@@ -307,6 +321,8 @@ namespace Frida.Fruity {
|
||||
}
|
||||
|
||||
public sealed class ProcessControlService : Object, AsyncInitable {
|
||||
public signal void process_terminated (uint pid, int exit_code, int crashing_signal);
|
||||
|
||||
public HostChannelProvider channel_provider {
|
||||
get;
|
||||
construct;
|
||||
@@ -335,15 +351,746 @@ namespace Frida.Fruity {
|
||||
var connection = yield DTXConnection.obtain (channel_provider, cancellable);
|
||||
|
||||
channel = connection.make_channel ("com.apple.instruments.server.services.processcontrol");
|
||||
channel.invocation.connect (on_invocation);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async uint process_identifier_for_bundle_identifier (string bundle_id, Cancellable? cancellable = null)
|
||||
throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSString (bundle_id));
|
||||
var response = yield channel.invoke ("processIdentifierForBundleIdentifier:", args, cancellable);
|
||||
|
||||
NSNumber? pid = response as NSNumber;
|
||||
if (pid == null)
|
||||
throw new Error.PROTOCOL ("Malformed response");
|
||||
|
||||
return (uint) pid.integer;
|
||||
}
|
||||
|
||||
public async bool is_pid_debuggable (uint pid, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSNumber.from_integer (pid));
|
||||
var response = yield channel.invoke ("isPidDebuggable:", args, cancellable);
|
||||
|
||||
NSNumber? is_debuggable = response as NSNumber;
|
||||
if (is_debuggable == null)
|
||||
throw new Error.PROTOCOL ("Malformed response");
|
||||
|
||||
return is_debuggable.boolean;
|
||||
}
|
||||
|
||||
public async void start_observing_pid (uint pid, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSNumber.from_integer (pid));
|
||||
yield channel.invoke ("startObservingPid:", args, cancellable);
|
||||
}
|
||||
|
||||
public async void stop_observing_pid (uint pid, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSNumber.from_integer (pid));
|
||||
yield channel.invoke ("stopObservingPid:", args, cancellable);
|
||||
}
|
||||
|
||||
public async uint launch (string bundle_id, LaunchOptions? options = null, Cancellable? cancellable = null)
|
||||
throws Error, IOError {
|
||||
var opts = options;
|
||||
if (opts == null)
|
||||
opts = new LaunchOptions ();
|
||||
|
||||
var args_val = new NSArray ();
|
||||
foreach (unowned string arg in opts.arguments)
|
||||
args_val.add_object (new NSString (arg));
|
||||
|
||||
var env_val = new NSDictionary ();
|
||||
foreach (unowned string entry in opts.environment) {
|
||||
string[] tokens = entry.split ("=", 2);
|
||||
if (tokens.length != 2)
|
||||
throw new Error.INVALID_ARGUMENT ("Invalid environment variable entry: %s", entry);
|
||||
env_val.set_value (tokens[0], new NSString (tokens[1]));
|
||||
}
|
||||
|
||||
var opts_val = new NSDictionary ();
|
||||
opts_val.set_value ("StartSuspendedKey", new NSNumber.from_boolean (opts.launch_mode == SUSPENDED));
|
||||
opts_val.set_value ("KillExisting", new NSNumber.from_boolean (opts.existing_instance_policy == KILL));
|
||||
// TODO: Support CaptureOutput + iODestinationKey
|
||||
|
||||
var dtx_args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSString (""))
|
||||
.append_object (new NSString (bundle_id))
|
||||
.append_object (env_val)
|
||||
.append_object (args_val)
|
||||
.append_object (opts_val);
|
||||
var response = yield channel.invoke (
|
||||
"launchSuspendedProcessWithDevicePath:bundleIdentifier:environment:arguments:options:",
|
||||
dtx_args, cancellable);
|
||||
|
||||
NSNumber? pid = response as NSNumber;
|
||||
if (pid == null)
|
||||
throw new Error.PROTOCOL ("Malformed response");
|
||||
|
||||
return (uint) pid.integer;
|
||||
}
|
||||
|
||||
public async void kill (uint pid, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSNumber.from_integer (pid));
|
||||
yield channel.invoke ("killPid:", args, cancellable);
|
||||
}
|
||||
|
||||
public async void send_signal (uint pid, uint sig, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (new NSNumber.from_integer (sig))
|
||||
.append_object (new NSNumber.from_integer (pid));
|
||||
yield channel.invoke ("sendSignal:toPid:", args, cancellable);
|
||||
}
|
||||
|
||||
private void on_invocation (string method_name, DTXArgumentList args, DTXMessageTransportFlags transport_flags) {
|
||||
if (method_name == "processWithPID:terminatedWithExitCode:orCrashingSignal:") {
|
||||
if (args.elements.length != 3)
|
||||
return;
|
||||
|
||||
uint pid;
|
||||
if (!try_parse_int (args.elements[0], out pid))
|
||||
return;
|
||||
|
||||
int exit_code = -1;
|
||||
int crashing_signal = -1;
|
||||
if (!try_parse_int (args.elements[1], out exit_code)) {
|
||||
if (!try_parse_int (args.elements[2], out crashing_signal))
|
||||
return;
|
||||
}
|
||||
|
||||
process_terminated (pid, exit_code, crashing_signal);
|
||||
}
|
||||
}
|
||||
|
||||
private bool try_parse_int (Value v, out int i) {
|
||||
i = -1;
|
||||
if (!v.holds (typeof (NSNumber)))
|
||||
return false;
|
||||
i = (int) ((NSNumber) v.get_object ()).integer;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class LaunchOptions : Object {
|
||||
public string[] arguments {
|
||||
get;
|
||||
set;
|
||||
default = {};
|
||||
}
|
||||
|
||||
public string[] environment {
|
||||
get;
|
||||
set;
|
||||
default = {};
|
||||
}
|
||||
|
||||
public LaunchMode launch_mode {
|
||||
get;
|
||||
set;
|
||||
default = LaunchMode.NORMAL;
|
||||
}
|
||||
|
||||
public ExistingInstancePolicy existing_instance_policy {
|
||||
get;
|
||||
set;
|
||||
default = ExistingInstancePolicy.KEEP;
|
||||
}
|
||||
}
|
||||
|
||||
public enum LaunchMode {
|
||||
NORMAL,
|
||||
SUSPENDED
|
||||
}
|
||||
|
||||
public enum ExistingInstancePolicy {
|
||||
KEEP,
|
||||
KILL
|
||||
}
|
||||
|
||||
public sealed class CoreProfileService : Object, AsyncInitable {
|
||||
public signal void stackshot (Bytes blob);
|
||||
public signal void kperfdata (Bytes blob);
|
||||
|
||||
public HostChannelProvider channel_provider {
|
||||
get;
|
||||
construct;
|
||||
}
|
||||
|
||||
private DTXChannel channel;
|
||||
|
||||
private CoreProfileService (HostChannelProvider channel_provider) {
|
||||
Object (channel_provider: channel_provider);
|
||||
}
|
||||
|
||||
public static async CoreProfileService open (HostChannelProvider channel_provider, Cancellable? cancellable = null)
|
||||
throws Error, IOError {
|
||||
var service = new CoreProfileService (channel_provider);
|
||||
|
||||
try {
|
||||
yield service.init_async (Priority.DEFAULT, cancellable);
|
||||
} catch (GLib.Error e) {
|
||||
throw_api_error (e);
|
||||
}
|
||||
|
||||
return service;
|
||||
}
|
||||
|
||||
private async bool init_async (int io_priority, Cancellable? cancellable) throws Error, IOError {
|
||||
var connection = yield DTXConnection.obtain (channel_provider, cancellable);
|
||||
|
||||
channel = connection.make_channel ("com.apple.instruments.server.services.coreprofilesessiontap");
|
||||
channel.notification.connect (on_notification);
|
||||
channel.data.connect (on_data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async void set_config (KtraceConfig config, Cancellable? cancellable = null) throws Error, IOError {
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (config.encode ());
|
||||
yield channel.invoke ("setConfig:", args, cancellable);
|
||||
}
|
||||
|
||||
public async void start (Cancellable? cancellable = null) throws Error, IOError {
|
||||
yield channel.invoke ("start", null, cancellable);
|
||||
}
|
||||
|
||||
public async void stop (Cancellable? cancellable = null) throws Error, IOError {
|
||||
yield channel.invoke ("stop", null, cancellable);
|
||||
}
|
||||
|
||||
private void on_notification (NSObject obj) {
|
||||
// printerr ("on_notification(): %s\n", obj.to_string ());
|
||||
}
|
||||
|
||||
private void on_data (Bytes blob) {
|
||||
if (Kcdata.is_stackshot (blob))
|
||||
stackshot (blob);
|
||||
else
|
||||
kperfdata (blob);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class TapConfig : Object {
|
||||
public TapRecordingMode buffer_mode {
|
||||
get {
|
||||
return _buffer_mode;
|
||||
}
|
||||
set {
|
||||
_buffer_mode = value;
|
||||
if (value != POLLED)
|
||||
_polling_interval = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public uint64 polling_interval {
|
||||
get;
|
||||
set;
|
||||
default = 500;
|
||||
}
|
||||
|
||||
public uint64 window_size {
|
||||
get;
|
||||
set;
|
||||
default = 0;
|
||||
}
|
||||
|
||||
public bool spool_to_disk_when_possible {
|
||||
get;
|
||||
set;
|
||||
default = false;
|
||||
}
|
||||
|
||||
public bool discard_heartbeats_when_possible {
|
||||
get;
|
||||
set;
|
||||
default = false;
|
||||
}
|
||||
|
||||
private TapRecordingMode _buffer_mode = POLLED;
|
||||
|
||||
internal virtual NSDictionary encode () {
|
||||
var dict = new NSDictionary ();
|
||||
|
||||
dict.set_value ("bm", new NSNumber.from_integer (_buffer_mode));
|
||||
|
||||
if (_polling_interval != 0)
|
||||
dict.set_value ("ur", new NSNumber.from_integer ((int64) _polling_interval));
|
||||
|
||||
if (_window_size != 0)
|
||||
dict.set_value ("ws", new NSNumber.from_integer ((int64) _window_size));
|
||||
|
||||
if (_spool_to_disk_when_possible)
|
||||
dict.set_value ("s2d", new NSNumber.from_boolean (true));
|
||||
|
||||
if (_discard_heartbeats_when_possible)
|
||||
dict.set_value ("nohb", new NSNumber.from_boolean (true));
|
||||
|
||||
return dict;
|
||||
}
|
||||
}
|
||||
|
||||
public enum TapRecordingMode {
|
||||
POLLED,
|
||||
IMMEDIATE,
|
||||
WINDOWED,
|
||||
}
|
||||
|
||||
public sealed class KtraceConfig : TapConfig {
|
||||
public bool can_use_raw_ktrace_file {
|
||||
get;
|
||||
set;
|
||||
default = false;
|
||||
}
|
||||
|
||||
public KtraceRecordingPriority recording_priority {
|
||||
get;
|
||||
set;
|
||||
default = FOREGROUND;
|
||||
}
|
||||
|
||||
public uint collection_interval {
|
||||
get;
|
||||
set;
|
||||
default = 0;
|
||||
}
|
||||
|
||||
public uint64 buffer_size_override {
|
||||
get;
|
||||
set;
|
||||
default = 0;
|
||||
}
|
||||
|
||||
public uint64 buffer_size_override_clamping {
|
||||
get;
|
||||
set;
|
||||
default = 0;
|
||||
}
|
||||
|
||||
public NSDictionary? provider_options {
|
||||
get;
|
||||
set;
|
||||
default = null;
|
||||
}
|
||||
|
||||
private Gee.List<KtraceTapTriggerConfig> trigger_configs = new Gee.ArrayList<KtraceTapTriggerConfig> ();
|
||||
|
||||
public void add_trigger_config (KtraceTapTriggerConfig tc) {
|
||||
trigger_configs.add (tc);
|
||||
}
|
||||
|
||||
internal override NSDictionary encode () {
|
||||
var dict = base.encode ();
|
||||
|
||||
if (can_use_raw_ktrace_file)
|
||||
dict.set_value ("curkt", new NSNumber.from_boolean (true));
|
||||
|
||||
dict.set_value ("rp", new NSNumber.from_integer (_recording_priority));
|
||||
|
||||
if (_collection_interval != 0)
|
||||
dict.set_value ("kco", new NSNumber.from_integer (_collection_interval));
|
||||
|
||||
if (_buffer_size_override != 0)
|
||||
dict.set_value ("bso", new NSNumber.from_integer ((int64) _buffer_size_override));
|
||||
|
||||
if (_buffer_size_override_clamping != 0)
|
||||
dict.set_value ("bsoc", new NSNumber.from_integer ((int64) _buffer_size_override_clamping));
|
||||
|
||||
if (_provider_options != null)
|
||||
dict.set_value ("po", _provider_options);
|
||||
|
||||
var tc = new NSArray ();
|
||||
foreach (var cfg in trigger_configs)
|
||||
tc.add_object (cfg.encode ());
|
||||
dict.set_value ("tc", tc);
|
||||
|
||||
return dict;
|
||||
}
|
||||
}
|
||||
|
||||
public enum KtraceRecordingPriority {
|
||||
BACKGROUND = 10,
|
||||
FOREGROUND = 100,
|
||||
}
|
||||
|
||||
public sealed class KtraceTapTriggerConfig : Object {
|
||||
public KtraceTapTriggerKind kind {
|
||||
get;
|
||||
construct;
|
||||
}
|
||||
|
||||
public KdebugCodeSet? filter {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public bool is_all_processes {
|
||||
get {
|
||||
return included_pids == null;
|
||||
}
|
||||
set {
|
||||
if (value)
|
||||
included_pids = null;
|
||||
else
|
||||
ensure_included_pids ();
|
||||
}
|
||||
}
|
||||
|
||||
public uint callstack_frame_depth {
|
||||
get;
|
||||
set;
|
||||
default = 0;
|
||||
}
|
||||
|
||||
public KtraceTapActions actions {
|
||||
get;
|
||||
default = new KtraceTapActions ();
|
||||
}
|
||||
|
||||
private Gee.Set<uint>? included_pids = null;
|
||||
|
||||
public KtraceTapTriggerConfig (KtraceTapTriggerKind kind) {
|
||||
Object (kind: kind);
|
||||
}
|
||||
|
||||
public void include_pid (uint pid) {
|
||||
ensure_included_pids ().add (pid);
|
||||
}
|
||||
|
||||
private unowned Gee.Set<uint> ensure_included_pids () {
|
||||
if (included_pids == null)
|
||||
included_pids = new Gee.HashSet<uint> ();
|
||||
return included_pids;
|
||||
}
|
||||
|
||||
internal NSDictionary encode () {
|
||||
var dict = new NSDictionary ();
|
||||
|
||||
dict.set_value ("uuid", new NSString (Uuid.string_random ().up ()));
|
||||
|
||||
dict.set_value ("tk", new NSNumber.from_integer (_kind));
|
||||
|
||||
if (_filter != null) {
|
||||
dict.set_value ("kdf", new NSString (_filter.legacy_xml));
|
||||
dict.set_value ("kdf2", _filter.kdebug_codes);
|
||||
}
|
||||
|
||||
if (included_pids != null) {
|
||||
var pf = new NSArray ();
|
||||
foreach (var pid in included_pids)
|
||||
pf.add_object (new NSNumber.from_integer (pid));
|
||||
dict.set_value ("pf", pf);
|
||||
}
|
||||
|
||||
if (_callstack_frame_depth != 0)
|
||||
dict.set_value ("csd", new NSNumber.from_integer (_callstack_frame_depth));
|
||||
|
||||
var actions = _actions.items;
|
||||
if (!actions.is_empty) {
|
||||
var arr = new NSArray ();
|
||||
foreach (var action in actions)
|
||||
arr.add_object (action.encode ());
|
||||
dict.set_value ("ta", arr);
|
||||
}
|
||||
|
||||
return dict;
|
||||
}
|
||||
}
|
||||
|
||||
public enum KtraceTapTriggerKind {
|
||||
TIME = 1,
|
||||
PMI,
|
||||
KDEBUG,
|
||||
}
|
||||
|
||||
public sealed class KtraceTapActions : Object {
|
||||
internal Gee.List<KtraceTapAction> items = new Gee.ArrayList<KtraceTapAction> ();
|
||||
|
||||
public unowned KtraceTapActions add (KtraceTapAction action) {
|
||||
items.add (action);
|
||||
return this;
|
||||
}
|
||||
|
||||
public unowned KtraceTapActions add_stack_collection (KtraceTapStackCollectionMode mode) {
|
||||
items.add (new KtraceTapStackCollectionAction (mode));
|
||||
return this;
|
||||
}
|
||||
|
||||
public unowned KtraceTapActions add_baseline () {
|
||||
items.add (new KtraceTapAction0 ());
|
||||
items.add (new KtraceTapAction2 ());
|
||||
return this;
|
||||
}
|
||||
|
||||
public unowned KtraceTapActions add_pmc_event (string event_name, string counter_name, uint32 extra = 0) {
|
||||
items.add (new KtraceTapAddPmcEventAction (event_name, counter_name, extra));
|
||||
return this;
|
||||
}
|
||||
|
||||
public unowned KtraceTapActions add_kdebug_codeset (KdebugCodeSet codeset) {
|
||||
items.add (new KtraceTapAddKdebugCodeSetAction (codeset.kdebug_codes));
|
||||
return this;
|
||||
}
|
||||
|
||||
public unowned KtraceTapActions add_kdebug_legacy_backtrace_filter () {
|
||||
items.add (new KtraceTapKdebugBacktraceFilterAction ());
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public enum KtraceTapActionKind {
|
||||
ACTION0,
|
||||
STACK_COLLECTION,
|
||||
ACTION2,
|
||||
KDEBUG_BACKTRACE_FILTER,
|
||||
ADD_PMC_EVENT,
|
||||
ADD_KDEBUG_CODESET,
|
||||
}
|
||||
|
||||
public abstract class KtraceTapAction : Object {
|
||||
public abstract KtraceTapActionKind kind {
|
||||
get;
|
||||
}
|
||||
|
||||
internal abstract NSArray encode ();
|
||||
}
|
||||
|
||||
public sealed class KtraceTapAction0 : KtraceTapAction {
|
||||
public override KtraceTapActionKind kind {
|
||||
get {
|
||||
return ACTION0;
|
||||
}
|
||||
}
|
||||
|
||||
internal override NSArray encode () {
|
||||
var a = new NSArray ();
|
||||
a.add_object (new NSNumber.from_integer (kind));
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class KtraceTapAction2 : KtraceTapAction {
|
||||
public override KtraceTapActionKind kind {
|
||||
get {
|
||||
return ACTION2;
|
||||
}
|
||||
}
|
||||
|
||||
internal override NSArray encode () {
|
||||
var a = new NSArray ();
|
||||
a.add_object (new NSNumber.from_integer (kind));
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class KtraceTapStackCollectionAction : KtraceTapAction {
|
||||
public KtraceTapStackCollectionMode mode {
|
||||
get {
|
||||
return _mode;
|
||||
}
|
||||
set {
|
||||
_mode = value;
|
||||
}
|
||||
}
|
||||
|
||||
private KtraceTapStackCollectionMode _mode;
|
||||
|
||||
public KtraceTapStackCollectionAction (KtraceTapStackCollectionMode mode) {
|
||||
_mode = mode;
|
||||
}
|
||||
|
||||
public override KtraceTapActionKind kind {
|
||||
get {
|
||||
return STACK_COLLECTION;
|
||||
}
|
||||
}
|
||||
|
||||
internal override NSArray encode () {
|
||||
var a = new NSArray ();
|
||||
a.add_object (new NSNumber.from_integer (kind));
|
||||
a.add_object (new NSNumber.from_boolean ((_mode & KtraceTapStackCollectionMode.USER) != 0));
|
||||
a.add_object (new NSNumber.from_boolean ((_mode & KtraceTapStackCollectionMode.KERNEL) != 0));
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum KtraceTapStackCollectionMode {
|
||||
NONE = 0,
|
||||
USER = (1 << 0),
|
||||
KERNEL = (1 << 1),
|
||||
}
|
||||
|
||||
public sealed class KtraceTapKdebugBacktraceFilterAction : KtraceTapAction {
|
||||
public override KtraceTapActionKind kind {
|
||||
get {
|
||||
return KDEBUG_BACKTRACE_FILTER;
|
||||
}
|
||||
}
|
||||
|
||||
internal override NSArray encode () {
|
||||
var a = new NSArray ();
|
||||
a.add_object (new NSNumber.from_integer (kind));
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class KtraceTapAddPmcEventAction : KtraceTapAction {
|
||||
public string event_name {
|
||||
get {
|
||||
return _event_name;
|
||||
}
|
||||
set {
|
||||
_event_name = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string counter_name {
|
||||
get {
|
||||
return _counter_name;
|
||||
}
|
||||
set {
|
||||
_counter_name = value;
|
||||
}
|
||||
}
|
||||
|
||||
public uint32 extra {
|
||||
get {
|
||||
return _extra;
|
||||
}
|
||||
set {
|
||||
_extra = value;
|
||||
}
|
||||
}
|
||||
|
||||
private string _event_name;
|
||||
private string _counter_name;
|
||||
private uint32 _extra;
|
||||
|
||||
public KtraceTapAddPmcEventAction (string event_name, string counter_name, uint32 extra = 0) {
|
||||
_event_name = event_name;
|
||||
_counter_name = counter_name;
|
||||
_extra = extra;
|
||||
}
|
||||
|
||||
public override KtraceTapActionKind kind {
|
||||
get {
|
||||
return ADD_PMC_EVENT;
|
||||
}
|
||||
}
|
||||
|
||||
internal override NSArray encode () {
|
||||
var a = new NSArray ();
|
||||
a.add_object (new NSNumber.from_integer (kind));
|
||||
a.add_object (new NSString (_event_name));
|
||||
a.add_object (new NSString (_counter_name));
|
||||
a.add_object (new NSNumber.from_integer (_extra));
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class KtraceTapAddKdebugCodeSetAction : KtraceTapAction {
|
||||
public NSSet codes {
|
||||
get {
|
||||
return _codes;
|
||||
}
|
||||
set {
|
||||
_codes = value;
|
||||
}
|
||||
}
|
||||
|
||||
private NSSet _codes;
|
||||
|
||||
public KtraceTapAddKdebugCodeSetAction (NSSet codes) {
|
||||
_codes = codes;
|
||||
}
|
||||
|
||||
public override KtraceTapActionKind kind {
|
||||
get {
|
||||
return ADD_KDEBUG_CODESET;
|
||||
}
|
||||
}
|
||||
|
||||
internal override NSArray encode () {
|
||||
var a = new NSArray ();
|
||||
a.add_object (new NSNumber.from_integer (kind));
|
||||
a.add_object (_codes);
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class KdebugCodeSet : Object {
|
||||
public string legacy_xml {
|
||||
owned get {
|
||||
var xml = new StringBuilder.sized (256);
|
||||
xml.append ("<events>");
|
||||
|
||||
foreach (var c in codes) {
|
||||
var kc = KdebugCode (c);
|
||||
|
||||
xml.append ("<event type=\"KDebug\" class=\"");
|
||||
|
||||
var klass = kc.klass;
|
||||
if (klass == ANY)
|
||||
xml.append_c ('*');
|
||||
else
|
||||
xml.append_printf ("%u", klass);
|
||||
|
||||
xml.append ("\" subclass=\"");
|
||||
|
||||
var subclass = kc.subclass;
|
||||
if (subclass == KDEBUG_SUBCLASS_ANY)
|
||||
xml.append_c ('*');
|
||||
else
|
||||
xml.append_printf ("%u", subclass);
|
||||
|
||||
xml.append ("\" code=\"");
|
||||
|
||||
uint code = kc.code;
|
||||
if (code == KDEBUG_CODE_ANY)
|
||||
xml.append_c ('*');
|
||||
else
|
||||
xml.append_printf ("%u", code);
|
||||
|
||||
xml.append ("\"/>");
|
||||
}
|
||||
|
||||
xml.append ("</events>");
|
||||
|
||||
return xml.str;
|
||||
}
|
||||
}
|
||||
|
||||
public NSSet kdebug_codes {
|
||||
get {
|
||||
if (_kdebug_codes == null) {
|
||||
_kdebug_codes = new NSSet ();
|
||||
foreach (var c in codes)
|
||||
_kdebug_codes.add_object (new NSNumber.from_integer (c));
|
||||
}
|
||||
return _kdebug_codes;
|
||||
}
|
||||
}
|
||||
|
||||
private Gee.Set<uint> codes = new Gee.HashSet<uint> ();
|
||||
private NSSet _kdebug_codes = null;
|
||||
|
||||
public KdebugCodeSet copy () {
|
||||
var s = new KdebugCodeSet ();
|
||||
s.codes.add_all (codes);
|
||||
s._kdebug_codes = _kdebug_codes;
|
||||
return s;
|
||||
}
|
||||
|
||||
public unowned KdebugCodeSet add (KdebugCode code) {
|
||||
codes.add (code.raw);
|
||||
_kdebug_codes = null;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class DTXConnection : Object, DTXTransport {
|
||||
@@ -373,7 +1120,6 @@ namespace Frida.Fruity {
|
||||
|
||||
private Gee.HashMap<uint32, Gee.ArrayList<Fragment>> fragments = new Gee.HashMap<uint32, Gee.ArrayList<Fragment>> ();
|
||||
private uint32 next_fragment_identifier = 1;
|
||||
private size_t total_buffered = 0;
|
||||
private Gee.ArrayQueue<Bytes> pending_writes = new Gee.ArrayQueue<Bytes> ();
|
||||
|
||||
private DTXControlChannel control_channel;
|
||||
@@ -381,8 +1127,6 @@ namespace Frida.Fruity {
|
||||
private int32 next_channel_code = 1;
|
||||
|
||||
private const uint32 DTX_FRAGMENT_MAGIC = 0x1f3d5b79U;
|
||||
private const uint MAX_BUFFERED_COUNT = 100;
|
||||
private const size_t MAX_BUFFERED_SIZE = 30 * 1024 * 1024;
|
||||
private const size_t MAX_MESSAGE_SIZE = 128 * 1024 * 1024;
|
||||
private const size_t MAX_FRAGMENT_SIZE = 128 * 1024;
|
||||
private const string REMOTESERVER_ENDPOINT_17PLUS = "lockdown:com.apple.instruments.dtservicehub";
|
||||
@@ -566,8 +1310,6 @@ namespace Frida.Fruity {
|
||||
|
||||
Gee.ArrayList<Fragment> entries = fragments[fragment.identifier];
|
||||
if (entries == null) {
|
||||
if (fragments.size == MAX_BUFFERED_COUNT)
|
||||
throw new Error.PROTOCOL ("Total buffered count exceeds maximum");
|
||||
if (fragment.index != 0)
|
||||
throw new Error.PROTOCOL ("Expected first fragment to have index of zero");
|
||||
fragment.data_size = 0;
|
||||
@@ -585,10 +1327,6 @@ namespace Frida.Fruity {
|
||||
first_fragment.data_size += (uint32) size;
|
||||
if (first_fragment.data_size > MAX_MESSAGE_SIZE)
|
||||
throw new Error.PROTOCOL ("Message size exceeds maximum");
|
||||
|
||||
total_buffered += size;
|
||||
if (total_buffered > MAX_BUFFERED_SIZE)
|
||||
throw new Error.PROTOCOL ("Total buffered size exceeds maximum");
|
||||
}
|
||||
|
||||
if (entries.size == fragment.count) {
|
||||
@@ -614,7 +1352,6 @@ namespace Frida.Fruity {
|
||||
}
|
||||
|
||||
fragments.unset (fragment.identifier);
|
||||
total_buffered -= message.length;
|
||||
|
||||
process_message (message, first_fragment);
|
||||
}
|
||||
@@ -714,33 +1451,37 @@ namespace Frida.Fruity {
|
||||
message.payload_data = raw_message[payload_start_offset:payload_end_offset];
|
||||
|
||||
int32 channel_code = message.channel_code;
|
||||
bool is_notification = false;
|
||||
if (message.type == INVOKE) {
|
||||
if ((message.conversation_index % 2) == 0)
|
||||
channel_code = -channel_code;
|
||||
} else if (message.type == RESULT && channel_code < 0) {
|
||||
channel_code = -channel_code;
|
||||
is_notification = true;
|
||||
}
|
||||
|
||||
bool is_notification = message.conversation_index == 0;
|
||||
|
||||
var channel = channels[channel_code];
|
||||
if (channel == null)
|
||||
return;
|
||||
|
||||
switch (message.type) {
|
||||
case INVOKE:
|
||||
channel.handle_invoke (message);
|
||||
case DISPATCH:
|
||||
channel.handle_dispatch (message);
|
||||
break;
|
||||
case OK:
|
||||
case RESULT:
|
||||
case OBJECT:
|
||||
case ERROR:
|
||||
if (is_notification)
|
||||
channel.handle_notification (message);
|
||||
else
|
||||
channel.handle_response (message);
|
||||
break;
|
||||
case DATA:
|
||||
channel.handle_data (message);
|
||||
break;
|
||||
case BARRIER:
|
||||
channel.handle_barrier (message);
|
||||
break;
|
||||
case PRIMITIVE:
|
||||
case COMPRESSED:
|
||||
case PROXIED_MESSAGE:
|
||||
throw new Error.PROTOCOL ("Unsupported message type: %s", message.type.to_string ());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -855,7 +1596,8 @@ namespace Frida.Fruity {
|
||||
public void notify_of_published_capabilities () throws Error {
|
||||
var capabilities = new NSDictionary ();
|
||||
capabilities.set_value ("com.apple.private.DTXConnection", new NSNumber.from_integer (1));
|
||||
capabilities.set_value ("com.apple.private.DTXBlockCompression", new NSNumber.from_integer (2));
|
||||
capabilities.set_value ("com.apple.instruments.client.processcontrol.capability.terminationCallback",
|
||||
new NSNumber.from_integer (1));
|
||||
|
||||
var args = new DTXArgumentListBuilder ()
|
||||
.append_object (capabilities);
|
||||
@@ -879,6 +1621,7 @@ namespace Frida.Fruity {
|
||||
public class DTXChannel : Object {
|
||||
public signal void invocation (string method_name, DTXArgumentList args, DTXMessageTransportFlags transport_flags);
|
||||
public signal void notification (NSObject obj);
|
||||
public signal void data (Bytes blob);
|
||||
public signal void barrier ();
|
||||
|
||||
public int32 code {
|
||||
@@ -935,7 +1678,7 @@ namespace Frida.Fruity {
|
||||
check_open ();
|
||||
|
||||
var message = DTXMessage ();
|
||||
message.type = INVOKE;
|
||||
message.type = DISPATCH;
|
||||
message.channel_code = code;
|
||||
message.transport_flags = EXPECTS_REPLY;
|
||||
|
||||
@@ -965,7 +1708,7 @@ namespace Frida.Fruity {
|
||||
check_open ();
|
||||
|
||||
var message = DTXMessage ();
|
||||
message.type = INVOKE;
|
||||
message.type = DISPATCH;
|
||||
message.channel_code = code;
|
||||
message.transport_flags = NONE;
|
||||
|
||||
@@ -982,10 +1725,10 @@ namespace Frida.Fruity {
|
||||
transport.send_message (message, out identifier);
|
||||
}
|
||||
|
||||
internal void handle_invoke (DTXMessage message) throws Error {
|
||||
internal void handle_dispatch (DTXMessage message) throws Error {
|
||||
NSString? method_name = NSKeyedArchive.decode (message.payload_data) as NSString;
|
||||
if (method_name == null)
|
||||
throw new Error.PROTOCOL ("Malformed invocation payload");
|
||||
throw new Error.PROTOCOL ("Malformed dispatch payload");
|
||||
|
||||
var args = DTXArgumentList.parse (message.aux_data);
|
||||
|
||||
@@ -999,7 +1742,7 @@ namespace Frida.Fruity {
|
||||
case OK:
|
||||
request.resolve (null);
|
||||
break;
|
||||
case RESULT:
|
||||
case OBJECT:
|
||||
request.resolve (NSKeyedArchive.decode (message.payload_data));
|
||||
break;
|
||||
case ERROR: {
|
||||
@@ -1037,6 +1780,10 @@ namespace Frida.Fruity {
|
||||
notification (payload);
|
||||
}
|
||||
|
||||
internal void handle_data (DTXMessage message) throws Error {
|
||||
data (new Bytes (message.payload_data));
|
||||
}
|
||||
|
||||
internal void handle_barrier (DTXMessage message) throws Error {
|
||||
barrier ();
|
||||
}
|
||||
@@ -1053,11 +1800,15 @@ namespace Frida.Fruity {
|
||||
}
|
||||
|
||||
public enum DTXMessageType {
|
||||
OK = 0,
|
||||
INVOKE = 2,
|
||||
RESULT = 3,
|
||||
ERROR = 4,
|
||||
BARRIER = 5
|
||||
OK,
|
||||
DATA,
|
||||
DISPATCH,
|
||||
OBJECT,
|
||||
ERROR,
|
||||
BARRIER,
|
||||
PRIMITIVE,
|
||||
COMPRESSED,
|
||||
PROXIED_MESSAGE,
|
||||
}
|
||||
|
||||
public struct DTXMessage {
|
||||
@@ -1111,6 +1862,12 @@ namespace Frida.Fruity {
|
||||
}
|
||||
case BUFFER: {
|
||||
size_t size = reader.read_uint32 ();
|
||||
if (size == 0) {
|
||||
var gval = Value (typeof (NSObject));
|
||||
elements += (owned) gval;
|
||||
break;
|
||||
}
|
||||
|
||||
unowned uint8[] buf = reader.read_byte_array (size);
|
||||
|
||||
NSObject? obj = NSKeyedArchive.decode (buf);
|
||||
|
||||
+1177
-33
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,558 @@
|
||||
[CCode (gir_namespace = "FridaFruity", gir_version = "1.0")]
|
||||
namespace Frida.Fruity.Kcdata {
|
||||
public struct ItemHeader {
|
||||
public ItemType type;
|
||||
public uint32 size;
|
||||
public uint64 flags;
|
||||
}
|
||||
|
||||
public enum ItemType {
|
||||
INVALID = 0x000u,
|
||||
STRING_DESC = 0x001u,
|
||||
UINT32_DESC = 0x002u,
|
||||
UINT64_DESC = 0x003u,
|
||||
INT32_DESC = 0x004u,
|
||||
INT64_DESC = 0x005u,
|
||||
BINDATA_DESC = 0x006u,
|
||||
|
||||
ARRAY = 0x011u,
|
||||
TYPEDEFINTION = 0x012u,
|
||||
CONTAINER_BEGIN = 0x013u,
|
||||
CONTAINER_END = 0x014u,
|
||||
|
||||
ARRAY_PAD0 = 0x020u,
|
||||
ARRAY_PAD1 = 0x021u,
|
||||
ARRAY_PAD2 = 0x022u,
|
||||
ARRAY_PAD3 = 0x023u,
|
||||
ARRAY_PAD4 = 0x024u,
|
||||
ARRAY_PAD5 = 0x025u,
|
||||
ARRAY_PAD6 = 0x026u,
|
||||
ARRAY_PAD7 = 0x027u,
|
||||
ARRAY_PAD8 = 0x028u,
|
||||
ARRAY_PAD9 = 0x029u,
|
||||
ARRAY_PADa = 0x02au,
|
||||
ARRAY_PADb = 0x02bu,
|
||||
ARRAY_PADc = 0x02cu,
|
||||
ARRAY_PADd = 0x02du,
|
||||
ARRAY_PADe = 0x02eu,
|
||||
ARRAY_PADf = 0x02fu,
|
||||
|
||||
LIBRARY_LOADINFO = 0x030u,
|
||||
LIBRARY_LOADINFO64 = 0x031u,
|
||||
TIMEBASE = 0x032u,
|
||||
MACH_ABSOLUTE_TIME = 0x033u,
|
||||
TIMEVAL = 0x034u,
|
||||
USECS_SINCE_EPOCH = 0x035u,
|
||||
PID = 0x036u,
|
||||
PROCNAME = 0x037u,
|
||||
NESTED_KCDATA = 0x038u,
|
||||
LIBRARY_AOTINFO = 0x039u,
|
||||
|
||||
TASK_CRASHINFO_EXTMODINFO = 0x801u,
|
||||
TASK_CRASHINFO_BSDINFOWITHUNIQID = 0x802u,
|
||||
TASK_CRASHINFO_TASKDYLD_INFO = 0x803u,
|
||||
TASK_CRASHINFO_UUID = 0x804u,
|
||||
TASK_CRASHINFO_PID = 0x805u,
|
||||
TASK_CRASHINFO_PPID = 0x806u,
|
||||
TASK_CRASHINFO_RUSAGE = 0x807u,
|
||||
TASK_CRASHINFO_RUSAGE_INFO = 0x808u,
|
||||
TASK_CRASHINFO_PROC_NAME = 0x809u,
|
||||
TASK_CRASHINFO_PROC_STARTTIME = 0x80Bu,
|
||||
TASK_CRASHINFO_USERSTACK = 0x80Cu,
|
||||
TASK_CRASHINFO_ARGSLEN = 0x80Du,
|
||||
TASK_CRASHINFO_EXCEPTION_CODES = 0x80Eu,
|
||||
TASK_CRASHINFO_PROC_PATH = 0x80Fu,
|
||||
TASK_CRASHINFO_PROC_CSFLAGS = 0x810u,
|
||||
TASK_CRASHINFO_PROC_STATUS = 0x811u,
|
||||
TASK_CRASHINFO_UID = 0x812u,
|
||||
TASK_CRASHINFO_GID = 0x813u,
|
||||
TASK_CRASHINFO_PROC_ARGC = 0x814u,
|
||||
TASK_CRASHINFO_PROC_FLAGS = 0x815u,
|
||||
TASK_CRASHINFO_CPUTYPE = 0x816u,
|
||||
TASK_CRASHINFO_WORKQUEUEINFO = 0x817u,
|
||||
TASK_CRASHINFO_RESPONSIBLE_PID = 0x818u,
|
||||
TASK_CRASHINFO_DIRTY_FLAGS = 0x819u,
|
||||
TASK_CRASHINFO_CRASHED_THREADID = 0x81Au,
|
||||
TASK_CRASHINFO_COALITION_ID = 0x81Bu,
|
||||
TASK_CRASHINFO_UDATA_PTRS = 0x81Cu,
|
||||
TASK_CRASHINFO_MEMORY_LIMIT = 0x81Du,
|
||||
TASK_CRASHINFO_LEDGER_INTERNAL = 0x81Eu,
|
||||
TASK_CRASHINFO_LEDGER_INTERNAL_COMPRESSED = 0x81Fu,
|
||||
TASK_CRASHINFO_LEDGER_IOKIT_MAPPED = 0x820u,
|
||||
TASK_CRASHINFO_LEDGER_ALTERNATE_ACCOUNTING = 0x821u,
|
||||
TASK_CRASHINFO_LEDGER_ALTERNATE_ACCOUNTING_COMPRESSED = 0x822u,
|
||||
TASK_CRASHINFO_LEDGER_PURGEABLE_NONVOLATILE = 0x823u,
|
||||
TASK_CRASHINFO_LEDGER_PURGEABLE_NONVOLATILE_COMPRESSED = 0x824u,
|
||||
TASK_CRASHINFO_LEDGER_PAGE_TABLE = 0x825u,
|
||||
TASK_CRASHINFO_LEDGER_PHYS_FOOTPRINT = 0x826u,
|
||||
TASK_CRASHINFO_LEDGER_PHYS_FOOTPRINT_LIFETIME_MAX = 0x827u,
|
||||
TASK_CRASHINFO_LEDGER_NETWORK_NONVOLATILE = 0x828u,
|
||||
TASK_CRASHINFO_LEDGER_NETWORK_NONVOLATILE_COMPRESSED = 0x829u,
|
||||
TASK_CRASHINFO_LEDGER_WIRED_MEM = 0x82Au,
|
||||
TASK_CRASHINFO_PROC_PERSONA_ID = 0x82Bu,
|
||||
TASK_CRASHINFO_MEMORY_LIMIT_INCREASE = 0x82Cu,
|
||||
TASK_CRASHINFO_LEDGER_TAGGED_FOOTPRINT = 0x82Du,
|
||||
TASK_CRASHINFO_LEDGER_TAGGED_FOOTPRINT_COMPRESSED = 0x82Eu,
|
||||
TASK_CRASHINFO_LEDGER_MEDIA_FOOTPRINT = 0x82Fu,
|
||||
TASK_CRASHINFO_LEDGER_MEDIA_FOOTPRINT_COMPRESSED = 0x830u,
|
||||
TASK_CRASHINFO_LEDGER_GRAPHICS_FOOTPRINT = 0x831u,
|
||||
TASK_CRASHINFO_LEDGER_GRAPHICS_FOOTPRINT_COMPRESSED = 0x832u,
|
||||
TASK_CRASHINFO_LEDGER_NEURAL_FOOTPRINT = 0x833u,
|
||||
TASK_CRASHINFO_LEDGER_NEURAL_FOOTPRINT_COMPRESSED = 0x834u,
|
||||
TASK_CRASHINFO_MEMORYSTATUS_EFFECTIVE_PRIORITY = 0x835u,
|
||||
TASK_CRASHINFO_KERNEL_TRIAGE_INFO_V1 = 0x836u,
|
||||
TASK_CRASHINFO_TASK_IS_CORPSE_FORK = 0x837u,
|
||||
TASK_CRASHINFO_EXCEPTION_TYPE = 0x838u,
|
||||
TASK_CRASHINFO_CRASH_COUNT = 0x839u,
|
||||
TASK_CRASHINFO_THROTTLE_TIMEOUT = 0x83Au,
|
||||
TASK_CRASHINFO_CS_SIGNING_ID = 0x83Bu,
|
||||
TASK_CRASHINFO_CS_TEAM_ID = 0x83Cu,
|
||||
TASK_CRASHINFO_CS_VALIDATION_CATEGORY = 0x83Du,
|
||||
TASK_CRASHINFO_CS_TRUST_LEVEL = 0x83Eu,
|
||||
TASK_CRASHINFO_PROC_CPUTYPE = 0x83Fu,
|
||||
TASK_CRASHINFO_JIT_ADDRESS_RANGE = 0x840u,
|
||||
TASK_CRASHINFO_MB = 0x841u,
|
||||
TASK_CRASHINFO_CS_AUXILIARY_INFO = 0x842u,
|
||||
TASK_CRASHINFO_RLIM_CORE = 0x843u,
|
||||
TASK_CRASHINFO_CORE_ALLOWED = 0x844u,
|
||||
TASK_CRASHINFO_TASK_SECURITY_CONFIG = 0x845u,
|
||||
|
||||
STACKSHOT_IOSTATS = 0x901u,
|
||||
STACKSHOT_GLOBAL_MEM_STATS = 0x902u,
|
||||
STACKSHOT_CONTAINER_TASK = 0x903u,
|
||||
STACKSHOT_CONTAINER_THREAD = 0x904u,
|
||||
STACKSHOT_TASK_SNAPSHOT = 0x905u,
|
||||
STACKSHOT_THREAD_SNAPSHOT = 0x906u,
|
||||
STACKSHOT_DONATING_PIDS = 0x907u,
|
||||
STACKSHOT_SHAREDCACHE_LOADINFO = 0x908u,
|
||||
STACKSHOT_THREAD_NAME = 0x909u,
|
||||
STACKSHOT_KERN_STACKFRAME = 0x90Au,
|
||||
STACKSHOT_KERN_STACKFRAME64 = 0x90Bu,
|
||||
STACKSHOT_USER_STACKFRAME = 0x90Cu,
|
||||
STACKSHOT_USER_STACKFRAME64 = 0x90Du,
|
||||
STACKSHOT_BOOTARGS = 0x90Eu,
|
||||
STACKSHOT_OSVERSION = 0x90Fu,
|
||||
STACKSHOT_KERN_PAGE_SIZE = 0x910u,
|
||||
STACKSHOT_JETSAM_LEVEL = 0x911u,
|
||||
STACKSHOT_DELTA_SINCE_TIMESTAMP = 0x912u,
|
||||
STACKSHOT_KERN_STACKLR = 0x913u,
|
||||
STACKSHOT_KERN_STACKLR64 = 0x914u,
|
||||
STACKSHOT_USER_STACKLR = 0x915u,
|
||||
STACKSHOT_USER_STACKLR64 = 0x916u,
|
||||
STACKSHOT_NONRUNNABLE_TIDS = 0x917u,
|
||||
STACKSHOT_NONRUNNABLE_TASKS = 0x918u,
|
||||
STACKSHOT_CPU_TIMES = 0x919u,
|
||||
STACKSHOT_STACKSHOT_DURATION = 0x91au,
|
||||
STACKSHOT_STACKSHOT_FAULT_STATS = 0x91bu,
|
||||
STACKSHOT_KERNELCACHE_LOADINFO = 0x91cu,
|
||||
STACKSHOT_THREAD_WAITINFO = 0x91du,
|
||||
STACKSHOT_THREAD_GROUP_SNAPSHOT = 0x91eu,
|
||||
STACKSHOT_THREAD_GROUP = 0x91fu,
|
||||
STACKSHOT_JETSAM_COALITION_SNAPSHOT = 0x920u,
|
||||
STACKSHOT_JETSAM_COALITION = 0x921u,
|
||||
STACKSHOT_THREAD_POLICY_VERSION = 0x922u,
|
||||
STACKSHOT_INSTRS_CYCLES = 0x923u,
|
||||
STACKSHOT_USER_STACKTOP = 0x924u,
|
||||
STACKSHOT_ASID = 0x925u,
|
||||
STACKSHOT_PAGE_TABLES = 0x926u,
|
||||
STACKSHOT_SYS_SHAREDCACHE_LAYOUT = 0x927u,
|
||||
STACKSHOT_THREAD_DISPATCH_QUEUE_LABEL = 0x928u,
|
||||
STACKSHOT_THREAD_TURNSTILEINFO = 0x929u,
|
||||
STACKSHOT_TASK_CPU_ARCHITECTURE = 0x92au,
|
||||
STACKSHOT_LATENCY_INFO = 0x92bu,
|
||||
STACKSHOT_LATENCY_INFO_TASK = 0x92cu,
|
||||
STACKSHOT_LATENCY_INFO_THREAD = 0x92du,
|
||||
STACKSHOT_LOADINFO64_TEXT_EXEC = 0x92eu,
|
||||
STACKSHOT_AOTCACHE_LOADINFO = 0x92fu,
|
||||
STACKSHOT_TRANSITIONING_TASK_SNAPSHOT = 0x930u,
|
||||
STACKSHOT_CONTAINER_TRANSITIONING_TASK = 0x931u,
|
||||
STACKSHOT_USER_ASYNC_START_INDEX = 0x932u,
|
||||
STACKSHOT_USER_ASYNC_STACKLR64 = 0x933u,
|
||||
STACKSHOT_CONTAINER_PORTLABEL = 0x934u,
|
||||
STACKSHOT_PORTLABEL = 0x935u,
|
||||
STACKSHOT_PORTLABEL_NAME = 0x936u,
|
||||
STACKSHOT_DYLD_COMPACTINFO = 0x937u,
|
||||
STACKSHOT_SUSPENSION_INFO = 0x938u,
|
||||
STACKSHOT_SUSPENSION_SOURCE = 0x939u,
|
||||
STACKSHOT_TASK_DELTA_SNAPSHOT = 0x940u,
|
||||
STACKSHOT_THREAD_DELTA_SNAPSHOT = 0x941u,
|
||||
STACKSHOT_CONTAINER_SHAREDCACHE = 0x942u,
|
||||
STACKSHOT_SHAREDCACHE_INFO = 0x943u,
|
||||
STACKSHOT_SHAREDCACHE_AOTINFO = 0x944u,
|
||||
STACKSHOT_SHAREDCACHE_ID = 0x945u,
|
||||
STACKSHOT_CODESIGNING_INFO = 0x946u,
|
||||
STACKSHOT_OS_BUILD_VERSION = 0x947u,
|
||||
STACKSHOT_KERN_EXCLAVES_THREADINFO = 0x948u,
|
||||
STACKSHOT_CONTAINER_EXCLAVES = 0x949u,
|
||||
STACKSHOT_CONTAINER_EXCLAVE_SCRESULT = 0x94au,
|
||||
STACKSHOT_EXCLAVE_SCRESULT_INFO = 0x94bu,
|
||||
STACKSHOT_CONTAINER_EXCLAVE_IPCSTACKENTRY = 0x94cu,
|
||||
STACKSHOT_EXCLAVE_IPCSTACKENTRY_INFO = 0x94du,
|
||||
STACKSHOT_EXCLAVE_IPCSTACKENTRY_ECSTACK = 0x94eu,
|
||||
STACKSHOT_CONTAINER_EXCLAVE_ADDRESSSPACE = 0x94fu,
|
||||
STACKSHOT_EXCLAVE_ADDRESSSPACE_INFO = 0x950u,
|
||||
STACKSHOT_EXCLAVE_ADDRESSSPACE_NAME = 0x951u,
|
||||
STACKSHOT_CONTAINER_EXCLAVE_TEXTLAYOUT = 0x952u,
|
||||
STACKSHOT_EXCLAVE_TEXTLAYOUT_INFO = 0x953u,
|
||||
STACKSHOT_EXCLAVE_TEXTLAYOUT_SEGMENTS = 0x954u,
|
||||
STACKSHOT_KERN_EXCLAVES_CRASH_THREADINFO = 0x955u,
|
||||
STACKSHOT_LATENCY_INFO_CPU = 0x956u,
|
||||
STACKSHOT_TASK_EXEC_META = 0x957u,
|
||||
STACKSHOT_TASK_MEMORYSTATUS = 0x958u,
|
||||
STACKSHOT_LATENCY_INFO_BUFFER = 0x95au,
|
||||
|
||||
TASK_BTINFO_PID = 0xA01u,
|
||||
TASK_BTINFO_PPID = 0xA02u,
|
||||
TASK_BTINFO_PROC_NAME = 0xA03u,
|
||||
TASK_BTINFO_PROC_PATH = 0xA04u,
|
||||
TASK_BTINFO_UID = 0xA05u,
|
||||
TASK_BTINFO_GID = 0xA06u,
|
||||
TASK_BTINFO_PROC_FLAGS = 0xA07u,
|
||||
TASK_BTINFO_CPUTYPE = 0xA08u,
|
||||
TASK_BTINFO_EXCEPTION_CODES = 0xA09u,
|
||||
TASK_BTINFO_EXCEPTION_TYPE = 0xA0Au,
|
||||
TASK_BTINFO_RUSAGE_INFO = 0xA0Bu,
|
||||
TASK_BTINFO_COALITION_ID = 0xA0Cu,
|
||||
TASK_BTINFO_CRASH_COUNT = 0xA0Du,
|
||||
TASK_BTINFO_THROTTLE_TIMEOUT = 0xA0Eu,
|
||||
TASK_BTINFO_THREAD_ID = 0xA20u,
|
||||
TASK_BTINFO_THREAD_NAME = 0xA21u,
|
||||
TASK_BTINFO_THREAD_STATE = 0xA22u,
|
||||
TASK_BTINFO_THREAD_EXCEPTION_STATE = 0xA23u,
|
||||
TASK_BTINFO_BACKTRACE = 0xA24u,
|
||||
TASK_BTINFO_BACKTRACE64 = 0xA25u,
|
||||
TASK_BTINFO_ASYNC_BACKTRACE64 = 0xA26u,
|
||||
TASK_BTINFO_ASYNC_START_INDEX = 0xA27u,
|
||||
TASK_BTINFO_PLATFORM = 0xA28u,
|
||||
TASK_BTINFO_SC_LOADINFO = 0xA29u,
|
||||
TASK_BTINFO_SC_LOADINFO64 = 0xA2Au,
|
||||
TASK_BTINFO_FLAGS = 0xAFFu,
|
||||
|
||||
BUFFER_BEGIN_XNUPOST_CONFIG = 0x1e21c09fu,
|
||||
BUFFER_BEGIN_COMPRESSED = 0x434f4d50u,
|
||||
BUFFER_BEGIN_BTINFO = 0x46414E47u,
|
||||
BUFFER_BEGIN_STACKSHOT = 0x59a25807u,
|
||||
BUFFER_BEGIN_OS_REASON = 0x53A20900u,
|
||||
BUFFER_BEGIN_DELTA_STACKSHOT = 0xDE17A59Au,
|
||||
BUFFER_BEGIN_CRASHINFO = 0xDEADF157u,
|
||||
BUFFER_END = 0xF19158EDu;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<ItemType> (this);
|
||||
}
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum StackshotFlagsLow {
|
||||
GET_DQ = (1U << 0),
|
||||
SAVE_LOADINFO = (1U << 1),
|
||||
GET_GLOBAL_MEM_STATS = (1U << 2),
|
||||
SAVE_KEXT_LOADINFO = (1U << 3),
|
||||
ACTIVE_KERNEL_THREADS_ONLY = (1U << 8),
|
||||
GET_BOOT_PROFILE = (1U << 9),
|
||||
DO_COMPRESS = (1U << 10),
|
||||
SAVE_IMP_DONATION_PIDS = (1U << 13),
|
||||
SAVE_IN_KERNEL_BUFFER = (1U << 14),
|
||||
RETRIEVE_EXISTING_BUFFER = (1U << 15),
|
||||
KCDATA_FORMAT = (1U << 16),
|
||||
ENABLE_BT_FAULTING = (1U << 17),
|
||||
COLLECT_DELTA_SNAPSHOT = (1U << 18),
|
||||
COLLECT_SHAREDCACHE_LAYOUT = (1U << 19),
|
||||
TRYLOCK = (1U << 20),
|
||||
ENABLE_UUID_FAULTING = (1U << 21),
|
||||
FROM_PANIC = (1U << 22),
|
||||
NO_IO_STATS = (1U << 23),
|
||||
THREAD_WAITINFO = (1U << 24),
|
||||
THREAD_GROUP = (1U << 25),
|
||||
SAVE_JETSAM_COALITIONS = (1U << 26),
|
||||
INSTRS_CYCLES = (1U << 27),
|
||||
ASID = (1U << 28),
|
||||
PAGE_TABLES = (1U << 29),
|
||||
DISABLE_LATENCY_INFO = (1U << 30),
|
||||
SAVE_DYLD_COMPACTINFO = (1U << 31)
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum StackshotFlagsHigh {
|
||||
INCLUDE_DRIVER_THREADS_IN_KERNEL = (1U << 0),
|
||||
EXCLAVES = (1U << 1),
|
||||
SKIP_EXCLAVES = (1U << 2),
|
||||
}
|
||||
|
||||
public const size_t TASK_SNAPSHOT_PID_OFFSET = 84;
|
||||
|
||||
public static bool is_stackshot (Bytes bytes) {
|
||||
if (bytes.get_size () < 16)
|
||||
return false;
|
||||
|
||||
var type = (ItemType) uint32.from_little_endian (*((uint32 *) bytes.get_data ()));
|
||||
|
||||
switch (type) {
|
||||
case ItemType.BUFFER_BEGIN_STACKSHOT:
|
||||
case ItemType.BUFFER_BEGIN_DELTA_STACKSHOT:
|
||||
case ItemType.BUFFER_BEGIN_COMPRESSED:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class Reader : Object {
|
||||
private Buffer buf;
|
||||
private BufferReader r;
|
||||
|
||||
private Buffer payload_buf;
|
||||
private BufferReader payload_r;
|
||||
|
||||
private BufferReader scan_r;
|
||||
private Array<uint64> scan_container_ids = new Array<uint64> ();
|
||||
|
||||
[Compact]
|
||||
private struct Scope {
|
||||
public size_t end_item_offset;
|
||||
public uint64 end_id;
|
||||
}
|
||||
|
||||
private Array<Scope> scopes = new Array<Scope> ();
|
||||
private size_t current_end_item_offset;
|
||||
|
||||
private const size_t HEADER_SIZE = 16;
|
||||
private const size_t ALIGNMENT_SIZE = 16;
|
||||
|
||||
public Reader (Bytes bytes) {
|
||||
buf = new Buffer (bytes, LITTLE_ENDIAN);
|
||||
r = new BufferReader (buf);
|
||||
|
||||
payload_buf = new Buffer.from_data ((uint8[]) null, buf.byte_order, buf.pointer_size);
|
||||
payload_r = new BufferReader (payload_buf);
|
||||
|
||||
scan_r = new BufferReader (buf);
|
||||
|
||||
current_end_item_offset = buf.bytes.get_size ();
|
||||
}
|
||||
|
||||
public enum VisitResult {
|
||||
CONTINUE,
|
||||
STOP
|
||||
}
|
||||
|
||||
public VisitResult for_each (ItemVisitor visitor) throws Error {
|
||||
ItemHeader h;
|
||||
unowned BufferReader p;
|
||||
|
||||
while (read_item (out h, out p)) {
|
||||
if (visitor (h, p) == VisitResult.STOP)
|
||||
return VisitResult.STOP;
|
||||
}
|
||||
|
||||
return VisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
public delegate VisitResult ItemVisitor (ItemHeader h, BufferReader payload) throws Error;
|
||||
|
||||
public VisitResult for_each_container (ItemType want_container_type, ScopeVisitor visitor) throws Error {
|
||||
ItemHeader h;
|
||||
unowned BufferReader p;
|
||||
|
||||
while (read_item (out h, out p)) {
|
||||
if (h.type != ItemType.CONTAINER_BEGIN)
|
||||
continue;
|
||||
|
||||
var ctype = (ItemType) p.read_uint32 ();
|
||||
var id = h.flags;
|
||||
|
||||
if (ctype != want_container_type) {
|
||||
skip_container_body (id);
|
||||
continue;
|
||||
}
|
||||
|
||||
enter_container_body (id);
|
||||
var result = visitor (this);
|
||||
leave_container ();
|
||||
|
||||
if (result == VisitResult.STOP)
|
||||
return VisitResult.STOP;
|
||||
}
|
||||
|
||||
return VisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
public delegate VisitResult ScopeVisitor (Reader r) throws Error;
|
||||
|
||||
public unowned BufferReader get_first (ItemType type) throws Error {
|
||||
unowned BufferReader result = null;
|
||||
|
||||
for_each ((h, p) => {
|
||||
if (h.type != type)
|
||||
return VisitResult.CONTINUE;
|
||||
|
||||
result = p;
|
||||
return VisitResult.STOP;
|
||||
});
|
||||
|
||||
if (result == null)
|
||||
throw new Error.PROTOCOL ("Missing item: %s", type.to_nick ());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private bool read_item (out ItemHeader h, out unowned BufferReader payload) throws Error {
|
||||
if (r.available == 0 || r.offset == current_end_item_offset) {
|
||||
h = ItemHeader ();
|
||||
payload = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
h = read_header ();
|
||||
payload = read_payload (h);
|
||||
return true;
|
||||
}
|
||||
|
||||
private ItemHeader read_header () throws Error {
|
||||
if (r.available < HEADER_SIZE)
|
||||
throw new Error.PROTOCOL ("KCDATA truncated at %zu (need header, avail=%zu)", r.offset, r.available);
|
||||
|
||||
var item_start = r.offset;
|
||||
|
||||
var h = read_item_header_fields (r);
|
||||
|
||||
var avail_payload = current_end_item_offset - r.offset;
|
||||
var avail = size_t.min (r.available, avail_payload);
|
||||
|
||||
if (h.size > avail) {
|
||||
throw new Error.PROTOCOL ("KCDATA truncated at %zu (type=0x%x size=%u avail=%zu)", item_start,
|
||||
(uint32) h.type, h.size, avail);
|
||||
}
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
private unowned BufferReader read_payload (ItemHeader h) throws Error {
|
||||
unowned uint8[] payload = r.read_data (h.size);
|
||||
|
||||
payload_buf.reset_data (payload);
|
||||
payload_r.reset (payload_buf);
|
||||
|
||||
r.align (ALIGNMENT_SIZE);
|
||||
|
||||
return payload_r;
|
||||
}
|
||||
|
||||
private void enter_container_body (uint64 id) throws Error {
|
||||
var body_start = r.offset;
|
||||
|
||||
size_t end_item_offset;
|
||||
find_container_end (body_start, id, out end_item_offset);
|
||||
|
||||
var s = Scope ();
|
||||
s.end_item_offset = end_item_offset;
|
||||
s.end_id = id;
|
||||
scopes.append_val (s);
|
||||
|
||||
current_end_item_offset = end_item_offset;
|
||||
}
|
||||
|
||||
private void leave_container () throws Error {
|
||||
var s = scopes.index (scopes.length - 1);
|
||||
scopes.set_size (scopes.length - 1);
|
||||
|
||||
consume_container_end_at (s.end_item_offset, s.end_id);
|
||||
|
||||
if (scopes.length == 0)
|
||||
current_end_item_offset = buf.bytes.get_size ();
|
||||
else {
|
||||
var parent = scopes.index (scopes.length - 1);
|
||||
current_end_item_offset = parent.end_item_offset;
|
||||
}
|
||||
}
|
||||
|
||||
private void skip_container_body (uint64 id) throws Error {
|
||||
var body_start = r.offset;
|
||||
|
||||
size_t end_item_offset;
|
||||
find_container_end (body_start, id, out end_item_offset);
|
||||
|
||||
consume_container_end_at (end_item_offset, id);
|
||||
}
|
||||
|
||||
private void consume_container_end_at (size_t end_item_offset, uint64 id) throws Error {
|
||||
if (r.offset != end_item_offset)
|
||||
r.seek (end_item_offset);
|
||||
|
||||
if (r.available < HEADER_SIZE)
|
||||
throw new Error.PROTOCOL ("KCDATA truncated at %zu (need header, avail=%zu)", r.offset, r.available);
|
||||
|
||||
var item_start = r.offset;
|
||||
|
||||
var h = read_item_header_fields (r);
|
||||
|
||||
if (h.type != ItemType.CONTAINER_END || h.flags != id) {
|
||||
throw new Error.PROTOCOL ("Malformed container end at %zu (want id=0x%016" + uint64.FORMAT_MODIFIER + "x)",
|
||||
item_start, id);
|
||||
}
|
||||
|
||||
if (h.size > r.available) {
|
||||
throw new Error.PROTOCOL ("KCDATA truncated at %zu (type=0x%x size=%u avail=%zu)", item_start,
|
||||
(uint32) h.type, h.size, r.available);
|
||||
}
|
||||
|
||||
r.skip (h.size);
|
||||
r.align (ALIGNMENT_SIZE);
|
||||
}
|
||||
|
||||
private void find_container_end (size_t body_start, uint64 id, out size_t end_item_offset) throws Error {
|
||||
scan_container_ids.set_size (0);
|
||||
scan_r.seek (body_start);
|
||||
|
||||
while (true) {
|
||||
if (scan_r.available < HEADER_SIZE) {
|
||||
throw new Error.PROTOCOL ("KCDATA truncated at %zu (need header, avail=%zu)",
|
||||
scan_r.offset, scan_r.available);
|
||||
}
|
||||
|
||||
var item_start = scan_r.offset;
|
||||
|
||||
var h = read_item_header_fields (scan_r);
|
||||
|
||||
if (h.size > scan_r.available) {
|
||||
throw new Error.PROTOCOL ("KCDATA truncated at %zu (type=0x%x size=%u avail=%zu)", item_start,
|
||||
(uint32) h.type, h.size, scan_r.available);
|
||||
}
|
||||
|
||||
scan_r.skip (h.size);
|
||||
scan_r.align (ALIGNMENT_SIZE);
|
||||
|
||||
if (h.type == ItemType.CONTAINER_BEGIN) {
|
||||
scan_container_ids.append_val (h.flags);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (h.type == ItemType.CONTAINER_END) {
|
||||
if (scan_container_ids.length != 0) {
|
||||
var top = scan_container_ids.remove_index (scan_container_ids.length - 1);
|
||||
if (top != h.flags) {
|
||||
throw new Error.PROTOCOL ("Malformed container nesting at %zu (id=0x%016" +
|
||||
uint64.FORMAT_MODIFIER + "x)", item_start, h.flags);
|
||||
}
|
||||
} else {
|
||||
if (h.flags != id) {
|
||||
throw new Error.PROTOCOL ("Malformed container end at %zu (id=0x%016" +
|
||||
uint64.FORMAT_MODIFIER + "x)", item_start, h.flags);
|
||||
}
|
||||
|
||||
end_item_offset = item_start;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ItemHeader read_item_header_fields (BufferReader r) throws Error {
|
||||
var h = ItemHeader ();
|
||||
h.type = (ItemType) r.read_uint32 ();
|
||||
h.size = r.read_uint32 ();
|
||||
h.flags = r.read_uint64 ();
|
||||
return h;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
[CCode (gir_namespace = "FridaFruity", gir_version = "1.0")]
|
||||
namespace Frida.Fruity {
|
||||
public enum KdebugClass {
|
||||
MACH = 1,
|
||||
FSYSTEM = 3,
|
||||
BSD = 4,
|
||||
TRACE = 7,
|
||||
DYLD = 31,
|
||||
PERF = 37,
|
||||
|
||||
ANY = 0xff;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugClass> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugMachSubclass {
|
||||
EXCP_SC = 12,
|
||||
}
|
||||
|
||||
public enum KdebugFsystemSubclass {
|
||||
FSRW = 1,
|
||||
DKRW,
|
||||
FSVN,
|
||||
FSLOOOKUP,
|
||||
JOURNAL,
|
||||
IOCTL,
|
||||
BOOTCACHE,
|
||||
HFS,
|
||||
APFS,
|
||||
SMB,
|
||||
MOUNT,
|
||||
EXFAT = 14,
|
||||
MSDOS,
|
||||
ACFS,
|
||||
THROTTLE,
|
||||
DECMP,
|
||||
VFS,
|
||||
LIVEFS,
|
||||
NFS;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugFsystemSubclass> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugFsystemFsrwEvent {
|
||||
LOOKUP = 36,
|
||||
LOOKUP_DONE = 39;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugFsystemFsrwEvent> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugBsdSubclass {
|
||||
EXCP_SC = 12,
|
||||
}
|
||||
|
||||
public enum KdebugTraceSubclass {
|
||||
DATA,
|
||||
STRING,
|
||||
INFO;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugTraceSubclass> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugTraceDataEvent {
|
||||
NEWTHREAD = 1,
|
||||
EXEC,
|
||||
THREAD_TERMINATE,
|
||||
THREAD_TERMINATE_PID;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugTraceDataEvent> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugTraceStringEvent {
|
||||
GLOBAL,
|
||||
NEWTHREAD,
|
||||
EXEC,
|
||||
PROC_EXIT,
|
||||
THREADNAME,
|
||||
THREADNAME_PREV;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugTraceStringEvent> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugDyldSubclass {
|
||||
UUID = 5,
|
||||
}
|
||||
|
||||
public enum KdebugDyldUuidEvent {
|
||||
MAP_A,
|
||||
MAP_B,
|
||||
MAP_32_A,
|
||||
MAP_32_B,
|
||||
MAP_32_C,
|
||||
UNMAP_A,
|
||||
UNMAP_B,
|
||||
UNMAP_32_A,
|
||||
UNMAP_32_B,
|
||||
UNMAP_32_C,
|
||||
SHARED_CACHE_A,
|
||||
SHARED_CACHE_B,
|
||||
SHARED_CACHE_32_A,
|
||||
SHARED_CACHE_32_B,
|
||||
SHARED_CACHE_32_C,
|
||||
AOT_MAP_A,
|
||||
AOT_MAP_B;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugDyldUuidEvent> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugPerfSubclass {
|
||||
GENERIC,
|
||||
THREADINFO,
|
||||
CALLSTACK,
|
||||
TIMER,
|
||||
PET,
|
||||
AST,
|
||||
KPC,
|
||||
KDBG,
|
||||
TASK,
|
||||
LAZY,
|
||||
MEMINFO;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugPerfSubclass> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public enum KdebugPerfCallstackEvent {
|
||||
KSAMPLE,
|
||||
UPEND,
|
||||
USAMPLE,
|
||||
KDATA,
|
||||
UDATA,
|
||||
KHDR,
|
||||
UHDR,
|
||||
ERROR,
|
||||
BACKTRACE,
|
||||
LOG,
|
||||
EXHDR,
|
||||
EXDATA,
|
||||
EXSTACKHDR,
|
||||
EXSTACK,
|
||||
KEXOFFSET;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugPerfCallstackEvent> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public const uint8 KDEBUG_SUBCLASS_ANY = 0xff;
|
||||
|
||||
public const uint16 KDEBUG_CODE_ANY = 0x3fff;
|
||||
|
||||
public enum KdebugFunctionQualifier {
|
||||
NONE,
|
||||
START,
|
||||
END;
|
||||
|
||||
public string to_nick () {
|
||||
return Marshal.enum_to_nick<KdebugFunctionQualifier> (this);
|
||||
}
|
||||
}
|
||||
|
||||
public struct KdebugCode {
|
||||
public uint32 raw;
|
||||
|
||||
public KdebugCode (uint32 raw) {
|
||||
this.raw = raw;
|
||||
}
|
||||
|
||||
public KdebugCode.from_parts (
|
||||
KdebugClass klass,
|
||||
uint8 subclass = KDEBUG_SUBCLASS_ANY,
|
||||
uint16 code = KDEBUG_CODE_ANY,
|
||||
KdebugFunctionQualifier func_qual = NONE) {
|
||||
raw =
|
||||
(((uint32) klass & 0xff) << 24) |
|
||||
(((uint32) subclass & 0xff) << 16) |
|
||||
(((uint32) code & 0x3fff) << 2) |
|
||||
((uint32) func_qual & 0x3);
|
||||
}
|
||||
|
||||
public KdebugClass klass {
|
||||
get {
|
||||
return (KdebugClass) ((raw >> 24) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
public uint8 subclass {
|
||||
get {
|
||||
return (uint8) ((raw >> 16) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
public uint16 code {
|
||||
get {
|
||||
return (uint16) ((raw >> 2) & 0x3fff);
|
||||
}
|
||||
}
|
||||
|
||||
public KdebugFunctionQualifier func_qual {
|
||||
get {
|
||||
return (KdebugFunctionQualifier) (raw & 0x3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,8 +9,20 @@ namespace Frida.Fruity {
|
||||
return other == this;
|
||||
}
|
||||
|
||||
public virtual string to_string () {
|
||||
return "NSObject";
|
||||
public string to_string (uint level = 0) {
|
||||
var s = new StringBuilder.sized (256);
|
||||
append_indent (s, level);
|
||||
append_content (s, level);
|
||||
return s.str;
|
||||
}
|
||||
|
||||
protected virtual void append_content (StringBuilder s, uint level) {
|
||||
s.append ("NSObject {}");
|
||||
}
|
||||
|
||||
protected void append_indent (StringBuilder s, uint level) {
|
||||
for (uint i = 0; i != level; i++)
|
||||
s.append (" ");
|
||||
}
|
||||
|
||||
public static uint hash_func (NSObject val) {
|
||||
@@ -103,8 +115,19 @@ namespace Frida.Fruity {
|
||||
return false;
|
||||
}
|
||||
|
||||
public override string to_string () {
|
||||
return integer.to_string ();
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
switch (kind) {
|
||||
case BOOLEAN:
|
||||
s.append (boolean ? "true" : "false");
|
||||
break;
|
||||
case INTEGER:
|
||||
s.append_printf ("%" + int64.FORMAT, integer);
|
||||
break;
|
||||
case FLOAT:
|
||||
case DOUBLE:
|
||||
s.append_printf ("%f", number);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,8 +152,11 @@ namespace Frida.Fruity {
|
||||
return other_string.str == str;
|
||||
}
|
||||
|
||||
public override string to_string () {
|
||||
return str;
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
s
|
||||
.append_c ('"')
|
||||
.append (str.replace ("\"", "\\\""))
|
||||
.append_c ('"');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,8 +181,8 @@ namespace Frida.Fruity {
|
||||
return other_data.bytes.compare (bytes) == 0;
|
||||
}
|
||||
|
||||
public override string to_string () {
|
||||
return "NSData";
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
s.append_printf ("NSData { size = %" + size_t.FORMAT + " }", bytes.get_size ());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,6 +245,25 @@ namespace Frida.Fruity {
|
||||
public void set_value (string key, NSObject val) {
|
||||
storage[key] = val;
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
if (storage.size == 0) {
|
||||
s.append ("{}");
|
||||
return;
|
||||
}
|
||||
|
||||
s.append ("{\n");
|
||||
foreach (var e in entries) {
|
||||
append_indent (s, level + 1);
|
||||
s
|
||||
.append (e.key)
|
||||
.append (": ");
|
||||
e.value.append_content (s, level + 1);
|
||||
s.append (",\n");
|
||||
}
|
||||
append_indent (s, level);
|
||||
s.append_c ('}');
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NSDictionaryRaw : NSObject {
|
||||
@@ -253,6 +298,24 @@ namespace Frida.Fruity {
|
||||
? storage
|
||||
: new Gee.HashMap<NSObject, NSObject> (NSObject.hash_func, NSObject.equal_func);
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
if (storage.size == 0) {
|
||||
s.append ("{}");
|
||||
return;
|
||||
}
|
||||
|
||||
s.append ("{\n");
|
||||
foreach (var e in entries) {
|
||||
append_indent (s, level + 1);
|
||||
e.key.append_content (s, level + 1);
|
||||
s.append (": ");
|
||||
e.value.append_content (s, level + 1);
|
||||
s.append (",\n");
|
||||
}
|
||||
append_indent (s, level);
|
||||
s.append_c ('}');
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NSArray : NSObject {
|
||||
@@ -277,6 +340,56 @@ namespace Frida.Fruity {
|
||||
public void add_object (NSObject obj) {
|
||||
storage.add (obj);
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
if (storage.size == 0) {
|
||||
s.append ("[]");
|
||||
return;
|
||||
}
|
||||
|
||||
s.append ("[\n");
|
||||
foreach (var e in elements) {
|
||||
append_indent (s, level + 1);
|
||||
e.append_content (s, level + 1);
|
||||
s.append (",\n");
|
||||
}
|
||||
append_indent (s, level);
|
||||
s.append_c (']');
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NSSet : NSObject {
|
||||
public Gee.Iterable<NSObject> items {
|
||||
owned get {
|
||||
return storage;
|
||||
}
|
||||
}
|
||||
|
||||
private Gee.HashSet<NSObject> storage;
|
||||
|
||||
public NSSet (Gee.HashSet<NSObject>? storage = null) {
|
||||
this.storage = (storage != null) ? storage : new Gee.HashSet<NSObject> (NSObject.hash_func);
|
||||
}
|
||||
|
||||
public void add_object (NSObject obj) {
|
||||
storage.add (obj);
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
if (storage.size == 0) {
|
||||
s.append ("{}");
|
||||
return;
|
||||
}
|
||||
|
||||
s.append ("{\n");
|
||||
foreach (var e in items) {
|
||||
append_indent (s, level + 1);
|
||||
e.append_content (s, level + 1);
|
||||
s.append (",\n");
|
||||
}
|
||||
append_indent (s, level);
|
||||
s.append_c ('}');
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NSDate : NSObject {
|
||||
@@ -296,6 +409,10 @@ namespace Frida.Fruity {
|
||||
return new DateTime.from_unix_utc (MAC_EPOCH_DELTA_FROM_UNIX + whole_seconds)
|
||||
.add_seconds (time - (double) whole_seconds);
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
s.append_printf ("NSDate { time = %f }", time);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NSError : NSObject {
|
||||
@@ -319,6 +436,35 @@ namespace Frida.Fruity {
|
||||
this.code = code;
|
||||
this.user_info = user_info;
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
s.append ("NSError { domain = ");
|
||||
domain.append_content (s, level);
|
||||
s.append_printf (", code = %" + uint64.FORMAT_MODIFIER + "d, user_info = ", code);
|
||||
|
||||
if (user_info.size == 0) {
|
||||
user_info.append_content (s, level);
|
||||
s.append (" }");
|
||||
return;
|
||||
}
|
||||
|
||||
s.append ("{\n");
|
||||
append_indent (s, level + 1);
|
||||
s.append ("domain: ");
|
||||
domain.append_content (s, level + 1);
|
||||
s.append (",\n");
|
||||
|
||||
append_indent (s, level + 1);
|
||||
s.append_printf ("code: %" + uint64.FORMAT_MODIFIER + "d,\n", code);
|
||||
|
||||
append_indent (s, level + 1);
|
||||
s.append ("user_info: ");
|
||||
user_info.append_content (s, level + 1);
|
||||
s.append_c ('\n');
|
||||
|
||||
append_indent (s, level);
|
||||
s.append_c ('}');
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class DTTapMessage : NSObject {
|
||||
@@ -330,6 +476,25 @@ namespace Frida.Fruity {
|
||||
public DTTapMessage (NSDictionary plist) {
|
||||
this.plist = plist;
|
||||
}
|
||||
|
||||
protected override void append_content (StringBuilder s, uint level) {
|
||||
if (plist.size == 0) {
|
||||
s.append ("DTTapMessage { plist: ");
|
||||
plist.append_content (s, level);
|
||||
s.append (" }");
|
||||
return;
|
||||
}
|
||||
|
||||
s.append ("DTTapMessage {\n");
|
||||
|
||||
append_indent (s, level + 1);
|
||||
s.append ("plist: ");
|
||||
plist.append_content (s, level + 1);
|
||||
s.append_c ('\n');
|
||||
|
||||
append_indent (s, level);
|
||||
s.append_c ('}');
|
||||
}
|
||||
}
|
||||
|
||||
namespace NSKeyedArchive {
|
||||
@@ -338,6 +503,7 @@ namespace Frida.Fruity {
|
||||
|
||||
private const string[] DICTIONARY_CLASS = { "NSDictionary", "NSObject" };
|
||||
private const string[] ARRAY_CLASS = { "NSArray", "NSObject" };
|
||||
private const string[] SET_CLASS = { "NSSet", "NSObject" };
|
||||
|
||||
[CCode (has_target = false)]
|
||||
private delegate PlistUid EncodeFunc (NSObject instance, EncodingContext ctx);
|
||||
@@ -455,6 +621,7 @@ namespace Frida.Fruity {
|
||||
encoders[typeof (NSString)] = encode_string;
|
||||
encoders[typeof (NSDictionary)] = encode_dictionary;
|
||||
encoders[typeof (NSArray)] = encode_array;
|
||||
encoders[typeof (NSSet)] = encode_set;
|
||||
}
|
||||
|
||||
private static void ensure_decoders_registered () {
|
||||
@@ -619,6 +786,21 @@ namespace Frida.Fruity {
|
||||
return uid;
|
||||
}
|
||||
|
||||
private static PlistUid encode_set (NSObject instance, EncodingContext ctx) {
|
||||
NSSet set = (NSSet) instance;
|
||||
|
||||
var object = new PlistDict ();
|
||||
var uid = ctx.add_object (object);
|
||||
|
||||
var objs = new PlistArray ();
|
||||
foreach (var element in set.items)
|
||||
objs.add_uid (encode_value (element, ctx));
|
||||
object.set_array ("NS.objects", objs);
|
||||
object.set_uid ("$class", ctx.get_class (SET_CLASS));
|
||||
|
||||
return uid;
|
||||
}
|
||||
|
||||
private static NSObject decode_array (PlistDict instance, DecodingContext ctx) throws Error, PlistError {
|
||||
var objs = instance.get_array ("NS.objects");
|
||||
|
||||
|
||||
@@ -0,0 +1,180 @@
|
||||
[CCode (gir_namespace = "FridaFruity", gir_version = "1.0")]
|
||||
namespace Frida.Fruity {
|
||||
public delegate void KperfdataRecordVisitor (KdBuf rec) throws Error;
|
||||
|
||||
public sealed class KperfdataStreamParser : Object {
|
||||
private ByteArray stash = new ByteArray ();
|
||||
private size_t cursor = 0;
|
||||
|
||||
private bool have_header = false;
|
||||
private uint32 thread_count = 0;
|
||||
private size_t records_offset = 0;
|
||||
|
||||
private const uint32 RAW_VERSION2 = 0x55aa0200u;
|
||||
|
||||
private const size_t HEADER_FIXED_SIZE = 0x120;
|
||||
private const size_t THREADMAP_ENTRY_SIZE = 0x20;
|
||||
private const size_t PAGE_SIZE = 0x1000;
|
||||
|
||||
private const size_t KD_BUF_SIZE = 0x40;
|
||||
|
||||
public void reset () {
|
||||
stash.set_size (0);
|
||||
cursor = 0;
|
||||
|
||||
have_header = false;
|
||||
thread_count = 0;
|
||||
records_offset = 0;
|
||||
}
|
||||
|
||||
public void push (Bytes chunk, KperfdataRecordVisitor visitor) throws Error {
|
||||
stash.append (chunk.get_data ());
|
||||
|
||||
var stash_bytes = new Bytes.static (stash.data);
|
||||
parse_bytes (stash_bytes, visitor);
|
||||
|
||||
compact ();
|
||||
}
|
||||
|
||||
private void parse_bytes (Bytes bytes, KperfdataRecordVisitor visitor) throws Error {
|
||||
var buf = new Frida.Buffer (bytes, LITTLE_ENDIAN);
|
||||
var r = new Frida.BufferReader (buf);
|
||||
|
||||
while (true) {
|
||||
if (!have_header) {
|
||||
if (r.available < 8)
|
||||
return;
|
||||
|
||||
size_t header_start = r.offset;
|
||||
|
||||
uint32 magic = r.read_uint32 ();
|
||||
if (magic != RAW_VERSION2)
|
||||
throw new Error.PROTOCOL ("Unknown kperfdata magic 0x%x", magic);
|
||||
|
||||
thread_count = r.read_uint32 ();
|
||||
|
||||
uint64 threadmaps_size_64 = thread_count * THREADMAP_ENTRY_SIZE;
|
||||
size_t header_size = (size_t) (HEADER_FIXED_SIZE + threadmaps_size_64);
|
||||
size_t aligned = align_up (header_size, PAGE_SIZE);
|
||||
|
||||
records_offset = aligned;
|
||||
|
||||
if ((r.offset - 8) != header_start)
|
||||
throw new Error.PROTOCOL ("Internal offset bookkeeping error");
|
||||
|
||||
if ((stash.len - header_start) < records_offset) {
|
||||
r.skip (header_start - r.offset);
|
||||
return;
|
||||
}
|
||||
|
||||
cursor = header_start + records_offset;
|
||||
have_header = true;
|
||||
|
||||
r.skip (cursor - r.offset);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (r.offset < cursor) {
|
||||
if ((cursor - r.offset) > r.available)
|
||||
return;
|
||||
|
||||
r.skip (cursor - r.offset);
|
||||
}
|
||||
|
||||
if (r.available < KD_BUF_SIZE)
|
||||
return;
|
||||
|
||||
KdBuf rec = KdBuf ();
|
||||
|
||||
rec.timestamp = r.read_uint64 ();
|
||||
|
||||
rec.arg1 = r.read_uint64 ();
|
||||
rec.arg2 = r.read_uint64 ();
|
||||
rec.arg3 = r.read_uint64 ();
|
||||
rec.arg4 = r.read_uint64 ();
|
||||
rec.arg5 = r.read_uint64 ();
|
||||
|
||||
rec.debugid = r.read_uint32 ();
|
||||
rec.cpuid = r.read_uint32 ();
|
||||
|
||||
rec.unused = r.read_uint64 ();
|
||||
|
||||
visitor (rec);
|
||||
|
||||
cursor = r.offset;
|
||||
}
|
||||
}
|
||||
|
||||
private void compact () {
|
||||
if (cursor == 0)
|
||||
return;
|
||||
|
||||
if (cursor >= stash.len) {
|
||||
stash.set_size (0);
|
||||
cursor = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
size_t remaining = stash.len - cursor;
|
||||
Memory.move (stash.data, (uint8 *) stash.data + cursor, remaining);
|
||||
stash.set_size ((uint) remaining);
|
||||
cursor = 0;
|
||||
}
|
||||
|
||||
private static size_t align_up (size_t val, size_t alignment) {
|
||||
size_t mask = alignment - 1;
|
||||
return (val + mask) & ~mask;
|
||||
}
|
||||
}
|
||||
|
||||
public struct KdBuf {
|
||||
public uint64 timestamp;
|
||||
|
||||
public uint64 arg1;
|
||||
public uint64 arg2;
|
||||
public uint64 arg3;
|
||||
public uint64 arg4;
|
||||
public uint64 arg5;
|
||||
|
||||
public uint32 debugid;
|
||||
public uint32 cpuid;
|
||||
public uint64 unused;
|
||||
|
||||
public KdebugCode kcode {
|
||||
get {
|
||||
return KdebugCode (debugid);
|
||||
}
|
||||
}
|
||||
|
||||
public string to_string () {
|
||||
var kc = kcode;
|
||||
|
||||
return (
|
||||
"ts=0x%" + uint64.FORMAT_MODIFIER + "x "
|
||||
+ "arg1=0x%" + uint64.FORMAT_MODIFIER + "x "
|
||||
+ "arg2=0x%" + uint64.FORMAT_MODIFIER + "x "
|
||||
+ "arg3=0x%" + uint64.FORMAT_MODIFIER + "x "
|
||||
+ "arg4=0x%" + uint64.FORMAT_MODIFIER + "x "
|
||||
+ "arg5=0x%" + uint64.FORMAT_MODIFIER + "x "
|
||||
+ "debugid=0x%08x "
|
||||
+ "klass=%s subclass=%u code=%u func=%s "
|
||||
+ "cpuid=%u "
|
||||
+ "unused=0x%" + uint64.FORMAT_MODIFIER + "x"
|
||||
).printf (
|
||||
timestamp,
|
||||
arg1,
|
||||
arg2,
|
||||
arg3,
|
||||
arg4,
|
||||
arg5,
|
||||
debugid,
|
||||
kc.klass.to_nick (),
|
||||
kc.subclass,
|
||||
kc.code,
|
||||
kc.func_qual.to_nick (),
|
||||
cpuid,
|
||||
unused
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
-29
@@ -36,8 +36,6 @@ namespace Frida.Fruity {
|
||||
private uint16 ndp_fixed_header_size;
|
||||
|
||||
private VirtualNetworkStack? _netstack;
|
||||
private Gee.Queue<Bytes> pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
private bool input_flush_scheduled = false;
|
||||
private Gee.Queue<Bytes> pending_output = new Gee.ArrayQueue<Bytes> ();
|
||||
private size_t out_in_flight_count = 0;
|
||||
private size_t out_in_flight_bytes = 0;
|
||||
@@ -184,8 +182,20 @@ namespace Frida.Fruity {
|
||||
}
|
||||
|
||||
try {
|
||||
var frame = yield pending.poll ().future.wait_async (io_cancellable);
|
||||
handle_ncm_frame (frame);
|
||||
var datagrams = new Gee.ArrayList<Bytes> ();
|
||||
while (true) {
|
||||
var request = pending.peek ();
|
||||
|
||||
if (request == null)
|
||||
break;
|
||||
if (!datagrams.is_empty && !request.future.ready)
|
||||
break;
|
||||
|
||||
var frame = yield pending.poll ().future.wait_async (io_cancellable);
|
||||
datagrams.add_all (handle_ncm_frame (frame));
|
||||
}
|
||||
|
||||
yield _netstack.handle_incoming_datagrams (datagrams);
|
||||
} catch (GLib.Error e) {
|
||||
return;
|
||||
}
|
||||
@@ -208,7 +218,7 @@ namespace Frida.Fruity {
|
||||
}
|
||||
}
|
||||
|
||||
private void handle_ncm_frame (Bytes frame) throws GLib.Error {
|
||||
private Gee.List<Bytes> handle_ncm_frame (Bytes frame) throws GLib.Error {
|
||||
var input = new DataInputStream (new MemoryInputStream.from_bytes (frame));
|
||||
input.byte_order = LITTLE_ENDIAN;
|
||||
|
||||
@@ -222,6 +232,8 @@ namespace Frida.Fruity {
|
||||
input.skip (6);
|
||||
var ndp_index = input.read_uint16 ();
|
||||
|
||||
var datagrams = new Gee.ArrayList<Bytes> ();
|
||||
|
||||
do {
|
||||
input.seek (ndp_index, SET);
|
||||
input.read_all (raw_signature[:4], out bytes_read);
|
||||
@@ -250,35 +262,13 @@ namespace Frida.Fruity {
|
||||
notify_property ("remote-ipv6-address");
|
||||
}
|
||||
|
||||
on_incoming_datagram (datagram);
|
||||
datagrams.add (datagram);
|
||||
}
|
||||
|
||||
ndp_index = next_ndp_index;
|
||||
} while (ndp_index != 0);
|
||||
}
|
||||
|
||||
private void on_incoming_datagram (Bytes datagram) {
|
||||
pending_input.offer (datagram);
|
||||
|
||||
if (!input_flush_scheduled) {
|
||||
var source = new IdleSource ();
|
||||
source.set_callback (() => {
|
||||
input_flush_scheduled = false;
|
||||
flush_pending_input ();
|
||||
return Source.REMOVE;
|
||||
});
|
||||
source.attach (MainContext.get_thread_default ());
|
||||
input_flush_scheduled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void flush_pending_input () {
|
||||
var datagrams = pending_input;
|
||||
pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
try {
|
||||
_netstack.handle_incoming_datagrams (datagrams);
|
||||
} catch (Error e) {
|
||||
}
|
||||
return datagrams;
|
||||
}
|
||||
|
||||
private void on_netif_outgoing_datagrams (Gee.Collection<Bytes> datagrams) {
|
||||
|
||||
@@ -283,14 +283,14 @@ namespace Frida.Fruity {
|
||||
return new Ipv6UdpSocket (this);
|
||||
}
|
||||
|
||||
public void handle_incoming_datagrams (Gee.Collection<Bytes> datagrams) throws Error {
|
||||
public async void handle_incoming_datagrams (Gee.Collection<Bytes> datagrams) throws Error {
|
||||
LWIP.ErrorCode err = OK;
|
||||
|
||||
check_started ();
|
||||
|
||||
check (perform_on_lwip_thread (() => {
|
||||
schedule_on_lwip_thread (() => {
|
||||
begin_output ();
|
||||
|
||||
LWIP.ErrorCode err = OK;
|
||||
|
||||
foreach (var d in datagrams) {
|
||||
var pbuf = LWIP.PacketBuffer.alloc (RAW, (uint16) d.get_size (), POOL);
|
||||
pbuf.take (d.get_data ());
|
||||
@@ -304,8 +304,14 @@ namespace Frida.Fruity {
|
||||
|
||||
end_output ();
|
||||
|
||||
schedule_on_frida_thread (handle_incoming_datagrams.callback);
|
||||
|
||||
return err;
|
||||
}));
|
||||
});
|
||||
|
||||
yield;
|
||||
|
||||
check (err);
|
||||
}
|
||||
|
||||
private static LWIP.ErrorCode on_netif_link_output (LWIP.NetworkInterface handle, LWIP.PacketBuffer pbuf) {
|
||||
@@ -359,6 +365,15 @@ namespace Frida.Fruity {
|
||||
}
|
||||
|
||||
internal LWIP.ErrorCode perform_on_lwip_thread (owned WorkFunc work) {
|
||||
var req = submit_work ((owned) work);
|
||||
return req.join ();
|
||||
}
|
||||
|
||||
internal void schedule_on_lwip_thread (owned WorkFunc work) {
|
||||
submit_work ((owned) work);
|
||||
}
|
||||
|
||||
private Request submit_work (owned WorkFunc work) {
|
||||
var req = new Request ((owned) work);
|
||||
|
||||
if (Thread.self<bool> () == lwip_thread) {
|
||||
@@ -369,7 +384,7 @@ namespace Frida.Fruity {
|
||||
LWIP.Runtime.schedule (perform_next_request);
|
||||
}
|
||||
|
||||
return req.join ();
|
||||
return req;
|
||||
}
|
||||
|
||||
private void perform_next_request () {
|
||||
|
||||
+51
-41
@@ -2044,8 +2044,6 @@ namespace Frida.Fruity {
|
||||
private BufferedInputStream input;
|
||||
private OutputStream output;
|
||||
|
||||
private Gee.Queue<Bytes> pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
private bool input_flush_scheduled = false;
|
||||
private Gee.Queue<Bytes> pending_output = new Gee.ArrayQueue<Bytes> ();
|
||||
private bool writing = false;
|
||||
|
||||
@@ -2147,8 +2145,39 @@ namespace Frida.Fruity {
|
||||
private async void process_incoming_messages () {
|
||||
try {
|
||||
while (true) {
|
||||
var datagram = yield read_datagram (io_cancellable);
|
||||
on_incoming_datagram (datagram);
|
||||
var pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
while (true) {
|
||||
var size = peek_datagram_size ();
|
||||
if (size == -1)
|
||||
break;
|
||||
|
||||
var datagram = new uint8[size];
|
||||
input.read (datagram, io_cancellable);
|
||||
|
||||
pending_input.offer (new Bytes.take ((owned) datagram));
|
||||
}
|
||||
|
||||
if (pending_input.size != 0) {
|
||||
try {
|
||||
yield _tunnel_netstack.handle_incoming_datagrams (pending_input);
|
||||
} catch (Error e) {
|
||||
}
|
||||
|
||||
var source = new IdleSource ();
|
||||
source.set_callback (process_incoming_messages.callback);
|
||||
source.attach (MainContext.get_thread_default ());
|
||||
yield;
|
||||
}
|
||||
|
||||
ssize_t n;
|
||||
try {
|
||||
n = yield input.fill_async (-1, Priority.DEFAULT, io_cancellable);
|
||||
} catch (GLib.Error e) {
|
||||
throw new Error.TRANSPORT ("Connection closed");
|
||||
}
|
||||
|
||||
if (n == 0)
|
||||
throw new Error.TRANSPORT ("Connection closed");
|
||||
}
|
||||
} catch (GLib.Error e) {
|
||||
}
|
||||
@@ -2173,30 +2202,6 @@ namespace Frida.Fruity {
|
||||
closed ();
|
||||
}
|
||||
|
||||
private void on_incoming_datagram (Bytes datagram) {
|
||||
pending_input.offer (datagram);
|
||||
|
||||
if (!input_flush_scheduled) {
|
||||
var source = new IdleSource ();
|
||||
source.set_callback (() => {
|
||||
input_flush_scheduled = false;
|
||||
flush_pending_input ();
|
||||
return Source.REMOVE;
|
||||
});
|
||||
source.attach (MainContext.get_thread_default ());
|
||||
input_flush_scheduled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void flush_pending_input () {
|
||||
var datagrams = pending_input;
|
||||
pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
try {
|
||||
_tunnel_netstack.handle_incoming_datagrams (datagrams);
|
||||
} catch (Error e) {
|
||||
}
|
||||
}
|
||||
|
||||
private void post (Bytes datagram) {
|
||||
var batch = new Gee.ArrayList<Bytes> ();
|
||||
batch.add (datagram);
|
||||
@@ -2269,24 +2274,21 @@ namespace Frida.Fruity {
|
||||
return new JsonObjectReader (json);
|
||||
}
|
||||
|
||||
private async Bytes read_datagram (Cancellable? cancellable) throws Error, IOError {
|
||||
size_t header_size = 40;
|
||||
private ssize_t peek_datagram_size () {
|
||||
ssize_t header_size = 40;
|
||||
if (input.get_available () < header_size)
|
||||
yield fill_until_n_bytes_available (header_size, cancellable);
|
||||
return -1;
|
||||
|
||||
uint16 payload_size = 0;
|
||||
unowned uint8[] size_buf = ((uint8[]) &payload_size)[:2];
|
||||
input.peek (size_buf, 4);
|
||||
payload_size = uint16.from_big_endian (payload_size);
|
||||
|
||||
size_t full_size = header_size + payload_size;
|
||||
ssize_t full_size = header_size + payload_size;
|
||||
if (input.get_available () < full_size)
|
||||
yield fill_until_n_bytes_available (full_size, cancellable);
|
||||
return -1;
|
||||
|
||||
var datagram = new uint8[full_size];
|
||||
input.read (datagram, cancellable);
|
||||
|
||||
return new Bytes.take ((owned) datagram);
|
||||
return full_size;
|
||||
}
|
||||
|
||||
private async void fill_until_n_bytes_available (size_t minimum, Cancellable? cancellable) throws Error, IOError {
|
||||
@@ -2367,6 +2369,7 @@ namespace Frida.Fruity {
|
||||
private Gee.Map<int64?, Stream> streams = new Gee.HashMap<int64?, Stream> (Numeric.int64_hash, Numeric.int64_equal);
|
||||
private Gee.Queue<Bytes> pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
private bool input_flush_scheduled = false;
|
||||
private bool input_flush_happening = false;
|
||||
private Gee.Queue<Bytes> pending_output = new Gee.ArrayQueue<Bytes> ();
|
||||
|
||||
private DatagramBasedSource? rx_source;
|
||||
@@ -2842,7 +2845,7 @@ namespace Frida.Fruity {
|
||||
var source = new IdleSource ();
|
||||
source.set_callback (() => {
|
||||
input_flush_scheduled = false;
|
||||
flush_pending_input ();
|
||||
flush_pending_input.begin ();
|
||||
return Source.REMOVE;
|
||||
});
|
||||
source.attach (MainContext.get_thread_default ());
|
||||
@@ -2852,13 +2855,20 @@ namespace Frida.Fruity {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void flush_pending_input () {
|
||||
private async void flush_pending_input () {
|
||||
if (input_flush_happening)
|
||||
return;
|
||||
input_flush_happening = true;
|
||||
|
||||
var datagrams = pending_input;
|
||||
pending_input = new Gee.ArrayQueue<Bytes> ();
|
||||
|
||||
try {
|
||||
_tunnel_netstack.handle_incoming_datagrams (datagrams);
|
||||
} catch (Error e) {
|
||||
yield _tunnel_netstack.handle_incoming_datagrams (datagrams);
|
||||
} catch (GLib.Error e) {
|
||||
}
|
||||
|
||||
input_flush_happening = false;
|
||||
}
|
||||
|
||||
private static void on_rand (uint8[] dest, NGTcp2.RNGContext rand_ctx) {
|
||||
|
||||
@@ -361,10 +361,17 @@ namespace Frida {
|
||||
|
||||
public async ServiceSession link_service_session (HostSession host_session, ServiceSessionId id, Cancellable? cancellable)
|
||||
throws Error, IOError {
|
||||
throw new Error.NOT_SUPPORTED ("Services are not supported by this backend");
|
||||
if (host_session != this.host_session)
|
||||
throw new Error.INVALID_ARGUMENT ("Invalid host session");
|
||||
|
||||
return this.host_session.link_service_session (id);
|
||||
}
|
||||
|
||||
public void unlink_service_session (HostSession host_session, ServiceSessionId id) {
|
||||
if (host_session != this.host_session)
|
||||
return;
|
||||
|
||||
this.host_session.unlink_service_session (id);
|
||||
}
|
||||
|
||||
private void on_agent_session_detached (AgentSessionId id, SessionDetachReason reason, CrashInfo crash) {
|
||||
@@ -397,6 +404,8 @@ namespace Frida {
|
||||
protected Injector injector;
|
||||
protected Gee.HashMap<uint, uint> injectee_by_pid = new Gee.HashMap<uint, uint> ();
|
||||
|
||||
protected ServiceSessionRegistry service_session_registry = new ServiceSessionRegistry ();
|
||||
|
||||
protected Cancellable io_cancellable = new Cancellable ();
|
||||
|
||||
public virtual async void preload (Cancellable? cancellable) throws Error, IOError {
|
||||
@@ -947,10 +956,18 @@ namespace Frida {
|
||||
throw new Error.NOT_SUPPORTED ("Channels are not supported by this backend");
|
||||
}
|
||||
|
||||
public async ServiceSessionId open_service (string address, Cancellable? cancellable) throws Error, IOError {
|
||||
public virtual async ServiceSessionId open_service (string address, Cancellable? cancellable) throws Error, IOError {
|
||||
throw new Error.NOT_SUPPORTED ("Services are not supported by this backend");
|
||||
}
|
||||
|
||||
public ServiceSession link_service_session (ServiceSessionId id) throws Error {
|
||||
return service_session_registry.link (id);
|
||||
}
|
||||
|
||||
public void unlink_service_session (ServiceSessionId id) {
|
||||
service_session_registry.unlink (id);
|
||||
}
|
||||
|
||||
#if !WINDOWS
|
||||
public async HostChildId prepare_to_fork (uint parent_pid, Cancellable? cancellable, out uint parent_injectee_id,
|
||||
out uint child_injectee_id, out GLib.Socket child_socket) throws Error, IOError {
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
public sealed class Frida.ActivitySampler : Object {
|
||||
public uint pid {
|
||||
get;
|
||||
construct;
|
||||
}
|
||||
|
||||
private BpfRingbufReader? events_reader;
|
||||
private Source? events_source;
|
||||
|
||||
private Gee.Collection<FileDescriptor> perf_event_fds = new Gee.ArrayList<FileDescriptor> ();
|
||||
private Gee.Collection<BpfLink> links = new Gee.ArrayList<BpfLink> ();
|
||||
|
||||
public ActivitySampler (uint pid) {
|
||||
Object (pid: pid);
|
||||
}
|
||||
|
||||
protected override void dispose () {
|
||||
stop ();
|
||||
|
||||
base.dispose ();
|
||||
}
|
||||
|
||||
public void start () throws Error {
|
||||
var obj = BpfObject.open ("activity-sampler.elf", Frida.Data.HelperBackend.get_activity_sampler_elf_blob ().data);
|
||||
|
||||
var target_tgid = obj.maps.get_by_name ("target_tgid");
|
||||
var events = obj.maps.get_by_name ("events");
|
||||
|
||||
obj.prepare ();
|
||||
|
||||
target_tgid.update_u32_u32 (0, pid);
|
||||
events_reader = new BpfRingbufReader (events);
|
||||
|
||||
obj.load ();
|
||||
|
||||
BpfProgram program = obj.programs.get_by_name ("on_perf_event");
|
||||
|
||||
uint ncpus = get_num_processors ();
|
||||
for (uint cpu = 0; cpu != ncpus; cpu++) {
|
||||
var pea = PerfEventAttr ();
|
||||
pea.event_type = SOFTWARE;
|
||||
pea.size = (uint32) sizeof (PerfEventAttr);
|
||||
pea.config = PERF_EVENT_COUNT_SW_CPU_CLOCK;
|
||||
pea.sample_period = 1;
|
||||
|
||||
var pefd = PerfEvent.open (&pea, -1, (int) cpu, -1, 0);
|
||||
perf_event_fds.add (pefd);
|
||||
|
||||
var link = program.attach_perf_event (pefd);
|
||||
links.add (link);
|
||||
}
|
||||
|
||||
var ch = new IOChannel.unix_new (events.fd);
|
||||
var src = new IOSource (ch, IN);
|
||||
var state = new WatchState (this, events_reader);
|
||||
src.set_callback (state.on_ready);
|
||||
src.attach (MainContext.get_thread_default ());
|
||||
events_source = src;
|
||||
}
|
||||
|
||||
public void stop () {
|
||||
events_source?.destroy ();
|
||||
events_source = null;
|
||||
|
||||
links.clear ();
|
||||
|
||||
events_reader = null;
|
||||
}
|
||||
|
||||
private void handle_sample (SampleEvent * e) {
|
||||
printerr ("[ActivitySampler %p] tgid=%u tid=%u time=%" + uint64.FORMAT + " stack_err=%d depth=%u\n",
|
||||
this, e->tgid, e->tid, e->time_ns, e->stack_err, e->depth);
|
||||
|
||||
for (uint32 i = 0; i != e->depth; i++)
|
||||
printerr ("\t0x%lx\n", (ulong) e->ips[i]);
|
||||
}
|
||||
|
||||
private struct SampleEvent {
|
||||
public uint64 time_ns;
|
||||
public uint32 tgid;
|
||||
public uint32 tid;
|
||||
public int32 stack_err;
|
||||
public uint32 depth;
|
||||
public uint64 ips[16];
|
||||
}
|
||||
|
||||
private class WatchState : Object {
|
||||
public unowned ActivitySampler sampler;
|
||||
public BpfRingbufReader reader;
|
||||
|
||||
public WatchState (ActivitySampler sampler, BpfRingbufReader reader) {
|
||||
this.sampler = sampler;
|
||||
this.reader = reader;
|
||||
}
|
||||
|
||||
public bool on_ready (IOChannel ch, IOCondition cond) {
|
||||
reader.drain (payload => {
|
||||
assert (payload.length == sizeof (SampleEvent));
|
||||
sampler.handle_sample ((SampleEvent *) payload);
|
||||
return CONTINUE;
|
||||
});
|
||||
return Source.CONTINUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,17 +3,17 @@
|
||||
#include <sys/syscall.h>
|
||||
|
||||
gboolean
|
||||
_frida_syscall_satisfies (gint syscall_id, FridaLinuxSyscall mask)
|
||||
_frida_syscall_satisfies (gint syscall_id, FridaLinuxSyscallMask mask)
|
||||
{
|
||||
switch (syscall_id)
|
||||
{
|
||||
case __NR_restart_syscall:
|
||||
return (mask & FRIDA_LINUX_SYSCALL_RESTART) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_RESTART) != 0;
|
||||
case __NR_ioctl:
|
||||
return (mask & FRIDA_LINUX_SYSCALL_IOCTL) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_IOCTL) != 0;
|
||||
case __NR_read:
|
||||
case __NR_readv:
|
||||
return (mask & FRIDA_LINUX_SYSCALL_READ) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_READ) != 0;
|
||||
#ifdef __NR_select
|
||||
case __NR_select:
|
||||
#endif
|
||||
@@ -44,7 +44,7 @@ _frida_syscall_satisfies (gint syscall_id, FridaLinuxSyscall mask)
|
||||
#ifdef __NR_epoll_pwait2
|
||||
case __NR_epoll_pwait2:
|
||||
#endif
|
||||
return (mask & FRIDA_LINUX_SYSCALL_POLL_LIKE) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_POLL_LIKE) != 0;
|
||||
#ifdef __NR_wait4
|
||||
case __NR_wait4:
|
||||
#endif
|
||||
@@ -52,21 +52,21 @@ _frida_syscall_satisfies (gint syscall_id, FridaLinuxSyscall mask)
|
||||
case __NR_waitpid:
|
||||
#endif
|
||||
case __NR_waitid:
|
||||
return (mask & FRIDA_LINUX_SYSCALL_WAIT) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_WAIT) != 0;
|
||||
case __NR_rt_sigtimedwait:
|
||||
#ifdef __NR_rt_sigtimedwait_time64
|
||||
case __NR_rt_sigtimedwait_time64:
|
||||
#endif
|
||||
return (mask & FRIDA_LINUX_SYSCALL_SIGWAIT) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_SIGWAIT) != 0;
|
||||
case __NR_futex:
|
||||
return (mask & FRIDA_LINUX_SYSCALL_FUTEX) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_FUTEX) != 0;
|
||||
#ifdef __NR_accept
|
||||
case __NR_accept:
|
||||
#endif
|
||||
#ifdef __NR_accept4
|
||||
case __NR_accept4:
|
||||
#endif
|
||||
return (mask & FRIDA_LINUX_SYSCALL_ACCEPT) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_ACCEPT) != 0;
|
||||
#ifdef __NR_recv
|
||||
case __NR_recv:
|
||||
#endif
|
||||
@@ -82,7 +82,7 @@ _frida_syscall_satisfies (gint syscall_id, FridaLinuxSyscall mask)
|
||||
#ifdef __NR_recvmmsg_time64
|
||||
case __NR_recvmmsg_time64:
|
||||
#endif
|
||||
return (mask & FRIDA_LINUX_SYSCALL_RECV) != 0;
|
||||
return (mask & FRIDA_LINUX_SYSCALL_MASK_RECV) != 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -219,15 +219,15 @@ namespace Frida {
|
||||
}
|
||||
}
|
||||
|
||||
public async void await_syscall (uint pid, LinuxSyscall mask, Cancellable? cancellable) throws Error, IOError {
|
||||
public async void await_syscall (uint pid, LinuxSyscallMask mask, Cancellable? cancellable) throws Error, IOError {
|
||||
yield perform<PausedSyscallSession> (new AwaitSyscallTask (this, mask), pid, cancellable);
|
||||
}
|
||||
|
||||
private class AwaitSyscallTask : Object, Task<PausedSyscallSession> {
|
||||
private weak LinuxHelperBackend backend;
|
||||
private LinuxSyscall mask;
|
||||
private LinuxSyscallMask mask;
|
||||
|
||||
public AwaitSyscallTask (LinuxHelperBackend backend, LinuxSyscall mask) {
|
||||
public AwaitSyscallTask (LinuxHelperBackend backend, LinuxSyscallMask mask) {
|
||||
this.backend = backend;
|
||||
this.mask = mask;
|
||||
}
|
||||
@@ -738,7 +738,7 @@ namespace Frida {
|
||||
return session;
|
||||
}
|
||||
|
||||
public async void wait_for_syscall (LinuxSyscall mask, Cancellable? cancellable) throws Error, IOError {
|
||||
public async void wait_for_syscall (LinuxSyscallMask mask, Cancellable? cancellable) throws Error, IOError {
|
||||
bool on_syscall_entry = true;
|
||||
int pending_signal = 0;
|
||||
while (state != SATISFIED) {
|
||||
@@ -813,22 +813,23 @@ namespace Frida {
|
||||
private const uint64 SOCK_CLOEXEC = 0x80000;
|
||||
|
||||
private sealed class InjectSession : SeizeSession {
|
||||
private static ProcMapsSoEntry local_libc;
|
||||
private static ProcMapsSnapshot.Mapping local_libc;
|
||||
private static uint64 mmap_offset;
|
||||
private static uint64 munmap_offset;
|
||||
|
||||
private static string fallback_ld;
|
||||
private static string fallback_libc;
|
||||
|
||||
private static ProcMapsSoEntry? local_android_ld;
|
||||
private static ProcMapsSnapshot.Mapping? local_android_ld;
|
||||
|
||||
static construct {
|
||||
var libc = Gum.Process.get_libc_module ();
|
||||
uint local_pid = Posix.getpid ();
|
||||
local_libc = ProcMapsSoEntry.find_by_path (local_pid, libc.path);
|
||||
var local_maps = ProcMapsSnapshot.from_pid (local_pid);
|
||||
local_libc = local_maps.find_module_by_path (libc.path);
|
||||
assert (local_libc != null);
|
||||
mmap_offset = (uint64) (uintptr) libc.find_export_by_name ("mmap") - local_libc.base_address;
|
||||
munmap_offset = (uint64) (uintptr) libc.find_export_by_name ("munmap") - local_libc.base_address;
|
||||
mmap_offset = (uint64) (uintptr) libc.find_export_by_name ("mmap") - local_libc.start;
|
||||
munmap_offset = (uint64) (uintptr) libc.find_export_by_name ("munmap") - local_libc.start;
|
||||
|
||||
try {
|
||||
var program = new Gum.ElfModule.from_file ("/proc/self/exe");
|
||||
@@ -846,7 +847,7 @@ namespace Frida {
|
||||
}
|
||||
|
||||
#if ANDROID
|
||||
local_android_ld = ProcMapsSoEntry.find_by_path (local_pid, fallback_ld);
|
||||
local_android_ld = local_maps.find_module_by_path (fallback_ld);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1051,23 +1052,24 @@ namespace Frida {
|
||||
uint64 allocation_base = 0;
|
||||
size_t allocation_size = size_t.max (bootstrapper_size, loader_size) + stack_size;
|
||||
|
||||
var remote_maps = ProcMapsSnapshot.from_pid (pid);
|
||||
var remote_libc = remote_maps.find_module_by_path (local_libc.path);
|
||||
uint64 remote_mmap = 0;
|
||||
uint64 remote_munmap = 0;
|
||||
ProcMapsSoEntry? remote_libc = ProcMapsSoEntry.find_by_path (pid, local_libc.path);
|
||||
#if ANDROID
|
||||
bool same_libc = false;
|
||||
if (remote_libc != null) {
|
||||
bool same_device = remote_libc.identity.split (":")[0] == local_libc.identity.split (":")[0];
|
||||
bool same_inode = remote_libc.identity.split (" ")[1] == local_libc.identity.split (" ")[1];
|
||||
bool same_path = remote_libc.path == local_libc.path;
|
||||
same_libc = same_device && same_inode && same_path;
|
||||
}
|
||||
bool same_libc = remote_libc != null
|
||||
&& remote_libc.device.major == local_libc.device.major
|
||||
&& remote_libc.inode == local_libc.inode
|
||||
&& remote_libc.path == local_libc.path;
|
||||
#else
|
||||
bool same_libc = remote_libc != null && remote_libc.identity == local_libc.identity;
|
||||
bool same_libc = remote_libc != null
|
||||
&& remote_libc.device.equals (local_libc.device)
|
||||
&& remote_libc.inode == local_libc.inode
|
||||
&& remote_libc.path == local_libc.path;
|
||||
#endif
|
||||
if (same_libc) {
|
||||
remote_mmap = remote_libc.base_address + mmap_offset;
|
||||
remote_munmap = remote_libc.base_address + munmap_offset;
|
||||
remote_mmap = remote_libc.start + mmap_offset;
|
||||
remote_munmap = remote_libc.start + munmap_offset;
|
||||
}
|
||||
|
||||
if (remote_mmap != 0) {
|
||||
@@ -1165,8 +1167,12 @@ namespace Frida {
|
||||
result.context.libc = &result.libc;
|
||||
|
||||
if (result.context.rtld_flavor == ANDROID && result.libc.dlopen == null) {
|
||||
ProcMapsSoEntry? remote_ld = ProcMapsSoEntry.find_by_address (pid, (uintptr) result.context.rtld_base);
|
||||
bool same_ld = remote_ld != null && local_android_ld != null && remote_ld.identity == local_android_ld.identity;
|
||||
if (restart_after_libc_load)
|
||||
remote_maps = ProcMapsSnapshot.from_pid (pid);
|
||||
var remote_ld = remote_maps.find_mapping ((uintptr) result.context.rtld_base);
|
||||
bool same_ld = remote_ld != null && local_android_ld != null
|
||||
&& remote_ld.device.equals (local_android_ld.device)
|
||||
&& remote_ld.inode == local_android_ld.inode;
|
||||
if (!same_ld)
|
||||
throw new Error.NOT_SUPPORTED ("Unable to locate Android dynamic linker; please file a bug");
|
||||
result.libc.dlopen = rebase_pointer ((uintptr) dlopen, local_android_ld, remote_ld);
|
||||
@@ -1215,9 +1221,9 @@ namespace Frida {
|
||||
}
|
||||
}
|
||||
|
||||
private static void * rebase_pointer (uintptr local_ptr, ProcMapsSoEntry local_module, ProcMapsSoEntry remote_module) {
|
||||
var offset = local_ptr - local_module.base_address;
|
||||
return (void *) (remote_module.base_address + offset);
|
||||
private static void * rebase_pointer (uintptr local_ptr, ProcMapsSnapshot.Mapping local, ProcMapsSnapshot.Mapping remote) {
|
||||
var offset = local_ptr - local.start;
|
||||
return (void *) (remote.start + offset);
|
||||
}
|
||||
|
||||
private static string make_fallback_address () {
|
||||
@@ -2225,8 +2231,8 @@ namespace Frida {
|
||||
[CCode (array_length_type = "unsigned long")]
|
||||
Posix.iovector[] remote_iov,
|
||||
ulong flags) {
|
||||
return Linux.syscall (SysCall.process_vm_readv, pid, local_iov, local_iov.length, remote_iov, remote_iov.length,
|
||||
flags);
|
||||
return Linux.syscall (LinuxSyscall.PROCESS_VM_READV, pid, local_iov, local_iov.length, remote_iov,
|
||||
remote_iov.length, flags);
|
||||
}
|
||||
|
||||
private static ssize_t process_vm_writev_impl (uint pid,
|
||||
@@ -2235,8 +2241,8 @@ namespace Frida {
|
||||
[CCode (array_length_type = "unsigned long")]
|
||||
Posix.iovector[] remote_iov,
|
||||
ulong flags) {
|
||||
return Linux.syscall (SysCall.process_vm_writev, pid, local_iov, local_iov.length, remote_iov, remote_iov.length,
|
||||
flags);
|
||||
return Linux.syscall (LinuxSyscall.PROCESS_VM_WRITEV, pid, local_iov, local_iov.length, remote_iov,
|
||||
remote_iov.length, flags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3235,169 +3241,10 @@ namespace Frida {
|
||||
}
|
||||
|
||||
private int tgkill (uint tgid, uint tid, Posix.Signal sig) {
|
||||
return Linux.syscall (SysCall.tgkill, tgid, tid, sig);
|
||||
return Linux.syscall (LinuxSyscall.TGKILL, tgid, tid, sig);
|
||||
}
|
||||
|
||||
public extern bool _syscall_satisfies (int syscall_id, LinuxSyscall mask);
|
||||
|
||||
public class ProcMapsSoEntry {
|
||||
public uint64 base_address;
|
||||
public string path;
|
||||
public string identity;
|
||||
|
||||
private ProcMapsSoEntry (uint64 base_address, string path, string identity) {
|
||||
this.base_address = base_address;
|
||||
this.path = path;
|
||||
this.identity = identity;
|
||||
}
|
||||
|
||||
public static ProcMapsSoEntry? find_by_address (uint pid, uint64 address) {
|
||||
var iter = ProcMapsIter.for_pid (pid);
|
||||
while (iter.next ()) {
|
||||
uint64 start = iter.start_address;
|
||||
uint64 end = iter.end_address;
|
||||
if (address >= start && address < end)
|
||||
return new ProcMapsSoEntry (start, iter.path, iter.identity);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ProcMapsSoEntry? find_by_path (uint pid, string path) {
|
||||
var candidates = new Gee.ArrayList<Candidate> ();
|
||||
Candidate? latest_candidate = null;
|
||||
var iter = ProcMapsIter.for_pid (pid);
|
||||
#if ANDROID
|
||||
unowned string libc_path = Gum.Process.get_libc_module ().path;
|
||||
#endif
|
||||
while (iter.next ()) {
|
||||
string current_path = iter.path;
|
||||
if (current_path == "[page size compat]")
|
||||
continue;
|
||||
if (current_path != path) {
|
||||
latest_candidate = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
string flags = iter.flags;
|
||||
|
||||
#if ANDROID
|
||||
if (current_path == libc_path && flags[3] == 's')
|
||||
continue;
|
||||
#endif
|
||||
|
||||
if (iter.file_offset == 0) {
|
||||
latest_candidate = new Candidate () {
|
||||
entry = new ProcMapsSoEntry (iter.start_address, current_path, iter.identity),
|
||||
total_ranges = 0,
|
||||
executable_ranges = 0,
|
||||
};
|
||||
candidates.add (latest_candidate);
|
||||
}
|
||||
|
||||
if (latest_candidate != null) {
|
||||
latest_candidate.total_ranges++;
|
||||
if (flags[2] == 'x')
|
||||
latest_candidate.executable_ranges++;
|
||||
}
|
||||
}
|
||||
|
||||
candidates.sort ((a, b) => b.score () - a.score ());
|
||||
|
||||
if (candidates.is_empty)
|
||||
return null;
|
||||
|
||||
return candidates.first ().entry;
|
||||
}
|
||||
|
||||
private class Candidate {
|
||||
public ProcMapsSoEntry entry;
|
||||
public uint total_ranges;
|
||||
public uint executable_ranges;
|
||||
|
||||
public int score () {
|
||||
int result = (int) total_ranges;
|
||||
if (executable_ranges == 0)
|
||||
result = -result;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ProcMapsIter {
|
||||
private string? contents;
|
||||
private MatchInfo? info;
|
||||
private uint offset = 0;
|
||||
|
||||
public uint64 start_address {
|
||||
get {
|
||||
return uint64.parse (info.fetch (1), 16);
|
||||
}
|
||||
}
|
||||
|
||||
public uint64 end_address {
|
||||
get {
|
||||
return uint64.parse (info.fetch (2), 16);
|
||||
}
|
||||
}
|
||||
|
||||
public string flags {
|
||||
owned get {
|
||||
return info.fetch (3);
|
||||
}
|
||||
}
|
||||
|
||||
public uint64 file_offset {
|
||||
get {
|
||||
return uint64.parse (info.fetch (4), 16);
|
||||
}
|
||||
}
|
||||
|
||||
public string identity {
|
||||
owned get {
|
||||
return info.fetch (5);
|
||||
}
|
||||
}
|
||||
|
||||
public string path {
|
||||
owned get {
|
||||
return info.fetch (6);
|
||||
}
|
||||
}
|
||||
|
||||
public static ProcMapsIter for_pid (uint pid) {
|
||||
return new ProcMapsIter (pid);
|
||||
}
|
||||
|
||||
private ProcMapsIter (uint pid) {
|
||||
try {
|
||||
FileUtils.get_contents ("/proc/%u/maps".printf (pid), out contents);
|
||||
} catch (FileError e) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!/^([0-9a-f]+)-([0-9a-f]+) (\S{4}) ([0-9a-f]+) ([0-9a-f]{2,}:[0-9a-f]{2,} \d+) +([^\n]+)$/m.match (
|
||||
contents, 0, out info)) {
|
||||
assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
public bool next () {
|
||||
if (info == null)
|
||||
return false;
|
||||
|
||||
if (offset > 0) {
|
||||
try {
|
||||
info.next ();
|
||||
} catch (RegexError e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
offset++;
|
||||
|
||||
return info.matches ();
|
||||
}
|
||||
}
|
||||
public extern bool _syscall_satisfies (int syscall_id, LinuxSyscallMask mask);
|
||||
|
||||
private size_t round_size_to_page_size (size_t size) {
|
||||
size_t page_size = Gum.query_page_size ();
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace Frida {
|
||||
yield helper.cancel_exec_transition (pid, cancellable);
|
||||
}
|
||||
|
||||
public async void await_syscall (uint pid, LinuxSyscall mask, Cancellable? cancellable) throws Error, IOError {
|
||||
public async void await_syscall (uint pid, LinuxSyscallMask mask, Cancellable? cancellable) throws Error, IOError {
|
||||
var helper = yield obtain_for_pid (pid, cancellable);
|
||||
yield helper.await_syscall (pid, mask, cancellable);
|
||||
}
|
||||
@@ -514,7 +514,7 @@ namespace Frida {
|
||||
}
|
||||
}
|
||||
|
||||
public async void await_syscall (uint pid, LinuxSyscall mask, Cancellable? cancellable) throws Error, IOError {
|
||||
public async void await_syscall (uint pid, LinuxSyscallMask mask, Cancellable? cancellable) throws Error, IOError {
|
||||
try {
|
||||
yield proxy.await_syscall (pid, mask, cancellable);
|
||||
} catch (GLib.Error e) {
|
||||
|
||||
@@ -136,7 +136,7 @@ namespace Frida {
|
||||
yield backend.cancel_exec_transition (pid, cancellable);
|
||||
}
|
||||
|
||||
public async void await_syscall (uint pid, LinuxSyscall mask, Cancellable? cancellable) throws Error, IOError {
|
||||
public async void await_syscall (uint pid, LinuxSyscallMask mask, Cancellable? cancellable) throws Error, IOError {
|
||||
yield backend.await_syscall (pid, mask, cancellable);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace Frida {
|
||||
public abstract async void prepare_exec_transition (uint pid, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void await_exec_transition (uint pid, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void cancel_exec_transition (uint pid, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void await_syscall (uint pid, LinuxSyscall mask, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void await_syscall (uint pid, LinuxSyscallMask mask, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void resume_syscall (uint pid, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void input (uint pid, uint8[] data, Cancellable? cancellable) throws Error, IOError;
|
||||
public abstract async void resume (uint pid, Cancellable? cancellable) throws Error, IOError;
|
||||
@@ -25,7 +25,7 @@ namespace Frida {
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum LinuxSyscall {
|
||||
public enum LinuxSyscallMask {
|
||||
RESTART,
|
||||
IOCTL,
|
||||
READ,
|
||||
@@ -53,7 +53,7 @@ namespace Frida {
|
||||
public abstract async void prepare_exec_transition (uint pid, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void await_exec_transition (uint pid, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void cancel_exec_transition (uint pid, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void await_syscall (uint pid, LinuxSyscall mask, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void await_syscall (uint pid, LinuxSyscallMask mask, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void resume_syscall (uint pid, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void input (uint pid, uint8[] data, Cancellable? cancellable) throws GLib.Error;
|
||||
public abstract async void resume (uint pid, Cancellable? cancellable) throws GLib.Error;
|
||||
|
||||
+156
-11
@@ -4,24 +4,159 @@ releng := $(top_srcdir)/releng
|
||||
BUILDDIR ?= $(top_srcdir)/build
|
||||
MESON ?= $(releng)/meson/meson.py
|
||||
|
||||
ifeq ($(shell uname -s),Darwin)
|
||||
KERNEL_MAKE ?= gmake
|
||||
KERNEL_SED ?= gsed
|
||||
KERNEL_AWK ?= gawk
|
||||
BPF_CLANG ?= /Applications/AndroidNDK14206865.app/Contents/NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang
|
||||
else
|
||||
KERNEL_MAKE ?= make
|
||||
KERNEL_SED ?= sed
|
||||
KERNEL_AWK ?= awk
|
||||
BPF_CLANG ?= clang
|
||||
endif
|
||||
|
||||
ifdef FRIDA_HOST
|
||||
host_machine := $(FRIDA_HOST)
|
||||
else
|
||||
host_machine := $(shell basename $$(ls -1 $(BUILDDIR)/frida-linux-*.txt | tail -1) | cut -d"." -f1 | cut -d"-" -f2-)
|
||||
host_machine := $(shell basename $$(ls -1 $(BUILDDIR)/*/frida-linux-*.txt | tail -1) | cut -d"." -f1 | cut -d"-" -f2-)
|
||||
endif
|
||||
host_arch := $(shell echo $(host_machine) | cut -d"-" -f2)
|
||||
|
||||
crossfile := $(BUILDDIR)/frida-$(host_machine).txt
|
||||
crossfile := $(BUILDDIR)/$(host_machine)/frida-$(host_machine).txt
|
||||
valac := $(shell grep "vala = " $(crossfile) | cut -c9- | sed -e "s/.$$//" -e "s/,//g")
|
||||
|
||||
build: ext/linux/tools/include/nolibc/nolibc.h
|
||||
artifacts_dir := artifacts
|
||||
build_dir := build
|
||||
|
||||
native_outdir := $(artifacts_dir)/native/$(host_arch)
|
||||
|
||||
bpf_outdir := $(artifacts_dir)/bpf
|
||||
bpf_noarch_progs := \
|
||||
activity-sampler \
|
||||
$(NULL)
|
||||
bpf_arch_progs := \
|
||||
syscall-tracer \
|
||||
$(NULL)
|
||||
bpf_noarch_pairs := \
|
||||
big:bpfeb \
|
||||
little:bpfel
|
||||
bpf_arch_pairs := \
|
||||
x86:bpfel x86_64:bpfel \
|
||||
arm:bpfel armbe:bpfeb arm64:bpfel arm64be:bpfeb \
|
||||
mips:bpfeb mipsel:bpfel mips64:bpfeb mips64el:bpfel \
|
||||
$(NULL)
|
||||
|
||||
build-native: ext/linux/tools/include/nolibc/nolibc.h
|
||||
rm -rf build
|
||||
$(MESON) setup --cross-file $(crossfile) -Db_lto=true build
|
||||
$(MESON) compile -C build
|
||||
install -m644 build/bootstrapper.bin bootstrapper-$(host_arch).bin
|
||||
install -m644 build/loader.bin loader-$(host_arch).bin
|
||||
[ -f build/zymbiote.bin ] && install -m644 build/zymbiote.bin zymbiote-$(host_arch).bin || true
|
||||
$(MESON) setup --prefix /usr --cross-file $(crossfile) -Db_lto=true build
|
||||
DESTDIR=$(abspath build/dist) $(MESON) install -C build
|
||||
for f in build/dist/usr/share/frida-helpers/*; do \
|
||||
install -m644 $$f $(native_outdir)/; \
|
||||
done
|
||||
|
||||
ext/linux/tools/include/nolibc/nolibc.h: nolibc-tweaks.patch
|
||||
bpf_targets :=
|
||||
bpf_obj := $(build_dir)/module.o
|
||||
|
||||
kernel_headers_dir := ext/kernel-headers
|
||||
noarch_uapi_arch ?= x86
|
||||
|
||||
linux_uapi_arch = $(strip \
|
||||
$(if $(filter x86 x86_64,$1),x86, \
|
||||
$(if $(filter arm armbe,$1),arm, \
|
||||
$(if $(filter arm64 arm64be,$1),arm64, \
|
||||
$(if $(filter mips mipsel mips64 mips64el,$1),mips,unknown)))))
|
||||
has_compat32 = $(strip \
|
||||
$(if $(filter x86_64 arm64 arm64be,$(1)),1,))
|
||||
|
||||
kernel_headers_stamp = $(kernel_headers_dir)/$(1)/.stamp
|
||||
kernel_headers_for = $(call kernel_headers_stamp,$(call linux_uapi_arch,$(1)))
|
||||
|
||||
kernel_uapi_arches := x86 arm arm64 mips
|
||||
kernel_uapi_stamps := $(foreach a,$(kernel_uapi_arches),$(call kernel_headers_stamp,$(a)))
|
||||
|
||||
$(call kernel_headers_stamp,%): ext/linux/tools/include/nolibc/nolibc.h
|
||||
@mkdir -p $(kernel_headers_dir)/$*
|
||||
@$(KERNEL_MAKE) -C ext/linux \
|
||||
ARCH=$* \
|
||||
SED=$(KERNEL_SED) \
|
||||
AWK=$(KERNEL_AWK) \
|
||||
headers_install INSTALL_HDR_PATH=$(abspath $(kernel_headers_dir)/$*)
|
||||
@touch $@
|
||||
|
||||
libbpf_devel_url := https://kojipkgs.fedoraproject.org//packages/libbpf/1.6.3/1.fc44/x86_64/libbpf-devel-1.6.3-1.fc44.x86_64.rpm
|
||||
libbpf_devel_rpm := $(notdir $(libbpf_devel_url))
|
||||
libbpf_devel_dir := ext/libbpf
|
||||
|
||||
define recreate_build_dir
|
||||
rm -rf $(build_dir)
|
||||
mkdir -p $(build_dir)
|
||||
endef
|
||||
|
||||
define bpf_compile
|
||||
$(BPF_CLANG) \
|
||||
-target $(1) \
|
||||
-D__TARGET_ARCH_$(2) \
|
||||
$(if $(call has_compat32,$(3)),-DFRIDA_HAS_COMPAT32=1,) \
|
||||
-O2 -g \
|
||||
-I$(build_dir) \
|
||||
-I$(libbpf_devel_dir) \
|
||||
-isystem $(kernel_headers_dir)/$(2)/include \
|
||||
-isystem $(kernel_headers_dir)/$(2)/include/uapi \
|
||||
-isystem $(kernel_headers_dir)/$(2)/include/asm-generic \
|
||||
$< \
|
||||
-c \
|
||||
-o $(bpf_obj)
|
||||
mkdir -p $(@D)
|
||||
install -m644 $(bpf_obj) $@
|
||||
endef
|
||||
|
||||
define declare_bpf_noarch
|
||||
bpf_targets += $(foreach p,$(bpf_noarch_progs),$(bpf_outdir)/noarch-$(1)/$(p).elf)
|
||||
|
||||
$(bpf_outdir)/noarch-$(1)/%.elf: %.bpf.c $(call kernel_headers_stamp,$(noarch_uapi_arch)) $(libbpf_devel_dir)
|
||||
$$(call recreate_build_dir)
|
||||
$$(call bpf_compile,$(2),$(noarch_uapi_arch),noarch)
|
||||
endef
|
||||
|
||||
define declare_bpf_arch
|
||||
bpf_targets += $(foreach p,$(bpf_arch_progs),$(bpf_outdir)/$(1)/$(p).elf)
|
||||
|
||||
$(bpf_outdir)/$(1)/%.elf: %.bpf.c $(call kernel_headers_for,$(1)) $(libbpf_devel_dir)
|
||||
$$(call recreate_build_dir)
|
||||
syscalls_dir=$$(realpath $(top_srcdir)/lib/base/linux-syscalls); \
|
||||
cd build && \
|
||||
$$(valac) \
|
||||
-C \
|
||||
--header=frida-linux-syscalls.h \
|
||||
--profile=posix \
|
||||
$$$${syscalls_dir}/$(shell echo $(1) | sed -e 's/be$$//' -e 's/el$$//').vala && \
|
||||
$(KERNEL_AWK) ' \
|
||||
/typedef[[:space:]]+enum[[:space:]]*\{/ { in_enum=1; next } \
|
||||
in_enum && /^[[:space:]]*}/ { in_enum=0; next } \
|
||||
in_enum { \
|
||||
if (match($$$$0, /^[[:space:]]*([A-Z0-9_]+)[[:space:]]*=[[:space:]]*([^,[:space:]]+)[[:space:]]*,?[[:space:]]*$$$$/, m)) \
|
||||
print "#define " m[1] " " m[2]; \
|
||||
next; \
|
||||
} \
|
||||
{ print } \
|
||||
' frida-linux-syscalls.h > frida-linux-syscalls.h.tmp && \
|
||||
mv frida-linux-syscalls.h.tmp frida-linux-syscalls.h
|
||||
$$(call bpf_compile,$(2),$$(call linux_uapi_arch,$(1)),$(1))
|
||||
endef
|
||||
|
||||
pair_abi = $(word 1,$(subst :, ,$1))
|
||||
pair_target = $(word 2,$(subst :, ,$1))
|
||||
|
||||
$(foreach pair,$(bpf_noarch_pairs), \
|
||||
$(eval $(call declare_bpf_noarch,$(call pair_abi,$(pair)),$(call pair_target,$(pair)))))
|
||||
|
||||
$(foreach pair,$(bpf_arch_pairs), \
|
||||
$(eval $(call declare_bpf_arch,$(call pair_abi,$(pair)),$(call pair_target,$(pair)))))
|
||||
|
||||
build-bpf: $(bpf_targets)
|
||||
|
||||
ext/linux/tools/include/nolibc/nolibc.h: patches/linux-headers-install-portability.patch patches/linux-nolibc-tweaks.patch
|
||||
if [ -d ext/linux ]; then \
|
||||
cd ext/linux; \
|
||||
git reset --hard; \
|
||||
@@ -29,7 +164,17 @@ ext/linux/tools/include/nolibc/nolibc.h: nolibc-tweaks.patch
|
||||
else \
|
||||
git clone --branch=v6.2 --depth=1 https://github.com/torvalds/linux.git ext/linux; \
|
||||
fi
|
||||
patch -d ext/linux -p1 < nolibc-tweaks.patch
|
||||
for fix in $^; do \
|
||||
patch -d ext/linux -p1 < $${fix}; \
|
||||
done
|
||||
@touch -c $@
|
||||
|
||||
.PHONY: build
|
||||
$(libbpf_devel_dir):
|
||||
mkdir -p $(libbpf_devel_dir)
|
||||
curl -L -o $(libbpf_devel_rpm) $(libbpf_devel_url)
|
||||
rpm2cpio -f pax $(libbpf_devel_rpm) | tar -xpf - \
|
||||
-C $(libbpf_devel_dir) \
|
||||
--strip-components=3
|
||||
rm -f $(libbpf_devel_rpm)
|
||||
|
||||
.PHONY: build-native build-bpf
|
||||
@@ -0,0 +1,75 @@
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
#include <bpf/bpf_tracing.h>
|
||||
|
||||
#define MAX_DEPTH 16
|
||||
|
||||
struct
|
||||
{
|
||||
__uint (type, BPF_MAP_TYPE_ARRAY);
|
||||
__uint (max_entries, 1);
|
||||
__type (key, __u32);
|
||||
__type (value, __u32);
|
||||
}
|
||||
target_tgid SEC (".maps");
|
||||
|
||||
struct
|
||||
{
|
||||
__uint (type, BPF_MAP_TYPE_RINGBUF);
|
||||
__uint (max_entries, 1 << 22);
|
||||
}
|
||||
events SEC (".maps");
|
||||
|
||||
typedef struct _SampleEvent SampleEvent;
|
||||
|
||||
struct _SampleEvent
|
||||
{
|
||||
__u64 time_ns;
|
||||
__u32 tgid;
|
||||
__u32 tid;
|
||||
__s32 stack_err;
|
||||
__u32 depth;
|
||||
__u64 ips[MAX_DEPTH];
|
||||
};
|
||||
|
||||
SEC ("perf_event")
|
||||
int
|
||||
on_perf_event (struct bpf_perf_event_data * ctx)
|
||||
{
|
||||
__u32 k0 = 0;
|
||||
|
||||
__u32 * target = bpf_map_lookup_elem (&target_tgid, &k0);
|
||||
if (target == NULL)
|
||||
return 0;
|
||||
|
||||
__u64 pid_tgid = bpf_get_current_pid_tgid ();
|
||||
__u32 tid = (__u32) pid_tgid;
|
||||
__u32 tgid = pid_tgid >> 32;
|
||||
if (tgid != *target)
|
||||
return 0;
|
||||
|
||||
SampleEvent * e = bpf_ringbuf_reserve (&events, sizeof (SampleEvent), 0);
|
||||
if (e == NULL)
|
||||
return 0;
|
||||
|
||||
e->time_ns = bpf_ktime_get_ns ();
|
||||
e->tgid = tgid;
|
||||
e->tid = tid;
|
||||
|
||||
int nbytes = bpf_get_stack (ctx, e->ips, sizeof (e->ips), BPF_F_USER_STACK);
|
||||
if (nbytes < 0)
|
||||
{
|
||||
e->stack_err = nbytes;
|
||||
e->depth = 0;
|
||||
bpf_ringbuf_submit (e, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
e->stack_err = 0;
|
||||
e->depth = (__u32) (nbytes / (int) sizeof (__u64));
|
||||
|
||||
bpf_ringbuf_submit (e, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
char LICENSE[] SEC ("license") = "Dual BSD/GPL";
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loaded 100 of 167 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user