位置無關碼的含義

       今天學習的過程中又遇到了“位置無關碼”這個概念,竟然一時間想不起來什麼意思了,所以證明之前並沒有完全搞懂啊!!!再次百度了一下別人的文章,總算又加深了一遍印象。

        這篇文章講的通俗易懂,可以借鑑一下:代碼重定位和位置無關碼。其中講到位置無關碼的含義就是,在我們寫的裸板程序時,鏈接地址的起始地址是從0x30000000,比如下面所示:

SECTIONS
{
    . = 0x30000000;

    . = ALIGN(4);
    .text      :
    {
      *(.text)
    }

    . = ALIGN(4);
    .rodata : { *(.rodata) }

    . = ALIGN(4);
    .data : { *(.data) }

    . = ALIGN(4);
    __bss_start = .;
    .bss : { *(.bss) *(.COMMON) }
    _end = .;
}

       但是假如我們的代碼在重定位之前, 會被板子拷貝到片內內存的0地址開始運行,這時候鏈接地址0x30000000和運行地址0就不相等了,所以運行的代碼必須是位置無關的才行,比如不能有全局變量等。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章