[英]Could I load elf and get virtual address from /proc/pid/maps before actually running it?
看看 perf 是如何工作的,用戶可以使用“perf record -e cpu-clock./binary”之類的命令來運行二進制文件並獲取信息。 perf 是否加載二進制文件,進行一些配置然后運行它? 如果是真的,我可以通過查看 /proc/pid/maps 來獲得某些代碼的虛擬地址嗎? 我是二進制執行的菜鳥,希望得到您的建議!
我可以在實際運行之前加載 elf 並從 /proc/pid/maps 獲取虛擬地址嗎?
不會。地址空間是在程序運行時構建的。 “內存映射”是一個過程(正在運行的軟件並請求 memory 映射),而不是二進制文件的屬性。 現在,基本上所有主流操作系統都使用地址空間布局隨機化(ASLR),這一點變得更加清楚!
通常,在您的 C main()
甚至由加載器(Linux 上的ld.so
)運行之前完成了很多工作,但這仍然是從您的二進制文件中執行代碼。
您的 ELF 文件確實包含可以在固定地址加載的部分,但如前所述,ASLR 使得這種情況很少見。 這些天編譯的大部分代碼都是可重定位的,所以它只需要知道相對地址。
您關於perf record
的問題無關緊要,但 perf 所做的是設置一些內核空間可觀察對象(主要使用 eBPF),然后定期執行二進制文件,同時探測所述可觀察對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.