看看 perf 是如何作業的,用戶可以使用“perf record -e cpu-clock ./binary”之類的命令來運行二進制檔案并獲取資訊。perf 是否加載二進制檔案,進行一些配置然后運行它?如果是真的,我可以通過查看 /proc/pid/maps 來獲取某些代碼的虛擬地址嗎?我是二進制執行的菜鳥,希望大家多多指教!
uj5u.com熱心網友回復:
我可以在實際運行之前加載 elf 并從 /proc/pid/maps 獲取虛擬地址嗎?
不會。地址空間是在程式運行時構建的。“記憶體映射”是一個程序(正在運行的軟體和請求記憶體映射),而不是二進制檔案的屬性。現在基本上所有主流作業系統都使用地址空間布局隨機化(ASLR),這一點變得更加清晰!
通常,很多事情都是在你的 Cmain()甚至運行之前完成的——由加載器(ld.so在 Linux 上),但它仍然是從你的二進制檔案中執行代碼。
您的 ELF 檔案確實包含可以在固定地址加載的部分,但如上所述,ASLR 使這種情況很少見。這些天編譯的大部分代碼都是可重定位的,所以它需要知道的只是相對地址。
您的問題perf record無關緊要,但是 perf 所做的是設定一些內核空間可觀察量(主要使用 eBPF),然后定期執行二進制檔案,同時探測所述可觀察量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365932.html
上一篇:df-h給出假資料?
下一篇:cp:無法統計沒有那個檔案或目錄
