gpt4 book ai didi

assembly - 我想手写一个ELF文件。如何让我的elf文件调用c标准库

转载 作者:行者123 更新时间:2023-12-03 02:26:55 25 4
gpt4 key购买 nike

我想手写一个ELF文件,如何让我的elf文件调用c标准库。我知道内核搜索PT_INTERP程序头并读取“/lib/ld-linux.so.2”,并且我知道全局偏移表(GOT)和过程链接表(PLT)。

但我不知道带有 PT_INTERP phdr、GOT、PLT 的 ELF 文件如何执行并调用 C 库。我需要知道它的二进制形式来帮助我创建一个手工制作的 ELF。

最佳答案

What happens is :

  1. 内核将主要可执行文件和动态链接器映射到进程VAS(虚拟地址空间)中;

  2. 内核通过上下文切换到动态链接器入口点来开始进程的执行;

  3. 动态链接器映射进程 VAS 中的引用 (DT_NEEDED) 共享对象

    • 如果您想使用 libc,则需要为它添加 DT_NEEDED 条目
  4. 动态链接器执行重定位:

    • 您的 libc 函数需要一个 GOT 条目;

    • 您的 libc 函数需要一个使用此 GOT 条目的 PLT 条目(以及特殊的 .PLT0 条目);

    • 您需要一个重定位条目来修复 GOT 条目;

    • 重定位条目需要引用(动态)符号表中的libc函数的条目;

    • 您需要设置DT_RELADT_RELDT_RELASZDT_RELSZ DT_RELAENTDT_RELENTDL_PLTRELPLTRELSZDT_JMPREL相应;

    • 您的代码可以调用 PLT 条目。

  5. 动态链接器调用您的可执行入口点。

关于assembly - 我想手写一个ELF文件。如何让我的elf文件调用c标准库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39826380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com