var searchIndex = {}; searchIndex["goblin"] = {"doc":"","items":[[0,"elf","goblin","",null,null],[3,"Elf","goblin::elf","",null,null],[12,"header","","",0,null],[12,"program_headers","","",0,null],[12,"dynamic","","",0,null],[12,"symtab","","",0,null],[12,"rela","","",0,null],[12,"pltrela","","",0,null],[12,"strtab","","",0,null],[12,"soname","","",0,null],[12,"interpreter","","",0,null],[12,"libraries","","",0,null],[12,"is_lib","","",0,null],[12,"size","","",0,null],[12,"entry","","",0,null],[0,"header","","",null,null],[3,"Header","goblin::elf::header","",null,null],[12,"e_ident","","",1,null],[12,"e_type","","",1,null],[12,"e_machine","","",1,null],[12,"e_version","","",1,null],[12,"e_entry","","",1,null],[12,"e_phoff","","",1,null],[12,"e_shoff","","",1,null],[12,"e_flags","","",1,null],[12,"e_ehsize","","",1,null],[12,"e_phentsize","","",1,null],[12,"e_phnum","","",1,null],[12,"e_shentsize","","",1,null],[12,"e_shnum","","",1,null],[12,"e_shstrndx","","",1,null],[17,"EHDR_SIZE","","",null,null],[17,"ET_NONE","","",null,null],[17,"ET_REL","","",null,null],[17,"ET_EXEC","","",null,null],[17,"ET_DYN","","",null,null],[17,"ET_CORE","","",null,null],[17,"ET_NUM","","",null,null],[17,"EI_DATA","","",null,null],[17,"ELFDATANONE","","",null,null],[17,"ELFDATA2LSB","","",null,null],[17,"ELFDATA2MSB","","",null,null],[11,"default","","",1,{"inputs":[],"output":{"name":"header"}}],[11,"clone","","",1,null],[11,"fmt","","",1,null],[11,"from_bytes","","Returns the corresponding ELF header from the given byte array",1,null],[11,"from_fd","","",1,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[0,"program_header","goblin::elf","",null,null],[3,"ProgramHeader","goblin::elf::program_header","",null,null],[12,"p_type","","",2,null],[12,"p_flags","","",2,null],[12,"p_offset","","",2,null],[12,"p_vaddr","","",2,null],[12,"p_paddr","","",2,null],[12,"p_filesz","","",2,null],[12,"p_memsz","","",2,null],[12,"p_align","","",2,null],[17,"PHDR_SIZE","","",null,null],[17,"PT_NULL","","",null,null],[17,"PT_LOAD","","",null,null],[17,"PT_DYNAMIC","","",null,null],[17,"PT_INTERP","","",null,null],[17,"PT_NOTE","","",null,null],[17,"PT_SHLIB","","",null,null],[17,"PT_PHDR","","",null,null],[17,"PT_TLS","","",null,null],[17,"PT_NUM","","",null,null],[17,"PT_LOOS","","",null,null],[17,"PT_GNU_EH_FRAME","","",null,null],[17,"PT_GNU_STACK","","",null,null],[17,"PT_GNU_RELRO","","",null,null],[17,"PT_LOSUNW","","",null,null],[17,"PT_SUNWBSS","","",null,null],[17,"PT_SUNWSTACK","","",null,null],[17,"PT_HISUNW","","",null,null],[17,"PT_HIOS","","",null,null],[17,"PT_LOPROC","","",null,null],[17,"PT_HIPROC","","",null,null],[17,"PF_X","","Segment is executable",null,null],[17,"PF_W","","Segment is writable",null,null],[17,"PF_R","","Segment is readable",null,null],[11,"default","","",2,{"inputs":[],"output":{"name":"programheader"}}],[11,"eq","","",2,null],[11,"ne","","",2,null],[11,"clone","","",2,null],[11,"fmt","","",2,null],[11,"from_bytes","","",2,{"inputs":[{"name":"vec"},{"name":"usize"}],"output":{"name":"vec"}}],[11,"from_raw_parts","","",2,null],[11,"from_fd","","",2,{"inputs":[{"name":"file"},{"name":"u64"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[0,"dyn","goblin::elf","",null,null],[3,"Dyn","goblin::elf::dyn","An entry in the dynamic array",null,null],[12,"d_tag","","",3,null],[12,"d_val","","",3,null],[3,"DynamicInfo","","Important dynamic linking info generated via a single pass through the _DYNAMIC array",null,null],[12,"rela","","",4,null],[12,"relasz","","",4,null],[12,"relaent","","",4,null],[12,"relacount","","",4,null],[12,"gnu_hash","","",4,null],[12,"hash","","",4,null],[12,"strtab","","",4,null],[12,"strsz","","",4,null],[12,"symtab","","",4,null],[12,"syment","","",4,null],[12,"pltgot","","",4,null],[12,"pltrelsz","","",4,null],[12,"pltrel","","",4,null],[12,"jmprel","","",4,null],[12,"verneed","","",4,null],[12,"verneednum","","",4,null],[12,"versym","","",4,null],[12,"init","","",4,null],[12,"fini","","",4,null],[12,"init_array","","",4,null],[12,"init_arraysz","","",4,null],[12,"fini_array","","",4,null],[12,"fini_arraysz","","",4,null],[12,"needed_count","","",4,null],[12,"flags","","",4,null],[12,"flags_1","","",4,null],[12,"soname","","",4,null],[5,"from_fd","","Returns a vector of dynamic entries from the given fd and program headers",null,null],[5,"from_raw","","Given a bias and a memory address (typically for a _correctly_ mmap'd binary in memory), returns the `_DYNAMIC` array as a slice of that memory",null,null],[5,"from_phdrs","","Maybe gets and returns the dynamic array with the same lifetime as the [phdrs], using the provided bias with wrapping addition.\nIf the bias is wrong, it will either segfault or give you incorrect values, beware",null,null],[5,"get_needed","","Gets the needed libraries from the `_DYNAMIC` array, with the str slices lifetime tied to the dynamic array/strtab's lifetime(s)",null,null],[17,"DT_NULL","","",null,null],[17,"DT_NEEDED","","",null,null],[17,"DT_PLTRELSZ","","",null,null],[17,"DT_PLTGOT","","",null,null],[17,"DT_HASH","","",null,null],[17,"DT_STRTAB","","",null,null],[17,"DT_SYMTAB","","",null,null],[17,"DT_RELA","","",null,null],[17,"DT_RELASZ","","",null,null],[17,"DT_RELAENT","","",null,null],[17,"DT_STRSZ","","",null,null],[17,"DT_SYMENT","","",null,null],[17,"DT_INIT","","",null,null],[17,"DT_FINI","","",null,null],[17,"DT_SONAME","","",null,null],[17,"DT_RPATH","","",null,null],[17,"DT_SYMBOLIC","","",null,null],[17,"DT_REL","","",null,null],[17,"DT_RELSZ","","",null,null],[17,"DT_RELENT","","",null,null],[17,"DT_PLTREL","","",null,null],[17,"DT_DEBUG","","",null,null],[17,"DT_TEXTREL","","",null,null],[17,"DT_JMPREL","","",null,null],[17,"DT_BIND_NOW","","",null,null],[17,"DT_INIT_ARRAY","","",null,null],[17,"DT_FINI_ARRAY","","",null,null],[17,"DT_INIT_ARRAYSZ","","",null,null],[17,"DT_FINI_ARRAYSZ","","",null,null],[17,"DT_RUNPATH","","",null,null],[17,"DT_FLAGS","","",null,null],[17,"DT_ENCODING","","",null,null],[17,"DT_PREINIT_ARRAY","","",null,null],[17,"DT_PREINIT_ARRAYSZ","","",null,null],[17,"DT_NUM","","",null,null],[17,"DT_LOOS","","",null,null],[17,"DT_HIOS","","",null,null],[17,"DT_LOPROC","","",null,null],[17,"DT_HIPROC","","",null,null],[17,"DT_VERSYM","","",null,null],[17,"DT_RELACOUNT","","",null,null],[17,"DT_RELCOUNT","","",null,null],[17,"DT_GNU_HASH","","",null,null],[17,"DT_VERDEF","","",null,null],[17,"DT_VERDEFNUM","","",null,null],[17,"DT_VERNEED","","",null,null],[17,"DT_VERNEEDNUM","","",null,null],[17,"DT_FLAGS_1","","",null,null],[17,"SIZEOF_DYN","","",null,null],[17,"DF_ORIGIN","","",null,null],[17,"DF_SYMBOLIC","","",null,null],[17,"DF_TEXTREL","","",null,null],[17,"DF_BIND_NOW","","",null,null],[17,"DF_STATIC_TLS","","",null,null],[17,"DF_1_NOW","","",null,null],[17,"DF_1_GLOBAL","","",null,null],[17,"DF_1_GROUP","","",null,null],[17,"DF_1_NODELETE","","",null,null],[17,"DF_1_LOADFLTR","","",null,null],[17,"DF_1_INITFIRST","","",null,null],[17,"DF_1_NOOPEN","","",null,null],[17,"DF_1_ORIGIN","","",null,null],[17,"DF_1_DIRECT","","",null,null],[17,"DF_1_TRANS","","",null,null],[17,"DF_1_INTERPOSE","","",null,null],[17,"DF_1_NODEFLIB","","",null,null],[17,"DF_1_NODUMP","","",null,null],[17,"DF_1_CONFALT","","",null,null],[17,"DF_1_ENDFILTEE","","",null,null],[17,"DF_1_DISPRELDNE","","",null,null],[17,"DF_1_DISPRELPND","","",null,null],[17,"DF_1_NODIRECT","","",null,null],[17,"DF_1_IGNMULDEF","","",null,null],[17,"DF_1_NOKSYMS","","",null,null],[17,"DF_1_NOHDR","","",null,null],[17,"DF_1_EDITED","","",null,null],[17,"DF_1_NORELOC","","",null,null],[17,"DF_1_SYMINTPOSE","","",null,null],[17,"DF_1_GLOBAUDIT","","",null,null],[17,"DF_1_SINGLETON","","",null,null],[11,"default","","",3,{"inputs":[],"output":{"name":"dyn"}}],[11,"eq","","",3,null],[11,"ne","","",3,null],[11,"clone","","",3,null],[11,"fmt","","",3,null],[11,"new","","",4,null],[11,"fmt","","",4,null],[0,"rela","goblin::elf","",null,null],[3,"Rela","goblin::elf::rela","",null,null],[12,"r_offset","","",5,null],[12,"r_info","","",5,null],[12,"r_addend","","",5,null],[5,"type_to_str","","",null,{"inputs":[{"name":"u64"}],"output":{"name":"str"}}],[5,"r_sym","","",null,{"inputs":[{"name":"u64"}],"output":{"name":"u64"}}],[5,"r_type","","",null,{"inputs":[{"name":"u64"}],"output":{"name":"u64"}}],[5,"r_info","","",null,{"inputs":[{"name":"u64"},{"name":"u64"}],"output":{"name":"u64"}}],[5,"from_raw","","Gets the rela entries given a rela u64 and the _size_ of the rela section in the binary, in bytes. Works for regular rela and the pltrela table.\nAssumes the pointer is valid and can safely return a slice of memory pointing to the relas because:\n1. `rela` points to memory received from the kernel (i.e., it loaded the executable), _or_\n2. The binary has already been mmapped (i.e., it's a `SharedObject`), and hence it's safe to return a slice of that memory.\n3. Or if you obtained the pointer in some other lawful manner",null,null],[5,"from_fd","","",null,{"inputs":[{"name":"file"},{"name":"usize"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[17,"R_X86_64_NONE","","",null,null],[17,"R_X86_64_64","","",null,null],[17,"R_X86_64_PC32","","",null,null],[17,"R_X86_64_GOT32","","",null,null],[17,"R_X86_64_PLT32","","",null,null],[17,"R_X86_64_COPY","","",null,null],[17,"R_X86_64_GLOB_DAT","","",null,null],[17,"R_X86_64_JUMP_SLOT","","",null,null],[17,"R_X86_64_RELATIVE","","",null,null],[17,"R_X86_64_GOTPCREL","","",null,null],[17,"R_X86_64_32","","",null,null],[17,"R_X86_64_32S","","",null,null],[17,"R_X86_64_16","","",null,null],[17,"R_X86_64_PC16","","",null,null],[17,"R_X86_64_8","","",null,null],[17,"R_X86_64_PC8","","",null,null],[17,"R_X86_64_DTPMOD64","","",null,null],[17,"R_X86_64_DTPOFF64","","",null,null],[17,"R_X86_64_TPOFF64","","",null,null],[17,"R_X86_64_TLSGD","","",null,null],[17,"R_X86_64_TLSLD","","",null,null],[17,"R_X86_64_DTPOFF32","","",null,null],[17,"R_X86_64_GOTTPOFF","","",null,null],[17,"R_X86_64_TPOFF32","","",null,null],[17,"R_X86_64_PC64","","",null,null],[17,"R_X86_64_GOTOFF64","","",null,null],[17,"R_X86_64_GOTPC32","","",null,null],[17,"R_X86_64_GOT64","","",null,null],[17,"R_X86_64_GOTPCREL64","","",null,null],[17,"R_X86_64_GOTPC64","","",null,null],[17,"R_X86_64_GOTPLT64","","",null,null],[17,"R_X86_64_PLTOFF64","","",null,null],[17,"R_X86_64_SIZE32","","",null,null],[17,"R_X86_64_SIZE64","","",null,null],[17,"R_X86_64_GOTPC32_TLSDESC","","",null,null],[17,"R_X86_64_TLSDESC_CALL","","",null,null],[17,"R_X86_64_TLSDESC","","",null,null],[17,"R_X86_64_IRELATIVE","","",null,null],[17,"R_X86_64_RELATIVE64","","",null,null],[17,"R_X86_64_NUM","","",null,null],[17,"SIZEOF_RELA","","",null,null],[11,"default","","",5,{"inputs":[],"output":{"name":"rela"}}],[11,"eq","","",5,null],[11,"ne","","",5,null],[11,"clone","","",5,null],[11,"fmt","","",5,null],[0,"sym","goblin::elf","",null,null],[3,"Sym","goblin::elf::sym","",null,null],[12,"st_name","","",6,null],[12,"st_info","","",6,null],[12,"st_other","","",6,null],[12,"st_shndx","","",6,null],[12,"st_value","","",6,null],[12,"st_size","","",6,null],[5,"st_bind","","",null,{"inputs":[{"name":"u8"}],"output":{"name":"u8"}}],[5,"st_type","","",null,{"inputs":[{"name":"u8"}],"output":{"name":"u8"}}],[5,"is_import","","",null,{"inputs":[{"name":"sym"}],"output":{"name":"bool"}}],[5,"get_type","","Convenience function to get the &'static str type of this symbol",null,{"inputs":[{"name":"sym"}],"output":{"name":"str"}}],[5,"bind_to_str","","",null,{"inputs":[{"name":"u8"}],"output":{"name":"str"}}],[5,"type_to_str","","",null,{"inputs":[{"name":"u8"}],"output":{"name":"str"}}],[5,"from_raw","","",null,null],[5,"from_fd","","",null,{"inputs":[{"name":"file"},{"name":"usize"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[17,"SIZEOF_SYM","","",null,null],[17,"STB_LOCAL","","",null,null],[17,"STB_GLOBAL","","",null,null],[17,"STB_WEAK","","",null,null],[17,"STB_NUM","","",null,null],[17,"STB_LOOS","","",null,null],[17,"STB_GNU_UNIQUE","","",null,null],[17,"STB_HIOS","","",null,null],[17,"STB_LOPROC","","",null,null],[17,"STB_HIPROC","","",null,null],[17,"STT_NOTYPE","","",null,null],[17,"STT_OBJECT","","",null,null],[17,"STT_FUNC","","",null,null],[17,"STT_SECTION","","",null,null],[17,"STT_FILE","","",null,null],[17,"STT_COMMON","","",null,null],[17,"STT_TLS","","",null,null],[17,"STT_NUM","","",null,null],[17,"STT_LOOS","","",null,null],[17,"STT_GNU_IFUNC","","",null,null],[17,"STT_HIOS","","",null,null],[17,"STT_LOPROC","","",null,null],[17,"STT_HIPROC","","",null,null],[11,"default","","",6,{"inputs":[],"output":{"name":"sym"}}],[11,"eq","","",6,null],[11,"ne","","",6,null],[11,"clone","","",6,null],[11,"fmt","","",6,null],[0,"strtab","goblin::elf","",null,null],[3,"Strtab","goblin::elf::strtab","",null,null],[11,"index","","",7,null],[11,"fmt","","",7,null],[11,"from_raw","","",7,null],[11,"from_fd","","",7,{"inputs":[{"name":"file"},{"name":"usize"},{"name":"usize"}],"output":{"name":"result"}}],[11,"get","","Thanks to reem on #rust for this suggestion",7,null],[11,"to_vec","","",7,null],[0,"gnu_hash","goblin::elf","",null,null],[3,"GnuHash","goblin::elf::gnu_hash","TODO add proper writeup for how this is constructed, how it resolves symbols, and how it works, see: https://blogs.oracle.com/ali/entry/gnu_hash_elf_sections\nA Gnu Hash table as 4 sections:\n1. Header\n2. Bloom Filter\n3. Hash Buckets\n4. Hash Values\nThe header has is an array of four (4) u32s:\na. nbuckets\nb. symndx\nc. maskwords\nd. shift2",null,null],[5,"hash","","GNU hash function",null,{"inputs":[{"name":"str"}],"output":{"name":"u32"}}],[11,"new","","",8,null],[11,"find","","Given a name, a hash of that name, a strtab and corresponding symtab to look in, maybe returns a Sym",8,null],[11,"fmt","goblin::elf","",0,null],[11,"from_path","","",0,{"inputs":[{"name":"path"}],"output":{"name":"result"}}]],"paths":[[3,"Elf"],[3,"Header"],[3,"ProgramHeader"],[3,"Dyn"],[3,"DynamicInfo"],[3,"Rela"],[3,"Sym"],[3,"Strtab"],[3,"GnuHash"]]}; initSearch(searchIndex);