【发布时间】:2013-11-14 18:08:29
【问题描述】:
我在 ubuntu 13.10 上,有这个剥离+打包的小精灵文件。我需要以自动化的方式从它的过程中转储各种信息,所以我拼凑了一个跟踪我的进度的小型跟踪器,类似于 strace。提出了三个问题:
1) 附加到我的进程后,如何获取它的图像库?
2) 进程首先在哪里中断?显然不是节目的EP。
3) 加载 .so/.lib 文件时可以通过什么方式通知我?我认为 GDB 可以做到这一点。
第一个问题确实是最重要的。任何帮助表示赞赏。
【问题讨论】:
-
我不确定,但我相信您必须通过解析进程的可执行映像来自己找出(1)的答案。并且程序只会在您告诉它中断的地方中断(使用
PTRACE_SETREGSET或PTRACE_POKEUSER,取决于操作系统和CPU,设置调试控制寄存器以建立硬件断点,或PTRACE_POKETEXT注入断点指令)。ptrace是一个非常“裸机”的 API——它对你的作用很小,你必须了解硬件和 ABI 的内部和外部才能有效地使用它。 -
我将如何解析可执行进程?
-
调查libelf。
-
我可以这样做,但它不会为我提供该进程的当前图像库,它不一定与文件 (ASLR) 中的“默认”图像库相同。