Module: ASMREPL::Linux

Includes:
Fiddle
Defined in:
lib/asmrepl/linux.rb

Defined Under Namespace

Classes: ThreadState, Tracer

Constant Summary collapse

PROT_READ =

from sys/mman.h on macOS

0x01
PROT_WRITE =
0x02
PROT_EXEC =
0x04
MAP_PRIVATE =
0x0002
MAP_SHARED =
0x0001
MAP_ANON =
0x20
PTRACE_TRACEME =
0
PTRACE_CONT =
7
PTRACE_GETREGS =

x86_64-linux-gnu/sys/ptrace.h

12
PTRACE_SETREGS =
13

Constants included from Fiddle

Fiddle::SIZEOF_INT64_T

Class Method Summary collapse

Class Method Details

.jitbuffer(size) ⇒ Object



38
39
40
# File 'lib/asmrepl/linux.rb', line 38

def self.jitbuffer size
  Fisk::Helpers::JITBuffer.new mmap_jit(size), size
end

.make_function(name, args, ret) ⇒ Object



8
9
10
11
12
# File 'lib/asmrepl/linux.rb', line 8

def self.make_function name, args, ret
  ptr = Handle::DEFAULT[name]
  func = Function.new ptr, args, ret, name: name
  define_singleton_method name, &func.to_proc
end

.mmap_jit(size) ⇒ Object



32
33
34
35
36
# File 'lib/asmrepl/linux.rb', line 32

def self.mmap_jit size
  ptr = mmap 0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED | MAP_ANON, -1, 0
  ptr.size = size
  ptr
end

.tracemeObject



50
51
52
# File 'lib/asmrepl/linux.rb', line 50

def self.traceme
  raise unless ptrace(PTRACE_TRACEME, 0, 0, 0).zero?
end