【问题标题】:What is p_align in elf header?精灵标题中的 p_align 是什么?
【发布时间】:2020-08-13 18:37:34
【问题描述】:

我正在学习逆向工程。

readelf something
Program Headers:
  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
  PHDR           0x000040 0x0000000000400040 0x0000000000400040 0x0001f8 0x0001f8 R   0x8
  INTERP         0x000238 0x0000000000400238 0x0000000000400238 0x00001c 0x00001c R   0x1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x000000 0x0000000000400000 0x0000000000400000 0x0006f0 0x0006f0 R E 0x200000
  LOAD           0x000e10 0x0000000000600e10 0x0000000000600e10 0x000220 0x000228 RW  0x200000
  DYNAMIC        0x000e20 0x0000000000600e20 0x0000000000600e20 0x0001d0 0x0001d0 RW  0x8
  NOTE           0x000254 0x0000000000400254 0x0000000000400254 0x000044 0x000044 R   0x4
  GNU_EH_FRAME   0x0005b4 0x00000000004005b4 0x00000000004005b4 0x00003c 0x00003c R   0x4
  GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0x10
  GNU_RELRO      0x000e10 0x0000000000600e10 0x0000000000600e10 0x0001f0 0x0001f0 R   0x1

在这里。 对齐列是什么意思?

我阅读了 man(5) elf.h 和一些文档,但我仍然不完全了解。 堆栈溢出中有一些关于此的问题,但没有答案。

能给我解释一下吗?

【问题讨论】:

标签: c linux elf


【解决方案1】:

如果您使用的是 Linux,请在终端中输入 man elf 并阅读有关 ELF 格式的最新文档。 readelf 输出中的字段Align 是程序头的p_align。这是online docs的一部分:

p_align

此成员保存分段对齐的值 内存和文件中。可加载的流程段必须一致 p_vaddr 和 p_offset 的值以页面大小为模。零值 一种是不需要对齐。否则,p_align 应该是 两个的正整数幂,并且 p_vaddr 应该等于 p_offset, 模 p_align。

【讨论】:

  • 是的。我读了那个描述。但我不明白如何使用 p_align 。 p_align 值到底是什么意思? 0x1、0x0、0x8、0x200000。 0x20000 表示加载 0x20000 字节大小?
  • 据我所知,这意味着段部分的最小块大小。例如,如果您有 Align 8 并且您的段以偏移量 9(十进制)结束,那么第 10-15 个字节将不会被使用。表示没有其他段可以占用它。
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多