微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ELF文件格式如何定义堆栈?

我正在学习ELF文件格式,所以我编译了一个小程序,从结果可执行文件删除了部分头文件和它们的内容

ELF标题包含入口点地址,它指向.text部分的开始。

我还发现包含静态数据的.data节和包含只读数据的.rodata …我希望有一个堆栈的部分,但我找不到该部分。

我也希望在某个时候,ESP被设置在某个部分的顶部,但是我在反汇编中找不到那样的东西。

在ELF可执行文件中检测未parsing的符号

如何获得与objdump输出标签对应的ELF二进制文件中的文件偏移量?

dlsym:未定义的符号,Android N

是否有可能检查ELF可执行文件的“GNU_HASH”部分中的散列?

为什么程序头可执行?

那么ESP如何获得初始价值呢?

从elf文件的DYNAMIC部分删除条目

__libc_start_main @ plt如何工作?

在C中加载用户间的ELF文件

从不同的共享库中的相同符号总是从符号名称间的根开始查找?

为什么ELF中其他共享库的函数长度信息?

下图描述了x86上典型的C ELF可执行文件的内存映射。

该过程在基地址加载.text和.data部分。

主栈位于正下方并向下生长。

每个线程和函数调用都有自己的堆栈

位于主栈下方。

每个堆栈由防护页分隔以检测堆栈溢出。

因此,ELF文件中不需要专门的stack部分。

然而,在ELF手册页中 ,人们在ELF文件找到了一些控制堆栈属性的东西。 主要是对内存中的堆栈的可执行权限。

PT_GNU_STACK

GNU扩展,Linux内核用来通过p_flags成员中设置的标志来控制堆栈的状态。

.note.GNU-stack

这部分在Linux对象文件中用于声明堆栈属性。 这部分是类型SHT_PROGBITS。 唯一使用的属性是SHF_EXECINSTR。 这向GNU链接器指出目标文件需要一个可执行的堆栈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐