【发布时间】:2014-02-23 06:39:13
【问题描述】:
我下载了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
【问题讨论】:
-
您应该已经安装了新的 libc。但是,我相信您手动升级它是错误的。将您的发行版升级到更新版本的 Ubuntu。
-
@BasileStarynkevitch 我必须修改链接器并测试它是否按照更改工作(现在没有代码更改)。有没有办法为此目的测试新建的链接器?
-
我建议在
chroot-ed 环境中工作,您可以在其中安装迷你发行版并进行实验
标签: c linux linker segmentation-fault libc