c-通过链接器运行程序时出现Seg错误



我下载了libc6的源代码,并成功完成了构建过程。(尽管我并没有故意做make install)。

使用buil-dir/elf/ld.so中构建的新链接器,我运行了一个程序,将其作为新建链接器的参数提供。

  • 测试代码打印一些字符串,然后打印malloc(sizeof(char)*1024)

  • 在运行测试二进制文件作为新建链接器的参数时,我在elf/dl-addr.c:132处得到一个Seg Fault,它是:

    131 /* Protect against concurrent loads and unloads. */

    132 __rtld_lock_lock_recursive (GL(dl_load_lock));

  • 这是seg故障之前的最后一帧,通过测试程序的malloc()调用进行调用。

此时的堆栈跟踪:

#0  0x0000000000000000 in ?? ()
#1  0x00007f11a6a94928 in __GI__dl_addr (address=0x7f11a69e67a0 <ptmalloc_init>,   info=0x7fffe9393be0, mapp=0x7fffe9393c00, symbolp=0x0) at dl-addr.c:132
#2  0x00007f11a69e64d7 in ptmalloc_init () at arena.c:381
#3  0x00007f11a69e72b8 in ptmalloc_init () at arena.c:371
#4  malloc_hook_ini (sz=<optimized out>, caller=<optimized out>) at hooks.c:32
#5  0x00000000004005b3 in main () at test.c:20

使用机器上默认安装的链接器运行同一程序时,程序运行良好。

  • 我不明白这背后的问题是什么?(这是不是因为我使用了新构建的链接器而没有先安装它而出错了)

如有任何建议或建议,我们将不胜感激。感谢

(系统详细信息GCC 4.8.22, eglibc-2.15 Ubuntu 12.10 64bit

使用buil-dir/elf/ld.so中构建的新链接器,我运行了一个程序,将其作为新建链接器的参数。

这就是你所做的一切,那么崩溃是预期的,因为你将新建的加载器与系统库混合在一起(这不起作用:glibc的所有部分必须来自同一版本)。

你需要做的是:

buil-dir/elf/ld.so 
--library-path buil-dir:buil-dir/dlfcn:buil-dir/nptl:... 
/path/to/a.out

要搜索的目录列表必须包括程序使用的所有库(glibc的一部分)。

相关内容

  • 没有找到相关文章

最新更新