var searchIndex = {}; searchIndex["goblin"] = {"doc":"# libGoblin\n![say the right words](https://s-media-cache-ak0.pinimg.com/736x/1b/6a/aa/1b6aaa2bae005e2fed84b1a7c32ecb1b.jpg)","items":[[0,"elf","goblin","Access ELF constants, other helper functions, which are independent of ELF bithood.\nAlso provides simple parser which returns an Elf64 or Elf32 "pre-built" binary.\n**WARNING**: to use the automagic ELF datatype union parser, you _must_ enable both elf and elf32 features - i.e., do not use `no_elf` **NOR** `no_elf32`, otherwise you'll get obscure errors about [goblin::elf::from_fd](fn.from_fd.html) missing.",null,null],[4,"Binary","goblin::elf","",null,null],[13,"Elf32","","",0,null],[13,"Elf64","","",0,null],[5,"from_fd","","",null,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[0,"strtab","","",null,null],[3,"Strtab","goblin::elf::strtab","",null,null],[11,"index","","",1,null],[11,"fmt","","",1,null],[11,"from_raw","","",1,null],[11,"from_fd","","",1,{"inputs":[{"name":"file"},{"name":"usize"},{"name":"usize"}],"output":{"name":"result"}}],[11,"get","","",1,null],[11,"to_vec","","",1,null],[0,"header","goblin::elf","",null,null],[5,"et_to_str","goblin::elf::header","",null,{"inputs":[{"name":"u16"}],"output":{"name":"str"}}],[5,"peek","","",null,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[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,"ELFMAG","","",null,null],[17,"SELFMAG","","",null,null],[17,"EI_CLASS","","",null,null],[17,"ELFCLASSNONE","","",null,null],[17,"ELFCLASS32","","",null,null],[17,"ELFCLASS64","","",null,null],[17,"ELFCLASSNUM","","",null,null],[17,"EI_DATA","","",null,null],[17,"ELFDATANONE","","",null,null],[17,"ELFDATA2LSB","","",null,null],[17,"ELFDATA2MSB","","",null,null],[17,"SIZEOF_IDENT","","",null,null],[0,"program_header","goblin::elf","",null,null],[5,"pt_to_str","goblin::elf::program_header","",null,{"inputs":[{"name":"u32"}],"output":{"name":"str"}}],[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],[0,"section_header","goblin::elf","",null,null],[17,"SHN_UNDEF","goblin::elf::section_header","",null,null],[17,"SHN_LORESERVE","","",null,null],[17,"SHN_LOPROC","","",null,null],[17,"SHN_BEFORE","","",null,null],[17,"SHN_AFTER","","",null,null],[17,"SHN_HIPROC","","",null,null],[17,"SHN_LOOS","","",null,null],[17,"SHN_HIOS","","",null,null],[17,"SHN_ABS","","",null,null],[17,"SHN_COMMON","","",null,null],[17,"SHN_XINDEX","","",null,null],[17,"SHN_HIRESERVE","","",null,null],[17,"SHT_NULL","","",null,null],[17,"SHT_PROGBITS","","",null,null],[17,"SHT_SYMTAB","","",null,null],[17,"SHT_STRTAB","","",null,null],[17,"SHT_RELA","","",null,null],[17,"SHT_HASH","","",null,null],[17,"SHT_DYNAMIC","","",null,null],[17,"SHT_NOTE","","",null,null],[17,"SHT_NOBITS","","",null,null],[17,"SHT_REL","","",null,null],[17,"SHT_SHLIB","","",null,null],[17,"SHT_DYNSYM","","",null,null],[17,"SHT_INIT_ARRAY","","",null,null],[17,"SHT_FINI_ARRAY","","",null,null],[17,"SHT_PREINIT_ARRAY","","",null,null],[17,"SHT_GROUP","","",null,null],[17,"SHT_SYMTAB_SHNDX","","",null,null],[17,"SHT_NUM","","",null,null],[17,"SHT_LOOS","","",null,null],[17,"SHT_GNU_ATTRIBUTES","","",null,null],[17,"SHT_GNU_HASH","","",null,null],[17,"SHT_GNU_LIBLIST","","",null,null],[17,"SHT_CHECKSUM","","",null,null],[17,"SHT_LOSUNW","","",null,null],[17,"SHT_SUNW_MOVE","","",null,null],[17,"SHT_SUNW_COMDAT","","",null,null],[17,"SHT_SUNW_SYMINFO","","",null,null],[17,"SHT_GNU_VERDEF","","",null,null],[17,"SHT_GNU_VERNEED","","",null,null],[17,"SHT_GNU_VERSYM","","",null,null],[17,"SHT_HISUNW","","",null,null],[17,"SHT_HIOS","","",null,null],[17,"SHT_LOPROC","","",null,null],[17,"SHT_HIPROC","","",null,null],[17,"SHT_LOUSER","","",null,null],[17,"SHT_HIUSER","","",null,null],[17,"SHF_WRITE","","",null,null],[17,"SHF_ALLOC","","",null,null],[17,"SHF_EXECINSTR","","",null,null],[17,"SHF_MERGE","","",null,null],[17,"SHF_STRINGS","","",null,null],[17,"SHF_INFO_LINK","","",null,null],[17,"SHF_LINK_ORDER","","",null,null],[17,"SHF_OS_NONCONFORMING","","",null,null],[17,"SHF_GROUP","","",null,null],[17,"SHF_TLS","","",null,null],[17,"SHF_COMPRESSED","","",null,null],[17,"SHF_MASKOS","","",null,null],[17,"SHF_MASKPROC","","",null,null],[17,"SHF_ORDERED","","",null,null],[0,"sym","goblin::elf","",null,null],[5,"st_bind","goblin::elf::sym","",null,{"inputs":[{"name":"u8"}],"output":{"name":"u8"}}],[5,"st_type","","",null,{"inputs":[{"name":"u8"}],"output":{"name":"u8"}}],[5,"is_import","","",null,{"inputs":[{"name":"u8"},{"name":"u8"}],"output":{"name":"bool"}}],[5,"get_type","","Convenience function to get the &'static str type from the symbols st_info",null,{"inputs":[{"name":"u8"}],"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"}}],[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],[0,"dyn","goblin::elf","",null,null],[5,"tag_to_str","goblin::elf::dyn","Converts a tag to its string representation",null,{"inputs":[{"name":"u64"}],"output":{"name":"str"}}],[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,"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],[0,"rela","goblin::elf","",null,null],[5,"type_to_str","goblin::elf::rela","",null,{"inputs":[{"name":"u64"}],"output":{"name":"str"}}],[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],[11,"fmt","goblin::elf","",0,null],[0,"elf64","goblin","The ELF 64-bit struct definitions and associated values",null,null],[3,"Binary","goblin::elf64","",null,null],[12,"header","","",2,null],[12,"program_headers","","",2,null],[12,"dynamic","","",2,null],[12,"symtab","","",2,null],[12,"rela","","",2,null],[12,"pltrela","","",2,null],[12,"strtab","","",2,null],[12,"soname","","",2,null],[12,"interpreter","","",2,null],[12,"libraries","","",2,null],[12,"is_lib","","",2,null],[12,"size","","",2,null],[12,"entry","","",2,null],[0,"header","","",null,null],[3,"Header","goblin::elf64::header","",null,null],[12,"e_ident","","",3,null],[12,"e_type","","",3,null],[12,"e_machine","","",3,null],[12,"e_version","","",3,null],[12,"e_entry","","",3,null],[12,"e_phoff","","",3,null],[12,"e_shoff","","",3,null],[12,"e_flags","","",3,null],[12,"e_ehsize","","",3,null],[12,"e_phentsize","","",3,null],[12,"e_phnum","","",3,null],[12,"e_shentsize","","",3,null],[12,"e_shnum","","",3,null],[12,"e_shstrndx","","",3,null],[11,"fmt","","",3,null],[11,"from_bytes","","Returns the corresponding ELF header from the given byte array",3,null],[11,"from_fd","","",3,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[17,"SIZEOF_EHDR","","",null,null],[17,"ELFCLASS","","",null,null],[11,"default","","",3,{"inputs":[],"output":{"name":"header"}}],[11,"clone","","",3,null],[0,"program_header","goblin::elf64","",null,null],[3,"ProgramHeader","goblin::elf64::program_header","",null,null],[12,"p_type","","",4,null],[12,"p_flags","","",4,null],[12,"p_offset","","",4,null],[12,"p_vaddr","","",4,null],[12,"p_paddr","","",4,null],[12,"p_filesz","","",4,null],[12,"p_memsz","","",4,null],[12,"p_align","","",4,null],[11,"fmt","","",4,null],[11,"from_bytes","","",4,null],[11,"from_raw_parts","","",4,null],[11,"from_fd","","",4,{"inputs":[{"name":"file"},{"name":"u64"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[17,"SIZEOF_PHDR","","",null,null],[11,"default","","",4,{"inputs":[],"output":{"name":"programheader"}}],[11,"eq","","",4,null],[11,"ne","","",4,null],[11,"clone","","",4,null],[0,"dyn","goblin::elf64","",null,null],[3,"Dyn","goblin::elf64::dyn","An entry in the dynamic array",null,null],[12,"d_tag","","",5,null],[12,"d_val","","",5,null],[3,"DynamicInfo","","Important dynamic linking info generated via a single pass through the _DYNAMIC array",null,null],[12,"rela","","",6,null],[12,"relasz","","",6,null],[12,"relaent","","",6,null],[12,"relacount","","",6,null],[12,"gnu_hash","","",6,null],[12,"hash","","",6,null],[12,"strtab","","",6,null],[12,"strsz","","",6,null],[12,"symtab","","",6,null],[12,"syment","","",6,null],[12,"pltgot","","",6,null],[12,"pltrelsz","","",6,null],[12,"pltrel","","",6,null],[12,"jmprel","","",6,null],[12,"verneed","","",6,null],[12,"verneednum","","",6,null],[12,"versym","","",6,null],[12,"init","","",6,null],[12,"fini","","",6,null],[12,"init_array","","",6,null],[12,"init_arraysz","","",6,null],[12,"fini_array","","",6,null],[12,"fini_arraysz","","",6,null],[12,"needed_count","","",6,null],[12,"flags","","",6,null],[12,"flags_1","","",6,null],[12,"soname","","",6,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],[5,"from_fd","","Returns a vector of dynamic entries from the given fd and program headers",null,null],[11,"fmt","","",5,null],[11,"fmt","","",6,null],[17,"SIZEOF_DYN","","",null,null],[11,"default","","",5,{"inputs":[],"output":{"name":"dyn"}}],[11,"eq","","",5,null],[11,"ne","","",5,null],[11,"clone","","",5,null],[11,"new","","",6,null],[0,"rela","goblin::elf64","",null,null],[3,"Rela","goblin::elf64::rela","",null,null],[12,"r_offset","","",7,null],[12,"r_info","","",7,null],[12,"r_addend","","",7,null],[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"}}],[11,"fmt","","",7,null],[17,"SIZEOF_RELA","","",null,null],[11,"default","","",7,{"inputs":[],"output":{"name":"rela"}}],[11,"eq","","",7,null],[11,"ne","","",7,null],[11,"clone","","",7,null],[0,"sym","goblin::elf64","",null,null],[3,"Sym","goblin::elf64::sym","",null,null],[12,"st_name","","",8,null],[12,"st_info","","",8,null],[12,"st_other","","",8,null],[12,"st_shndx","","",8,null],[12,"st_value","","",8,null],[12,"st_size","","",8,null],[5,"from_raw","","",null,null],[5,"from_fd","","",null,{"inputs":[{"name":"file"},{"name":"usize"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[11,"fmt","","",8,null],[17,"SIZEOF_SYM","","",null,null],[11,"default","","",8,{"inputs":[],"output":{"name":"sym"}}],[11,"eq","","",8,null],[11,"ne","","",8,null],[11,"clone","","",8,null],[0,"gnu_hash","goblin::elf64","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:\n 1. Header\n 2. Bloom Filter\n 3. Hash Buckets\n 4. Hash Values",null,null],[3,"GnuHash","goblin::elf64::gnu_hash","",null,null],[5,"hash","","GNU hash function: takes a string and returns the u32 hash of that string",null,{"inputs":[{"name":"str"}],"output":{"name":"u32"}}],[11,"new","","",9,null],[11,"find","","Given a name, a hash of that name, a strtab and corresponding symtab to look in, maybe returns a Sym",9,null],[11,"fmt","goblin::elf64","",2,null],[11,"from_fd","","",2,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[11,"from_path","","",2,{"inputs":[{"name":"path"}],"output":{"name":"result"}}],[0,"elf32","goblin","The ELF 32-bit struct definitions and associated values",null,null],[3,"Binary","goblin::elf32","",null,null],[12,"header","","",10,null],[12,"program_headers","","",10,null],[12,"dynamic","","",10,null],[12,"symtab","","",10,null],[12,"rela","","",10,null],[12,"pltrela","","",10,null],[12,"strtab","","",10,null],[12,"soname","","",10,null],[12,"interpreter","","",10,null],[12,"libraries","","",10,null],[12,"is_lib","","",10,null],[12,"size","","",10,null],[12,"entry","","",10,null],[0,"header","","",null,null],[3,"Header","goblin::elf32::header","",null,null],[12,"e_ident","","",11,null],[12,"e_type","","",11,null],[12,"e_machine","","",11,null],[12,"e_version","","",11,null],[12,"e_entry","","",11,null],[12,"e_phoff","","",11,null],[12,"e_shoff","","",11,null],[12,"e_flags","","",11,null],[12,"e_ehsize","","",11,null],[12,"e_phentsize","","",11,null],[12,"e_phnum","","",11,null],[12,"e_shentsize","","",11,null],[12,"e_shnum","","",11,null],[12,"e_shstrndx","","",11,null],[11,"fmt","","",11,null],[11,"from_bytes","","Returns the corresponding ELF header from the given byte array",11,null],[11,"from_fd","","",11,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[17,"SIZEOF_EHDR","","",null,null],[17,"ELFCLASS","","",null,null],[11,"default","","",11,{"inputs":[],"output":{"name":"header"}}],[11,"clone","","",11,null],[0,"sym","goblin::elf32","",null,null],[3,"Sym","goblin::elf32::sym","",null,null],[12,"st_name","","",12,null],[12,"st_value","","",12,null],[12,"st_size","","",12,null],[12,"st_info","","",12,null],[12,"st_other","","",12,null],[12,"st_shndx","","",12,null],[5,"from_raw","","",null,null],[5,"from_fd","","",null,{"inputs":[{"name":"file"},{"name":"usize"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[11,"fmt","","",12,null],[17,"SIZEOF_SYM","","",null,null],[11,"default","","",12,{"inputs":[],"output":{"name":"sym"}}],[11,"eq","","",12,null],[11,"ne","","",12,null],[11,"clone","","",12,null],[0,"program_header","goblin::elf32","",null,null],[3,"ProgramHeader","goblin::elf32::program_header","",null,null],[12,"p_type","","",13,null],[12,"p_offset","","",13,null],[12,"p_vaddr","","",13,null],[12,"p_paddr","","",13,null],[12,"p_filesz","","",13,null],[12,"p_memsz","","",13,null],[12,"p_flags","","",13,null],[12,"p_align","","",13,null],[11,"fmt","","",13,null],[11,"from_bytes","","",13,null],[11,"from_raw_parts","","",13,null],[11,"from_fd","","",13,{"inputs":[{"name":"file"},{"name":"u64"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[17,"SIZEOF_PHDR","","",null,null],[11,"default","","",13,{"inputs":[],"output":{"name":"programheader"}}],[11,"eq","","",13,null],[11,"ne","","",13,null],[11,"clone","","",13,null],[0,"section_header","goblin::elf32","",null,null],[3,"SectionHeader","goblin::elf32::section_header","",null,null],[17,"SIZEOF_SHDR","","",null,null],[11,"default","","",14,{"inputs":[],"output":{"name":"sectionheader"}}],[11,"eq","","",14,null],[11,"ne","","",14,null],[11,"clone","","",14,null],[11,"fmt","","",14,null],[0,"dyn","goblin::elf32","",null,null],[3,"Dyn","goblin::elf32::dyn","",null,null],[12,"d_tag","","",15,null],[12,"d_val","","",15,null],[3,"DynamicInfo","","Important dynamic linking info generated via a single pass through the _DYNAMIC array",null,null],[12,"rela","","",16,null],[12,"relasz","","",16,null],[12,"relaent","","",16,null],[12,"relacount","","",16,null],[12,"gnu_hash","","",16,null],[12,"hash","","",16,null],[12,"strtab","","",16,null],[12,"strsz","","",16,null],[12,"symtab","","",16,null],[12,"syment","","",16,null],[12,"pltgot","","",16,null],[12,"pltrelsz","","",16,null],[12,"pltrel","","",16,null],[12,"jmprel","","",16,null],[12,"verneed","","",16,null],[12,"verneednum","","",16,null],[12,"versym","","",16,null],[12,"init","","",16,null],[12,"fini","","",16,null],[12,"init_array","","",16,null],[12,"init_arraysz","","",16,null],[12,"fini_array","","",16,null],[12,"fini_arraysz","","",16,null],[12,"needed_count","","",16,null],[12,"flags","","",16,null],[12,"flags_1","","",16,null],[12,"soname","","",16,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],[5,"from_fd","","Returns a vector of dynamic entries from the given fd and program headers",null,null],[11,"fmt","","",15,null],[11,"fmt","","",16,null],[17,"SIZEOF_DYN","","",null,null],[11,"default","","",15,{"inputs":[],"output":{"name":"dyn"}}],[11,"eq","","",15,null],[11,"ne","","",15,null],[11,"clone","","",15,null],[11,"new","","",16,null],[0,"rela","goblin::elf32","",null,null],[3,"Rel","goblin::elf32::rela","",null,null],[12,"r_offset","","",17,null],[12,"r_info","","",17,null],[3,"Rela","","",null,null],[12,"r_offset","","",18,null],[12,"r_info","","",18,null],[12,"r_addend","","",18,null],[5,"r_sym","","",null,{"inputs":[{"name":"u32"}],"output":{"name":"u32"}}],[5,"r_type","","",null,{"inputs":[{"name":"u32"}],"output":{"name":"u32"}}],[5,"r_info","","",null,{"inputs":[{"name":"u32"},{"name":"u32"}],"output":{"name":"u32"}}],[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"}}],[11,"fmt","","",18,null],[17,"SIZEOF_RELA","","",null,null],[11,"default","","",17,{"inputs":[],"output":{"name":"rel"}}],[11,"eq","","",17,null],[11,"ne","","",17,null],[11,"clone","","",17,null],[11,"fmt","","",17,null],[11,"default","","",18,{"inputs":[],"output":{"name":"rela"}}],[11,"eq","","",18,null],[11,"ne","","",18,null],[11,"clone","","",18,null],[11,"fmt","goblin::elf32","",10,null],[11,"from_fd","","",10,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[11,"from_path","","",10,{"inputs":[{"name":"path"}],"output":{"name":"result"}}],[0,"mach","goblin","The mach module: Work in Progress!",null,null],[3,"Mach","goblin::mach","",null,null],[12,"header","","",19,null],[0,"header","","",null,null],[3,"Header","goblin::mach::header","",null,null],[12,"magic","","",20,null],[12,"cputype","","",20,null],[12,"cpusubtype","","",20,null],[12,"padding1","","",20,null],[12,"padding2","","",20,null],[12,"caps","","",20,null],[12,"filetype","","",20,null],[12,"ncmds","","",20,null],[12,"sizeofcmds","","",20,null],[12,"flags","","",20,null],[12,"reserved","","",20,null],[5,"flag_to_str","","",null,{"inputs":[{"name":"u32"}],"output":{"name":"str"}}],[5,"filetype_to_str","","",null,{"inputs":[{"name":"u32"}],"output":{"name":"str"}}],[17,"MH_NOUNDEFS","","",null,null],[17,"MH_INCRLINK","","",null,null],[17,"MH_DYLDLINK","","",null,null],[17,"MH_BINDATLOAD","","",null,null],[17,"MH_PREBOUND","","",null,null],[17,"MH_SPLIT_SEGS","","",null,null],[17,"MH_LAZY_INIT","","",null,null],[17,"MH_TWOLEVEL","","",null,null],[17,"MH_FORCE_FLAT","","",null,null],[17,"MH_NOMULTIDEFS","","",null,null],[17,"MH_NOFIXPREBINDING","","",null,null],[17,"MH_PREBINDABLE","","",null,null],[17,"MH_ALLMODSBOUND","","",null,null],[17,"MH_SUBSECTIONS_VIA_SYMBOLS","","",null,null],[17,"MH_CANONICAL","","",null,null],[17,"MH_WEAK_DEFINES","","",null,null],[17,"MH_BINDS_TO_WEAK","","",null,null],[17,"MH_ALLOW_STACK_EXECUTION","","",null,null],[17,"MH_ROOT_SAFE","","",null,null],[17,"MH_SETUID_SAFE","","",null,null],[17,"MH_NO_REEXPORTED_DYLIBS","","",null,null],[17,"MH_PIE","","",null,null],[17,"MH_DEAD_STRIPPABLE_DYLIB","","",null,null],[17,"MH_HAS_TLV_DESCRIPTORS","","",null,null],[17,"MH_NO_HEAP_EXECUTION","","",null,null],[17,"MH_APP_EXTENSION_SAFE","","",null,null],[17,"MH_MAGIC","","",null,null],[17,"MH_CIGAM","","",null,null],[17,"MH_MAGIC_64","","",null,null],[17,"MH_CIGAM_64","","",null,null],[17,"MH_OBJECT","","",null,null],[17,"MH_EXECUTE","","",null,null],[17,"MH_FVMLIB","","",null,null],[17,"MH_CORE","","",null,null],[17,"MH_PRELOAD","","",null,null],[17,"MH_DYLIB","","",null,null],[17,"MH_DYLINKER","","",null,null],[17,"MH_BUNDLE","","",null,null],[17,"MH_DYLIB_STUB","","",null,null],[17,"MH_DSYM","","",null,null],[17,"MH_KEXT_BUNDLE","","",null,null],[17,"SIZEOF_MACH_HEADER","","",null,null],[11,"default","","",20,{"inputs":[],"output":{"name":"header"}}],[11,"clone","","",20,null],[11,"fmt","","",20,null],[11,"from_bytes","","Returns the corresponding Mach-o header from the given byte array",20,null],[11,"from_fd","","",20,{"inputs":[{"name":"file"},{"name":"u64"}],"output":{"name":"result"}}],[0,"constants","goblin::mach","",null,null],[0,"cputype","goblin::mach::constants","",null,null],[5,"cpu_type_to_str","goblin::mach::constants::cputype","",null,{"inputs":[{"name":"u32"}],"output":{"name":"str"}}],[17,"CPU_ARCH_MASK","","",null,null],[17,"CPU_ARCH_ABI64","","",null,null],[17,"CPU_TYPE_X86","","",null,null],[17,"CPU_TYPE_ARM","","",null,null],[17,"CPU_TYPE_X86_64","","",null,null],[17,"CPU_TYPE_ARM64","","",null,null],[17,"DYLD_MACOSX_VERSION_10_4","goblin::mach::constants","",null,null],[17,"DYLD_MACOSX_VERSION_10_5","","",null,null],[17,"DYLD_MACOSX_VERSION_10_6","","",null,null],[17,"DYLD_MACOSX_VERSION_10_7","","",null,null],[17,"DYLD_MACOSX_VERSION_10_8","","",null,null],[17,"DYLD_MACOSX_VERSION_10_9","","",null,null],[17,"DYLD_MACOSX_VERSION_10_10","","",null,null],[17,"DYLD_IOS_VERSION_2_0","","",null,null],[17,"DYLD_IOS_VERSION_2_1","","",null,null],[17,"DYLD_IOS_VERSION_2_2","","",null,null],[17,"DYLD_IOS_VERSION_3_0","","",null,null],[17,"DYLD_IOS_VERSION_3_1","","",null,null],[17,"DYLD_IOS_VERSION_3_2","","",null,null],[17,"DYLD_IOS_VERSION_4_0","","",null,null],[17,"DYLD_IOS_VERSION_4_1","","",null,null],[17,"DYLD_IOS_VERSION_4_2","","",null,null],[17,"DYLD_IOS_VERSION_4_3","","",null,null],[17,"DYLD_IOS_VERSION_5_0","","",null,null],[17,"DYLD_IOS_VERSION_5_1","","",null,null],[17,"DYLD_IOS_VERSION_6_0","","",null,null],[17,"DYLD_IOS_VERSION_6_1","","",null,null],[17,"DYLD_IOS_VERSION_7_0","","",null,null],[17,"DYLD_IOS_VERSION_7_1","","",null,null],[17,"DYLD_IOS_VERSION_8_0","","",null,null],[17,"SECTION_TYPE","","",null,null],[17,"SECTION_ATTRIBUTES","","",null,null],[17,"S_REGULAR","","",null,null],[17,"S_ZEROFILL","","",null,null],[17,"S_CSTRING_LITERALS","","",null,null],[17,"S_4BYTE_LITERALS","","",null,null],[17,"S_8BYTE_LITERALS","","",null,null],[17,"S_LITERAL_POINTERS","","",null,null],[17,"S_NON_LAZY_SYMBOL_POINTERS","","",null,null],[17,"S_LAZY_SYMBOL_POINTERS","","",null,null],[17,"S_SYMBOL_STUBS","","",null,null],[17,"S_MOD_INIT_FUNC_POINTERS","","",null,null],[17,"S_MOD_TERM_FUNC_POINTERS","","",null,null],[17,"S_COALESCED","","",null,null],[17,"S_GB_ZEROFILL","","",null,null],[17,"S_INTERPOSING","","",null,null],[17,"S_16BYTE_LITERALS","","",null,null],[17,"S_DTRACE_DOF","","",null,null],[17,"S_LAZY_DYLIB_SYMBOL_POINTERS","","",null,null],[17,"S_THREAD_LOCAL_REGULAR","","",null,null],[17,"S_THREAD_LOCAL_ZEROFILL","","",null,null],[17,"S_THREAD_LOCAL_VARIABLES","","",null,null],[17,"S_THREAD_LOCAL_VARIABLE_POINTERS","","",null,null],[17,"S_THREAD_LOCAL_INIT_FUNCTION_POINTERS","","",null,null],[17,"SECTION_ATTRIBUTES_USR","","",null,null],[17,"S_ATTR_PURE_INSTRUCTIONS","","",null,null],[17,"S_ATTR_NO_TOC","","",null,null],[17,"S_ATTR_STRIP_STATIC_SYMS","","",null,null],[17,"S_ATTR_NO_DEAD_STRIP","","",null,null],[17,"S_ATTR_LIVE_SUPPORT","","",null,null],[17,"S_ATTR_SELF_MODIFYING_CODE","","",null,null],[17,"S_ATTR_DEBUG","","",null,null],[17,"SECTION_ATTRIBUTES_SYS","","",null,null],[17,"S_ATTR_SOME_INSTRUCTIONS","","",null,null],[17,"S_ATTR_EXT_RELOC","","",null,null],[17,"S_ATTR_LOC_RELOC","","",null,null],[17,"SEG_PAGEZERO","","",null,null],[17,"SEG_TEXT","","",null,null],[17,"SECT_TEXT","","",null,null],[17,"SECT_FVMLIB_INIT0","","",null,null],[17,"SECT_FVMLIB_INIT1","","",null,null],[17,"SEG_DATA","","",null,null],[17,"SECT_DATA","","",null,null],[17,"SECT_BSS","","",null,null],[17,"SECT_COMMON","","",null,null],[17,"SEG_OBJC","","",null,null],[17,"SECT_OBJC_SYMBOLS","","",null,null],[17,"SECT_OBJC_MODULES","","",null,null],[17,"SECT_OBJC_STRINGS","","",null,null],[17,"SECT_OBJC_REFS","","",null,null],[17,"SEG_ICON","","",null,null],[17,"SECT_ICON_HEADER","","",null,null],[17,"SECT_ICON_TIFF","","",null,null],[17,"SEG_LINKEDIT","","",null,null],[17,"SEG_UNIXSTACK","","",null,null],[17,"SEG_IMPORT","","",null,null],[0,"fat","goblin::mach","",null,null],[3,"FatHeader","goblin::mach::fat","The Mach-o FatHeader always has its data bigendian",null,null],[12,"magic","","",21,null],[12,"nfat_arch","","",21,null],[3,"FatArch","","The Mach-o FatArch always has its data bigendian",null,null],[12,"cputype","","",22,null],[12,"cpusubtype","","",22,null],[12,"offset","","",22,null],[12,"size","","",22,null],[12,"align","","",22,null],[17,"FAT_MAGIC","","",null,null],[17,"FAT_CIGAM","","",null,null],[17,"SIZEOF_FAT_HEADER","","",null,null],[17,"SIZEOF_FAT_ARCH","","",null,null],[11,"default","","",21,{"inputs":[],"output":{"name":"fatheader"}}],[11,"clone","","",21,null],[11,"fmt","","",21,null],[11,"default","","",22,{"inputs":[],"output":{"name":"fatarch"}}],[11,"clone","","",22,null],[11,"fmt","","",22,null],[11,"from_bytes","","",21,null],[11,"from_fd","","",21,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[11,"new","","",22,null],[11,"is_64","","",22,null],[11,"from_fd","","",22,{"inputs":[{"name":"file"},{"name":"u64"},{"name":"usize"},{"name":"bool"}],"output":{"name":"result"}}],[11,"from_path","","",22,{"inputs":[{"name":"path"}],"output":{"name":"result"}}],[11,"find_cputype","","",22,null],[11,"find_64","","",22,null],[0,"utils","goblin::mach","",null,null],[5,"peek_magic","goblin::mach::utils","Returns a little endian magical number; be careful as this will alter the seek on the `fd`",null,{"inputs":[{"name":"file"}],"output":{"name":"result"}}],[11,"fmt","goblin::mach","",19,null],[11,"from_path","","",19,{"inputs":[{"name":"path"}],"output":{"name":"result"}}]],"paths":[[4,"Binary"],[3,"Strtab"],[3,"Binary"],[3,"Header"],[3,"ProgramHeader"],[3,"Dyn"],[3,"DynamicInfo"],[3,"Rela"],[3,"Sym"],[3,"GnuHash"],[3,"Binary"],[3,"Header"],[3,"Sym"],[3,"ProgramHeader"],[3,"SectionHeader"],[3,"Dyn"],[3,"DynamicInfo"],[3,"Rel"],[3,"Rela"],[3,"Mach"],[3,"Header"],[3,"FatHeader"],[3,"FatArch"]]}; initSearch(searchIndex);