我在ubuntu 13.10上有这个小的剥离+打包的精灵文件。我需要以自动方式从其进程中转储各种信息,因此我将一个跟踪我进度的微小跟踪器一起攻击,类似于strace。出现了三个问题:
1)在加入我的流程之后,我怎样才能获得它的图像库?
2)流程先在哪里破解?显然它不是该计划的EP。
3)加载.so / .lib文件时,我可以通知任何方式?我想,GDB可以以某种方式做到这一点。
第一个问题确实是最重要的问题。任何帮助表示赞赏。
答案 0 :(得分:2)
1)/ proc / <PID>
/ maps包含进程映射的所有内容的列表,包括从可执行文件映射的页面。通过读取可执行的ELF头文件,您应该能够找出.text的位置。
2)动态链接二进制文件的执行通常从解释器开始。 ELF可执行文件中的INTERP程序头(带有readelf -e
的转储)将具有其名称。它是解释器执行开始的入口点。通常,它是运行时链接程序ld-<some-variant>.so
。它映射在可执行文件的部分中,也可以映射所需的共享库。
3)GDB对如何实现运行时链接器有相当详细的了解,因此它可以通过在正确的位置设置断点来拦截动态对象加载。你也可以做到的。 dlopen()似乎是拦截点的一个很好的候选者。正如我在#2中提到的,共享对象可能在可执行文件获得控制之前已经预先加载。