成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java開源工具在linux上的源碼分析(六):符號表的讀取

開發 后端
通常我們使用jmap,jstack 去檢查堆棧信息的時候,是不會使用-f參數的,但有的時候系統在無法打印出堆棧信息的時候,會建議你使用參數-F。

通常我們使用jmap,jstack 去檢查堆棧信息的時候,是不會使用-f參數的,但有的時候系統在無法打印出堆棧信息的時候,會建議你使用參數-F。

關于-F參數與非-F參數的區別筆者已經在前面的博客中講述(http://blog.csdn.net/raintungli/article/details/7023092),簡單的說也就是一種是讓jvm進程自己打印出堆棧信息,另有一種是直接訪問jvm的堆棧區通過固定的結構找出我們需要的信息。

1. Linux-F參數的實現

在linux中可以使用ptrace的系統調用去訪問運行中的進程的內存信息,具體如何實現可以參考筆者的博客(http://blog.csdn.net/raintungli/article/details/6563867)

在java中使用動態加載的方式加載jvm自己的鏈接共享庫,jvm的核心鏈接共享庫是libjvm.so,linux中如何動態加載可以參考(http://www.ibm.com/developerworks/cn/linux/l-dynamic-libraries/#dynamiclinking)

因為是動態共享庫,當想查找具體的參數的值,內存的信息的時候,就需要計算出正確的參數或者函數的地址。

2. 共享庫中的符號相對地址偏移

可運行程序,共享庫使用ELF格式,當運行一個程序的時候,內核會把ELF加載到用戶空間,里面記錄了程序的函數和數據的地址和內容,elf文件格式就不具體描述了。

在linux 中可以使用結構體ELF_EHDR,ELF_PHDR,ELF_SHDR讀出elf 的program header, section header, section data.

在jvm中源碼具體實現請參考 /hotspot/agent/os/linux/salibelf.c

在linux中本身就自帶一個讀取elf格式的工具,readelf 你可以使用不同的參數讀取不同的內容。

  1. readelf -s libjvm.so 

顯示共享庫中的方法參數的虛擬地址,類型,名字

  1. readelf -l libjvm.so 

讀取program headers,其中出現2個LOAD的類型,***個是程序的指令虛擬的起始地址,另一個是程序數據的起始地址。

通過2個地址我們就能找到共享庫中的參數,函數的相對地址的偏移。

3. 進程中的符號地址

在第二章節中,得到的只是相對的地址偏移,并不是真實運行中的進程的符號地址,如何得到真實的地址在linux中就相對比較簡單。

  1. cat /proc/$processid/maps 

在maps里詳細記錄了進程的堆棧分配的地址,包括共享庫的地址,那么起始地址就是這個庫分配的最小地址

  1. 進程中共享庫分配的最小地址+相對地址的偏移 =真實的進程中該函數或變量的真實地址 

4. Java tool 保存的符號表

在jmap/jstack 中,為了提高讀取符號地址的性能,避免每一次要找符號的地址從elf文件中查找,只是在初始話的時候將符號表保存成哈希表,其中key是符號的名字,內容是符號的地址,長度。

具體實現可以參考 /hotspot/src/os/linux/symtab.c build_symtab_internal 函數。

原文鏈接:http://blog.csdn.net/raintungli/article/details/7289639

【系列文章】

  1. Java開源工具在linux上的源碼分析(一):跟蹤方式
  2. Java開源工具在linux上的源碼分析(二):信號處理
  3. Java開源工具在linux上的源碼分析(三):執行的線程vm thread
  4. Java開源工具在linux上的源碼分析(四):safe point
  5. Java開源工具在linux上的源碼分析(五):-F參數的bug
責任編輯:林師授 來源: raintungli的博客
相關推薦

2012-03-02 12:14:19

JavaJstackJmap

2012-03-02 12:20:21

Javajmapjstack

2012-03-02 12:31:50

Javajmapjstack

2012-03-02 12:25:07

Javajmapjstack

2012-03-02 12:38:49

Javajmapjstack

2014-08-28 10:18:36

LinuxShebang

2024-08-28 10:36:19

2017-02-09 20:56:40

iOS符號表支付寶

2022-06-26 18:09:43

Linux開源

2010-01-27 09:58:59

Linuxunix程序日志

2019-10-16 17:00:51

LinuxUbuntuVMware

2024-04-09 12:49:35

2021-03-09 11:25:04

Linux開源工具服務器

2012-05-22 00:28:21

JavaJava開源開源工具

2022-12-19 14:38:59

2022-06-06 14:20:25

個人財務開源預算

2021-08-31 09:41:57

LinuxiPhone開源工具

2021-09-01 09:47:25

Linux 工具 開發

2020-05-09 12:01:40

Linux開源軟件SDN

2019-05-23 14:36:24

LinuxSOSReportxsos
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频在线观看中文字幕 | 午夜视频一区二区 | 久久综合狠狠综合久久综合88 | 69精品久久久久久 | 91视频88av | 一区视频在线免费观看 | 久久成人国产精品 | 欧美日韩亚洲国产 | 一级毛片大全免费播放 | 国产999精品久久久 日本视频一区二区三区 | 九九九国产| 中文字幕一区二区三区在线观看 | 亚洲在线| 亚洲视频中文字幕 | 国产综合精品一区二区三区 | 婷婷成人在线 | 国产高清免费视频 | 久久久久久亚洲 | 亚洲高清免费观看 | aaa大片免费观看 | 欧美一区二 | 国产精品婷婷 | 国产精品日韩在线观看 | xxxcom在线观看 | 欧美四虎| 欧美精品 在线观看 | 丁香久久 | 久久久久久国产精品久久 | 亚洲国产区 | 精品亚洲一区二区三区四区五区 | 久久精品亚洲 | 亚洲 欧美 另类 综合 偷拍 | 国产色播av在线 | 久久一久久| 精品国产一级片 | 91精品国产综合久久久久久丝袜 | 欧美在线a| www精品美女久久久tv | www成人啪啪18 | 欧美在线一区二区三区 | 91免费看片神器 |