1

我在 ubuntu 13.10 上,有这个剥离+打包的小精灵文件。我需要以自动方式从其进程中转储各种信息,所以我拼凑了一个跟踪我的进度的小型跟踪器,类似于 strace。提出了三个问题:

1)附加到我的进程后,我怎样才能得到它的图像库?

2)该过程首先在哪里中断?显然这不是节目的EP。

3) 加载 .so/.lib 文件时可以通过什么方式通知我?我认为 GDB 可以以某种方式做到这一点。

第一个问题确实是最重要的。任何帮助表示赞赏。

4

1 回答 1

2

1) /proc/ <PID>/maps 包含进程映射的所有内容以及从哪里映射的列表,包括从可执行文件映射的页面。通过阅读可执行的 ELF 标头,您应该能够找出 .text 的位置。

2) 动态链接二进制文件的执行通常从解释器开始。ELF 可执行文件(使用 转储)中的 INTERP 程序头readelf -e将具有其名称。它是解释器执行开始的入口点。通常它是一个运行时链接器ld-<some-variant>.so。它映射到可执行文件的部分,也可能映射所需的共享库。

3) GDB 对如何实现运行时链接器有相当详细的了解,因此它能够通过在正确的位置设置断点来拦截动态对象加载。你也可以做到的。dlopen() 似乎是一个很好的拦截点候选者。正如我在 #2 中所指出的,共享对象可能在可执行文件获得控制权之前就已经被预加载。

于 2013-11-14T20:07:46.170 回答