第03课:深入程序布局内部,增强应用控制能力

本文将探讨程序的静态布局和动态布局。静态布局指可执行文件在硬盘上的内部布局,而动态布局,则是程序被系统加载到内存之后的布局。主要包括以下几部分内容:

  • 可执行文件里有什么
  • 影响程序静态布局的因素
  • 如何控制程序的动态布局
  • 检查地址范围

3.1 可执行文件里有什么

对于这个问题,相信有经验的开发人员都能给出这样的回答:可执行文件包含了源文件编译生成的可执行指令和数据。在日常开发中,理解到这个程度已经足够,但本文会做更深入的探究,以帮助读者扩展在某些方向上的技术基础,比如黑客技术。

在 Linux 中,二进制可执行文件的标准格式叫做 ELF(Executable and Linkable Format)。从名字可以看出,它同时兼容可执行文件和可链接文件。本文重点关注可执行文件,可链接文件将在后面课程中讨论动态链接库时再深入讲解。

3.1.1 ELF 文件的两大组成部分

概括地讲,一个 ELF 文件包含一个固定长度的文件头和多个可扩展的数据块。其中,文件头是整个可执行文件的总地图,描述了整个文件的组织结构。可扩展数据块分为两类,对应着不同的视图——在链接视图下,数据块的单位是节(Section),用多个节区头索引所有内容;而在执行视图下,数据块的单位是段(Segment),用程序头(Program Header)索引所有的段。如下图所示:

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值