2012-07-23 65 views
-1

爲什麼位置無關的代碼

push str1 

時的.text詮釋同一個文件str1和定義, 並不好,當我們想要做的位置無關的代碼? 當我們將一些標籤推入堆棧時,地址是靜態時的地址嗎?爲什麼?

+3

這個問題有點混亂,措辭不對,試圖提出一個更清晰的問題。 – 2012-07-23 05:25:20

回答

0

無論何時加載二進制文件,它們都是虛擬化的,這涉及很多事情,但對PIC來說最重要的是,它意味着二進制文件可以加載並基於幾乎任何地址,所以PIC做了什麼來克服這一點,可以使用相對地址(因爲這些地址不需要重新定位)。

在上面的例子中,其不可能創建只需PUSH的相對地址,因爲這將被推動的地址將是一個偏移到.text/.RODATA部(或從某些優選的鹼製成的赦免地址地址),但它不會被調整到二進制文件當前的虛擬地址,因此您需要在推送之前調整地址(最簡單的方法可能是通過RIP相對地址,因此您可以使用PUSH [RIP + <dist from $here to string aka str1 - $>])。