測試在32位Linux,x86上進行。如何在編譯ELF二進制文件時設置符號的段號?
假設在我的彙編程序final.s
中,我必須加載一些庫符號,例如[email protected]@GLIBC_2.0
,並且我想將這些符號加載到固定地址中。
在此question所以下面的說明,我這樣做:
echo ""[email protected]@GLIBC_2.0" = 0x080a7390;" > symbolfile
echo ""[email protected]_2.0 (4)" = 0x080a7390;" >> symbolfile
gcc -Wl,--just-symbols=symbolfile final.s -g
當我檢查符號表的輸出,我得到這個:
readelf -s a.out | grep stdin
53: 080a7390 4 OBJECT GLOBAL DEFAULT ABS [email protected]@GLIBC_2.0
17166: 080a7390 0 NOTYPE GLOBAL DEFAULT ABS [email protected]_2.0 (4)
而且比較常見的ELF biary需要stdin
符號:
readelf -s hello.out | grep stdin
17199: 0838b8c4 4 OBJECT GLOBAL DEFAULT 25 [email protected]@GLIBC_2.0
52: 0838b8c4 4 OBJECT GLOBAL DEFAULT 25 [email protected]_2.0 (4)
所以一個明顯的不同我發現的是Ndx
列,比如我的固定位置符號的段號是ABS
。請檢查參考文獻here。
執行a.out
時,會拋出segmentation fault
錯誤。
所以我的問題是,如何設置符號固定位置的節號?
嗨,是的,我想要加載/導入這些符號到'.bss'節。我有可能做到嗎? – computereasy 2015-02-07 23:09:48