Syscall0–Syscall6 v0.1.0

Source
Invoke an arbitrary Linux x86-64 syscall with zero to six arguments.

Package: Linux

Signatures

func Syscall0(number: uint64) -> int64;
func Syscall1(number: uint64, arg0: uint64) -> int64;
func Syscall2(number: uint64, arg0: uint64, arg1: uint64) -> int64;
func Syscall3(number: uint64, arg0: uint64, arg1: uint64, arg2: uint64) -> int64;
func Syscall4(number: uint64, arg0: uint64, arg1: uint64, arg2: uint64, arg3: uint64) -> int64;
func Syscall5(number: uint64, arg0: uint64, arg1: uint64, arg2: uint64, arg3: uint64, arg4: uint64) -> int64;
func Syscall6(number: uint64, arg0: uint64, arg1: uint64, arg2: uint64, arg3: uint64, arg4: uint64, arg5: uint64) -> int64;

Parameters

NameTypeDescription
numberuint64Linux x86-64 syscall number.
arg0arg5uint64Arguments in the order required by the syscall ABI.

Pointers and signed values must be converted to their raw 64-bit representations before being passed.

Returns

int64 — the raw kernel result. Use IsError before interpreting the value as a successful result.

Description

Choose the function whose suffix matches the syscall's argument count. These entry points perform no validation, type conversion, retry, or resource management.

An incorrect syscall number, argument count, pointer, or buffer length can corrupt memory, leak resources, or terminate the process. Prefer a typed wrapper when the package provides one.

Example

import Linux::{ IsError, SYS_GETPID, Syscall0 };

func Main() -> int {
    let result = Syscall0(SYS_GETPID);
    if !IsError(result) {
        let pid = result;
    }
    return 0;
}

See also