我正在研究 ELF 文件格式,因此我编译了一个小程序,从生成的可执行文件中转储了节标题及其内容。
ELF 标头包含入口点地址,该地址指向 .text 部分的开头。
我还找到了包含静态数据的 .data 部分和包含只读数据的 .rodata ...我希望也有一个堆栈部分,但我找不到该部分。
我还预计在某些时候 ESP 会被设置到某个部分的顶部,但我在反汇编中找不到类似的内容。
那么ESP的初始值是如何得到的呢?
下图描述了 x86 上典型 C ELF 可执行文件的内存映射。
因此,不需要专门的stack
ELF 文件中的部分。
然而在ELF 的手册页, one does在 ELF 文件中找到一些控制的东西stack属性。主要是可执行权限stack在记忆中。
-
PT_GNU_STACK
Linux 内核使用 GNU 扩展来通过在p_flags
member.
-
.note.GNU-stack
此部分在 Linux 对象文件中用于声明堆栈属性。该部分的类型为 SHT_PROGBITS。唯一使用的属性是 SHF_EXECINSTR。这向 GNU 链接器表明目标文件需要可执行堆栈。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)