加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

程序集 – 我想手工编写一个ELF文件.如何让我的elf文件调用c标准

发布时间:2020-12-16 06:52:33 所属栏目:百科 来源:网络整理
导读:我想手工编写一个ELF文件.如何让我的elf文件调用c标准库.我知道内核搜索PT_INTERP程序头并读
我想手工编写一个ELF文件.如何让我的elf文件调用c标准库.我知道内核搜索PT_INTERP程序头并读取“/lib/ld- linux.so.2”,我知道全局偏移表(GOT)和过程链接表(PLT).

但我不知道如何使用PT_INTERP phdr,GOT,PLT执行ELF文件并调用C库.我需要用二进制来了解它,以帮助我创建一个手工制作的ELF.

解决方法

What happens is:

>内核映射进程VAS(虚拟地址空间)中的主要可执行文件和动态链接器;
>内核通过上下文切换到动态链接器入口点来开始执行进程;
>动态链接器映射进程VAS中的引用(DT_NEEDED)共享对象

>如果要使用它,则需要为libc添加DT_NEEDED条目

>动态链接器执行重定位:

>你的libc函数需要一个GOT条目;
>您需要一个使用此GOT条目的libc函数(以及特殊的.PLT0条目)的PLT条目;
>您需要一个重定位条目来修复GOT条目;
>重定位条目需要引用(动态)符号表中libc函数的条目;
>您需要相应地设置DT_RELA,DT_REL,DT_RELASZ,DT_RELSZ,DT_RELAENT,DT_RELENT,DL_PLTREL,PLTRELSZ,DT_JMPREL;
>您的代码可以调用PLT条目.

>动态链接器调用可执行入口点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读