2014-05-14 114 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,傳遞當前函數的地址。