在LINUX C ++中获取模块名称和进程名称

时间:2014-05-14 13:14:39

标签: c++ linux process module

我有一个共享库,有2个方法(当然还有其他的)我想移植到linux:

GetProcessName() - 应该获取可执行文件的名称或路径(要么这样做)
GetModuleName() - 应该返回运行代码的模块的名称(dll或exe)。

在Windows环境中,我使用GetModuleFileName,两种方法都有不同的变体。

我已经看到了许多获取流程名称的解决方案,但大多数都看起来有点像Hacky 我还没有找到获取模块名称的解决方案。

linux中是否有类似的功能?
我该如何实现它们?

1 个答案:

答案 0 :(得分:2)

由于存在一些混淆,以下是获取当前函数的“模块”数据的两个步骤。

  1. 通过IP寄存器或通过调用只返回__builtin_return_address(0)的小函数来获取当前函数。另一种方法是在&foo内部foo()
  2. 调用dl_addr,传递当前函数的地址。