我下載了libc6
的源代碼併成功完成了構建過程。 (雖然我沒有刻意執行make install
)。通過鏈接器運行程序時出現Seg錯誤?
隨着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));
這是賽格前的最後一幀通過
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我必須修改鏈接器並測試它是否按照更改工作(現在沒有代碼更改了)。有沒有一種方法可以爲此測試新建的鏈接器? – abhi
然後我會建議在一個'chroot' ed環境中安裝一個迷你分發和實驗 –