任何动手练习,以了解程序如何加载到内存并执行

pie*_*fou 6 c linux mips elf loader

我很好奇调用main()之前发生的事情,比如将可执行文件加载到内存中,动态加载共享库.您是否有任何建议如何通过实践练习来理解这些事情?

工具和我所知道的,现在使用,包括:

  • strace的
  • 拆卸
  • readelf
  • / proc /进程/图

注意:我知道伟大的书籍链接者和装载者,但动手练习可能比教我读书更好.

sig*_*ice 3

  • ld.so手册页记录了几个环境变量,可以将这些变量设置为调整动态链接过程或提供其他详细信息。

例如

LD_DEBUG=all cat </dev/null
Run Code Online (Sandbox Code Playgroud)
  • 您可以轻松获取所涉及的每个部分的源代码 - Linux 内核、动态链接器、C 库、启动代码(crt0.o 或类似代码)。您可以从研究代码并进行实验性修改开始。