Module: Seccomp::Syscall

Defined in:
lib/seccomp/syscall.rb

Overview

Syscall name and number resolution.

Class Method Summary collapse

Class Method Details

.name(number, arch: Arch.native) ⇒ String?

Returns syscall name.

Examples:

Syscall.name(1, arch: :x86_64)

Parameters:

  • number (Integer)

    syscall number

  • arch (Symbol, String, Integer) (defaults to: Arch.native)

    target architecture

Returns:

  • (String, nil)

    syscall name

Raises:

  • (ArgumentError)

    unless number is an Integer



38
39
40
41
42
# File 'lib/seccomp/syscall.rb', line 38

def name(number, arch: Arch.native)
  raise ArgumentError, "syscall number must be an Integer" unless number.is_a?(Integer)

  LowLevel.syscall_resolve_num_arch(Arch.resolve(arch), number)
end

.number(value, arch: nil, rewrite: false) ⇒ Integer

Returns syscall number.

Examples:

Syscall.number(:write, arch: :x86_64)

Parameters:

  • value (Symbol, String, Integer)

    syscall

  • arch (Symbol, String, Integer, nil) (defaults to: nil)

    target architecture

  • rewrite (Boolean) (defaults to: false)

    rewrite multiplexed syscalls

Returns:

  • (Integer)

    syscall number

Raises:



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/seccomp/syscall.rb', line 14

def number(value, arch: nil, rewrite: false)
  return value if value.is_a?(Integer)

  name = value.to_s
  result = if arch
             token = Arch.resolve(arch)
             if rewrite
               LowLevel.syscall_resolve_name_rewrite(token, name)
             else
               LowLevel.syscall_resolve_name_arch(token, name)
             end
           else
             LowLevel.syscall_resolve_name(name)
           end
  return result unless result == LowLevel::NR_SCMP_ERROR

  raise UnknownSyscallError, "unknown syscall: #{value.inspect}"
end