我正在学习ELF文件格式,所以我编译了一个小程序,从结果可执行文件中删除了部分头文件和它们的内容。
ELF标题包含入口点地址,它指向.text部分的开始。
我还发现包含静态数据的.data节和包含只读数据的.rodata …我希望有一个堆栈的部分,但我找不到该部分。
我也希望在某个时候,ESP被设置在某个部分的顶部,但是我在反汇编中找不到那样的东西。
在ELF可执行文件中检测未parsing的符号
如何获得与objdump输出的标签对应的ELF二进制文件中的文件偏移量?
dlsym:未定义的符号,Android N
是否有可能检查ELF可执行文件的“GNU_HASH”部分中的散列?
为什么程序头可执行?
那么ESP如何获得初始价值呢?
__libc_start_main @ plt如何工作?
为什么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] 举报,一经查实,本站将立刻删除。