Chinaunix

标题: dlopen函数是否检查so文件的合法性 [打印本页]

作者: cclljj1987    时间: 2014-01-20 10:43
标题: dlopen函数是否检查so文件的合法性
我在AIX环境下调用so动态库文件,在执行dlopen的时候内存溢出,导致程序down掉了。
检查主程序代码没看到异常操作,所以怀疑是动态库写的不对
dlopen在打开so文件的时候,会对so文件内的函数进行合法性校验么?
或者这么说,内存溢出有可能是so文件导致的么?

注:
dlopen调用:myhandle=dlopen("/home/efsc/lib/libsips.so",RTLD_GLOBAL|RTLD_LAZY);
作者: pandaiam    时间: 2014-01-20 10:49
前两天刚搞过这个。。

确认具体是哪一步么,dlopen本身段错误?
strace看看,或者gdb调下。
作者: cclljj1987    时间: 2014-01-20 11:06
我用dbx看了一下core文件,内容如下:
dbx batchpro core
>...
...
>dlopen(??,??) at  0x.....
>callDYFUNC(pdata=""),line  75 in  "calldyfunc.c "
>main (argc=1,argv=0x0fff.....), line  .....




回复 2# pandaiam


   
作者: cclljj1987    时间: 2014-01-20 11:08
根据dbx显示,我觉得是dlopen函数段错误了
作者: pandaiam    时间: 2014-01-20 11:54
程序调用者有esfc用户的权限吗?
我这里只有Linux,没有aix。。
作者: cclljj1987    时间: 2014-01-20 12:24
是的

回复 5# pandaiam


   
作者: MMMIX    时间: 2014-01-20 13:42
cclljj1987 发表于 2014-01-20 10:43
dlopen在打开so文件的时候,会对so文件内的函数进行合法性校验么?

dlopen() (实际是 ld.so)只加载 so 文件,并对其中的符号做动态链接,其他就不管了。

或者这么说,内存溢出有可能是so文件导致的么?

完全有可能。
作者: file3    时间: 2014-02-04 21:53
有很多系统不是都支持dlopen。但是都有办法动态加载程序库。可以参照freeradius
作者: 一只嗡嗡的苍蝇    时间: 2014-02-04 23:36
so被加载了会执行一些代码的吧。有些变量初始化可能就在这时候。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2