2012-07-23 54 views
0

位置independed COSE呼叫printf的組裝

call printf 

可用於在位置independed代碼? 一方面,call是相對的,另一方面printf是一個庫函數。 如果答案不是,爲什麼?在鏈接階段printf的代碼沒有複製到我寫的文件? (然後在我看來,確定)。

回答

1

你可以做一個相對遠調用(跨模塊調用)使用GOT,其將持有的絕對地址printf,然後調用printf,一個將執行類似CALL [GOT + printf_index * sizeof(ptr)](這個表達式將被向下摺疊到在彙編/編譯過程中不變)。

另一種方法,但完全可怕的方法是將您正在使用的CRT函數合併到您的共享庫/二進制文件(MSVC稱爲靜態鏈接),但是這會使二進制文件膨脹並使其非友好,以及從而可能會發現靜態連接的CRT中可能未發現的錯誤。