當前位置:成語大全網 - 書法字典 - Linux C符號的重定位信息?

Linux C符號的重定位信息?

當編譯器生成壹個目標文件時,它不知道代碼和變量的最終存儲位置,也不知道其他文件中定義的外部符號。因此,編譯器將生成壹個存儲每個符號信息的重定位條目。這個條目告訴鏈接器在合並目標文件時如何修改對每個目標文件中符號的引用。該重定位條目存儲在相關文本段和相關數據段中。該條目可以理解為存儲每個符號的重定位信息的結構。

Offset表示存儲段中符號的偏移值。Symbol表示符號的名稱,字符串實際上存儲在。strtab段,其中存儲了字符串第壹個地址的下標。Type代表重定位類型,鏈接器只關心兩種類型,壹種是與PC相關的重定位引用,壹種是絕對地址引用。PC相關的重定位引用意味著將當前PC值(通常是下壹條指令的存儲位置)與符號的偏移值相加。絕對地址引用是指直接將當前指令中指定的地址引用作為跳轉的地址,不做任何修改。有了這些信息,鏈接器就可以把存儲段中符號的偏移值加到重定位後該段的新地址上,從而得到壹個新的引用地址,這個地址就是符號的最終地址。類似地,引用這個地址的程序的所有部分都應該修改為使用這個新的絕對地址,而不是舊的偏移地址。當新的符號地址被修改時,鏈接器的工作就結束了。