C:Elf,sh_addr带偏移量

时间:2014-03-12 20:17:34

标签: c elf

如果从可执行文件启动objdump -s,您会发现(在很多信息中):

Contents of section .interp:
 400238 2f6c6962 36342f6c 642d6c69 6e75782d  /lib64/ld-linux-
 400248 7838362d 36342e73 6f2e3200           x86-64.so.2.

事实是,我真的很感兴趣:

400238
400248

让我们停止说话并观看代码:

void            show_addr(t_all *all)
{
  char          *try;
  char          *secname;
  int           i;
  size_t        point;
  unsigned int          k;

  i = 1;
  all->shdr = (Elf64_Shdr *)(all->data + all->elf->e_shoff);
  secname = (char *)(all->data + all->shdr[all->elf->e_shstrndx].sh_offset);
  while (i < all->elf->e_shnum)
  {
    printf("Contents of section %s: \n", &secname[all->shdr[i].sh_name]);
    try = (char *)(all->data + all->shdr[i].sh_offset);
    point = all->shdr[i].sh_offset;
    k = point;
    while (k < (all->shdr[point].sh_size))
    {
      printf("%x\n", (unsigned int)all->shdr[k].sh_addr);
      k += 16;
    }
  printf("\n");
  i++;
  }
}

当然,这段代码不会起作用,因为我已经陷入困境。 让我解释一下: secname用于显示该部分的名称,例如&#34; .interp&#34;在我的例子中。 所有这些都是我自己的结构,不同的信息在这里并不真正有用,期望调用Elf_64。 &#34;尝试&#34;和&#34;指向&#34;被迫使该部分的抵消(开始)。但是当我拥有它时,我不知道如何打印这个飞蛾** fu **** addr(我从一天开始就开始了)。

0 个答案:

没有答案