我下载了libc6
的源代码并成功完成了构建过程。 (虽然我没有故意表演make install
。
使用buil-dir/elf/ld.so
内置的新链接器,我运行了一个程序,将其作为新构建的链接器的参数提供。
测试代码打印一些字符串,然后打印malloc(sizeof(char)*1024)
。
在运行测试二进制文件作为新构建的链接器的参数时,我在Seg Fault
获得elf/dl-addr.c:132
,即:
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
答案 0 :(得分:1)
使用
buil-dir/elf/ld.so
内置的新链接器,我运行了一个程序,将其作为新构建的链接器的参数提供。
您所做的所有,然后崩溃是预期,因为您正在将新构建的加载程序与系统混合库(不起作用: <{1}} 的所有部分必须来自它的相同版本。)
您需要做的是:
glibc
要搜索的目录列表必须包含程序使用的所有库(glibc的一部分)。