/*
 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package jdk.tools.jaotc.jnilibelf;

public class JNILibELFAPI {

    static {
        System.loadLibrary("jelfshim");
    }

    
Definitions for file open.
/** * Definitions for file open. */
public static enum OpenFlags { O_RDONLY(0x0), O_WRONLY(0x1), O_RDWR(0x2), O_CREAT(0x40); private final int intVal; private OpenFlags(int v) { intVal = v; } public int intValue() { return intVal; } }
Definitions reflecting those in elf.h.
/** * Definitions reflecting those in elf.h. * */
public interface ELF { int EI_NIDENT = 16; int EI_CLASS = 4; /* File class byte index */ int ELFCLASSNONE = 0; /* Invalid class */ int ELFCLASS32 = 1; /* 32-bit objects */ int ELFCLASS64 = 2; /* 64-bit objects */ int ELFCLASSNUM = 3; int EI_DATA = 5; /* Data encoding byte index */ int ELFDATANONE = 0; /* Invalid data encoding */ int ELFDATA2LSB = 1; /* 2's complement, little endian */ int ELFDATA2MSB = 2; /* 2's complement, big endian */ int ELFDATANUM = 3; // Legal architecture values for e_machine (add others as needed) int EM_NONE = 0; /* No machine */ int EM_SPARC = 2; /* SUN SPARC */ int EM_386 = 3; /* Intel 80386 */ int EM_SPARCV9 = 43; /* SPARC v9 64-bit */ int EM_X64_64 = 62; /* AMD x86-64 architecture */ /* Legal values for e_type (object file type). */ int ET_NONE = 0; /* No file type */ int ET_REL = 1; /* Relocatable file */ int ET_EXEC = 2; /* Executable file */ int ET_DYN = 3; /* Shared object file */ int ET_CORE = 4; /* Core file */ int ET_NUM = 5; /* Number of defined types */ int ET_LOOS = 0xfe00; /* OS-specific range start */ int ET_HIOS = 0xfeff; /* OS-specific range end */ int ET_LOPROC = 0xff00; /* Processor-specific range start */ int ET_HIPROC = 0xffff; /* Processor-specific range end */ /* Legal values for e_version (version). */ int EV_NONE = 0; /* Invalid ELF version */ int EV_CURRENT = 1; /* Current version */ int EV_NUM = 2; /* Legal values for p_type (segment type). */ int PT_NULL = 0; /* Program header table entry unused */ int PT_LOAD = 1; /* Loadable program segment */ int PT_DYNAMIC = 2; /* Dynamic linking information */ int PT_INTERP = 3; /* Program interpreter */ int PT_NOTE = 4; /* Auxiliary information */ int PT_SHLIB = 5; /* Reserved */ int PT_PHDR = 6; /* Entry for header table itself */ int PT_TLS = 7; /* Thread-local storage segment */ int PT_NUM = 8; /* Number of defined types */ int PT_LOOS = 0x60000000; /* Start of OS-specific */ int PT_GNU_EH_FRAME = 0x6474e550; /* GCC .eh_frame_hdr segment */ int PT_GNU_STACK = 0x6474e551; /* Indicates stack executability */ int PT_GNU_RELRO = 0x6474e552; /* Read-only after relocation */ int PT_LOSUNW = 0x6ffffffa; int PT_SUNWBSS = 0x6ffffffa; /* Sun Specific segment */ int PT_SUNWSTACK = 0x6ffffffb; /* Stack segment */ int PT_HISUNW = 0x6fffffff; int PT_HIOS = 0x6fffffff; /* End of OS-specific */ int PT_LOPROC = 0x70000000; /* Start of processor-specific */ int PT_HIPROC = 0x7fffffff; /* End of processor-specific */ /* Special section indices. */ int SHN_UNDEF = 0; /* Undefined section */ int SHN_LORESERVE = 0xff00; /* Start of reserved indices */ int SHN_LOPROC = 0xff00; /* Start of processor-specific */ int SHN_BEFORE = 0xff00; /* Order section before all others (Solaris). */ int SHN_AFTER = 0xff01; /* Order section after all others (Solaris). */ int SHN_HIPROC = 0xff1f; /* End of processor-specific */ int SHN_LOOS = 0xff20; /* Start of OS-specific */ int SHN_HIOS = 0xff3f; /* End of OS-specific */ int SHN_ABS = 0xfff1; /* Associated symbol is absolute */ int SHN_COMMON = 0xfff2; /* Associated symbol is common */ int SHN_XINDEX = 0xffff; /* Index is in extra table. */ int SHN_HIRESERVE = 0xffff; /* End of reserved indices */ /* Legal values for sh_type (section type). */ int SHT_NULL = 0; /* Section header table entry unused */ int SHT_PROGBITS = 1; /* Program data */ int SHT_SYMTAB = 2; /* Symbol table */ int SHT_STRTAB = 3; /* String table */ int SHT_RELA = 4; /* Relocation entries with addends */ int SHT_HASH = 5; /* Symbol hash table */ int SHT_DYNAMIC = 6; /* Dynamic linking information */ int SHT_NOTE = 7; /* Notes */ int SHT_NOBITS = 8; /* Program space with no data (bss) */ int SHT_REL = 9; /* Relocation entries, no addends */ int SHT_SHLIB = 10; /* Reserved */ int SHT_DYNSYM = 11; /* Dynamic linker symbol table */ int SHT_INIT_ARRAY = 14; /* Array of constructors */ int SHT_FINI_ARRAY = 15; /* Array of destructors */ int SHT_PREINIT_ARRAY = 16; /* Array of pre-constructors */ int SHT_GROUP = 17; /* Section group */ int SHT_SYMTAB_SHNDX = 18; /* Extended section indeces */ int SHT_NUM = 19; /* Number of defined types. */ int SHT_LOOS = 0x60000000; /* Start OS-specific. */ int SHT_GNU_ATTRIBUTES = 0x6ffffff5; /* Object attributes. */ int SHT_GNU_HASH = 0x6ffffff6; /* GNU-style hash table. */ int SHT_GNU_LIBLIST = 0x6ffffff7; /* Prelink library list */ int SHT_CHECKSUM = 0x6ffffff8; /* Checksum for DSO content. */ int SHT_LOSUNW = 0x6ffffffa; /* Sun-specific low bound. */ int SHT_SUNW_move = 0x6ffffffa; int SHT_SUNW_COMDAT = 0x6ffffffb; int SHT_SUNW_syminfo = 0x6ffffffc; int SHT_GNU_verdef = 0x6ffffffd; /* Version definition section. */ int SHT_GNU_verneed = 0x6ffffffe; /* Version needs section. */ int SHT_GNU_versym = 0x6fffffff; /* Version symbol table. */ int SHT_HISUNW = 0x6fffffff; /* Sun-specific high bound. */ int SHT_HIOS = 0x6fffffff; /* End OS-specific type */ int SHT_LOPROC = 0x70000000; /* Start of processor-specific */ int SHT_HIPROC = 0x7fffffff; /* End of processor-specific */ int SHT_LOUSER = 0x80000000; /* Start of application-specific */ int SHT_HIUSER = 0x8fffffff; /* End of application-specific */ /* Legal values for sh_flags (section flags). */ int SHF_WRITE = (1 << 0); /* Writable */ int SHF_ALLOC = (1 << 1); /* Occupies memory during execution */ int SHF_EXECINSTR = (1 << 2); /* Executable */ int SHF_MERGE = (1 << 4); /* Might be merged */ int SHF_STRINGS = (1 << 5); /* Contains nul-terminated strings */ int SHF_INFO_LINK = (1 << 6); /* `sh_info' contains SHT index */ int SHF_LINK_ORDER = (1 << 7); /* Preserve order after combining */ int SHF_OS_NONCONFORMING = (1 << 8); /* Non-standard OS specific handling required */ int SHF_GROUP = (1 << 9); /* Section is member of a group. */ int SHF_TLS = (1 << 10); /* Section hold thread-local data. */ int SHF_MASKOS = 0x0ff00000; /* OS-specific. */ int SHF_MASKPROC = 0xf0000000; /* Processor-specific */ int SHF_ORDERED = (1 << 30); /* Special ordering requirement (Solaris). */ int SHF_EXCLUDE = (1 << 31); /* * Section is excluded unless referenced or allocated * (Solaris). */ /* Legal values for ST_BIND subfield of st_info (symbol binding). */ int STB_LOCAL = 0; /* Local symbol */ int STB_GLOBAL = 1; /* Global symbol */ int STB_WEAK = 2; /* Weak symbol */ int STB_NUM = 3; /* Number of defined types. */ int STB_LOOS = 10; /* Start of OS-specific */ int STB_GNU_UNIQUE = 10; /* Unique symbol. */ int STB_HIOS = 12; /* End of OS-specific */ int STB_LOPROC = 13; /* Start of processor-specific */ int STB_HIPROC = 15; /* End of processor-specific */ /* Legal values for ST_TYPE subfield of st_info (symbol type). */ int STT_NOTYPE = 0; /* Symbol type is unspecified */ int STT_OBJECT = 1; /* Symbol is a data object */ int STT_FUNC = 2; /* Symbol is a code object */ int STT_SECTION = 3; /* Symbol associated with a section */ int STT_FILE = 4; /* Symbol's name is file name */ int STT_COMMON = 5; /* Symbol is a common data object */ int STT_TLS = 6; /* Symbol is thread-local data object */ int STT_NUM = 7; /* Number of defined types. */ int STT_LOOS = 10; /* Start of OS-specific */ int STT_GNU_IFUNC = 10; /* Symbol is indirect code object */ int STT_HIOS = 12; /* End of OS-specific */ int STT_LOPROC = 13; /* Start of processor-specific */ int STT_HIPROC = 15; /* End of processor-specific */ }
Definitions reflecting those in libelf.h.
/** * Definitions reflecting those in libelf.h. * */
public interface LibELF { public static enum Elf_Cmd { ELF_C_NULL("NULL"), /* Nothing, terminate, or compute only. */ ELF_C_READ("READ"), /* Read .. */ ELF_C_RDWR("RDWR"), /* Read and write .. */ ELF_C_WRITE("WRITE"), /* Write .. */ ELF_C_CLR("CLR"), /* Clear flag. */ ELF_C_SET("SET"), /* Set flag. */ ELF_C_FDDONE("FDDONE"), /* * Signal that file descriptor will not be used anymore. */ ELF_C_FDREAD("FDREAD"), /* * Read rest of data so that file descriptor is not used * anymore. */ /* The following are Linux-only extensions. */ ELF_C_READ_MMAP("READ_MMAP"), /* Read, but mmap the file if possible. */ ELF_C_RDWR_MMAP("RDWR_MMAP"), /* Read and write, with mmap. */ ELF_C_WRITE_MMAP("WRITE_MMAP"), /* Write, with mmap. */ ELF_C_READ_MMAP_PRIVATE("READ_MMAP_PRIVATE"), /* * Read, but memory is writable, results * are not written to the file. */ ELF_C_EMPTY("EMPTY"), /* Copy basic file data but not the content. */ /* The following are SunOS-only enums */ ELF_C_WRIMAGE("WRIMAGE"), ELF_C_IMAGE("IMAGE"), /* Common last entry. */ ELF_C_NUM("NUM"); private final int intVal; private final String name; private Elf_Cmd(String cmd) { name = "ELF_C_" + cmd; switch (cmd) { case "NULL": // ELF_C_NULL has the same enum ordinal on both Linux and SunOS intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_NULL.ordinal(); break; case "READ": // ELF_C_READ has the same enum ordinal on both Linux and SunOS intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_READ.ordinal(); break; // Enums defined in libelf.h of both Linux and SunOS // but with different ordinals case "RDWR": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_RDWR.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_RDWR.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "WRITE": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_WRITE.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_WRITE.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "CLR": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_CLR.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_CLR.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "SET": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_SET.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_SET.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "FDDONE": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_FDDONE.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_FDDONE.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "FDREAD": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_FDREAD.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_FDREAD.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "NUM": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_NUM.ordinal(); } else if (JNIELFTargetInfo.getOsName().equals("sunos")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_NUM.ordinal(); } else { // Unsupported platform intVal = -1; } break; // Linux-only Elf_Cmd enums case "READ_MMAP": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_READ_MMAP.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "RDWR_MMAP": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_RDWR_MMAP.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "WRITE_MMAP": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_WRITE_MMAP.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "READ_MMAP_PRIVATE": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_READ_MMAP_PRIVATE.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "EMPTY": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.linux.Elf_Cmd.ELF_C_EMPTY.ordinal(); } else { // Unsupported platform intVal = -1; } break; // SunOS-only Elf_Cmd enums case "WRIMAGE": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_WRIMAGE.ordinal(); } else { // Unsupported platform intVal = -1; } break; case "IMAGE": if (JNIELFTargetInfo.getOsName().equals("linux")) { intVal = jdk.tools.jaotc.jnilibelf.sunos.Elf_Cmd.ELF_C_IMAGE.ordinal(); } else { // Unsupported platform intVal = -1; } break; default: intVal = -1; } } public int intValue() { assert intVal != -1 : "enum " + name + "not supported on " + JNIELFTargetInfo.getOsName(); return intVal; } public String getName() { return name; } } public static enum Elf_Type { ELF_T_BYTE(0), /* unsigned char */ ELF_T_ADDR(1), /* Elf32_Addr, Elf64_Addr, ... */ ELF_T_DYN(2), /* Dynamic section record. */ ELF_T_EHDR(3), /* ELF header. */ ELF_T_HALF(4), /* Elf32_Half, Elf64_Half, ... */ ELF_T_OFF(5), /* Elf32_Off, Elf64_Off, ... */ ELF_T_PHDR(6), /* Program header. */ ELF_T_RELA(7), /* Relocation entry with addend. */ ELF_T_REL(8), /* Relocation entry. */ ELF_T_SHDR(9), /* Section header. */ ELF_T_SWORD(10), /* Elf32_Sword, Elf64_Sword, ... */ ELF_T_SYM(11), /* Symbol record. */ ELF_T_WORD(12), /* Elf32_Word, Elf64_Word, ... */ ELF_T_XWORD(13), /* Elf32_Xword, Elf64_Xword, ... */ ELF_T_SXWORD(14), /* Elf32_Sxword, Elf64_Sxword, ... */ ELF_T_VDEF(15), /* Elf32_Verdef, Elf64_Verdef, ... */ ELF_T_VDAUX(16), /* Elf32_Verdaux, Elf64_Verdaux, ... */ ELF_T_VNEED(17), /* Elf32_Verneed, Elf64_Verneed, ... */ ELF_T_VNAUX(18), /* Elf32_Vernaux, Elf64_Vernaux, ... */ ELF_T_NHDR(19), /* Elf32_Nhdr, Elf64_Nhdr, ... */ ELF_T_SYMINFO(20), /* Elf32_Syminfo, Elf64_Syminfo, ... */ ELF_T_MOVE(21), /* Elf32_Move, Elf64_Move, ... */ ELF_T_LIB(22), /* Elf32_Lib, Elf64_Lib, ... */ ELF_T_GNUHASH(23), /* GNU-style hash section. */ ELF_T_AUXV(24), /* Elf32_auxv_t, Elf64_auxv_t, ... */ /* Keep this the last entry. */ ELF_T_NUM(25); private final int intVal; private Elf_Type(int v) { intVal = v; } public int intValue() { return intVal; } } /* Flags for the ELF structures. */ int ELF_F_DIRTY = 0x1; int ELF_F_LAYOUT = 0x4; int ELF_F_PERMISSIVE = 0x8; public static enum Elf_Kind { ELF_K_NONE(0), /* Unknown. */ ELF_K_AR(1), /* Archive. */ ELF_K_COFF(2), /* Stupid old COFF. */ ELF_K_ELF(3), /* ELF file. */ /* Keep this the last entry. */ ELF_K_NUM(4); private final int intVal; private Elf_Kind(int v) { intVal = v; } public int intValue() { return intVal; } } }
Invoke native libelf function unsigned int elf_version (unsigned int v).
Params:
  • v – version
Returns:return value of native call
/** * Invoke native libelf function unsigned int elf_version (unsigned int v). * * @param v version * @return return value of native call */
// Checkstyle: stop method name check static native int elf_version(int v);
Return version recorded in libelfshim.
Returns:return version string
/** * Return version recorded in libelfshim. * * @return return version string */
// Checkstyle: stop method name check static native String elfshim_version();
Invoke native libelf function Elf *elf_begin (int fildes, Elf_Cmd cmd, Elf *elfPtr).
Params:
  • fildes – open file descriptor
  • elfCRead – command
  • elfHdrPtr – pointer to ELF header
Returns:return value of native call
/** * Invoke native libelf function Elf *elf_begin (int fildes, Elf_Cmd cmd, Elf *elfPtr). * * @param fildes open file descriptor * @param elfCRead command * @param elfHdrPtr pointer to ELF header * @return return value of native call */
static native Pointer elf_begin(int fildes, int elfCRead, Pointer elfHdrPtr);
Invoke native libelf function elf_end (Elf *elfPtr).
Params:
  • elfPtr – pointer to ELF header
Returns:return value of native call
/** * Invoke native libelf function elf_end (Elf *elfPtr). * * @param elfPtr pointer to ELF header * @return return value of native call */
static native int elf_end(Pointer elfPtr);
Invoke native libelf function elf_end (Elf *elfPtr).
Params:
  • elfPtr – pointer to ELF header
Returns:return value of native call
/** * Invoke native libelf function elf_end (Elf *elfPtr). * * @param elfPtr pointer to ELF header * @return return value of native call */
static native int elf_kind(Pointer elfPtr);
Invoke native libelf function unsigned int elf_flagphdr (Elf *elf, Elf_Cmd cmd, unsigned int flags).
Params:
  • elfPtr – Pointer to ELF descriptor
  • cmd – command
  • flags – flags
Returns:return value of native call
/** * Invoke native libelf function unsigned int elf_flagphdr (Elf *elf, Elf_Cmd cmd, unsigned int * flags). * * @param elfPtr Pointer to ELF descriptor * @param cmd command * @param flags flags * @return return value of native call */
static native int elf_flagphdr(Pointer elfPtr, int cmd, int flags);
Invoke native libelf function Elf_Scn *elf_newscn (Elf *elfPtr).
Params:
  • elfPtr – Elf header pointer
Returns:return value of native call
/** * Invoke native libelf function Elf_Scn *elf_newscn (Elf *elfPtr). * * @param elfPtr Elf header pointer * @return return value of native call */
static native Pointer elf_newscn(Pointer elfPtr);
Invoke native libelf function Elf_Data *elf_newdata (Elf_Scn *scn).
Params:
  • scnPtr – pointer to section for which the new data descriptor is to be created
Returns:return value of native call
/** * Invoke native libelf function Elf_Data *elf_newdata (Elf_Scn *scn). * * @param scnPtr pointer to section for which the new data descriptor is to be created * @return return value of native call */
static native Pointer elf_newdata(Pointer scnPtr);
Invoke native libelf function Elf64_Shdr *elf64_getshdr (Elf_Scn *scnPtr).
Params:
  • scnPtr – pointer to section whose header information is to be retrieved
Returns:return value of native call
/** * Invoke native libelf function Elf64_Shdr *elf64_getshdr (Elf_Scn *scnPtr). * * @param scnPtr pointer to section whose header information is to be retrieved * @return return value of native call */
static native Pointer elf64_getshdr(Pointer scnPtr);
Invoke native libelf function loff_t elf_update (Elf *elfPtr, Elf_Cmd cmd).
Params:
  • elfPtr – Pointer to ELF descriptor
  • cmd – command
Returns:return value of native call
/** * Invoke native libelf function loff_t elf_update (Elf *elfPtr, Elf_Cmd cmd). * * @param elfPtr Pointer to ELF descriptor * @param cmd command * @return return value of native call */
static native long elf_update(Pointer elfPtr, int cmd);
Invoke native libelf function char *elf_errmsg (int error).
Params:
  • error – error
Returns:return value of native call
/** * Invoke native libelf function char *elf_errmsg (int error). * * @param error error * @return return value of native call */
static native String elf_errmsg(int error);
Invoke native libelf function size_t elf_ndxscn (Elf_Scn *scn).
Params:
  • scn – section pointer
Returns:return value of native call
/** * Invoke native libelf function size_t elf_ndxscn (Elf_Scn *scn). * * @param scn section pointer * @return return value of native call */
static native int elf_ndxscn(Pointer scn); /** * GELF interfaces */
Invoke native libelf function unsigned long int gelf_newehdr (Elf *elf, int elfClass).
Params:
  • elf – ELF Header pointer
  • elfclass – ELF class
Returns:return value of native call boxed as a pointer
/** * Invoke native libelf function unsigned long int gelf_newehdr (Elf *elf, int elfClass). * * @param elf ELF Header pointer * @param elfclass ELF class * @return return value of native call boxed as a pointer */
static native Pointer gelf_newehdr(Pointer elf, int elfclass);
Invoke native libelf function unsigned long int gelf_newphdr (Elf *elf, size_t phnum).
Params:
  • elf – ELF header pointer
  • phnum – number of program headers
Returns:return value of native call boxed as a pointer
/** * Invoke native libelf function unsigned long int gelf_newphdr (Elf *elf, size_t phnum). * * @param elf ELF header pointer * @param phnum number of program headers * @return return value of native call boxed as a pointer */
static native Pointer gelf_newphdr(Pointer elf, int phnum);
Miscellaneous convenience native methods that help peek and poke ELF data structures.
/** * Miscellaneous convenience native methods that help peek and poke ELF data structures. */
static native int size_of_Sym(int elfClass); static native int size_of_Rela(int elfClass); static native int size_of_Rel(int elfClass); static native void ehdr_set_data_encoding(Pointer ehdr, int val); static native void set_Ehdr_e_machine(int elfclass, Pointer structPtr, int val); static native void set_Ehdr_e_type(int elfclass, Pointer structPtr, int val); static native void set_Ehdr_e_version(int elfclass, Pointer structPtr, int val); static native void set_Ehdr_e_shstrndx(int elfclass, Pointer structPtr, int val); static native void phdr_set_type_self(int elfclass, Pointer ehdr, Pointer phdr); static native void set_Shdr_sh_name(int elfclass, Pointer structPtr, int val); static native void set_Shdr_sh_type(int elfclass, Pointer structPtr, int val); static native void set_Shdr_sh_flags(int elfclass, Pointer structPtr, int val); static native void set_Shdr_sh_entsize(int elfclass, Pointer structPtr, int val); static native void set_Shdr_sh_link(int elfclass, Pointer structPtr, int val); static native void set_Shdr_sh_info(int elfclass, Pointer structPtr, int val); static native void set_Data_d_align(Pointer structPtr, int val); static native void set_Data_d_off(Pointer structPtr, int val); static native void set_Data_d_buf(Pointer structPtr, Pointer val); static native void set_Data_d_type(Pointer structPtr, int val); static native void set_Data_d_size(Pointer structPtr, int val); static native void set_Data_d_version(Pointer structPtr, int val); static native long create_sym_entry(int elfclass, int index, int type, int bind, int shndx, int size, int value); static native long create_reloc_entry(int elfclass, int roffset, int symtabIdx, int relocType, int raddend, int reloca);
File Operations.
/** * File Operations. */
static native int open_rw(String fileName); static native int open(String fileName, int flags); static native int open(String fileName, int flags, int mode); static native int close(int fd); // Checkstyle: resume method name check }