簡體   English   中英

我可以在實際運行之前加載 elf 並從 /proc/pid/maps 獲取虛擬地址嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM