Module: OneGadget::ABI

Defined in:
lib/one_gadget/abi.rb

Overview

Defines the ABI of different architectures.

Constant Summary collapse

X86_32 =

Registers of i386.

%w[eax ebx ecx edx edi esi ebp esp] + 0.upto(7).map { |i| "xmm#{i}" }
X86_64 =

Registers of x86_64.

X86_32 +
%w[rax rbx rcx rdx rdi rsi rbp rsp] +
8.upto(15).map { |i| "r#{i}" } +
8.upto(15).map { |i| "xmm#{i}" }
AARCH64 =

Registers of AArch64.

%w[xzr wzr sp] + 0.upto(30).map { |i| ["x#{i}", "w#{i}"] }.flatten

Class Method Summary collapse

Class Method Details

.aarch64Array<String>

Registers’ name of aarch64.

Returns:

  • (Array<String>)

    List of registers.



33
34
35
# File 'lib/one_gadget/abi.rb', line 33

def aarch64
  AARCH64
end

.allArray<String>

Returns all names of registers.

Returns:

  • (Array<String>)

    List of registers.



39
40
41
# File 'lib/one_gadget/abi.rb', line 39

def all
  amd64 + aarch64
end

.amd64Array<String>

Registers’ name of amd64.

Returns:

  • (Array<String>)

    List of registers.



21
22
23
# File 'lib/one_gadget/abi.rb', line 21

def amd64
  X86_64
end

.i386Array<String>

Registers’ name of i386.

Returns:

  • (Array<String>)

    List of registers.



27
28
29
# File 'lib/one_gadget/abi.rb', line 27

def i386
  X86_32
end

.stack_register?(reg) ⇒ Boolean

Checks if the register is a stack-related pointer.

Parameters:

  • reg (String)

    Register’s name.

Returns:

  • (Boolean)


47
48
49
# File 'lib/one_gadget/abi.rb', line 47

def stack_register?(reg)
  %w[esp ebp rsp rbp sp x29].include?(reg)
end