Beispiel #1
0
static void
elf_print_ehdr(Elf32_Ehdr *e, void *sh)
{
    u_int64_t class;
    u_int64_t data;
    u_int64_t osabi;
    u_int64_t type;
    u_int64_t machine;
    u_int64_t version;
    u_int64_t entry;
    u_int64_t phoff;
    u_int64_t shoff;
    u_int64_t flags;
    u_int64_t ehsize;
    u_int64_t phentsize;
    u_int64_t phnum;
    u_int64_t shentsize;
    u_int64_t shnum;
    u_int64_t shstrndx;

    class = elf_get_byte(e, e, E_CLASS);
    data = elf_get_byte(e, e, E_DATA);
    osabi = elf_get_byte(e, e, E_OSABI);
    type = elf_get_quarter(e, e, E_TYPE);
    machine = elf_get_quarter(e, e, E_MACHINE);
    version = elf_get_word(e, e, E_VERSION);
    entry = elf_get_addr(e, e, E_ENTRY);
    phoff = elf_get_off(e, e, E_PHOFF);
    shoff = elf_get_off(e, e, E_SHOFF);
    flags = elf_get_word(e, e, E_FLAGS);
    ehsize = elf_get_quarter(e, e, E_EHSIZE);
    phentsize = elf_get_quarter(e, e, E_PHENTSIZE);
    phnum = elf_get_quarter(e, e, E_PHNUM);
    shentsize = elf_get_quarter(e, e, E_SHENTSIZE);
    fprintf(out, "\nelf header:\n");
    fprintf(out, "\n");
    fprintf(out, "\te_ident: %s %s %s\n", ei_classes[class], ei_data[data],
            ei_abis[osabi]);
    fprintf(out, "\te_type: %s\n", e_types[type]);
    fprintf(out, "\te_machine: %s\n", e_machines(machine));
    fprintf(out, "\te_version: %s\n", ei_versions[version]);
    fprintf(out, "\te_entry: %#jx\n", (intmax_t)entry);
    fprintf(out, "\te_phoff: %jd\n", (intmax_t)phoff);
    fprintf(out, "\te_shoff: %jd\n", (intmax_t)shoff);
    fprintf(out, "\te_flags: %jd\n", (intmax_t)flags);
    fprintf(out, "\te_ehsize: %jd\n", (intmax_t)ehsize);
    fprintf(out, "\te_phentsize: %jd\n", (intmax_t)phentsize);
    fprintf(out, "\te_phnum: %jd\n", (intmax_t)phnum);
    fprintf(out, "\te_shentsize: %jd\n", (intmax_t)shentsize);
    if (sh != NULL) {
        shnum = elf_get_shnum(e, sh);
        shstrndx = elf_get_shstrndx(e, sh);
        fprintf(out, "\te_shnum: %jd\n", (intmax_t)shnum);
        fprintf(out, "\te_shstrndx: %jd\n", (intmax_t)shstrndx);
    }
}
Beispiel #2
0
static void
elf_print_symtab(Elf32_Ehdr *e, void *sh, char *str)
{
	u_int64_t machine;
	u_int64_t offset;
	u_int64_t entsize;
	u_int64_t size;
	u_int64_t name;
	u_int64_t value;
	u_int64_t info;
	u_int64_t shndx;
	void *st;
	int len;
	int i;

	machine = elf_get_quarter(e, e, E_MACHINE);
	offset = elf_get_off(e, sh, SH_OFFSET);
	entsize = elf_get_size(e, sh, SH_ENTSIZE);
	size = elf_get_size(e, sh, SH_SIZE);
	name = elf_get_word(e, sh, SH_NAME);
	len = size / entsize;
	fprintf(out, "\nsymbol table (%s):\n", shstrtab + name);
	for (i = 0; i < len; i++) {
		st = (char *)e + offset + i * entsize;
		name = elf_get_word(e, st, ST_NAME);
		value = elf_get_addr(e, st, ST_VALUE);
		size = elf_get_size(e, st, ST_SIZE);
		info = elf_get_byte(e, st, ST_INFO);
		shndx = elf_get_quarter(e, st, ST_SHNDX);
		fprintf(out, "\n");
		fprintf(out, "entry: %d\n", i);
		fprintf(out, "\tst_name: %s\n", str + name);
		fprintf(out, "\tst_value: %#jx\n", value);
		fprintf(out, "\tst_size: %jd\n", (intmax_t)size);
		fprintf(out, "\tst_info: %s %s\n",
		    st_type(machine, ELF32_ST_TYPE(info)),
		    st_bindings[ELF32_ST_BIND(info)]);
		fprintf(out, "\tst_shndx: %jd\n", (intmax_t)shndx);
	}
}