您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ELF_ST_TYPE函数代码示例

51自学网 2021-06-01 20:32:05
  C++
这篇教程C++ ELF_ST_TYPE函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ELF_ST_TYPE函数的典型用法代码示例。如果您正苦于以下问题:C++ ELF_ST_TYPE函数的具体用法?C++ ELF_ST_TYPE怎么用?C++ ELF_ST_TYPE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ELF_ST_TYPE函数的26个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: syms_new

syms_t*	syms_new(bin_obj_t* obj){  elfobj_t*	elfobj = NULL;  char*		sections[] = { ".symtab", ".dynsym" , NULL };  int		i;  Elf_Shdr*	section;  Elf_Sym*	start, * end;  syms_t*	list = NULL;  sym_t*	sym;  elfobj = (elfobj_t*) obj->luse;  for (i = 0; sections[i]; i++)    {      section = get_elfsection(obj, sections[i]);      if (!section)	continue;      start = (Elf_Sym *) ((char*) elfobj->header + section->sh_offset);      end   = (Elf_Sym *) ((char*) elfobj->header + section->sh_offset + section->sh_size);      /*      ** Add every symbol to the list.      */      for (; start < end; start++)	{	  /*	  ** J'ai virer le alloc ?! (TODO)	  */	  if (ELF_ST_TYPE(start->st_info) != STT_FUNC && ELF_ST_TYPE(start->st_info) != STT_NOTYPE)	    continue;	  /*	  ** Skip unusable symbol.	  */	  if (start->st_value == 0x0)	    continue;	  sym = malloc(sizeof(sym_t));	  if (sym == NULL)	    goto syms_new_failed;	  sym->addr = start->st_value + elfobj->base;	  sym->size = start->st_size;	  sym->name = (char*) ((char*) elfobj->header +			 elfobj->section_headers[section->sh_link]->sh_offset +			 start->st_name);	  /* printf("Add Sym 0x%x size: %d name: %s/n", sym->addr, sym->size, sym->name); */	  list = list_add(list, sym);	  if (list == NULL)	    goto syms_new_failed;	}    }  return (list); syms_new_failed:  for (; list; )    {      sym = (sym_t*) list->value;      list = list_del(list, sym);      free(sym);    }  return (NULL);}
开发者ID:nicolascormier,项目名称:ncormier-academic-projects,代码行数:58,


示例2: assert

bool ElfSymbolTable::lookup(address addr, int* stringtableIndex, int* posIndex, int* offset) {  assert(stringtableIndex, "null string table index pointer");  assert(posIndex, "null string table offset pointer");  assert(offset, "null offset pointer");  if (NullDecoder::is_error(m_status)) {    return false;  }  address pc = 0;  size_t  sym_size = sizeof(Elf_Sym);  assert((m_shdr.sh_size % sym_size) == 0, "check size");  int count = m_shdr.sh_size / sym_size;  if (m_symbols != NULL) {    for (int index = 0; index < count; index ++) {      if (STT_FUNC == ELF_ST_TYPE(m_symbols[index].st_info)) {        address sym_addr = (address)m_symbols[index].st_value;        if (sym_addr < addr && (addr - sym_addr) < *offset) {          pc = (address)m_symbols[index].st_value;          *offset = (int)(addr - pc);          *posIndex = m_symbols[index].st_name;          *stringtableIndex = m_shdr.sh_link;        }      }    }  } else {    long cur_pos;    if ((cur_pos = ftell(m_file)) == -1 ||      fseek(m_file, m_shdr.sh_offset, SEEK_SET)) {      m_status = NullDecoder::file_invalid;      return false;    }    Elf_Sym sym;    for (int index = 0; index < count; index ++) {      if (fread(&sym, sym_size, 1, m_file) == 1) {        if (STT_FUNC == ELF_ST_TYPE(sym.st_info)) {          address sym_addr = (address)sym.st_value;          if (sym_addr < addr && (addr - sym_addr) < *offset) {            pc = (address)sym.st_value;            *offset = (int)(addr - pc);            *posIndex = sym.st_name;            *stringtableIndex = m_shdr.sh_link;          }        }      } else {        m_status = NullDecoder::file_invalid;        return false;      }    }    fseek(m_file, cur_pos, SEEK_SET);  }  return true;}
开发者ID:AllenWeb,项目名称:jdk7u-hotspot,代码行数:54,


示例3: _rtld_relocate_plt_object

static inline int_rtld_relocate_plt_object(const Obj_Entry *obj, Elf_Word sym, Elf_Addr *tp){	Elf_Addr *got = obj->pltgot;	const Elf_Sym *def;	const Obj_Entry *defobj;	Elf_Addr new_value;	def = _rtld_find_plt_symdef(sym, obj, &defobj, tp != NULL);	if (__predict_false(def == NULL))		return -1;	if (__predict_false(def == &_rtld_sym_zero))		return 0;	if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) {		if (tp == NULL)			return 0;		new_value = _rtld_resolve_ifunc(defobj, def);	} else {		new_value = (Elf_Addr)(defobj->relocbase + def->st_value);	}	rdbg(("bind now/fixup in %s --> new=%p",	    defobj->strtab + def->st_name, (void *)new_value));	got[obj->local_gotno + sym - obj->gotsym] = new_value;	if (tp)		*tp = new_value;	return 0;}
开发者ID:ajinkya93,项目名称:netbsd-src,代码行数:29,


示例4: generic_get_symbol

    bool    generic_get_symbol( Elf_Xword index,                        std::string& name, Elf64_Addr& value,                        Elf_Xword& size,                        unsigned char& bind, unsigned char& type,                        Elf_Half& section_index,                        unsigned char& other ) const    {        bool ret = false;        if ( index < get_symbols_num() ) {            const T* pSym = reinterpret_cast<const T*>(                symbol_section->get_data() +                    index * symbol_section->get_entry_size() );            const endianess_convertor& convertor = elf_file.get_convertor();            section* string_section = elf_file.sections[get_string_table_index()];            string_section_accessor str_reader( string_section );            const char* pStr = str_reader.get_string( convertor( pSym->st_name ) );            if ( 0 != pStr ) {                name = pStr;            }            value   = convertor( pSym->st_value );            size    = convertor( pSym->st_size );            bind    = ELF_ST_BIND( pSym->st_info );            type    = ELF_ST_TYPE( pSym->st_info );            section_index = convertor( pSym->st_shndx );            other   = pSym->st_other;            ret = true;        }        return ret;    }
开发者ID:serge1,项目名称:ELFIO,代码行数:35,


示例5: _rtld_relocate_plt_object

static int_rtld_relocate_plt_object(const Obj_Entry *obj, const Elf_Rel *rel,                          Elf_Addr *tp){    Elf_Addr *where = (Elf_Addr *)(obj->relocbase + rel->r_offset);    Elf_Addr new_value;    const Elf_Sym  *def;    const Obj_Entry *defobj;    unsigned long info = rel->r_info;    assert(ELF_R_TYPE(info) == R_TYPE(JUMP_SLOT));    def = _rtld_find_plt_symdef(ELF_R_SYM(info), obj, &defobj, tp != NULL);    if (__predict_false(def == NULL))        return -1;    if (__predict_false(def == &_rtld_sym_zero))        return 0;    if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) {        if (tp == NULL)            return 0;        new_value = _rtld_resolve_ifunc(defobj, def);    } else {        new_value = (Elf_Addr)(defobj->relocbase + def->st_value);    }    rdbg(("bind now/fixup in %s --> old=%p new=%p",          defobj->strtab + def->st_name, (void *)*where, (void *)new_value));    if (*where != new_value)        *where = new_value;    if (tp)        *tp = new_value;    return 0;}
开发者ID:ryo,项目名称:netbsd-src,代码行数:34,


示例6: reloc_gnu_ifunc

intreloc_gnu_ifunc(Obj_Entry *obj, int flags, RtldLockState *lockstate){    const Elf_Rela *relalim;    const Elf_Rela *rela;    if (!obj->gnu_ifunc)	return (0);    relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);    for (rela = obj->pltrela;  rela < relalim;  rela++) {	Elf_Addr *where, target;	const Elf_Sym *def;	const Obj_Entry *defobj;	switch (ELF_R_TYPE(rela->r_info)) {	case R_X86_64_JMP_SLOT:	  where = (Elf_Addr *)(obj->relocbase + rela->r_offset);	  def = find_symdef(ELF_R_SYM(rela->r_info), obj, &defobj,		SYMLOOK_IN_PLT | flags, NULL, lockstate);	  if (def == NULL)	      return (-1);	  if (ELF_ST_TYPE(def->st_info) != STT_GNU_IFUNC)	      continue;	  lock_release(rtld_bind_lock, lockstate);	  target = (Elf_Addr)rtld_resolve_ifunc(defobj, def);	  wlock_acquire(rtld_bind_lock, lockstate);	  reloc_jmpslot(where, target, defobj, obj, (const Elf_Rel *)rela);	  break;	}    }    obj->gnu_ifunc = false;    return (0);}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:33,


示例7: wantsym

static boolwantsym(const Elf_Sym *sym, const char *strtab){    int type;    int bind;    type = ELF_ST_TYPE(sym->st_info);    bind = ELF_ST_BIND(sym->st_info);    if (type != STT_FUNC || (aflag && bind == STB_LOCAL))#if 0 ||      (uflag && strchr(strtab + sym->st_name, '.') != NULL))#endif	return 0;#ifdef __arm__    /* ignore what gas calls "mapping symbols" */    {	const char *c = strtab + sym->st_name;	if (c[0] == '$')	    return 0;    }#endif    return 1;}
开发者ID:ajinkya93,项目名称:OpenBSD,代码行数:27,


示例8: sym7

int sym7(void){	if(ELF_ST_TYPE(orcSYM->st_info) != STT_FILE)		return 0;	if(mode & REL)		if(rand() % 2)			return 0;	unsigned char st_info = orcSYM->st_info;	Elf_Section st_shndx;	if(rand() % 2)		do			st_info = ELF_ST_INFO(rand() & 0x0f, STT_FILE);		while(ELF_ST_BIND(st_info) == STB_LOCAL);	if(rand() % 4 < 3){		while((st_shndx = rand() % orcHDR->e_shnum))			if(st_shndx != SHN_ABS)				break;	} else		while((st_shndx = getElf_Section()))			if(st_shndx != SHN_ABS)				break;	orcSYM->st_info  = st_info;	orcSYM->st_shndx = st_shndx;	fprintf(logfp, "(SYM[%d]->st_info = 0x%.2x,", entry, orcSYM->st_info);	fprintf(logfp, " st_shndx = 0x%x)", orcSYM->st_shndx);	return 1;}
开发者ID:FreedomCoder,项目名称:Melkor_ELF_Fuzzer,代码行数:34,


示例9: elf_sym_to_nlist

/* * Convert an Elf_Sym into an nlist structure.  This fills in only the * n_value and n_type members. */static voidelf_sym_to_nlist(struct nlist *nl, Elf_Sym *s, Elf_Shdr *shdr, int shnum){	nl->n_value = s->st_value;	switch (s->st_shndx) {	case SHN_UNDEF:	case SHN_COMMON:		nl->n_type = N_UNDF;		break;	case SHN_ABS:		nl->n_type = ELF_ST_TYPE(s->st_info) == STT_FILE ?		    N_FN : N_ABS;		break;	default:		if (s->st_shndx >= shnum)			nl->n_type = N_UNDF;		else {			Elf_Shdr *sh = shdr + s->st_shndx;			nl->n_type = sh->sh_type == SHT_PROGBITS ?			    (sh->sh_flags & SHF_WRITE ? N_DATA : N_TEXT) :			    (sh->sh_type == SHT_NOBITS ? N_BSS : N_UNDF);		}		break;	}	if (ELF_ST_BIND(s->st_info) == STB_GLOBAL ||	    ELF_ST_BIND(s->st_info) == STB_WEAK)		nl->n_type |= N_EXT;}
开发者ID:2asoft,项目名称:freebsd,代码行数:35,


示例10: handle_symbol

//--------------------------------------------------------------------------//lint -e{1764} could be declared const refstatic int handle_symbol(        reader_t &reader,        int shndx,        int _info,        uint32 st_name,        uval_t st_value,        int namsec,        symbol_visitor_t &sv){  if ( shndx == SHN_UNDEF    || shndx == SHN_LOPROC    || shndx == SHN_HIPROC    || shndx == SHN_ABS )  {    return 0;  }  int type = ELF_ST_TYPE(_info);  if ( type != STT_OBJECT && type != STT_FUNC )    return 0;  if ( st_name == 0 )    return 0;  if ( imagebase != uval_t(-1) )    st_value -= imagebase;  qstring name;  reader.sections.get_name(&name, namsec, st_name);  return sv.visit_symbol(st_value, name.c_str());}
开发者ID:mailwl,项目名称:android_server,代码行数:33,


示例11: get_sym

Elf32_Sym *mips_elf_find_address(struct mips_cpu *pcpu, Elf32_Addr addr){	Elf32_Shdr *shsymtab = pcpu->shsymtab;	unsigned    n = shsymtab->sh_size / shsymtab->sh_entsize;	Elf32_Addr  min = (unsigned)-1;	Elf32_Sym  *ret = NULL;	unsigned    i;	if((shsymtab->sh_offset  + shsymtab->sh_size > pcpu->elfsz)	|| (addr >= pcpu->memsz))		return NULL;		for(i = 0; i < n; i++) {		Elf32_Sym  *sym = get_sym(pcpu->elf, pcpu->elfsz, shsymtab, i);		if(!sym)			return NULL;		if((ELF_ST_BIND(sym->st_info) != STB_GLOBAL) ||				(ELF_ST_TYPE(sym->st_info) >= STT_SECTION))			continue;				if(sym->st_value <= addr) {			Elf32_Addr diff = addr - sym->st_value;						if(diff < min) {				min = diff;				ret = sym;				if(diff == 0)					break;			}		}	}	return ret;}
开发者ID:nmav,项目名称:cspim,代码行数:34,


示例12: dump_info

voiddump_info(struct elf_object *object){	int numrel, numrela, i;	const Elf_Sym	*symt;	const char	*strt;	Elf_Word *needed_list;	symt = object->dyn.symtab;	strt = object->dyn.strtab;	for (i = 0; i < object->nchains; i++) {		const Elf_Sym *sym = symt + i;		char *type;		switch (ELF_ST_TYPE(sym->st_info)) {		case STT_FUNC:			type = "func";			break;		case STT_OBJECT:			type = "object";			break;		case STT_NOTYPE:			type = "notype";			break;		default:			type = "UNKNOWN";		}		printf("symbol %d [%s] type %s value %x/n", i,		    strt + sym->st_name,		    type, sym->st_value);	}	numrel = object->dyn.relsz / sizeof(Elf_Rel);	numrela = object->dyn.relasz / sizeof(Elf_RelA);	printf("numrel %d numrela %d/n", numrel, numrela);	printf("rel relocations:/n");	for (i = 0; i < numrel ; i++) {		Elf_Rel *rel = object->dyn.rel;		printf("%d: %x sym %x type %d/n", i, rel[i].r_offset,		    ELF_R_SYM(rel[i].r_info), ELF_R_TYPE(rel[i].r_info));	}	printf("rela relocations:/n");	for (i = 0; i < numrela ; i++) {		Elf_RelA *rela = object->dyn.rela;		printf("%d: %x sym %x type %d/n", i, rela[i].r_offset,		    ELF_R_SYM(rela[i].r_info), ELF_R_TYPE(rela[i].r_info));	}	needed_list = (Elf_Addr *)object->dyn.needed;	for (i = 0; needed_list[i] != NULL; i++)		printf("NEEDED %s/n", needed_list[i] + strt);}
开发者ID:ajinkya93,项目名称:OpenBSD,代码行数:56,


示例13: parse_elf_symbols

static void parse_elf_symbols(uintptr_t mem, size_t size, Phdr_t *load,		struct vdso_symtable *t, uintptr_t dynsymbol_names,		Hash_t *hash, Dyn_t *dyn_symtab){	const char *vdso_symbols[VDSO_SYMBOL_MAX] = {		ARCH_VDSO_SYMBOLS	};	const size_t vdso_symbol_length = sizeof(t->symbols[0].name);	Hash_t nbucket, nchain;	Hash_t *bucket, *chain;	unsigned int i, j, k;	uintptr_t addr;	nbucket = hash[0];	nchain = hash[1];	bucket = &hash[2];	chain = &hash[nbucket + 2];	pr_debug("nbucket %lx nchain %lx bucket %lx chain %lx/n",		 (long)nbucket, (long)nchain, (unsigned long)bucket, (unsigned long)chain);	for (i = 0; i < VDSO_SYMBOL_MAX; i++) {		const char * symbol = vdso_symbols[i];		k = elf_hash((const unsigned char *)symbol);		for (j = bucket[k % nbucket]; j < nchain && chain[j] != STN_UNDEF; j = chain[j]) {			addr = mem + dyn_symtab->d_un.d_ptr - load->p_vaddr;			Sym_t *sym;			char *name;			addr += sizeof(Sym_t)*j;			if (__ptr_struct_oob(addr, sizeof(Sym_t), mem, size))				continue;			sym = (void *)addr;			if (ELF_ST_TYPE(sym->st_info) != STT_FUNC &&			    ELF_ST_BIND(sym->st_info) != STB_GLOBAL)				continue;			addr = dynsymbol_names + sym->st_name;			if (__ptr_struct_oob(addr, vdso_symbol_length, mem, size))				continue;			name = (void *)addr;			if (std_strncmp(name, symbol, vdso_symbol_length))				continue;			memcpy(t->symbols[i].name, name, vdso_symbol_length);			t->symbols[i].offset = (unsigned long)sym->st_value - load->p_vaddr;			break;		}	}}
开发者ID:0x7f454c46,项目名称:criu,代码行数:55,


示例14: _rtld_relocate_plt_objects

int_rtld_relocate_plt_objects(const Obj_Entry *obj){	const Elf_Sym *sym = obj->symtab + obj->gotsym;	Elf_Word i;	for (i = obj->gotsym; i < obj->symtabno; i++, sym++) {		if (ELF_ST_TYPE(sym->st_info) == STT_FUNC)			if (_rtld_relocate_plt_object(obj, i, NULL) < 0)				return -1;	}	return 0;}
开发者ID:ajinkya93,项目名称:netbsd-src,代码行数:14,


示例15:

const char *arch_loader_symbol_lookup(addr_t addr, struct section_data *sd){	elf64_symtab_entry_t *symtab = (elf64_symtab_entry_t *)(sd->vbase[sd->symtab]);	addr_t strtab = sd->vbase[sd->strtab];	if(!symtab || !strtab)		return NULL;	for(unsigned i=0;i<(sd->symlen / sizeof(elf64_symtab_entry_t));i++) {		if(ELF_ST_TYPE(symtab[i].info) == ELF_ST_TYPE_FUNCTION) {			if(addr >= symtab[i].address && addr < (symtab[i].address + symtab[i].size)) {				return (const char *)(strtab + symtab[i].name);			}		}	}	return NULL;}
开发者ID:AshishKumar4,项目名称:seakernel,代码行数:15,


示例16: wantsym

static boolwantsym(const Elf_Sym *sym, const char *strtab){    int type;    int bind;    type = ELF_ST_TYPE(sym->st_info);    bind = ELF_ST_BIND(sym->st_info);    if (type != STT_FUNC ||      (aflag && bind == STB_LOCAL) ||      (uflag && strchr(strtab + sym->st_name, '.') != NULL))	return 0;    return 1;}
开发者ID:coyizumi,项目名称:cs111,代码行数:16,


示例17: link_elf_each_function_name

static intlink_elf_each_function_name(linker_file_t file,    int (*callback)(const char *, void *), void *opaque){	elf_file_t ef = (elf_file_t)file;	const Elf_Sym *symp;	int i, error;		/* Exhaustive search */	for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) {		if (symp->st_value != 0 &&		    ELF_ST_TYPE(symp->st_info) == STT_FUNC) {			error = callback(ef->ddbstrtab + symp->st_name, opaque);			if (error)				return (error);		}	}	return (0);}
开发者ID:coyizumi,项目名称:cs111,代码行数:19,


示例18: compare

bool ElfSymbolTable::compare(const Elf_Sym* sym, address addr, int* stringtableIndex, int* posIndex, int* offset, ElfFuncDescTable* funcDescTable) {  if (STT_FUNC == ELF_ST_TYPE(sym->st_info)) {    Elf_Word st_size = sym->st_size;    address sym_addr;    if (funcDescTable != NULL && funcDescTable->get_index() == sym->st_shndx) {      // We need to go another step trough the function descriptor table (currently PPC64 only)      sym_addr = funcDescTable->lookup(sym->st_value);    } else {      sym_addr = (address)sym->st_value;    }    if (sym_addr <= addr && (Elf_Word)(addr - sym_addr) < st_size) {      *offset = (int)(addr - sym_addr);      *posIndex = sym->st_name;      *stringtableIndex = m_shdr.sh_link;      return true;    }  }  return false;}
开发者ID:campolake,项目名称:openjdk9,代码行数:19,


示例19: get_elfsym_frm_section

/***** Get symbol from section.***/Elf_Sym*		get_elfsym_frm_section(elfobj* obj, Elf_Addr addr, Elf_Shdr* section, int type){  Elf_Sym*	start, * end, * ret = NULL;  int		stop = 0;  start = (Elf_Sym *) ((char*) obj->header + section->sh_offset);  end   = (Elf_Sym *) ((char*) obj->header + section->sh_offset + section->sh_size);  /*  ** Try to find a symbol whose virtual range includes the target address  ** else take a symbol with the highest address less than or equal to the  ** target  */  for (; !stop && start < end; start++)    {      /*      ** SHF_ALLOC from the man: If the file has a loadable segment that includes      ** the symbol table, the section's attributes will include the SHF_ALLOC bit;      ** otherwise, that bit will be off.      */      if (!(	    (type == STT_NOTYPE || ELF_ST_TYPE(start->st_info) == type) &&	    start->st_value <= addr &&	    (obj->section_headers[start->st_shndx]->sh_flags & SHF_ALLOC))	  )	continue;      if (start->st_size)	{	  if (start->st_size + start->st_value > addr)	    {	      ret = start;	      stop = 1;	    }	}      else	{	  if (ret == NULL || ret->st_value < start->st_value)	    ret = start;	}    }  return (ret);}
开发者ID:nicolascormier,项目名称:ncormier-academic-projects,代码行数:48,


示例20: reloc_jmpslots

/* Relocate the jump slots in an object. */intreloc_jmpslots(Obj_Entry *obj, int flags, RtldLockState *lockstate){    const Elf_Rel *rellim;    const Elf_Rel *rel;    if (obj->jmpslots_done)	return 0;    rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);    for (rel = obj->pltrel;  rel < rellim;  rel++) {	Elf_Addr *where, target;	const Elf_Sym *def;	const Obj_Entry *defobj;	switch (ELF_R_TYPE(rel->r_info)) {	case R_386_JMP_SLOT:	  where = (Elf_Addr *)(obj->relocbase + rel->r_offset);	  def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj,		SYMLOOK_IN_PLT | flags, NULL, lockstate);	  if (def == NULL)	      return (-1);	  if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) {	      obj->gnu_ifunc = true;	      continue;	  }	  target = (Elf_Addr)(defobj->relocbase + def->st_value);	  reloc_jmpslot(where, target, defobj, obj, rel);	  break;	case R_386_IRELATIVE:	  break;	default:	  _rtld_error("Unknown relocation type %x in PLT",	    ELF_R_TYPE(rel->r_info));	  return (-1);	}    }    obj->jmpslots_done = true;    return 0;}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:43,


示例21: symtab_addr_to_name

/** Convert symbol address to name. * * This function finds the symbol which starts at the highest address * less than or equal to @a addr. * * @param st	Symbol table. * @param addr	Address for lookup. * @param name	Place to store pointer name of symbol, if found. *		This is valid while @a st exists. * * @return	EOK on success or ENOENT if no matching symbol was found. */int symtab_addr_to_name(symtab_t *st, uintptr_t addr, char **name,    size_t *offs){	size_t i;	uintptr_t saddr, best_addr;	char *sname, *best_name;	unsigned stype;	best_name = NULL;	best_addr = 0;	for (i = 0; i < st->sym_size / sizeof(elf_symbol_t); ++i) {		if (st->sym[i].st_name == 0)			continue;		stype = ELF_ST_TYPE(st->sym[i].st_info);		if (stype != STT_OBJECT && stype != STT_FUNC &&		    stype != STT_NOTYPE) {			continue;		}		saddr = st->sym[i].st_value;		sname = st->strtab + st->sym[i].st_name;		/* An ugly hack to filter out some special ARM symbols. */		if (sname[0] == '$')			continue;		if (best_name == NULL || (saddr <= addr && saddr > best_addr)) {			best_name = sname;			best_addr = saddr;		}	}	if (best_name == NULL)		return ENOENT;	*name = best_name;	*offs = addr - best_addr;	return EOK;}
开发者ID:fhector,项目名称:helenOS-0.5-Hector,代码行数:53,


示例22: sym6

int sym6(void){	if(ELF_ST_TYPE(orcSYM->st_info) != STT_SECTION)		return 0;	if(mode & REL)		if(rand() % 2)			return 0;	unsigned char st_info;	do		st_info = ELF_ST_INFO(rand() & 0x0f, STT_SECTION);	while(ELF_ST_BIND(st_info) == STB_LOCAL);	orcSYM->st_info = st_info;	fprintf(logfp, "(SYM[%d]->st_info = 0x%.2x)", entry, orcSYM->st_info);	return 1;}
开发者ID:FreedomCoder,项目名称:Melkor_ELF_Fuzzer,代码行数:21,


示例23: link_elf_each_function_nameval

static intlink_elf_each_function_nameval(linker_file_t file,    linker_function_nameval_callback_t callback, void *opaque){	linker_symval_t symval;	elf_file_t ef = (elf_file_t)file;	const Elf_Sym* symp;	int i, error;	/* Exhaustive search */	for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) {		if (symp->st_value != 0 &&		    ELF_ST_TYPE(symp->st_info) == STT_FUNC) {			error = link_elf_symbol_values(file, (c_linker_sym_t) symp, &symval);			if (error)				return (error);			error = callback(file, i, &symval, opaque);			if (error)				return (error);		}	}	return (0);}
开发者ID:coyizumi,项目名称:cs111,代码行数:23,


示例24: SUFFIX

static Elf_AddrSUFFIX (count_funcs) (Elf_Ehdr *e, Elf_Shdr *symtab_section,                      struct image_target_desc *image_target){    Elf_Word symtab_size, sym_size, num_syms;    Elf_Off symtab_offset;    Elf_Sym *sym;    Elf_Word i;    int ret = 0;    symtab_size = grub_target_to_host (symtab_section->sh_size);    sym_size = grub_target_to_host (symtab_section->sh_entsize);    symtab_offset = grub_target_to_host (symtab_section->sh_offset);    num_syms = symtab_size / sym_size;    for (i = 0, sym = (Elf_Sym *) ((char *) e + symtab_offset);            i < num_syms;            i++, sym = (Elf_Sym *) ((char *) sym + sym_size))        if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)            ret++;    return ret;}
开发者ID:galuha,项目名称:grub-2.0.0,代码行数:23,


示例25: reloc_jmpslots

/* * LD_BIND_NOW was set - force relocation for all jump slots */intreloc_jmpslots(Obj_Entry *obj, int flags, RtldLockState *lockstate){	const Obj_Entry *defobj;	const Elf_Rela *relalim;	const Elf_Rela *rela;	const Elf_Sym *def;	if (obj->jmpslots_done)		return (0);	relalim = (const Elf_Rela *)((const char *)obj->pltrela +	    obj->pltrelasize);	for (rela = obj->pltrela; rela < relalim; rela++) {		Elf_Addr *where, target;		where = (Elf_Addr *)(obj->relocbase + rela->r_offset);		switch(ELF_R_TYPE(rela->r_info)) {		case R_AARCH64_JUMP_SLOT:			def = find_symdef(ELF_R_SYM(rela->r_info), obj,			    &defobj, SYMLOOK_IN_PLT | flags, NULL, lockstate);			if (def == NULL)				return (-1);			if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) {				obj->gnu_ifunc = true;				continue;			}			target = (Elf_Addr)(defobj->relocbase + def->st_value);			reloc_jmpslot(where, target, defobj, obj,			    (const Elf_Rel *)rela);			break;		}	}	obj->jmpslots_done = true;	return (0);}
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:40,


示例26: symtab_name_to_addr

/** Convert symbol name to address. * * @param st	Symbol table. * @param name	Name of the symbol. * @param addr	Place to store address for symbol, if found. * * @return	EOK on success, ENOENT if no such symbol was found. */int symtab_name_to_addr(symtab_t *st, char *name, uintptr_t *addr){	size_t i;	char *sname;	unsigned stype;	for (i = 0; i < st->sym_size / sizeof(elf_symbol_t); ++i) {		if (st->sym[i].st_name == 0)			continue;		stype = ELF_ST_TYPE(st->sym[i].st_info);		if (stype != STT_OBJECT && stype != STT_FUNC)			continue;		sname = st->strtab + st->sym[i].st_name;		if (str_cmp(sname, name) == 0) {			*addr = st->sym[i].st_value;			return EOK;		}	}	return ENOENT;}
开发者ID:fhector,项目名称:helenOS-0.5-Hector,代码行数:32,



注:本文中的ELF_ST_TYPE函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ELISE_COPY函数代码示例
C++ ELF_ST_BIND函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。