由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Linux下有办法通过C/C++得到已经调入内存的library的full path么
相关主题
c++逐渐没落?在C/C++里的文件复制操作
一个关于空间分配的问题Windows XP与Multithreading Programming
C语言大文件如何得到文件大小?请教C++ thread library
问问g++, gcc, cc之间的关系C++中调用script
C语言,结构体转字符串。简单的难题为啥用mmap访问文件的效率高呢?
ubuntu on windows关于用 Eclipse 开发C++ 程序
大家看过来Re: C++ Guys!!!!多线程的程序设计有什么好书推荐? (转载)
pthread and C++VC++线程问题
相关话题的讨论汇总
话题: dli话题: dladdr话题: void话题: dl话题: dlvsym
进入Programming版参与讨论
1 (共1页)
s******o
发帖数: 2233
1
比如知道有一个libA.so已经调入内存了,如何通过c/c++找到这个libA.so的full path?
command line下可以通过lsof查看,windows下可以通过GetModuleHandle()/
GetModuleHandleName()来查看,不知道Linux下有啥类似的没有?(dladdr貌似需要一
个func ptr而不是module name)
p***o
发帖数: 1252
2
你popen一下lsof?

path?

【在 s******o 的大作中提到】
: 比如知道有一个libA.so已经调入内存了,如何通过c/c++找到这个libA.so的full path?
: command line下可以通过lsof查看,windows下可以通过GetModuleHandle()/
: GetModuleHandleName()来查看,不知道Linux下有啥类似的没有?(dladdr貌似需要一
: 个func ptr而不是module name)

t****t
发帖数: 6806
3
lsof reads /proc filesystem (as you could guess from the output of the
command). you may do the same.

path?

【在 s******o 的大作中提到】
: 比如知道有一个libA.so已经调入内存了,如何通过c/c++找到这个libA.so的full path?
: command line下可以通过lsof查看,windows下可以通过GetModuleHandle()/
: GetModuleHandleName()来查看,不知道Linux下有啥类似的没有?(dladdr貌似需要一
: 个func ptr而不是module name)

s******o
发帖数: 2233
4
这个有点hack的感觉。。。
还要一行行parse所有的output才能找到需要的那个,或者万一没有装lsof的话就不work,不太给力啊

【在 p***o 的大作中提到】
: 你popen一下lsof?
:
: path?

d*********8
发帖数: 2192
5
man dlopen
Glibc extensions: dladdr() and dlvsym()
Glibc adds two functions not described by POSIX, with prototypes
#define _GNU_SOURCE
#include
int dladdr(void *addr, Dl_info *info);
void *dlvsym(void *handle, char *symbol, char *version);
The function dladdr() takes a function pointer and tries to resolve
name and file where it is located. Information is stored in the Dl_info
strucâ€
ture:
typedef struct {
const char *dli_fname; /* Pathname of shared object that
contains address */
void *dli_fbase; /* Address at which shared object
is loaded */
const char *dli_sname; /* Name of nearest symbol with
address
lower than addr */
void *dli_saddr; /* Exact address of symbol named
in dli_sname */
} Dl_info;
If no symbol matching addr could be found, then dli_sname and dli_
saddr are set to NULL.
dladdr() returns 0 on error, and non-zero on success.
The function dlvsym(), provided by glibc since version 2.1, does the
same as dlsym() but takes a version string as an additional argument.
1 (共1页)
进入Programming版参与讨论
相关主题
VC++线程问题C语言,结构体转字符串。简单的难题
C++11 native thread问题ubuntu on windows
btw, MS C++ 是ECMA-372标准大家看过来Re: C++ Guys!!!!
interview with Ben Klemens, author of 21st Century Cpthread and C++
c++逐渐没落?在C/C++里的文件复制操作
一个关于空间分配的问题Windows XP与Multithreading Programming
C语言大文件如何得到文件大小?请教C++ thread library
问问g++, gcc, cc之间的关系C++中调用script
相关话题的讨论汇总
话题: dli话题: dladdr话题: void话题: dl话题: dlvsym