如在second answer for this question中可以看到的,使用該部分的名稱從本身內部獲取指向程序特定部分的指針非常簡單。使用libelf
時,只需打開程序自己的文件,循環遍歷所有部分(其結構由Elf64_Shdr
結構表示),當部分名稱與您想要的部分名稱匹配並停止使用存儲在Elf64_Shdr
結構的sh_addr
元素中的指針時停止。在這種情況下,獲取想要的指針非常簡單,因爲它是在ELF可執行文件中定義的。如何獲取指向動態庫(Linux ELF)特定部分的指針?
但是,想象一下,您有一個使用動態庫的程序,您需要獲取指向該動態庫的一部分的指針。由於其部分的地址是在運行時定義的,因此如何獲取指向動態庫部分的指針?
順便說一下,動態庫和主程序本身都有一個同名的段(這是我需要獲取指針的段)。因此,在這種情況下,這兩個具有相同名稱的段是否可以相鄰存儲在內存中,這樣我只需要獲得一個指向主文件段的指針(如我在第一段中所述)並添加一個偏移量到達動態庫部分?
你可以得到的起始地址從/ proc/ /地圖,那麼你可以添加偏移。 –
imreal
@Nick好吧,但偏移使用什麼值?考慮到我可以用'libelf'獲得開始地址,是不是有更好的方法來做到這一點? – LuisABOL
我甚至不確定是否有相同名稱的兩個部分(主文件和庫中的其中一個)相鄰存儲(它們當然不是)。所以我甚至不知道使用膠印是否會起作用...... – LuisABOL