2014-05-14 81 views
0

我有2种方法(等课程的),我想移植到Linux共享库:获取模块名称和进程名称在LINUX C++

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

在Windows环境中我使用GetModuleFileName用这两种方法的不同变化。

我见过很多用于获取进程名的解决方案,但大多数人似乎有点哈克。
而我还没有找到获取模块名称的解决方案。

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

+0

对于过程有[此](http://stackoverflow.com/a/1528493/63743)。我不认为有相当于运行库或至少有一个不会严重“黑客”。 – Duck

+0

我想我可以做一个运行模块/库的“哈克”解决方案,如果它是唯一的方法,但我还没有找到任何解决方案。 –

+0

@ MSalters:是不是重复的比这个问题更具体?虽然这个问题的答案(如何获得可执行文件/库文件的路径)无疑是这个问题的解决方案的一部分,但另一个问题和答案不能解决如何获得库的路径**目前正在执行**。这个问题的答案是否与重复问题有关? – user2079303

回答

2

由于有一些混乱,这里有两个步骤,以获得“模块”的数据为当前功能。

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