购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2.2 ELF文件的头

ELF文件的头示例如下:

其中一些关键的字段解释如下:

(1)Type字段。该字段用于描述ELF文件的类型,如表2.3所示。

表2.3 ELF文件头中的Type字段

(2)Entry point address字段:也称为e_entry字段,该字段包含了可执行文件开始执行的内存地址,即系统在启动进程时对控制权进行转移的起始地址,该地址指向_start()函数。程序被装载后,装载器会查找e_entry字段,通过相关工具可以修改该字段,使其指向恶意代码地址,这样就可获取进程的执行控制权。

_start()函数主要功能是为_libc_start_main()函数准备相关的参数。_libc_start_main()函数的原型如下:

_libc_start_main()函数的主要作用有:

●为程序的执行准备环境变量。

●在main()函数开始前调用_init()函数执行初始化。

●注册_fini()函数和_rtld_fini()函数,在程序终止后对程序进行清理。

●在完成必要的操作后,_libc_start_main()函数调用main()函数。

在默认情况下,_start()函数会调用main()函数。如果要执行定制的启动代码,则可以覆盖_start()函数,使其调用定制的启动代码,而不是main()函数,如Listing 2.7所示。

Listing 2.7 无main()函数的测试程序nomain.c

在编译nomain.c时,为了避免编译器使用默认的_start()函数,可以使用编译选项-nostartfiles做到这一点。例如: Y0vzRpe8SsOjo03D9sSAiUJmVVi5PPudUJji9Ec9YMIrJYDXY6tcTNFaO1Y4UpC6

点击中间区域
呼出菜单
上一章
目录
下一章
×