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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ELF Format 笔记(七)—— 符号表

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ELF Format 笔记(七)—— 符号表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最是那一低頭的溫柔,像一朵水蓮花不勝涼風的嬌羞,道一聲珍重,道一聲珍重,那一聲珍重里有蜜甜的憂愁 ——?徐志摩

ilocker:關注 Android 安全(新手) QQ: 2597294287

符號表 (symbol table) 中保存著符號的定義或者引用信息。對于 android so 文件來說,.dynsym 符號表保存著庫文件的導入和導出符號。

用 readelf 看一下 android liblog.so 的 .dynsym 動態符號表:

?

符號 __cxa_finalize 的 Ndx(st_shndx) 為 UND,表明該符號在本 so 中未定義,需要去 liblog.so 的依賴庫中去找。那 liblog.so 依賴哪些庫?可以從 .dynamic 中找到。

?

符號 __cxa_finalize 的定義應該在 libc.so 中。

符號 __android_log_vprint 的 Ndx(st_shndx) 為 8,表示該符號在本 so 中有定義,并且定義該符號的 section 在 section header table 中的索引是 8。看一下 section header table:

?

可以看到,符號 __android_log_vprint 定義在 .text section 中,這也是理所當然。所以 __android_log_vprint 是一個導出符號,由那些需要打印日志的程序調用。

因為符號 __android_log_vprint 是在本 so 中定義的,所以看到其 Value(st_value) 不為 0。android linker 在做符號重定位工作時,就是由這個 st_value 找到該符號定義在內存中的地址。不過 0x00001539 當然不是符號的最終的內存地址,linker 會再加上 liblog.so 在內存中的基址,所以 st_value 相當于一個地址偏移。

回過頭再看一下,符號表其實就是一個結構體數組,每個結構體描述一個符號的信息。結構體的定義如下:

?

其中 st_value 和 st_shndx ,上面已經有所介紹。

st_name 是符號的名字,這里保存的只是一個引用字符串表的索引值。

st_size 對于導入符號來說,根本不知道人家有多大,所以為 0。對于導出符號,則會明確標明大小。

st_info 包含了符號的類型和綁定屬性等信息,后續筆記再具體寫。

st_other 保留未用,不必關心。

轉載于:https://www.cnblogs.com/ilocker/p/4631704.html

總結

以上是生活随笔為你收集整理的ELF Format 笔记(七)—— 符号表的全部內容,希望文章能夠幫你解決所遇到的問題。

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