1.以下有關重定位功能的敘述中,錯誤的是( )。
B.重定位的第一步應先將相同的節合並,且將具有相同存取屬性的節合並成段
C.重定位的最后一步是將引用處的地址修改為與之關聯(綁定)的定義處的首地址
D.重定位的第二步是確定每個段的起始地址,並確定段內每個定義處符號的地址
2.以下有關重定位信息的敘述中,錯誤的是( )。
B.數據中的重定位信息在可重定位目標文件的.rel.data節中
C.指令中的重定位信息在可重定位目標文件的.rel.text節中
D.重定位信息包含需重定位的位置、綁定的符號和重定位類型
3.假定“int buf[2]={10,50};”所定義的buf被分配在靜態數據區,其首地址為0x8048930,bufp1為全局變量,被分配在buf隨后的存儲空間。以下關於“int *bufp1 = &buf[1];”的重定位的描述中,錯誤的是( )。
B.在可執行目標文件中,地址0x8048938開始的4個字節為34H、89H、04H、08H
C.在可重定位目標文件的.rel.data節中,有一個引用buf的重定位條目
D.bufp1的地址為0x8048938,重定位前的內容為04H、00H、00H、00H
4.假定“int buf[2]={10,50};”所定義的buf被分配在靜態數據區,其首地址為0x8048930,bufp1為全局變量,也被分配在靜態數據區。以下關於“bufp1 = &buf[1];”的重定位的描述中,錯誤的是( )。
B.在相應的重定位條目中,對bufp1和buf的引用均采用絕對地址方式
C.可用一條mov指令實現該賦值語句,該mov指令中有兩處需要重定位
D.在可重定位目標文件的.rel.text節中,有一個與buf相關的重定位條目
5.以下是有關在Linux系統中啟動可執行目標文件執行的敘述,其中錯誤的是( )。
B.可在CUI(命令行用戶界面)中雙擊可執行目標文件對應的圖標來啟動其執行
C.不管是哪種啟動執行方式,最終都是通過調用execve()系統調用函數實現的
D.可以通過在一個程序中調用execve()系統調用函數來啟動可執行文件執行
6.以下是有關在Linux系統中加載可執行目標文件的敘述,其中錯誤的是( )。
B.加載器通過可執行目標文件中的程序頭表對可裝入段進行加載
C.可執行目標文件的加載通過execve()函數調用的加載器來完成
D.任何可執行目標文件中的可裝入段被映射到一個統一的虛擬地址空間
7.以下是在Linux系統中啟動並加載可執行目標文件過程中shell命令行解釋程序所做的部分操作:
① 構造構造argv和envp
② 調用fork()系統調用函數
③ 調用execve()系統調用函數
④ 讀入命令(可執行文件名)及參數
啟動並加載可執行目標文件的正確步驟是( )。
B.②→④→①→③
C.④→①→②→③
D.④→①→③→②
8.以下是有關動態鏈接及其所鏈接的共享庫以及動態鏈接生成的可執行目標文件的敘述,其中錯誤的是( )。
B.可執行目標文件由動態鏈接器對可重定位目標文件和共享庫中部分信息進行鏈接而成
C.生成的可執行目標文件是部分鏈接的,也即,其中還有部分引用沒有進行重定位
D.共享庫在Linux下稱為動態共享對象(.so),在Windows下稱為動態鏈接庫(.dll)
9.以下是有關靜態鏈接和動態鏈接比較的敘述,其中錯誤的是( )。
B.靜態庫函數代碼包含在可執行目標文件中,而共享庫函數代碼不包含在可執行目標文件中
C.靜態鏈接情況下靜態庫函數在加載時被鏈接,動態鏈接情況下共享庫函數可在加載或運行時被鏈接
D.靜態庫函數更新后需對程序重新編譯和鏈接,而共享庫函數更新后程序無需重新編譯和鏈接
10.一個共享庫文件(.so文件)由多個模塊(.o文件)生成。在生成共享庫文件的過程中,需要對.o文件進行處理,以生成位置無關代碼。以下有關位置無關代碼(PIC)生成的敘述中,錯誤的是( )。
B.模塊間函數調用需要動態鏈接器進行重定位,重定位時在GOT和PLT中填入相應內容
C.模塊外數據的引用需要動態鏈接器進行重定位,重定位時在GOT中填入外部數據的地址
D.模塊內函數之間的調用可用PC相對地址實現,無需動態鏈接器進行重定位
