Document ELFShim.
This commit is contained in:
parent
dbfc6dc7a5
commit
4304fa048e
@ -1,24 +1,42 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# {Pathname} extension for dealing with ELF files.
|
||||||
|
#
|
||||||
# @see https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
|
# @see https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header
|
||||||
|
#
|
||||||
|
# @api private
|
||||||
module ELFShim
|
module ELFShim
|
||||||
MAGIC_NUMBER_OFFSET = 0
|
MAGIC_NUMBER_OFFSET = 0
|
||||||
|
private_constant :MAGIC_NUMBER_OFFSET
|
||||||
MAGIC_NUMBER_ASCII = "\x7fELF"
|
MAGIC_NUMBER_ASCII = "\x7fELF"
|
||||||
|
private_constant :MAGIC_NUMBER_ASCII
|
||||||
|
|
||||||
OS_ABI_OFFSET = 0x07
|
OS_ABI_OFFSET = 0x07
|
||||||
|
private_constant :OS_ABI_OFFSET
|
||||||
OS_ABI_SYSTEM_V = 0
|
OS_ABI_SYSTEM_V = 0
|
||||||
|
private_constant :OS_ABI_SYSTEM_V
|
||||||
OS_ABI_LINUX = 3
|
OS_ABI_LINUX = 3
|
||||||
|
private_constant :OS_ABI_LINUX
|
||||||
|
|
||||||
TYPE_OFFSET = 0x10
|
TYPE_OFFSET = 0x10
|
||||||
|
private_constant :TYPE_OFFSET
|
||||||
TYPE_EXECUTABLE = 2
|
TYPE_EXECUTABLE = 2
|
||||||
|
private_constant :TYPE_EXECUTABLE
|
||||||
TYPE_SHARED = 3
|
TYPE_SHARED = 3
|
||||||
|
private_constant :TYPE_SHARED
|
||||||
|
|
||||||
ARCHITECTURE_OFFSET = 0x12
|
ARCHITECTURE_OFFSET = 0x12
|
||||||
|
private_constant :ARCHITECTURE_OFFSET
|
||||||
ARCHITECTURE_I386 = 0x3
|
ARCHITECTURE_I386 = 0x3
|
||||||
|
private_constant :ARCHITECTURE_I386
|
||||||
ARCHITECTURE_POWERPC = 0x14
|
ARCHITECTURE_POWERPC = 0x14
|
||||||
|
private_constant :ARCHITECTURE_POWERPC
|
||||||
ARCHITECTURE_ARM = 0x28
|
ARCHITECTURE_ARM = 0x28
|
||||||
|
private_constant :ARCHITECTURE_ARM
|
||||||
ARCHITECTURE_X86_64 = 0x62
|
ARCHITECTURE_X86_64 = 0x62
|
||||||
|
private_constant :ARCHITECTURE_X86_64
|
||||||
ARCHITECTURE_AARCH64 = 0xB7
|
ARCHITECTURE_AARCH64 = 0xB7
|
||||||
|
private_constant :ARCHITECTURE_AARCH64
|
||||||
|
|
||||||
def read_uint8(offset)
|
def read_uint8(offset)
|
||||||
read(1, offset).unpack1("C")
|
read(1, offset).unpack1("C")
|
||||||
@ -86,6 +104,9 @@ module ELFShim
|
|||||||
@dynamic_elf = patchelf_patcher.elf.segment_by_type(:DYNAMIC).present?
|
@dynamic_elf = patchelf_patcher.elf.segment_by_type(:DYNAMIC).present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Helper class for reading metadata from an ELF file.
|
||||||
|
#
|
||||||
|
# @api private
|
||||||
class Metadata
|
class Metadata
|
||||||
attr_reader :path, :dylib_id, :dylibs
|
attr_reader :path, :dylib_id, :dylibs
|
||||||
|
|
||||||
@ -125,6 +146,7 @@ module ELFShim
|
|||||||
[patcher.soname, patcher.needed]
|
[patcher.soname, patcher.needed]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
private_constant :Metadata
|
||||||
|
|
||||||
def rpath_using_patchelf_rb
|
def rpath_using_patchelf_rb
|
||||||
patchelf_patcher.runpath || patchelf_patcher.rpath
|
patchelf_patcher.runpath || patchelf_patcher.rpath
|
||||||
@ -138,6 +160,7 @@ module ELFShim
|
|||||||
def metadata
|
def metadata
|
||||||
@metadata ||= Metadata.new(self)
|
@metadata ||= Metadata.new(self)
|
||||||
end
|
end
|
||||||
|
private :metadata
|
||||||
|
|
||||||
def dylib_id
|
def dylib_id
|
||||||
metadata.dylib_id
|
metadata.dylib_id
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user