linux 我可以使用dl_iterate_phdr来监视exec进程吗?

evrscar2  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(259)

我想得到一个进程的基址,我用execl调用这个进程,如下面的代码所示。
这种方法有意义吗?

  1. # include <stdio.h>
  2. # define __USE_GNU
  3. # include <link.h>
  4. int callback(struct dl_phdr_info *info, size_t size, void *data)
  5. {
  6. printf("name: '%s' base:'%lu'\n", info->dlpi_name, info->dlpi_addr);
  7. return 0;
  8. }
  9. int main()
  10. {
  11. dl_iterate_phdr(callback, NULL);
  12. execl("/usr/bin/ls", "ls", NULL);
  13. }

我担心的是,由于它是回调函数,当调用execl时,它会被擦除。因此,会有一个关于调用多少回调函数的竞争条件。

epggiuax

epggiuax1#

我想得到一个进程的基址,我用excel调用,如下面的代码。
下面的代码将不起作用--dl_iterate_phdr()只能检查它在其中运行的进程。当execl()开始运行新的二进制文件时,* 当前进程的所有痕迹 * 都消失了,并被新的二进制文件替换。
我担心的是,由于它是回调函数,当调用execl时,它会被擦除。因此,会有一个关于调用多少回调函数的竞争条件。
你的担心是多余的:dl_iterate_ohdr()是一个 * 同步 * 函数。它 * 在 * 到达execl之前 * 完成 *(并执行对callback的所有调用)。
监控execl d进程的唯一方法是在它上面使用ptrace(就像调试器和strace一样)。

相关问题