Exemple #1
0
int
nlist(const char *filename, struct nlist *nl) {
    int result = -1;
    unsigned oldver;
    Elf *elf;
    int fd;

    if ((oldver = elf_version(EV_CURRENT)) != EV_NONE) {
	if ((fd = open(filename, O_RDONLY)) != -1) {
	    if ((elf = elf_begin(fd, ELF_C_READ, NULL))) {
		result = _elf_nlist(elf, nl);
		elf_end(elf);
	    }
	    close(fd);
	}
	elf_version(oldver);
    }
    if (result) {
	while (nl->n_name && *nl->n_name) {
	    nl->n_value = 0;
	    nl++;
	}
    }
    return result;
}
Exemple #2
0
int
nlist(const char * name, struct nlist * list)
{
	register struct nlist *p;
	char magic_buf[EI_NIDENT];
	int fd;

	for (p = list; p->n_name && p->n_name[0]; p++) { /* n_name can be ptr */
		p->n_type = 0;
		p->n_value = 0L;
		p->n_scnum = 0;
		p->n_sclass = 0;
		p->n_numaux = 0;
	}

	if ((fd = open(name, 0)) < 0)
		return (-1);
	if (read(fd, magic_buf, EI_NIDENT) == -1) {
		(void) close(fd);
		return (-1);
	}

	if (lseek(fd, 0L, 0) == -1L) {	/* rewind to beginning of object file */
		(void) close(fd);
		return (-1);
	}

#ifndef _LP64
	if (ISELF && (magic_buf[EI_CLASS] == ELFCLASS32))
#else
	if (ISELF)		/* 64-bit case handles both Elf32 and Elf64 */
#endif
		return (_elf_nlist(fd, list));
	else {
		(void) close(fd);
		return (-1);
	}
}