這期內容當中小編將會給大家?guī)碛嘘P怎么用源碼分析在linux上符號表的讀取,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站制作、成都網(wǎng)站設計,集網(wǎng)站策劃、網(wǎng)站設計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文發(fā)布平臺等專業(yè)人才根據(jù)搜索規(guī)律編程設計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設為您創(chuàng)造效益。
通常我們使用jmap,jstack 去檢查堆棧信息的時候,是不會使用-f參數(shù)的,但有的時候系統(tǒng)在無法打印出堆棧信息的時候,會建議你使用參數(shù)-F。
關于-F參數(shù)與非-F參數(shù)的區(qū)別筆者已經(jīng)在前面的博客中講述(http://blog.csdn.net/raintungli/article/details/7023092),簡單的說也就是一種是讓jvm進程自己打印出堆棧信息,另有一種是直接訪問jvm的堆棧區(qū)通過固定的結構找出我們需要的信息。
1. Linux-F參數(shù)的實現(xiàn)
在linux中可以使用ptrace的系統(tǒng)調用去訪問運行中的進程的內存信息,具體如何實現(xiàn)可以參考筆者的博客(http://blog.csdn.net/raintungli/article/details/6563867)
在java中使用動態(tài)加載的方式加載jvm自己的鏈接共享庫,jvm的核心鏈接共享庫是libjvm.so,linux中如何動態(tài)加載可以參考(http://www.ibm.com/developerworks/cn/linux/l-dynamic-libraries/#dynamiclinking)
因為是動態(tài)共享庫,當想查找具體的參數(shù)的值,內存的信息的時候,就需要計算出正確的參數(shù)或者函數(shù)的地址。
2. 共享庫中的符號相對地址偏移
可運行程序,共享庫使用ELF格式,當運行一個程序的時候,內核會把ELF加載到用戶空間,里面記錄了程序的函數(shù)和數(shù)據(jù)的地址和內容,elf文件格式就不具體描述了。
在linux 中可以使用結構體ELF_EHDR,ELF_PHDR,ELF_SHDR讀出elf 的program header, section header, section data.
在jvm中源碼具體實現(xiàn)請參考 /hotspot/agent/os/linux/salibelf.c
在linux中本身就自帶一個讀取elf格式的工具,readelf 你可以使用不同的參數(shù)讀取不同的內容。
readelf -s libjvm.so
顯示共享庫中的方法參數(shù)的虛擬地址,類型,名字
readelf -l libjvm.so
讀取program headers,其中出現(xiàn)2個LOAD的類型,***個是程序的指令虛擬的起始地址,另一個是程序數(shù)據(jù)的起始地址。
通過2個地址我們就能找到共享庫中的參數(shù),函數(shù)的相對地址的偏移。
3. 進程中的符號地址
在第二章節(jié)中,得到的只是相對的地址偏移,并不是真實運行中的進程的符號地址,如何得到真實的地址在linux中就相對比較簡單。
cat /proc/$processid/maps
在maps里詳細記錄了進程的堆棧分配的地址,包括共享庫的地址,那么起始地址就是這個庫分配的最小地址
進程中共享庫分配的最小地址+相對地址的偏移 =真實的進程中該函數(shù)或變量的真實地址
4. Java tool 保存的符號表
在jmap/jstack 中,為了提高讀取符號地址的性能,避免每一次要找符號的地址從elf文件中查找,只是在初始話的時候將符號表保存成哈希表,其中key是符號的名字,內容是符號的地址,長度。
上述就是小編為大家分享的怎么用源碼分析在linux上符號表的讀取了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:怎么用源碼分析在linux上符號表的讀取
轉載來于:http://jinyejixie.com/article30/ppjdso.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、、網(wǎng)站設計公司、網(wǎng)站排名、響應式網(wǎng)站、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)