日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

详解ELF重定向原理

發布時間:2023/12/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解ELF重定向原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

重定向是計算機技術中非常底層的概念和操作。它指的是將程序中涉及到的變量名與變量在計算機內存中的位置關聯起來。當在代碼中執行類似x=1;的語句時,編譯器需要通過重定向信息找到變量x對應的內存位置,然后將數值1寫入該內存,因此重定向既跟程序的加載鏈接有關,又于編譯原理有關,因此對計算機體系結構不了解,或只關注上層應用開發,對底層技術理解不多的同學對它進行掌握就會有些困難。

為了準確將變量對應到具體的內存位置,就必須要有相關信息來描述變量名與內存之間的關系,這些信息就叫重定向記錄(relocation records),程序中描述的“變量”不僅僅指int,float類型的數據變量,還會涉及到函數的入口地址,而函數或者變量的入口地址常常在鏈接或動態裝載時才會確定。例如下面代碼:

void _start() {foo() }

如果boo實現放在一個obj1.c文件,函數foo實現放在boj2.c文件,那么編譯后_start函數對應的二進制指令存儲在obj1.o中,foo對應的二進制指令存儲在obj2.o中,于是整個程序要順利執行,就必須將obj1.o和obj2.o整合在一起,負責整合工作的就是連接器,它位于Linux系統的目錄/bin/ld中。問題是如何將他們整合在一起,在執行boo函數時,內部調用foo函數時,IP寄存器能準確的指向foo函數第一條指令所在位置呢,這就需要編譯器在編譯代碼時所生成的重定向數據結構,內容如下:

typedef struct {ELF64_Addr r_offset;Uint64_t r_info; } Elf64_Rel;typedef struct {ELF64_Addr r_offset;Ui

總結

以上是生活随笔為你收集整理的详解ELF重定向原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。